From 70ca4b65d58444bd2912d9e1d42eeed336b6cf50 Mon Sep 17 00:00:00 2001 From: tanderson Date: Thu, 22 Mar 2012 14:35:02 -0400 Subject: [PATCH 001/517] refine shape, face union fix * fix for circular boundary of a planar face. --- src/Mod/Part/App/modelRefine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Part/App/modelRefine.cpp b/src/Mod/Part/App/modelRefine.cpp index 3fd6082a0..1a68b8ffe 100644 --- a/src/Mod/Part/App/modelRefine.cpp +++ b/src/Mod/Part/App/modelRefine.cpp @@ -364,7 +364,7 @@ TopoDS_Face FaceTypedPlane::buildFace(const FaceVectorType &faces) const std::sort(wires.begin(), wires.end(), ModelRefine::WireSort()); - TopoDS_Face current = BRepLib_MakeFace(wires.at(0)); + TopoDS_Face current = BRepLib_MakeFace(wires.at(0), Standard_True); if (wires.size() > 1) { ShapeFix_Face faceFix(current); From 54f8375cde9ccc78d5471ebc01aba0d7fcf4e1d0 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 27 Mar 2012 12:36:11 -0300 Subject: [PATCH 002/517] Fixed #0000654 - Startpage translation --- src/Mod/Start/StartPage/StartPage.py | 647 ++++++++++++++------------- 1 file changed, 338 insertions(+), 309 deletions(-) diff --git a/src/Mod/Start/StartPage/StartPage.py b/src/Mod/Start/StartPage/StartPage.py index 26a573ba3..4ae0511e1 100644 --- a/src/Mod/Start/StartPage/StartPage.py +++ b/src/Mod/Start/StartPage/StartPage.py @@ -1,4 +1,4 @@ -import os,FreeCAD,FreeCADGui,tempfile,time,zipfile,urllib,re +import os,FreeCAD,FreeCADGui,tempfile,time,zipfile,urllib,re,cStringIO from PyQt4 import QtGui from xml.etree.ElementTree import parse @@ -6,8 +6,19 @@ FreeCADGui.addLanguagePath(":/translations") FreeCADGui.updateLocale() def translate(context,text): - "convenience function for the Qt translator" - return str(QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8).toUtf8()) + "convenience function for the Qt translator" + # return str(QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8).toUtf8()) + u = QtGui.QApplication.translate(context, text, None, + QtGui.QApplication.UnicodeUTF8).toUtf8() + s = cStringIO.StringIO() + for i in u: + if ord(i) == 39: + s.write("\\'") + else: + s.write(i) + t = s.getvalue() + s.close() + return t # texts to be translated @@ -66,144 +77,164 @@ page = """ FreeCAD - Start page + + + @@ -269,204 +300,202 @@ page = """ """ def getWebExamples(): - return """ - """ + return """ + """ def getExamples(): - return """ - """ + return """ + """ def getLinks(): - return """ - """ + return """ + """ def getWorkbenches(): - return """ - -""" + return """ + """ def getInfo(filename): - "returns available file information" + "returns available file information" - def getLocalTime(timestamp): - "returns a local time from a timestamp" - - return time.strftime("%m/%d/%Y %H:%M:%S",time.localtime(timestamp)) + def getLocalTime(timestamp): + "returns a local time from a timestamp" + return time.strftime("%m/%d/%Y %H:%M:%S",time.localtime(timestamp)) - def getSize(size): - "returns a human-readable size" - - if size > 1024*1024: - hsize = str(size/(1024*1024)) + "Mb" - elif size > 1024: - hsize = str(size/1024) + "Kb" - else: - hsize = str(size) + "b" - return hsize - - html = '

'+os.path.basename(filename)+'

' - - if os.path.exists(filename): - # get normal file info - s = os.stat(filename) - html += "

" + text33 + " " + getSize(s.st_size) + "
" - html += text34 + " " + getLocalTime(s.st_ctime) + "
" - html += text35 + " " + getLocalTime(s.st_mtime) + "
" - html += "" + text36 + " " + filename + "

" - # get additional info from fcstd files - if os.path.splitext(filename)[1] in [".fcstd",".FcStd"]: - zfile=zipfile.ZipFile(filename) - files=zfile.namelist() - # check for meta-file if it's really a FreeCAD document - if files[0] == "Document.xml": - html += "

FreeCAD Standard File

" - image="thumbnails/Thumbnail.png" - if image in files: - image=zfile.read(image) - thumbfile = tempfile.mkstemp(suffix='.png')[1] - thumb = open(thumbfile,"wb") - thumb.write(image) - thumb.close() - html += '
' + def getSize(size): + "returns a human-readable size" + if size > 1024*1024: + hsize = str(size/(1024*1024)) + "Mb" + elif size > 1024: + hsize = str(size/1024) + "Kb" else: - html += "

" + text41 + "

" - - return html + hsize = str(size) + "b" + return hsize + + html = '

'+os.path.basename(filename)+'

' + + if os.path.exists(filename): + # get normal file info + s = os.stat(filename) + html += "

" + text33 + " " + getSize(s.st_size) + "
" + html += text34 + " " + getLocalTime(s.st_ctime) + "
" + html += text35 + " " + getLocalTime(s.st_mtime) + "
" + html += "" + text36 + " " + filename + "

" + # get additional info from fcstd files + if os.path.splitext(filename)[1] in [".fcstd",".FcStd"]: + zfile=zipfile.ZipFile(filename) + files=zfile.namelist() + # check for meta-file if it's really a FreeCAD document + if files[0] == "Document.xml": + html += "

FreeCAD Standard File

" + image="thumbnails/Thumbnail.png" + if image in files: + image=zfile.read(image) + thumbfile = tempfile.mkstemp(suffix='.png')[1] + thumb = open(thumbfile,"wb") + thumb.write(image) + thumb.close() + html += '
' + else: + html += "

" + text41 + "

" + + return html def getRecentFiles(): - "returns a list of 3 latest recent files" - - rf=FreeCAD.ParamGet("User parameter:BaseApp/Preferences/RecentFiles") - ct=rf.GetInt("RecentFiles") - html = '' - return html + "returns a list of 3 latest recent files" + rf = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/RecentFiles") + ct = rf.GetInt("RecentFiles") + html = '' + return html def getFeed(url,numitems=3): - "returns a html list with links from the given RSS feed url" - xml = parse(urllib.urlopen(url)).getroot() - items = [] - channel = xml.find('channel') - for element in channel.findall('item'): - items.append({ - 'title': element.find('title').text, - 'description': element.find('description').text, - 'link': element.find('link').text, - }) - if len(items) > numitems: - items = items[:numitems] - resp = '' - print resp - return resp + "returns a html list with links from the given RSS feed url" + xml = parse(urllib.urlopen(url)).getroot() + items = [] + channel = xml.find('channel') + for element in channel.findall('item'): + items.append({'title': element.find('title').text, + 'description': element.find('description').text, + 'link': element.find('link').text}) + if len(items) > numitems: + items = items[:numitems] + resp = '' + print resp + return resp def getCustomBlocks(): - "fetches custom html files in FreeCAD user dir" - output = "" - return output + "fetches custom html files in FreeCAD user dir" + output = "" + return output def handle(): - "returns the complete html startpage" - - # add recent files - recentfiles = getRecentFiles() - html = page.replace("recentfiles",recentfiles) + "returns the complete html startpage" + + # add recent files + recentfiles = getRecentFiles() + html = page.replace("recentfiles",recentfiles) - # add default workbenches - html = html.replace("defaultworkbenches",getWorkbenches()) + # add default workbenches + html = html.replace("defaultworkbenches",getWorkbenches()) - # add default web links - html = html.replace("defaultlinks",getLinks()) + # add default web links + html = html.replace("defaultlinks",getLinks()) - # add default examples - html = html.replace("defaultexamples",getExamples()) + # add default examples + html = html.replace("defaultexamples",getExamples()) - # add web examples - #html = html.replace("webexamples",getWebExamples()) + # add web examples + #html = html.replace("webexamples",getWebExamples()) + + # add custom blocks + html = html.replace("customblocks",getCustomBlocks()) + + return html - # add custom blocks - html = html.replace("customblocks",getCustomBlocks()) - - return html - From 334aace3a9acc3d0e6934edf96b004230de72da9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 27 Mar 2012 19:43:39 +0200 Subject: [PATCH 003/517] Fix Makefile.am --- src/Gui/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Gui/Makefile.am b/src/Gui/Makefile.am index 1cf4fcc16..c714f4913 100644 --- a/src/Gui/Makefile.am +++ b/src/Gui/Makefile.am @@ -48,6 +48,7 @@ BUILT_SOURCES=\ moc_HelpView.cpp \ moc_InputVector.cpp \ moc_MainWindow.cpp \ + moc_ManualAlignment.cpp \ moc_NetworkRetriever.cpp \ moc_OnlineDocumentation.cpp \ moc_Placement.cpp \ @@ -282,6 +283,8 @@ libFreeCADGui_la_SOURCES=\ Placement.h \ Macro.cpp \ MainWindow.cpp \ + ManualAlignment.cpp \ + ManualAlignment.h \ MDIView.cpp \ MenuManager.cpp \ MergeDocuments.cpp \ From c1886bf24d935ac799651af45c9b163293c62bea Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 28 Mar 2012 15:07:28 +0200 Subject: [PATCH 004/517] Fix crash in TopoShapeface.getWire() --- src/Mod/Part/App/TopoShapeFacePyImp.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Mod/Part/App/TopoShapeFacePyImp.cpp b/src/Mod/Part/App/TopoShapeFacePyImp.cpp index 9c65d51f2..ab03bb14c 100644 --- a/src/Mod/Part/App/TopoShapeFacePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeFacePyImp.cpp @@ -550,14 +550,16 @@ Py::Tuple TopoShapeFacePy::getParameterRange(void) const Py::Object TopoShapeFacePy::getWire(void) const { - TopoDS_Shape clSh = getTopoShapePtr()->_Shape; + const TopoDS_Shape& clSh = getTopoShapePtr()->_Shape; + if (clSh.IsNull()) + throw Py::Exception("Null shape"); if (clSh.ShapeType() == TopAbs_FACE) { TopoDS_Face clFace = (TopoDS_Face&)clSh; TopoDS_Wire clWire = ShapeAnalysis::OuterWire(clFace); return Py::Object(new TopoShapeWirePy(new TopoShape(clWire)),true); } else - throw "Internal error, TopoDS_Shape is not a face!"; + throw Py::Exception("Internal error, TopoDS_Shape is not a face!"); return Py::Object(); } From 9656a989b2f11db03f182aae5065b3506e638c22 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 28 Mar 2012 10:39:10 -0300 Subject: [PATCH 005/517] Added 0000650 - Placement.isNull() function --- src/Base/PlacementPy.xml | 8 ++++++++ src/Base/PlacementPyImp.cpp | 33 +++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/Base/PlacementPy.xml b/src/Base/PlacementPy.xml index 3ccb012a3..9a78c2367 100644 --- a/src/Base/PlacementPy.xml +++ b/src/Base/PlacementPy.xml @@ -75,6 +75,14 @@ Placement(Base, Axis, Angle) -- define position and rotation + + + + isNull() -> Bool + returns True if the placement has no displacement and no rotation + + + Vector to the Base Position of the Placement diff --git a/src/Base/PlacementPyImp.cpp b/src/Base/PlacementPyImp.cpp index 7e1dece97..6a3f7956e 100644 --- a/src/Base/PlacementPyImp.cpp +++ b/src/Base/PlacementPyImp.cpp @@ -83,9 +83,9 @@ int PlacementPy::PyInit(PyObject* args, PyObject* /*kwd*/) PyObject* d; double angle; if (PyArg_ParseTuple(args, "O!O!d", &(Base::VectorPy::Type), &o, - &(Base::VectorPy::Type), &d, &angle)) { - // NOTE: The first parameter defines the translation, the second the rotation axis - // and the last parameter defines the rotation angle in degree. + &(Base::VectorPy::Type), &d, &angle)) { + // NOTE: The first parameter defines the translation, the second the rotation axis + // and the last parameter defines the rotation angle in degree. Base::Rotation rot(static_cast(d)->value(), angle/180.0*D_PI); *getPlacementPtr() = Base::Placement(static_cast(o)->value(),rot); return 0; @@ -145,13 +145,13 @@ PyObject* PlacementPy::multVec(PyObject * args) getPlacementPtr()->multVec(pnt, pnt); return new VectorPy(new Vector3d(pnt)); } - -PyObject* PlacementPy::copy(PyObject * args) -{ - if (!PyArg_ParseTuple(args, "")) - return NULL; - return new PlacementPy(new Placement(*getPlacementPtr())); -} + +PyObject* PlacementPy::copy(PyObject * args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + return new PlacementPy(new Placement(*getPlacementPtr())); +} PyObject* PlacementPy::toMatrix(PyObject * args) { @@ -169,6 +169,19 @@ PyObject* PlacementPy::inverse(PyObject * args) return new PlacementPy(new Placement(p)); } +PyObject* PlacementPy::isNull(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + Base::Vector3d pos = getPlacementPtr()->getPosition(); + Base::Rotation rot = getPlacementPtr()->getRotation(); + Base::Vector3d nullvec(0,0,0); + Base::Rotation nullrot(0,0,0,1); + Base::Rotation nullrotinv(0,0,0,-1); + bool null = (pos == nullvec) & ((rot == nullrot) | (rot == nullrotinv)); + return Py_BuildValue("O", (null ? Py_True : Py_False)); +} + Py::Object PlacementPy::getBase(void) const { return Py::Vector(getPlacementPtr()->getPosition()); From ee3201793c8b08f6a5445dbda3cc6de54aab5985 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 28 Mar 2012 10:45:17 -0300 Subject: [PATCH 006/517] Fixed 000655 - Draft dimension default size --- src/Mod/Draft/DraftTools.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 6153ee32f..f5c056ed7 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -80,6 +80,7 @@ if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/").HasGroup("Dra p.SetBool("alwaysSnap",1) p.SetBool("showSnapBar",1) p.SetUnsigned("constructioncolor",746455039) + p.SetFloat("textheight",0.2) #--------------------------------------------------------------------------- # General functions From 6775e67d9078a0387bae7d2f3bcd0258edcf9de2 Mon Sep 17 00:00:00 2001 From: jriegel Date: Wed, 28 Mar 2012 18:29:27 +0200 Subject: [PATCH 007/517] fix in libPack install for windows --- src/WindowsInstaller/LibPack.wxs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/WindowsInstaller/LibPack.wxs b/src/WindowsInstaller/LibPack.wxs index cbe94cdc6..37b4da8ce 100644 --- a/src/WindowsInstaller/LibPack.wxs +++ b/src/WindowsInstaller/LibPack.wxs @@ -71,6 +71,10 @@ + + + + + + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="edit-select-all.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + version="1.1"> - + id="defs2982"> + id="linearGradient4590"> + id="stop4592" /> + id="stop4594" /> + + + + + + + + - - - - - - - - - - + gradientTransform="matrix(0.6028459,1.0471639,-1.9794021,1.1395295,127.9588,-74.456907)" + cx="51.328892" + cy="31.074146" + fx="51.328892" + fy="31.074146" + r="19.571428" /> + + + xlink:href="#linearGradient3864" + id="radialGradient2890" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.58019421,1.0078171,-1.9050269,1.0967121,-8.5316607,-197.0902)" + cx="51.328892" + cy="31.074146" + fx="51.328892" + fy="31.074146" + r="19.571428" /> + + + inkscape:collect="always" + xlink:href="#linearGradient3811" + id="linearGradient3817" + x1="36.870125" + y1="30.196993" + x2="3.3695574" + y2="39.373768" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.27764843,-1.1190823,1.1190823,0.27764843,-10.424279,50.285999)" /> + + + id="stop3813-8" /> - + id="stop3815-7" /> + gradientTransform="translate(0,8)" /> + + + + + + + + + + + + inkscape:window-height="758" + inkscape:window-x="0" + inkscape:window-y="19" + inkscape:window-maximized="0" /> + id="metadata2985"> image/svg+xml - Select All - - - - Andreas Nilsson - - - - - select - all - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/src/Gui/Icons/edit-select-box.svg b/src/Gui/Icons/edit-select-box.svg new file mode 100755 index 000000000..abaf58cbe --- /dev/null +++ b/src/Gui/Icons/edit-select-box.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/Gui/Icons/resource.qrc b/src/Gui/Icons/resource.qrc index 82548cd39..2114905a6 100644 --- a/src/Gui/Icons/resource.qrc +++ b/src/Gui/Icons/resource.qrc @@ -43,6 +43,7 @@ edit-delete.svg edit-paste.svg edit-select-all.svg + edit-select-box.svg edit-redo.svg edit-undo.svg edit-edit.svg From a6aa5d1bd81329f3a4ab5d89d5d238faa97725ce Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 28 Apr 2012 18:05:07 -0300 Subject: [PATCH 111/517] Fixed bug in Arch Axes --- src/Mod/Arch/ArchAxis.py | 98 +++++++++++++++++++++----------------- src/Mod/Draft/DraftSnap.py | 1 + 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index 367ec4788..a56a50ff2 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -104,8 +104,6 @@ class _ViewProviderAxis: vobj.addProperty("App::PropertyEnumeration","NumerationStyle","Base", "The numeration style") vobj.NumerationStyle = ["1,2,3","01,02,03","001,002,003","A,B,C","a,b,c","I,II,III","L0,L1,L2"] vobj.Proxy = self - self.Object = vobj.Object - self.ViewObject = vobj vobj.BubbleSize = .1 vobj.LineWidth = 1 vobj.LineColor = (0.13,0.15,0.37) @@ -119,6 +117,7 @@ class _ViewProviderAxis: def attach(self, vobj): self.ViewObject = vobj + self.Object = vobj.Object self.bubbles = None def getNumber(self,num): @@ -162,48 +161,59 @@ class _ViewProviderAxis: def makeBubbles(self): import Part - rn = self.ViewObject.RootNode.getChild(2).getChild(0).getChild(0) - if self.bubbles: - rn.removeChild(self.bubbles) - self.bubbles = None - self.bubbles = coin.SoSeparator() - isep = coin.SoSeparator() - self.bubblestyle = coin.SoDrawStyle() - self.bubblestyle.linePattern = 0xffff - self.bubbles.addChild(self.bubblestyle) - for i in range(len(self.ViewObject.Object.Distances)): - invpl = self.ViewObject.Object.Placement.inverse() - verts = self.ViewObject.Object.Shape.Edges[i].Vertexes - p1 = invpl.multVec(verts[0].Point) - p2 = invpl.multVec(verts[1].Point) - dv = p2.sub(p1) - dv.normalize() - rad = self.ViewObject.BubbleSize - center = p2.add(dv.scale(rad,rad,rad)) - ts = Part.makeCircle(rad,center).writeInventor() - cin = coin.SoInput() - cin.setBuffer(ts) - cob = coin.SoDB.readAll(cin) - co = cob.getChild(1).getChild(0).getChild(2) - li = cob.getChild(1).getChild(0).getChild(3) - self.bubbles.addChild(co) - self.bubbles.addChild(li) - st = coin.SoSeparator() - tr = coin.SoTransform() - tr.translation.setValue((center.x,center.y-rad/4,center.z)) - fo = coin.SoFont() - fo.name = "Arial,Sans" - fo.size = rad*100 - tx = coin.SoText2() - tx.justification = coin.SoText2.CENTER - tx.string = self.getNumber(i) - st.addChild(tr) - st.addChild(fo) - st.addChild(tx) - isep.addChild(st) - self.bubbles.addChild(isep) - rn.addChild(self.bubbles) - + + def getNode(): + # make sure we already have the complete node built + r = self.ViewObject.RootNode + if r.getChildren().getLength() > 2: + if r.getChild(2).getChildren().getLength() > 0: + if r.getChild(2).getChild(0).getChildren().getLength() > 0: + return self.ViewObject.RootNode.getChild(2).getChild(0).getChild(0) + return None + + rn = getNode() + if rn: + if self.bubbles: + rn.removeChild(self.bubbles) + self.bubbles = None + self.bubbles = coin.SoSeparator() + isep = coin.SoSeparator() + self.bubblestyle = coin.SoDrawStyle() + self.bubblestyle.linePattern = 0xffff + self.bubbles.addChild(self.bubblestyle) + for i in range(len(self.ViewObject.Object.Distances)): + invpl = self.ViewObject.Object.Placement.inverse() + verts = self.ViewObject.Object.Shape.Edges[i].Vertexes + p1 = invpl.multVec(verts[0].Point) + p2 = invpl.multVec(verts[1].Point) + dv = p2.sub(p1) + dv.normalize() + rad = self.ViewObject.BubbleSize + center = p2.add(dv.scale(rad,rad,rad)) + ts = Part.makeCircle(rad,center).writeInventor() + cin = coin.SoInput() + cin.setBuffer(ts) + cob = coin.SoDB.readAll(cin) + co = cob.getChild(1).getChild(0).getChild(2) + li = cob.getChild(1).getChild(0).getChild(3) + self.bubbles.addChild(co) + self.bubbles.addChild(li) + st = coin.SoSeparator() + tr = coin.SoTransform() + tr.translation.setValue((center.x,center.y-rad/4,center.z)) + fo = coin.SoFont() + fo.name = "Arial,Sans" + fo.size = rad*100 + tx = coin.SoText2() + tx.justification = coin.SoText2.CENTER + tx.string = self.getNumber(i) + st.addChild(tr) + st.addChild(fo) + st.addChild(tx) + isep.addChild(st) + self.bubbles.addChild(isep) + rn.addChild(self.bubbles) + def updateData(self, obj, prop): if prop == "Shape": self.makeBubbles() diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index c4a3e7139..4ded2583d 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -736,6 +736,7 @@ class Snapper: import inspect self.pt = None + self.lastSnappedObject = None self.ui = FreeCADGui.draftToolBar self.view = Draft.get3DView() From add5f9d154f28a2976ec8a4fd7f58ac7839df9ab Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 30 Apr 2012 11:36:48 +0200 Subject: [PATCH 112/517] 0000687: sandbox module automake patch --- src/Gui/Icons/Makefile.am | 1 + src/Mod/Sandbox/Gui/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Gui/Icons/Makefile.am b/src/Gui/Icons/Makefile.am index 70c30f0f4..9be01aa6c 100644 --- a/src/Gui/Icons/Makefile.am +++ b/src/Gui/Icons/Makefile.am @@ -58,6 +58,7 @@ EXTRA_DIST = \ edit-delete.svg \ edit-paste.svg \ edit-select-all.svg \ + edit-select-box.svg \ edit-redo.svg \ edit-undo.svg \ preferences-system.svg \ diff --git a/src/Mod/Sandbox/Gui/Makefile.am b/src/Mod/Sandbox/Gui/Makefile.am index 87a548f3d..c936b9cc3 100644 --- a/src/Mod/Sandbox/Gui/Makefile.am +++ b/src/Mod/Sandbox/Gui/Makefile.am @@ -13,7 +13,7 @@ libSandboxGui_la_LDFLAGS = -L../../../Base -L../../../App -L../../../Gui -L../.. $(sim_ac_coin_ldflags) $(sim_ac_coin_libs) $(sim_ac_soqt_ldflags) $(sim_ac_soqt_libs) \ $(QT_LIBS) $(all_libraries) -version-info @LIB_CURRENT@:@LIB_REVISION@:@LIB_AGE@ -libSandboxGui_la_CPPFLAGS = -DSandboxAppExport= -DSandboxGuiExport= +libSandboxGui_la_CPPFLAGS = $(sim_ac_coin_cppflags) -DSandboxAppExport= -DSandboxGuiExport= libSandboxGui_la_LIBADD = \ @BOOST_SYSTEM_LIB@ \ From 5586348adef2a9f227a8eb3c9b5467a61f579842 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 30 Apr 2012 17:15:43 +0200 Subject: [PATCH 113/517] locale stuff --- src/Gui/DlgGeneralImp.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index a908d04b9..e1e5302b3 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -180,7 +180,12 @@ void DlgGeneralImp::loadSettings() TStringList list = Translator::instance()->supportedLanguages(); for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { QByteArray lang = it->c_str(); +#if QT_VERSION >= 0x040800 + QLocale locale(QString::fromAscii(lang.constData())); + Languages->addItem(locale.nativeCountryName(), lang); +#else Languages->addItem(Gui::Translator::tr(lang.constData()), lang); +#endif if (language == lang) { Languages->setCurrentIndex(index); } From 95cf62b9901bfe5b9184282a083504b1a70b89c5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 30 Apr 2012 18:02:22 +0200 Subject: [PATCH 114/517] locale stuff --- src/Gui/DlgGeneralImp.cpp | 23 +++++++++++++++-------- src/Gui/Language/Translator.cpp | 16 ++++++++++++++++ src/Gui/Language/Translator.h | 2 ++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index e1e5302b3..1c52b875f 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -177,19 +177,26 @@ void DlgGeneralImp::loadSettings() QByteArray language = hGrp->GetASCII("Language", (const char*)lang.toAscii()).c_str(); Languages->addItem(Gui::Translator::tr("English"), QByteArray("English")); int index = 1; - TStringList list = Translator::instance()->supportedLanguages(); - for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { - QByteArray lang = it->c_str(); #if QT_VERSION >= 0x040800 - QLocale locale(QString::fromAscii(lang.constData())); - Languages->addItem(locale.nativeCountryName(), lang); -#else - Languages->addItem(Gui::Translator::tr(lang.constData()), lang); -#endif + TStringList list = Translator::instance()->supportedLocales(); + for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { + QLocale locale(QString::fromAscii(it->c_str())); + QByteArray lang = QLocale::languageToString(locale.language()).toAscii(); + Languages->addItem(locale.nativeLanguageName(), lang); if (language == lang) { Languages->setCurrentIndex(index); } } +#else + TStringList list = Translator::instance()->supportedLanguages(); + for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { + QByteArray lang = it->c_str(); + Languages->addItem(Gui::Translator::tr(lang.constData()), lang); + if (language == lang) { + Languages->setCurrentIndex(index); + } + } +#endif int size = QApplication::style()->pixelMetric(QStyle::PM_ToolBarIconSize); int current = getMainWindow()->iconSize().width(); diff --git a/src/Gui/Language/Translator.cpp b/src/Gui/Language/Translator.cpp index b32401875..0b7103f6e 100644 --- a/src/Gui/Language/Translator.cpp +++ b/src/Gui/Language/Translator.cpp @@ -174,6 +174,22 @@ TStringList Translator::supportedLanguages() const return languages; } +TStringList Translator::supportedLocales() const +{ + // List all .qm files + TStringList languages; + QDir dir(QLatin1String(":/translations")); + for (std::map::const_iterator it = d->mapLanguageTopLevelDomain.begin(); + it != d->mapLanguageTopLevelDomain.end(); ++it) { + QString filter = QString::fromAscii("*_%1.qm").arg(QLatin1String(it->second.c_str())); + QStringList fileNames = dir.entryList(QStringList(filter), QDir::Files, QDir::Name); + if (!fileNames.isEmpty()) + languages.push_back(it->second); + } + + return languages; +} + void Translator::activateLanguage (const char* lang) { removeTranslators(); // remove the currently installed translators diff --git a/src/Gui/Language/Translator.h b/src/Gui/Language/Translator.h index 7ce7905bb..2bccff06e 100644 --- a/src/Gui/Language/Translator.h +++ b/src/Gui/Language/Translator.h @@ -65,6 +65,8 @@ public: std::string activeLanguage() const; /** Returns a list of supported languages. */ TStringList supportedLanguages() const; + /** Returns a list of supported locales. */ + TStringList supportedLocales() const; /** Adds a path where localization files can be found */ void addPath(const QString& path); From da1a42e2ee858da886fd40e2e600fc9f0d1cc299 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 30 Apr 2012 18:30:29 +0200 Subject: [PATCH 115/517] locale stuff --- src/Gui/DlgGeneralImp.cpp | 34 ++++++++++++++++----------------- src/Gui/Language/Translator.cpp | 6 +++--- src/Gui/Language/Translator.h | 5 +++-- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index 1c52b875f..920baaa0c 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -175,28 +175,26 @@ void DlgGeneralImp::loadSettings() ParameterGrp::handle hGrp = WindowParameter::getDefaultParameter()->GetGroup("General"); QString lang = QLocale::languageToString(QLocale::system().language()); QByteArray language = hGrp->GetASCII("Language", (const char*)lang.toAscii()).c_str(); - Languages->addItem(Gui::Translator::tr("English"), QByteArray("English")); int index = 1; + Languages->addItem(QString::fromAscii("English"), QByteArray("English")); + TStringMap list = Translator::instance()->supportedLocales(); + for (TStringMap::iterator it = list.begin(); it != list.end(); ++it, index++) { + QLocale locale(QString::fromAscii(it->second.c_str())); + QByteArray lang = it->first.c_str(); + QString langname = QString::fromAscii(lang.constData()); #if QT_VERSION >= 0x040800 - TStringList list = Translator::instance()->supportedLocales(); - for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { - QLocale locale(QString::fromAscii(it->c_str())); - QByteArray lang = QLocale::languageToString(locale.language()).toAscii(); - Languages->addItem(locale.nativeLanguageName(), lang); - if (language == lang) { - Languages->setCurrentIndex(index); + QString native = locale.nativeLanguageName(); + if (!native.isEmpty()) { + if (native[0].isLetter()) + native[0] = native[0].toUpper(); + langname = native; } - } -#else - TStringList list = Translator::instance()->supportedLanguages(); - for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { - QByteArray lang = it->c_str(); - Languages->addItem(Gui::Translator::tr(lang.constData()), lang); - if (language == lang) { - Languages->setCurrentIndex(index); - } - } #endif + Languages->addItem(langname, lang); + if (language == lang) { + Languages->setCurrentIndex(index); + } + } int size = QApplication::style()->pixelMetric(QStyle::PM_ToolBarIconSize); int current = getMainWindow()->iconSize().width(); diff --git a/src/Gui/Language/Translator.cpp b/src/Gui/Language/Translator.cpp index 0b7103f6e..d48c1ec3f 100644 --- a/src/Gui/Language/Translator.cpp +++ b/src/Gui/Language/Translator.cpp @@ -174,17 +174,17 @@ TStringList Translator::supportedLanguages() const return languages; } -TStringList Translator::supportedLocales() const +TStringMap Translator::supportedLocales() const { // List all .qm files - TStringList languages; + TStringMap languages; QDir dir(QLatin1String(":/translations")); for (std::map::const_iterator it = d->mapLanguageTopLevelDomain.begin(); it != d->mapLanguageTopLevelDomain.end(); ++it) { QString filter = QString::fromAscii("*_%1.qm").arg(QLatin1String(it->second.c_str())); QStringList fileNames = dir.entryList(QStringList(filter), QDir::Files, QDir::Name); if (!fileNames.isEmpty()) - languages.push_back(it->second); + languages[it->first] = it->second; } return languages; diff --git a/src/Gui/Language/Translator.h b/src/Gui/Language/Translator.h index 2bccff06e..30f4543c1 100644 --- a/src/Gui/Language/Translator.h +++ b/src/Gui/Language/Translator.h @@ -34,6 +34,7 @@ class QDir; namespace Gui { typedef std::list TStringList; +typedef std::map TStringMap; /** * The Translator class uses Qt's QTranslator objects to change the language of the application @@ -65,8 +66,8 @@ public: std::string activeLanguage() const; /** Returns a list of supported languages. */ TStringList supportedLanguages() const; - /** Returns a list of supported locales. */ - TStringList supportedLocales() const; + /** Returns a map of supported languages/locales. */ + TStringMap supportedLocales() const; /** Adds a path where localization files can be found */ void addPath(const QString& path); From 3baa98cd906484c7e9225d5845d426d05c2dd183 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 30 Apr 2012 16:24:14 -0300 Subject: [PATCH 116/517] Fixed 0000660: Draft radial dimensions --- src/Mod/Draft/Draft.py | 24 +++++++---- src/Mod/Draft/DraftSnap.py | 22 +++++----- src/Mod/Draft/DraftTools.py | 70 ++++++++++++++++---------------- src/Mod/Draft/draftlibs/fcgeo.py | 2 +- 4 files changed, 64 insertions(+), 54 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 381a34a5a..89cbb15fe 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -451,13 +451,25 @@ def makeDimension(p1,p2,p3=None,p4=None): ''' obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython","Dimension") _Dimension(obj) + if gui: + _ViewProviderDimension(obj.ViewObject) if isinstance(p1,Vector) and isinstance(p2,Vector): obj.Start = p1 obj.End = p2 + if not p3: + p3 = p2.sub(p1) + p3.multiply(0.5) + p3 = p1.add(p3) elif isinstance(p2,int) and isinstance(p3,int): obj.Base = p1 - obj.LinkedVertices = [p2,p3] + obj.LinkedVertices = idx = [p2,p3] p3 = p4 + if not p3: + v1 = obj.Base.Shape.Vertexes[idx[0]].Point + v2 = obj.Base.Shape.Vertexes[idx[1]].Point + p3 = v2.sub(v1) + p3.multiply(0.5) + p3 = v1.add(p3) elif isinstance(p3,str): obj.Base = p1 if p3 == "radius": @@ -467,13 +479,10 @@ def makeDimension(p1,p2,p3=None,p4=None): obj.LinkedVertices = [p2,2,1] obj.ViewObject.Override = "ddim" p3 = p4 - if not p3: - p3 = p2.sub(p1) - p3.multiply(0.5) - p3 = p1.add(p3) + if not p3: + p3 = obj.Base.Shape.Edges[0].Curve.Center.add(Vector(1,0,0)) obj.Dimline = p3 if gui: - _ViewProviderDimension(obj.ViewObject) formatObject(obj) select(obj) FreeCAD.ActiveDocument.recompute() @@ -1806,7 +1815,8 @@ class _ViewProviderDimension: proj = ed.cross(Vector(0,0,1)) if not proj: norm = Vector(0,0,1) else: norm = fcvec.neg(p3.sub(p2).cross(proj)) - norm.normalize() + if not fcvec.isNull(norm): + norm.normalize() va = get3DView().getViewDirection() if va.getAngle(norm) < math.pi/2: norm = fcvec.neg(norm) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 4ded2583d..50a0b19ba 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -71,6 +71,7 @@ class Snapper: self.grid = None self.constrainLine = None self.trackLine = None + self.snapInfo = None self.lastSnappedObject = None self.active = True self.trackers = [[],[],[],[]] # view, grid, snap, extline @@ -132,6 +133,7 @@ class Snapper: return point snaps = [] + self.snapInfo = None # type conversion if needed if isinstance(screenpos,list): @@ -186,7 +188,7 @@ class Snapper: point = self.getApparentPoint(screenpos[0],screenpos[1]) # check if we snapped to something - info = Draft.get3DView().getObjectInfo((screenpos[0],screenpos[1])) + self.snapInfo = Draft.get3DView().getObjectInfo((screenpos[0],screenpos[1])) # checking if parallel to one of the edges of the last objects or to a polar direction @@ -195,7 +197,7 @@ class Snapper: point,eline = self.snapToPolar(point,lastpoint) point,eline = self.snapToExtensions(point,lastpoint,constrain,eline) - if not info: + if not self.snapInfo: # nothing has been snapped, check fro grid snap if active: @@ -206,7 +208,7 @@ class Snapper: # we have an object to snap to - obj = FreeCAD.ActiveDocument.getObject(info['Object']) + obj = FreeCAD.ActiveDocument.getObject(self.snapInfo['Object']) if not obj: return cstr(point) @@ -219,12 +221,12 @@ class Snapper: if not active: # passive snapping - snaps = [self.snapToVertex(info)] + snaps = [self.snapToVertex(self.snapInfo)] else: # active snapping - comp = info['Component'] + comp = self.snapInfo['Component'] if (Draft.getType(obj) == "Wall") and not oldActive: edges = [] @@ -258,13 +260,13 @@ class Snapper: elif "Vertex" in comp: # directly snapped to a vertex - snaps.append(self.snapToVertex(info,active=True)) + snaps.append(self.snapToVertex(self.snapInfo,active=True)) elif comp == '': # workaround for the new view provider - snaps.append(self.snapToVertex(info,active=True)) + snaps.append(self.snapToVertex(self.snapInfo,active=True)) else: # all other cases (face, etc...) default to passive snap - snapArray = [self.snapToVertex(info)] + snapArray = [self.snapToVertex(self.snapInfo)] elif Draft.getType(obj) == "Dimension": # for dimensions we snap to their 3 points @@ -290,7 +292,7 @@ class Snapper: # calculating the nearest snap point shortest = 1000000000000000000 - origin = Vector(info['x'],info['y'],info['z']) + origin = Vector(self.snapInfo['x'],self.snapInfo['y'],self.snapInfo['z']) winner = [Vector(0,0,0),None,Vector(0,0,0)] for snap in snaps: # if snap[0] == None: print "debug: Snapper: 'i[0]' is 'None'" @@ -304,7 +306,7 @@ class Snapper: dv = point.sub(winner[2]) if (dv.Length > self.radius): if (not oldActive) and self.isEnabled("passive"): - winner = self.snapToVertex(info) + winner = self.snapToVertex(self.snapInfo) # setting the cursors if self.tracker: diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 1502a6775..e0e767564 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -143,7 +143,7 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True): amod = hasMod(args,MODSNAP) cmod = hasMod(args,MODCONSTRAIN) point = FreeCADGui.Snapper.snap(args["Position"],lastpoint=last,active=amod,constrain=cmod) - + info = FreeCADGui.Snapper.snapInfo # project onto working plane if needed if (not plane.weak) and workingplane: # working plane was explicitely selected - project onto it @@ -168,7 +168,7 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True): else: ui.displayPoint(point, target.node[-1], plane=plane, mask=mask) else: ui.displayPoint(point, plane=plane, mask=mask) - return point,ctrlPoint + return point,ctrlPoint,info def getSupport(args): "returns the supporting object and sets the working plane" @@ -436,7 +436,7 @@ class Line(Creator): self.finish() elif arg["Type"] == "SoLocation2Event": # mouse movement detection - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.ui.cross(True) self.linetrack.p2(point) elif arg["Type"] == "SoMouseButtonEvent": @@ -446,7 +446,7 @@ class Line(Creator): self.finish(False,cont=True) else: if not self.node: self.support = getSupport(arg) - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.pos = arg["Position"] self.node.append(point) self.linetrack.p1(point) @@ -551,7 +551,7 @@ class BSpline(Line): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.ui.cross(True) self.bsplinetrack.update(self.node + [point]) # Draw constraint tracker line. @@ -566,7 +566,7 @@ class BSpline(Line): self.finish(False,cont=True) else: if not self.node: self.support = getSupport(arg) - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.pos = arg["Position"] self.node.append(point) self.drawUpdate(point) @@ -739,7 +739,7 @@ class Rectangle(Creator): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection - point,ctrlPoint = getPoint(self,arg,mobile=True) + point,ctrlPoint,info = getPoint(self,arg,mobile=True) self.rect.update(point) self.ui.cross(True) elif arg["Type"] == "SoMouseButtonEvent": @@ -748,7 +748,7 @@ class Rectangle(Creator): self.finish() else: if not self.node: self.support = getSupport(arg) - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.appendPoint(point) def numericInput(self,numx,numy,numz): @@ -840,7 +840,7 @@ class Arc(Creator): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen self.ui.cross(True) if self.center and fcvec.dist(point,self.center) > 0: @@ -871,10 +871,9 @@ class Arc(Creator): if not self.altdown: self.ui.cross(False) self.altdown = True - snapped = self.view.getObjectInfo((arg["Position"][0],arg["Position"][1])) - if snapped: - ob = self.doc.getObject(snapped['Object']) - num = int(snapped['Component'].lstrip('Edge'))-1 + if info: + ob = self.doc.getObject(info['Object']) + num = int(info['Component'].lstrip('Edge'))-1 ed = ob.Shape.Edges[num] if len(self.tangents) == 2: cir = fcgeo.circleFrom3tan(self.tangents[0], self.tangents[1], ed) @@ -937,7 +936,7 @@ class Arc(Creator): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen if self.center and fcvec.dist(point,self.center) > 0: viewdelta = fcvec.project(point.sub(self.center), plane.axis) @@ -1132,7 +1131,7 @@ class Polygon(Creator): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen self.ui.cross(True) if self.center and fcvec.dist(point,self.center) > 0: @@ -1197,7 +1196,7 @@ class Polygon(Creator): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen if self.center and fcvec.dist(point,self.center) > 0: viewdelta = fcvec.project(point.sub(self.center), plane.axis) @@ -1317,10 +1316,10 @@ class Text(Creator): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,dtrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.node.append(point) self.ui.textUi() self.ui.textValue.setFocus() @@ -1452,7 +1451,7 @@ class Dimension(Creator): shift = hasMod(arg,MODCONSTRAIN) if self.arcmode or self.point2: setMod(arg,MODCONSTRAIN,False) - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.ui.cross(True) if hasMod(arg,MODALT) and (len(self.node)<3): self.ui.cross(False) @@ -1536,15 +1535,14 @@ class Dimension(Creator): self.dimtrack.update(self.node+[point]+[self.cont]) elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) if not self.node: self.support = getSupport(arg) if hasMod(arg,MODALT) and (len(self.node)<3): - snapped = self.view.getObjectInfo((arg["Position"][0],arg["Position"][1])) - print "snapped: ",snapped - if snapped: - ob = self.doc.getObject(snapped['Object']) - if 'Edge' in snapped['Component']: - num = int(snapped['Component'].lstrip('Edge'))-1 + print "snapped: ",info + if info: + ob = self.doc.getObject(info['Object']) + if 'Edge' in info['Component']: + num = int(info['Component'].lstrip('Edge'))-1 ed = ob.Shape.Edges[num] v1 = ed.Vertexes[0].Point v2 = ed.Vertexes[-1].Point @@ -1761,7 +1759,7 @@ class Move(Modifier): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.linetrack.p2(point) self.ui.cross(True) # Draw constraint tracker line. @@ -1778,7 +1776,7 @@ class Move(Modifier): if not hasMod(arg,MODALT): self.finish() elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) if (self.node == []): self.node.append(point) self.ui.isRelative.show() @@ -1922,7 +1920,7 @@ class Rotate(Modifier): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.ui.cross(True) # this is to make sure radius is what you see on screen if self.center and fcvec.dist(point,self.center): @@ -1977,7 +1975,7 @@ class Rotate(Modifier): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) if self.center and fcvec.dist(point,self.center): viewdelta = fcvec.project(point.sub(self.center), plane.axis) if not fcvec.isNull(viewdelta): point = point.add(fcvec.neg(viewdelta)) @@ -2119,7 +2117,7 @@ class Offset(Modifier): self.finish() elif arg["Type"] == "SoLocation2Event": self.ui.cross(True) - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) if hasMod(arg,MODCONSTRAIN) and self.constrainSeg: dist = fcgeo.findPerpendicular(point,self.shape,self.constrainSeg[1]) e = self.shape.Edges[self.constrainSeg[1]] @@ -2663,7 +2661,7 @@ class Trimex(Modifier): self.shift = hasMod(arg,MODCONSTRAIN) self.alt = hasMod(arg,MODALT) wp = not(self.extrudeMode and self.shift) - self.point = getPoint(self,arg,workingplane=wp)[0] + self.point,info = getPoint(self,arg,workingplane=wp)[0] if hasMod(arg,MODSNAP): self.snapped = None else: self.snapped = self.view.getObjectInfo((arg["Position"][0],arg["Position"][1])) if self.extrudeMode: @@ -2929,7 +2927,7 @@ class Scale(Modifier): if arg["Key"] == "ESCAPE": self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection - point,ctrlPoint = getPoint(self,arg,sym=True) + point,ctrlPoint,info = getPoint(self,arg,sym=True) self.linetrack.p2(point) self.ui.cross(True) # Draw constraint tracker line. @@ -2950,7 +2948,7 @@ class Scale(Modifier): if not hasMod(arg,MODALT): self.finish() elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - point,ctrlPoint = getPoint(self,arg,sym=True) + point,ctrlPoint,info = getPoint(self,arg,sym=True) if (self.node == []): self.node.append(point) self.ui.isRelative.show() @@ -3205,7 +3203,7 @@ class Edit(Modifier): self.finish() elif arg["Type"] == "SoLocation2Event": #mouse movement detection if self.editing != None: - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): self.constraintrack.p1(point) @@ -3223,7 +3221,7 @@ class Edit(Modifier): sel = sel[0] if sel.ObjectName == self.obj.Name: if self.ui.addButton.isChecked(): - point,ctrlPoint = getPoint(self,arg) + point,ctrlPoint,info = getPoint(self,arg) self.pos = arg["Position"] self.addPoint(point) elif self.ui.delButton.isChecked(): diff --git a/src/Mod/Draft/draftlibs/fcgeo.py b/src/Mod/Draft/draftlibs/fcgeo.py index f2387afce..bf9f53e18 100755 --- a/src/Mod/Draft/draftlibs/fcgeo.py +++ b/src/Mod/Draft/draftlibs/fcgeo.py @@ -1686,7 +1686,7 @@ def circlefrom1Line2Points(edge, p1, p2): v1 = p1.sub(s) v2 = p2.sub(s) projectedDist = math.sqrt(abs(v1.dot(v2))) - edgeDir = vec(edge); edgeDir.normailze() + edgeDir = vec(edge); edgeDir.normalize() projectedCen1 = Vector.add(s, fcvec.scale(edgeDir, projectedDist)) projectedCen2 = Vector.add(s, fcvec.scale(edgeDir, -projectedDist)) perpEdgeDir = edgeDir.cross(Vector(0,0,1)) From 7c0aaa5814eefd5672a731234e21e737b5c6dd14 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 1 May 2012 12:20:12 +0200 Subject: [PATCH 117/517] Do not override placement if shape is null --- src/Mod/Part/App/PartFeature.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Mod/Part/App/PartFeature.cpp b/src/Mod/Part/App/PartFeature.cpp index 508009317..c9483f37c 100644 --- a/src/Mod/Part/App/PartFeature.cpp +++ b/src/Mod/Part/App/PartFeature.cpp @@ -103,9 +103,12 @@ void Feature::onChanged(const App::Property* prop) } else { Base::Placement p; - p.fromMatrix(this->Shape.getShape().getTransform()); - if (p != this->Placement.getValue()) - this->Placement.setValue(p); + // shape must not be null to override the placement + if (!this->Shape.getValue().IsNull()) { + p.fromMatrix(this->Shape.getShape().getTransform()); + if (p != this->Placement.getValue()) + this->Placement.setValue(p); + } } } From 11358e1b86bfa09afdd2c9051d6851b0c1b8c900 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 1 May 2012 13:17:10 +0200 Subject: [PATCH 118/517] left hand helix --- src/Mod/Part/App/PrimitiveFeature.cpp | 11 ++++- src/Mod/Part/App/PrimitiveFeature.h | 4 ++ src/Mod/Part/App/TopoShape.cpp | 65 +++++++++++++++------------ src/Mod/Part/App/TopoShape.h | 2 +- src/Mod/Part/Gui/DlgPrimitives.cpp | 4 +- src/Mod/Part/Gui/DlgPrimitives.ui | 21 +++++++++ 6 files changed, 74 insertions(+), 33 deletions(-) diff --git a/src/Mod/Part/App/PrimitiveFeature.cpp b/src/Mod/Part/App/PrimitiveFeature.cpp index 2aef7aa07..0213ac04d 100644 --- a/src/Mod/Part/App/PrimitiveFeature.cpp +++ b/src/Mod/Part/App/PrimitiveFeature.cpp @@ -100,7 +100,7 @@ void Primitive::onChanged(const App::Property* prop) // Do not support sphere, ellipsoid and torus because the creation // takes too long and thus is not feasible std::string grp = (prop->getGroup() ? prop->getGroup() : ""); - if (grp == "Plane" || grp == "Cylinder" || grp == "Cone"){ + if (grp == "Plane" || grp == "Cylinder" || grp == "Cone" || grp == "Helix") { try { App::DocumentObjectExecReturn *ret = recompute(); delete ret; @@ -585,6 +585,8 @@ App::DocumentObjectExecReturn *Torus::execute(void) PROPERTY_SOURCE(Part::Helix, Part::Primitive) +const char* Part::Helix::LocalCSEnums[]= {"Right-handed","Left-handed",NULL}; + Helix::Helix(void) { ADD_PROPERTY_TYPE(Pitch, (1.0),"Helix",App::Prop_None,"The pitch of the helix"); @@ -595,6 +597,8 @@ Helix::Helix(void) Radius.setConstraints(&floatRange); ADD_PROPERTY_TYPE(Angle,(0.0),"Helix",App::Prop_None,"If angle is > 0 a conical otherwise a cylindircal surface is used"); Angle.setConstraints(&apexRange); + ADD_PROPERTY_TYPE(LocalCoord,(long(0)),"Coordinate System",App::Prop_None,"Orientation of the local coordinate system of the helix"); + LocalCoord.setEnums(LocalCSEnums); } short Helix::mustExecute() const @@ -607,6 +611,8 @@ short Helix::mustExecute() const return 1; if (Angle.isTouched()) return 1; + if (LocalCoord.isTouched()) + return 1; return Primitive::mustExecute(); } @@ -617,8 +623,9 @@ App::DocumentObjectExecReturn *Helix::execute(void) Standard_Real myHeight = Height.getValue(); Standard_Real myRadius = Radius.getValue(); Standard_Real myAngle = Angle.getValue(); + Standard_Boolean myLocalCS = LocalCoord.getValue() ? Standard_True : Standard_False; TopoShape helix; - this->Shape.setValue(helix.makeHelix(myPitch, myHeight, myRadius, myAngle)); + this->Shape.setValue(helix.makeHelix(myPitch, myHeight, myRadius, myAngle, myLocalCS)); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); diff --git a/src/Mod/Part/App/PrimitiveFeature.h b/src/Mod/Part/App/PrimitiveFeature.h index fe1eb0609..e90a4d6a1 100644 --- a/src/Mod/Part/App/PrimitiveFeature.h +++ b/src/Mod/Part/App/PrimitiveFeature.h @@ -227,6 +227,7 @@ public: App::PropertyFloatConstraint Height; App::PropertyFloatConstraint Radius; App::PropertyFloatConstraint Angle; + App::PropertyEnumeration LocalCoord; /** @name methods override feature */ //@{ @@ -234,6 +235,9 @@ public: App::DocumentObjectExecReturn *execute(void); short mustExecute() const; //@} + +private: + static const char* LocalCSEnums[]; }; class PartExport Wedge : public Primitive diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index 0a434914a..f78bc5026 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1493,42 +1493,49 @@ TopoDS_Shape TopoShape::makeSweep(const TopoDS_Shape& profile, double tol, int f } TopoDS_Shape TopoShape::makeHelix(Standard_Real pitch, Standard_Real height, - Standard_Real radius, Standard_Real angle) const + Standard_Real radius, Standard_Real angle, + Standard_Boolean leftHanded) const { - if (pitch < Precision::Confusion()) - Standard_Failure::Raise("Pitch of helix too small"); + if (pitch < Precision::Confusion()) + Standard_Failure::Raise("Pitch of helix too small"); - if (height < Precision::Confusion()) - Standard_Failure::Raise("Height of helix too small"); + if (height < Precision::Confusion()) + Standard_Failure::Raise("Height of helix too small"); - if (radius < Precision::Confusion()) - Standard_Failure::Raise("Radius of helix too small"); + if (radius < Precision::Confusion()) + Standard_Failure::Raise("Radius of helix too small"); - gp_Ax2 cylAx2(gp_Pnt(0.0,0.0,0.0) , gp::DZ()); - Handle_Geom_Surface surf; - if (angle < Precision::Confusion()) { - surf = new Geom_CylindricalSurface(cylAx2, radius); - } - else { - angle = Base::toRadians(angle); - if (angle < Precision::Confusion()) - Standard_Failure::Raise("Angle of helix too small"); - surf = new Geom_ConicalSurface(gp_Ax3(cylAx2), angle, radius); - } + gp_Ax2 cylAx2(gp_Pnt(0.0,0.0,0.0) , gp::DZ()); + Handle_Geom_Surface surf; + if (angle < Precision::Confusion()) { + surf = new Geom_CylindricalSurface(cylAx2, radius); + } + else { + angle = Base::toRadians(angle); + if (angle < Precision::Confusion()) + Standard_Failure::Raise("Angle of helix too small"); + surf = new Geom_ConicalSurface(gp_Ax3(cylAx2), angle, radius); + } - gp_Pnt2d aPnt(0, 0); - gp_Dir2d aDir(2. * PI, pitch); - gp_Ax2d aAx2d(aPnt, aDir); + gp_Pnt2d aPnt(0, 0); + gp_Dir2d aDir(2. * PI, pitch); + if (leftHanded) { + //aPnt.SetCoord(0.0, height); + //aDir.SetCoord(2.0 * PI, -pitch); + aPnt.SetCoord(2. * PI, 0.0); + aDir.SetCoord(-2. * PI, pitch); + } + gp_Ax2d aAx2d(aPnt, aDir); - Handle(Geom2d_Line) line = new Geom2d_Line(aAx2d); - gp_Pnt2d beg = line->Value(0); - gp_Pnt2d end = line->Value(sqrt(4.0*PI*PI+pitch*pitch)*(height/pitch)); - Handle(Geom2d_TrimmedCurve) segm = GCE2d_MakeSegment(beg , end); + Handle(Geom2d_Line) line = new Geom2d_Line(aAx2d); + gp_Pnt2d beg = line->Value(0); + gp_Pnt2d end = line->Value(sqrt(4.0*PI*PI+pitch*pitch)*(height/pitch)); + Handle(Geom2d_TrimmedCurve) segm = GCE2d_MakeSegment(beg , end); - TopoDS_Edge edgeOnSurf = BRepBuilderAPI_MakeEdge(segm , surf); - TopoDS_Wire wire = BRepBuilderAPI_MakeWire(edgeOnSurf); - BRepLib::BuildCurves3d(wire); - return wire; + TopoDS_Edge edgeOnSurf = BRepBuilderAPI_MakeEdge(segm , surf); + TopoDS_Wire wire = BRepBuilderAPI_MakeWire(edgeOnSurf); + BRepLib::BuildCurves3d(wire); + return wire; } TopoDS_Shape TopoShape::makeLoft(const TopTools_ListOfShape& profiles, diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index 9f3b17562..0cf1087f9 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -161,7 +161,7 @@ public: TopoDS_Shape makeTube(double radius, double tol) const; TopoDS_Shape makeTube() const; TopoDS_Shape makeHelix(Standard_Real pitch, Standard_Real height, - Standard_Real radius, Standard_Real angle=0) const; + Standard_Real radius, Standard_Real angle=0, Standard_Boolean left=Standard_False) const; TopoDS_Shape makeLoft(const TopTools_ListOfShape& profiles, Standard_Boolean isSolid, Standard_Boolean isRuled) const; TopoDS_Shape makeOffset(double offset, double tol, diff --git a/src/Mod/Part/Gui/DlgPrimitives.cpp b/src/Mod/Part/Gui/DlgPrimitives.cpp index 83b6b53cc..3665dd196 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.cpp +++ b/src/Mod/Part/Gui/DlgPrimitives.cpp @@ -481,12 +481,14 @@ void DlgPrimitives::createPrimitive(const QString& placement) "App.ActiveDocument.%1.Height=%3\n" "App.ActiveDocument.%1.Radius=%4\n" "App.ActiveDocument.%1.Angle=%5\n" - "App.ActiveDocument.%1.Placement=%6\n") + "App.ActiveDocument.%1.LocalCoord=%6\n" + "App.ActiveDocument.%1.Placement=%7\n") .arg(name) .arg(ui.helixPitch->value(),0,'f',2) .arg(ui.helixHeight->value(),0,'f',2) .arg(ui.helixRadius->value(),0,'f',2) .arg(ui.helixAngle->value(),0,'f',2) + .arg(ui.helixLocalCS->currentIndex()) .arg(placement); } else if (ui.comboBox1->currentIndex() == 9) { // circle diff --git a/src/Mod/Part/Gui/DlgPrimitives.ui b/src/Mod/Part/Gui/DlgPrimitives.ui index 6138066ea..4bc21969f 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.ui +++ b/src/Mod/Part/Gui/DlgPrimitives.ui @@ -1231,6 +1231,27 @@ + + + + Coordinate system: + + + + + + + + Right-handed + + + + + Left-handed + + + + From 0c12188acf4732bdd6961792b91feb5f8aff1fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 1 May 2012 14:39:19 +0200 Subject: [PATCH 119/517] Removed faces as class stored variable (PropertyPythonObject::fromString warning). --- src/Mod/Ship/Instance.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 64eecd5cc..104d2f24e 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -39,7 +39,6 @@ class Ship: """ Creates a new ship on active document. @param faces Ship faces (Part::Shape entities). """ - self.faces = faces # Add uniqueness property to identify Ship instances obj.addProperty("App::PropertyBool","IsShip","Ship", str(Translator.translate("True if is a valid ship instance"))).IsShip=True # Add main dimensions @@ -47,7 +46,7 @@ class Ship: obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes - obj.addProperty("Part::PropertyPartShape","Shape","Ship", str(Translator.translate("Ship surfaces"))).Shape = Part.makeShell(self.faces) + obj.addProperty("Part::PropertyPartShape","Shape","Ship", str(Translator.translate("Ship surfaces"))).Shape = Part.makeShell(faces) obj.Proxy = self self.obj = obj @@ -55,12 +54,12 @@ class Ship: ''' Print the name of the property that has changed ''' # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") if prop == "Length" or prop == "Beam" or prop == "Draft": - fp.Shape = Part.makeShell(self.faces) + fp.Shape = Part.makeShell(obj.Shape.Faces) def execute(self, obj): ''' Print a short message when doing a recomputation, this method is mandatory ''' # FreeCAD.Console.PrintMessage("Recompute Ship\n") - obj.Shape = Part.makeShell(self.faces) + obj.Shape = Part.makeShell(obj.Shape.Faces) def lineFaceSection(self,line,surface): """ Returns the point of section of a line with a face @@ -147,7 +146,7 @@ class Ship: wire = wires[j].Edges for k in range(0,len(wire)): edges.append(wire[k]) - # Slice curves to get points (Length based) + # Slice curves to get points points = [] for k in range(0,nP): planePoints = [] From 2a846428fe8fd5e824d16a8b83aa26b4e828f2df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 1 May 2012 17:08:07 +0200 Subject: [PATCH 120/517] Removed shape duplicities. --- src/Mod/Ship/Instance.py | 4 ++-- src/Mod/Ship/shipCreateShip/TaskPanel.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 104d2f24e..16d77f868 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -46,7 +46,7 @@ class Ship: obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes - obj.addProperty("Part::PropertyPartShape","Shape","Ship", str(Translator.translate("Ship surfaces"))).Shape = Part.makeShell(faces) + obj.Shape = Part.makeShell(faces) obj.Proxy = self self.obj = obj @@ -54,7 +54,7 @@ class Ship: ''' Print the name of the property that has changed ''' # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") if prop == "Length" or prop == "Beam" or prop == "Draft": - fp.Shape = Part.makeShell(obj.Shape.Faces) + pass def execute(self, obj): ''' Print a short message when doing a recomputation, this method is mandatory ''' diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.py b/src/Mod/Ship/shipCreateShip/TaskPanel.py index bec74302a..cbb5319c8 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.py +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.py @@ -49,6 +49,7 @@ class TaskPanel: obj.Draft = self.form.draft.value() # Discretize it ship.discretize(self.form.nSections.value(), self.form.nPoints.value()) + App.ActiveDocument.recompute() return True def reject(self): From 87e1dea1ac173c0a8fafb80ee071f341dec3c004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 1 May 2012 17:13:44 +0200 Subject: [PATCH 121/517] Added tank creator. --- src/Mod/Ship/CMakeLists.txt | 20 +- src/Mod/Ship/Icons/Tank.png | Bin 0 -> 10163 bytes src/Mod/Ship/Icons/Tank.xcf | Bin 0 -> 74661 bytes src/Mod/Ship/Icons/Tank.xpm | 1736 +++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 + src/Mod/Ship/Makefile.am | 11 +- src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/TankInstance.py | 1886 +++++++++++++++++++++ src/Mod/Ship/shipLoadExample/TaskPanel.ui | 4 +- src/Mod/Ship/tankCreateTank/TaskPanel.py | 167 ++ src/Mod/Ship/tankCreateTank/TaskPanel.ui | 141 ++ src/Mod/Ship/tankCreateTank/__init__.py | 36 + 12 files changed, 4013 insertions(+), 5 deletions(-) create mode 100644 src/Mod/Ship/Icons/Tank.png create mode 100644 src/Mod/Ship/Icons/Tank.xcf create mode 100644 src/Mod/Ship/Icons/Tank.xpm create mode 100644 src/Mod/Ship/TankInstance.py create mode 100644 src/Mod/Ship/tankCreateTank/TaskPanel.py create mode 100644 src/Mod/Ship/tankCreateTank/TaskPanel.ui create mode 100644 src/Mod/Ship/tankCreateTank/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 058b9aec1..a362a0c6a 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -2,6 +2,7 @@ SET(ShipMain_SRCS InitGui.py ShipGui.py Instance.py + TankInstance.py ) SOURCE_GROUP("" FILES ${ShipMain_SRCS}) @@ -32,6 +33,9 @@ SET(ShipIcons_SRCS Icons/ReparametrizeIco.xpm Icons/Ship.xcf Icons/Ship.xpm + Icons/Tank.png + Icons/Tank.xcf + Icons/Tank.xpm ) SOURCE_GROUP("shipicons" FILES ${ShipIcons_SRCS}) @@ -92,7 +96,14 @@ SET(ShipUtils_SRCS ) SOURCE_GROUP("shiputils" FILES ${ShipUtils_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS}) +SET(ShipCreateTank_SRCS + tankCreateTank/__init__.py + tankCreateTank/TaskPanel.py + tankCreateTank/TaskPanel.ui +) +SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipCreateTank_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -148,6 +159,12 @@ INSTALL( DESTINATION Mod/Ship/shipUtils ) +INSTALL( + FILES + ${ShipCreateTank_SRCS} + DESTINATION + Mod/Ship/tankCreateTank +) INSTALL( FILES ${ShipMain_SRCS} @@ -155,3 +172,4 @@ INSTALL( Mod/Ship ) + diff --git a/src/Mod/Ship/Icons/Tank.png b/src/Mod/Ship/Icons/Tank.png new file mode 100644 index 0000000000000000000000000000000000000000..d8efae6a5662cb8dc6f4e26e5f27df74bd1ea3fe GIT binary patch literal 10163 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 literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/Tank.xcf b/src/Mod/Ship/Icons/Tank.xcf new file mode 100644 index 0000000000000000000000000000000000000000..bd306edc19a166e351a2da2d58cb4ac9ecb9fbc5 GIT binary patch literal 74661 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≤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 c #D6D6D6", +", c #D7D7D7", +"' c #CDCECE", +") c #CFCECE", +"! c #D0CFCF", +"~ c #D3D3D2", +"{ c #D3D3D4", +"] c #D5D4D5", +"^ c #D6D7D6", +"/ c #D8D8D8", +"( c #D8D8D9", +"_ c #D9D9DA", +": c #CCCCCB", +"< c #CCCCCC", +"[ c #CECECD", +"} c #CECECE", +"| c #CFCFCF", +"1 c #D1D2D2", +"2 c #D5D4D4", +"3 c #D8D9D9", +"4 c #DAD9DA", +"5 c #DADBDB", +"6 c #DBDCDB", +"7 c #CACACA", +"8 c #CACBCB", +"9 c #CBCBCB", +"0 c #CCCDCD", +"a c #CECDCD", +"b c #D2D2D1", +"c c #D2D3D3", +"d c #D4D3D3", +"e c #D9D9D8", +"f c #D9D9D9", +"g c #DADBDA", +"h c #DBDCDC", +"i c #DCDCDC", +"j c #DDDDDD", +"k c #DEDEDE", +"l c #C7C8C8", +"m c #C9C9C9", +"n c #CAC9CA", +"o c #CBCBCC", +"p c #CCCDCC", +"q c #CDCDCD", +"r c #D0D1D1", +"s c #D1D2D1", +"t c #D3D2D2", +"u c #D4D4D5", +"v c #D5D5D6", +"w c #D6D7D7", +"x c #D8D7D8", +"y c #D9D8D9", +"z c #DADAD9", +"A c #DBDADA", +"B c #DBDBDC", +"C c #DDDCDD", +"D c #DDDEDE", +"E c #DEDFDE", +"F c #DFE0E0", +"G c #E0E0E1", +"H c #C6C6C6", +"I c #C7C7C7", +"J c #C8C8C7", +"K c #C9C9C8", +"L c #CACAC9", +"M c #CBCACB", +"N c #D0CFD0", +"O c #D1D0D1", +"P c #D1D1D2", +"Q c #D4D4D4", +"R c #D6D5D6", +"S c #D7D6D7", +"T c #D7D8D8", +"U c #DAD9D9", +"V c #DADADA", +"W c #DBDBDB", +"X c #DCDBDC", +"Y c #DDDDDC", +"Z c #DFDEDF", +"` c #E0DFDF", +" . c #E0E0E0", +".. c #E1E1E1", +"+. c #E2E2E2", +"@. c #C5C4C4", +"#. c #C5C5C5", +"$. c #C8C8C8", +"%. c #C9C8C8", +"&. c #D5D5D4", +"*. c #D8D7D7", +"=. c #D9D8D8", +"-. c #DCDDDD", +";. c #DEDDDD", +">. c #E3E4E3", +",. c #E5E4E4", +"'. c #C4C4C4", +"). c #C6C7C6", +"!. c #C7C8C7", +"~. c #C8C8C9", +"{. c #CACACB", +"]. c #CCCBCB", +"^. c #D0D0D1", +"/. c #D5D6D6", +"(. c #D7D7D6", +"_. c #DFDFDF", +":. c #E1E2E2", +"<. c #E3E3E3", +"[. c #E4E3E4", +"}. c #E6E5E5", +"|. c #E6E6E6", +"1. c #E6E7E7", +"2. c #C4C5C5", +"3. c #C6C6C7", +"4. c #CFD0D0", +"5. c #D1D0D0", +"6. c #D6D5D5", +"7. c #DADADB", +"8. c #DCDDDC", +"9. c #DDDDDE", +"0. c #DEDFDF", +"a. c #E1E1E2", +"b. c #E3E2E2", +"c. c #E4E4E4", +"d. c #E5E5E5", +"e. c #E8E8E7", +"f. c #E9E8E9", +"g. c #EAE9EA", +"h. c #C5C5C4", +"i. c #C6C6C5", +"j. c #C7C7C6", +"k. c #CBCACA", +"l. c #CDCDCC", +"m. c #CECFCF", +"n. c #DBDADB", +"o. c #E0E0DF", +"p. c #E1E1E0", +"q. c #E1E2E1", +"r. c #E3E3E4", +"s. c #E4E5E5", +"t. c #E7E6E7", +"u. c #E7E7E8", +"v. c #E9E9E8", +"w. c #E9EAE9", +"x. c #EAEAEA", +"y. c #EBEBEA", +"z. c #C4C5C4", +"A. c #C6C5C5", +"B. c #C6C7C7", +"C. c #CCCCCD", +"D. c #CECECF", +"E. c #D9DAD9", +"F. c #DBDBDA", +"G. c #DEDEDD", +"H. c #E0DFE0", +"I. c #E0E1E0", +"J. c #E6E5E6", +"K. c #E7E7E6", +"L. c #E7E8E7", +"M. c #E8E8E9", +"N. c #E9E9E9", +"O. c #ECECEC", +"P. c #ECEDED", +"Q. c #EDEDEE", +"R. c #010101", +"S. c #C5C4C5", +"T. c #CBCCCB", +"U. c #CDCCCC", +"V. c #CECFCE", +"W. c #CFCFCE", +"X. c #CFCFD0", +"Y. c #D7D8D7", +"Z. c #DEDDDE", +"`. c #E1E0E0", +" + c #E5E6E6", +".+ c #EBEBEB", +"++ c #ECEBEC", +"@+ c #EDEDED", +"#+ c #EEEEEE", +"$+ c #EFEFEF", +"%+ c #F0F0F0", +"&+ c #C4C4C5", +"*+ c #CFCECF", +"=+ c #D2D1D1", +"-+ c #D6D6D5", +";+ c #D8D9D8", +">+ c #DDDEDD", +",+ c #DFDEDE", +"'+ c #E2E3E3", +")+ c #E7E7E7", +"!+ c #E8E8E8", +"~+ c #EBECEC", +"{+ c #ECEDEC", +"]+ c #EFEFF0", +"^+ c #F1F0F1", +"/+ c #F1F1F1", +"(+ c #C7C6C6", +"_+ c #C9C8C9", +":+ c #C9CAC9", +"<+ c #CACBCA", +"[+ c #D2D2D3", +"}+ c #D4D5D5", +"|+ c #DCDCDB", +"1+ c #E3E3E2", +"2+ c #E4E3E3", +"3+ c #E4E4E5", +"4+ c #E5E5E6", +"5+ c #EAEAE9", +"6+ c #ECEBEB", +"7+ c #F0F0EF", +"8+ c #F0F0F1", +"9+ c #C8C7C8", +"0+ c #C8C9C9", +"a+ c #CBCBCA", +"b+ c #CCCBCC", +"c+ c #D7D6D6", +"d+ c #DDDCDC", +"e+ c #E2E2E1", +"f+ c #E2E3E2", +"g+ c #E3E4E4", +"h+ c #E8E7E8", +"i+ c #E9E8E8", +"j+ c #EAE9E9", +"k+ c #EDECEC", +"l+ c #EEEEED", +"m+ c #EFEEEF", +"n+ c #EFF0F0", +"o+ c #F1F0F0", +"p+ c #C5C6C6", +"q+ c #C7C6C7", +"r+ c #D0D0CF", +"s+ c #D4D5D4", +"t+ c #E1E0E1", +"u+ c #E8E9E9", +"v+ c #EDECED", +"w+ c #EEEDED", +"x+ c #EEEFEF", +"y+ c #F0EFF0", +"z+ c #F0F1F0", +"A+ c #D7D7D8", +"B+ c #C8C7C7", +"C+ c #C9C9CA", +"D+ c #D2D1D2", +"E+ c #D9DADA", +"F+ c #E2E1E1", +"G+ c #E9E9EA", +"H+ c #EAEBEB", +"I+ c #D8D8D7", +"J+ c #CBCCCC", +"K+ c #CDCCCD", +"L+ c #D6D6D7", +"M+ c #E6E6E5", +"N+ c #E7E6E6", +"O+ c #E8E7E7", +"P+ c #EFEEEE", +"Q+ c #CDCECD", +"R+ c #D1D1D0", +"S+ c #D2D3D2", +"T+ c #DFE0DF", +"U+ c #E3E2E3", +"V+ c #E4E5E4", +"W+ c #E5E6E5", +"X+ c #ECECED", +"Y+ c #D4D3D4", +"Z+ c #CECDCE", +"`+ c #E6E6E7", +" @ c #EBEAEB", +".@ c #ECECEB", +"+@ c #F0F1F1", +"@@ c #DCDCDD", +"#@ c #EBEAEA", +"$@ c #F0EFEF", +"%@ c #D3D4D3", +"&@ c #E6E7E6", +"*@ c #EEEDEE", +"=@ c #ADADAD", +"-@ c #565656", +";@ c #DCDBDB", +">@ c #DFDFE0", +",@ c #E7E8E8", +"'@ c #E8E9E8", +")@ c #EDEDEC", +"!@ c #EBEBEC", +"~@ c #EEEFEE", +"{@ c #B7B6B7", +"]@ c #E5E4E5", +"^@ c #EDEEED", +"/@ c #B6B6B6", +"(@ c #B6B7B7", +"_@ c #B7B7B6", +":@ c #B7B6B6", +"<@ c #E5E5E4", +"[@ c #B5B6B5", +"}@ c #B5B6B6", +"|@ c #B5B5B5", +"1@ c #B6B5B5", +"2@ c #B6B5B6", +"3@ c #E2E1E2", +"4@ c #E4E4E3", +"5@ c #B4B4B4", +"6@ c #B4B5B5", +"7@ c #B5B5B4", +"8@ c #B6B6B5", +"9@ c #E2E2E3", +"0@ c #B3B4B4", +"a@ c #B4B4B5", +"b@ c #B4B5B4", +"c@ c #B5B4B4", +"d@ c #B3B3B3", +"e@ c #B3B3B4", +"f@ c #B4B3B3", +"g@ c #B4B4B3", +"h@ c #B5B4B5", +"i@ c #D0D1D0", +"j@ c #B3B3B2", +"k@ c #B3B2B3", +"l@ c #B4B3B4", +"m@ c #90B9D9", +"n@ c #91BAD9", +"o@ c #C6C5C6", +"p@ c #B1B2B2", +"q@ c #B2B2B2", +"r@ c #B2B3B2", +"s@ c #B2B3B3", +"t@ c #8FB7D8", +"u@ c #8EB7D7", +"v@ c #8FB8D8", +"w@ c #90B8D8", +"x@ c #91BBD9", +"y@ c #91BCDA", +"z@ c #C2C2C2", +"A@ c #C3C4C3", +"B@ c #C3C4C4", +"C@ c #C8C9C8", +"D@ c #CDCDCE", +"E@ c #B1B1B1", +"F@ c #B1B2B1", +"G@ c #B2B1B2", +"H@ c #B2B2B3", +"I@ c #B3B2B2", +"J@ c #8CB4D6", +"K@ c #8DB4D6", +"L@ c #8DB5D7", +"M@ c #8EB6D7", +"N@ c #8EB7D8", +"O@ c #8FB7D7", +"P@ c #90B9D8", +"Q@ c #91BBDA", +"R@ c #92BCD9", +"S@ c #92BCDA", +"T@ c #C1C1C0", +"U@ c #C1C1C1", +"V@ c #C2C2C1", +"W@ c #C3C3C2", +"X@ c #C3C3C3", +"Y@ c #C3C3C4", +"Z@ c #CAC9C9", +"`@ c #B1B0B0", +" # c #B2B2B1", +".# c #8BB2D5", +"+# c #8BB2D6", +"@# c #8CB3D6", +"## c #8CB3D7", +"$# c #8DB5D6", +"%# c #8EB5D7", +"&# c #8FB8D7", +"*# c #92BBD9", +"=# c #92BBDA", +"-# c #BFC0C0", +";# c #C0C1C0", +"># c #C2C1C1", +",# c #C3C2C2", +"'# c #C4C4C3", +")# c #C5C6C5", +"!# c #C5C5C6", +"~# c #B0B0B0", +"{# c #B0B1B0", +"]# c #B1B1B2", +"^# c #B2B1B1", +"/# c #0E3459", +"(# c #0E355A", +"_# c #0F355A", +":# c #0F365A", +"<# c #8AB2D5", +"[# c #8CB3D5", +"}# c #8BB3D6", +"|# c #8FB6D7", +"1# c #8FB9D7", +"2# c #90B9D7", +"3# c #90BAD8", +"4# c #90BBD9", +"5# c #92BDDA", +"6# c #93BEDA", +"7# c #BEBEBE", +"8# c #BEBFBE", +"9# c #BFBFBE", +"0# c #BFBFC0", +"a# c #C0C0BF", +"b# c #C2C3C2", +"c# c #C4C3C3", +"d# c #AFB0B0", +"e# c #AFAFB0", +"f# c #B0AFB0", +"g# c #B0B1B1", +"h# c #B0B0B1", +"i# c #B1B0B1", +"j# c #7A9EC5", +"k# c #799FC5", +"l# c #7A9FC5", +"m# c #7AA0C6", +"n# c #0E345A", +"o# c #0F3559", +"p# c #8BB1D5", +"q# c #8CB4D5", +"r# c #8FB9D8", +"s# c #90BAD7", +"t# c #91BBD8", +"u# c #91BCD9", +"v# c #91BDD9", +"w# c #92BEDA", +"x# c #93BFDA", +"y# c #BDBDBD", +"z# c #BDBEBD", +"A# c #BEBEBD", +"B# c #BEBEBF", +"C# c #BEBFBF", +"D# c #BFBFBF", +"E# c #C0C0C0", +"F# c #C1C0C0", +"G# c #C0C1C1", +"H# c #C3C2C3", +"I# c #C4C3C4", +"J# c #AFAEAF", +"K# c #AFAFAF", +"L# c #B0AFAF", +"M# c #789DC5", +"N# c #789EC5", +"O# c #799EC5", +"P# c #7AA1C5", +"Q# c #7BA1C5", +"R# c #0F3659", +"S# c #10375A", +"T# c #8DB6D6", +"U# c #8EB8D7", +"V# c #92BDD9", +"W# c #143F5B", +"X# c #174A6A", +"Y# c #84B0CB", +"Z# c #85B0CC", +"`# c #BCBCBC", +" $ c #BDBCBC", +".$ c #C0C0C1", +"+$ c #C1C2C1", +"@$ c #C2C3C3", +"#$ c #AEAEAE", +"$$ c #AEAFAF", +"%$ c #AFAFAE", +"&$ c #779BC4", +"*$ c #779CC4", +"=$ c #789CC4", +"-$ c #789DC4", +";$ c #789EC4", +">$ c #799FC4", +",$ c #7AA0C5", +"'$ c #10385A", +")$ c #8DB7D7", +"!$ c #8EB7D6", +"~$ c #90BBD8", +"{$ c #133E5B", +"]$ c #83AEC9", +"^$ c #84AFCA", +"/$ c #85B1CB", +"($ c #85B2CB", +"_$ c #BDBCBD", +":$ c #BEBDBD", +"<$ c #C0BFBF", +"[$ c #C1C1C2", +"}$ c #C9CACA", +"|$ c #AEAEAD", +"1$ c #AEAFAE", +"2$ c #AEAEAF", +"3$ c #7599C3", +"4$ c #7699C3", +"5$ c #7699C2", +"6$ c #769AC3", +"7$ c #779BC3", +"8$ c #789BC4", +"9$ c #799EC4", +"0$ c #79A0C4", +"a$ c #8CB5D5", +"b$ c #8CB5D6", +"c$ c #8DB7D6", +"d$ c #426D8A", +"e$ c #16486A", +"f$ c #7AA5C1", +"g$ c #83ADC9", +"h$ c #84B1CB", +"i$ c #85B1CC", +"j$ c #BCBDBD", +"k$ c #BDBDBC", +"l$ c #BFBEBF", +"m$ c #BFC0BF", +"n$ c #ADADAC", +"o$ c #AEADAD", +"p$ c #ADAEAD", +"q$ c #ADAEAE", +"r$ c #7496C2", +"s$ c #7597C2", +"t$ c #7598C2", +"u$ c #769BC2", +"v$ c #779BC2", +"w$ c #779CC3", +"x$ c #789DC3", +"y$ c #7AA0C4", +"z$ c #7AA1C4", +"A$ c #7AA2C5", +"B$ c #7BA2C5", +"C$ c #10395A", +"D$ c #8EB6D6", +"E$ c #8EB8D6", +"F$ c #133D5A", +"G$ c #81ABC8", +"H$ c #82ACC9", +"I$ c #82ADC9", +"J$ c #82AEC9", +"K$ c #83AFC9", +"L$ c #83B0CA", +"M$ c #BDBEBE", +"N$ c #C1C0C1", +"O$ c #C7C7C8", +"P$ c #ADACAC", +"Q$ c #AFAEAE", +"R$ c #7395C1", +"S$ c #7395C2", +"T$ c #7496C1", +"U$ c #7599C2", +"V$ c #769BC3", +"W$ c #779DC3", +"X$ c #789EC3", +"Y$ c #7AA2C4", +"Z$ c #7BA3C4", +"`$ c #7BA3C5", +" % c #11395A", +".% c #113A5A", +"+% c #123C5A", +"@% c #164A6E", +"#% c #4C7694", +"$% c #80AAC7", +"%% c #80ABC8", +"&% c #81ACC9", +"*% c #81ACC8", +"=% c #81ADC9", +"-% c #83AFCA", +";% c #84B0CA", +">% c #84B1CA", +",% c #86B3CB", +"'% c #87B4CC", +")% c #BFBEBE", +"!% c #ACACAC", +"~% c #ABACAC", +"{% c #ACACAD", +"]% c #7294C0", +"^% c #7194C0", +"/% c #7294C1", +"(% c #7394C1", +"_% c #7396C1", +":% c #7497C2", +"<% c #7498C2", +"[% c #799FC3", +"}% c #7CA3C5", +"|% c #123B5A", +"1% c #88B1D0", +"2% c #7EA8C6", +"3% c #7FA9C6", +"4% c #7FAAC7", +"5% c #81ADC8", +"6% c #85B1CA", +"7% c #86B2CB", +"8% c #86B4CB", +"9% c #87B5CB", +"0% c #BCBCBD", +"a% c #C0BFC0", +"b% c #ABABAB", +"c% c #ACABAC", +"d% c #ABABAC", +"e% c #ACADAC", +"f% c #ACADAD", +"g% c #7193C0", +"h% c #7293C0", +"i% c #7193C1", +"j% c #7293C1", +"k% c #7498C1", +"l% c #789FC4", +"m% c #79A1C3", +"n% c #79A1C4", +"o% c #7BA2C4", +"p% c #7CA4C5", +"q% c #7CA4C4", +"r% c #16496F", +"s% c #7DA7C5", +"t% c #7FAAC6", +"u% c #80ABC7", +"v% c #80ACC7", +"w% c #82AFC9", +"x% c #84B1C9", +"y% c #85B2CA", +"z% c #87B5CC", +"A% c #88B6CC", +"B% c #BDBDBE", +"C% c #C1C2C2", +"D% c #AAABAB", +"E% c #AAAAAA", +"F% c #ABAAAB", +"G% c #ABACAB", +"H% c #ACACAB", +"I% c #7192C0", +"J% c #7292C0", +"K% c #7598C1", +"L% c #7599C1", +"M% c #759AC1", +"N% c #769AC2", +"O% c #779CC2", +"P% c #779DC2", +"Q% c #789DC2", +"R% c #78A0C3", +"S% c #7CA3C4", +"T% c #7AA2C2", +"U% c #7CA5C4", +"V% c #7DA5C4", +"W% c #7DA6C5", +"X% c #7EA8C5", +"Y% c #82ADC8", +"Z% c #83B0C9", +"`% c #85B3CA", +" & c #86B5CB", +".& c #87B6CC", +"+& c #BCBDBC", +"@& c #C2C1C2", +"#& c #C2C2C3", +"$& c #AAA9AA", +"%& c #AAABAA", +"&& c #ABAAAA", +"*& c #7091BF", +"=& c #7092BF", +"-& c #7191C0", +";& c #7192BF", +">& c #7092C0", +",& c #7295C0", +"'& c #7497C1", +")& c #759AC2", +"!& c #769CC2", +"~& c #789FC3", +"{& c #79A0C3", +"]& c #79A2C4", +"^& c #7AA4C3", +"/& c #7BA4C4", +"(& c #7DA8C5", +"_& c #7EA9C6", +":& c #80AAC6", +"<& c #81ADC7", +"[& c #82ADC7", +"}& c #82AEC8", +"|& c #88B7CC", +"1& c #A9A9A9", +"2& c #A9AAAA", +"3& c #A9A9AA", +"4& c #A9AAA9", +"5& c #7090BE", +"6& c #7091BE", +"7& c #7092BE", +"8& c #7191BF", +"9& c #7397C1", +"0& c #7499C1", +"a& c #7AA1C3", +"b& c #7AA2C3", +"c& c #79A2C2", +"d& c #7AA3C3", +"e& c #7BA5C4", +"f& c #80ABC6", +"g& c #81ACC7", +"h& c #81AEC8", +"i& c #82AFC8", +"j& c #83B1CA", +"k& c #85B3CB", +"l& c #85B4CA", +"m& c #87B6CB", +"n& c #88B8CC", +"o& c #A8A8A8", +"p& c #6F90BE", +"q& c #6F91BE", +"r& c #7192BE", +"s& c #7193BF", +"t& c #769BC1", +"u& c #779EC3", +"v& c #789FC2", +"w& c #79A1C2", +"x& c #7AA3C2", +"y& c #7BA4C3", +"z& c #7CA6C5", +"A& c #7DA7C4", +"B& c #7EA7C5", +"C& c #7EA9C5", +"D& c #7EAAC6", +"E& c #7FACC6", +"F& c #81AEC7", +"G& c #82AFC7", +"H& c #83B1C9", +"I& c #84B2C9", +"J& c #84B3C9", +"K& c #86B4CA", +"L& c #89B7CC", +"M& c #89B8CD", +"N& c #A8A8A7", +"O& c #6F90BD", +"P& c #6E90BD", +"Q& c #6E90BE", +"R& c #7293BF", +"S& c #7396C0", +"T& c #7397C0", +"U& c #7498C0", +"V& c #759BC1", +"W& c #769CC1", +"X& c #779EC2", +"Y& c #789EC2", +"Z& c #78A0C1", +"`& c #78A1C2", +" * c #7BA6C3", +".* c #7BA6C4", +"+* c #7CA6C4", +"@* c #7FABC6", +"#* c #82AEC7", +"$* c #83AFC8", +"%* c #83B0C8", +"&* c #88B7CB", +"** c #89B9CC", +"=* c #89BACD", +"-* c #6E8FBD", +";* c #6F91BD", +">* c #7093BF", +",* c #7194BF", +"'* c #7294BF", +")* c #7395C0", +"!* c #7398C0", +"~* c #779FC1", +"{* c #77A0C1", +"]* c #78A1C1", +"^* c #7AA4C2", +"/* c #7CA7C4", +"(* c #7DA8C4", +"_* c #7DA9C5", +":* c #7FAAC5", +"<* c #80ACC6", +"[* c #80ADC7", +"}* c #84B1C8", +"|* c #88B8CB", +"1* c #89BACC", +"2* c #BEBDBE", +"3* c #12285A", +"4* c #768CBE", +"5* c #768DBE", +"6* c #6E91BD", +"7* c #7193BE", +"8* c #7295BF", +"9* c #7396BF", +"0* c #7398BF", +"a* c #7499C0", +"b* c #749AC1", +"c* c #779DC1", +"d* c #789FC1", +"e* c #779EC0", +"f* c #769EC0", +"g* c #769FC0", +"h* c #77A0C0", +"i* c #79A2C1", +"j* c #79A3C2", +"k* c #7BA4C2", +"l* c #7CA7C3", +"m* c #7EAAC5", +"n* c #80ADC6", +"o* c #82B0C7", +"p* c #85B2C9", +"q* c #85B3C9", +"r* c #85B4C9", +"s* c #86B5CA", +"t* c #87B6CA", +"u* c #88B9CC", +"v* c #8AB9CC", +"w* c #8ABACC", +"x* c #8BBBCC", +"y* c #758BBE", +"z* c #758CBE", +"A* c #768CBF", +"B* c #6E91BE", +"C* c #7093BE", +"D* c #7397BF", +"E* c #7497BF", +"F* c #749AC0", +"G* c #759AC0", +"H* c #769BC0", +"I* c #769CC0", +"J* c #779EC1", +"K* c #769DC0", +"L* c #759DBF", +"M* c #769DBE", +"N* c #77A1C0", +"O* c #7AA5C2", +"P* c #7DA7C3", +"Q* c #7EA9C4", +"R* c #7EAAC4", +"S* c #7FABC5", +"T* c #81ADC6", +"U* c #81AFC7", +"V* c #82B0C8", +"W* c #83B1C8", +"X* c #84B2C8", +"Y* c #86B6CB", +"Z* c #87B7CA", +"`* c #87B7CB", +" = c #84AFCB", +".= c #143F5A", +"+= c #12275A", +"@= c #758BBD", +"#= c #768BBE", +"$= c #6E8FBC", +"%= c #6E8EBD", +"&= c #7296BF", +"*= c #7297BF", +"== c #779CC1", +"-= c #749BBE", +";= c #749CBF", +">= c #759EBE", +",= c #769FBF", +"'= c #76A0C0", +")= c #779FC0", +"!= c #7BA5C3", +"~= c #7CA6C3", +"{= c #7CA8C4", +"]= c #7DA9C3", +"^= c #7FAAC4", +"/= c #81AFC6", +"(= c #82B1C7", +"_= c #85B5C9", +":= c #86B6CA", +"<= c #82AECA", +"[= c #758ABD", +"}= c #748ABD", +"|= c #758CBD", +"1= c #6D8FBC", +"2= c #759CC1", +"3= c #769DC1", +"4= c #759BBF", +"5= c #739ABE", +"6= c #759DBE", +"7= c #769EBE", +"8= c #769EBF", +"9= c #779FBF", +"0= c #78A1C0", +"a= c #78A2C1", +"b= c #79A2C0", +"c= c #7AA3C1", +"d= c #7CA8C3", +"e= c #7DA9C4", +"f= c #82B0C6", +"g= c #83B2C8", +"h= c #84B3C8", +"i= c #143E5B", +"j= c #11265A", +"k= c #7489BC", +"l= c #748ABC", +"m= c #758ABC", +"n= c #6D8EBC", +"o= c #6E8EBC", +"p= c #6D8FBD", +"q= c #6F8FBD", +"r= c #7092BD", +"s= c #7294BE", +"t= c #7194BE", +"u= c #7295BE", +"v= c #7196BF", +"w= c #759BC0", +"x= c #749ABE", +"y= c #7399BC", +"z= c #729ABD", +"A= c #739ABD", +"B= c #749CBD", +"C= c #769DBF", +"D= c #779EBF", +"E= c #78A2C0", +"F= c #79A3C1", +"G= c #7AA4C1", +"H= c #7BA6C2", +"I= c #7CA9C4", +"J= c #7EABC4", +"K= c #7FACC4", +"L= c #80ADC5", +"M= c #80AEC6", +"N= c #81AEC6", +"O= c #83B1C7", +"P= c #7EA9C7", +"Q= c #7FAAC8", +"R= c #80AAC8", +"S= c #7388BC", +"T= c #7488BC", +"U= c #7389BC", +"V= c #7489BD", +"W= c #6E8EBB", +"X= c #6D8EBD", +"Y= c #7195BE", +"Z= c #7499BF", +"`= c #749ABF", +" - c #749BC0", +".- c #7198BB", +"+- c #7298BC", +"@- c #7299BC", +"#- c #729ABC", +"$- c #739BBD", +"%- c #749BBD", +"&- c #749DBE", +"*- c #76A0BF", +"=- c #77A2C0", +"-- c #78A3C1", +";- c #79A4C1", +">- c #7CA8C2", +",- c #7DAAC4", +"'- c #7FACC5", +")- c #7DA7C6", +"!- c #7FA9C7", +"~- c #133E5A", +"{- c #7387BC", +"]- c #6F92BD", +"^- c #7094BE", +"/- c #7296BE", +"(- c #7399BD", +"_- c #0E3559", +":- c #7096BB", +"<- c #7197BB", +"[- c #7199BB", +"}- c #739BBC", +"|- c #749CBE", +"1- c #749EBE", +"2- c #769FBE", +"3- c #77A0BF", +"4- c #77A1BF", +"5- c #78A3C0", +"6- c #79A4C0", +"7- c #7AA6C2", +"8- c #7BA7C2", +"9- c #7DA8C3", +"0- c #7EACC5", +"a- c #7CA5C5", +"b- c #10255A", +"c- c #7286BB", +"d- c #7287BC", +"e- c #6D8EBB", +"f- c #7093BD", +"g- c #7094BD", +"h- c #7195BF", +"i- c #7399BF", +"j- c #739ABF", +"k- c #7398BE", +"l- c #6F95BA", +"m- c #7096BA", +"n- c #7097BB", +"o- c #739ABC", +"p- c #739CBD", +"q- c #759EBF", +"r- c #78A2BF", +"s- c #7CA7C2", +"t- c #10245A", +"u- c #7185BB", +"v- c #7286BC", +"w- c #7387BB", +"x- c #7487BC", +"y- c #6E90BC", +"z- c #6F93BE", +"A- c #7196BE", +"B- c #7297BE", +"C- c #7298BF", +"D- c #7297BD", +"E- c #6E94BA", +"F- c #6F95B9", +"G- c #6F96BA", +"H- c #7097BA", +"I- c #729ABB", +"J- c #749DBD", +"K- c #77A0BE", +"L- c #78A4C0", +"M- c #7AA5C0", +"N- c #7CA7C5", +"O- c #7185BA", +"P- c #7286BA", +"Q- c #7285BB", +"R- c #7386BB", +"S- c #7288BC", +"T- c #7589BD", +"U- c #6E91BC", +"V- c #6F91BC", +"W- c #6E92BC", +"X- c #6F93BD", +"Y- c #7194BD", +"Z- c #7195BD", +"`- c #7298BE", +" ; c #7297BC", +".; c #6D93B8", +"+; c #6E94B8", +"@; c #6E95B9", +"#; c #7096B9", +"$; c #739CBC", +"%; c #76A0BE", +"&; c #78A1BF", +"*; c #79A1C1", +"=; c #79A4C2", +"-; c #7BA3C3", +";; c #7084BA", +">; c #7184BB", +",; c #7085BB", +"'; c #7186BB", +"); c #7287BB", +"!; c #7388BB", +"~; c #6C8EBB", +"{; c #6D8FBB", +"]; c #6F92BC", +"^; c #7095BD", +"/; c #7196BD", +"(; c #7195BC", +"_; c #0E3359", +":; c #6C92B7", +"<; c #6D94B8", +"[; c #6F96B9", +"}; c #6F97BA", +"|; c #7299BB", +"1; c #729BBB", +"2; c #749DBC", +"3; c #759EBD", +"4; c #759FBE", +"5; c #10235A", +"6; c #7083BA", +"7; c #7084BB", +"8; c #7085BA", +"9; c #7093BC", +"0; c #7095BC", +"a; c #6C91B7", +"b; c #6E95B8", +"c; c #7198BA", +"d; c #739BBB", +"e; c #78A2C2", +"f; c #0F225A", +"g; c #6F82B9", +"h; c #7083B9", +"i; c #6F83B9", +"j; c #6F83BA", +"k; c #7184BA", +"l; c #6C8DBB", +"m; c #6C8FBB", +"n; c #6D90BB", +"o; c #6E91BB", +"p; c #6F93BC", +"q; c #7094BC", +"r; c #6F94BB", +"s; c #0D3259", +"t; c #6A8FB6", +"u; c #6B91B7", +"v; c #6E93B8", +"w; c #7098BA", +"x; c #7099BA", +"y; c #7199BA", +"z; c #729BBC", +"A; c #6E81B9", +"B; c #6E82B9", +"C; c #6E90BB", +"D; c #6E93BA", +"E; c #698EB6", +"F; c #6A8EB6", +"G; c #6A90B6", +"H; c #6B90B6", +"I; c #6B92B7", +"J; c #6D93B7", +"K; c #6E96B8", +"L; c #6F97B9", +"M; c #7098BB", +"N; c #78A0C0", +"O; c #6E80B8", +"P; c #6E81B8", +"Q; c #6F81B8", +"R; c #6F81B9", +"S; c #6F82B8", +"T; c #6F92BB", +"U; c #6E92BA", +"V; c #0D3159", +"W; c #688DB4", +"X; c #698EB5", +"Y; c #698FB5", +"Z; c #6A90B7", +"`; c #6C93B7", +" > c #518FC8", +".> c #6F96B8", +"+> c #123A5A", +"@> c #0F215A", +"#> c #6D80B8", +"$> c #6D81B8", +"%> c #6C8FBA", +"&> c #6E90BA", +"*> c #6E92BB", +"=> c #6E93BC", +"-> c #0C3159", +";> c #678CB4", +">> c #678DB4", +",> c #688EB4", +"'> c #698EB4", +")> c #6A90B5", +"!> c #6B91B6", +"~> c #6D94B7", +"{> c #6D95B8", +"]> c #6E96B9", +"^> c #0E2159", +"/> c #6C7FB8", +"(> c #6D7FB7", +"_> c #6D7FB8", +":> c #507FC9", +"<> c #6D8FBA", +"[> c #6D91BB", +"}> c #6D91B9", +"|> c #0C3059", +"1> c #678AB3", +"2> c #678BB3", +"3> c #678DB3", +"4> c #6B91B5", +"5> c #6B92B5", +"6> c #6C92B6", +"7> c #6B92B6", +"8> c #6C93B6", +"9> c #0E2059", +"0> c #6C7EB7", +"a> c #6D7EB7", +"b> c #6E80B7", +"c> c #6E82B8", +"d> c #7084B9", +"e> c #6F84BA", +"f> c #6C90B9", +"g> c #668AB2", +"h> c #698FB4", +"i> c #6A90B4", +"j> c #719ABB", +"k> c #749BBC", +"l> c #6B7EB7", +"m> c #6B7DB6", +"n> c #6C7DB7", +"o> c #6C7FB7", +"p> c #6D80B7", +"q> c #6F84B9", +"r> c #7186BA", +"s> c #6C8EB9", +"t> c #6589B1", +"u> c #678CB2", +"v> c #678DB2", +"w> c #688EB3", +"x> c #6A8FB5", +"y> c #6A91B5", +"z> c #6C92B5", +"A> c #6C94B7", +"B> c #6D95B7", +"C> c #759DBD", +"D> c #0E1F5A", +"E> c #6A7CB6", +"F> c #6A7DB6", +"G> c #6C7EB6", +"H> c #7082B9", +"I> c #7285BA", +"J> c #7085B9", +"K> c #0E335A", +"L> c #658BB1", +"M> c #668BB1", +"N> c #668CB1", +"O> c #678CB1", +"P> c #688DB3", +"Q> c #688FB3", +"R> c #698FB3", +"S> c #6990B4", +"T> c #7097B9", +"U> c #7197BA", +"V> c #739CBE", +"W> c #0E1F59", +"X> c #6A7BB6", +"Y> c #6B7CB6", +"Z> c #6C7DB6", +"`> c #6B7DB7", +" , c #6F82B6", +"., c #648AB0", +"+, c #658AB1", +"@, c #658BB0", +"#, c #668CB2", +"$, c #688FB4", +"%, c #6B90B5", +"&, c #0D1E59", +"*, c #697BB5", +"=, c #6A7CB7", +"-, c #6B7EB6", +";, c #6C7EB8", +">, c #6E82B7", +",, c #6389B0", +"', c #6489B0", +"), c #658AB0", +"!, c #668AB1", +"~, c #688DB2", +"{, c #6990B5", +"], c #697AB5", +"^, c #697BB6", +"/, c #6A7BB5", +"(, c #6D7EB8", +"_, c #6D81B6", +":, c #6388AE", +"<, c #6388AF", +"[, c #6389AF", +"}, c #6489AF", +"|, c #668BB0", +"1, c #6979B4", +"2, c #6879B5", +"3, c #6879B4", +"4, c #6979B5", +"5, c #6A7AB5", +"6, c #6B7CB7", +"7, c #6D80B5", +"8, c #6287AE", +"9, c #6288AE", +"0, c #0D1D59", +"a, c #6878B4", +"b, c #6778B4", +"c, c #6C7EB5", +"d, c #6186AC", +"e, c #6186AD", +"f, c #6286AE", +"g, c #668DB1", +"h, c #678EB3", +"i, c #0D1C59", +"j, c #6777B3", +"k, c #6777B4", +"l, c #697AB4", +"m, c #6A7CB5", +"n, c #6E81B7", +"o, c #6084AC", +"p, c #6185AC", +"q, c #6086AD", +"r, c #6187AE", +"s, c #6387AE", +"t, c #0C1C59", +"u, c #6676B3", +"v, c #6776B3", +"w, c #6877B4", +"x, c #687AB5", +"y, c #697CB6", +"z, c #6A7DB7", +"A, c #6B7DB5", +"B, c #5F83AC", +"C, c #6083AC", +"D, c #6185AD", +"E, c #6288AD", +"F, c #668BB2", +"G, c #6A91B4", +"H, c #6675B3", +"I, c #6575B3", +"J, c #6677B3", +"K, c #6677B4", +"L, c #6A7DB4", +"M, c #5E82AB", +"N, c #5F83AB", +"O, c #5F84AC", +"P, c #6085AD", +"Q, c #6085AC", +"R, c #10365A", +"S, c #0C1B59", +"T, c #6575B2", +"U, c #6675B2", +"V, c #6676B2", +"W, c #6676B4", +"X, c #6776B4", +"Y, c #687AB4", +"Z, c #5D81AA", +"`, c #5D81AB", +" ' c #5D82AA", +".' c #5E83AB", +"+' c #6083AB", +"@' c #6286AD", +"#' c #648AB1", +"$' c #6473B3", +"%' c #6474B2", +"&' c #697CB3", +"*' c #5D80A9", +"=' c #5E82AA", +"-' c #5F84AB", +";' c #6287AD", +">' c #6389AE", +",' c #0B1A59", +"'' c #6473B2", +")' c #6574B2", +"!' c #6574B3", +"~' c #6778B3", +"{' c #6779B4", +"]' c #687BB2", +"^' c #5B7FA9", +"/' c #5B80A9", +"(' c #5C80A9", +"_' c #5D81A9", +":' c #5E81AA", +"<' c #6184AC", +"[' c #638AB0", +"}' c #678DB1", +"|' c #0B1A58", +"1' c #6372B1", +"2' c #6472B2", +"3' c #6472B1", +"4' c #6473B1", +"5' c #6573B2", +"6' c #6576B3", +"7' c #6878B3", +"8' c #687AB3", +"9' c #5B7EA7", +"0' c #5B7FA8", +"a' c #5B80A8", +"b' c #5C81AA", +"c' c #5F82AB", +"d' c #668DB2", +"e' c #11268E", +"f' c #11268D", +"g' c #0B1958", +"h' c #6373B2", +"i' c #6877B3", +"j' c #6879B2", +"k' c #0C2F59", +"l' c #5A7DA7", +"m' c #5A7EA7", +"n' c #5B7FA7", +"o' c #5B7EA8", +"p' c #5C7FA8", +"q' c #5F83AA", +"r' c #6084AB", +"s' c #6589B0", +"t' c #0C196C", +"u' c #152064", +"v' c #11258D", +"w' c #6371B1", +"x' c #6271B1", +"y' c #6372B2", +"z' c #6778B1", +"A' c #0C2E59", +"B' c #597CA6", +"C' c #5A7CA6", +"D' c #597DA6", +"E' c #5D80AA", +"F' c #5E83AA", +"G' c #0E355B", +"H' c #0C1A6F", +"I' c #131E62", +"J' c #414C90", +"K' c #10258E", +"L' c #6271B0", +"M' c #6272B1", +"N' c #6373B1", +"O' c #6677B1", +"P' c #0B2E59", +"Q' c #577BA5", +"R' c #587BA6", +"S' c #587CA6", +"T' c #5A7EA8", +"U' c #5D82AB", +"V' c #6289AE", +"W' c #1A5FA3", +"X' c #0D1C75", +"Y' c #131E61", +"Z' c #404B8E", +"`' c #475296", +" ) c #10258D", +".) c #6270B0", +"+) c #6272B0", +"@) c #6576B2", +"#) c #6576B1", +"$) c #577AA4", +"%) c #577BA4", +"&) c #587BA5", +"*) c #5C81A9", +"=) c #648AAF", +"-) c #0E345B", +";) c #0D1D79", +">) c #101B5F", +",) c #3C478B", +"') c #11258E", +")) c #6371B0", +"!) c #6575B1", +"~) c #0B2E58", +"{) c #5679A3", +"]) c #5779A4", +"^) c #567AA4", +"/) c #577AA5", +"() c #577BA6", +"_) c #597BA6", +":) c #175797", +"<) c #0E1F82", +"[) c #101B5E", +"}) c #384487", +"|) c #0B1858", +"1) c #6170B0", +"2) c #6575B0", +"3) c #5578A2", +"4) c #5678A3", +"5) c #5679A4", +"6) c #5A7DA6", +"7) c #102394", +"8) c #111C60", +"9) c #141F63", +"0) c #293578", +"a) c #0A1859", +"b) c #616FAF", +"c) c #616FB0", +"d) c #6270AF", +"e) c #6372B0", +"f) c #6474AF", +"g) c #0B2D58", +"h) c #5576A2", +"i) c #5577A2", +"j) c #5577A3", +"k) c #5578A4", +"l) c #5578A3", +"m) c #587CA5", +"n) c #597DA7", +"o) c #5D82A9", +"p) c #6187AD", +"q) c #154F8D", +"r) c #1227A5", +"s) c #0D185C", +"t) c #1B266A", +"u) c #313C80", +"v) c #445093", +"w) c #10248D", +"x) c #6170AF", +"y) c #6474B1", +"z) c #6373AF", +"A) c #5375A1", +"B) c #5476A2", +"C) c #587AA4", +"D) c #5C7FA9", +"E) c #6084AD", +"F) c #102393", +"G) c #0C196A", +"H) c #0E1A5D", +"I) c #242F73", +"J) c #3A4589", +"K) c #626FAF", +"L) c #626FB0", +"M) c #6475B2", +"N) c #6272AE", +"O) c #0A2C59", +"P) c #5275A1", +"Q) c #5376A2", +"R) c #5477A2", +"S) c #144A84", +"T) c #0E1E7F", +"U) c #121D61", +"V) c #2B3679", +"W) c #0A1858", +"X) c #6370B0", +"Y) c #6271AF", +"Z) c #0A2C58", +"`) c #5173A0", +" ! c #5274A1", +".! c #5274A0", +"+! c #0D1B74", +"@! c #10248E", +"#! c #6171AE", +"$! c #51729F", +"%! c #51739F", +"&! c #5273A0", +"*! c #5476A1", +"=! c #5576A3", +"-! c #114379", +";! c #102291", +">! c #0C196B", +",! c #1F2A6E", +"'! c #364185", +")! c #465195", +"!! c #10238D", +"~! c #616EAF", +"{! c #616FAD", +"]! c #0A2B59", +"^! c #50729E", +"/! c #50729F", +"(! c #5375A0", +"_! c #134C8D", +":! c #0E1E81", +"~ c #323D81", +",~ c #0A2D5D", +"'~ c #1354AE", +")~ c #10228F", +"!~ c #212C70", +"~~ c #374286", +"{~ c #0F228B", +"]~ c #1251A7", +"^~ c #283377", +"/~ c #3E4A8D", +"(~ c #0F4085", +"_~ c #0B2F62", +":~ c #1328A8", +"<~ c #0D1C77", +"[~ c #303B7F", +"}~ c #104289", +"|~ c #0B3063", +"1~ c #112497", +"2~ c #1C276A", +"3~ c #0C175B", +"4~ c #0F438A", +"5~ c #0B3266", +"6~ c #0F2088", +"7~ c #0C3367", +"8~ c #365885", +"9~ c #0B3369", +"0~ c #0E1D7C", +"a~ c #0B2F60", +"b~ c #0C366E", +" ", +" ", +" ", +" ", +" ", +" . . ", +" . . . . . . . ", +" . . . . + @ # $ % . . . . ", +" . . . . & * + @ = - % ; > , . . . . ", +" . . . . ' ) ! * + @ ~ { ] % ^ , / ( _ . . . ", +" . . . . : < [ } | * + 1 = $ 2 ; > , / 3 4 5 6 . . . . ", +" . . . . 7 8 9 0 a } | * + b c d 2 % > , / e f g h i j k . . . . ", +" . . . . l m n 9 o p q } | * r s t # u % v w x y z A B i C D E F G . . . ", +" . . . . H I J K L M 9 < q ' | N O P t # Q % R S T / U V W X Y D Z ` ...+.. . . . ", +" . . . . @.#.H I $.%.L M 9 < q } } N r + @ # Q &.R S *.=.f V W X -.;.k ` ...+.+.>.,.. . . . ", +" . . . . '.'.'.#.H ).!.~.n {.].< 0 ' } | ^.b @ # Q ] /.(., / f 4 5 B i D k _. ...:.<.[.,.}.|.1.. . . . ", +" . . . . '.'.'.'.'.2.H 3.J %.m 7 9 < p } ) 4.5.+ @ ~ Q Q 6.> , / 3 4 7.X 8.9.k 0. ...a.b.<.c.d.|.1.e.f.g.. . . ", +" . . . . . '.'.'.'.'.'.'.h.i.j.$.$.m 7 k.< l.a m.| * + @ c Q Q % > , / f f n.B i j k _.o.p.q.+.r.c.s.|.t.u.v.w.x.y.. . . . ", +" . . . . . '.'.'.'.'.'.'.'.z.A.B.I $.m 7 9 ].C.q D.| * + P t # Q 6.> (.T f E.F.6 i j G.0.H.I...+.<.c.d.J.K.L.M.N.x.y.O.P.Q.. . . . ", +" R.. . '.'.'.'.'.'.'.'.'.'.'.S.A.3.I $.m n k.T.U.q V.W.X.+ + t # Q % /.S Y./ z F.W i -.Z.k _.`.a.+.<.r.s. +|.L.M.N.g..+++O.@+#+$+%+. . . ", +" . . . . . '.'.'.'.'.'.'.'.'.&+i.H I $.K n 8 < < q } *+* ^.=+@ { Q ] -+, , ;+_ V W B 8.>+,+_.G ..+.'+c.d.d.t.)+!+M.x.x.~+{+Q.#+$+]+^+/+. . . . ", +" . . =.f . . . . . '.'.'.'.'.'.2.A.H (+$._+:+<+].< q } | N ^.s [+# Q }+6.> *./ f V 5 |+C D 0._. ...q.1+2+3+4+|.1.!+N.5+y.6+O.Q.#+$+7+8+/+/+/+/+. . . . ", +" . . / / y e . . . . . '.'.'.'.&+#.H I 9+0+m a+9 b+l.} m.X.5.+ @ = $ % > c+Y./ f U W X d+k k _. ...e+f+g+c.d.J.)+h+i+j+x.6+k+@+l+m+n+o+/+/+/+/+/+/+/+. . . . ", +" . . S , *.x T / / 3 . . . . . '.'.#.p+q+!.~.m 7 9 < 0 ' } r+* P @ # { s+% w , / e V 5 B -.j k _. .t+e+1+2+3+d.|.K.u.u+N.x..+O.v+w+x+y+z+/+/+/+/+/+/+/+/+/+/+. . . ", +" . . ; > > ^ , A+/ / e y ( . . . . . i.).B+$.C+7 9 : l.a } | * + D+t d Q % > , / f E+5 6 d+j k _.o.p.F+<.r.c.d.J.)+h+!+G+x.H+O.@+@+$+y+%+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", +" . . 2 % % /.-+> ^ S , Y.I+/ =.e . . . . . I $.C+L 9 J+K+a } & 4.+ P c d Q v L+S / f f g |+i j k ,+H.t+:.+.<.c.s.M+N+O+i+N.x..+~+@+#+P+]+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", +" . . # $ Q 2 s+6./.> > , , , , / / ;+y . . . . . 7 a+< U.Q+} | N R+P S+# u % > , / ( f V W i -.Z._.T+I...+.U+c.V+W+t.O+!+N.x.y.++X+@+#+$+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", +" . . @ t # Y+Y+Q Q &.% v v > c+c+S , , / =.( f . . . . . < q Z+) X.^.D+c Q Q % /., Y./ 4 V W i d+k Z T+`.q.+.<.r.d.}.`+)+!+N.x. @.+k+@+#+x+%+z+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . f f . ", +" . . + D+@ c # # $ Q Q Q }+% % /./.S S , *.T / ;+;+f . . . . . m.4.5.b @ # Q % R > , e f V W i 8.j k _.G ..+.'+<.c.4+`+)+h+v.w.y..@O.@+#+x+n++@/+/+/+/+/+/+/+/+/+/+/+. . . . f f f f f . ", +" . . . ^.+ + P b @ c t # - - u u &.% /.R c+c+S , A+/ / y f . . . . . 5.+ @ # Q ] /.L+A+=.f V W |+@@9.k _. .t++.b.g+c.W+|.1.!+u+j+#@~+O.@+l+#+$@8+/+/+/+/+/+/+/+/+/+. . . . f f f f f f f f . ", +" . . | N * * + + =+=+D+@ S+# %@%@- Q 2 % 6.v /.> , , , / T y f f . . . . . # Q % % > , / f E+V B -.9.k _.o.p.F+f+r.c.d.|.&@O+u+N.x..+++@+*@#+]+%+/+/+/+/+/+/+/+. . . =@f f f f f f f f f f -@. ", +" . . . W.D.| | 4.* 5.r + P b @ S+# # Y+- Q Q }+% ; -+> w w S , I+/ / 3 f . . . . . ; > , A+f V g ;@i j k _.>@`...+.r.c.d.|.&@,@'@G+x..+O.)@@+x+$+z+/+/+/+/+/+. . . T / ( y f f f f f f f f f f . . ", +" . . . a } V.} W.| r+4.* ^.* + D+@ @ @ # # - Q Q ] 2 ; /.-+> w (., A+Y./ f f . . . . . , / / U V X @@j k Z .t+a.+.<.c.d.|.K.O+!+G+x.y.!@P.Q.~@$+8+/+/+/+. . . ; > w ^ , T / 3 f f f f f f f f f . . ", +" . {@. . . . Z+} ) D.m.| r+* * 5.r + D+@ S+c # # - Q Q s+% % -+> c+(., , / / / / f . . . . . f g B i j k _._.`.q.+.<.c.]@ +1.O+!+N.x..+!@)@^@#+$+%+%+. . . # - Q % % % > L+w Y./ / / f f f f f f f . . ", +" . /@(@_@:@. . . . [ } } W.| N ! * * R++ + @ @ c c # # # Q u 2 % % ; > L+, , *./ / =.;+f . . . . . i j 9.E >@G ..+.'+c.<@4+&@)+!+N.G+.+O.O.l+#+@+. . . O s @ c c $ Q Q 2 % % > c+, I+x ;+f f f f f f . ", +" . [@/@}@/@/@/@. . . . q } } W.V.! ! N * + O + b b [+t c # $ Q u 2 ] % v R > > ^ *.A+I+/ e f f . . . . 9.E _. ...+.'+[.V+}.|.)+!+v.x..+6+{+.+. . . *+X.r+* r + s @ S+c { - Q s+% > > (., *./ f f f f f . ", +" . |@|@|@1@}@2@/@}@/@. . . . Q+[ } W.| N & * * R++ D+=+@ S+~ # # %@Q Q ] % R -+> ^ , w , , / =.;+f . . . . . ...3@<.4@3+}.|.)+!+u+w.x.)+. . . 0 q } [ V.| & 4.+ R++ b @ # # Q Q &.% 6.> > , A+x ( f f . ", +" . 5@5@6@|@7@|@|@8@}@}@2@/@. . . . ' } ) | | X.| * * ^.+ P 1 @ @ ~ # d Y+Q Q % % v > v w , , *.T / =.f f . . . . . 9@2+,.d.|.t.!+!+b.. . . <+9 o b+p 0 q Z+} ) | N * O + s @ t = d - Q % % -+> ^ , *./ . ", +" . 0@5@a@a@b@c@6@7@|@|@[@8@|@8@. . . . . } ) W.W.N & r+* * r + s 1 @ # # # { - Q u % % ; ; > c+, , , I+/ ( f f . . . . . d.M+t.j . . . $.0+m :+7 M 9 9 < U.q Z+} ) *+& 4.* O + @ @ c # { - }+% % R ^ , . ", +" . d@e@f@f@g@5@5@h@b@5@h@|@b@|@|@|@|@. . . . Z+} } | | & X.r+5.i@+ s D+@ [+t # # Q Q 2 &.% % /.R > c+, , T T / y f . . . . . . . . H 3.I !.$.%.~.C+7 {.a+T.: C.< q q } D.| r+* ^.+ =+1 @ c # - Q s+% v . ", +" . j@k@d@d@d@d@g@f@e@d@l@5@5@a@b@6@c@6@|@|@. . . . [ } } m.| | r+* * + + =+D+@ ~ ~ # m@n@n@Q &.% % v > c+(., , Y./ / =.f . . . '.h.#.#.o@H I I J $.K m C+7 M M ].< U.p q ' D.m.| ! * O + @ @ c @ d d 2 . ", +" . p@q@q@r@r@r@j@s@d@d@f@e@5@l@0@5@5@b@b@c@7@7@7@. . . . } V.V.) | & * * * + s t@u@v@v@w@m@n@x@y@u % v % > > (., , *.x / Y.. . z@A@B@'.2.#.#.p+j.I !.$.C@_+:+C+<+8 9 o < U.0 D@} W.m.| r+* O + s @ t # . ", +" . E@E@F@F@G@q@q@H@H@I@d@H@d@d@d@d@5@f@5@5@5@5@5@c@h@. . . . [ Z+) ) m.| 4.J@K@L@M@N@O@v@w@m@P@x@Q@R@S@] % 6.6.> > w , , . . T@U@V@W@X@Y@X@h.2.#.#.H B.I !.$.$._+Z@7 7 9 T.o < l.q q } } | | X.^.r D+=+. ", +" . `@E@E@E@E@F@G@ #p@q@q@q@q@d@k@d@H@d@d@g@f@g@d@5@0@5@5@6@. . . . Z+} .#+#@###$#L@%#M@O@O@&#P@P@n@n@*#=#S@&.}+% 6.-+> > . . -#T@;#U@>#z@,#X@Y@'#@.#.)#!#H I I I $.K m 7 7 7 9 9 T.< q q } } D.r+4.* 5.. ", +" . ~#~#~#{#~#E@E@E@]#G@^#^# #p@q@q@q@j@k@j@k@d@d@d@d@0@0@e@l@0@5@/#(#_#:#<#.#[#}#K@K@L@M@|#O@#2#3#4#4#x@R@5#6#% }+v . . 7#8#9#0#a#U@T@U@U@,#b#X@c#'.#.#.)#H 3.I l $.$.m m 7 7 M 9 9 < 0 q D@} *+| | . ", +" . d#e#f#~#~#~#g#h#{#{#E@i#E@E@q@F@p@]#q@q@q@q@q@j@d@k@d@d@d@j#k#l#m#n#o#:#:#p#+#}#q#$#$#$#M@M@u@v@1#r#s#3#t#u#v#5#w#x#. . y#z#A#B#C#D#a#E#F#G#V@z@H#X@I#'.@.#.#.H H B.I $.$.0+K :+7 M M : : < q q ' } . ", +" . J#K#K#K#K#L#~#~#~#~#~#~#{#{#i#E@E@^#]#G@]#q@q@^#q@I@H@M#M#N#O#k#k#l#P#Q#_#R#:#S#[#[#J@$#$#T#T#u@U#1#1#P@3#t#t#u#V#W#X#Y#Z#`# $y#z#7#7#D#D#-#.$U@U@+$z@@$H#'#'.2.2.#.p+j.I I l $.%.m m 7 7 9 ].< C.q . ", +" . #$J#K#$$$$%$K#K#L#K#L#f#~#f#~#~#`@`@E@E@E@E@E@E@q@&$*$=$=$-$-$;$O#>$>$,$,$Q#:#:#S#S#'$q#J@$#$#T#)$!$U#1#1#s#~$t#t#{$W#]$^$^$/$($`#_$y#:$7#9#D#<$a#E#U@+$[$b#X@X@A@'.2.#.p+H H B.!.!.~._+m }$7 a+9 ].. ", +" . =@|$#$#$#$1$2$K##$%$K#K#L#e#f#e#~#L#~#~#~#{#3$4$5$6$7$7$8$&$*$-$-$9$9$>$0$0$P#P#Q#S#S#'$'$'$a$b$T#c$!$!$#2#3#d$e$f$g$]$^$^$h$/$i$`#j$k$y#7#7#l$<$m$E#;#U@+$z@z@H#'.'.@.#.#.i.H q+I J $.K K :+C+7 . ", +" . n$o$p$=@o$q$#$q$#$#$#$J##$$$%$$$K#K#e#e#r$s$s$t$4$5$5$u$v$7$w$w$w$-$x$9$>$>$0$y$P#z$A$B$'$'$'$C$b$T#D$D$!$E$#F$F$G$H$I$J$K$^$L$Y#h$($($`#`#y#y#M$7#C#D#E#E#N$U@>#z@b#X@'#'.z.#.#.p+H j.!.O$K 0+m . ", +" . P$P$n$=@=@=@=@p$p$o$#$#$#$#$#$Q$K#Q$R$R$S$T$r$s$t$t$U$5$6$V$6$w$w$W$x$-$X$;$>$0$y$y$z$z$Y$Z$`$'$ % %.%T#T#!$u@+%@%#%$%%%&%*%=%J$K$-%;%>%>%($,%'%`#`#y#z#7#)%D#0#E#;#N$U@z@,#@$X@Y@'.S.#.o@H I j.I J . ", +" . !%!%~%P${%!%n$!%=@=@=@=@=@p$#$]%^%/%/%/%(%S$T$_%:%s$<%t$5$5$5$6$u$7$w$w$-$X$X$>$[%>$y$y$Y$Y$A$`$}%C$ %.%.%|%1%+%+%2%3%4%$%%%*%5%I$J$K$^$;%>%6%7%,%8%9%0%k$:$7#8#8#D#a%E#.$U@[$z@z@X@Y@Y@S.@.#.A.H q+. ", +" . b%b%c%b%d%d%!%!%!%e%f%e%n$g%g%g%^%h%h%i%j%/%R$R$T$_%:%s$k%U$U$4$6$u$V$w$7$w$x$X$X$l%l%0$m%n%z$A$o%`$p%q%.%.%|%r%+%s%2%2%3%t%u%v%*%5%J$]$w%L$x%y%6%7%,%'%z%A%`#y#B%7#l$l$D#E#E#T@[$C%z@H#X@A@I#z.#.A.. ", +" . D%E%F%F%b%b%G%b%~%~%H%I%I%I%J%J%J%g%I%I%g%]%(%R$_%R$T$T$K%k%K%U$L%M%N%u$w$O%P%Q%X$X$X$[%R%0$n%n%z$Y$Z$Z$S%q%T%|%U%V%W%s%X%3%t%4%u%v%*%Y%J$J$Z%;%;%y%y%`%8% &9%.&`#+&y#7#7#B#D#0#E#E#U@U@@&#&W@X@B@&+. ", +" . $&E%E%E%%&E%&&b%b%*&=&-&;&I%;&I%>&I%I%I%I%g%h%]%/%,&_%_%'&'&k%k%L%U$M%)&N%u$!&O%x$x$W$X$~&~&{&{&0$]&z$Y$Z$Z$T%.%^&/&U%W%s%(&2%_&3%:&u%v%<&[&}&K$K$;%>%y%y%,%8%9%9%z%|&`#y#:$7#7#C#m$E#E#.$U@U@z@@$X@. ", +" . 1&$&E%2&3&4&5&6&6&*&7&6&=&=&*&=&>&-&8&-&I%I%J%g%h%]%,&(%R$_%9&9&'&k%0&L%)&)&u$v$O%!&W$P%W$X$~&~&[%a&z$Y$b&o%c&.%d&d&e&/&U%W%s%X%2%3%t%f&f&g&<&<&h&i&Z%Z%j&y%y%k&l& &m&.&|&n&0%y#z#A#)%D#<$E#;#T@>#@&. ", +" . o&1&1&1&p&p&q&q&p&6&6&6&6&6&*&*&r&8&7&=&8&8&I%;&s&g%]%]%]%,&,&_%9&'&:%K%L%L%U$t&)&!&!&!&W$P%u&v&~&[%{&{&a&Y$w& %T%T%x&y&y&U%z&A&A&B&C&D&D&E&v%v%v%F&G&i&Z%H&x%I&J&K&8%9%m&.&|&L&M& $y#M$7#8#D#m$a%U@. ", +" . N&o&O&O&P&Q&q&q&p&6&q&q&6&6&5&6&6&6&6&=&7&*&*&=&;&;&g%R&^%^%,&,&S&T&T&U&U&k%L%L%M%N%V&W&O%!&X&u&v&Y&v&{&m%m%Z&C$Z&`&c&x&x&y&y& *.*+*s%2%C&D&t%@*f&v%<&#*G&$*%*H&x%y%`%l&8%9%m&A%&*n&**=*y#y#7#7#9#m$. ", +" . -*-*P&O&P&P&P&P&O&p&;*Q&p&p&p&q&q&5&6&q&6&6&6&6&*&=&=&>*s&s&,*'*,&)*S&T&T&!*k%k%L%M%M%V&t&!&O%P%P%X&Y&v&v&{&~*'$~*{*]*]*c&x&x&^*^& *+*/*(*_*D&t%:*E&<*[*F&#*G&$*%*}*I&I&`%K& &9%m&&*|*n&**1* $y#2*2*. ", +" 3*4*5*-*-*-*-*O&-*P&O&P&6*P&P&Q&p&p&q&p&6&5&q&6&6&6&q&6&*&7*7*>*s&,*8*8*9*S&T&U&0*U&a*b*M%M%V&W&W&c*c*X&X&Y&d*e*'$f*g*h*{*]*i*j*x&x&k* * *l*(*(*_*C&m*@*f&n*[*F&#*G&o*%*}*p*q*r*K&s*t*m&&*|*u*v*w*x*k$. ", +" 3*y*z*4*4*A*-*-*-*-*-*-*P&P&P&O&P&p&p&P&P&;*B*p&p&q&q&q&6&6&7&=&C*7*,*8*8*8*9*T&D*E*!*a*a*F*G*H*V&I*W&W&c*J*~*K*'$L*M*f*g*h*N*]*i*c&x&^*y&O* *l*P*(*Q*R*m*S*E&<*T*F&U*G&V*W*X*X*q*r*l&s*Y*Z*`*|***** =.= ", +" +=y*@=@=#=4*4*4*5*$=%=-*-*-*-*O&O&P&-*P&P&Q&Q&P&q&p&;*q&q&q&7&q&7&C*s&,*,*'*8*9*&=*=D*!*U&a*F*G*M%V&t&W&W&==c*I*S#-=;=L*>=,='=)=h*]*i*j*j*^*O*!=~=/*{=]=Q*^=S*S*<*<*T*F&/=o*(=W*X*X*J&r*_=s*:=`*I$<=-%.= ", +" +=[=}=}=[=y*@=y*z*|=z*4*1=1=-*$=-*%=-*-*-*P&P&-*P&P&P&Q&p&q&q&p&q&7&7&C*7*,*,*8*8*D*&=D*!*!*a*a*a*F*G*V&2=W&3=4=:#5=-=-=6=7=>=8=9=h*0=a=b=c=^*O*O*!=l*d={=e=R*R*R*S*E&n*F&U*U*f=o*W*g=X*h=r*G$G$&%H$I$i= ", +" j=k=l=m=l=}=}=}=}=[=@=#=@=4*#=n=1=$=o=-*1=p=-*-*P&q=-*q=-*P&O&O&;*q&6&r=C*7*7*s=t=u=&=v=9*D*0*0*a*a*F*w=w=w=2=x=:#y=z=A=B=B=6=8=C=D='=h*N*E=F=F=G=^*H=H=l*d={=I=e=R*J=K=L=L=M=N=U*o*O=P=4%Q=R=R=G$*%H${$ ", +" j=S=T=k=U=k=V=k=k=}=m=[=[=@=@=y*y*@=n=W=1=X=X=$=-*-*p=-*-*-*q=-*-*O&;*;*7&7&7&C*t=t=Y=v=&=&=*=D*D*0*a*Z=G*`= -5=_#.-+-@-#-$-%-B=&-6=7=,=*-N*=-E=----;-O*O* *l*>-d=]=,-J='-'-L=n*N=)-B&X%X%_&_&!-Q=R=R=~- ", +" j={-S={-S=S=T=S=T=k=k=V=k=V=l=[=[=[=y*y*y*n=n=o=o=n=$=p=1=%=%=$=-*-*P&O&;*;*]-r=r&C*^-t=t=/-&=/-0*0*0*0*Z=`=F*(-_-:-<-.-[-#-A=}-$-|-&-1-2-*-3-4-0=E=5-6-;-f$7-8-l*d=9-]=,-J=0-U%a-z&W%W%s%2%2%2%_&3%4%F$ ", +" b-c-c-c-d-{-d-{-S=S=S=S=T=T=k=k=V=k=V=}=[=[=y*@=n=o=e-n=1=o=1=$=p=%=-*-*P&O&;*r=]-7&f-g-t=t=Y=h-&=D**=0*0*i-j-k-(#l-m-n-.-[-@-#-o-$-p-B=&-q-2-2-3-4-r-E=5-;-G=f$H=s-8-d=x&x&y&y&q%U%U%z&W%s%s%X%2%_&2%F$ ", +" t-c-u-c-c-c-v-d-{-w-{-w-S=x-S=S=S=U=k=l=k=k=V=}=}=[=e-e-e-W=e-e-o=o=n=$=$=-*y-O&;*]-]-z-C*g-^-Y=Y=A-&=B-B-C-i-D-n#E-F-l-G-H-.-.-@-I-}-}-B=J-1->=2-3-K-4-r-5-L-6-M-f$]*]*i*c&j*x&^*^*y&e&q%z&z&N-A&s%B&+% ", +" t-O-u-u-u-u-P-Q-c-c-c-v-c-R-{-S-{-S=S=T=S=k=S=k=k=T-}=m=}=e-e-e-e-e-n=1=n=$=$=y-U-6*V-W-X-f-f-g-Y-Z-A-/-B-B-`- ;/#.;+;@;l-#;H-H-.-[-I-I-}-$;p-J->=>=2-%;4-&;r-,=3-,={*Z&]**;a=i*c&=;x&-;y&!=/&U%a-+*s%+% ", +" t-;;>;,;;;O-u-u-';Q-u-Q-Q-P-c-d-);d-);w-!;S=S=U=T=T=k=T=k=V=}=l=e-~;e-e-e-n=$={;y-$=y-U-V-];]-f-f-Y-^;Z-/;/;/;(;_;:;.;.;<;@;l-[;};n-.-|;I-1;}-$;2;J-3;4;%;6=6=6=8=8=,=3-3-h*]*a=a=i*c&j*x&x&^&!=y&U%+*+% ", +" 5;6;;;;;;;;;;;7;8;O-u-O-O-';';';';Q-c-c-);{-);w-{-{-S=k=S=U=T=k=V=k=m=e-e-~;e-e-{;1={;U-U-];V-];9;9;g-Y-^;^;/;0;_;a;a;:;.;.;b;@;[;G-H-c;[-|;I-d;$;$;J-o-}-B=B=|-&-6=8=8=,=9=3-h*0=]*`&e;a=c&x&d&^&^&y&|% ", +" f;g;g;h;h;i;j;j;;;;;8;>;k;O-u-u-O-c-u-u-';c-c-c-);c-d-w-w-S=S=S=S=T=U=k=k=V=l;l;~;m;e-1=n;o;V-U-];p;9;g-q;g-0;r;s;t;u;u;:;:;.;v;+;b;[;};w;w;x;y;[-|;|;I-o-z;}-$-%-B=&-6=6=8=8=,=*-h*h*0=]*]*i*j*j*j*x&|% ", +" f;A;B;g;g;g;g;g;h;j;6;6;;;k;;;;;O-;;O-k;u-u-c-Q-';';';c-v-);c-w-);d-S=S=U=S=S=T=S=l;~;m;{;{;C;y-y-V-];9;p;p;g-D;s;E;F;G;H;I;:;:;J;<;<;K;[;L;L;H-H-M;y;[-|;I-I-}-}-$-%-p-B=6=6=C=7=8=,=)=h*N;0=]*]*i*c&|% ", +" f;O;P;Q;R;P;Q;S;g;g;g;g;g;i;j;j;;;;;;;;;7;k;O-O-u-u-u-P-';P-u-c-c-);d-w-S={-S=!;S=S=U=k=~;{;{;n;y-o;U-T;p;p;p;U;V;W;X;Y;Y;G;Z;u;:;`;J; >b;b;.>[;};H-n-n-c;[-[-I-#-#-o-$-$-p-|-&-6=6=q-8=8=9=9=h*h*0=]*+> ", +" @>O;#>O;$>#>O;P;P;P;P;S;g;g;g;g;i;h;j;6;6;6;;;;;;;,;>;k;u-u-u-u-';u-';c-c-c-);{-);{-{-S-S=S=U=%>{;&>&>o;*>W-=>U;->;>>>,>'>Y;)>)>!>`;J;~>~>{>{>K;@;]>[;G-H-M;w;y;|;[-@-I-d;z;$-p-B=B=|-6=6=M*8=9=9=h*h*.% ", +" ^>/>(>_>(>_>_>O;O;O;$>O;A;A;P;P;S;R;g;g;i;i;i;6;6;;;;;;;;;k;k;u-O-u-O-u-Q-u-c-c-';c-c-);w-d-S=S-S-:><>n;[>[>o;}>|>1>2>3>W;'>'>)>4>5>6>7>8>J;~>~>{>{>b;K;[;[;H-H-.-c;y;[-[-#-#-}-}-p-$-B=|-&-6=>=8=,=,=.% ", +" 9>0>0>0>a>a>(>/>_>_>#>b>O;O;P;$>P;P;P;Q;g;S;c>g;g;h;i;d>j;6;e>;;;;;;k;u-;;O-u-O-Q-Q-';c-';c-);););{-S-S=n;n;[>f>|>g>g>2>'>h>h>h>h>i>)>!>7>7>8>`;`;~>~>b;b;K;.>[;[;m-w;w;c;.-[-j>I-#-z;}-k>B=B=B=&->=>=.% ", +" 9>l>m>n>0>0>0>0>a>o>(>(>_>_>p>#>p>O;O;P;P;Q;P;Q;g;g;g;g;i;g;i;h;e>j;q>;;;;;;8;7;8;>;u-O-u-u-O-';r>c-c-););w-);s>|>t>u>v>3>w>,>,>'>h>x>)>i>y>5>z>7>`;`;A>~>B>{>K;b;[;L;};H-<-w;c;[-|;#-I-#-}-}-$-B=B=C> % ", +" D>E>F>m>m>m>G>0>0>n>0>0>0>o>_>o>(>_>_>#>#>#>O;#>P;P;P;A;P;B;g;B;g;i;H>i;i;6;;;h;;;;;8;7;O-O-O-u-u-Q-I>';Q-c-c-J>K>L>M>N>O>u>v>w>P>w>Q>R>S>h>)>)>4>!>7>6>`;`;J;~>b;{>b;.>K;[;T>H-U>c;c;[-|;@-#-#-$-}-V> % ", +" W>X>E>E>m>Y>m>Y>Z>`>n>0>0>0>l>0>0>0>(>0>(>/>(>_>_>#>#>O;P;P;P;P;A;B;A;R;g;g;g;j;i;i;i;;;;;;;;;;;8;k;8;O-u-O-u- ,K>.,+,@,M>M>#,u>v>3>P>,>Q>$,$,h>)>i>%,4>6>7>6>`;J;~>~>+;b;]>]>[;L;H-w;w;y;.-[-|;#-#-o-'$ ", +" &,X>X>*,X>X>X>X>E>E>=,m>`>m>`>l>-,l>n>0>0>0>;,;,a>o>(>_>_>O;P;#>#>P;O;P;c>B;P;c>B;g;i;i;i;6;;;e>6;;;7;;;,;O-O->,_;,,',.,),!,L>N>N>#,v>v>~,w>w>w>h>h>{,i>y>4>4>7>6>:;`;J;~>{>{>b;]>.>[;L;w;w;c;[-.-[-#-'$ ", +" &,],],],],^,*,],/,X>X>E>E>E>Y>m>m>m>`>n>`>l>G>l>0>0>0>(,;,o>(>_>(>#>O;p>#>#>P;P;P;c>A;S;g;g;g;g;i;j;i;;;;;6;;;_,s;:,<,[,},.,),+,|,L>M>N>#,v>v>P>w>w>$,h>h>S>)>)>4>7>7>6>`;A>~>{>b;b;b;]>.>[;L;w;H-c;[-'$ ", +" &,1,2,3,4,2,],],],5,^,^,X>X>E>E>E>F>6,E>Y>`>`>l>`>`>`>n>l>0>o>a>_>(>_>_>_>#>p>O;O;P;$>P;P;P;g;c>g;c>g;g;i;q>i;7,s;8,8,9,:,[,[,',),.,),M>N>N>N>v>v>v>w>w>,>Q>$,Y;i>)>y>!>5>6>:;`;`;~>{>{>b;K;[;[;};H-U>'$ ", +" 0,a,a,b,a,3,3,2,3,4,],],],*,^,],^,X>X>E>E>E>E>E>6,`>m>m>`>Z>G>`>l>0>0>0>a>_>(>p>(>#>#>#>$>P;#>P;P;P;P;P;B;g;i;c,s;d,e,f,8,:,<,:,[,[,',',),@,M>N>M>#,g,v>h,P>w>'>$,h>S>)>y>y>4>6>7>`;`;~>B>b;b;b;]>[;L;S# ", +" i,j,k,k,b,j,b,a,3,3,3,2,l,3,],l,],],*,/,/,X>m,E>X>Y>Y>=,F>F>F>m>-,-,l>n>`>0>0>0>o>o>o>p>(>#>p>#>#>b>O;P;n,P;c>c,V;o,p,q,e,r,r,s,9,9,<,,,},.,.,+,L>M>M>N>O>v>v>3>w>Q>'>h>h>{,)>y>4>4>6>6>`;`;~>~>b;b;b;S# ", +" t,u,u,j,v,k,k,j,k,a,w,a,b,a,a,3,1,4,x,],l,],],/,X>X>^,y,E>Y>=,=,m>z,`>`>m>l>n>n>l>0>G>0>0>o>(>/>_>#>#>#>O;$>$>A,V;B,C,o,p,D,e,e,r,8,E,9,<,[,},',.,.,!,M>M>F,O>O>~,3>P>w>$,Q>h>S>Y;G,y>4>7>6>8>`;J;~>~>:# ", +" t,H,I,u,u,J,u,j,j,K,k,j,j,k,k,b,b,a,a,3,1,4,4,],4,],],/,/,^,X>/,*,E>E>E>E>`>m>`>`>`>`>m>0>-,0>0>0>0>(>/>_>/>p>L,|>M,N,N,C,O,P,Q,D,e,f,e,8,9,9,<,[,',.,),),|,M>N>N>u>u>v>P>w>w>,>$,h>S>)>y>4>4>7>:;8>`;R, ", +" S,T,H,H,I,U,V,V,u,v,W,u,X,j,k,k,b,b,b,b,a,a,a,3,3,3,Y,x,x,],],],],],X>X>E>E>E>E>=,F>`>`>z,`>m>`>0>G>l>0>0>0>0>L,|>Z,`, '.'N,N,+'o,P,P,e,e,@'8,9,8,:,<,[,,,#'),),M>M>F,N>u>v>3>w>,>,>h>h>h>S>i>y>4>4>6>:# ", +" S,$'%'%'T,T,I,U,I,V,U,H,u,u,J,J,u,v,v,j,j,k,b,b,a,a,b,3,3,1,l,3,],l,x,*,],*,*,/,m,X>m,E>F>Y>`>z,m>m>`>`>m>-,G>&'|>*'Z,Z,Z,=' 'M,N,B,-'o,o,d,D,e,;'8,8,9,>'[,,,',),),+,M>M>N>N>v>v>h,w>$,h>h>h>{,)>)>%,:# ", +" ,''''''''')')')'!')'I,T,T,I,H,u,u,u,u,v,W,v,j,j,j,j,k,~'~'{'a,3,3,3,2,x,4,],],],],/,*,y,/,X>m,E>z,E>F>F>Y>`>`>]'|>^'/'('*'Z,_':'M,M,M,N,o,o,<'P,D,D,e,8,s,9,:,<,[,['.,.,),M>@,M>#,O>}'v>3>w>w>h>h>h>S>_# ", +" |'1'2'3'4'''''''5'''%'T,)'T,T,I,H,u,I,6'u,u,u,v,u,u,X,v,j,j,j,7'b,a,a,b,3,3,3,Y,l,],Y,],*,*,*,*,*,X>X>E>E>E>Y>8'|>9'9'0'a'('('b'*'Z,='M,N,c'B,o,o,Q,P,Q,q,e,8,8,9,<,<,[,.,.,),),M>M>F,N>d'u>h,w>w>,>$,o# ", +" e'f'g'1'1'1'2'h'4'''4'''''''%'%'%'I,T,T,I,T,u,6'u,u,u,u,J,v,j,J,j,k,k,j,i'b,a,a,3,3,2,],4,x,],],],],^,/,/,*,X>j'k'l'l'm'n'o'p'/'('('*'_'Z,='M,q'.'-'r'o,Q,D,e,e,8,8,8,9,<,[,',',s'),L>M>M>N>O>v>3>3>w>/# ", +" t'u'v'v'e'w'x'w'1'y'1'3'3'4'4'''''5'%''')')'T,T,T,T,I,u,u,u,u,u,v,J,K,j,v,k,k,b,b,a,a,b,3,3,3,3,1,l,l,],*,*,],z'A'B'C'D'l'l'9'n'0'^'('('E'*'_'='='='F'N,O,o,P,P,P,D,e,f,8,9,:,[,[,,,.,),L>@,M>N>O>u>u>G' ", +" H'I'J'K'K'v'g'L'L'w'w'M'1'1'y'''3'N'2'''%'%'%')'%'T,T,T,T,I,T,I,u,H,u,u,u,u,j,j,k,~'b,b,~'7'3,7'3,3,3,2,1,Y,O'P'Q'R'S'B'B'l'l'o'o'T'0'p'('*'E'_' 'U'='.'N,N,O,o,D,e,D,e,f,8,8,:,V'[,[,.,',),@,|,M>/#W' ", +" X'Y'Z'`'`' ) ) )g'L'.)L'+)1'w'1'1'3'1'2'''''''''%'%'%'!')'T,)'I,T,H,@)u,H,u,u,u,J,j,j,j,k,k,b,b,a,a,b,a,3,#)P'$)%)&)R'R'S'B'D'l'l'9'9'0'0'p'('*)Z,Z, 'U'='.'N,N,r'P,D,P,D,@'e,8,s,9,<,[,=)',),@,-) ", +" ;)>),)`'`'`'`'') )g'.).).)L'))w'w'))w'1'1'4'1'3'4'N'''''%'%')'%'T,T,T,T,I,T,V,H,u,u,u,u,K,v,J,J,k,~'b,~'!)~){)])^)/)/)()R'_)S'B'l'l'm'9'n'0'('('('b'Z,Z,=' 'M,N,N,C,o,o,p,e,e,e,8,8,9,:,<,[,_;:) ", +" <)[)})`'`'`'`'`' ) ) )|)1).).)L'L'L'L'L'w'))1'1'1'3'2'3'h'h'''%'%')')'T,!'T,T,T,T,6'u,u,H,u,u,u,j,J,j,2)P'3)4){)5)5)$)$)Q'Q'S'S'B'D'6)l'T'o'o'0'0'('('*)Z,Z,M,M,.'N,-'o,o,o,P,d,e,;'8,8,:,K> ", +" 7)8)9)0)J'`'`'`'`'`' ) )a)b)c)d).).)d).)L'.)e)1'))x'1'1'1'4'''''''''%'%')'%'!')')'I,I,U,U,V,u,I,u,u,f)g)h)i)j)4)k)l)5)])$)&)&)m)S'B'D'n)6)l'9'n'o'0'p'('E'_'o)Z,M,.'F'N,r'o,P,o,e,D,p)s;q) ", +" r)X's)t)u)v)`'`'`'`'K'w)K'a)b)b)x)1).).).).).)L'w'))))1'1'1'3'1'N'1'4'''y)''%')')'T,T,T,T,6'I,V,z)g)A)A)B)h)i)i)l){){)$)$)/)C)()R'S'B'B'C'l'm'9'o'0'a'D)('_'Z,_'M,='F'N,N,r'o,P,E)s; ", +" F)G)H)I)J)`'`'`'`'`'w) )w)b)b)b)c)K)L)d).).)d).)L'))))w'e)e)1'1'y'2'''4'4'%''')'%'M)T,T,T,N)O)P)A)A)Q)B)B)R)j)j){)5)5)5)$)$)Q'&)S'S'B'D'l'l'9'0'0'p'p'('('*'Z,:'M,F'M,N,-'V;S) ", +" T)U)I'V)J'`'`'`'`'w)w)w)W)c)c)b)c)c)c)L)b)d).).).)X)L'+)w'e)e)1'1'1'h'2'4'''''%')'%'Y)Z)`) !.!P)A)A)A)B)i)j)4)4)4)4)5)$)$)/)Q'&)S'S'B'D'l'm'9'0'0'p'a'('*'_'Z,Z,:'M,V; ", +" r)+!s)t)u)v)`'`'`'`'w)w)@!W)b)b)b)c)b)c)b)L)K).).)d)d)L'L'L'w'w'1'e)1'1'1'3'4'''#!Z)$!$!%!&!.! ! !P)A)*!B)=!i)l)l)4)5)5)$)$)Q'R'S'S'B'6)l'l'l'9'n'0'D)('*)E'_'|>-! ", +" ;!>!s),!'!)!`'`'`'`'!!w)W)b)~!b)b)b)c)b)b)b)c)b)K).).)L'.).)L'))))e)+)1'1'{!]!^!/!$!$!%!%!&!.! !P)(!Q)B)B)h)j)l){)5)^)$)$)Q'&)R'S'S'B'D'6)m'm'9'9'p'|>|>_! ", +" :!)[!}!`'`'`'`'!!!!!!|!~!~!~!c)b)b)c)c)b)b)c)K)x)L).)1).)X)L'L'))1!2!3!3!4!^!/!/!$!%!5!&!.!.! !A)A)B)h)i)i)l)4)5)5)$)$)%)R'&)R'S'B'n)l'k'6!7! ", +" 8!9![)0!a!b!`'`'`'`'!!!!!!|!~!~!b)~!c)c)b)b)b)c)b)c)c)L)d).).).)c!2!d!e!3!f!4!4!g!/!%!`)`)&!.!.!P)A)h!B)B)i)i!4)4){)5)])$)$)%)&)S'k'j!k! ", +" l!H's)m!n!o!`'`'`'`'!!!!|!~!~!~!~!p!b)b)c)c)b)b)b)b)b)b)K)q!2!r!r!s!e!e!3!3!4!4!/!/!`)%!`)`).!P)t!A)Q)B)u!i)j)l)l)4)5)5)P'v! ", +" w!x![)y!z!`'`'`'`'!!!!!!A!~!~!~!~!~!p!~!b)b)c)b)b)c)q!2!B!B!B!B!r!C!e!e!3!f!D!4!/!$!%!`)E!.!.!P)A)F!B)B)G!R)P'P'H! ", +" I!>)J!K!L!`'`'`'`'!!!!|!~!~!~!~!~!~!~!b)~!b)c)M!2!B!B!B!B!B!r!r!N!C!e!3!O!3!4!^!/!/!%!P!`).!.!t!(!Q!g)R! ", +" S!T!s)U!V!o!`'`'`'!!!!!!|!W!~!~!W!~!~!~!~!X!2!B!B!B!B!B!B!B!r!B!r!Y!e!Z!e!`!D!4!^!$!$!%!5!Z)O) ~ ", +" .~+~@~I)#~`'`'`'`'!!!!A!|!W!~!W!W!W!X!2!B!B!B!B!B!B!B!B!B!B!r!r!r!r!e!Z!3!D!D!g!Z)O)$~ ", +" %~8)u'&~L!`'`'`'`'!!!!|!W!~!W!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!r!r!d!3!2!*~=~ ", +" -~T!s);~>~v)`'`'`'!!!!!!A!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~'~ ", +" )~t)s)!~~~)!`'`'`'!!{~2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~]~ ", +" :!U)U)^~/~`'`'`'(~2!B!B!B!B!B!B!B!B!B!B!B!2!_~ ", +" :~<~@~+~[~b!`'}~2!B!B!B!B!B!B!B!B!2!|~ ", +" 1~2~3~,!'!4~2!B!B!B!B!B!2!5~ ", +" 6~x!@~7~2!B!8~2!9~ ", +" 0~a~2!b~ ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index b20c552af..05dbfecb5 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -34,9 +34,13 @@ class ShipWorkbench ( Workbench ): # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) + list = ["Ship_CreateTank"] + self.appendToolbar("Loading",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) + list = ["Ship_CreateTank"] + self.appendToolbar("Loading",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 380d8aed8..0251da41d 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -4,7 +4,8 @@ datadir = $(prefix)/Mod/Ship data_DATA = \ InitGui.py \ ShipGui.py \ - Instance.py + Instance.py \ + TankInstance.py nobase_data_DATA = \ Icons/AreaCurveIco.png \ @@ -33,6 +34,9 @@ nobase_data_DATA = \ Icons/ReparametrizeIco.xpm \ Icons/Ship.xcf \ Icons/Ship.xpm \ + Icons/Tank.png \ + Icons/Tank.xcf \ + Icons/Tank.xpm \ Examples/s60.fcstd \ Examples/barehull5415.fcstd \ Examples/s60_katamaran.fcstd \ @@ -61,7 +65,10 @@ nobase_data_DATA = \ shipUtils/__init__.py \ shipUtils/Math.py \ shipUtils/Paths.py \ - shipUtils/Translator.py + shipUtils/Translator.py \ + tankCreateTank/__init__.py \ + tankCreateTank/TaskPanel.py \ + tankCreateTank/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 8f50b4be0..f62bebfb4 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -84,8 +84,21 @@ class Hydrostatics: ToolTip = str(Translator.translate('Plot ship hydrostatics')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class CreateTank: + def Activated(self): + import tankCreateTank + tankCreateTank.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Tank.png" + MenuText = str(Translator.translate('Create a new tank')) + ToolTip = str(Translator.translate('Create a new ship tank')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) +FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py new file mode 100644 index 000000000..584aa0f97 --- /dev/null +++ b/src/Mod/Ship/TankInstance.py @@ -0,0 +1,1886 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time + +# COIN +from pivy.coin import * +from pivy import coin + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base, Vector + +# Ship design module +from shipUtils import Paths, Translator, Math + +class ShipTank: + def __init__(self, obj, solid, level=0, density=998.0): + """ Creates a new tank on active document. + @param obj Created Part::FeaturePython object. + @param solid Solid shape that represent the tank. + @param level Tank filling level. + @param density Fluid density. + """ + # Add uniqueness property to identify Tank instances + obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", str(Translator.translate("True if is a valid ship tank instance"))).IsShipTank=True + # Add general options + obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Filling level"))).Level=level + obj.addProperty("App::PropertyFloat","Density","ShipTank", str(Translator.translate("Inside fluid density"))).Density=density + # Add shapes + shape = self.computeShape(solid) + if not shape: + obj.IsShipTank=False + return + # obj.addProperty("Part::PropertyPartShape","Shape","ShipTank", str(Translator.translate("Tank solid"))).Shape = shape + obj.Shape = shape + obj.Proxy = self + self.obj = obj + + def onChanged(self, fp, prop): + """ Property changed, tank must be recomputed """ + if prop == "IsShipTank": + FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") + elif prop == "Level": + if fp.Level > 100.0: + fp.Level = 100.0 + elif fp.Level < 0.0: + fp.Level = 0.0 + + def execute(self, obj): + """ Shape recomputation called """ + obj.Shape = self.computeShape(obj.Shape) + + def computeShape(self, solid): + """ Create faces shape. This method also calls to generate boxes. + @param solid Solid shape that represent the tank. + @return Computed solid shape. None if can't build it. + """ + # Study input to try to build a solid + if solid.isDerivedFrom('Part::Feature'): + # Get shape + shape = solid.Shape + if not shape: + return None + solid = shape + if not solid.isDerivedFrom('Part::TopoShape'): + return None + # Get shells + shells = solid.Shells + if not shells: + return None + # Build solids + solids = [] + for s in shells: + solid = Part.Solid(s) + if solid.Volume < 0.0: + solid.reverse() + solids.append(solid) + # Create compound + shape = Part.CompSolid(solids) + return shape + +class ViewProviderShipTank: + def __init__(self, obj): + """ Set this object to the proxy object of the actual view provider """ + obj.Proxy = self + + def attach(self, obj): + """ Setup the scene sub-graph of the view provider, this method is mandatory """ + return + + def updateData(self, fp, prop): + """ If a property of the handled feature has changed we have the chance to handle this here """ + return + + def getDisplayModes(self,obj): + ''' Return a list of display modes. ''' + modes=[] + return modes + + def getDefaultDisplayMode(self): + ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' + return "Shaded" + + def setDisplayMode(self,mode): + ''' Map the display mode defined in attach with those defined in getDisplayModes. + Since they have the same names nothing needs to be done. This method is optinal. + ''' + return mode + + def onChanged(self, vp, prop): + ''' Print the name of the property that has changed ''' + # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") + + def __getstate__(self): + ''' When saving the document this object gets stored using Python's cPickle module. + Since we have some un-pickable here -- the Coin stuff -- we must define this method + to return a tuple of all pickable objects or None. + ''' + return None + + def __setstate__(self,state): + ''' When restoring the pickled object from document we have the chance to set some + internals here. Since no data were pickled nothing needs to be done here. + ''' + return None + + def getIcon(self): + return """ + /* XPM */ + static char * Tank_xpm[] = { + "128 128 1605 2", + " c None", + ". c #000000", + "+ c #D1D1D1", + "@ c #D2D2D2", + "# c #D3D3D3", + "$ c #D3D4D4", + "% c #D5D5D5", + "& c #CFD0CF", + "* c #D0D0D0", + "= c #D3D2D3", + "- c #D4D4D3", + "; c #D5D6D5", + "> c #D6D6D6", + ", c #D7D7D7", + "' c #CDCECE", + ") c #CFCECE", + "! c #D0CFCF", + "~ c #D3D3D2", + "{ c #D3D3D4", + "] c #D5D4D5", + "^ c #D6D7D6", + "/ c #D8D8D8", + "( c #D8D8D9", + "_ c #D9D9DA", + ": c #CCCCCB", + "< c #CCCCCC", + "[ c #CECECD", + "} c #CECECE", + "| c #CFCFCF", + "1 c #D1D2D2", + "2 c #D5D4D4", + "3 c #D8D9D9", + "4 c #DAD9DA", + "5 c #DADBDB", + "6 c #DBDCDB", + "7 c #CACACA", + "8 c #CACBCB", + "9 c #CBCBCB", + "0 c #CCCDCD", + "a c #CECDCD", + "b c #D2D2D1", + "c c #D2D3D3", + "d c #D4D3D3", + "e c #D9D9D8", + "f c #D9D9D9", + "g c #DADBDA", + "h c #DBDCDC", + "i c #DCDCDC", + "j c #DDDDDD", + "k c #DEDEDE", + "l c #C7C8C8", + "m c #C9C9C9", + "n c #CAC9CA", + "o c #CBCBCC", + "p c #CCCDCC", + "q c #CDCDCD", + "r c #D0D1D1", + "s c #D1D2D1", + "t c #D3D2D2", + "u c #D4D4D5", + "v c #D5D5D6", + "w c #D6D7D7", + "x c #D8D7D8", + "y c #D9D8D9", + "z c #DADAD9", + "A c #DBDADA", + "B c #DBDBDC", + "C c #DDDCDD", + "D c #DDDEDE", + "E c #DEDFDE", + "F c #DFE0E0", + "G c #E0E0E1", + "H c #C6C6C6", + "I c #C7C7C7", + "J c #C8C8C7", + "K c #C9C9C8", + "L c #CACAC9", + "M c #CBCACB", + "N c #D0CFD0", + "O c #D1D0D1", + "P c #D1D1D2", + "Q c #D4D4D4", + "R c #D6D5D6", + "S c #D7D6D7", + "T c #D7D8D8", + "U c #DAD9D9", + "V c #DADADA", + "W c #DBDBDB", + "X c #DCDBDC", + "Y c #DDDDDC", + "Z c #DFDEDF", + "` c #E0DFDF", + " . c #E0E0E0", + ".. c #E1E1E1", + "+. c #E2E2E2", + "@. c #C5C4C4", + "#. c #C5C5C5", + "$. c #C8C8C8", + "%. c #C9C8C8", + "&. c #D5D5D4", + "*. c #D8D7D7", + "=. c #D9D8D8", + "-. c #DCDDDD", + ";. c #DEDDDD", + ">. c #E3E4E3", + ",. c #E5E4E4", + "'. c #C4C4C4", + "). c #C6C7C6", + "!. c #C7C8C7", + "~. c #C8C8C9", + "{. c #CACACB", + "]. c #CCCBCB", + "^. c #D0D0D1", + "/. c #D5D6D6", + "(. c #D7D7D6", + "_. c #DFDFDF", + ":. c #E1E2E2", + "<. c #E3E3E3", + "[. c #E4E3E4", + "}. c #E6E5E5", + "|. c #E6E6E6", + "1. c #E6E7E7", + "2. c #C4C5C5", + "3. c #C6C6C7", + "4. c #CFD0D0", + "5. c #D1D0D0", + "6. c #D6D5D5", + "7. c #DADADB", + "8. c #DCDDDC", + "9. c #DDDDDE", + "0. c #DEDFDF", + "a. c #E1E1E2", + "b. c #E3E2E2", + "c. c #E4E4E4", + "d. c #E5E5E5", + "e. c #E8E8E7", + "f. c #E9E8E9", + "g. c #EAE9EA", + "h. c #C5C5C4", + "i. c #C6C6C5", + "j. c #C7C7C6", + "k. c #CBCACA", + "l. c #CDCDCC", + "m. c #CECFCF", + "n. c #DBDADB", + "o. c #E0E0DF", + "p. c #E1E1E0", + "q. c #E1E2E1", + "r. c #E3E3E4", + "s. c #E4E5E5", + "t. c #E7E6E7", + "u. c #E7E7E8", + "v. c #E9E9E8", + "w. c #E9EAE9", + "x. c #EAEAEA", + "y. c #EBEBEA", + "z. c #C4C5C4", + "A. c #C6C5C5", + "B. c #C6C7C7", + "C. c #CCCCCD", + "D. c #CECECF", + "E. c #D9DAD9", + "F. c #DBDBDA", + "G. c #DEDEDD", + "H. c #E0DFE0", + "I. c #E0E1E0", + "J. c #E6E5E6", + "K. c #E7E7E6", + "L. c #E7E8E7", + "M. c #E8E8E9", + "N. c #E9E9E9", + "O. c #ECECEC", + "P. c #ECEDED", + "Q. c #EDEDEE", + "R. c #010101", + "S. c #C5C4C5", + "T. c #CBCCCB", + "U. c #CDCCCC", + "V. c #CECFCE", + "W. c #CFCFCE", + "X. c #CFCFD0", + "Y. c #D7D8D7", + "Z. c #DEDDDE", + "`. c #E1E0E0", + " + c #E5E6E6", + ".+ c #EBEBEB", + "++ c #ECEBEC", + "@+ c #EDEDED", + "#+ c #EEEEEE", + "$+ c #EFEFEF", + "%+ c #F0F0F0", + "&+ c #C4C4C5", + "*+ c #CFCECF", + "=+ c #D2D1D1", + "-+ c #D6D6D5", + ";+ c #D8D9D8", + ">+ c #DDDEDD", + ",+ c #DFDEDE", + "'+ c #E2E3E3", + ")+ c #E7E7E7", + "!+ c #E8E8E8", + "~+ c #EBECEC", + "{+ c #ECEDEC", + "]+ c #EFEFF0", + "^+ c #F1F0F1", + "/+ c #F1F1F1", + "(+ c #C7C6C6", + "_+ c #C9C8C9", + ":+ c #C9CAC9", + "<+ c #CACBCA", + "[+ c #D2D2D3", + "}+ c #D4D5D5", + "|+ c #DCDCDB", + "1+ c #E3E3E2", + "2+ c #E4E3E3", + "3+ c #E4E4E5", + "4+ c #E5E5E6", + "5+ c #EAEAE9", + "6+ c #ECEBEB", + "7+ c #F0F0EF", + "8+ c #F0F0F1", + "9+ c #C8C7C8", + "0+ c #C8C9C9", + "a+ c #CBCBCA", + "b+ c #CCCBCC", + "c+ c #D7D6D6", + "d+ c #DDDCDC", + "e+ c #E2E2E1", + "f+ c #E2E3E2", + "g+ c #E3E4E4", + "h+ c #E8E7E8", + "i+ c #E9E8E8", + "j+ c #EAE9E9", + "k+ c #EDECEC", + "l+ c #EEEEED", + "m+ c #EFEEEF", + "n+ c #EFF0F0", + "o+ c #F1F0F0", + "p+ c #C5C6C6", + "q+ c #C7C6C7", + "r+ c #D0D0CF", + "s+ c #D4D5D4", + "t+ c #E1E0E1", + "u+ c #E8E9E9", + "v+ c #EDECED", + "w+ c #EEEDED", + "x+ c #EEEFEF", + "y+ c #F0EFF0", + "z+ c #F0F1F0", + "A+ c #D7D7D8", + "B+ c #C8C7C7", + "C+ c #C9C9CA", + "D+ c #D2D1D2", + "E+ c #D9DADA", + "F+ c #E2E1E1", + "G+ c #E9E9EA", + "H+ c #EAEBEB", + "I+ c #D8D8D7", + "J+ c #CBCCCC", + "K+ c #CDCCCD", + "L+ c #D6D6D7", + "M+ c #E6E6E5", + "N+ c #E7E6E6", + "O+ c #E8E7E7", + "P+ c #EFEEEE", + "Q+ c #CDCECD", + "R+ c #D1D1D0", + "S+ c #D2D3D2", + "T+ c #DFE0DF", + "U+ c #E3E2E3", + "V+ c #E4E5E4", + "W+ c #E5E6E5", + "X+ c #ECECED", + "Y+ c #D4D3D4", + "Z+ c #CECDCE", + "`+ c #E6E6E7", + " @ c #EBEAEB", + ".@ c #ECECEB", + "+@ c #F0F1F1", + "@@ c #DCDCDD", + "#@ c #EBEAEA", + "$@ c #F0EFEF", + "%@ c #D3D4D3", + "&@ c #E6E7E6", + "*@ c #EEEDEE", + "=@ c #ADADAD", + "-@ c #565656", + ";@ c #DCDBDB", + ">@ c #DFDFE0", + ",@ c #E7E8E8", + "'@ c #E8E9E8", + ")@ c #EDEDEC", + "!@ c #EBEBEC", + "~@ c #EEEFEE", + "{@ c #B7B6B7", + "]@ c #E5E4E5", + "^@ c #EDEEED", + "/@ c #B6B6B6", + "(@ c #B6B7B7", + "_@ c #B7B7B6", + ":@ c #B7B6B6", + "<@ c #E5E5E4", + "[@ c #B5B6B5", + "}@ c #B5B6B6", + "|@ c #B5B5B5", + "1@ c #B6B5B5", + "2@ c #B6B5B6", + "3@ c #E2E1E2", + "4@ c #E4E4E3", + "5@ c #B4B4B4", + "6@ c #B4B5B5", + "7@ c #B5B5B4", + "8@ c #B6B6B5", + "9@ c #E2E2E3", + "0@ c #B3B4B4", + "a@ c #B4B4B5", + "b@ c #B4B5B4", + "c@ c #B5B4B4", + "d@ c #B3B3B3", + "e@ c #B3B3B4", + "f@ c #B4B3B3", + "g@ c #B4B4B3", + "h@ c #B5B4B5", + "i@ c #D0D1D0", + "j@ c #B3B3B2", + "k@ c #B3B2B3", + "l@ c #B4B3B4", + "m@ c #90B9D9", + "n@ c #91BAD9", + "o@ c #C6C5C6", + "p@ c #B1B2B2", + "q@ c #B2B2B2", + "r@ c #B2B3B2", + "s@ c #B2B3B3", + "t@ c #8FB7D8", + "u@ c #8EB7D7", + "v@ c #8FB8D8", + "w@ c #90B8D8", + "x@ c #91BBD9", + "y@ c #91BCDA", + "z@ c #C2C2C2", + "A@ c #C3C4C3", + "B@ c #C3C4C4", + "C@ c #C8C9C8", + "D@ c #CDCDCE", + "E@ c #B1B1B1", + "F@ c #B1B2B1", + "G@ c #B2B1B2", + "H@ c #B2B2B3", + "I@ c #B3B2B2", + "J@ c #8CB4D6", + "K@ c #8DB4D6", + "L@ c #8DB5D7", + "M@ c #8EB6D7", + "N@ c #8EB7D8", + "O@ c #8FB7D7", + "P@ c #90B9D8", + "Q@ c #91BBDA", + "R@ c #92BCD9", + "S@ c #92BCDA", + "T@ c #C1C1C0", + "U@ c #C1C1C1", + "V@ c #C2C2C1", + "W@ c #C3C3C2", + "X@ c #C3C3C3", + "Y@ c #C3C3C4", + "Z@ c #CAC9C9", + "`@ c #B1B0B0", + " # c #B2B2B1", + ".# c #8BB2D5", + "+# c #8BB2D6", + "@# c #8CB3D6", + "## c #8CB3D7", + "$# c #8DB5D6", + "%# c #8EB5D7", + "&# c #8FB8D7", + "*# c #92BBD9", + "=# c #92BBDA", + "-# c #BFC0C0", + ";# c #C0C1C0", + "># c #C2C1C1", + ",# c #C3C2C2", + "'# c #C4C4C3", + ")# c #C5C6C5", + "!# c #C5C5C6", + "~# c #B0B0B0", + "{# c #B0B1B0", + "]# c #B1B1B2", + "^# c #B2B1B1", + "/# c #0E3459", + "(# c #0E355A", + "_# c #0F355A", + ":# c #0F365A", + "<# c #8AB2D5", + "[# c #8CB3D5", + "}# c #8BB3D6", + "|# c #8FB6D7", + "1# c #8FB9D7", + "2# c #90B9D7", + "3# c #90BAD8", + "4# c #90BBD9", + "5# c #92BDDA", + "6# c #93BEDA", + "7# c #BEBEBE", + "8# c #BEBFBE", + "9# c #BFBFBE", + "0# c #BFBFC0", + "a# c #C0C0BF", + "b# c #C2C3C2", + "c# c #C4C3C3", + "d# c #AFB0B0", + "e# c #AFAFB0", + "f# c #B0AFB0", + "g# c #B0B1B1", + "h# c #B0B0B1", + "i# c #B1B0B1", + "j# c #7A9EC5", + "k# c #799FC5", + "l# c #7A9FC5", + "m# c #7AA0C6", + "n# c #0E345A", + "o# c #0F3559", + "p# c #8BB1D5", + "q# c #8CB4D5", + "r# c #8FB9D8", + "s# c #90BAD7", + "t# c #91BBD8", + "u# c #91BCD9", + "v# c #91BDD9", + "w# c #92BEDA", + "x# c #93BFDA", + "y# c #BDBDBD", + "z# c #BDBEBD", + "A# c #BEBEBD", + "B# c #BEBEBF", + "C# c #BEBFBF", + "D# c #BFBFBF", + "E# c #C0C0C0", + "F# c #C1C0C0", + "G# c #C0C1C1", + "H# c #C3C2C3", + "I# c #C4C3C4", + "J# c #AFAEAF", + "K# c #AFAFAF", + "L# c #B0AFAF", + "M# c #789DC5", + "N# c #789EC5", + "O# c #799EC5", + "P# c #7AA1C5", + "Q# c #7BA1C5", + "R# c #0F3659", + "S# c #10375A", + "T# c #8DB6D6", + "U# c #8EB8D7", + "V# c #92BDD9", + "W# c #143F5B", + "X# c #174A6A", + "Y# c #84B0CB", + "Z# c #85B0CC", + "`# c #BCBCBC", + " $ c #BDBCBC", + ".$ c #C0C0C1", + "+$ c #C1C2C1", + "@$ c #C2C3C3", + "#$ c #AEAEAE", + "$$ c #AEAFAF", + "%$ c #AFAFAE", + "&$ c #779BC4", + "*$ c #779CC4", + "=$ c #789CC4", + "-$ c #789DC4", + ";$ c #789EC4", + ">$ c #799FC4", + ",$ c #7AA0C5", + "'$ c #10385A", + ")$ c #8DB7D7", + "!$ c #8EB7D6", + "~$ c #90BBD8", + "{$ c #133E5B", + "]$ c #83AEC9", + "^$ c #84AFCA", + "/$ c #85B1CB", + "($ c #85B2CB", + "_$ c #BDBCBD", + ":$ c #BEBDBD", + "<$ c #C0BFBF", + "[$ c #C1C1C2", + "}$ c #C9CACA", + "|$ c #AEAEAD", + "1$ c #AEAFAE", + "2$ c #AEAEAF", + "3$ c #7599C3", + "4$ c #7699C3", + "5$ c #7699C2", + "6$ c #769AC3", + "7$ c #779BC3", + "8$ c #789BC4", + "9$ c #799EC4", + "0$ c #79A0C4", + "a$ c #8CB5D5", + "b$ c #8CB5D6", + "c$ c #8DB7D6", + "d$ c #426D8A", + "e$ c #16486A", + "f$ c #7AA5C1", + "g$ c #83ADC9", + "h$ c #84B1CB", + "i$ c #85B1CC", + "j$ c #BCBDBD", + "k$ c #BDBDBC", + "l$ c #BFBEBF", + "m$ c #BFC0BF", + "n$ c #ADADAC", + "o$ c #AEADAD", + "p$ c #ADAEAD", + "q$ c #ADAEAE", + "r$ c #7496C2", + "s$ c #7597C2", + "t$ c #7598C2", + "u$ c #769BC2", + "v$ c #779BC2", + "w$ c #779CC3", + "x$ c #789DC3", + "y$ c #7AA0C4", + "z$ c #7AA1C4", + "A$ c #7AA2C5", + "B$ c #7BA2C5", + "C$ c #10395A", + "D$ c #8EB6D6", + "E$ c #8EB8D6", + "F$ c #133D5A", + "G$ c #81ABC8", + "H$ c #82ACC9", + "I$ c #82ADC9", + "J$ c #82AEC9", + "K$ c #83AFC9", + "L$ c #83B0CA", + "M$ c #BDBEBE", + "N$ c #C1C0C1", + "O$ c #C7C7C8", + "P$ c #ADACAC", + "Q$ c #AFAEAE", + "R$ c #7395C1", + "S$ c #7395C2", + "T$ c #7496C1", + "U$ c #7599C2", + "V$ c #769BC3", + "W$ c #779DC3", + "X$ c #789EC3", + "Y$ c #7AA2C4", + "Z$ c #7BA3C4", + "`$ c #7BA3C5", + " % c #11395A", + ".% c #113A5A", + "+% c #123C5A", + "@% c #164A6E", + "#% c #4C7694", + "$% c #80AAC7", + "%% c #80ABC8", + "&% c #81ACC9", + "*% c #81ACC8", + "=% c #81ADC9", + "-% c #83AFCA", + ";% c #84B0CA", + ">% c #84B1CA", + ",% c #86B3CB", + "'% c #87B4CC", + ")% c #BFBEBE", + "!% c #ACACAC", + "~% c #ABACAC", + "{% c #ACACAD", + "]% c #7294C0", + "^% c #7194C0", + "/% c #7294C1", + "(% c #7394C1", + "_% c #7396C1", + ":% c #7497C2", + "<% c #7498C2", + "[% c #799FC3", + "}% c #7CA3C5", + "|% c #123B5A", + "1% c #88B1D0", + "2% c #7EA8C6", + "3% c #7FA9C6", + "4% c #7FAAC7", + "5% c #81ADC8", + "6% c #85B1CA", + "7% c #86B2CB", + "8% c #86B4CB", + "9% c #87B5CB", + "0% c #BCBCBD", + "a% c #C0BFC0", + "b% c #ABABAB", + "c% c #ACABAC", + "d% c #ABABAC", + "e% c #ACADAC", + "f% c #ACADAD", + "g% c #7193C0", + "h% c #7293C0", + "i% c #7193C1", + "j% c #7293C1", + "k% c #7498C1", + "l% c #789FC4", + "m% c #79A1C3", + "n% c #79A1C4", + "o% c #7BA2C4", + "p% c #7CA4C5", + "q% c #7CA4C4", + "r% c #16496F", + "s% c #7DA7C5", + "t% c #7FAAC6", + "u% c #80ABC7", + "v% c #80ACC7", + "w% c #82AFC9", + "x% c #84B1C9", + "y% c #85B2CA", + "z% c #87B5CC", + "A% c #88B6CC", + "B% c #BDBDBE", + "C% c #C1C2C2", + "D% c #AAABAB", + "E% c #AAAAAA", + "F% c #ABAAAB", + "G% c #ABACAB", + "H% c #ACACAB", + "I% c #7192C0", + "J% c #7292C0", + "K% c #7598C1", + "L% c #7599C1", + "M% c #759AC1", + "N% c #769AC2", + "O% c #779CC2", + "P% c #779DC2", + "Q% c #789DC2", + "R% c #78A0C3", + "S% c #7CA3C4", + "T% c #7AA2C2", + "U% c #7CA5C4", + "V% c #7DA5C4", + "W% c #7DA6C5", + "X% c #7EA8C5", + "Y% c #82ADC8", + "Z% c #83B0C9", + "`% c #85B3CA", + " & c #86B5CB", + ".& c #87B6CC", + "+& c #BCBDBC", + "@& c #C2C1C2", + "#& c #C2C2C3", + "$& c #AAA9AA", + "%& c #AAABAA", + "&& c #ABAAAA", + "*& c #7091BF", + "=& c #7092BF", + "-& c #7191C0", + ";& c #7192BF", + ">& c #7092C0", + ",& c #7295C0", + "'& c #7497C1", + ")& c #759AC2", + "!& c #769CC2", + "~& c #789FC3", + "{& c #79A0C3", + "]& c #79A2C4", + "^& c #7AA4C3", + "/& c #7BA4C4", + "(& c #7DA8C5", + "_& c #7EA9C6", + ":& c #80AAC6", + "<& c #81ADC7", + "[& c #82ADC7", + "}& c #82AEC8", + "|& c #88B7CC", + "1& c #A9A9A9", + "2& c #A9AAAA", + "3& c #A9A9AA", + "4& c #A9AAA9", + "5& c #7090BE", + "6& c #7091BE", + "7& c #7092BE", + "8& c #7191BF", + "9& c #7397C1", + "0& c #7499C1", + "a& c #7AA1C3", + "b& c #7AA2C3", + "c& c #79A2C2", + "d& c #7AA3C3", + "e& c #7BA5C4", + "f& c #80ABC6", + "g& c #81ACC7", + "h& c #81AEC8", + "i& c #82AFC8", + "j& c #83B1CA", + "k& c #85B3CB", + "l& c #85B4CA", + "m& c #87B6CB", + "n& c #88B8CC", + "o& c #A8A8A8", + "p& c #6F90BE", + "q& c #6F91BE", + "r& c #7192BE", + "s& c #7193BF", + "t& c #769BC1", + "u& c #779EC3", + "v& c #789FC2", + "w& c #79A1C2", + "x& c #7AA3C2", + "y& c #7BA4C3", + "z& c #7CA6C5", + "A& c #7DA7C4", + "B& c #7EA7C5", + "C& c #7EA9C5", + "D& c #7EAAC6", + "E& c #7FACC6", + "F& c #81AEC7", + "G& c #82AFC7", + "H& c #83B1C9", + "I& c #84B2C9", + "J& c #84B3C9", + "K& c #86B4CA", + "L& c #89B7CC", + "M& c #89B8CD", + "N& c #A8A8A7", + "O& c #6F90BD", + "P& c #6E90BD", + "Q& c #6E90BE", + "R& c #7293BF", + "S& c #7396C0", + "T& c #7397C0", + "U& c #7498C0", + "V& c #759BC1", + "W& c #769CC1", + "X& c #779EC2", + "Y& c #789EC2", + "Z& c #78A0C1", + "`& c #78A1C2", + " * c #7BA6C3", + ".* c #7BA6C4", + "+* c #7CA6C4", + "@* c #7FABC6", + "#* c #82AEC7", + "$* c #83AFC8", + "%* c #83B0C8", + "&* c #88B7CB", + "** c #89B9CC", + "=* c #89BACD", + "-* c #6E8FBD", + ";* c #6F91BD", + ">* c #7093BF", + ",* c #7194BF", + "'* c #7294BF", + ")* c #7395C0", + "!* c #7398C0", + "~* c #779FC1", + "{* c #77A0C1", + "]* c #78A1C1", + "^* c #7AA4C2", + "/* c #7CA7C4", + "(* c #7DA8C4", + "_* c #7DA9C5", + ":* c #7FAAC5", + "<* c #80ACC6", + "[* c #80ADC7", + "}* c #84B1C8", + "|* c #88B8CB", + "1* c #89BACC", + "2* c #BEBDBE", + "3* c #12285A", + "4* c #768CBE", + "5* c #768DBE", + "6* c #6E91BD", + "7* c #7193BE", + "8* c #7295BF", + "9* c #7396BF", + "0* c #7398BF", + "a* c #7499C0", + "b* c #749AC1", + "c* c #779DC1", + "d* c #789FC1", + "e* c #779EC0", + "f* c #769EC0", + "g* c #769FC0", + "h* c #77A0C0", + "i* c #79A2C1", + "j* c #79A3C2", + "k* c #7BA4C2", + "l* c #7CA7C3", + "m* c #7EAAC5", + "n* c #80ADC6", + "o* c #82B0C7", + "p* c #85B2C9", + "q* c #85B3C9", + "r* c #85B4C9", + "s* c #86B5CA", + "t* c #87B6CA", + "u* c #88B9CC", + "v* c #8AB9CC", + "w* c #8ABACC", + "x* c #8BBBCC", + "y* c #758BBE", + "z* c #758CBE", + "A* c #768CBF", + "B* c #6E91BE", + "C* c #7093BE", + "D* c #7397BF", + "E* c #7497BF", + "F* c #749AC0", + "G* c #759AC0", + "H* c #769BC0", + "I* c #769CC0", + "J* c #779EC1", + "K* c #769DC0", + "L* c #759DBF", + "M* c #769DBE", + "N* c #77A1C0", + "O* c #7AA5C2", + "P* c #7DA7C3", + "Q* c #7EA9C4", + "R* c #7EAAC4", + "S* c #7FABC5", + "T* c #81ADC6", + "U* c #81AFC7", + "V* c #82B0C8", + "W* c #83B1C8", + "X* c #84B2C8", + "Y* c #86B6CB", + "Z* c #87B7CA", + "`* c #87B7CB", + " = c #84AFCB", + ".= c #143F5A", + "+= c #12275A", + "@= c #758BBD", + "#= c #768BBE", + "$= c #6E8FBC", + "%= c #6E8EBD", + "&= c #7296BF", + "*= c #7297BF", + "== c #779CC1", + "-= c #749BBE", + ";= c #749CBF", + ">= c #759EBE", + ",= c #769FBF", + "'= c #76A0C0", + ")= c #779FC0", + "!= c #7BA5C3", + "~= c #7CA6C3", + "{= c #7CA8C4", + "]= c #7DA9C3", + "^= c #7FAAC4", + "/= c #81AFC6", + "(= c #82B1C7", + "_= c #85B5C9", + ":= c #86B6CA", + "<= c #82AECA", + "[= c #758ABD", + "}= c #748ABD", + "|= c #758CBD", + "1= c #6D8FBC", + "2= c #759CC1", + "3= c #769DC1", + "4= c #759BBF", + "5= c #739ABE", + "6= c #759DBE", + "7= c #769EBE", + "8= c #769EBF", + "9= c #779FBF", + "0= c #78A1C0", + "a= c #78A2C1", + "b= c #79A2C0", + "c= c #7AA3C1", + "d= c #7CA8C3", + "e= c #7DA9C4", + "f= c #82B0C6", + "g= c #83B2C8", + "h= c #84B3C8", + "i= c #143E5B", + "j= c #11265A", + "k= c #7489BC", + "l= c #748ABC", + "m= c #758ABC", + "n= c #6D8EBC", + "o= c #6E8EBC", + "p= c #6D8FBD", + "q= c #6F8FBD", + "r= c #7092BD", + "s= c #7294BE", + "t= c #7194BE", + "u= c #7295BE", + "v= c #7196BF", + "w= c #759BC0", + "x= c #749ABE", + "y= c #7399BC", + "z= c #729ABD", + "A= c #739ABD", + "B= c #749CBD", + "C= c #769DBF", + "D= c #779EBF", + "E= c #78A2C0", + "F= c #79A3C1", + "G= c #7AA4C1", + "H= c #7BA6C2", + "I= c #7CA9C4", + "J= c #7EABC4", + "K= c #7FACC4", + "L= c #80ADC5", + "M= c #80AEC6", + "N= c #81AEC6", + "O= c #83B1C7", + "P= c #7EA9C7", + "Q= c #7FAAC8", + "R= c #80AAC8", + "S= c #7388BC", + "T= c #7488BC", + "U= c #7389BC", + "V= c #7489BD", + "W= c #6E8EBB", + "X= c #6D8EBD", + "Y= c #7195BE", + "Z= c #7499BF", + "`= c #749ABF", + " - c #749BC0", + ".- c #7198BB", + "+- c #7298BC", + "@- c #7299BC", + "#- c #729ABC", + "$- c #739BBD", + "%- c #749BBD", + "&- c #749DBE", + "*- c #76A0BF", + "=- c #77A2C0", + "-- c #78A3C1", + ";- c #79A4C1", + ">- c #7CA8C2", + ",- c #7DAAC4", + "'- c #7FACC5", + ")- c #7DA7C6", + "!- c #7FA9C7", + "~- c #133E5A", + "{- c #7387BC", + "]- c #6F92BD", + "^- c #7094BE", + "/- c #7296BE", + "(- c #7399BD", + "_- c #0E3559", + ":- c #7096BB", + "<- c #7197BB", + "[- c #7199BB", + "}- c #739BBC", + "|- c #749CBE", + "1- c #749EBE", + "2- c #769FBE", + "3- c #77A0BF", + "4- c #77A1BF", + "5- c #78A3C0", + "6- c #79A4C0", + "7- c #7AA6C2", + "8- c #7BA7C2", + "9- c #7DA8C3", + "0- c #7EACC5", + "a- c #7CA5C5", + "b- c #10255A", + "c- c #7286BB", + "d- c #7287BC", + "e- c #6D8EBB", + "f- c #7093BD", + "g- c #7094BD", + "h- c #7195BF", + "i- c #7399BF", + "j- c #739ABF", + "k- c #7398BE", + "l- c #6F95BA", + "m- c #7096BA", + "n- c #7097BB", + "o- c #739ABC", + "p- c #739CBD", + "q- c #759EBF", + "r- c #78A2BF", + "s- c #7CA7C2", + "t- c #10245A", + "u- c #7185BB", + "v- c #7286BC", + "w- c #7387BB", + "x- c #7487BC", + "y- c #6E90BC", + "z- c #6F93BE", + "A- c #7196BE", + "B- c #7297BE", + "C- c #7298BF", + "D- c #7297BD", + "E- c #6E94BA", + "F- c #6F95B9", + "G- c #6F96BA", + "H- c #7097BA", + "I- c #729ABB", + "J- c #749DBD", + "K- c #77A0BE", + "L- c #78A4C0", + "M- c #7AA5C0", + "N- c #7CA7C5", + "O- c #7185BA", + "P- c #7286BA", + "Q- c #7285BB", + "R- c #7386BB", + "S- c #7288BC", + "T- c #7589BD", + "U- c #6E91BC", + "V- c #6F91BC", + "W- c #6E92BC", + "X- c #6F93BD", + "Y- c #7194BD", + "Z- c #7195BD", + "`- c #7298BE", + " ; c #7297BC", + ".; c #6D93B8", + "+; c #6E94B8", + "@; c #6E95B9", + "#; c #7096B9", + "$; c #739CBC", + "%; c #76A0BE", + "&; c #78A1BF", + "*; c #79A1C1", + "=; c #79A4C2", + "-; c #7BA3C3", + ";; c #7084BA", + ">; c #7184BB", + ",; c #7085BB", + "'; c #7186BB", + "); c #7287BB", + "!; c #7388BB", + "~; c #6C8EBB", + "{; c #6D8FBB", + "]; c #6F92BC", + "^; c #7095BD", + "/; c #7196BD", + "(; c #7195BC", + "_; c #0E3359", + ":; c #6C92B7", + "<; c #6D94B8", + "[; c #6F96B9", + "}; c #6F97BA", + "|; c #7299BB", + "1; c #729BBB", + "2; c #749DBC", + "3; c #759EBD", + "4; c #759FBE", + "5; c #10235A", + "6; c #7083BA", + "7; c #7084BB", + "8; c #7085BA", + "9; c #7093BC", + "0; c #7095BC", + "a; c #6C91B7", + "b; c #6E95B8", + "c; c #7198BA", + "d; c #739BBB", + "e; c #78A2C2", + "f; c #0F225A", + "g; c #6F82B9", + "h; c #7083B9", + "i; c #6F83B9", + "j; c #6F83BA", + "k; c #7184BA", + "l; c #6C8DBB", + "m; c #6C8FBB", + "n; c #6D90BB", + "o; c #6E91BB", + "p; c #6F93BC", + "q; c #7094BC", + "r; c #6F94BB", + "s; c #0D3259", + "t; c #6A8FB6", + "u; c #6B91B7", + "v; c #6E93B8", + "w; c #7098BA", + "x; c #7099BA", + "y; c #7199BA", + "z; c #729BBC", + "A; c #6E81B9", + "B; c #6E82B9", + "C; c #6E90BB", + "D; c #6E93BA", + "E; c #698EB6", + "F; c #6A8EB6", + "G; c #6A90B6", + "H; c #6B90B6", + "I; c #6B92B7", + "J; c #6D93B7", + "K; c #6E96B8", + "L; c #6F97B9", + "M; c #7098BB", + "N; c #78A0C0", + "O; c #6E80B8", + "P; c #6E81B8", + "Q; c #6F81B8", + "R; c #6F81B9", + "S; c #6F82B8", + "T; c #6F92BB", + "U; c #6E92BA", + "V; c #0D3159", + "W; c #688DB4", + "X; c #698EB5", + "Y; c #698FB5", + "Z; c #6A90B7", + "`; c #6C93B7", + " > c #518FC8", + ".> c #6F96B8", + "+> c #123A5A", + "@> c #0F215A", + "#> c #6D80B8", + "$> c #6D81B8", + "%> c #6C8FBA", + "&> c #6E90BA", + "*> c #6E92BB", + "=> c #6E93BC", + "-> c #0C3159", + ";> c #678CB4", + ">> c #678DB4", + ",> c #688EB4", + "'> c #698EB4", + ")> c #6A90B5", + "!> c #6B91B6", + "~> c #6D94B7", + "{> c #6D95B8", + "]> c #6E96B9", + "^> c #0E2159", + "/> c #6C7FB8", + "(> c #6D7FB7", + "_> c #6D7FB8", + ":> c #507FC9", + "<> c #6D8FBA", + "[> c #6D91BB", + "}> c #6D91B9", + "|> c #0C3059", + "1> c #678AB3", + "2> c #678BB3", + "3> c #678DB3", + "4> c #6B91B5", + "5> c #6B92B5", + "6> c #6C92B6", + "7> c #6B92B6", + "8> c #6C93B6", + "9> c #0E2059", + "0> c #6C7EB7", + "a> c #6D7EB7", + "b> c #6E80B7", + "c> c #6E82B8", + "d> c #7084B9", + "e> c #6F84BA", + "f> c #6C90B9", + "g> c #668AB2", + "h> c #698FB4", + "i> c #6A90B4", + "j> c #719ABB", + "k> c #749BBC", + "l> c #6B7EB7", + "m> c #6B7DB6", + "n> c #6C7DB7", + "o> c #6C7FB7", + "p> c #6D80B7", + "q> c #6F84B9", + "r> c #7186BA", + "s> c #6C8EB9", + "t> c #6589B1", + "u> c #678CB2", + "v> c #678DB2", + "w> c #688EB3", + "x> c #6A8FB5", + "y> c #6A91B5", + "z> c #6C92B5", + "A> c #6C94B7", + "B> c #6D95B7", + "C> c #759DBD", + "D> c #0E1F5A", + "E> c #6A7CB6", + "F> c #6A7DB6", + "G> c #6C7EB6", + "H> c #7082B9", + "I> c #7285BA", + "J> c #7085B9", + "K> c #0E335A", + "L> c #658BB1", + "M> c #668BB1", + "N> c #668CB1", + "O> c #678CB1", + "P> c #688DB3", + "Q> c #688FB3", + "R> c #698FB3", + "S> c #6990B4", + "T> c #7097B9", + "U> c #7197BA", + "V> c #739CBE", + "W> c #0E1F59", + "X> c #6A7BB6", + "Y> c #6B7CB6", + "Z> c #6C7DB6", + "`> c #6B7DB7", + " , c #6F82B6", + "., c #648AB0", + "+, c #658AB1", + "@, c #658BB0", + "#, c #668CB2", + "$, c #688FB4", + "%, c #6B90B5", + "&, c #0D1E59", + "*, c #697BB5", + "=, c #6A7CB7", + "-, c #6B7EB6", + ";, c #6C7EB8", + ">, c #6E82B7", + ",, c #6389B0", + "', c #6489B0", + "), c #658AB0", + "!, c #668AB1", + "~, c #688DB2", + "{, c #6990B5", + "], c #697AB5", + "^, c #697BB6", + "/, c #6A7BB5", + "(, c #6D7EB8", + "_, c #6D81B6", + ":, c #6388AE", + "<, c #6388AF", + "[, c #6389AF", + "}, c #6489AF", + "|, c #668BB0", + "1, c #6979B4", + "2, c #6879B5", + "3, c #6879B4", + "4, c #6979B5", + "5, c #6A7AB5", + "6, c #6B7CB7", + "7, c #6D80B5", + "8, c #6287AE", + "9, c #6288AE", + "0, c #0D1D59", + "a, c #6878B4", + "b, c #6778B4", + "c, c #6C7EB5", + "d, c #6186AC", + "e, c #6186AD", + "f, c #6286AE", + "g, c #668DB1", + "h, c #678EB3", + "i, c #0D1C59", + "j, c #6777B3", + "k, c #6777B4", + "l, c #697AB4", + "m, c #6A7CB5", + "n, c #6E81B7", + "o, c #6084AC", + "p, c #6185AC", + "q, c #6086AD", + "r, c #6187AE", + "s, c #6387AE", + "t, c #0C1C59", + "u, c #6676B3", + "v, c #6776B3", + "w, c #6877B4", + "x, c #687AB5", + "y, c #697CB6", + "z, c #6A7DB7", + "A, c #6B7DB5", + "B, c #5F83AC", + "C, c #6083AC", + "D, c #6185AD", + "E, c #6288AD", + "F, c #668BB2", + "G, c #6A91B4", + "H, c #6675B3", + "I, c #6575B3", + "J, c #6677B3", + "K, c #6677B4", + "L, c #6A7DB4", + "M, c #5E82AB", + "N, c #5F83AB", + "O, c #5F84AC", + "P, c #6085AD", + "Q, c #6085AC", + "R, c #10365A", + "S, c #0C1B59", + "T, c #6575B2", + "U, c #6675B2", + "V, c #6676B2", + "W, c #6676B4", + "X, c #6776B4", + "Y, c #687AB4", + "Z, c #5D81AA", + "`, c #5D81AB", + " ' c #5D82AA", + ".' c #5E83AB", + "+' c #6083AB", + "@' c #6286AD", + "#' c #648AB1", + "$' c #6473B3", + "%' c #6474B2", + "&' c #697CB3", + "*' c #5D80A9", + "=' c #5E82AA", + "-' c #5F84AB", + ";' c #6287AD", + ">' c #6389AE", + ",' c #0B1A59", + "'' c #6473B2", + ")' c #6574B2", + "!' c #6574B3", + "~' c #6778B3", + "{' c #6779B4", + "]' c #687BB2", + "^' c #5B7FA9", + "/' c #5B80A9", + "(' c #5C80A9", + "_' c #5D81A9", + ":' c #5E81AA", + "<' c #6184AC", + "[' c #638AB0", + "}' c #678DB1", + "|' c #0B1A58", + "1' c #6372B1", + "2' c #6472B2", + "3' c #6472B1", + "4' c #6473B1", + "5' c #6573B2", + "6' c #6576B3", + "7' c #6878B3", + "8' c #687AB3", + "9' c #5B7EA7", + "0' c #5B7FA8", + "a' c #5B80A8", + "b' c #5C81AA", + "c' c #5F82AB", + "d' c #668DB2", + "e' c #11268E", + "f' c #11268D", + "g' c #0B1958", + "h' c #6373B2", + "i' c #6877B3", + "j' c #6879B2", + "k' c #0C2F59", + "l' c #5A7DA7", + "m' c #5A7EA7", + "n' c #5B7FA7", + "o' c #5B7EA8", + "p' c #5C7FA8", + "q' c #5F83AA", + "r' c #6084AB", + "s' c #6589B0", + "t' c #0C196C", + "u' c #152064", + "v' c #11258D", + "w' c #6371B1", + "x' c #6271B1", + "y' c #6372B2", + "z' c #6778B1", + "A' c #0C2E59", + "B' c #597CA6", + "C' c #5A7CA6", + "D' c #597DA6", + "E' c #5D80AA", + "F' c #5E83AA", + "G' c #0E355B", + "H' c #0C1A6F", + "I' c #131E62", + "J' c #414C90", + "K' c #10258E", + "L' c #6271B0", + "M' c #6272B1", + "N' c #6373B1", + "O' c #6677B1", + "P' c #0B2E59", + "Q' c #577BA5", + "R' c #587BA6", + "S' c #587CA6", + "T' c #5A7EA8", + "U' c #5D82AB", + "V' c #6289AE", + "W' c #1A5FA3", + "X' c #0D1C75", + "Y' c #131E61", + "Z' c #404B8E", + "`' c #475296", + " ) c #10258D", + ".) c #6270B0", + "+) c #6272B0", + "@) c #6576B2", + "#) c #6576B1", + "$) c #577AA4", + "%) c #577BA4", + "&) c #587BA5", + "*) c #5C81A9", + "=) c #648AAF", + "-) c #0E345B", + ";) c #0D1D79", + ">) c #101B5F", + ",) c #3C478B", + "') c #11258E", + ")) c #6371B0", + "!) c #6575B1", + "~) c #0B2E58", + "{) c #5679A3", + "]) c #5779A4", + "^) c #567AA4", + "/) c #577AA5", + "() c #577BA6", + "_) c #597BA6", + ":) c #175797", + "<) c #0E1F82", + "[) c #101B5E", + "}) c #384487", + "|) c #0B1858", + "1) c #6170B0", + "2) c #6575B0", + "3) c #5578A2", + "4) c #5678A3", + "5) c #5679A4", + "6) c #5A7DA6", + "7) c #102394", + "8) c #111C60", + "9) c #141F63", + "0) c #293578", + "a) c #0A1859", + "b) c #616FAF", + "c) c #616FB0", + "d) c #6270AF", + "e) c #6372B0", + "f) c #6474AF", + "g) c #0B2D58", + "h) c #5576A2", + "i) c #5577A2", + "j) c #5577A3", + "k) c #5578A4", + "l) c #5578A3", + "m) c #587CA5", + "n) c #597DA7", + "o) c #5D82A9", + "p) c #6187AD", + "q) c #154F8D", + "r) c #1227A5", + "s) c #0D185C", + "t) c #1B266A", + "u) c #313C80", + "v) c #445093", + "w) c #10248D", + "x) c #6170AF", + "y) c #6474B1", + "z) c #6373AF", + "A) c #5375A1", + "B) c #5476A2", + "C) c #587AA4", + "D) c #5C7FA9", + "E) c #6084AD", + "F) c #102393", + "G) c #0C196A", + "H) c #0E1A5D", + "I) c #242F73", + "J) c #3A4589", + "K) c #626FAF", + "L) c #626FB0", + "M) c #6475B2", + "N) c #6272AE", + "O) c #0A2C59", + "P) c #5275A1", + "Q) c #5376A2", + "R) c #5477A2", + "S) c #144A84", + "T) c #0E1E7F", + "U) c #121D61", + "V) c #2B3679", + "W) c #0A1858", + "X) c #6370B0", + "Y) c #6271AF", + "Z) c #0A2C58", + "`) c #5173A0", + " ! c #5274A1", + ".! c #5274A0", + "+! c #0D1B74", + "@! c #10248E", + "#! c #6171AE", + "$! c #51729F", + "%! c #51739F", + "&! c #5273A0", + "*! c #5476A1", + "=! c #5576A3", + "-! c #114379", + ";! c #102291", + ">! c #0C196B", + ",! c #1F2A6E", + "'! c #364185", + ")! c #465195", + "!! c #10238D", + "~! c #616EAF", + "{! c #616FAD", + "]! c #0A2B59", + "^! c #50729E", + "/! c #50729F", + "(! c #5375A0", + "_! c #134C8D", + ":! c #0E1E81", + "~ c #323D81", + ",~ c #0A2D5D", + "'~ c #1354AE", + ")~ c #10228F", + "!~ c #212C70", + "~~ c #374286", + "{~ c #0F228B", + "]~ c #1251A7", + "^~ c #283377", + "/~ c #3E4A8D", + "(~ c #0F4085", + "_~ c #0B2F62", + ":~ c #1328A8", + "<~ c #0D1C77", + "[~ c #303B7F", + "}~ c #104289", + "|~ c #0B3063", + "1~ c #112497", + "2~ c #1C276A", + "3~ c #0C175B", + "4~ c #0F438A", + "5~ c #0B3266", + "6~ c #0F2088", + "7~ c #0C3367", + "8~ c #365885", + "9~ c #0B3369", + "0~ c #0E1D7C", + "a~ c #0B2F60", + "b~ c #0C366E", + " ", + " ", + " ", + " ", + " ", + " . . ", + " . . . . . . . ", + " . . . . + @ # $ % . . . . ", + " . . . . & * + @ = - % ; > , . . . . ", + " . . . . ' ) ! * + @ ~ { ] % ^ , / ( _ . . . ", + " . . . . : < [ } | * + 1 = $ 2 ; > , / 3 4 5 6 . . . . ", + " . . . . 7 8 9 0 a } | * + b c d 2 % > , / e f g h i j k . . . . ", + " . . . . l m n 9 o p q } | * r s t # u % v w x y z A B i C D E F G . . . ", + " . . . . H I J K L M 9 < q ' | N O P t # Q % R S T / U V W X Y D Z ` ...+.. . . . ", + " . . . . @.#.H I $.%.L M 9 < q } } N r + @ # Q &.R S *.=.f V W X -.;.k ` ...+.+.>.,.. . . . ", + " . . . . '.'.'.#.H ).!.~.n {.].< 0 ' } | ^.b @ # Q ] /.(., / f 4 5 B i D k _. ...:.<.[.,.}.|.1.. . . . ", + " . . . . '.'.'.'.'.2.H 3.J %.m 7 9 < p } ) 4.5.+ @ ~ Q Q 6.> , / 3 4 7.X 8.9.k 0. ...a.b.<.c.d.|.1.e.f.g.. . . ", + " . . . . . '.'.'.'.'.'.'.h.i.j.$.$.m 7 k.< l.a m.| * + @ c Q Q % > , / f f n.B i j k _.o.p.q.+.r.c.s.|.t.u.v.w.x.y.. . . . ", + " . . . . . '.'.'.'.'.'.'.'.z.A.B.I $.m 7 9 ].C.q D.| * + P t # Q 6.> (.T f E.F.6 i j G.0.H.I...+.<.c.d.J.K.L.M.N.x.y.O.P.Q.. . . . ", + " R.. . '.'.'.'.'.'.'.'.'.'.'.S.A.3.I $.m n k.T.U.q V.W.X.+ + t # Q % /.S Y./ z F.W i -.Z.k _.`.a.+.<.r.s. +|.L.M.N.g..+++O.@+#+$+%+. . . ", + " . . . . . '.'.'.'.'.'.'.'.'.&+i.H I $.K n 8 < < q } *+* ^.=+@ { Q ] -+, , ;+_ V W B 8.>+,+_.G ..+.'+c.d.d.t.)+!+M.x.x.~+{+Q.#+$+]+^+/+. . . . ", + " . . =.f . . . . . '.'.'.'.'.'.2.A.H (+$._+:+<+].< q } | N ^.s [+# Q }+6.> *./ f V 5 |+C D 0._. ...q.1+2+3+4+|.1.!+N.5+y.6+O.Q.#+$+7+8+/+/+/+/+. . . . ", + " . . / / y e . . . . . '.'.'.'.&+#.H I 9+0+m a+9 b+l.} m.X.5.+ @ = $ % > c+Y./ f U W X d+k k _. ...e+f+g+c.d.J.)+h+i+j+x.6+k+@+l+m+n+o+/+/+/+/+/+/+/+. . . . ", + " . . S , *.x T / / 3 . . . . . '.'.#.p+q+!.~.m 7 9 < 0 ' } r+* P @ # { s+% w , / e V 5 B -.j k _. .t+e+1+2+3+d.|.K.u.u+N.x..+O.v+w+x+y+z+/+/+/+/+/+/+/+/+/+/+. . . ", + " . . ; > > ^ , A+/ / e y ( . . . . . i.).B+$.C+7 9 : l.a } | * + D+t d Q % > , / f E+5 6 d+j k _.o.p.F+<.r.c.d.J.)+h+!+G+x.H+O.@+@+$+y+%+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", + " . . 2 % % /.-+> ^ S , Y.I+/ =.e . . . . . I $.C+L 9 J+K+a } & 4.+ P c d Q v L+S / f f g |+i j k ,+H.t+:.+.<.c.s.M+N+O+i+N.x..+~+@+#+P+]+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", + " . . # $ Q 2 s+6./.> > , , , , / / ;+y . . . . . 7 a+< U.Q+} | N R+P S+# u % > , / ( f V W i -.Z._.T+I...+.U+c.V+W+t.O+!+N.x.y.++X+@+#+$+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", + " . . @ t # Y+Y+Q Q &.% v v > c+c+S , , / =.( f . . . . . < q Z+) X.^.D+c Q Q % /., Y./ 4 V W i d+k Z T+`.q.+.<.r.d.}.`+)+!+N.x. @.+k+@+#+x+%+z+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . f f . ", + " . . + D+@ c # # $ Q Q Q }+% % /./.S S , *.T / ;+;+f . . . . . m.4.5.b @ # Q % R > , e f V W i 8.j k _.G ..+.'+<.c.4+`+)+h+v.w.y..@O.@+#+x+n++@/+/+/+/+/+/+/+/+/+/+/+. . . . f f f f f . ", + " . . . ^.+ + P b @ c t # - - u u &.% /.R c+c+S , A+/ / y f . . . . . 5.+ @ # Q ] /.L+A+=.f V W |+@@9.k _. .t++.b.g+c.W+|.1.!+u+j+#@~+O.@+l+#+$@8+/+/+/+/+/+/+/+/+/+. . . . f f f f f f f f . ", + " . . | N * * + + =+=+D+@ S+# %@%@- Q 2 % 6.v /.> , , , / T y f f . . . . . # Q % % > , / f E+V B -.9.k _.o.p.F+f+r.c.d.|.&@O+u+N.x..+++@+*@#+]+%+/+/+/+/+/+/+/+. . . =@f f f f f f f f f f -@. ", + " . . . W.D.| | 4.* 5.r + P b @ S+# # Y+- Q Q }+% ; -+> w w S , I+/ / 3 f . . . . . ; > , A+f V g ;@i j k _.>@`...+.r.c.d.|.&@,@'@G+x..+O.)@@+x+$+z+/+/+/+/+/+. . . T / ( y f f f f f f f f f f . . ", + " . . . a } V.} W.| r+4.* ^.* + D+@ @ @ # # - Q Q ] 2 ; /.-+> w (., A+Y./ f f . . . . . , / / U V X @@j k Z .t+a.+.<.c.d.|.K.O+!+G+x.y.!@P.Q.~@$+8+/+/+/+. . . ; > w ^ , T / 3 f f f f f f f f f . . ", + " . {@. . . . Z+} ) D.m.| r+* * 5.r + D+@ S+c # # - Q Q s+% % -+> c+(., , / / / / f . . . . . f g B i j k _._.`.q.+.<.c.]@ +1.O+!+N.x..+!@)@^@#+$+%+%+. . . # - Q % % % > L+w Y./ / / f f f f f f f . . ", + " . /@(@_@:@. . . . [ } } W.| N ! * * R++ + @ @ c c # # # Q u 2 % % ; > L+, , *./ / =.;+f . . . . . i j 9.E >@G ..+.'+c.<@4+&@)+!+N.G+.+O.O.l+#+@+. . . O s @ c c $ Q Q 2 % % > c+, I+x ;+f f f f f f . ", + " . [@/@}@/@/@/@. . . . q } } W.V.! ! N * + O + b b [+t c # $ Q u 2 ] % v R > > ^ *.A+I+/ e f f . . . . 9.E _. ...+.'+[.V+}.|.)+!+v.x..+6+{+.+. . . *+X.r+* r + s @ S+c { - Q s+% > > (., *./ f f f f f . ", + " . |@|@|@1@}@2@/@}@/@. . . . Q+[ } W.| N & * * R++ D+=+@ S+~ # # %@Q Q ] % R -+> ^ , w , , / =.;+f . . . . . ...3@<.4@3+}.|.)+!+u+w.x.)+. . . 0 q } [ V.| & 4.+ R++ b @ # # Q Q &.% 6.> > , A+x ( f f . ", + " . 5@5@6@|@7@|@|@8@}@}@2@/@. . . . ' } ) | | X.| * * ^.+ P 1 @ @ ~ # d Y+Q Q % % v > v w , , *.T / =.f f . . . . . 9@2+,.d.|.t.!+!+b.. . . <+9 o b+p 0 q Z+} ) | N * O + s @ t = d - Q % % -+> ^ , *./ . ", + " . 0@5@a@a@b@c@6@7@|@|@[@8@|@8@. . . . . } ) W.W.N & r+* * r + s 1 @ # # # { - Q u % % ; ; > c+, , , I+/ ( f f . . . . . d.M+t.j . . . $.0+m :+7 M 9 9 < U.q Z+} ) *+& 4.* O + @ @ c # { - }+% % R ^ , . ", + " . d@e@f@f@g@5@5@h@b@5@h@|@b@|@|@|@|@. . . . Z+} } | | & X.r+5.i@+ s D+@ [+t # # Q Q 2 &.% % /.R > c+, , T T / y f . . . . . . . . H 3.I !.$.%.~.C+7 {.a+T.: C.< q q } D.| r+* ^.+ =+1 @ c # - Q s+% v . ", + " . j@k@d@d@d@d@g@f@e@d@l@5@5@a@b@6@c@6@|@|@. . . . [ } } m.| | r+* * + + =+D+@ ~ ~ # m@n@n@Q &.% % v > c+(., , Y./ / =.f . . . '.h.#.#.o@H I I J $.K m C+7 M M ].< U.p q ' D.m.| ! * O + @ @ c @ d d 2 . ", + " . p@q@q@r@r@r@j@s@d@d@f@e@5@l@0@5@5@b@b@c@7@7@7@. . . . } V.V.) | & * * * + s t@u@v@v@w@m@n@x@y@u % v % > > (., , *.x / Y.. . z@A@B@'.2.#.#.p+j.I !.$.C@_+:+C+<+8 9 o < U.0 D@} W.m.| r+* O + s @ t # . ", + " . E@E@F@F@G@q@q@H@H@I@d@H@d@d@d@d@5@f@5@5@5@5@5@c@h@. . . . [ Z+) ) m.| 4.J@K@L@M@N@O@v@w@m@P@x@Q@R@S@] % 6.6.> > w , , . . T@U@V@W@X@Y@X@h.2.#.#.H B.I !.$.$._+Z@7 7 9 T.o < l.q q } } | | X.^.r D+=+. ", + " . `@E@E@E@E@F@G@ #p@q@q@q@q@d@k@d@H@d@d@g@f@g@d@5@0@5@5@6@. . . . Z+} .#+#@###$#L@%#M@O@O@&#P@P@n@n@*#=#S@&.}+% 6.-+> > . . -#T@;#U@>#z@,#X@Y@'#@.#.)#!#H I I I $.K m 7 7 7 9 9 T.< q q } } D.r+4.* 5.. ", + " . ~#~#~#{#~#E@E@E@]#G@^#^# #p@q@q@q@j@k@j@k@d@d@d@d@0@0@e@l@0@5@/#(#_#:#<#.#[#}#K@K@L@M@|#O@#2#3#4#4#x@R@5#6#% }+v . . 7#8#9#0#a#U@T@U@U@,#b#X@c#'.#.#.)#H 3.I l $.$.m m 7 7 M 9 9 < 0 q D@} *+| | . ", + " . d#e#f#~#~#~#g#h#{#{#E@i#E@E@q@F@p@]#q@q@q@q@q@j@d@k@d@d@d@j#k#l#m#n#o#:#:#p#+#}#q#$#$#$#M@M@u@v@1#r#s#3#t#u#v#5#w#x#. . y#z#A#B#C#D#a#E#F#G#V@z@H#X@I#'.@.#.#.H H B.I $.$.0+K :+7 M M : : < q q ' } . ", + " . J#K#K#K#K#L#~#~#~#~#~#~#{#{#i#E@E@^#]#G@]#q@q@^#q@I@H@M#M#N#O#k#k#l#P#Q#_#R#:#S#[#[#J@$#$#T#T#u@U#1#1#P@3#t#t#u#V#W#X#Y#Z#`# $y#z#7#7#D#D#-#.$U@U@+$z@@$H#'#'.2.2.#.p+j.I I l $.%.m m 7 7 9 ].< C.q . ", + " . #$J#K#$$$$%$K#K#L#K#L#f#~#f#~#~#`@`@E@E@E@E@E@E@q@&$*$=$=$-$-$;$O#>$>$,$,$Q#:#:#S#S#'$q#J@$#$#T#)$!$U#1#1#s#~$t#t#{$W#]$^$^$/$($`#_$y#:$7#9#D#<$a#E#U@+$[$b#X@X@A@'.2.#.p+H H B.!.!.~._+m }$7 a+9 ].. ", + " . =@|$#$#$#$1$2$K##$%$K#K#L#e#f#e#~#L#~#~#~#{#3$4$5$6$7$7$8$&$*$-$-$9$9$>$0$0$P#P#Q#S#S#'$'$'$a$b$T#c$!$!$#2#3#d$e$f$g$]$^$^$h$/$i$`#j$k$y#7#7#l$<$m$E#;#U@+$z@z@H#'.'.@.#.#.i.H q+I J $.K K :+C+7 . ", + " . n$o$p$=@o$q$#$q$#$#$#$J##$$$%$$$K#K#e#e#r$s$s$t$4$5$5$u$v$7$w$w$w$-$x$9$>$>$0$y$P#z$A$B$'$'$'$C$b$T#D$D$!$E$#F$F$G$H$I$J$K$^$L$Y#h$($($`#`#y#y#M$7#C#D#E#E#N$U@>#z@b#X@'#'.z.#.#.p+H j.!.O$K 0+m . ", + " . P$P$n$=@=@=@=@p$p$o$#$#$#$#$#$Q$K#Q$R$R$S$T$r$s$t$t$U$5$6$V$6$w$w$W$x$-$X$;$>$0$y$y$z$z$Y$Z$`$'$ % %.%T#T#!$u@+%@%#%$%%%&%*%=%J$K$-%;%>%>%($,%'%`#`#y#z#7#)%D#0#E#;#N$U@z@,#@$X@Y@'.S.#.o@H I j.I J . ", + " . !%!%~%P${%!%n$!%=@=@=@=@=@p$#$]%^%/%/%/%(%S$T$_%:%s$<%t$5$5$5$6$u$7$w$w$-$X$X$>$[%>$y$y$Y$Y$A$`$}%C$ %.%.%|%1%+%+%2%3%4%$%%%*%5%I$J$K$^$;%>%6%7%,%8%9%0%k$:$7#8#8#D#a%E#.$U@[$z@z@X@Y@Y@S.@.#.A.H q+. ", + " . b%b%c%b%d%d%!%!%!%e%f%e%n$g%g%g%^%h%h%i%j%/%R$R$T$_%:%s$k%U$U$4$6$u$V$w$7$w$x$X$X$l%l%0$m%n%z$A$o%`$p%q%.%.%|%r%+%s%2%2%3%t%u%v%*%5%J$]$w%L$x%y%6%7%,%'%z%A%`#y#B%7#l$l$D#E#E#T@[$C%z@H#X@A@I#z.#.A.. ", + " . D%E%F%F%b%b%G%b%~%~%H%I%I%I%J%J%J%g%I%I%g%]%(%R$_%R$T$T$K%k%K%U$L%M%N%u$w$O%P%Q%X$X$X$[%R%0$n%n%z$Y$Z$Z$S%q%T%|%U%V%W%s%X%3%t%4%u%v%*%Y%J$J$Z%;%;%y%y%`%8% &9%.&`#+&y#7#7#B#D#0#E#E#U@U@@&#&W@X@B@&+. ", + " . $&E%E%E%%&E%&&b%b%*&=&-&;&I%;&I%>&I%I%I%I%g%h%]%/%,&_%_%'&'&k%k%L%U$M%)&N%u$!&O%x$x$W$X$~&~&{&{&0$]&z$Y$Z$Z$T%.%^&/&U%W%s%(&2%_&3%:&u%v%<&[&}&K$K$;%>%y%y%,%8%9%9%z%|&`#y#:$7#7#C#m$E#E#.$U@U@z@@$X@. ", + " . 1&$&E%2&3&4&5&6&6&*&7&6&=&=&*&=&>&-&8&-&I%I%J%g%h%]%,&(%R$_%9&9&'&k%0&L%)&)&u$v$O%!&W$P%W$X$~&~&[%a&z$Y$b&o%c&.%d&d&e&/&U%W%s%X%2%3%t%f&f&g&<&<&h&i&Z%Z%j&y%y%k&l& &m&.&|&n&0%y#z#A#)%D#<$E#;#T@>#@&. ", + " . o&1&1&1&p&p&q&q&p&6&6&6&6&6&*&*&r&8&7&=&8&8&I%;&s&g%]%]%]%,&,&_%9&'&:%K%L%L%U$t&)&!&!&!&W$P%u&v&~&[%{&{&a&Y$w& %T%T%x&y&y&U%z&A&A&B&C&D&D&E&v%v%v%F&G&i&Z%H&x%I&J&K&8%9%m&.&|&L&M& $y#M$7#8#D#m$a%U@. ", + " . N&o&O&O&P&Q&q&q&p&6&q&q&6&6&5&6&6&6&6&=&7&*&*&=&;&;&g%R&^%^%,&,&S&T&T&U&U&k%L%L%M%N%V&W&O%!&X&u&v&Y&v&{&m%m%Z&C$Z&`&c&x&x&y&y& *.*+*s%2%C&D&t%@*f&v%<&#*G&$*%*H&x%y%`%l&8%9%m&A%&*n&**=*y#y#7#7#9#m$. ", + " . -*-*P&O&P&P&P&P&O&p&;*Q&p&p&p&q&q&5&6&q&6&6&6&6&*&=&=&>*s&s&,*'*,&)*S&T&T&!*k%k%L%M%M%V&t&!&O%P%P%X&Y&v&v&{&~*'$~*{*]*]*c&x&x&^*^& *+*/*(*_*D&t%:*E&<*[*F&#*G&$*%*}*I&I&`%K& &9%m&&*|*n&**1* $y#2*2*. ", + " 3*4*5*-*-*-*-*O&-*P&O&P&6*P&P&Q&p&p&q&p&6&5&q&6&6&6&q&6&*&7*7*>*s&,*8*8*9*S&T&U&0*U&a*b*M%M%V&W&W&c*c*X&X&Y&d*e*'$f*g*h*{*]*i*j*x&x&k* * *l*(*(*_*C&m*@*f&n*[*F&#*G&o*%*}*p*q*r*K&s*t*m&&*|*u*v*w*x*k$. ", + " 3*y*z*4*4*A*-*-*-*-*-*-*P&P&P&O&P&p&p&P&P&;*B*p&p&q&q&q&6&6&7&=&C*7*,*8*8*8*9*T&D*E*!*a*a*F*G*H*V&I*W&W&c*J*~*K*'$L*M*f*g*h*N*]*i*c&x&^*y&O* *l*P*(*Q*R*m*S*E&<*T*F&U*G&V*W*X*X*q*r*l&s*Y*Z*`*|***** =.= ", + " +=y*@=@=#=4*4*4*5*$=%=-*-*-*-*O&O&P&-*P&P&Q&Q&P&q&p&;*q&q&q&7&q&7&C*s&,*,*'*8*9*&=*=D*!*U&a*F*G*M%V&t&W&W&==c*I*S#-=;=L*>=,='=)=h*]*i*j*j*^*O*!=~=/*{=]=Q*^=S*S*<*<*T*F&/=o*(=W*X*X*J&r*_=s*:=`*I$<=-%.= ", + " +=[=}=}=[=y*@=y*z*|=z*4*1=1=-*$=-*%=-*-*-*P&P&-*P&P&P&Q&p&q&q&p&q&7&7&C*7*,*,*8*8*D*&=D*!*!*a*a*a*F*G*V&2=W&3=4=:#5=-=-=6=7=>=8=9=h*0=a=b=c=^*O*O*!=l*d={=e=R*R*R*S*E&n*F&U*U*f=o*W*g=X*h=r*G$G$&%H$I$i= ", + " j=k=l=m=l=}=}=}=}=[=@=#=@=4*#=n=1=$=o=-*1=p=-*-*P&q=-*q=-*P&O&O&;*q&6&r=C*7*7*s=t=u=&=v=9*D*0*0*a*a*F*w=w=w=2=x=:#y=z=A=B=B=6=8=C=D='=h*N*E=F=F=G=^*H=H=l*d={=I=e=R*J=K=L=L=M=N=U*o*O=P=4%Q=R=R=G$*%H${$ ", + " j=S=T=k=U=k=V=k=k=}=m=[=[=@=@=y*y*@=n=W=1=X=X=$=-*-*p=-*-*-*q=-*-*O&;*;*7&7&7&C*t=t=Y=v=&=&=*=D*D*0*a*Z=G*`= -5=_#.-+-@-#-$-%-B=&-6=7=,=*-N*=-E=----;-O*O* *l*>-d=]=,-J='-'-L=n*N=)-B&X%X%_&_&!-Q=R=R=~- ", + " j={-S={-S=S=T=S=T=k=k=V=k=V=l=[=[=[=y*y*y*n=n=o=o=n=$=p=1=%=%=$=-*-*P&O&;*;*]-r=r&C*^-t=t=/-&=/-0*0*0*0*Z=`=F*(-_-:-<-.-[-#-A=}-$-|-&-1-2-*-3-4-0=E=5-6-;-f$7-8-l*d=9-]=,-J=0-U%a-z&W%W%s%2%2%2%_&3%4%F$ ", + " b-c-c-c-d-{-d-{-S=S=S=S=T=T=k=k=V=k=V=}=[=[=y*@=n=o=e-n=1=o=1=$=p=%=-*-*P&O&;*r=]-7&f-g-t=t=Y=h-&=D**=0*0*i-j-k-(#l-m-n-.-[-@-#-o-$-p-B=&-q-2-2-3-4-r-E=5-;-G=f$H=s-8-d=x&x&y&y&q%U%U%z&W%s%s%X%2%_&2%F$ ", + " t-c-u-c-c-c-v-d-{-w-{-w-S=x-S=S=S=U=k=l=k=k=V=}=}=[=e-e-e-W=e-e-o=o=n=$=$=-*y-O&;*]-]-z-C*g-^-Y=Y=A-&=B-B-C-i-D-n#E-F-l-G-H-.-.-@-I-}-}-B=J-1->=2-3-K-4-r-5-L-6-M-f$]*]*i*c&j*x&^*^*y&e&q%z&z&N-A&s%B&+% ", + " t-O-u-u-u-u-P-Q-c-c-c-v-c-R-{-S-{-S=S=T=S=k=S=k=k=T-}=m=}=e-e-e-e-e-n=1=n=$=$=y-U-6*V-W-X-f-f-g-Y-Z-A-/-B-B-`- ;/#.;+;@;l-#;H-H-.-[-I-I-}-$;p-J->=>=2-%;4-&;r-,=3-,={*Z&]**;a=i*c&=;x&-;y&!=/&U%a-+*s%+% ", + " t-;;>;,;;;O-u-u-';Q-u-Q-Q-P-c-d-);d-);w-!;S=S=U=T=T=k=T=k=V=}=l=e-~;e-e-e-n=$={;y-$=y-U-V-];]-f-f-Y-^;Z-/;/;/;(;_;:;.;.;<;@;l-[;};n-.-|;I-1;}-$;2;J-3;4;%;6=6=6=8=8=,=3-3-h*]*a=a=i*c&j*x&x&^&!=y&U%+*+% ", + " 5;6;;;;;;;;;;;7;8;O-u-O-O-';';';';Q-c-c-);{-);w-{-{-S=k=S=U=T=k=V=k=m=e-e-~;e-e-{;1={;U-U-];V-];9;9;g-Y-^;^;/;0;_;a;a;:;.;.;b;@;[;G-H-c;[-|;I-d;$;$;J-o-}-B=B=|-&-6=8=8=,=9=3-h*0=]*`&e;a=c&x&d&^&^&y&|% ", + " f;g;g;h;h;i;j;j;;;;;8;>;k;O-u-u-O-c-u-u-';c-c-c-);c-d-w-w-S=S=S=S=T=U=k=k=V=l;l;~;m;e-1=n;o;V-U-];p;9;g-q;g-0;r;s;t;u;u;:;:;.;v;+;b;[;};w;w;x;y;[-|;|;I-o-z;}-$-%-B=&-6=6=8=8=,=*-h*h*0=]*]*i*j*j*j*x&|% ", + " f;A;B;g;g;g;g;g;h;j;6;6;;;k;;;;;O-;;O-k;u-u-c-Q-';';';c-v-);c-w-);d-S=S=U=S=S=T=S=l;~;m;{;{;C;y-y-V-];9;p;p;g-D;s;E;F;G;H;I;:;:;J;<;<;K;[;L;L;H-H-M;y;[-|;I-I-}-}-$-%-p-B=6=6=C=7=8=,=)=h*N;0=]*]*i*c&|% ", + " f;O;P;Q;R;P;Q;S;g;g;g;g;g;i;j;j;;;;;;;;;7;k;O-O-u-u-u-P-';P-u-c-c-);d-w-S={-S=!;S=S=U=k=~;{;{;n;y-o;U-T;p;p;p;U;V;W;X;Y;Y;G;Z;u;:;`;J; >b;b;.>[;};H-n-n-c;[-[-I-#-#-o-$-$-p-|-&-6=6=q-8=8=9=9=h*h*0=]*+> ", + " @>O;#>O;$>#>O;P;P;P;P;S;g;g;g;g;i;h;j;6;6;6;;;;;;;,;>;k;u-u-u-u-';u-';c-c-c-);{-);{-{-S-S=S=U=%>{;&>&>o;*>W-=>U;->;>>>,>'>Y;)>)>!>`;J;~>~>{>{>K;@;]>[;G-H-M;w;y;|;[-@-I-d;z;$-p-B=B=|-6=6=M*8=9=9=h*h*.% ", + " ^>/>(>_>(>_>_>O;O;O;$>O;A;A;P;P;S;R;g;g;i;i;i;6;6;;;;;;;;;k;k;u-O-u-O-u-Q-u-c-c-';c-c-);w-d-S=S-S-:><>n;[>[>o;}>|>1>2>3>W;'>'>)>4>5>6>7>8>J;~>~>{>{>b;K;[;[;H-H-.-c;y;[-[-#-#-}-}-p-$-B=|-&-6=>=8=,=,=.% ", + " 9>0>0>0>a>a>(>/>_>_>#>b>O;O;P;$>P;P;P;Q;g;S;c>g;g;h;i;d>j;6;e>;;;;;;k;u-;;O-u-O-Q-Q-';c-';c-);););{-S-S=n;n;[>f>|>g>g>2>'>h>h>h>h>i>)>!>7>7>8>`;`;~>~>b;b;K;.>[;[;m-w;w;c;.-[-j>I-#-z;}-k>B=B=B=&->=>=.% ", + " 9>l>m>n>0>0>0>0>a>o>(>(>_>_>p>#>p>O;O;P;P;Q;P;Q;g;g;g;g;i;g;i;h;e>j;q>;;;;;;8;7;8;>;u-O-u-u-O-';r>c-c-););w-);s>|>t>u>v>3>w>,>,>'>h>x>)>i>y>5>z>7>`;`;A>~>B>{>K;b;[;L;};H-<-w;c;[-|;#-I-#-}-}-$-B=B=C> % ", + " D>E>F>m>m>m>G>0>0>n>0>0>0>o>_>o>(>_>_>#>#>#>O;#>P;P;P;A;P;B;g;B;g;i;H>i;i;6;;;h;;;;;8;7;O-O-O-u-u-Q-I>';Q-c-c-J>K>L>M>N>O>u>v>w>P>w>Q>R>S>h>)>)>4>!>7>6>`;`;J;~>b;{>b;.>K;[;T>H-U>c;c;[-|;@-#-#-$-}-V> % ", + " W>X>E>E>m>Y>m>Y>Z>`>n>0>0>0>l>0>0>0>(>0>(>/>(>_>_>#>#>O;P;P;P;P;A;B;A;R;g;g;g;j;i;i;i;;;;;;;;;;;8;k;8;O-u-O-u- ,K>.,+,@,M>M>#,u>v>3>P>,>Q>$,$,h>)>i>%,4>6>7>6>`;J;~>~>+;b;]>]>[;L;H-w;w;y;.-[-|;#-#-o-'$ ", + " &,X>X>*,X>X>X>X>E>E>=,m>`>m>`>l>-,l>n>0>0>0>;,;,a>o>(>_>_>O;P;#>#>P;O;P;c>B;P;c>B;g;i;i;i;6;;;e>6;;;7;;;,;O-O->,_;,,',.,),!,L>N>N>#,v>v>~,w>w>w>h>h>{,i>y>4>4>7>6>:;`;J;~>{>{>b;]>.>[;L;w;w;c;[-.-[-#-'$ ", + " &,],],],],^,*,],/,X>X>E>E>E>Y>m>m>m>`>n>`>l>G>l>0>0>0>(,;,o>(>_>(>#>O;p>#>#>P;P;P;c>A;S;g;g;g;g;i;j;i;;;;;6;;;_,s;:,<,[,},.,),+,|,L>M>N>#,v>v>P>w>w>$,h>h>S>)>)>4>7>7>6>`;A>~>{>b;b;b;]>.>[;L;w;H-c;[-'$ ", + " &,1,2,3,4,2,],],],5,^,^,X>X>E>E>E>F>6,E>Y>`>`>l>`>`>`>n>l>0>o>a>_>(>_>_>_>#>p>O;O;P;$>P;P;P;g;c>g;c>g;g;i;q>i;7,s;8,8,9,:,[,[,',),.,),M>N>N>N>v>v>v>w>w>,>Q>$,Y;i>)>y>!>5>6>:;`;`;~>{>{>b;K;[;[;};H-U>'$ ", + " 0,a,a,b,a,3,3,2,3,4,],],],*,^,],^,X>X>E>E>E>E>E>6,`>m>m>`>Z>G>`>l>0>0>0>a>_>(>p>(>#>#>#>$>P;#>P;P;P;P;P;B;g;i;c,s;d,e,f,8,:,<,:,[,[,',',),@,M>N>M>#,g,v>h,P>w>'>$,h>S>)>y>y>4>6>7>`;`;~>B>b;b;b;]>[;L;S# ", + " i,j,k,k,b,j,b,a,3,3,3,2,l,3,],l,],],*,/,/,X>m,E>X>Y>Y>=,F>F>F>m>-,-,l>n>`>0>0>0>o>o>o>p>(>#>p>#>#>b>O;P;n,P;c>c,V;o,p,q,e,r,r,s,9,9,<,,,},.,.,+,L>M>M>N>O>v>v>3>w>Q>'>h>h>{,)>y>4>4>6>6>`;`;~>~>b;b;b;S# ", + " t,u,u,j,v,k,k,j,k,a,w,a,b,a,a,3,1,4,x,],l,],],/,X>X>^,y,E>Y>=,=,m>z,`>`>m>l>n>n>l>0>G>0>0>o>(>/>_>#>#>#>O;$>$>A,V;B,C,o,p,D,e,e,r,8,E,9,<,[,},',.,.,!,M>M>F,O>O>~,3>P>w>$,Q>h>S>Y;G,y>4>7>6>8>`;J;~>~>:# ", + " t,H,I,u,u,J,u,j,j,K,k,j,j,k,k,b,b,a,a,3,1,4,4,],4,],],/,/,^,X>/,*,E>E>E>E>`>m>`>`>`>`>m>0>-,0>0>0>0>(>/>_>/>p>L,|>M,N,N,C,O,P,Q,D,e,f,e,8,9,9,<,[,',.,),),|,M>N>N>u>u>v>P>w>w>,>$,h>S>)>y>4>4>7>:;8>`;R, ", + " S,T,H,H,I,U,V,V,u,v,W,u,X,j,k,k,b,b,b,b,a,a,a,3,3,3,Y,x,x,],],],],],X>X>E>E>E>E>=,F>`>`>z,`>m>`>0>G>l>0>0>0>0>L,|>Z,`, '.'N,N,+'o,P,P,e,e,@'8,9,8,:,<,[,,,#'),),M>M>F,N>u>v>3>w>,>,>h>h>h>S>i>y>4>4>6>:# ", + " S,$'%'%'T,T,I,U,I,V,U,H,u,u,J,J,u,v,v,j,j,k,b,b,a,a,b,3,3,1,l,3,],l,x,*,],*,*,/,m,X>m,E>F>Y>`>z,m>m>`>`>m>-,G>&'|>*'Z,Z,Z,=' 'M,N,B,-'o,o,d,D,e,;'8,8,9,>'[,,,',),),+,M>M>N>N>v>v>h,w>$,h>h>h>{,)>)>%,:# ", + " ,''''''''')')')'!')'I,T,T,I,H,u,u,u,u,v,W,v,j,j,j,j,k,~'~'{'a,3,3,3,2,x,4,],],],],/,*,y,/,X>m,E>z,E>F>F>Y>`>`>]'|>^'/'('*'Z,_':'M,M,M,N,o,o,<'P,D,D,e,8,s,9,:,<,[,['.,.,),M>@,M>#,O>}'v>3>w>w>h>h>h>S>_# ", + " |'1'2'3'4'''''''5'''%'T,)'T,T,I,H,u,I,6'u,u,u,v,u,u,X,v,j,j,j,7'b,a,a,b,3,3,3,Y,l,],Y,],*,*,*,*,*,X>X>E>E>E>Y>8'|>9'9'0'a'('('b'*'Z,='M,N,c'B,o,o,Q,P,Q,q,e,8,8,9,<,<,[,.,.,),),M>M>F,N>d'u>h,w>w>,>$,o# ", + " e'f'g'1'1'1'2'h'4'''4'''''''%'%'%'I,T,T,I,T,u,6'u,u,u,u,J,v,j,J,j,k,k,j,i'b,a,a,3,3,2,],4,x,],],],],^,/,/,*,X>j'k'l'l'm'n'o'p'/'('('*'_'Z,='M,q'.'-'r'o,Q,D,e,e,8,8,8,9,<,[,',',s'),L>M>M>N>O>v>3>3>w>/# ", + " t'u'v'v'e'w'x'w'1'y'1'3'3'4'4'''''5'%''')')'T,T,T,T,I,u,u,u,u,u,v,J,K,j,v,k,k,b,b,a,a,b,3,3,3,3,1,l,l,],*,*,],z'A'B'C'D'l'l'9'n'0'^'('('E'*'_'='='='F'N,O,o,P,P,P,D,e,f,8,9,:,[,[,,,.,),L>@,M>N>O>u>u>G' ", + " H'I'J'K'K'v'g'L'L'w'w'M'1'1'y'''3'N'2'''%'%'%')'%'T,T,T,T,I,T,I,u,H,u,u,u,u,j,j,k,~'b,b,~'7'3,7'3,3,3,2,1,Y,O'P'Q'R'S'B'B'l'l'o'o'T'0'p'('*'E'_' 'U'='.'N,N,O,o,D,e,D,e,f,8,8,:,V'[,[,.,',),@,|,M>/#W' ", + " X'Y'Z'`'`' ) ) )g'L'.)L'+)1'w'1'1'3'1'2'''''''''%'%'%'!')'T,)'I,T,H,@)u,H,u,u,u,J,j,j,j,k,k,b,b,a,a,b,a,3,#)P'$)%)&)R'R'S'B'D'l'l'9'9'0'0'p'('*)Z,Z, 'U'='.'N,N,r'P,D,P,D,@'e,8,s,9,<,[,=)',),@,-) ", + " ;)>),)`'`'`'`'') )g'.).).)L'))w'w'))w'1'1'4'1'3'4'N'''''%'%')'%'T,T,T,T,I,T,V,H,u,u,u,u,K,v,J,J,k,~'b,~'!)~){)])^)/)/)()R'_)S'B'l'l'm'9'n'0'('('('b'Z,Z,=' 'M,N,N,C,o,o,p,e,e,e,8,8,9,:,<,[,_;:) ", + " <)[)})`'`'`'`'`' ) ) )|)1).).)L'L'L'L'L'w'))1'1'1'3'2'3'h'h'''%'%')')'T,!'T,T,T,T,6'u,u,H,u,u,u,j,J,j,2)P'3)4){)5)5)$)$)Q'Q'S'S'B'D'6)l'T'o'o'0'0'('('*)Z,Z,M,M,.'N,-'o,o,o,P,d,e,;'8,8,:,K> ", + " 7)8)9)0)J'`'`'`'`'`' ) )a)b)c)d).).)d).)L'.)e)1'))x'1'1'1'4'''''''''%'%')'%'!')')'I,I,U,U,V,u,I,u,u,f)g)h)i)j)4)k)l)5)])$)&)&)m)S'B'D'n)6)l'9'n'o'0'p'('E'_'o)Z,M,.'F'N,r'o,P,o,e,D,p)s;q) ", + " r)X's)t)u)v)`'`'`'`'K'w)K'a)b)b)x)1).).).).).)L'w'))))1'1'1'3'1'N'1'4'''y)''%')')'T,T,T,T,6'I,V,z)g)A)A)B)h)i)i)l){){)$)$)/)C)()R'S'B'B'C'l'm'9'o'0'a'D)('_'Z,_'M,='F'N,N,r'o,P,E)s; ", + " F)G)H)I)J)`'`'`'`'`'w) )w)b)b)b)c)K)L)d).).)d).)L'))))w'e)e)1'1'y'2'''4'4'%''')'%'M)T,T,T,N)O)P)A)A)Q)B)B)R)j)j){)5)5)5)$)$)Q'&)S'S'B'D'l'l'9'0'0'p'p'('('*'Z,:'M,F'M,N,-'V;S) ", + " T)U)I'V)J'`'`'`'`'w)w)w)W)c)c)b)c)c)c)L)b)d).).).)X)L'+)w'e)e)1'1'1'h'2'4'''''%')'%'Y)Z)`) !.!P)A)A)A)B)i)j)4)4)4)4)5)$)$)/)Q'&)S'S'B'D'l'm'9'0'0'p'a'('*'_'Z,Z,:'M,V; ", + " r)+!s)t)u)v)`'`'`'`'w)w)@!W)b)b)b)c)b)c)b)L)K).).)d)d)L'L'L'w'w'1'e)1'1'1'3'4'''#!Z)$!$!%!&!.! ! !P)A)*!B)=!i)l)l)4)5)5)$)$)Q'R'S'S'B'6)l'l'l'9'n'0'D)('*)E'_'|>-! ", + " ;!>!s),!'!)!`'`'`'`'!!w)W)b)~!b)b)b)c)b)b)b)c)b)K).).)L'.).)L'))))e)+)1'1'{!]!^!/!$!$!%!%!&!.! !P)(!Q)B)B)h)j)l){)5)^)$)$)Q'&)R'S'S'B'D'6)m'm'9'9'p'|>|>_! ", + " :!)[!}!`'`'`'`'!!!!!!|!~!~!~!c)b)b)c)c)b)b)c)K)x)L).)1).)X)L'L'))1!2!3!3!4!^!/!/!$!%!5!&!.!.! !A)A)B)h)i)i)l)4)5)5)$)$)%)R'&)R'S'B'n)l'k'6!7! ", + " 8!9![)0!a!b!`'`'`'`'!!!!!!|!~!~!b)~!c)c)b)b)b)c)b)c)c)L)d).).).)c!2!d!e!3!f!4!4!g!/!%!`)`)&!.!.!P)A)h!B)B)i)i!4)4){)5)])$)$)%)&)S'k'j!k! ", + " l!H's)m!n!o!`'`'`'`'!!!!|!~!~!~!~!p!b)b)c)c)b)b)b)b)b)b)K)q!2!r!r!s!e!e!3!3!4!4!/!/!`)%!`)`).!P)t!A)Q)B)u!i)j)l)l)4)5)5)P'v! ", + " w!x![)y!z!`'`'`'`'!!!!!!A!~!~!~!~!~!p!~!b)b)c)b)b)c)q!2!B!B!B!B!r!C!e!e!3!f!D!4!/!$!%!`)E!.!.!P)A)F!B)B)G!R)P'P'H! ", + " I!>)J!K!L!`'`'`'`'!!!!|!~!~!~!~!~!~!~!b)~!b)c)M!2!B!B!B!B!B!r!r!N!C!e!3!O!3!4!^!/!/!%!P!`).!.!t!(!Q!g)R! ", + " S!T!s)U!V!o!`'`'`'!!!!!!|!W!~!~!W!~!~!~!~!X!2!B!B!B!B!B!B!B!r!B!r!Y!e!Z!e!`!D!4!^!$!$!%!5!Z)O) ~ ", + " .~+~@~I)#~`'`'`'`'!!!!A!|!W!~!W!W!W!X!2!B!B!B!B!B!B!B!B!B!B!r!r!r!r!e!Z!3!D!D!g!Z)O)$~ ", + " %~8)u'&~L!`'`'`'`'!!!!|!W!~!W!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!r!r!d!3!2!*~=~ ", + " -~T!s);~>~v)`'`'`'!!!!!!A!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~'~ ", + " )~t)s)!~~~)!`'`'`'!!{~2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~]~ ", + " :!U)U)^~/~`'`'`'(~2!B!B!B!B!B!B!B!B!B!B!B!2!_~ ", + " :~<~@~+~[~b!`'}~2!B!B!B!B!B!B!B!B!2!|~ ", + " 1~2~3~,!'!4~2!B!B!B!B!B!2!5~ ", + " 6~x!@~7~2!B!8~2!9~ ", + " 0~a~2!b~ ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " "}; + """ diff --git a/src/Mod/Ship/shipLoadExample/TaskPanel.ui b/src/Mod/Ship/shipLoadExample/TaskPanel.ui index 77d744189..3c875d905 100644 --- a/src/Mod/Ship/shipLoadExample/TaskPanel.ui +++ b/src/Mod/Ship/shipLoadExample/TaskPanel.ui @@ -76,7 +76,7 @@ - Serie 60 from Iowa University + Series 60 from Iowa University @@ -86,7 +86,7 @@ - Serie 60 (Katamaran) + Series 60 (Katamaran) diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py new file mode 100644 index 000000000..ec6394638 --- /dev/null +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py @@ -0,0 +1,167 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +from TankInstance import * +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/tankCreateTank/TaskPanel.ui" + + def accept(self): + # Create new ship instance + obj = App.ActiveDocument.addObject("Part::FeaturePython","Tank") + ShipTank(obj, self.solid, self.form.level.value(), self.form.dens.value()) + if not obj.IsShipTank: + msg = Translator.translate("Tank has not been created.\n") + App.Console.PrintError(msg) + ViewProviderShipTank(obj.ViewObject) + App.ActiveDocument.recompute() + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.level = form.findChild(QtGui.QDoubleSpinBox, "Level") + form.dens = form.findChild(QtGui.QDoubleSpinBox, "Density") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.level, QtCore.SIGNAL("valueChanged(double)"), self.onLevel) + QtCore.QObject.connect(form.dens , QtCore.SIGNAL("valueChanged(double)"), self.onDens) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Get selected geometry. + @return False if sucessfully find valid geometry. + """ + self.solid = None + solids = [] + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Tank objects can only be created on top of structure geometry (no object selected).\n") + App.Console.PrintError(msg) + msg = Translator.translate("Please create a tank geometry before using this tool.\n") + App.Console.PrintError(msg) + return True + for i in range(0, len(selObjs)): + solid = selObjs[i] + if solid.isDerivedFrom('Part::Feature'): + # Get shape + shape = solid.Shape + if not shape: + continue + solid = shape + if not solid.isDerivedFrom('Part::TopoShape'): + return None + # Get shells + shells = solid.Shells + if not shells: + continue + # Build solids + for s in shells: + solids.append(Part.Solid(s)) + if not solids: + msg = Translator.translate("Ship objects can only be created on top of structure geometry (no solids can't be computed).\n") + App.Console.PrintError(msg) + msg = Translator.translate("Please create or download a tank geometry before using this tool\n") + App.Console.PrintError(msg) + return True + self.solid = Part.CompSolid(solids) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Create a new tank")) + name = Translator.translate("Filling level") + " (\%)" + self.form.findChild(QtGui.QLabel, "LevelLabel").setText(name) + name = '\n' + name = name + Translator.translate("Density") + name = name + '(kg/m3)' + self.form.findChild(QtGui.QLabel, "DensityLabel").setText(name) + + def onLevel(self, value): + """ Method called when tank filling level has been modified. + @param value Changed value. + """ + pass + + def onDens(self, value): + """ Method called when fluid density has been modified. + @param value Changed value. + """ + pass + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.ui b/src/Mod/Ship/tankCreateTank/TaskPanel.ui new file mode 100644 index 000000000..635af0090 --- /dev/null +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.ui @@ -0,0 +1,141 @@ + + + TaskPanel + + + + 0 + 0 + 260 + 180 + + + + Create new ship tank + + + + + + + + + 240 + 160 + + + + Fluid + + + false + + + + + 0 + 20 + 241 + 141 + + + + + 6 + + + QLayout::SetDefaultConstraint + + + + + QLayout::SetDefaultConstraint + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Filling level (%) + + + + + + + 1 + + + 100.000000000000000 + + + 1.000000000000000 + + + + + + + + + 10 + + + 0 + + + 10 + + + 0 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Density (kg/m<span style=" vertical-align:super;">3</span>)</p></body></html> + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 998.000000000000000 + + + + + + + + + + + + + + + + diff --git a/src/Mod/Ship/tankCreateTank/__init__.py b/src/Mod/Ship/tankCreateTank/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/tankCreateTank/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 47d53335e0ef538e5088f6976bb338a3343b2a78 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 1 May 2012 18:07:37 -0300 Subject: [PATCH 122/517] Fixed 0000688 Gui issues with Draft rectanges --- src/Mod/Draft/Draft.py | 2 +- src/Mod/Draft/DraftGui.py | 7 +++++-- src/Mod/Draft/DraftTools.py | 38 ++++++++++++++++++++++--------------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 89cbb15fe..070d87dda 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2297,7 +2297,7 @@ class _ViewProviderRectangle(_ViewProviderDraft): "A View Provider for the Rectangle object" def __init__(self, vobj): _ViewProviderDraft.__init__(self,vobj) - obj.addProperty("App::PropertyFile","TextureImage", + vobj.addProperty("App::PropertyFile","TextureImage", "Base","Uses an image as a texture map") def attach(self,vobj): diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index a3402501e..3fd0339d4 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -496,8 +496,11 @@ class DraftToolBar: self.offsetLabel.show() self.offsetValue.show() - def lineUi(self): - self.pointUi(translate("draft", "Line")) + def lineUi(self,title=None): + if title: + self.pointUi(title) + else: + self.pointUi(translate("draft", "Line")) self.xValue.setEnabled(True) self.yValue.setEnabled(True) self.isRelative.show() diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index e0e767564..3994fea19 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -401,7 +401,7 @@ class Line(Creator): Creator.Activated(self,name) if self.doc: self.obj = None - self.ui.lineUi() + self.ui.lineUi(name) self.linetrack = lineTracker() self.constraintrack = lineTracker(dotted=True) self.obj=self.doc.addObject("Part::Feature",self.featureName) @@ -526,6 +526,8 @@ class Wire(Line): 'Accel' : "W, I", 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Wire"), 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Creates a multiple-point wire. CTRL to snap, SHIFT to constrain")} + def Activated(self): + Line.Activated(self,name=str(translate("draft","Wire"))) class BSpline(Line): @@ -541,7 +543,7 @@ class BSpline(Line): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_BSpline", "Creates a multiple-point b-spline. CTRL to snap, SHIFT to constrain")} def Activated(self): - Line.Activated(self,"BSpline") + Line.Activated(self,name=str(translate("draft","BSpline"))) if self.doc: self.bsplinetrack = bsplineTracker() @@ -693,10 +695,11 @@ class Rectangle(Creator): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Rectangle", "Creates a 2-point rectangle. CTRL to snap")} def Activated(self): - Creator.Activated(self,"Rectangle") + name = str(translate("draft","Rectangle")) + Creator.Activated(self,name) if self.ui: self.refpoint = None - self.ui.pointUi() + self.ui.pointUi(name) self.ui.extUi() self.call = self.view.addEventCallback("SoEvent",self.action) self.rect = rectangleTracker() @@ -1096,14 +1099,15 @@ class Polygon(Creator): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Polygon", "Creates a regular polygon. CTRL to snap, SHIFT to constrain")} def Activated(self): - Creator.Activated(self,"Polygon") + name = str(translate("draft","Polygon")) + Creator.Activated(self,name) if self.ui: self.step = 0 self.center = None self.rad = None self.tangents = [] self.tanpoints = [] - self.ui.pointUi() + self.ui.pointUi(name) self.ui.extUi() self.ui.numFaces.show() self.altdown = False @@ -1284,12 +1288,13 @@ class Text(Creator): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Text", "Creates an annotation. CTRL to snap")} def Activated(self): - Creator.Activated(self,"Text") + name = str(translate("draft","Text")) + Creator.Activated(self,name) if self.ui: self.dialog = None self.text = '' self.ui.sourceCmd = self - self.ui.pointUi() + self.ui.pointUi(name) self.call = self.view.addEventCallback("SoEvent",self.action) self.ui.xValue.setFocus() self.ui.xValue.selectAll() @@ -1350,19 +1355,20 @@ class Dimension(Creator): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Dimension", "Creates a dimension. CTRL to snap, SHIFT to constrain, ALT to select a segment")} def Activated(self): + name = str(translate("draft","Dimension")) if self.cont: self.finish() elif self.hasMeasures(): - Creator.Activated(self,"Dimension") + Creator.Activated(self,name) self.dimtrack = dimTracker() self.arctrack = arcTracker() self.constraintrack = lineTracker(dotted=True) self.createOnMeasures() self.finish() else: - Creator.Activated(self,"Dimension") + Creator.Activated(self,name) if self.ui: - self.ui.pointUi() + self.ui.pointUi(name) self.ui.continueCmd.show() self.altdown = False self.call = self.view.addEventCallback("SoEvent",self.action) @@ -1707,7 +1713,8 @@ class Move(Modifier): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Move", "Moves the selected objects between 2 points. CTRL to snap, SHIFT to constrain, ALT to copy")} def Activated(self): - Modifier.Activated(self,"Move") + self.name = str(translate("draft","Move")) + Modifier.Activated(self,self.name) if self.ui: if not Draft.getSelection(): self.ghost = None @@ -1723,7 +1730,7 @@ class Move(Modifier): if self.call: self.view.removeEventCallback("SoEvent",self.call) self.sel = Draft.getSelection() self.sel = Draft.getGroupContents(self.sel) - self.ui.pointUi() + self.ui.pointUi(self.name) self.ui.modUi() self.ui.xValue.setFocus() self.ui.xValue.selectAll() @@ -2874,7 +2881,8 @@ class Scale(Modifier): 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Scale", "Scales the selected objects from a base point. CTRL to snap, SHIFT to constrain, ALT to copy")} def Activated(self): - Modifier.Activated(self,"Scale") + self.name = str(translate("draft","Scale")) + Modifier.Activated(self,self.name) if self.ui: if not Draft.getSelection(): self.ghost = None @@ -2890,7 +2898,7 @@ class Scale(Modifier): if self.call: self.view.removeEventCallback("SoEvent",self.call) self.sel = Draft.getSelection() self.sel = Draft.getGroupContents(self.sel) - self.ui.pointUi() + self.ui.pointUi(self.name) self.ui.modUi() self.ui.xValue.setFocus() self.ui.xValue.selectAll() From e274524b43cdae91b0205f759d43f761dde37ef5 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 2 May 2012 11:37:46 -0300 Subject: [PATCH 123/517] Fixed 0000686: Draft upgrade looses inner holes --- src/Mod/Draft/Draft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 070d87dda..1c9961679 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -779,6 +779,7 @@ def fuse(object1,object2): # testing if we have holes: holes = False fshape = object1.Shape.fuse(object2.Shape) + fshape = fshape.removeSplitter() for f in fshape.Faces: if len(f.Wires) > 1: holes = True @@ -791,7 +792,6 @@ def fuse(object1,object2): obj.Tool = object2 elif holes: # temporary hack, since Part::Fuse objects don't remove splitters - fshape = fshape.removeSplitter() obj = FreeCAD.ActiveDocument.addObject("Part::Feature","Fusion") obj.Shape = fshape else: From 2dc62d783e8ba168f2c9c91a682726acd1ba96bc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 2 May 2012 18:16:41 -0300 Subject: [PATCH 124/517] Added 0000602 : Annotations object for Drawing pages --- src/Mod/Drawing/App/AppDrawing.cpp | 2 + src/Mod/Drawing/App/CMakeLists.txt | 2 + src/Mod/Drawing/App/FeatureViewAnnotation.cpp | 103 +++ src/Mod/Drawing/App/FeatureViewAnnotation.h | 73 ++ src/Mod/Drawing/App/Makefile.am | 2 + src/Mod/Drawing/Gui/Command.cpp | 29 + src/Mod/Drawing/Gui/Resources/Drawing.qrc | 1 + src/Mod/Drawing/Gui/Resources/Makefile.am | 1 + .../icons/actions/drawing-annotation.svg | 722 ++++++++++++++++++ src/Mod/Drawing/Gui/Workbench.cpp | 2 + 10 files changed, 937 insertions(+) create mode 100644 src/Mod/Drawing/App/FeatureViewAnnotation.cpp create mode 100644 src/Mod/Drawing/App/FeatureViewAnnotation.h create mode 100755 src/Mod/Drawing/Gui/Resources/icons/actions/drawing-annotation.svg diff --git a/src/Mod/Drawing/App/AppDrawing.cpp b/src/Mod/Drawing/App/AppDrawing.cpp index 86aafb420..a581668ba 100644 --- a/src/Mod/Drawing/App/AppDrawing.cpp +++ b/src/Mod/Drawing/App/AppDrawing.cpp @@ -20,6 +20,7 @@ #include "FeaturePage.h" #include "FeatureView.h" #include "FeatureViewPart.h" +#include "FeatureViewAnnotation.h" #include "FeatureProjection.h" #include "PageGroup.h" @@ -57,6 +58,7 @@ void DrawingExport initDrawing() Drawing::FeatureProjection ::init(); Drawing::FeatureViewPartPython ::init(); Drawing::FeatureViewPython ::init(); + Drawing::FeatureViewAnnotation ::init(); } } // extern "C" diff --git a/src/Mod/Drawing/App/CMakeLists.txt b/src/Mod/Drawing/App/CMakeLists.txt index 3258959f8..98767a24a 100644 --- a/src/Mod/Drawing/App/CMakeLists.txt +++ b/src/Mod/Drawing/App/CMakeLists.txt @@ -27,6 +27,8 @@ SET(Features_SRCS FeatureView.h FeatureViewPart.cpp FeatureViewPart.h + FeatureViewAnnotation.cpp + FeatureViewAnnotation.h PageGroup.cpp PageGroup.h ) diff --git a/src/Mod/Drawing/App/FeatureViewAnnotation.cpp b/src/Mod/Drawing/App/FeatureViewAnnotation.cpp new file mode 100644 index 000000000..50d78add5 --- /dev/null +++ b/src/Mod/Drawing/App/FeatureViewAnnotation.cpp @@ -0,0 +1,103 @@ +/*************************************************************************** + * Copyright (c) Yorik van Havre (yorik@uncreated.net) 2012 * + * * + * 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" + +#ifndef _PreComp_ +# include +#endif + +#include + +#include +#include + +#include "FeatureViewAnnotation.h" + +using namespace Drawing; +using namespace std; + + +//=========================================================================== +// FeatureViewAnnotation +//=========================================================================== + +PROPERTY_SOURCE(Drawing::FeatureViewAnnotation, Drawing::FeatureView) + + +FeatureViewAnnotation::FeatureViewAnnotation(void) +{ + static const char *vgroup = "Drawing view"; + + ADD_PROPERTY_TYPE(Text ,(""),vgroup,App::Prop_None,"The text to be displayed"); + ADD_PROPERTY_TYPE(Font ,("Sans"),vgroup,App::Prop_None,"The name of the font to use"); + ADD_PROPERTY_TYPE(TextColor,(0.0f,0.0f,0.0f),vgroup,App::Prop_None,"The color of the text"); +} + +FeatureViewAnnotation::~FeatureViewAnnotation() +{ +} + +App::DocumentObjectExecReturn *FeatureViewAnnotation::execute(void) +{ + std::stringstream result,hr,hg,hb; + const App::Color& c = TextColor.getValue(); + hr << hex << setfill('0') << setw(2) << (int)(255.0*c.r); + hg << hex << setfill('0') << setw(2) << (int)(255.0*c.g); + hb << hex << setfill('0') << setw(2) << (int)(255.0*c.b); + + result << "" << endl; + + int index=0; + for (std::vector::const_iterator it = Text.getValues().begin(); it != Text.getValues().end(); ++it) { + result << "" << it->c_str() << "" << endl; + index++; + } + + result << "" << endl; + + // Apply the resulting fragment + ViewResult.setValue(result.str().c_str()); + + return App::DocumentObject::StdReturn; +} + +// Python Drawing feature --------------------------------------------------------- + +namespace App { +/// @cond DOXERR +PROPERTY_SOURCE_TEMPLATE(Drawing::FeatureViewAnnotationPython, Drawing::FeatureViewAnnotation) +template<> const char* Drawing::FeatureViewAnnotationPython::getViewProviderName(void) const { + return "DrawingGui::ViewProviderDrawingView"; +} +/// @endcond + +// explicit template instantiation +template class DrawingExport FeaturePythonT; +} diff --git a/src/Mod/Drawing/App/FeatureViewAnnotation.h b/src/Mod/Drawing/App/FeatureViewAnnotation.h new file mode 100644 index 000000000..8bd68cf40 --- /dev/null +++ b/src/Mod/Drawing/App/FeatureViewAnnotation.h @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright (c) Yorik van Havre (yorik@uncreated.net 2012) * + * * + * 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 _FeatureViewAnnotation_h_ +#define _FeatureViewAnnotation_h_ + + +#include +#include +#include "FeatureView.h" +#include + + +namespace Drawing +{ + + +/** Base class of all View Features in the drawing module + */ +class DrawingExport FeatureViewAnnotation : public FeatureView +{ + PROPERTY_HEADER(Drawing::FeatureView); + +public: + /// Constructor + FeatureViewAnnotation(void); + virtual ~FeatureViewAnnotation(); + + App::PropertyStringList Text; + App::PropertyString Font; + App::PropertyColor TextColor; + + /** @name methods overide Feature */ + //@{ + /// recalculate the Feature + virtual App::DocumentObjectExecReturn *execute(void); + //@} + + /// returns the type name of the ViewProvider + virtual const char* getViewProviderName(void) const { + return "DrawingGui::ViewProviderDrawingView"; + } +}; + +typedef App::FeaturePythonT FeatureViewAnnotationPython; + + +} //namespace Drawing + + +#endif diff --git a/src/Mod/Drawing/App/Makefile.am b/src/Mod/Drawing/App/Makefile.am index 790f1ddcc..462017c0f 100644 --- a/src/Mod/Drawing/App/Makefile.am +++ b/src/Mod/Drawing/App/Makefile.am @@ -13,6 +13,8 @@ libDrawing_la_SOURCES=\ FeatureView.h \ FeatureViewPart.cpp \ FeatureViewPart.h \ + FeatureViewAnnotation.cpp \ + FeatureViewAnnotation.h \ PageGroup.cpp \ PageGroup.h \ ProjectionAlgos.cpp \ diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index 2dc1a4957..4da43412c 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -354,6 +354,34 @@ bool CmdDrawingOpenBrowserView::isActive(void) return (getActiveGuiDocument() ? true : false); } +//=========================================================================== +// Drawing_Annotation +//=========================================================================== + +DEF_STD_CMD_A(CmdDrawingAnnotation); + +CmdDrawingAnnotation::CmdDrawingAnnotation() + : Command("Drawing_Annotation") +{ + // seting the + sGroup = QT_TR_NOOP("Drawing"); + sMenuText = QT_TR_NOOP("&Annotation"); + sToolTipText = QT_TR_NOOP("Inserts an Annotation view in the active document"); + sWhatsThis = "Drawing_Annotation"; + sStatusTip = QT_TR_NOOP("Inserts an Annotation view in the active document"); + sPixmap = "actions/drawing-annotation"; +} + +void CmdDrawingAnnotation::activated(int iMsg) +{ + doCommand(Doc,"AnnotationView = App.activeDocument().addObject(\"Drawing::FeatureViewAnnotation\",\"ViewAnnotation\")"); + doCommand(Doc,"AnnotationView.Scale = 7.0"); +} + +bool CmdDrawingAnnotation::isActive(void) +{ + return (getActiveGuiDocument() ? true : false); +} //=========================================================================== // Drawing_ExportPage @@ -451,6 +479,7 @@ void CreateDrawingCommands(void) rcCmdMgr.addCommand(new CmdDrawingNewView()); rcCmdMgr.addCommand(new CmdDrawingOrthoViews()); rcCmdMgr.addCommand(new CmdDrawingOpenBrowserView()); + rcCmdMgr.addCommand(new CmdDrawingAnnotation()); rcCmdMgr.addCommand(new CmdDrawingExportPage()); rcCmdMgr.addCommand(new CmdDrawingProjectShape()); } diff --git a/src/Mod/Drawing/Gui/Resources/Drawing.qrc b/src/Mod/Drawing/Gui/Resources/Drawing.qrc index 5d5d80ca3..fad40eb81 100644 --- a/src/Mod/Drawing/Gui/Resources/Drawing.qrc +++ b/src/Mod/Drawing/Gui/Resources/Drawing.qrc @@ -16,6 +16,7 @@ icons/actions/drawing-view.svg icons/actions/drawing-orthoviews.svg icons/actions/drawing-openbrowser.svg + icons/actions/drawing-annotation.svg translations/Drawing_af.qm translations/Drawing_de.qm translations/Drawing_es.qm diff --git a/src/Mod/Drawing/Gui/Resources/Makefile.am b/src/Mod/Drawing/Gui/Resources/Makefile.am index a6063f8ea..e42a14b03 100644 --- a/src/Mod/Drawing/Gui/Resources/Makefile.am +++ b/src/Mod/Drawing/Gui/Resources/Makefile.am @@ -20,6 +20,7 @@ EXTRA_DIST = \ icons/actions/drawing-portrait-A4.svg \ icons/actions/drawing-orthoviews.svg \ icons/actions/drawing-openbrowser.svg \ + icons/actions/drawing-annotation.svg \ icons/Page.svg \ icons/Pages.svg \ icons/View.svg \ diff --git a/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-annotation.svg b/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-annotation.svg new file mode 100755 index 000000000..b45e42a48 --- /dev/null +++ b/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-annotation.svg @@ -0,0 +1,722 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + Ab + + + diff --git a/src/Mod/Drawing/Gui/Workbench.cpp b/src/Mod/Drawing/Gui/Workbench.cpp index d4816ada2..b7bd8bbce 100644 --- a/src/Mod/Drawing/Gui/Workbench.cpp +++ b/src/Mod/Drawing/Gui/Workbench.cpp @@ -62,6 +62,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *part << "Drawing_NewView"; *part << "Drawing_OrthoViews"; *part << "Drawing_OpenBrowserView"; + *part << "Drawing_Annotation"; *part << "Drawing_ExportPage"; return root; @@ -78,6 +79,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const *part << "Drawing_NewView"; *part << "Drawing_OrthoViews"; *part << "Drawing_OpenBrowserView"; + *part << "Drawing_Annotation"; *part << "Drawing_ExportPage"; return root; } From 6e69faa86d4c9d4d65e69da1955b155e83aa79a6 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Thu, 3 May 2012 11:08:40 +0200 Subject: [PATCH 125/517] importSVG support numbers only seperated through a minus sign in path definition. Like in files created by Adobe Ilustrator. --- src/Mod/Draft/importSVG.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index e30e0cadb..5de678d51 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -256,7 +256,7 @@ def getsize(length,mode='discard',base=1): elif mode == 'tuple': return float(number),unit elif mode == 'isabsolute': - return unit in ['mm','cm','in','px','pt'] + return unit in ('mm','cm','in','px','pt') elif mode == 'mm': return float(number)*tomm[unit] elif mode == 'css': @@ -525,9 +525,11 @@ class svgHandler(xml.sax.ContentHandler): self.lastdim = obj data['d']=[] pathcommandsre=re.compile('\s*?([mMlLhHvVaAcCqQsStTzZ])\s*?([^mMlLhHvVaAcCqQsStTzZ]*)\s*?',re.DOTALL) + pointsre=re.compile('([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)',re.DOTALL) for d,pointsstr in pathcommandsre.findall(' '.join(data['d'])): relative = d.islower() - pointlist = [float(str1) for str1 in pointsstr.replace(',',' ').split()] + pointlist = [float(number) for number,exponent in pointsre.findall(pointsstr.replace(',',' '))] + if (d == "M" or d == "m"): x = pointlist.pop(0) y = pointlist.pop(0) From 0ea8beed7ace828fb5447269ebee0568bf11be03 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 3 May 2012 17:01:09 +0200 Subject: [PATCH 126/517] update helix immediately --- src/Mod/Part/App/PrimitiveFeature.cpp | 18 +++++++++++++++++- src/Mod/Part/App/PrimitiveFeature.h | 3 +++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/PrimitiveFeature.cpp b/src/Mod/Part/App/PrimitiveFeature.cpp index 0213ac04d..5673ddd42 100644 --- a/src/Mod/Part/App/PrimitiveFeature.cpp +++ b/src/Mod/Part/App/PrimitiveFeature.cpp @@ -100,7 +100,7 @@ void Primitive::onChanged(const App::Property* prop) // Do not support sphere, ellipsoid and torus because the creation // takes too long and thus is not feasible std::string grp = (prop->getGroup() ? prop->getGroup() : ""); - if (grp == "Plane" || grp == "Cylinder" || grp == "Cone" || grp == "Helix") { + if (grp == "Plane" || grp == "Cylinder" || grp == "Cone") { try { App::DocumentObjectExecReturn *ret = recompute(); delete ret; @@ -601,6 +601,22 @@ Helix::Helix(void) LocalCoord.setEnums(LocalCSEnums); } +void Helix::onChanged(const App::Property* prop) +{ + if (!isRestoring()) { + if (prop == &Pitch || prop == &Height || prop == &Radius || + prop == &Angle || prop == &LocalCoord) { + try { + App::DocumentObjectExecReturn *ret = recompute(); + delete ret; + } + catch (...) { + } + } + } + Part::Feature::onChanged(prop); +} + short Helix::mustExecute() const { if (Pitch.isTouched()) diff --git a/src/Mod/Part/App/PrimitiveFeature.h b/src/Mod/Part/App/PrimitiveFeature.h index e90a4d6a1..0c0b7b81d 100644 --- a/src/Mod/Part/App/PrimitiveFeature.h +++ b/src/Mod/Part/App/PrimitiveFeature.h @@ -236,6 +236,9 @@ public: short mustExecute() const; //@} +protected: + void onChanged (const App::Property* prop); + private: static const char* LocalCSEnums[]; }; From e12bc00f9bf4316202a8baf34dad4d65444a7c22 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 3 May 2012 13:00:01 -0300 Subject: [PATCH 127/517] Further fixes of 0000688 in Draft Gui --- src/Mod/Draft/DraftGui.py | 90 +++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 3fd0339d4..17b3dba50 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -150,6 +150,8 @@ class DraftTaskPanel: FreeCADGui.ActiveDocument.resetEdit() return True def reject(self): + FreeCADGui.draftToolBar.isTaskOn = False + FreeCADGui.draftToolBar.escape() FreeCADGui.ActiveDocument.resetEdit() return True @@ -169,6 +171,7 @@ class DraftToolBar: self.paramconstr = Draft.getParam("constructioncolor")>>8 self.constrMode = False self.continueMode = False + self.relativeMode = True self.state = None self.textbuffer = [] self.crossedViews = [] @@ -307,7 +310,7 @@ class DraftToolBar: self.labelRadius = self._label("labelRadius", self.layout) self.radiusValue = self._lineedit("radiusValue", self.layout, width=60) self.radiusValue.setText("0.00") - self.isRelative = self._checkbox("isRelative",self.layout,checked=True) + self.isRelative = self._checkbox("isRelative",self.layout,checked=self.relativeMode) self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode) self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode) self.occOffset = self._checkbox("occOffset",self.layout,checked=False) @@ -358,6 +361,7 @@ class DraftToolBar: QtCore.QObject.connect(self.xzButton,QtCore.SIGNAL("clicked()"),self.selectXZ) QtCore.QObject.connect(self.yzButton,QtCore.SIGNAL("clicked()"),self.selectYZ) QtCore.QObject.connect(self.continueCmd,QtCore.SIGNAL("stateChanged(int)"),self.setContinue) + QtCore.QObject.connect(self.isRelative,QtCore.SIGNAL("stateChanged(int)"),self.setRelative) QtCore.QObject.connect(self.hasFill,QtCore.SIGNAL("stateChanged(int)"),self.setFill) QtCore.QObject.connect(self.currentViewButton,QtCore.SIGNAL("clicked()"),self.selectCurrentView) QtCore.QObject.connect(self.resetPlaneButton,QtCore.SIGNAL("clicked()"),self.selectResetPlane) @@ -712,7 +716,8 @@ class DraftToolBar: self.radiusValue.setFocus() self.radiusValue.selectAll() - def setRelative(self): + def setRelative(self,val=1): + self.relativeMode = bool(val) if (not self.taskmode) or self.isTaskOn: self.isRelative.show() @@ -836,9 +841,9 @@ class DraftToolBar: pass else: if self.pointcallback: - self.pointcallback(FreeCAD.Vector(numx,numy,numz),(self.isRelative.isVisible() and self.isRelative.isChecked())) + self.pointcallback(FreeCAD.Vector(numx,numy,numz),self.relativeMode) else: - if self.isRelative.isVisible() and self.isRelative.isChecked(): + if self.relativeMode: if self.sourceCmd.node: if self.sourceCmd.featureName == "Rectangle": last = self.sourceCmd.node[0] @@ -903,6 +908,7 @@ class DraftToolBar: spec = False if txt.endsWith(" ") or txt.endsWith("r"): self.isRelative.setChecked(not self.isRelative.isChecked()) + self.relativeMode = self.isRelative.isChecked() spec = True elif txt.endsWith("i"): if self.hasFill.isVisible(): @@ -972,44 +978,46 @@ class DraftToolBar: def displayPoint(self, point, last=None, plane=None, mask=None): "this function displays the passed coords in the x, y, and z widgets" - # get coords to display - dp = point - if self.isRelative.isChecked() and (last != None): - if plane: - dp = plane.getLocalCoords(FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z)) + if (not self.taskmode) or self.isTaskOn: + + # get coords to display + dp = point + if self.relativeMode and (last != None): + if plane: + dp = plane.getLocalCoords(FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z)) + else: + dp = FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z) + + # set widgets + self.xValue.setText("%.2f" % dp.x) + self.yValue.setText("%.2f" % dp.y) + self.zValue.setText("%.2f" % dp.z) + + # set masks + if mask == "x": + self.xValue.setEnabled(True) + self.yValue.setEnabled(False) + self.zValue.setEnabled(False) + self.xValue.setFocus() + self.xValue.selectAll() + elif mask == "y": + self.xValue.setEnabled(False) + self.yValue.setEnabled(True) + self.zValue.setEnabled(False) + self.yValue.setFocus() + self.yValue.selectAll() + elif mask == "z": + self.xValue.setEnabled(False) + self.yValue.setEnabled(False) + self.zValue.setEnabled(True) + self.zValue.setFocus() + self.zValue.selectAll() else: - dp = FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z) - - # set widgets - self.xValue.setText("%.2f" % dp.x) - self.yValue.setText("%.2f" % dp.y) - self.zValue.setText("%.2f" % dp.z) - - # set masks - if mask == "x": - self.xValue.setEnabled(True) - self.yValue.setEnabled(False) - self.zValue.setEnabled(False) - self.xValue.setFocus() - self.xValue.selectAll() - elif mask == "y": - self.xValue.setEnabled(False) - self.yValue.setEnabled(True) - self.zValue.setEnabled(False) - self.yValue.setFocus() - self.yValue.selectAll() - elif mask == "z": - self.xValue.setEnabled(False) - self.yValue.setEnabled(False) - self.zValue.setEnabled(True) - self.zValue.setFocus() - self.zValue.selectAll() - else: - self.xValue.setEnabled(True) - self.yValue.setEnabled(True) - self.zValue.setEnabled(True) - self.xValue.setFocus() - self.xValue.selectAll() + self.xValue.setEnabled(True) + self.yValue.setEnabled(True) + self.zValue.setEnabled(True) + self.xValue.setFocus() + self.xValue.selectAll() def getDefaultColor(self,type,rgb=False): From d4b5a079d930c6ee033b721ae2c9e61f0adbcf37 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 3 May 2012 16:04:48 -0300 Subject: [PATCH 128/517] Refined Drawing::FeatureViewAnnotation + Now goes inside an existing page automatically + Supports Rotation value --- src/Mod/Drawing/App/FeatureViewAnnotation.cpp | 11 +++++------ src/Mod/Drawing/Gui/Command.cpp | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Mod/Drawing/App/FeatureViewAnnotation.cpp b/src/Mod/Drawing/App/FeatureViewAnnotation.cpp index 50d78add5..b8624c28b 100644 --- a/src/Mod/Drawing/App/FeatureViewAnnotation.cpp +++ b/src/Mod/Drawing/App/FeatureViewAnnotation.cpp @@ -66,21 +66,20 @@ App::DocumentObjectExecReturn *FeatureViewAnnotation::execute(void) hg << hex << setfill('0') << setw(2) << (int)(255.0*c.g); hb << hex << setfill('0') << setw(2) << (int)(255.0*c.b); - result << "" << endl + << "" << endl; int index=0; for (std::vector::const_iterator it = Text.getValues().begin(); it != Text.getValues().end(); ++it) { - result << "" << it->c_str() << "" << endl; + result << "" << it->c_str() << "" << endl; index++; } - result << "" << endl; + result << "" << endl << "" << endl; // Apply the resulting fragment ViewResult.setValue(result.str().c_str()); diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index 4da43412c..2f9345b97 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -374,8 +374,23 @@ CmdDrawingAnnotation::CmdDrawingAnnotation() void CmdDrawingAnnotation::activated(int iMsg) { - doCommand(Doc,"AnnotationView = App.activeDocument().addObject(\"Drawing::FeatureViewAnnotation\",\"ViewAnnotation\")"); - doCommand(Doc,"AnnotationView.Scale = 7.0"); + + std::vector pages = this->getDocument()->getObjectsOfType(Drawing::FeaturePage::getClassTypeId()); + if (pages.empty()){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page to insert"), + QObject::tr("Create a page to insert.")); + return; + } + std::string PageName = pages.front()->getNameInDocument(); + std::string FeatName = getUniqueObjectName("Annotation"); + openCommand("Create Annotation"); + doCommand(Doc,"App.activeDocument().addObject('Drawing::FeatureViewAnnotation','%s')",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.X = 10.0",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Y = 10.0",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Scale = 7.0",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); + updateActive(); + commitCommand(); } bool CmdDrawingAnnotation::isActive(void) From 4e2a6eb1fb803f2d28134b19ece863f37aaed2ac Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 3 May 2012 18:57:25 -0300 Subject: [PATCH 129/517] Bugfix in Arch Wall --- src/Mod/Arch/ArchWall.py | 60 +++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 5e811856a..108edabfc 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -249,14 +249,11 @@ class _Wall(ArchComponent.Component): "The width of this wall. Not used if this wall is based on a face") obj.addProperty("App::PropertyLength","Height","Base", "The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid") - obj.addProperty("App::PropertyLength","Length","Base", - "The length of this wall. Not used if this wall is based on a shape") obj.addProperty("App::PropertyEnumeration","Align","Base", "The alignment of this wall on its base object, if applicable") obj.Align = ['Left','Right','Center'] self.Type = "Wall" obj.Width = 0.1 - obj.Length = 1 obj.Height = 0 def execute(self,obj): @@ -288,6 +285,9 @@ class _Wall(ArchComponent.Component): def createGeometry(self,obj): "builds the wall shape" + if not obj.Base: + return + import Part from draftlibs import fcgeo @@ -346,36 +346,25 @@ class _Wall(ArchComponent.Component): # computing shape base = None - if obj.Base: - if obj.Base.isDerivedFrom("Part::Feature"): - if not obj.Base.Shape.isNull(): - base = obj.Base.Shape.copy() - if base.Solids: - pass - elif base.Faces: - 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 - base = base.removeSplitter() - if not base: - if obj.Length == 0: - return - length = obj.Length - if not length: - length = 1 - v1 = Vector(0,0,0) - v2 = Vector(length,0,0) - w = Part.Wire(Part.Line(v1,v2).toShape()) - base = getbase(w) + if obj.Base.isDerivedFrom("Part::Feature"): + if not obj.Base.Shape.isNull(): + base = obj.Base.Shape.copy() + if base.Solids: + pass + elif base.Faces: + 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 + base = base.removeSplitter() for app in obj.Additions: base = base.oldFuse(app.Shape) @@ -394,8 +383,9 @@ class _Wall(ArchComponent.Component): if not hole.Shape.isNull(): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed - - obj.Shape = base + + if base: + obj.Shape = base if not fcgeo.isNull(pl): obj.Placement = pl From 454096a34ecfe10447541d27f97ade418e586556 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 3 May 2012 18:57:59 -0300 Subject: [PATCH 130/517] Bugfix in Draft toolbar mode --- src/Mod/Draft/DraftGui.py | 19 ++++++++++++++++++- src/Mod/Draft/DraftTools.py | 3 ++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 17b3dba50..02c6c57d4 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -154,7 +154,7 @@ class DraftTaskPanel: FreeCADGui.draftToolBar.escape() FreeCADGui.ActiveDocument.resetEdit() return True - + class DraftToolBar: "main draft Toolbar" def __init__(self): @@ -488,6 +488,21 @@ class DraftToolBar: self.retranslateUi(self.baseWidget) self.panel = DraftTaskPanel(self.baseWidget,extra) todo.delay(FreeCADGui.Control.showDialog,self.panel) + else: + # create a dummy task to block the UI during the works + class dummy: + "an empty dialog" + def getStandardButtons(self): + return int(QtGui.QDialogButtonBox.Cancel) + def accept(self): + FreeCADGui.ActiveDocument.resetEdit() + return True + def reject(self): + FreeCADGui.draftToolBar.isTaskOn = False + FreeCADGui.draftToolBar.escape() + FreeCADGui.ActiveDocument.resetEdit() + return True + todo.delay(FreeCADGui.Control.showDialog,dummy()) self.setTitle(title) def selectPlaneUi(self): @@ -871,6 +886,8 @@ class DraftToolBar: def escape(self): "escapes the current command" self.continueMode = False + if not self.taskmode: + self.continueCmd.setChecked(False) self.finish() def closeLine(self): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 3994fea19..32654eb3a 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -74,7 +74,7 @@ MODALT = MODS[Draft.getParam("modalt")] # sets defaults on first load -if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/").HasGroup("Draft"): +if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod").HasGroup("Draft"): p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft") p.SetBool("copymode",1) p.SetBool("alwaysSnap",1) @@ -84,6 +84,7 @@ if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/").HasGroup("Dra p.SetInt("precision",4) p.SetInt("gridEvery",10) p.SetFloat("gridSpacing",1.0) + p.SetInt("UiMode",1) #--------------------------------------------------------------------------- # General functions From 9f74316fa6c232ad5aa77735a51c3ece73d181da Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 4 May 2012 15:52:49 +0200 Subject: [PATCH 131/517] fix error in translation --- .../Gui/Resources/translations/Points_de.qm | Bin 3926 -> 3933 bytes .../Gui/Resources/translations/Points_de.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Points/Gui/Resources/translations/Points_de.qm b/src/Mod/Points/Gui/Resources/translations/Points_de.qm index 668c2abcdbf662f760c5d0983842f8b5a5bd8bf3..9407ace9b07e8ed97a99fcac4fb0cf9b95b55339 100644 GIT binary patch delta 21 ccmca6cUNvh4IiWR>UgY3`~rS09G~y@Bjb+ delta 13 UcmcaBcTH|X4IiVz Ascii Points (*.asc);;All Files (*.*) - ASCII-Punkte (.asc); Alle Dateien (*.*) + ASCII-Punkte (.asc);;Alle Dateien (*.*) From c3f4871f15f86034a7b2ba2b1a0ccf42b94d7709 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 4 May 2012 11:44:31 -0300 Subject: [PATCH 132/517] Fixed a bug in Draft DXF import with solids --- src/Mod/Draft/importDXF.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 58f9bbee5..a03ec28aa 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -526,7 +526,7 @@ def drawSolid(solid): if p4x != None: p4 = FreeCAD.Vector(p4x,p4y,p4z) if p4 and (p4 != p3) and (p4 != p2) and (p4 != p1): try: - return Part.Face(Part.makePolygon([p1,p2,p3,p4,p1])) + return Part.Face(Part.makePolygon([p1,p2,p4,p3,p1])) except: warn(solid) else: From 18c14eb1b0d03f2291cb0c47d4c09131c7199223 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 4 May 2012 18:07:33 -0300 Subject: [PATCH 133/517] Fixed 0000663 - Naming scheme in Draft up/downgrade --- src/Mod/Draft/DraftTools.py | 38 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 32654eb3a..7735f044c 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -2361,8 +2361,14 @@ class Upgrade(Modifier): if (not curves) and (Draft.getType(self.sel[0]) == "Part"): msg(translate("draft", "Found 1 non-parametric objects: draftifying it\n")) Draft.draftify(self.sel[0]) + else: + msg(translate("draft", "No upgrade available for this object\n")) + self.doc.abortTransaction() + return else: msg(translate("draft", "Couldn't upgrade these objects\n")) + self.doc.abortTransaction() + return elif wires and (not faces) and (not openwires): # we have only wires, no faces @@ -2385,15 +2391,12 @@ class Upgrade(Modifier): msg(translate("draft", "One wire is not planar, upgrade not done\n")) self.nodelete = True for f in faces: - if not curves: - msg(translate("draft", "Found a closed wire: making a Draft wire\n")) - newob = Draft.makeWire(f.Wire,closed=True) - else: - # if there are curved segments, we do a non-parametric face - msg(translate("draft", "Found a closed wire with curves: making a face\n")) - newob = self.doc.addObject("Part::Feature","Face") - newob.Shape = f - Draft.formatObject(newob,lastob) + # if there are curved segments, we do a non-parametric face + msg(translate("draft", "Found a closed wire: making a face\n")) + newob = self.doc.addObject("Part::Feature","Face") + newob.Shape = f + Draft.formatObject(newob,lastob) + newob.ViewObject.DisplayMode = "Flat Lines" elif (len(openwires) == 1) and (not faces) and (not wires): # special case, we have only one open wire. We close it, unless it has only 1 edge!" @@ -2435,12 +2438,9 @@ class Upgrade(Modifier): w = Part.Wire(nedges) if len(w.Edges) == len(edges): msg(translate("draft", "Found several edges: wiring them\n")) - if not curves: - newob = Draft.makeWire(w) - else: - newob = self.doc.addObject("Part::Feature","Wire") - newob.Shape = w - Draft.formatObject(newob,lastob) + newob = self.doc.addObject("Part::Feature","Wire") + newob.Shape = w + Draft.formatObject(newob,lastob) if not newob: print "no new object found" msg(translate("draft", "Found several non-connected edges: making compound\n")) @@ -2562,6 +2562,14 @@ class Downgrade(Modifier): else: # no faces: split wire into single edges + onlyedges = True + for ob in self.sel: + if ob.Shape.ShapeType != "Edge": + onlyedges = False + if onlyedges: + msg(translate("draft", "No more downgrade possible\n")) + self.doc.abortTransaction() + return msg(translate("draft", "Found only wires: extracting their edges\n")) for ob in self.sel: for e in edges: From 3e78f7e7a3d92669d062fcb2084cf169ed37b3e0 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 4 May 2012 19:21:54 -0300 Subject: [PATCH 134/517] Added Draft_Clone command --- src/Mod/Draft/Draft.py | 14 +- src/Mod/Draft/DraftTools.py | 24 +++ src/Mod/Draft/Draft_rc.py | 204 ++++++++++++++++-- src/Mod/Draft/InitGui.py | 3 +- src/Mod/Draft/Resources/Draft.qrc | 1 + src/Mod/Draft/Resources/icons/Draft_Clone.svg | 169 +++++++++++++++ 6 files changed, 400 insertions(+), 15 deletions(-) create mode 100755 src/Mod/Draft/Resources/icons/Draft_Clone.svg diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 1c9961679..6f8250a3d 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1635,7 +1635,7 @@ def clone(obj,delta=None): cl.Label = "Clone of " + obj[0].Label _Clone(cl) if gui: - _ViewProviderDraftPart(cl.ViewObject) + _ViewProviderClone(cl.ViewObject) formatObject(cl,obj[0]) cl.Objects = obj if delta: @@ -2873,5 +2873,17 @@ class _ViewProviderDraftPart(_ViewProviderDraft): def claimChildren(self): return [] +class _ViewProviderClone(_ViewProviderDraft): + "a view provider that displays a Part icon instead of a Draft icon" + + def __init__(self,vobj): + _ViewProviderDraft.__init__(self,vobj) + + def getIcon(self): + return ":/icons/Draft_Clone.svg" + + def claimChildren(self): + return [] + if not hasattr(FreeCADGui,"Snapper"): import DraftSnap diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 7735f044c..39713964b 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3711,6 +3711,29 @@ class ShowSnapBar(): def Activated(self): if hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper.show() + + +class Draft_Clone(): + "The Draft Clone command definition" + + def GetResources(self): + return {'Pixmap' : 'Draft_Clone', + 'Accel' : "C,L", + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Clone", "Clone"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Clone", "Clones the selected object(s)")} + + def Activated(self): + if FreeCADGui.Selection.getSelection(): + FreeCAD.ActiveDocument.openTransaction("Clone") + for obj in FreeCADGui.Selection.getSelection(): + Draft.clone(obj) + FreeCAD.ActiveDocument.commitTransaction() + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False #--------------------------------------------------------------------------- # Adds the icons & commands to the FreeCAD command manager, and sets defaults @@ -3744,6 +3767,7 @@ FreeCADGui.addCommand('Draft_DelPoint',DelPoint()) FreeCADGui.addCommand('Draft_WireToBSpline',WireToBSpline()) FreeCADGui.addCommand('Draft_Draft2Sketch',Draft2Sketch()) FreeCADGui.addCommand('Draft_Array',Array()) +FreeCADGui.addCommand('Draft_Clone',Draft_Clone()) # context commands FreeCADGui.addCommand('Draft_FinishLine',FinishLine()) diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index 38f69d094..7ef42e43f 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Thu Apr 12 11:34:15 2012 +# Created: Fri May 4 19:15:01 2012 # by: The Resource Compiler for PyQt (Qt v4.7.4) # # WARNING! All changes made in this file will be lost! @@ -35272,6 +35272,179 @@ qt_resource_data = "\ \x33\x31\x30\x30\x32\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ \x2f\x67\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\ \x3e\x0a\ +\x00\x00\x0a\xac\ +\x00\ +\x00\x25\xf5\x78\x9c\xed\x59\x5b\x6f\xdb\xd8\x11\x7e\xf7\xaf\x60\ +\x95\x97\x04\x15\xa9\x73\xbf\xc8\x96\xf7\x61\x83\x2d\x16\x68\x51\ +\xa0\x9b\xa0\x8f\x05\x4d\xd1\x36\x1b\x49\x14\x48\xca\x97\xfc\xfa\ +\x7e\xc3\xbb\x2c\xda\x71\xb6\xdb\xdd\x4d\xb1\x56\x8c\x88\x73\xe6\ +\x9c\x33\x67\xe6\x9b\x6f\xe6\xd0\x17\xdf\x3d\x6c\x37\xc1\x5d\x5a\ +\x94\x59\xbe\x5b\xcd\x78\xc4\x66\x41\xba\x4b\xf2\x75\xb6\xbb\x59\ +\xcd\x3e\x7e\xf8\x21\x74\xb3\xa0\xac\xe2\xdd\x3a\xde\xe4\xbb\x74\ +\x35\xdb\xe5\xb3\xef\x2e\xcf\x2e\xfe\x14\x86\xc1\xf7\x45\x1a\x57\ +\xe9\x3a\xb8\xcf\xaa\xdb\xe0\xc7\xdd\xa7\x32\x89\xf7\x69\xf0\xf6\ +\xb6\xaa\xf6\xcb\xc5\xe2\xfe\xfe\x3e\xca\x5a\x61\x94\x17\x37\x8b\ +\x77\x41\x18\x5e\x9e\x9d\x5d\x94\x77\x37\x67\x41\x10\x60\xdf\x5d\ +\xb9\x5c\x27\xab\x59\x3b\x61\x7f\x28\x36\xb5\xe2\x3a\x59\xa4\x9b\ +\x74\x9b\xee\xaa\x72\xc1\x23\xbe\x98\x0d\xea\xc9\xa0\x9e\xd0\xee\ +\xd9\x5d\x9a\xe4\xdb\x6d\xbe\x2b\xeb\x99\xbb\xf2\xcd\x48\xb9\x58\ +\x5f\xf7\xda\x64\xcd\xbd\xac\x95\xb8\xf7\x7e\xc1\xc4\x42\x88\x10\ +\x1a\x61\xf9\xb8\xab\xe2\x87\xf0\x78\x2a\x6c\x9c\x9a\x2a\x18\x63\ +\x0b\x8c\x0d\x9a\xaf\xd3\x5a\x3e\x6c\xe0\x8a\x67\x8d\xa9\x47\xc7\ +\xbb\xc3\xfd\x7b\xfc\xf6\x13\x3a\x41\x54\xe6\x87\x22\x49\xaf\x31\ +\x33\x8d\x76\x69\xb5\x78\xff\xe1\x7d\x3f\x18\xb2\x68\x5d\xad\x47\ +\xcb\x74\xde\x3f\xda\xf7\x28\x24\xbb\x78\x9b\x96\xfb\x38\x49\xcb\ +\x45\x27\xaf\xe7\xdf\x67\xeb\xea\x76\x35\x33\x6a\xff\x50\x3f\xdf\ +\xa6\xd9\xcd\x6d\x35\x12\x64\xeb\xd5\x0c\x27\x14\xde\xe9\xfa\x79\ +\x04\x20\xde\x28\xb4\xcb\x2d\xfb\x11\x16\x29\x17\xc9\x88\x07\x85\ +\x77\xce\xd4\x4a\x9d\xe5\xcb\x75\x9e\x90\x29\xab\xd9\xfb\x22\xbe\ +\xae\xfe\xf5\x3d\x41\x2d\x22\x0f\x5e\x42\xed\x62\x9d\x5e\x97\xa4\ +\xde\x6c\x4b\x4f\xd8\xd7\xd6\x63\x18\x85\xef\xd2\xb8\xf8\x4b\x11\ +\xaf\x33\x20\xa6\xd1\x6b\x34\x8f\x47\xa4\x33\xac\x9d\x83\x59\x65\ +\x95\xef\x3b\x5d\x18\x52\x3d\x6e\xb0\x3b\x09\xc3\x24\xdf\xe4\xc5\ +\xf2\x0d\x4f\xad\x49\xe5\x79\x2d\xca\xe1\xa2\xac\x7a\x5c\xf2\xf3\ +\xd9\x30\x27\xbf\xbe\x2e\x53\xf8\x84\x8d\x64\xb5\x5b\x30\x03\x7b\ +\x89\x59\xb0\x78\xfd\x6e\xd7\xf5\xcf\x2b\x76\xe3\xd3\xbb\xa9\x7e\ +\xb7\x8b\xc5\xf1\xb1\x5f\xf6\x52\x17\x25\x98\xb1\x49\x13\xac\x1f\ +\x6f\xee\xe3\xc7\xb2\xdf\xa4\x46\xe6\xf2\xb6\x48\x91\x49\x6f\x26\ +\xfc\xf9\xa2\xbb\xcd\xb0\x0c\x5f\xcd\x24\xa0\x21\xb4\xf4\xba\x97\ +\x3e\x42\x6a\x78\xa4\x38\xb3\x46\x0e\xba\x02\xba\x2c\xe2\x5c\x1a\ +\x39\xac\xf0\x08\x29\x17\x11\x37\xd0\x1d\x7c\x70\xd3\x6e\xf6\x71\ +\x97\x55\x48\xc5\x43\x99\x16\x3f\x11\x9c\xff\xbe\xfb\x58\xa6\x27\ +\x5a\x1f\x8a\x78\x57\x22\x77\xb6\xab\xd9\x36\xae\x8a\xec\xe1\x2d\ +\x9f\x33\xfa\x44\xde\x38\xe7\x85\xf5\xf3\x90\x47\x7a\x0e\x12\x54\ +\x5a\x28\xe3\xdf\x0d\x5e\xfd\xdf\xf8\x2f\x34\x5f\xf0\x60\xa8\x7f\ +\x63\x1f\x7e\xc9\x01\x93\x69\x86\x63\xbd\x1e\xfa\x3a\xf6\xd7\xd7\ +\xfa\xbf\x48\xb4\x50\xfd\xba\xa9\x16\xbe\x9c\x6c\x17\x0b\x62\xa8\ +\xfa\x5b\xcf\x6f\x44\x6e\xeb\xbb\x2c\xbd\x1f\x68\xec\x2a\xee\x11\ +\xba\x8f\x6f\xd2\xda\x38\x60\xa4\xb1\xae\x1d\xb8\xca\x8b\x75\x5a\ +\x74\x43\xa6\xfe\x39\x1a\x6a\xed\x6f\xea\xf6\xd9\x31\x24\x69\xd5\ +\x7e\x9c\x4d\x8f\x97\xb7\xf1\x3a\xbf\x5f\xcd\xc4\xd3\xc1\xcf\x79\ +\x8e\x2c\x11\x91\x13\x4e\x09\xcb\x9f\x0e\x27\x0f\x18\xd4\x91\x52\ +\xcc\x9e\x4c\x4d\xb0\x5d\xc8\x7d\xa4\xbd\xe0\xcc\x9d\x8c\x1e\x8a\ +\x02\x8e\x0a\x37\xf1\x63\x8a\x43\xd5\xff\x75\xcb\x97\xb7\xf9\xfd\ +\x4d\x41\xce\xa9\x8a\x43\xfa\x74\x26\x6a\xc4\x81\x7a\x82\xf0\xd0\ +\x00\xb5\xad\x44\x23\x0d\x9a\x1b\x5e\x5d\xe5\x0f\xd3\x0b\xdc\x67\ +\x3b\x1c\x36\x6c\x6b\x1b\x17\xee\xc4\x25\xad\x46\x57\xed\xac\xd6\ +\xcf\x68\x3c\x0c\x68\x7c\x3a\x84\xd3\x8b\x13\x9f\xb4\x63\xdb\xf8\ +\x21\xdb\x66\x9f\xd3\x35\x81\xab\xc1\xd0\xc5\x36\xad\xe2\x75\x5c\ +\xc5\x03\x32\x3a\x89\xf0\xbe\x2b\x58\x17\x68\x54\x96\xff\x78\xff\ +\x43\x8f\xf2\x24\x59\xfe\x33\x2f\x3e\x0d\x00\x25\x85\xf8\x2a\x3f\ +\xc0\xec\x3e\xf7\xa8\x74\x26\x4b\x22\xbc\xb8\xba\xcc\xb6\x88\x37\ +\x75\x25\x7f\x46\x73\x00\x8c\xf6\x03\x47\xca\xd5\xe3\x3e\x1d\x16\ +\x6d\x96\x2d\xd2\xa6\xeb\x98\x6c\xd4\xd6\xc9\x36\xa3\x49\x8b\x9f\ +\xaa\x6c\xb3\xf9\x91\x36\x19\x65\x63\xbb\x68\x56\x6d\xd2\x51\x8a\ +\x2e\x5a\xeb\xbb\x1c\x1a\x1d\xee\x62\xd1\x9d\xbe\x7e\xba\x19\xbc\ +\x72\x84\x94\xde\xb1\x9b\xf8\x2a\xdd\xac\x66\x7f\xa5\xc1\xe0\x64\ +\xf4\xa6\xc8\x0f\xfb\x6d\xbe\x4e\xdb\xe9\x9d\x37\xf7\x71\x75\x3b\ +\x66\x30\x7a\x96\x8c\xa9\x90\x87\x03\x87\xb6\xd4\xd1\x51\x04\x8b\ +\x34\xaf\x13\xd0\x9e\x5f\xe3\xa4\xcb\x37\xac\xfe\xa9\x1f\x46\x3c\ +\x52\x56\x45\xfe\x29\xed\x47\x9b\xc7\x06\x73\x4b\x4e\x75\xc6\x28\ +\xdb\x49\x89\x3b\x60\xe7\x12\x56\xee\xd6\x63\xe1\xbf\xf3\x6c\x77\ +\x2c\x85\x93\xd3\x62\x03\xf0\x54\x4b\xd5\xc9\x9e\x6e\x1a\xae\x63\ +\xe4\x73\x51\xc4\x8f\xcb\x1d\xfa\xa7\xfe\x20\x04\xa9\x00\x95\x43\ +\x4a\xcd\xe4\x5c\xfb\x88\x5b\xcb\xbd\x09\x92\x00\xa5\x2f\x10\x73\ +\xf4\x8d\x1c\x05\xc1\x88\x20\x54\x73\x11\x29\x63\x84\xc5\x77\x83\ +\xef\x46\x09\x25\x75\x10\x72\x16\x49\xee\xb8\x13\x54\x20\xa5\xe0\ +\x82\x1b\x08\x05\x6a\x65\x28\x22\xef\x95\xd5\x3e\xf8\x3e\x80\xc0\ +\x42\x87\xeb\xb9\xb6\x11\x13\x9a\x09\x13\x70\x54\x2c\x8f\x42\x66\ +\xe6\x5a\x46\xc2\x6a\xab\x5d\x2d\xd3\xb4\xca\x5c\x63\x5d\xe3\x99\ +\x0b\x5c\xe4\x2d\x97\x5e\x91\x84\x71\x83\xcc\x0b\x4c\xa4\x84\xf6\ +\xd2\xcf\x95\x8a\x2c\x76\x77\x3a\xb0\x14\x03\xa7\x1c\x9f\x2b\x11\ +\x31\xe7\x95\xc6\x44\x54\x33\x2c\x3b\x97\x1e\x74\x64\x31\x97\xcc\ +\x60\x46\x48\x9c\x55\xba\x48\x70\xe9\xac\x0f\xb8\x8c\x0c\x99\x01\ +\x3d\x18\x2c\x3c\xe3\x3c\xe0\xba\x75\x89\xb0\x38\xa8\xe2\x2a\xe0\ +\xaa\x33\x83\x63\x5d\x8d\x09\x62\xd0\xe2\x36\xc2\x91\xb4\x51\x24\ +\x6a\x17\xc3\x37\xa7\xb8\x30\x3a\xe0\xad\x6d\x7e\x4e\xb4\x68\x8d\ +\xb3\x2a\x90\x30\x5c\x8f\x9e\x13\xd2\x12\x52\x72\x2d\xe6\x9c\xa5\ +\xa1\x0d\x40\x93\x4c\x73\x29\xb1\x21\x3c\xe1\xa5\xb6\xce\x90\x10\ +\xc6\xc0\x90\x39\x1c\xe5\x98\x70\xd6\x9a\x80\x1c\x45\x1f\x34\x27\ +\x8a\xe1\x00\x0e\xc1\xeb\xe6\x60\x4a\x54\x0f\x4a\x32\xc8\x58\x87\ +\x0d\x3b\x11\x3c\x1a\x81\xc3\x9d\x71\x81\x8e\x98\xa7\xcf\xdc\xc0\ +\x54\xc7\x18\xb9\x98\x82\xca\xdd\xdc\x53\x53\xa0\x24\xfc\x54\xeb\ +\xf0\x71\xe8\x23\xa5\xe9\x33\xb7\xf0\x9b\x95\x98\x15\xca\x6e\x37\ +\xb8\xd7\x7a\x23\x03\x20\x88\xd5\x3a\xf0\x2d\x83\x5f\x1c\x4d\xd3\ +\x46\x33\xb8\xcd\xc0\x91\xda\x2b\x53\x4f\x6b\x76\x6b\xa6\x09\x1f\ +\x00\x3c\xad\x01\xb0\xd6\x4a\xad\xb0\x14\x8c\x83\xc9\x46\x02\xa2\ +\xaa\xc5\x58\x0f\x31\x60\x32\x6c\x2d\x53\x04\xd6\x70\x40\xeb\xf8\ +\xe1\xf3\xd0\x54\x0d\xfd\xd9\x0e\xb9\x56\xe5\x45\x88\x02\x74\x17\ +\x57\x87\x22\x1d\x37\x14\x43\xa1\x06\x59\x10\x9d\xa1\xbe\x24\x65\ +\x89\x7f\xdd\x6f\x92\x0c\x45\xff\x79\xfa\x78\x4a\x1e\x35\x53\x80\ +\x2d\xdf\x9e\xf6\x7e\xe6\xdd\xb7\x42\x1d\x48\x0f\xdf\x40\x40\x13\ +\x60\x14\x43\x72\xfe\x92\xdc\x61\x40\x1d\x1e\x49\x66\x2d\xd8\x49\ +\x45\x8c\x72\x5d\x21\xd7\x6b\x64\x70\x49\x94\x20\x9c\x30\xdc\x42\ +\x66\x2d\xd6\x87\x9e\xb2\x91\xb4\xc4\x0e\x40\xb5\xf6\x0d\x66\x15\ +\x91\x8e\x34\x5c\x06\xb2\x81\x23\x2c\x56\x1c\xdc\x81\xdc\x53\x81\ +\x8a\x78\x9b\x41\x60\x0a\x06\xd4\x32\x9a\x2b\x44\xbd\xe0\x5c\x82\ +\x6d\x34\x14\x6b\x42\x69\x20\x29\x69\x94\x61\x76\x30\x9c\x40\xf8\ +\x08\x09\x47\xc9\x94\x0c\x39\x17\x36\x19\x46\x29\xd7\xae\x16\x82\ +\x48\x84\xf1\x5c\xb9\x91\x56\x97\x9a\x7d\x2e\x93\x1e\x25\xb3\x0c\ +\xda\x34\xa0\xeb\x47\x9b\xf1\xc4\x28\x2d\x0d\x8c\x84\x62\x44\x20\ +\x62\x9a\x3f\xe0\xfd\x09\xfe\x10\x5f\xcb\x1f\xe6\x29\x7f\xd8\x13\ +\xfa\xb0\x4f\xe9\x43\xf1\x57\xd0\x87\xfa\x79\xf4\xa1\x4f\xe9\xc3\ +\x9d\xd2\x87\x3a\xa2\x0f\x7d\x44\x1f\xe6\xf7\xc8\x1e\x63\x9a\xf8\ +\x19\x0d\x05\x2e\xae\x4e\x49\x21\xf5\xfe\xe1\x29\x31\x5c\x1d\xaa\ +\xea\x65\x5e\xe8\xb7\x18\x67\xfb\xdf\xa8\x06\x6a\xcb\x0c\xe2\x2c\ +\x90\x46\xb8\x17\x4b\x43\x0c\xa0\xb5\x46\x0d\x17\x82\x06\xb5\x95\ +\x2d\x01\x84\xd4\x15\x51\x99\x86\x93\xad\x02\x04\xea\xf0\x5a\xe1\ +\x24\xd5\x68\x94\x66\xba\x55\x93\x48\x70\x94\x49\x00\x32\x72\x54\ +\xbf\xeb\x38\xa1\xbd\x45\xa8\x21\xb2\x28\x3c\xdc\x4d\x89\xda\x2d\ +\x2c\xd5\x64\xa2\x1a\xa1\x3c\x97\x9c\xd0\xe1\x81\x49\xd0\x00\xc5\ +\x93\x6b\x00\x9c\x64\x1c\xa6\xb9\x3a\x92\x12\x20\xa2\x8a\x03\x38\ +\x0a\xa7\x29\xaf\x60\x01\xb2\x9b\xe9\x49\xd9\x28\xe2\x1d\x9b\x5b\ +\xaf\x5e\x0d\x83\x6f\x25\xb2\x8a\xa2\x88\x38\x8c\x02\x8b\x0e\x05\ +\x61\x95\x14\xbf\x27\x91\x3d\x0d\xec\x69\x5c\x4f\xc3\x7a\x1a\xc2\ +\xe9\xa0\x9e\xc6\x74\x22\xa4\x13\x11\x9d\x08\xde\xab\xe3\x19\xb2\ +\xdf\x6b\x44\x5f\x51\xc4\x27\x43\xba\xa5\x72\x80\x08\x80\x34\xa9\ +\x49\x16\x4a\x61\x8b\x36\x7e\x12\x34\x6f\xbc\xa9\xdf\x68\x21\x44\ +\x20\x65\x10\xb8\xb7\xa8\xa3\x86\x3c\x05\xfa\xc5\xb5\x3e\xa0\xa0\ +\x73\x14\x03\x72\xb1\x50\x02\xd1\x19\xe6\xa1\x17\x86\xb6\x90\x75\ +\xd5\x75\x1c\x9d\xec\x20\x52\xa8\xbe\x5c\x30\x8d\x8d\x50\x1e\x2c\ +\xe7\xa8\xaa\x54\x89\x9c\x36\x28\xa0\x52\x1b\x0b\x09\x2a\xb3\x92\ +\xe8\x89\xb1\x8b\x77\xc4\xe1\xd4\x20\x70\x46\xc5\x1d\x0c\xad\x8d\ +\xd3\x24\x41\x81\xb2\xb8\x27\x9c\x4a\xea\xe4\x47\xd5\xb6\x8e\xf0\ +\xc9\x22\x23\xd0\x05\x80\x26\x70\x64\xa9\xa5\xe6\xa3\x93\x51\x23\ +\xa1\x8d\xf7\xb5\xac\x86\x99\x25\x59\x7d\x36\x4b\x66\x33\x45\xc8\ +\x25\x8a\x41\x43\xe1\xa9\xf2\x4a\xe0\x0d\x22\x43\x5b\xe0\xe4\x06\ +\x69\x81\x56\x46\x28\xa4\x03\x89\x3c\xea\xa7\xb2\x54\xc7\x6c\xad\ +\xe4\xd0\x96\x68\x54\xaf\xf9\x30\x0f\x07\x86\xbd\xb8\x79\xa0\xec\ +\x63\x9a\xc6\x96\x3a\xb2\x4e\x2b\x34\xf7\xbd\x61\x27\x92\x09\x6c\ +\x3a\xfe\x7a\xae\xf9\x42\xc9\x69\xea\xcd\x37\x84\x5f\x44\xdb\x7b\ +\xdc\x9f\xa8\xb3\x32\x48\x76\x5c\xcb\x24\x20\x6d\x90\xcf\x32\x72\ +\xd8\x8e\x2a\x8a\xa0\x96\x85\xda\x0a\x0c\x59\x34\x2f\x62\x54\x7d\ +\x9a\x96\x84\xa0\xc0\xf0\x51\x24\x33\x6d\x2f\x25\xa8\x83\xd4\xde\ +\xd6\xfd\x45\x3d\x9f\xd0\x01\x20\xbb\xa6\xe5\xd0\x5a\x38\x02\x07\ +\x5a\x5a\x63\xfc\x94\x68\x32\x58\xe6\xff\x8f\x46\x14\x3a\x46\x26\ +\x04\xe7\xa3\x30\x84\x27\x71\x78\x2e\x0c\x13\x51\x98\x08\xc2\x69\ +\x0c\x4e\xfd\xfd\xda\x08\x84\xe2\xab\x13\xa6\xd7\xab\xba\x3f\x02\ +\x84\x09\x2e\x62\x69\x41\xef\xf2\xa8\xdd\x6c\xda\xd4\x67\x62\xd6\ +\x65\x1b\x65\xda\x6a\x16\x17\xc9\xd3\x8b\x5e\xfb\x6e\x79\x14\xcf\ +\xe7\x82\x5b\x3f\x16\x87\x4d\xba\x4c\xef\x52\x64\xef\xfa\xc5\x70\ +\x8b\x5f\xe7\xc2\x37\x96\x36\xaf\xbf\x97\xec\x7c\x1b\x17\x9f\xd2\ +\xa2\x19\xbf\xcb\xca\xec\x2a\xdb\xd0\x12\xf5\xd7\x4d\x7a\xbe\xce\ +\xca\xfd\x06\xf3\xb3\x1d\x99\x71\x9e\xdf\xa5\xc5\xf5\x26\xbf\xef\ +\xc7\xd3\x5d\x8c\xff\xc2\xab\x38\xf9\x74\x53\xdb\xb7\x8c\x93\xe4\ +\xb0\x3d\x6c\xe2\x2a\x9d\x88\xea\xe8\xef\x14\xbd\xbb\xeb\xd7\xcc\ +\xac\xbd\xa4\x4d\x0c\x3f\xae\x66\x5a\x37\xa8\x9c\x18\x2e\x68\x76\ +\x77\x13\x9c\x18\x7e\x9c\x1a\x6e\x6e\xbc\xa2\xbb\xc9\xf5\xcb\x07\ +\x71\xd0\x2b\xcf\xfb\x6f\x01\x0b\xd0\xba\x50\xc1\x68\xef\x46\xec\ +\x05\xad\x91\xd2\x00\xeb\xea\xcb\x7f\x93\x62\xfd\xcd\x95\x08\x0f\ +\x89\xca\x15\x93\xef\xfe\x40\xea\x6f\x87\xd4\xd0\xfd\x81\xd5\x69\ +\xac\x8a\xfe\xb5\x01\xb0\xea\xa5\xd1\x8e\x49\xf1\x1c\x56\xc7\x95\ +\x10\x0d\x14\x3e\xdf\xcc\x2b\x31\xd7\xe4\xa4\x3a\x79\x25\x16\xb6\ +\xe1\x70\x47\xdf\xe9\x1b\xc3\x07\x25\xae\xfb\x2e\xe9\xca\x83\xc6\ +\x59\xa2\xaf\x36\x91\x42\xf7\x2a\x35\xdc\x6e\x01\x20\xd6\x88\x70\ +\x71\x12\x9a\xda\x21\xc9\xa4\x32\x73\x7a\x49\x82\x3e\x93\x74\x9c\ +\xf1\xce\xce\xe9\x8d\x96\x47\xf3\x08\x09\xae\x4b\xce\x9b\x79\x3f\ +\x89\xf5\xef\x61\x9a\x57\xdd\x28\x70\xce\x4a\x09\x4b\x70\x95\x42\ +\x47\xeb\x27\x45\x53\xc5\x56\xbf\xbe\xdd\xf9\x62\x6f\xfa\x8a\xc6\ +\x74\x94\xe2\xd3\x51\x47\xff\x2d\xad\xf0\x8a\xf1\xa7\x71\x9f\xbc\ +\x17\xd7\x91\xfe\xc5\xc2\xee\xe8\x4f\x07\x4e\x20\x5d\x18\x5d\x93\ +\x84\xb2\x6d\xd4\x39\x5d\x06\xb8\xa2\x3b\x12\xb5\x37\xc2\xe2\xfa\ +\x2a\xe8\x26\x83\xcb\x99\xac\xdf\x7b\x5a\xea\xaf\x02\x5f\xc7\x97\ +\x13\xa7\x4b\xdc\xae\x81\x1a\x24\x8c\x44\x0b\xec\xe8\x12\xad\xe9\ +\xb5\x9d\x9f\x10\x4d\xc5\xc5\x7d\x65\x1b\x7a\xb1\xb8\xb9\x3c\xbb\ +\xa0\x3f\x00\x5e\x9e\xfd\x07\x1b\x72\x19\xbf\ \x00\x00\x0f\x23\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -37539,6 +37712,10 @@ qt_resource_name = "\ \x08\x62\x03\xc7\ \x00\x44\ \x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x44\x00\x72\x00\x61\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0f\ +\x0d\xf5\x38\xa7\ +\x00\x44\ +\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x43\x00\x6c\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x11\ \x0b\x07\x6b\x27\ \x00\x53\ @@ -37588,8 +37765,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x02\x00\x00\x00\x4f\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x34\x00\x00\x00\x1b\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x02\x00\x00\x00\x50\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x35\x00\x00\x00\x1b\ \x00\x00\x00\x38\x00\x02\x00\x00\x00\x05\x00\x00\x00\x16\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x05\ \x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x06\x43\xc1\ @@ -37617,24 +37794,24 @@ qt_resource_struct = "\ \x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x6b\xbd\ \x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xbd\x6a\ \x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x1f\x87\ -\x00\x00\x0a\x5a\x00\x01\x00\x00\x00\x01\x00\x08\xd3\xbf\ +\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xde\x6f\ \x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x08\x51\ \x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x89\x07\ \x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe1\xa5\ \x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb2\xd6\ \x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x59\x16\ -\x00\x00\x0a\xaa\x00\x01\x00\x00\x00\x01\x00\x08\xef\xcf\ +\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xfa\x7f\ \x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xd6\x8c\ \x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xe7\x69\ \x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x76\x71\ \x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xdc\x0b\ \x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa1\xcc\ \x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xcc\x20\ -\x00\x00\x09\xe4\x00\x00\x00\x00\x00\x01\x00\x08\xb6\x05\ +\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc0\xb5\ \x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x97\xb4\ \x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x23\x70\ -\x00\x00\x09\x9c\x00\x01\x00\x00\x00\x01\x00\x08\xa2\x0f\ -\x00\x00\x09\xbe\x00\x01\x00\x00\x00\x01\x00\x08\xac\x71\ +\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xac\xbf\ +\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xb7\x21\ \x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x11\x57\ \x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x8f\xfb\ \x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x08\x5d\ @@ -37643,14 +37820,14 @@ qt_resource_struct = "\ \x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x80\x11\ \x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xc9\x78\ \x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xf7\x73\ -\x00\x00\x0a\x7a\x00\x00\x00\x00\x00\x01\x00\x08\xde\x59\ +\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xe9\x09\ \x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x4c\x1f\ \x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\x9f\xbb\ -\x00\x00\x0a\xda\x00\x00\x00\x00\x00\x01\x00\x08\xfb\xa8\ -\x00\x00\x09\x74\x00\x00\x00\x00\x00\x01\x00\x08\x92\xe8\ +\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x06\x58\ +\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\x9d\x98\ \x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb4\xdb\ \x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x28\x30\ -\x00\x00\x0a\x0a\x00\x00\x00\x00\x00\x01\x00\x08\xbe\x92\ +\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xc9\x42\ \x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x5e\x5e\ \x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xbf\xc7\ \x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x44\x85\ @@ -37660,7 +37837,8 @@ qt_resource_struct = "\ \x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x5f\x8b\ \x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x07\xfc\xeb\ \x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x0f\xb1\ -\x00\x00\x0a\x30\x00\x01\x00\x00\x00\x01\x00\x08\xc9\x3d\ +\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd3\xed\ +\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x92\xe8\ \x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xef\x2a\ \x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xed\x19\ \x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x3c\xc5\ diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 9ae60310d..1bcbadbc8 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -188,7 +188,8 @@ class DraftWorkbench (Workbench): self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", - "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array"] + "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", + "Draft_Clone"] self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar"] diff --git a/src/Mod/Draft/Resources/Draft.qrc b/src/Mod/Draft/Resources/Draft.qrc index 5dfc9edfd..c2ac4a36d 100644 --- a/src/Mod/Draft/Resources/Draft.qrc +++ b/src/Mod/Draft/Resources/Draft.qrc @@ -52,6 +52,7 @@ icons/Snap_Extension.svg icons/Snap_Ortho.svg icons/Snap_Near.svg + icons/Draft_Clone.svg patterns/concrete.svg patterns/cross.svg patterns/line.svg diff --git a/src/Mod/Draft/Resources/icons/Draft_Clone.svg b/src/Mod/Draft/Resources/icons/Draft_Clone.svg new file mode 100755 index 000000000..208451366 --- /dev/null +++ b/src/Mod/Draft/Resources/icons/Draft_Clone.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + From 7b2e15bedf5743fda7439581203619aae29cd9e7 Mon Sep 17 00:00:00 2001 From: logari81 Date: Sat, 5 May 2012 08:32:32 +0200 Subject: [PATCH 135/517] FreeGCS: Variables naming and comments improvements --- src/Mod/Sketcher/App/freegcs/GCS.cpp | 128 +++++++++++++++------------ src/Mod/Sketcher/App/freegcs/GCS.h | 11 ++- 2 files changed, 76 insertions(+), 63 deletions(-) diff --git a/src/Mod/Sketcher/App/freegcs/GCS.cpp b/src/Mod/Sketcher/App/freegcs/GCS.cpp index d17e79b5c..c608c9bd0 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/freegcs/GCS.cpp @@ -209,9 +209,9 @@ int System::addConstraintP2PDistance(Point &p1, Point &p2, double *distance, int } int System::addConstraintP2PAngle(Point &p1, Point &p2, double *angle, - double incr_angle, int tagId) + double incrAngle, int tagId) { - Constraint *constr = new ConstraintP2PAngle(p1, p2, angle, incr_angle); + Constraint *constr = new ConstraintP2PAngle(p1, p2, angle, incrAngle); constr->setTag(tagId); return addConstraint(constr); } @@ -379,28 +379,28 @@ int System::addConstraintPerpendicularCircle2Arc(Point ¢er, double *radius, Arc &a, int tagId) { addConstraintP2PDistance(a.start, center, radius, tagId); - double incr_angle = *(a.startAngle) < *(a.endAngle) ? M_PI/2 : -M_PI/2; - double tang_angle = *a.startAngle + incr_angle; + double incrAngle = *(a.startAngle) < *(a.endAngle) ? M_PI/2 : -M_PI/2; + double tangAngle = *a.startAngle + incrAngle; double dx = *(a.start.x) - *(center.x); double dy = *(a.start.y) - *(center.y); - if (dx * cos(tang_angle) + dy * sin(tang_angle) > 0) - return addConstraintP2PAngle(center, a.start, a.startAngle, incr_angle, tagId); + if (dx * cos(tangAngle) + dy * sin(tangAngle) > 0) + return addConstraintP2PAngle(center, a.start, a.startAngle, incrAngle, tagId); else - return addConstraintP2PAngle(center, a.start, a.startAngle, -incr_angle, tagId); + return addConstraintP2PAngle(center, a.start, a.startAngle, -incrAngle, tagId); } int System::addConstraintPerpendicularArc2Circle(Arc &a, Point ¢er, double *radius, int tagId) { addConstraintP2PDistance(a.end, center, radius, tagId); - double incr_angle = *(a.startAngle) < *(a.endAngle) ? -M_PI/2 : M_PI/2; - double tang_angle = *a.endAngle + incr_angle; + double incrAngle = *(a.startAngle) < *(a.endAngle) ? -M_PI/2 : M_PI/2; + double tangAngle = *a.endAngle + incrAngle; double dx = *(a.end.x) - *(center.x); double dy = *(a.end.y) - *(center.y); - if (dx * cos(tang_angle) + dy * sin(tang_angle) > 0) - return addConstraintP2PAngle(center, a.end, a.endAngle, incr_angle, tagId); + if (dx * cos(tangAngle) + dy * sin(tangAngle) > 0) + return addConstraintP2PAngle(center, a.end, a.endAngle, incrAngle, tagId); else - return addConstraintP2PAngle(center, a.end, a.endAngle, -incr_angle, tagId); + return addConstraintP2PAngle(center, a.end, a.endAngle, -incrAngle, tagId); } int System::addConstraintPerpendicularArc2Arc(Arc &a1, bool reverse1, @@ -452,15 +452,15 @@ int System::addConstraintTangent(Circle &c, Arc &a, int tagId) int System::addConstraintTangentLine2Arc(Point &p1, Point &p2, Arc &a, int tagId) { addConstraintP2PCoincident(p2, a.start, tagId); - double incr_angle = *(a.startAngle) < *(a.endAngle) ? M_PI/2 : -M_PI/2; - return addConstraintP2PAngle(p1, p2, a.startAngle, incr_angle, tagId); + double incrAngle = *(a.startAngle) < *(a.endAngle) ? M_PI/2 : -M_PI/2; + return addConstraintP2PAngle(p1, p2, a.startAngle, incrAngle, tagId); } int System::addConstraintTangentArc2Line(Arc &a, Point &p1, Point &p2, int tagId) { addConstraintP2PCoincident(p1, a.end, tagId); - double incr_angle = *(a.startAngle) < *(a.endAngle) ? M_PI/2 : -M_PI/2; - return addConstraintP2PAngle(p1, p2, a.endAngle, incr_angle, tagId); + double incrAngle = *(a.startAngle) < *(a.endAngle) ? M_PI/2 : -M_PI/2; + return addConstraintP2PAngle(p1, p2, a.endAngle, incrAngle, tagId); } int System::addConstraintTangentCircle2Arc(Circle &c, Arc &a, int tagId) @@ -548,16 +548,19 @@ void System::rescaleConstraint(int id, double coeff) void System::initSolution(VEC_pD ¶ms) { + // - identifies any decoupled subsystems and partitions the original + // system into corresponding components // - Stores the current parameters in the vector "reference" // - Identifies the equality constraints tagged with ids >= 0 // and prepares a corresponding system reduction // - Organizes the rest of constraints into two subsystems for // tag ids >=0 and < 0 respectively and applies the // system reduction specified in the previous step - MAP_pD_I params_index; + MAP_pD_I pIndex; for (int i=0; i < int(params.size()); ++i) - params_index[params[i]] = i; + pIndex[params[i]] = i; + // partitioning into decoupled components Graph g; for (int i=0; i < int(params.size() + clist.size()); i++) boost::add_vertex(g); @@ -568,14 +571,14 @@ void System::initSolution(VEC_pD ¶ms) VEC_pD &cparams = c2p[*constr]; for (VEC_pD::const_iterator param=cparams.begin(); param != cparams.end(); ++param) { - MAP_pD_I::const_iterator it = params_index.find(*param); - if (it != params_index.end()) + MAP_pD_I::const_iterator it = pIndex.find(*param); + if (it != pIndex.end()) boost::add_edge(cvtid, it->second, g); } } VEC_I components(boost::num_vertices(g)); - int components_size = boost::connected_components(g, &components[0]); + int componentsSize = boost::connected_components(g, &components[0]); clearReference(); for (VEC_pD::const_iterator param=params.begin(); @@ -592,9 +595,9 @@ void System::initSolution(VEC_pD ¶ms) constr != clist.end(); ++constr) { if ((*constr)->getTag() >= 0 && (*constr)->getTypeId() == Equal) { MAP_pD_I::const_iterator it1,it2; - it1 = params_index.find((*constr)->params()[0]); - it2 = params_index.find((*constr)->params()[1]); - if (it1 != params_index.end() && it2 != params_index.end()) { + it1 = pIndex.find((*constr)->params()[0]); + it2 = pIndex.find((*constr)->params()[1]); + if (it1 != pIndex.end() && it2 != pIndex.end()) { eliminated.insert(*constr); double *p_kept = reduced_params[it1->second]; double *p_replaced = reduced_params[it2->second]; @@ -609,9 +612,9 @@ void System::initSolution(VEC_pD ¶ms) reductionmap[params[i]] = reduced_params[i]; } - std::vector< std::vector > clists0(components_size), - clists1(components_size), - clists2(components_size); + std::vector< std::vector > clists0(componentsSize), + clists1(componentsSize), + clists2(componentsSize); int i = int(params.size()); for (std::vector::const_iterator constr=clist.begin(); constr != clist.end(); ++constr, i++) { @@ -626,14 +629,14 @@ void System::initSolution(VEC_pD ¶ms) } } - std::vector< std::vector > plists(components_size); + std::vector< std::vector > plists(componentsSize); for (int i=0; i < int(params.size()); ++i) { int id = components[i]; plists[id].push_back(params[i]); } clearSubSystems(); - for (int cid=0; cid < components_size; cid++) { + for (int cid=0; cid < componentsSize; cid++) { subsyslist.push_back(std::vector(0)); if (clists0[cid].size() > 0) subsyslist[cid].push_back(new SubSystem(clists0[cid], plists[cid], reductionmap)); @@ -729,13 +732,13 @@ int System::solve_BFGS(SubSystem *subsys, bool isFine) double convergence = isFine ? XconvergenceFine : XconvergenceRough; int maxIterNumber = MaxIterations * xsize; - double diverging_lim = 1e6*err + 1e12; + double divergingLim = 1e6*err + 1e12; for (int iter=1; iter < maxIterNumber; iter++) { if (h.norm() <= convergence || err <= smallF) break; - if (err > diverging_lim || err != err) // check for diverging and NaN + if (err > divergingLim || err != err) // check for diverging and NaN break; y = grad; @@ -793,7 +796,7 @@ int System::solve_LM(SubSystem* subsys) e*=-1; int maxIterNumber = MaxIterations * xsize; - double diverging_lim = 1e6*e.squaredNorm() + 1e12; + double divergingLim = 1e6*e.squaredNorm() + 1e12; double eps=1e-10, eps1=1e-80; double tau=1e-3; @@ -807,7 +810,7 @@ int System::solve_LM(SubSystem* subsys) stop = 1; break; } - else if (err > diverging_lim || err != err) { // check for diverging and NaN + else if (err > divergingLim || err != err) { // check for diverging and NaN stop = 6; break; } @@ -937,7 +940,7 @@ int System::solve_DL(SubSystem* subsys) double fx_inf = fx.lpNorm(); int maxIterNumber = MaxIterations * xsize; - double diverging_lim = 1e6*err + 1e12; + double divergingLim = 1e6*err + 1e12; double delta=0.1; double alpha=0.; @@ -954,7 +957,7 @@ int System::solve_DL(SubSystem* subsys) stop = 2; else if (iter >= maxIterNumber) stop = 4; - else if (err > diverging_lim || err != err) { // check for diverging and NaN + else if (err > divergingLim || err != err) { // check for diverging and NaN stop = 6; } else { @@ -1107,7 +1110,7 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) double convergence = isFine ? XconvergenceFine : XconvergenceRough; int maxIterNumber = MaxIterations * xsize; - double diverging_lim = 1e6*subsysA->error() + 1e12; + double divergingLim = 1e6*subsysA->error() + 1e12; double mu = 0; lambda.setZero(); @@ -1202,7 +1205,7 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) double err = subsysA->error(); if (h.norm() <= convergence && err <= smallF) break; - if (err > diverging_lim || err != err) // check for diverging and NaN + if (err > divergingLim || err != err) // check for diverging and NaN break; } @@ -1236,11 +1239,22 @@ void System::undoSolution() resetToReference(); } -int System::diagnose(VEC_pD ¶ms, VEC_I &conflicting) +int System::diagnose(VEC_pD ¶ms, VEC_I &conflictingTags) { // Analyses the constrainess grad of the system and provides feedback - // The vector "conflicting" will hold a group of conflicting constraints - conflicting.clear(); + // The vector "conflictingTags" will hold a group of conflicting constraints + + // Hint 1: Only constraints with tag >= 0 are taken into account + // Hint 2: Constraints tagged with 0 are treated as high priority + // constraints and they are excluded from the returned + // list of conflicting constraints. Therefore, this function + // will provide no feedback about possible conflicts between + // two high priority constraints. For this reason, tagging + // constraints with 0 should be used carefully. + if (!isInit()) + return -1; + + conflictingTags.clear(); std::vector conflictingIndex; VEC_I tags; Eigen::MatrixXd J(clist.size(), params.size()); @@ -1259,39 +1273,39 @@ int System::diagnose(VEC_pD ¶ms, VEC_I &conflicting) if (J.rows() > 0) { Eigen::FullPivHouseholderQR qrJT(J.topRows(count).transpose()); Eigen::MatrixXd Q = qrJT.matrixQ (); - int params_num = qrJT.rows(); - int constr_num = qrJT.cols(); + int paramsNum = qrJT.rows(); + int constrNum = qrJT.cols(); int rank = qrJT.rank(); Eigen::MatrixXd R; - if (constr_num >= params_num) + if (constrNum >= paramsNum) R = qrJT.matrixQR().triangularView(); else - R = qrJT.matrixQR().topRows(constr_num) + R = qrJT.matrixQR().topRows(constrNum) .triangularView(); - if (constr_num > rank) { // conflicting constraints + if (constrNum > rank) { // conflicting constraints for (int i=1; i < rank; i++) { // eliminate non zeros above pivot assert(R(i,i) != 0); for (int row=0; row < i; row++) { if (R(row,i) != 0) { double coef=R(row,i)/R(i,i); - R.block(row,i+1,1,constr_num-i-1) -= coef * R.block(i,i+1,1,constr_num-i-1); + R.block(row,i+1,1,constrNum-i-1) -= coef * R.block(i,i+1,1,constrNum-i-1); R(row,i) = 0; } } } - conflictingIndex.resize(constr_num-rank); - for (int j=rank; j < constr_num; j++) { + conflictingIndex.resize(constrNum-rank); + for (int j=rank; j < constrNum; j++) { for (int row=0; row < rank; row++) { if (fabs(R(row,j)) > 1e-10) { - int orig_col = qrJT.colsPermutation().indices()[row]; - conflictingIndex[j-rank].push_back(orig_col); + int origCol = qrJT.colsPermutation().indices()[row]; + conflictingIndex[j-rank].push_back(origCol); } } - int orig_col = qrJT.colsPermutation().indices()[j]; - conflictingIndex[j-rank].push_back(orig_col); + int origCol = qrJT.colsPermutation().indices()[j]; + conflictingIndex[j-rank].push_back(origCol); } SET_I tags_set; @@ -1301,14 +1315,14 @@ int System::diagnose(VEC_pD ¶ms, VEC_I &conflicting) } } tags_set.erase(0); // exclude constraints tagged with zero - conflicting.resize(tags_set.size()); - std::copy(tags_set.begin(), tags_set.end(), conflicting.begin()); + conflictingTags.resize(tags_set.size()); + std::copy(tags_set.begin(), tags_set.end(), conflictingTags.begin()); - if (params_num == rank) // over-constrained - return params_num - constr_num; + if (paramsNum == rank) // over-constrained + return paramsNum - constrNum; } - return params_num - rank; + return paramsNum - rank; } return params.size(); } diff --git a/src/Mod/Sketcher/App/freegcs/GCS.h b/src/Mod/Sketcher/App/freegcs/GCS.h index f17f585c9..5cd1466ea 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.h +++ b/src/Mod/Sketcher/App/freegcs/GCS.h @@ -54,11 +54,10 @@ namespace GCS std::map c2p; // constraint to parameter adjacency list std::map > p2c; // parameter to constraint adjacency list - // each row of subsyslist contains 3 subsystems. + // each row of subsyslist contains up to 3 subsystems. // the first one has the highest priority, always used as the primary subsystem - // the second one is normally used as secondary subsystem, it is considered primary - // only if the first one is missing - // the rhird one has the lowest priority, always used as secondary system + // the second one is used as secondary subsystem + // the third one is used as secondary system and serves as a preconditioner std::vector< std::vector > subsyslist; void clearSubSystems(); @@ -90,7 +89,7 @@ namespace GCS double *difference, int tagId=0); int addConstraintP2PDistance(Point &p1, Point &p2, double *distance, int tagId=0); int addConstraintP2PAngle(Point &p1, Point &p2, double *angle, - double incr_angle, int tagId=0); + double incrAngle, int tagId=0); int addConstraintP2PAngle(Point &p1, Point &p2, double *angle, int tagId=0); int addConstraintP2LDistance(Point &p, Line &l, double *distance, int tagId=0); int addConstraintPointOnLine(Point &p, Line &l, int tagId=0); @@ -160,7 +159,7 @@ namespace GCS bool isInit() const { return init; } - int diagnose(VEC_pD ¶ms, VEC_I &conflicting); + int diagnose(VEC_pD ¶ms, VEC_I &conflictingTags); }; /////////////////////////////////////// From c9fa928b8029c550a65345e708244c7ca6f19326 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 5 May 2012 16:11:41 +0200 Subject: [PATCH 136/517] 0000646: Expose BRepOffsetAPI_MakePipeShell to python --- src/Mod/Part/App/AppPart.cpp | 6 + .../App/BRepOffsetAPI_MakePipeShellPy.xml | 107 ++++++++ .../App/BRepOffsetAPI_MakePipeShellPyImp.cpp | 248 ++++++++++++++++++ src/Mod/Part/App/CMakeLists.txt | 3 + src/Mod/Part/App/Makefile.am | 4 + 5 files changed, 368 insertions(+) create mode 100644 src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPy.xml create mode 100644 src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 48eba5343..875f04cd4 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -74,6 +74,7 @@ #include "SurfaceOfExtrusionPy.h" #include "SurfaceOfRevolutionPy.h" #include "ToroidPy.h" +#include "BRepOffsetAPI_MakePipeShellPy.h" #include "PartFeaturePy.h" #include "PropertyGeometryList.h" @@ -125,6 +126,11 @@ void PartExport initPart() Base::Interpreter().addType(&Part::PartFeaturePy ::Type,partModule,"Feature"); + PyObject* brepModule = Py_InitModule3("BRepOffsetAPI", 0, "BrepOffsetAPI"); + Py_INCREF(brepModule); + PyModule_AddObject(partModule, "BRepOffsetAPI", brepModule); + Base::Interpreter().addType(&Part::BRepOffsetAPI_MakePipeShellPy::Type,brepModule,"MakePipeShell"); + Part::TopoShape ::init(); Part::PropertyPartShape ::init(); Part::PropertyGeometryList ::init(); diff --git a/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPy.xml b/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPy.xml new file mode 100644 index 000000000..1f375a437 --- /dev/null +++ b/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPy.xml @@ -0,0 +1,107 @@ + + + + + + Describes a portion of a circle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0: BRepBuilderAPI_Transformed + 1: BRepBuilderAPI_RightCorner + 2: BRepBuilderAPI_RoundCorner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp b/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp new file mode 100644 index 000000000..8e587c860 --- /dev/null +++ b/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp @@ -0,0 +1,248 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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" +#ifndef _PreComp_ +# include +# include +# include +# include +# include +# include +#endif + +#include "TopoShapePy.h" +#include "BRepOffsetAPI_MakePipeShellPy.h" +#include "BRepOffsetAPI_MakePipeShellPy.cpp" +#include "Tools.h" +#include +#include + +using namespace Part; + +PyObject *BRepOffsetAPI_MakePipeShellPy::PyMake(struct _typeobject *, PyObject *args, PyObject *) // Python wrapper +{ + // create a new instance of BRepOffsetAPI_MakePipeShellPy and the Twin object + PyObject* obj; + if (!PyArg_ParseTuple(args, "O!",&(TopoShapePy::Type),&obj)) + return 0; + const TopoDS_Shape& wire = static_cast(obj)->getTopoShapePtr()->_Shape; + if (!wire.IsNull() && wire.ShapeType() == TopAbs_WIRE) { + return new BRepOffsetAPI_MakePipeShellPy(new BRepOffsetAPI_MakePipeShell(TopoDS::Wire(wire))); + } + + PyErr_SetString(PyExc_Exception, "A valid wire is needed as argument"); + return 0; +} + +// constructor method +int BRepOffsetAPI_MakePipeShellPy::PyInit(PyObject* /*args*/, PyObject* /*kwd*/) +{ + return 0; +} + +// returns a string which represents the object e.g. when printed in python +std::string BRepOffsetAPI_MakePipeShellPy::representation(void) const +{ + return std::string(""); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setFrenetMode(PyObject *args) +{ + PyObject *obj; + if (!PyArg_ParseTuple(args, "O!",&PyBool_Type,&obj)) + return 0; + this->getBRepOffsetAPI_MakePipeShellPtr()->SetMode(obj==Py_True); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setTrihedronMode(PyObject *args) +{ + PyObject *pnt, *dir; + if (!PyArg_ParseTuple(args, "O!O!",&Base::VectorPy::Type,&pnt + ,&Base::VectorPy::Type,&dir)) + return 0; + gp_Pnt p = Base::convertTo(Py::Vector(pnt,false).toVector()); + gp_Dir d = Base::convertTo(Py::Vector(dir,false).toVector()); + this->getBRepOffsetAPI_MakePipeShellPtr()->SetMode(gp_Ax2(p,d)); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setBiNormalMode(PyObject *args) +{ + PyObject *dir; + if (!PyArg_ParseTuple(args, "O!",&Base::VectorPy::Type,&dir)) + return 0; + gp_Dir d = Base::convertTo(Py::Vector(dir,false).toVector()); + this->getBRepOffsetAPI_MakePipeShellPtr()->SetMode(d); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setSpineSupport(PyObject *args) +{ + PyObject *shape; + if (!PyArg_ParseTuple(args, "O!",&Part::TopoShapePy::Type,&shape)) + return 0; + const TopoDS_Shape& s = static_cast(shape)->getTopoShapePtr()->_Shape; + Standard_Boolean ok = this->getBRepOffsetAPI_MakePipeShellPtr()->SetMode(s); + return Py::new_reference_to(Py::Boolean(ok ? true : false)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setAuxiliarySpine(PyObject *args) +{ + PyObject *spine, *curv, *keep; + if (!PyArg_ParseTuple(args, "O!O!O!",&Part::TopoShapePy::Type,&spine + ,&PyBool_Type,&curv + ,&PyBool_Type,&keep)) + return 0; + const TopoDS_Shape& s = static_cast(spine)->getTopoShapePtr()->_Shape; + if (s.IsNull() || s.ShapeType() != TopAbs_WIRE) { + PyErr_SetString(PyExc_TypeError, "spine is not a wire"); + return 0; + } + this->getBRepOffsetAPI_MakePipeShellPtr()->SetMode(TopoDS::Wire(s), curv==Py_True, keep==Py_True); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::add(PyObject *args) +{ + PyObject *prof, *curv=0, *keep=0; + if (!PyArg_ParseTuple(args, "O!|O!O!",&Part::TopoShapePy::Type,&prof + ,&PyBool_Type,&curv + ,&PyBool_Type,&keep)) + return 0; + const TopoDS_Shape& s = static_cast(prof)->getTopoShapePtr()->_Shape; + this->getBRepOffsetAPI_MakePipeShellPtr()->Add(s, curv==Py_True, keep==Py_True); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::remove(PyObject *args) +{ + PyObject *prof; + if (!PyArg_ParseTuple(args, "O!",&Part::TopoShapePy::Type,&prof)) + return 0; + const TopoDS_Shape& s = static_cast(prof)->getTopoShapePtr()->_Shape; + this->getBRepOffsetAPI_MakePipeShellPtr()->Delete(s); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::isReady(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + Standard_Boolean ok = this->getBRepOffsetAPI_MakePipeShellPtr()->IsReady(); + return Py::new_reference_to(Py::Boolean(ok ? true : false)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::getStatus(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + Standard_Integer val = this->getBRepOffsetAPI_MakePipeShellPtr()->GetStatus(); + return Py::new_reference_to(Py::Int(val)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::makeSolid(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + Standard_Boolean ok = this->getBRepOffsetAPI_MakePipeShellPtr()->MakeSolid(); + return Py::new_reference_to(Py::Boolean(ok ? true : false)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::build(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + this->getBRepOffsetAPI_MakePipeShellPtr()->Build(); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::shape(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + const TopoDS_Shape& shape = this->getBRepOffsetAPI_MakePipeShellPtr()->Shape(); + return new TopoShapePy(new TopoShape(shape)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::firstShape(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + TopoDS_Shape shape = this->getBRepOffsetAPI_MakePipeShellPtr()->FirstShape(); + return new TopoShapePy(new TopoShape(shape)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::lastShape(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + TopoDS_Shape shape = this->getBRepOffsetAPI_MakePipeShellPtr()->LastShape(); + return new TopoShapePy(new TopoShape(shape)); +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::generated(PyObject *args) +{ + //PyObject *shape; + //if (!PyArg_ParseTuple(args, "O!",&Part::TopoShapePy::Type,&shape)) + // return 0; + //const TopoDS_Shape& s = static_cast(shape)->getTopoShapePtr()->_Shape; + //const TopTools_ListOfShape& list = this->getBRepOffsetAPI_MakePipeShellPtr()->Generated(s); + + //Py::List shapes; + //for (int i=1; i<=list.Extent(); i++) { + // const TopoDS_Shape& s = list. + //} + //return Py::new_reference_to(shapes); + PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); + return 0; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setTolerance(PyObject *args) +{ + double tol3d, boundTol, tolAngular; + if (!PyArg_ParseTuple(args, "ddd",&tol3d,&boundTol,&tolAngular)) + return 0; + this->getBRepOffsetAPI_MakePipeShellPtr()->SetTolerance(tol3d, boundTol, tolAngular); + Py_Return; +} + +PyObject* BRepOffsetAPI_MakePipeShellPy::setTransitionMode(PyObject *args) +{ + int mode; + if (!PyArg_ParseTuple(args, "i",&mode)) + return 0; + this->getBRepOffsetAPI_MakePipeShellPtr()->SetTransitionMode(BRepBuilderAPI_TransitionMode(mode)); + Py_Return; +} + +PyObject *BRepOffsetAPI_MakePipeShellPy::getCustomAttributes(const char* attr) const +{ + return 0; +} + +int BRepOffsetAPI_MakePipeShellPy::setCustomAttributes(const char* attr, PyObject *obj) +{ + return 0; +} diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index bd0cb791a..20a33407b 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -61,6 +61,7 @@ generate_from_xml(TopoShapeShellPy) generate_from_xml(TopoShapeSolidPy) generate_from_xml(TopoShapeVertexPy) generate_from_xml(TopoShapeWirePy) +generate_from_xml(BRepOffsetAPI_MakePipeShellPy) SET(Features_SRCS FeaturePartBoolean.cpp @@ -203,6 +204,8 @@ SET(Python_SRCS TopoShapeVertexPyImp.cpp TopoShapeWirePy.xml TopoShapeWirePyImp.cpp + BRepOffsetAPI_MakePipeShellPy.xml + BRepOffsetAPI_MakePipeShellPyImp.cpp ) SOURCE_GROUP("Python" FILES ${Python_SRCS}) diff --git a/src/Mod/Part/App/Makefile.am b/src/Mod/Part/App/Makefile.am index 91c711564..778427814 100644 --- a/src/Mod/Part/App/Makefile.am +++ b/src/Mod/Part/App/Makefile.am @@ -4,6 +4,7 @@ lib_LTLIBRARIES=libPart.la Part.la BUILT_SOURCES=\ ArcPy.cpp \ ArcOfCirclePy.cpp \ + BRepOffsetAPI_MakePipeShellPy.cpp \ CirclePy.cpp \ EllipsePy.cpp \ HyperbolaPy.cpp \ @@ -42,6 +43,7 @@ BUILT_SOURCES=\ libPart_la_BUILT=\ ArcPy.h \ ArcOfCirclePy.h \ + BRepOffsetAPI_MakePipeShellPy.h \ CirclePy.h \ EllipsePy.h \ HyperbolaPy.h \ @@ -81,6 +83,7 @@ libPart_la_SOURCES=\ AppPartPy.cpp \ ArcPyImp.cpp \ ArcOfCirclePyImp.cpp \ + BRepOffsetAPI_MakePipeShellPyImp.cpp \ CirclePyImp.cpp \ CrossSection.cpp \ EllipsePyImp.cpp \ @@ -260,6 +263,7 @@ EXTRA_DIST = \ OpenCascadeAll.h \ ArcPy.xml \ ArcOfCirclePy.xml \ + BRepOffsetAPI_MakePipeShellPy.xml \ CirclePy.xml \ EllipsePy.xml \ HyperbolaPy.xml \ From 4b1c918f2d90d6f1ac641874b8dbe0e277a0ad69 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 5 May 2012 16:19:39 +0200 Subject: [PATCH 137/517] 0000646: Expose BRepOffsetAPI_MakePipeShell to python --- .../App/BRepOffsetAPI_MakePipeShellPyImp.cpp | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp b/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp index 8e587c860..2017e86d2 100644 --- a/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp +++ b/src/Mod/Part/App/BRepOffsetAPI_MakePipeShellPyImp.cpp @@ -29,6 +29,7 @@ # include # include # include +# include #endif #include "TopoShapePy.h" @@ -204,19 +205,19 @@ PyObject* BRepOffsetAPI_MakePipeShellPy::lastShape(PyObject *args) PyObject* BRepOffsetAPI_MakePipeShellPy::generated(PyObject *args) { - //PyObject *shape; - //if (!PyArg_ParseTuple(args, "O!",&Part::TopoShapePy::Type,&shape)) - // return 0; - //const TopoDS_Shape& s = static_cast(shape)->getTopoShapePtr()->_Shape; - //const TopTools_ListOfShape& list = this->getBRepOffsetAPI_MakePipeShellPtr()->Generated(s); + PyObject *shape; + if (!PyArg_ParseTuple(args, "O!",&Part::TopoShapePy::Type,&shape)) + return 0; + const TopoDS_Shape& s = static_cast(shape)->getTopoShapePtr()->_Shape; + const TopTools_ListOfShape& list = this->getBRepOffsetAPI_MakePipeShellPtr()->Generated(s); - //Py::List shapes; - //for (int i=1; i<=list.Extent(); i++) { - // const TopoDS_Shape& s = list. - //} - //return Py::new_reference_to(shapes); - PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); - return 0; + Py::List shapes; + TopTools_ListIteratorOfListOfShape it; + for (it.Initialize(list); it.More(); it.Next()) { + const TopoDS_Shape& s = it.Value(); + shapes.append(Py::asObject(new TopoShapePy(new TopoShape(s)))); + } + return Py::new_reference_to(shapes); } PyObject* BRepOffsetAPI_MakePipeShellPy::setTolerance(PyObject *args) From 2ded296857abb751619c64a98457619ea8d07535 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 7 May 2012 11:18:10 +0200 Subject: [PATCH 138/517] 0000697: Text boxes to set dimension constraints insert a space between thousands and hundreds digits that makes the data invalid. --- src/Mod/Sketcher/Gui/EditDatumDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp index 8fe503c37..58f1f027a 100644 --- a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp +++ b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp @@ -103,7 +103,7 @@ void EditDatumDialog::exec(bool atCursor) if (dlg.exec()) { bool ok; - double newDatum = ui_ins_datum.lineEdit->text().toDouble(&ok); + double newDatum = QLocale::system().toDouble(ui_ins_datum.lineEdit->text(), &ok); if (ok) { if (Constr->Type == Sketcher::Angle) newDatum = Base::toRadians(newDatum); From 3b2dc816ce6b4f7d6058e3d1118e05bc07165ccd Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 7 May 2012 11:40:30 +0200 Subject: [PATCH 139/517] 0000689: create Chamfers/Fillets from Face --- src/Mod/PartDesign/Gui/Command.cpp | 347 ++++++++++++++++++++++------- 1 file changed, 271 insertions(+), 76 deletions(-) diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index ddf324084..c5fa4d2ad 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -20,24 +20,36 @@ * * ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include -# include -#endif - -#include -#include -#include -#include -#include -#include - -#include - - -using namespace std; + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + + +using namespace std; //=========================================================================== // Part_Pad @@ -331,35 +343,126 @@ CmdPartDesignFillet::CmdPartDesignFillet() sStatusTip = sToolTipText; sPixmap = "Part_Fillet"; } - -void CmdPartDesignFillet::activated(int iMsg) -{ - std::vector selection = getSelection().getSelectionEx(); - - if (selection.size() != 1) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select an edge, face or body. Only one body is allowed.")); - return; - } - - if (!selection[0].isObjectTypeOf(Part::Feature::getClassTypeId())){ - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong object type"), - QObject::tr("Fillet works only on parts")); - return; - } - std::string SelString = selection[0].getAsPropertyLinkSubString(); - std::string FeatName = getUniqueObjectName("Fillet"); - - openCommand("Make Fillet"); - doCommand(Doc,"App.activeDocument().addObject(\"PartDesign::Fillet\",\"%s\")",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Base = %s",FeatName.c_str(),SelString.c_str()); - doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",selection[0].getFeatName()); - doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); - - copyVisual(FeatName.c_str(), "ShapeColor", selection[0].getFeatName()); - copyVisual(FeatName.c_str(), "LineColor", selection[0].getFeatName()); - copyVisual(FeatName.c_str(), "PointColor", selection[0].getFeatName()); -} + +void CmdPartDesignFillet::activated(int iMsg) +{ + std::vector selection = getSelection().getSelectionEx(); + + if (selection.size() != 1) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Select an edge, face or body. Only one body is allowed.")); + return; + } + + if (!selection[0].isObjectTypeOf(Part::Feature::getClassTypeId())){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong object type"), + QObject::tr("Fillet works only on parts")); + return; + } + + Part::Feature *base = static_cast(selection[0].getObject()); + + const Part::TopoShape& TopShape = base->Shape.getShape(); + if (TopShape._Shape.IsNull()){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Shape of selected Part is empty")); + return; + } + + TopTools_IndexedMapOfShape mapOfEdges; + TopTools_IndexedDataMapOfShapeListOfShape mapEdgeFace; + TopExp::MapShapesAndAncestors(TopShape._Shape, TopAbs_EDGE, TopAbs_FACE, mapEdgeFace); + TopExp::MapShapes(TopShape._Shape, TopAbs_EDGE, mapOfEdges); + + std::vector SubNames = std::vector(selection[0].getSubNames()); + + int i = 0; + + while(i < SubNames.size()) + { + std::string aSubName = static_cast(SubNames.at(i)); + + if (aSubName.size() > 4 && aSubName.substr(0,4) == "Edge") { + TopoDS_Edge edge = TopoDS::Edge(TopShape.getSubShape(aSubName.c_str())); + const TopTools_ListOfShape& los = mapEdgeFace.FindFromKey(edge); + + if(los.Extent() != 2) + { + SubNames.erase(SubNames.begin()+i); + continue; + } + + const TopoDS_Shape& face1 = los.First(); + const TopoDS_Shape& face2 = los.Last(); + GeomAbs_Shape cont = BRep_Tool::Continuity(TopoDS::Edge(edge), + TopoDS::Face(face1), + TopoDS::Face(face2)); + if (cont != GeomAbs_C0) { + SubNames.erase(SubNames.begin()+i); + continue; + } + + i++; + } + else if(aSubName.size() > 4 && aSubName.substr(0,4) == "Face") { + TopoDS_Face face = TopoDS::Face(TopShape.getSubShape(aSubName.c_str())); + + TopTools_IndexedMapOfShape mapOfFaces; + TopExp::MapShapes(face, TopAbs_EDGE, mapOfFaces); + + for(int j = 1; j <= mapOfFaces.Extent(); ++j) { + TopoDS_Edge edge = TopoDS::Edge(mapOfFaces.FindKey(j)); + + int id = mapOfEdges.FindIndex(edge); + + std::stringstream buf; + buf << "Edge"; + buf << id; + + if(std::find(SubNames.begin(),SubNames.end(),buf.str()) == SubNames.end()) + { + SubNames.push_back(buf.str()); + } + + } + + SubNames.erase(SubNames.begin()+i); + } + } + + if(SubNames.size() == 0){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("No Fillet possilbe on seleced faces/edges")); + return; + } + + std::string SelString; + SelString += "(App."; + SelString += "ActiveDocument";//getObject()->getDocument()->getName(); + SelString += "."; + SelString += selection[0].getFeatName(); + SelString += ",["; + for(std::vector::const_iterator it = SubNames.begin();it!=SubNames.end();++it){ + SelString += "\""; + SelString += *it; + SelString += "\""; + if(it != --SubNames.end()) + SelString += ","; + } + SelString += "])"; + + std::string FeatName = getUniqueObjectName("Fillet"); + + openCommand("Make Fillet"); + doCommand(Doc,"App.activeDocument().addObject(\"PartDesign::Fillet\",\"%s\")",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Base = %s",FeatName.c_str(),SelString.c_str()); + doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",selection[0].getFeatName()); + doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); + + copyVisual(FeatName.c_str(), "ShapeColor", selection[0].getFeatName()); + copyVisual(FeatName.c_str(), "LineColor", selection[0].getFeatName()); + copyVisual(FeatName.c_str(), "PointColor", selection[0].getFeatName()); +} bool CmdPartDesignFillet::isActive(void) { @@ -382,35 +485,127 @@ CmdPartDesignChamfer::CmdPartDesignChamfer() sStatusTip = sToolTipText; sPixmap = "Part_Chamfer"; } - -void CmdPartDesignChamfer::activated(int iMsg) -{ - std::vector selection = getSelection().getSelectionEx(); - - if (selection.size() != 1) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select an edge, face or body. Only one body is allowed.")); - return; - } - - if (!selection[0].isObjectTypeOf(Part::Feature::getClassTypeId())){ - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong object type"), - QObject::tr("Chamfer works only on parts")); - return; - } - std::string SelString = selection[0].getAsPropertyLinkSubString(); - std::string FeatName = getUniqueObjectName("Chamfer"); - - openCommand("Make Chamfer"); - doCommand(Doc,"App.activeDocument().addObject(\"PartDesign::Chamfer\",\"%s\")",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Base = %s",FeatName.c_str(),SelString.c_str()); - doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",selection[0].getFeatName()); - doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); - - copyVisual(FeatName.c_str(), "ShapeColor", selection[0].getFeatName()); - copyVisual(FeatName.c_str(), "LineColor", selection[0].getFeatName()); - copyVisual(FeatName.c_str(), "PointColor", selection[0].getFeatName()); -} + +void CmdPartDesignChamfer::activated(int iMsg) +{ + std::vector selection = getSelection().getSelectionEx(); + + if (selection.size() != 1) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Select an edge, face or body. Only one body is allowed.")); + return; + } + + if (!selection[0].isObjectTypeOf(Part::Feature::getClassTypeId())){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong object type"), + QObject::tr("Chamfer works only on parts")); + return; + } + + Part::Feature *base = static_cast(selection[0].getObject()); + + const Part::TopoShape& TopShape = base->Shape.getShape(); + + if (TopShape._Shape.IsNull()){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Shape of selected part is empty")); + return; + } + + TopTools_IndexedMapOfShape mapOfEdges; + TopTools_IndexedDataMapOfShapeListOfShape mapEdgeFace; + TopExp::MapShapesAndAncestors(TopShape._Shape, TopAbs_EDGE, TopAbs_FACE, mapEdgeFace); + TopExp::MapShapes(TopShape._Shape, TopAbs_EDGE, mapOfEdges); + + std::vector SubNames = std::vector(selection[0].getSubNames()); + + int i = 0; + + while(i < SubNames.size()) + { + std::string aSubName = static_cast(SubNames.at(i)); + + if (aSubName.size() > 4 && aSubName.substr(0,4) == "Edge") { + TopoDS_Edge edge = TopoDS::Edge(TopShape.getSubShape(aSubName.c_str())); + const TopTools_ListOfShape& los = mapEdgeFace.FindFromKey(edge); + + if(los.Extent() != 2) + { + SubNames.erase(SubNames.begin()+i); + continue; + } + + const TopoDS_Shape& face1 = los.First(); + const TopoDS_Shape& face2 = los.Last(); + GeomAbs_Shape cont = BRep_Tool::Continuity(TopoDS::Edge(edge), + TopoDS::Face(face1), + TopoDS::Face(face2)); + if (cont != GeomAbs_C0) { + SubNames.erase(SubNames.begin()+i); + continue; + } + + i++; + } + else if(aSubName.size() > 4 && aSubName.substr(0,4) == "Face") { + TopoDS_Face face = TopoDS::Face(TopShape.getSubShape(aSubName.c_str())); + + TopTools_IndexedMapOfShape mapOfFaces; + TopExp::MapShapes(face, TopAbs_EDGE, mapOfFaces); + + for(int j = 1; j <= mapOfFaces.Extent(); ++j) { + TopoDS_Edge edge = TopoDS::Edge(mapOfFaces.FindKey(j)); + + int id = mapOfEdges.FindIndex(edge); + + std::stringstream buf; + buf << "Edge"; + buf << id; + + if(std::find(SubNames.begin(),SubNames.end(),buf.str()) == SubNames.end()) + { + SubNames.push_back(buf.str()); + } + + } + + SubNames.erase(SubNames.begin()+i); + } + } + + if(SubNames.size() == 0){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("No Fillet possilbe on seleced faces/edges")); + return; + } + + std::string SelString; + SelString += "(App."; + SelString += "ActiveDocument";//getObject()->getDocument()->getName(); + SelString += "."; + SelString += selection[0].getFeatName(); + SelString += ",["; + for(std::vector::const_iterator it = SubNames.begin();it!=SubNames.end();++it){ + SelString += "\""; + SelString += *it; + SelString += "\""; + if(it != --SubNames.end()) + SelString += ","; + } + SelString += "])"; + + std::string FeatName = getUniqueObjectName("Chamfer"); + + openCommand("Make Chamfer"); + doCommand(Doc,"App.activeDocument().addObject(\"PartDesign::Chamfer\",\"%s\")",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Base = %s",FeatName.c_str(),SelString.c_str()); + doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",selection[0].getFeatName()); + doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); + + copyVisual(FeatName.c_str(), "ShapeColor", selection[0].getFeatName()); + copyVisual(FeatName.c_str(), "LineColor", selection[0].getFeatName()); + copyVisual(FeatName.c_str(), "PointColor", selection[0].getFeatName()); +} bool CmdPartDesignChamfer::isActive(void) { From 612219ced85ff9f3bd188bcbc760ddf769f2632f Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 9 May 2012 12:54:01 -0300 Subject: [PATCH 140/517] Fixed python online documentation (patch by msocorcim) --- src/Gui/OnlineDocumentation.cpp | 14 ++- src/Mod/Draft/Makefile.am | 163 ++++++++++++++++++-------------- 2 files changed, 101 insertions(+), 76 deletions(-) diff --git a/src/Gui/OnlineDocumentation.cpp b/src/Gui/OnlineDocumentation.cpp index 9f8032b89..985b9c0d1 100644 --- a/src/Gui/OnlineDocumentation.cpp +++ b/src/Gui/OnlineDocumentation.cpp @@ -232,9 +232,10 @@ QByteArray PythonOnlineHelp::loadResource(const QString& filename) const " return self.bigsection(dir, '#ffffff', '#ee77aa', contents)\n" "\n" "pydoc.html=FreeCADDoc()\n" + "title='FreeCAD Python Modules Index'\n" "\n" - "heading = pydoc.html.heading(\n" - "'Python: Index of Modules',\n" + "heading = pydoc.html.heading(" + "'Python: Index of Modules'," "'#ffffff', '#7799ee')\n" "def bltinlink(name):\n" " return '%s' % (name, name)\n" @@ -257,13 +258,16 @@ QByteArray PythonOnlineHelp::loadResource(const QString& filename) const " indices.append(ret)\n" "contents = heading + string.join(indices) + '''

\n" "\n" - "pydoc by Ka-Ping Yee <ping@lfw.org>'''\n"; + "pydoc by Ka-Ping Yee <ping@lfw.org>'''\n" + "htmldocument=pydoc.html.page(title,contents)\n"; PyObject* result = PyRun_String(cmd.constData(), Py_file_input, dict, dict); if (result) { Py_DECREF(result); - result = PyDict_GetItemString(dict, "contents"); + result = PyDict_GetItemString(dict, "htmldocument"); const char* contents = PyString_AsString(result); + res.append("HTTP/1.0 200 OK\n"); + res.append("Content-type: text/html\n"); res.append(contents); return res; } @@ -293,6 +297,8 @@ QByteArray PythonOnlineHelp::loadResource(const QString& filename) const Py_DECREF(result); result = PyDict_GetItemString(dict, "page"); const char* page = PyString_AsString(result); + res.append("HTTP/1.0 200 OK\n"); + res.append("Content-type: text/html\n"); res.append(page); } else { diff --git a/src/Mod/Draft/Makefile.am b/src/Mod/Draft/Makefile.am index fef1303c4..2502ec4d2 100644 --- a/src/Mod/Draft/Makefile.am +++ b/src/Mod/Draft/Makefile.am @@ -39,78 +39,97 @@ EXTRA_DIST = \ CMakeLists.txt \ draft.dox \ Resources/Draft.qrc \ - Resources/translations/Draft_af.ts \ - Resources/translations/Draft_af.qm \ - Resources/translations/Draft_de.ts \ - Resources/translations/Draft_de.qm \ - Resources/translations/Draft_es.ts \ - Resources/translations/Draft_es.qm \ - Resources/translations/Draft_fi.ts \ - Resources/translations/Draft_fi.qm \ - Resources/translations/Draft_fr.ts \ - Resources/translations/Draft_fr.qm \ - Resources/translations/Draft_hr.ts \ - Resources/translations/Draft_hr.qm \ - Resources/translations/Draft_it.ts \ - Resources/translations/Draft_it.qm \ - Resources/translations/Draft_nl.ts \ - Resources/translations/Draft_nl.qm \ - Resources/translations/Draft_no.ts \ - Resources/translations/Draft_no.qm \ - Resources/translations/Draft_pl.ts \ - Resources/translations/Draft_pl.qm \ - Resources/translations/Draft_pt.ts \ - Resources/translations/Draft_pt.qm \ - Resources/translations/Draft_ru.ts \ - Resources/translations/Draft_ru.qm \ - Resources/translations/Draft_se.ts \ - Resources/translations/Draft_se.qm \ - Resources/translations/Draft_uk.ts \ - Resources/translations/Draft_uk.qm \ - Resources/translations/Draft_zh.ts \ - Resources/translations/Draft_zh.qm \ - Resources/icons/preferences-draft.svg \ - Resources/icons/Draft_AddPoint.svg \ - Resources/icons/Draft_AddToGroup.svg \ - Resources/icons/Draft_Apply.svg \ - Resources/icons/Draft_Arc.svg \ - Resources/icons/Draft_BSpline.svg \ - Resources/icons/Draft_Circle.svg \ - Resources/icons/Draft_Cursor.svg \ - Resources/icons/Draft_DelPoint.svg \ - Resources/icons/Draft_Dimension.svg \ - Resources/icons/Draft_Dot.svg \ - Resources/icons/Draft_Downgrade.svg \ - Resources/icons/Draft_Drawing.svg \ - Resources/icons/Draft_Edit.svg \ - Resources/icons/Draft_Finish.svg \ - Resources/icons/Draft_Line.svg \ - Resources/icons/Draft_Lock.svg \ - Resources/icons/Draft_Macro.svg \ - Resources/icons/Draft_Move.svg \ - Resources/icons/Draft_Offset.svg \ - Resources/icons/Draft_Point.svg \ - Resources/icons/Draft_Polygon.svg \ - Resources/icons/Draft_Rectangle.svg \ - Resources/icons/Draft_Rotate.svg \ - Resources/icons/Draft_Scale.svg \ - Resources/icons/Draft_SelectGroup.svg \ - Resources/icons/Draft_SelectPlane.svg \ - Resources/icons/Draft_SwitchMode.svg \ - Resources/icons/Draft_Text.svg \ - Resources/icons/Draft_Trimex.svg \ - Resources/icons/Draft_Upgrade.svg \ - Resources/icons/Draft_Wire.svg \ - Resources/icons/Draft_Wipe.svg \ - Resources/icons/Draft_WireToBSpline.svg \ - Resources/icons/Draft_Construction.svg \ - Resources/icons/Draft_Draft.svg \ Resources/icons/Draft_2DShapeView.svg \ + Resources/icons/Draft_AddPoint.svg \ + Resources/icons/Draft_AddToGroup.svg \ + Resources/icons/Draft_Apply.svg \ + Resources/icons/Draft_Arc.svg \ + Resources/icons/Draft_Array.svg \ + Resources/icons/Draft_BSpline.svg \ + Resources/icons/Draft_Circle.svg \ + Resources/icons/Draft_Clone.svg \ + Resources/icons/Draft_Construction.svg \ Resources/icons/Draft_Cursor.svg \ - Resources/patterns/concrete.svg \ - Resources/patterns/cross.svg \ - Resources/patterns/line.svg \ - Resources/patterns/simple.svg \ - Resources/patterns/square.svg \ + Resources/icons/Draft_DelPoint.svg \ + Resources/icons/Draft_Dimension.svg \ + Resources/icons/Draft_Dot.svg \ + Resources/icons/Draft_Downgrade.svg \ + Resources/icons/Draft_Draft2Sketch.svg \ + Resources/icons/Draft_Draft.svg \ + Resources/icons/Draft_Drawing.svg \ + Resources/icons/Draft_Edit.svg \ + Resources/icons/Draft_Finish.svg \ + Resources/icons/Draft_Line.svg \ + Resources/icons/Draft_Lock.svg \ + Resources/icons/Draft_Macro.svg \ + Resources/icons/Draft_Move.svg \ + Resources/icons/Draft_Offset.svg \ + Resources/icons/Draft_Point.svg \ + Resources/icons/Draft_Polygon.svg \ + Resources/icons/Draft_Rectangle.svg \ + Resources/icons/Draft_Rotate.svg \ + Resources/icons/Draft_Scale.svg \ + Resources/icons/Draft_SelectGroup.svg \ + Resources/icons/Draft_SelectPlane.svg \ + Resources/icons/Draft_SwitchMode.svg \ + Resources/icons/Draft_Text.svg \ + Resources/icons/Draft_Trimex.svg \ + Resources/icons/Draft_Upgrade.svg \ + Resources/icons/Draft_Wipe.svg \ + Resources/icons/Draft_Wire.svg \ + Resources/icons/Draft_WireToBSpline.svg \ + Resources/icons/preferences-draft.svg \ + Resources/icons/Snap_Angle.svg \ + Resources/icons/Snap_Center.svg \ + Resources/icons/Snap_Endpoint.svg \ + Resources/icons/Snap_Extension.svg \ + Resources/icons/Snap_Grid.svg \ + Resources/icons/Snap_Intersection.svg \ + Resources/icons/Snap_Lock.svg \ + Resources/icons/Snap_Midpoint.svg \ + Resources/icons/Snap_Near.svg \ + Resources/icons/Snap_Ortho.svg \ + Resources/icons/Snap_Parallel.svg \ + Resources/icons/Snap_Perpendicular.svg \ + Resources/patterns/concrete.svg \ + Resources/patterns/cross.svg \ + Resources/patterns/line.svg \ + Resources/patterns/simple.svg \ + Resources/patterns/square.svg \ + Resources/translations/Draft_af.qm \ + Resources/translations/Draft_af.ts \ + Resources/translations/Draft_de.qm \ + Resources/translations/Draft_de.ts \ + Resources/translations/Draft_es.qm \ + Resources/translations/Draft_es.ts \ + Resources/translations/Draft_fi.qm \ + Resources/translations/Draft_fi.ts \ + Resources/translations/Draft_fr.qm \ + Resources/translations/Draft_fr.ts \ + Resources/translations/Draft_hr.qm \ + Resources/translations/Draft_hr.ts \ + Resources/translations/Draft_hu.qm \ + Resources/translations/Draft_hu.ts \ + Resources/translations/Draft_it.qm \ + Resources/translations/Draft_it.ts \ + Resources/translations/Draft_ja.qm \ + Resources/translations/Draft_ja.ts \ + Resources/translations/Draft_nl.qm \ + Resources/translations/Draft_nl.ts \ + Resources/translations/Draft_no.qm \ + Resources/translations/Draft_no.ts \ + Resources/translations/Draft_pl.qm \ + Resources/translations/Draft_pl.ts \ + Resources/translations/Draft_pt.qm \ + Resources/translations/Draft_pt.ts \ + Resources/translations/Draft_ru.qm \ + Resources/translations/Draft_ru.ts \ + Resources/translations/Draft_se.qm \ + Resources/translations/Draft_se.ts \ + Resources/translations/Draft_uk.qm \ + Resources/translations/Draft_uk.ts \ + Resources/translations/Draft_zh.qm \ + Resources/translations/Draft_zh.ts \ Resources/ui/userprefs-base.ui \ - Resources/ui/userprefs-import.ui + Resources/ui/userprefs-import.ui + From f88d724b1ee21505a2b25b4941318d63e8f37017 Mon Sep 17 00:00:00 2001 From: msocorcim Date: Wed, 9 May 2012 16:47:56 -0400 Subject: [PATCH 141/517] fix parsing "git branch" response so currently checked out branch is returned --- src/Tools/SubWCRev.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Tools/SubWCRev.py b/src/Tools/SubWCRev.py index 843f0796b..53b8a2eb6 100644 --- a/src/Tools/SubWCRev.py +++ b/src/Tools/SubWCRev.py @@ -153,7 +153,10 @@ class GitControl(VersionControl): self.url = r.groups()[0] break self.hash=os.popen("git log -1 --pretty=format:%H").read() - self.branch=os.popen("git branch").read().split('\n')[0][2:] + for self.branch in os.popen("git branch").read().split('\n'): + if re.match( "\*", self.branch ) != None: + break + self.branch=self.branch[2:] return True def printInfo(self): From cfaa15ebc2aa5c84897109ba082a5a58db179a29 Mon Sep 17 00:00:00 2001 From: msocorcim Date: Wed, 9 May 2012 18:03:59 -0400 Subject: [PATCH 142/517] replace StartPage references to "FreeCAD default workbench" with "FreeCAD Complete workbench" --- .../Gui/Resources/translations/StartPage.ts | 2 +- .../Resources/translations/StartPage_af.qm | Bin 8137 -> 8138 bytes .../Resources/translations/StartPage_af.ts | 4 ++-- .../Resources/translations/StartPage_de.qm | Bin 8167 -> 8168 bytes .../Resources/translations/StartPage_de.ts | 4 ++-- .../Resources/translations/StartPage_es.qm | Bin 8319 -> 8320 bytes .../Resources/translations/StartPage_es.ts | 2 +- .../Resources/translations/StartPage_fi.qm | Bin 8125 -> 8126 bytes .../Resources/translations/StartPage_fi.ts | 4 ++-- .../Resources/translations/StartPage_fr.qm | Bin 8939 -> 8940 bytes .../Resources/translations/StartPage_fr.ts | 2 +- .../Resources/translations/StartPage_hr.qm | Bin 8303 -> 8304 bytes .../Resources/translations/StartPage_hr.ts | 2 +- .../Resources/translations/StartPage_hu.qm | Bin 8389 -> 8390 bytes .../Resources/translations/StartPage_hu.ts | 2 +- .../Resources/translations/StartPage_it.qm | Bin 8517 -> 8518 bytes .../Resources/translations/StartPage_it.ts | 2 +- .../Resources/translations/StartPage_ja.qm | Bin 7415 -> 7416 bytes .../Resources/translations/StartPage_ja.ts | 2 +- .../Resources/translations/StartPage_nl.qm | Bin 8417 -> 8418 bytes .../Resources/translations/StartPage_nl.ts | 2 +- .../Resources/translations/StartPage_no.qm | Bin 8127 -> 8128 bytes .../Resources/translations/StartPage_no.ts | 4 ++-- .../Resources/translations/StartPage_pl.qm | Bin 8403 -> 8404 bytes .../Resources/translations/StartPage_pl.ts | 2 +- .../Resources/translations/StartPage_pt.qm | Bin 8433 -> 8434 bytes .../Resources/translations/StartPage_pt.ts | 2 +- .../Resources/translations/StartPage_ru.qm | Bin 8307 -> 8308 bytes .../Resources/translations/StartPage_ru.ts | 2 +- .../Resources/translations/StartPage_se.qm | Bin 8177 -> 8178 bytes .../Resources/translations/StartPage_se.ts | 2 +- .../Resources/translations/StartPage_uk.qm | Bin 8127 -> 8128 bytes .../Resources/translations/StartPage_uk.ts | 4 ++-- .../Resources/translations/StartPage_zh.qm | Bin 6385 -> 6386 bytes .../Resources/translations/StartPage_zh.ts | 2 +- src/Mod/Start/StartPage/StartPage.py | 2 +- 36 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage.ts b/src/Mod/Start/Gui/Resources/translations/StartPage.ts index 351391a34..f34c864d6 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage.ts @@ -139,7 +139,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_af.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_af.qm index a62fcc758e8a76890977b1e4b42b17d7d0b47a80..8f915edb5e5a726fa295cafdd8f9aefb3dd6a9fe 100644 GIT binary patch delta 18 ZcmX?Uf69J?6FZ~x - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_de.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_de.qm index 00eb940240dd9945ad098b61427b3b1ff5f57ea7..573d336fe8f2926ef5a928050f98459bc7281651 100644 GIT binary patch delta 18 ZcmaEE|H6KQ8#|-(+fx2CD!7 delta 24 fcmaE1|J;6q8#{YSYFc7xPRZm2BC?ya*=r>Le|QO1 diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts index a394715b7..fb8eee8d9 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts @@ -140,8 +140,8 @@ - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_es.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_es.qm index 1f1b3340ad379991d8eeaa47239f15b382a90b96..cb1ecc850c52819d89e2b5a280bb8193627ce7bf 100644 GIT binary patch delta 21 ccmezG(BQaX7dwY@er`cdYDwzmgY5ex0A`N~1ONa4 delta 34 qcmZp0{O_<~7rS6eYFc7xPKiQ!eo=N(YF={2 - FreeCAD default workbench + FreeCAD Complete workbench Entorno de trabajo predeterminado de FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_fi.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_fi.qm index 07b72ed6ac2758680b36c01ad672f23406d04d67..6b18866b425902c78eb50e865efd071b52519d24 100644 GIT binary patch delta 18 ZcmdmMzt4Vy13RPh - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_fr.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_fr.qm index b0deb5c621c13054d4267090a20a3a653b9f59a2..1af30245908c730faaa8c1e00cbeca3387f0b429 100644 GIT binary patch delta 18 acmaFu`o?v`6?R7F$@j!mHveG%ECm2oS_qo} delta 20 bcmaFk`r38F6?XQN)U?FXoRZCV*af5kW#$N) diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts index 36e72f5f0..359852143 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Atelier par défaut FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_hr.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_hr.qm index 42ee820c832941a51f4b53c6b15f2a9c5dc41e6a..303541ace4c3f7e3c8554f450209d24955f736c2 100644 GIT binary patch delta 18 acmaFw@WElj1a?N}$!el1o42s - FreeCAD default workbench + FreeCAD Complete workbench Inicijalno FreeCAD radno okruženje diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_hu.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_hu.qm index 84aedcf29e7a7406f8089bf71c8d54cd635672e1..d1c60b3b33dfa77b0d68d402deb5fb9b4ea16696 100644 GIT binary patch delta 18 acmX@=c+7Fb9Ck+M$rYk1n-8$FN&)~#0tSHq delta 24 gcmX@+c+_#j9Cr4U)U?FXoRY~6qOzM0va?D80Dp!FD*ylh diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts index 1e7bbc2f2..6e46c89d2 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD alapértelmezett munkafelület diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_it.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_it.qm index e696ad3807e2a77143ef9fd8b3aa88a31d911c54..08408c5306c762133a4a7383d2b1f9f241632ec9 100644 GIT binary patch delta 18 acmX@=bj)eP6?R7F$tOfrHveGvl>`7z>IaJe delta 24 gcmX@+bku3X6?XQN)U?FXoRY~GL}fSsWcQT>0Efy7H2?qr diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts index 04d4fa189..b9aa0b60f 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Ambiente di lavoro predefinito di FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_ja.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_ja.qm index 89fdd9e76e4f95a8daf9045f32a3a70995095444..ca9c3e5a8837f3f062fcc2d35992e1a3c1405845 100644 GIT binary patch delta 18 acmexv`NMKU0UM+9 - FreeCAD default workbench + FreeCAD Complete workbench FreeCADのデフォルトワークベンチ diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_nl.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_nl.qm index 43d54648e92288d77eae04992be5158384ffc68a..abf2a7236f2285de8cc070aa0cc08b216ce57938 100644 GIT binary patch delta 18 acmaFp_{ed?6m~}E$!(%4n|H8lN&)~&>IT~Y delta 24 gcmaFl_|S2~6n6HM)U?FXoRZ0XqOzNJvTI5L0ECVSg#Z8m diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts index 1f37830ba..6ab92c4d3 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD standaard werkbank diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_no.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_no.qm index 81164c1ea104a0377860e7dc30ad86a98149b927..e920714c27ca3dd82388c2bec72e1c2d3dda3770 100644 GIT binary patch delta 18 ZcmdmQf53i&6+5HzTpc035V diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts index c526fdc84..9b24bb94a 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts @@ -140,8 +140,8 @@ - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pl.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_pl.qm index 9d2baeffa96df8d84e856a4b7cc20db61f00aa50..5e35f5b0abb5e4c0ee7e3329d695115e1b3f2c7e 100644 GIT binary patch delta 18 acmccYc*SwU9(G3O$!Vf0n;)=$mH+@vNe8$9 delta 24 gcmccOc-e8o9(MMW)U?FXoRZ0TqOzMGvVWEU0ERURVgLXD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts index 922ec5597..00d0e9e4c 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Domyślne środowisko FreeCADa diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pt.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_pt.qm index 7edfbb4cd7944920e5a1df8bd35730103e8efcad..3f1299c58059c1bcae0e6914e60fc7b71731226b 100644 GIT binary patch delta 18 acmez9_{niY1v{hjPi diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts index 767755c56..120f70482 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Bancada padrão do FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_ru.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_ru.qm index f13fc55c4d89c85688d5bc002066eb84db04cc31..fc8b49b01abd8ced286920799379ba538bdadbbe 100644 GIT binary patch delta 18 acmezD@Wo+62RozlWFAqK&1=|?O8@{$%?Aho delta 20 bcmez3@Y!KQ2RnO8YFc7xPRZs8>`x>BVq*x| diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts index 90d45ed33..dda7c4891 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Инструментарий FreeCAD по умолчанию diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_se.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_se.qm index 05cb07df745adb00547a65df8521c09b63d84b28..af6a58a2b1c1d15a5c9f8833f4af15f4dded0d16 100644 GIT binary patch delta 18 Zcmexp|H*!X13RPh+nX2J-*_ delta 24 fcmexl|IvPf13P<4YFc7xPRZm8BC?xP*?T1bf?5fk diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts index 7310ccd02..32a4cc2a8 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD standard arbetsbänk diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_uk.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_uk.qm index b49021a9ea2472ad3f7ab857c9cc479ab073987b..5ac3d9b66d29ce756979524b595daba07f2419a8 100644 GIT binary patch delta 18 ZcmdmQf53i&4LhUr diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts index 38a2e414a..7ae42e6e1 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts @@ -140,8 +140,8 @@ - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_zh.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_zh.qm index 04c3229e0a71b8af16c91b4d36ae3e84eba67d54..05b637001acf8006ef000418411ce1d00cd4cb28 100644 GIT binary patch delta 18 acmexp_{ng?0aixm$t8R$o1d`q3IhO5*#`6g delta 24 gcmexl_|b5~0ao^u)U?FXoRY~ke6pLLvhoT80Ec-Ao&W#< diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts index ccf91a0f5..b740960fc 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD默认工作台 diff --git a/src/Mod/Start/StartPage/StartPage.py b/src/Mod/Start/StartPage/StartPage.py index 4ae0511e1..c3983a86f 100644 --- a/src/Mod/Start/StartPage/StartPage.py +++ b/src/Mod/Start/StartPage/StartPage.py @@ -52,7 +52,7 @@ text27 = translate("StartPage","The Mesh Workbench is used to work with M text28 = translate("StartPage","FreeCAD offers you several tools to convert between Mesh and Part objects.") text29 = translate("StartPage","Work with Meshes") text30 = translate("StartPage","The complete workbench") -text31 = translate("StartPage","FreeCAD default workbench") +text31 = translate("StartPage","FreeCAD Complete workbench") text32 = translate("StartPage","populated with some of the most commonly used tools.") text33 = translate("StartPage","file size:") text34 = translate("StartPage","creation time:") From e2813c845fd405fd61df3133c3801abf75320040 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 10 May 2012 10:41:10 +0200 Subject: [PATCH 143/517] fix typo --- src/App/PropertyFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index 70b0f7eda..e1e4ade91 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -343,7 +343,7 @@ Property *PropertyFileIncluded::Copy(void) const bool done = file.renameFile(NewName.filePath().c_str()); assert(done); // remember the new name for the Undo - Base::Console().Log("Copy this=%p Befor=%s After=%s\n",p,p->_cValue.c_str(),NewName.filePath().c_str()); + Base::Console().Log("Copy this=%p Before=%s After=%s\n",p,p->_cValue.c_str(),NewName.filePath().c_str()); p->_cValue = NewName.filePath().c_str(); } From 435d4f82d7ede8fee38429e71a1696535c820411 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 10 May 2012 12:07:37 +0200 Subject: [PATCH 144/517] fix some issues when writing binary data into an XML file --- src/App/PropertyFile.cpp | 4 ++-- src/Base/Writer.cpp | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index e1e4ade91..13599c88a 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -296,7 +296,7 @@ void PropertyFileIncluded::Restore(Base::XMLReader &reader) void PropertyFileIncluded::SaveDocFile (Base::Writer &writer) const { - std::ifstream from(_cValue.c_str()); + Base::ifstream from(Base::FileInfo(_cValue.c_str())); if (!from) throw Base::Exception("PropertyFileIncluded::SaveDocFile() " "File in document transient dir deleted"); @@ -311,7 +311,7 @@ void PropertyFileIncluded::SaveDocFile (Base::Writer &writer) const void PropertyFileIncluded::RestoreDocFile(Base::Reader &reader) { - std::ofstream to(_cValue.c_str()); + Base::ofstream to(Base::FileInfo(_cValue.c_str())); if (!to) throw Base::Exception("PropertyFileIncluded::RestoreDocFile() " "File in document transient dir deleted"); diff --git a/src/Base/Writer.cpp b/src/Base/Writer.cpp index 74742f2a6..01eecef6b 100644 --- a/src/Base/Writer.cpp +++ b/src/Base/Writer.cpp @@ -32,6 +32,7 @@ #include "Exception.h" #include "Base64.h" #include "FileInfo.h" +#include "Stream.h" #include "Tools.h" #include @@ -59,19 +60,24 @@ Writer::~Writer() void Writer::insertAsciiFile(const char* FileName) { - std::ifstream from(FileName); - if (!from) throw Base::Exception("Writer::insertAsciiFile() Could not open file!"); + Base::FileInfo fi(FileName); + Base::ifstream from(fi); + if (!from) + throw Base::Exception("Writer::insertAsciiFile() Could not open file!"); Stream() << "" << endl; } void Writer::insertBinFile(const char* FileName) { - std::ifstream from(FileName); - if (!from) throw Base::Exception("Writer::insertAsciiFile() Could not open file!"); + Base::FileInfo fi(FileName); + Base::ifstream from(fi, std::ios::in | std::ios::binary); + if (!from) + throw Base::Exception("Writer::insertAsciiFile() Could not open file!"); Stream() << " Date: Wed, 9 May 2012 16:47:56 -0400 Subject: [PATCH 145/517] fix parsing "git branch" response so currently checked out branch is returned --- src/Tools/SubWCRev.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Tools/SubWCRev.py b/src/Tools/SubWCRev.py index 843f0796b..53b8a2eb6 100644 --- a/src/Tools/SubWCRev.py +++ b/src/Tools/SubWCRev.py @@ -153,7 +153,10 @@ class GitControl(VersionControl): self.url = r.groups()[0] break self.hash=os.popen("git log -1 --pretty=format:%H").read() - self.branch=os.popen("git branch").read().split('\n')[0][2:] + for self.branch in os.popen("git branch").read().split('\n'): + if re.match( "\*", self.branch ) != None: + break + self.branch=self.branch[2:] return True def printInfo(self): From 8905c5e8078f8e1eaa1b163c130d2afdc0d19f28 Mon Sep 17 00:00:00 2001 From: msocorcim Date: Wed, 9 May 2012 18:03:59 -0400 Subject: [PATCH 146/517] replace StartPage references to "FreeCAD default workbench" with "FreeCAD Complete workbench" --- .../Gui/Resources/translations/StartPage.ts | 2 +- .../Resources/translations/StartPage_af.qm | Bin 8137 -> 8138 bytes .../Resources/translations/StartPage_af.ts | 4 ++-- .../Resources/translations/StartPage_de.qm | Bin 8167 -> 8168 bytes .../Resources/translations/StartPage_de.ts | 4 ++-- .../Resources/translations/StartPage_es.qm | Bin 8319 -> 8320 bytes .../Resources/translations/StartPage_es.ts | 2 +- .../Resources/translations/StartPage_fi.qm | Bin 8125 -> 8126 bytes .../Resources/translations/StartPage_fi.ts | 4 ++-- .../Resources/translations/StartPage_fr.qm | Bin 8939 -> 8940 bytes .../Resources/translations/StartPage_fr.ts | 2 +- .../Resources/translations/StartPage_hr.qm | Bin 8303 -> 8304 bytes .../Resources/translations/StartPage_hr.ts | 2 +- .../Resources/translations/StartPage_hu.qm | Bin 8389 -> 8390 bytes .../Resources/translations/StartPage_hu.ts | 2 +- .../Resources/translations/StartPage_it.qm | Bin 8517 -> 8518 bytes .../Resources/translations/StartPage_it.ts | 2 +- .../Resources/translations/StartPage_ja.qm | Bin 7415 -> 7416 bytes .../Resources/translations/StartPage_ja.ts | 2 +- .../Resources/translations/StartPage_nl.qm | Bin 8417 -> 8418 bytes .../Resources/translations/StartPage_nl.ts | 2 +- .../Resources/translations/StartPage_no.qm | Bin 8127 -> 8128 bytes .../Resources/translations/StartPage_no.ts | 4 ++-- .../Resources/translations/StartPage_pl.qm | Bin 8403 -> 8404 bytes .../Resources/translations/StartPage_pl.ts | 2 +- .../Resources/translations/StartPage_pt.qm | Bin 8433 -> 8434 bytes .../Resources/translations/StartPage_pt.ts | 2 +- .../Resources/translations/StartPage_ru.qm | Bin 8307 -> 8308 bytes .../Resources/translations/StartPage_ru.ts | 2 +- .../Resources/translations/StartPage_se.qm | Bin 8177 -> 8178 bytes .../Resources/translations/StartPage_se.ts | 2 +- .../Resources/translations/StartPage_uk.qm | Bin 8127 -> 8128 bytes .../Resources/translations/StartPage_uk.ts | 4 ++-- .../Resources/translations/StartPage_zh.qm | Bin 6385 -> 6386 bytes .../Resources/translations/StartPage_zh.ts | 2 +- src/Mod/Start/StartPage/StartPage.py | 2 +- 36 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage.ts b/src/Mod/Start/Gui/Resources/translations/StartPage.ts index 351391a34..f34c864d6 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage.ts @@ -139,7 +139,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_af.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_af.qm index a62fcc758e8a76890977b1e4b42b17d7d0b47a80..8f915edb5e5a726fa295cafdd8f9aefb3dd6a9fe 100644 GIT binary patch delta 18 ZcmX?Uf69J?6FZ~x - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_de.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_de.qm index 00eb940240dd9945ad098b61427b3b1ff5f57ea7..573d336fe8f2926ef5a928050f98459bc7281651 100644 GIT binary patch delta 18 ZcmaEE|H6KQ8#|-(+fx2CD!7 delta 24 fcmaE1|J;6q8#{YSYFc7xPRZm2BC?ya*=r>Le|QO1 diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts index a394715b7..fb8eee8d9 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_de.ts @@ -140,8 +140,8 @@ - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_es.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_es.qm index 1f1b3340ad379991d8eeaa47239f15b382a90b96..cb1ecc850c52819d89e2b5a280bb8193627ce7bf 100644 GIT binary patch delta 21 ccmezG(BQaX7dwY@er`cdYDwzmgY5ex0A`N~1ONa4 delta 34 qcmZp0{O_<~7rS6eYFc7xPKiQ!eo=N(YF={2 - FreeCAD default workbench + FreeCAD Complete workbench Entorno de trabajo predeterminado de FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_fi.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_fi.qm index 07b72ed6ac2758680b36c01ad672f23406d04d67..6b18866b425902c78eb50e865efd071b52519d24 100644 GIT binary patch delta 18 ZcmdmMzt4Vy13RPh - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_fr.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_fr.qm index b0deb5c621c13054d4267090a20a3a653b9f59a2..1af30245908c730faaa8c1e00cbeca3387f0b429 100644 GIT binary patch delta 18 acmaFu`o?v`6?R7F$@j!mHveG%ECm2oS_qo} delta 20 bcmaFk`r38F6?XQN)U?FXoRZCV*af5kW#$N) diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts index 36e72f5f0..359852143 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_fr.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Atelier par défaut FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_hr.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_hr.qm index 42ee820c832941a51f4b53c6b15f2a9c5dc41e6a..303541ace4c3f7e3c8554f450209d24955f736c2 100644 GIT binary patch delta 18 acmaFw@WElj1a?N}$!el1o42s - FreeCAD default workbench + FreeCAD Complete workbench Inicijalno FreeCAD radno okruženje diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_hu.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_hu.qm index 84aedcf29e7a7406f8089bf71c8d54cd635672e1..d1c60b3b33dfa77b0d68d402deb5fb9b4ea16696 100644 GIT binary patch delta 18 acmX@=c+7Fb9Ck+M$rYk1n-8$FN&)~#0tSHq delta 24 gcmX@+c+_#j9Cr4U)U?FXoRY~6qOzM0va?D80Dp!FD*ylh diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts index 1e7bbc2f2..6e46c89d2 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_hu.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD alapértelmezett munkafelület diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_it.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_it.qm index e696ad3807e2a77143ef9fd8b3aa88a31d911c54..08408c5306c762133a4a7383d2b1f9f241632ec9 100644 GIT binary patch delta 18 acmX@=bj)eP6?R7F$tOfrHveGvl>`7z>IaJe delta 24 gcmX@+bku3X6?XQN)U?FXoRY~GL}fSsWcQT>0Efy7H2?qr diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts index 04d4fa189..b9aa0b60f 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_it.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Ambiente di lavoro predefinito di FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_ja.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_ja.qm index 89fdd9e76e4f95a8daf9045f32a3a70995095444..ca9c3e5a8837f3f062fcc2d35992e1a3c1405845 100644 GIT binary patch delta 18 acmexv`NMKU0UM+9 - FreeCAD default workbench + FreeCAD Complete workbench FreeCADのデフォルトワークベンチ diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_nl.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_nl.qm index 43d54648e92288d77eae04992be5158384ffc68a..abf2a7236f2285de8cc070aa0cc08b216ce57938 100644 GIT binary patch delta 18 acmaFp_{ed?6m~}E$!(%4n|H8lN&)~&>IT~Y delta 24 gcmaFl_|S2~6n6HM)U?FXoRZ0XqOzNJvTI5L0ECVSg#Z8m diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts index 1f37830ba..6ab92c4d3 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_nl.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD standaard werkbank diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_no.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_no.qm index 81164c1ea104a0377860e7dc30ad86a98149b927..e920714c27ca3dd82388c2bec72e1c2d3dda3770 100644 GIT binary patch delta 18 ZcmdmQf53i&6+5HzTpc035V diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts index c526fdc84..9b24bb94a 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_no.ts @@ -140,8 +140,8 @@ - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pl.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_pl.qm index 9d2baeffa96df8d84e856a4b7cc20db61f00aa50..5e35f5b0abb5e4c0ee7e3329d695115e1b3f2c7e 100644 GIT binary patch delta 18 acmccYc*SwU9(G3O$!Vf0n;)=$mH+@vNe8$9 delta 24 gcmccOc-e8o9(MMW)U?FXoRZ0TqOzMGvVWEU0ERURVgLXD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts index 922ec5597..00d0e9e4c 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_pl.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Domyślne środowisko FreeCADa diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pt.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_pt.qm index 7edfbb4cd7944920e5a1df8bd35730103e8efcad..3f1299c58059c1bcae0e6914e60fc7b71731226b 100644 GIT binary patch delta 18 acmez9_{niY1v{hjPi diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts index 767755c56..120f70482 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_pt.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Bancada padrão do FreeCAD diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_ru.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_ru.qm index f13fc55c4d89c85688d5bc002066eb84db04cc31..fc8b49b01abd8ced286920799379ba538bdadbbe 100644 GIT binary patch delta 18 acmezD@Wo+62RozlWFAqK&1=|?O8@{$%?Aho delta 20 bcmez3@Y!KQ2RnO8YFc7xPRZs8>`x>BVq*x| diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts index 90d45ed33..dda7c4891 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_ru.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench Инструментарий FreeCAD по умолчанию diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_se.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_se.qm index 05cb07df745adb00547a65df8521c09b63d84b28..af6a58a2b1c1d15a5c9f8833f4af15f4dded0d16 100644 GIT binary patch delta 18 Zcmexp|H*!X13RPh+nX2J-*_ delta 24 fcmexl|IvPf13P<4YFc7xPRZm8BC?xP*?T1bf?5fk diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts index 7310ccd02..32a4cc2a8 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_se.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD standard arbetsbänk diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_uk.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_uk.qm index b49021a9ea2472ad3f7ab857c9cc479ab073987b..5ac3d9b66d29ce756979524b595daba07f2419a8 100644 GIT binary patch delta 18 ZcmdmQf53i&4LhUr diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts index 38a2e414a..7ae42e6e1 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_uk.ts @@ -140,8 +140,8 @@ - FreeCAD default workbench - FreeCAD default workbench + FreeCAD Complete workbench + FreeCAD Complete workbench diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_zh.qm b/src/Mod/Start/Gui/Resources/translations/StartPage_zh.qm index 04c3229e0a71b8af16c91b4d36ae3e84eba67d54..05b637001acf8006ef000418411ce1d00cd4cb28 100644 GIT binary patch delta 18 acmexp_{ng?0aixm$t8R$o1d`q3IhO5*#`6g delta 24 gcmexl_|b5~0ao^u)U?FXoRY~ke6pLLvhoT80Ec-Ao&W#< diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts b/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts index ccf91a0f5..b740960fc 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage_zh.ts @@ -140,7 +140,7 @@ - FreeCAD default workbench + FreeCAD Complete workbench FreeCAD默认工作台 diff --git a/src/Mod/Start/StartPage/StartPage.py b/src/Mod/Start/StartPage/StartPage.py index 4ae0511e1..c3983a86f 100644 --- a/src/Mod/Start/StartPage/StartPage.py +++ b/src/Mod/Start/StartPage/StartPage.py @@ -52,7 +52,7 @@ text27 = translate("StartPage","The Mesh Workbench is used to work with M text28 = translate("StartPage","FreeCAD offers you several tools to convert between Mesh and Part objects.") text29 = translate("StartPage","Work with Meshes") text30 = translate("StartPage","The complete workbench") -text31 = translate("StartPage","FreeCAD default workbench") +text31 = translate("StartPage","FreeCAD Complete workbench") text32 = translate("StartPage","populated with some of the most commonly used tools.") text33 = translate("StartPage","file size:") text34 = translate("StartPage","creation time:") From ba17ed0ee743cf58ac586669c4900aa2ca3f646e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 11 May 2012 16:36:21 -0300 Subject: [PATCH 147/517] Added 0000698 : Draft Extrude --- src/Mod/Draft/DraftTools.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 39713964b..ad61cf65d 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -2676,8 +2676,10 @@ class Trimex(Modifier): self.ui.cross(True) self.shift = hasMod(arg,MODCONSTRAIN) self.alt = hasMod(arg,MODALT) + if self.extrudeMode: + arg["ShiftDown"] = False wp = not(self.extrudeMode and self.shift) - self.point,info = getPoint(self,arg,workingplane=wp)[0] + self.point,cp,info = getPoint(self,arg,workingplane=wp) if hasMod(arg,MODSNAP): self.snapped = None else: self.snapped = self.view.getObjectInfo((arg["Position"][0],arg["Position"][1])) if self.extrudeMode: @@ -2705,7 +2707,7 @@ class Trimex(Modifier): "redraws the ghost in extrude mode" self.newpoint = self.obj.Shape.Faces[0].CenterOfMass dvec = self.point.sub(self.newpoint) - if shift: delta = fcvec.project(dvec,self.normal) + if not shift: delta = fcvec.project(dvec,self.normal) else: delta = dvec if self.force: ratio = self.force/delta.Length From 9185bdcd8f5c4e28f3cb459c44f4d1e8975789d9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 13 May 2012 13:11:07 +0200 Subject: [PATCH 148/517] 0000702: Patch to fix compilation of FreeCAD with gcc 4.7 --- src/Mod/Fem/App/HypothesisPy.cpp | 2112 ++++++++--------- .../Mesh/App/WildMagic4/Wm4Query2Filtered.inl | 210 +- .../Mesh/App/WildMagic4/Wm4Query3Filtered.inl | 258 +- 3 files changed, 1290 insertions(+), 1290 deletions(-) diff --git a/src/Mod/Fem/App/HypothesisPy.cpp b/src/Mod/Fem/App/HypothesisPy.cpp index 755e8a539..7dbe2f722 100644 --- a/src/Mod/Fem/App/HypothesisPy.cpp +++ b/src/Mod/Fem/App/HypothesisPy.cpp @@ -1,1056 +1,1056 @@ -/*************************************************************************** - * Copyright (c) 2010 Werner Mayer * - * * - * 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 "HypothesisPy.h" -#include "FemMeshPy.h" -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include - -using namespace Fem; - - -HypothesisPy::HypothesisPy(boost::shared_ptr h) - : hyp(h) -{ -} - -HypothesisPy::~HypothesisPy() -{ -} - -// ---------------------------------------------------------------------------- - -template -void SMESH_HypothesisPy::init_type(PyObject* module) -{ - // you must have overwritten the virtual functions - SMESH_HypothesisPy::behaviors().supportRepr(); - SMESH_HypothesisPy::behaviors().supportGetattr(); - SMESH_HypothesisPy::behaviors().supportSetattr(); - SMESH_HypothesisPy::behaviors().type_object()->tp_new = &PyMake; - - add_varargs_method("setLibName", &SMESH_HypothesisPy::setLibName, "setLibName(String)"); - add_varargs_method("getLibName", &SMESH_HypothesisPy::getLibName, "String getLibName()"); - add_varargs_method("setParameters", &SMESH_HypothesisPy::setParameters, "setParameters(String)"); - add_varargs_method("getParameters", &SMESH_HypothesisPy::getParameters, "String getParameters()"); - add_varargs_method("setLastParameters", &SMESH_HypothesisPy::setLastParameters, "setLastParameters(String)"); - add_varargs_method("getLastParameters", &SMESH_HypothesisPy::getLastParameters, "String getLastParameters()"); - add_varargs_method("clearParameters", &SMESH_HypothesisPy::clearParameters, "clearParameters()"); - add_varargs_method("isAuxiliary", &SMESH_HypothesisPy::isAuxiliary, "Bool isAuxiliary()"); - add_varargs_method("setParametersByMesh", &SMESH_HypothesisPy::setParametersByMesh, "setParametersByMesh(Mesh,Shape)"); - Base::Interpreter().addType(SMESH_HypothesisPy::behaviors().type_object(), - module,SMESH_HypothesisPy::behaviors().getName()); -} - -template -SMESH_HypothesisPy::SMESH_HypothesisPy(SMESH_Hypothesis* h) : hyp(h) -{ -} - -template -SMESH_HypothesisPy::~SMESH_HypothesisPy() -{ -} - -template -Py::Object SMESH_HypothesisPy::getattr(const char *name) -{ - if (strcmp(name,"this") == 0) - return Hypothesis(Py::asObject(new HypothesisPy(this->getHypothesis()))); - return Py::PythonExtension::getattr(name); -} - -template -Py::Object SMESH_HypothesisPy::repr() -{ - std::stringstream str; - str << hyp->GetName() << ", " << hyp->GetID(); - return Py::String(str.str()); -} - -template -Py::Object SMESH_HypothesisPy::setLibName(const Py::Tuple& args) -{ - std::string libName = (std::string)Py::String(args[0]); - hypothesis()->SetLibName(libName.c_str()); - return Py::None(); -} - -template -Py::Object SMESH_HypothesisPy::getLibName(const Py::Tuple& args) -{ - return Py::String(hypothesis()->GetLibName()); -} - -template -Py::Object SMESH_HypothesisPy::setParameters(const Py::Tuple& args) -{ - std::string paramName = (std::string)Py::String(args[0]); - hypothesis()->SetParameters(paramName.c_str()); - return Py::None(); -} - -template -Py::Object SMESH_HypothesisPy::getParameters(const Py::Tuple& args) -{ - return Py::String(hypothesis()->GetParameters()); -} - -template -Py::Object SMESH_HypothesisPy::setLastParameters(const Py::Tuple& args) -{ - std::string paramName = (std::string)Py::String(args[0]); - hypothesis()->SetLastParameters(paramName.c_str()); - return Py::None(); -} - -template -Py::Object SMESH_HypothesisPy::getLastParameters(const Py::Tuple& args) -{ - return Py::String(hypothesis()->GetLastParameters()); -} - -template -Py::Object SMESH_HypothesisPy::clearParameters(const Py::Tuple& args) -{ - hypothesis()->ClearParameters(); - return Py::None(); -} - -template -Py::Object SMESH_HypothesisPy::setParametersByMesh(const Py::Tuple& args) -{ - PyObject *mesh, *shape; - if (!PyArg_ParseTuple(args.ptr(), "O!O!", - &(Fem::FemMeshPy::Type), &mesh, - &(Part::TopoShapePy::Type), &shape)) - throw Py::Exception(); - Fem::FemMesh* m = static_cast(mesh)->getFemMeshPtr(); - const TopoDS_Shape& s = static_cast(shape)->getTopoShapePtr()->_Shape; - return Py::Boolean(hypothesis()->SetParametersByMesh(m->getSMesh(), s)); -} - -template -Py::Object SMESH_HypothesisPy::isAuxiliary(const Py::Tuple& args) -{ - return Py::Boolean(hypothesis()->IsAuxiliary()); -} - -template -PyObject *SMESH_HypothesisPy::PyMake(struct _typeobject *type, PyObject * args, PyObject * kwds) -{ - int hypId; - PyObject* obj; - if (!PyArg_ParseTuple(args, "iO!",&hypId,&(FemMeshPy::Type),&obj)) - return 0; - FemMesh* mesh = static_cast(obj)->getFemMeshPtr(); - return new T(hypId, 1, mesh->getGenerator()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Arithmetic1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Arithmetic1D"); - behaviors().doc("StdMeshers_Arithmetic1D"); - - add_varargs_method("setLength", &StdMeshers_Arithmetic1DPy::setLength, "setLength()"); - add_varargs_method("getLength", &StdMeshers_Arithmetic1DPy::getLength, "getLength()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Arithmetic1DPy::StdMeshers_Arithmetic1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Arithmetic1D(hypId, studyId, gen)) -{ -} - -StdMeshers_Arithmetic1DPy::~StdMeshers_Arithmetic1DPy() -{ -} - -Py::Object StdMeshers_Arithmetic1DPy::setLength(const Py::Tuple& args) -{ - hypothesis()-> - SetLength((double)Py::Float(args[0]), (bool)Py::Boolean(args[1])); - return Py::None(); -} - -Py::Object StdMeshers_Arithmetic1DPy::getLength(const Py::Tuple& args) -{ - int start; - if (!PyArg_ParseTuple(args.ptr(), "i",&start)) - throw Py::Exception(); - return Py::Float(hypothesis()-> - GetLength(start ? true : false)); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_AutomaticLengthPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_AutomaticLength"); - behaviors().doc("StdMeshers_AutomaticLength"); - - add_varargs_method("setFineness", &StdMeshers_AutomaticLengthPy::setFineness, "setFineness()"); - add_varargs_method("getFineness", &StdMeshers_AutomaticLengthPy::getFineness, "getFineness()"); - add_varargs_method("getLength", &StdMeshers_AutomaticLengthPy::getLength, "getLength()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_AutomaticLengthPy::StdMeshers_AutomaticLengthPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(0) -{ -} - -StdMeshers_AutomaticLengthPy::~StdMeshers_AutomaticLengthPy() -{ -} - -Py::Object StdMeshers_AutomaticLengthPy::setFineness(const Py::Tuple& args) -{ - double fine = (double)Py::Float(args[0]); - hypothesis()->SetFineness(fine); - return Py::None(); -} - -Py::Object StdMeshers_AutomaticLengthPy::getFineness(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetFineness()); -} - -namespace Py { - typedef ExtensionObject FemMesh; - typedef ExtensionObject TopoShape; - template<> bool FemMesh::accepts (PyObject *pyob) const - { - return (pyob && PyObject_TypeCheck(pyob, &(Fem::FemMeshPy::Type))); - } - template<> bool TopoShape::accepts (PyObject *pyob) const - { - return (pyob && PyObject_TypeCheck(pyob, &(Part::TopoShapePy::Type))); - } -} - -Py::Object StdMeshers_AutomaticLengthPy::getLength(const Py::Tuple& args) -{ - Py::FemMesh mesh(args[0]); - Py::Object shape_or_double(args[1]); - - Fem::FemMesh* m = mesh.extensionObject()->getFemMeshPtr(); - if (shape_or_double.type() == Py::Float().type()) { - double len = (double)Py::Float(shape_or_double); - return Py::Float(hypothesis()->GetLength(m->getSMesh(),len)); - } - else { - Py::TopoShape shape(shape_or_double); - const TopoDS_Shape& s = shape.extensionObject()->getTopoShapePtr()->_Shape; - return Py::Float(hypothesis()->GetLength(m->getSMesh(),s)); - } - - throw Py::Exception(); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_NotConformAllowedPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_NotConformAllowed"); - behaviors().doc("StdMeshers_NotConformAllowed"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_NotConformAllowedPy::StdMeshers_NotConformAllowedPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_NotConformAllowed(hypId, studyId, gen)) -{ -} - -StdMeshers_NotConformAllowedPy::~StdMeshers_NotConformAllowedPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_MaxLengthPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_MaxLength"); - behaviors().doc("StdMeshers_MaxLength"); - - add_varargs_method("setLength", &StdMeshers_MaxLengthPy::setLength, "setLength()"); - add_varargs_method("getLength", &StdMeshers_MaxLengthPy::getLength, "getLength()"); - add_varargs_method("havePreestimatedLength", &StdMeshers_MaxLengthPy::havePreestimatedLength, "havePreestimatedLength()"); - add_varargs_method("getPreestimatedLength", &StdMeshers_MaxLengthPy::getPreestimatedLength, "getPreestimatedLength()"); - add_varargs_method("setPreestimatedLength", &StdMeshers_MaxLengthPy::setPreestimatedLength, "setPreestimatedLength()"); - add_varargs_method("setUsePreestimatedLength", &StdMeshers_MaxLengthPy::setUsePreestimatedLength, "setUsePreestimatedLength()"); - add_varargs_method("getUsePreestimatedLength", &StdMeshers_MaxLengthPy::getUsePreestimatedLength, "getUsePreestimatedLength()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_MaxLengthPy::StdMeshers_MaxLengthPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_MaxLength(hypId, studyId, gen)) -{ -} - -StdMeshers_MaxLengthPy::~StdMeshers_MaxLengthPy() -{ -} - -Py::Object StdMeshers_MaxLengthPy::setLength(const Py::Tuple& args) -{ - hypothesis()->SetLength((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_MaxLengthPy::getLength(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetLength()); -} - -Py::Object StdMeshers_MaxLengthPy::havePreestimatedLength(const Py::Tuple& args) -{ - return Py::Boolean(hypothesis()->HavePreestimatedLength()); -} - -Py::Object StdMeshers_MaxLengthPy::getPreestimatedLength(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetPreestimatedLength()); -} - -Py::Object StdMeshers_MaxLengthPy::setPreestimatedLength(const Py::Tuple& args) -{ - hypothesis()->SetPreestimatedLength((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_MaxLengthPy::setUsePreestimatedLength(const Py::Tuple& args) -{ - hypothesis()->SetUsePreestimatedLength((bool)Py::Boolean(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_MaxLengthPy::getUsePreestimatedLength(const Py::Tuple& args) -{ - return Py::Boolean(hypothesis()->GetUsePreestimatedLength()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_LocalLengthPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_LocalLength"); - behaviors().doc("StdMeshers_LocalLength"); - - add_varargs_method("setLength", &StdMeshers_LocalLengthPy::setLength, "setLength()"); - add_varargs_method("getLength", &StdMeshers_LocalLengthPy::getLength, "getLength()"); - add_varargs_method("setPrecision", &StdMeshers_LocalLengthPy::setPrecision, "setPrecision()"); - add_varargs_method("getPrecision", &StdMeshers_LocalLengthPy::getPrecision, "getPrecision()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_LocalLengthPy::StdMeshers_LocalLengthPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_LocalLength(hypId, studyId, gen)) -{ -} - -StdMeshers_LocalLengthPy::~StdMeshers_LocalLengthPy() -{ -} - -Py::Object StdMeshers_LocalLengthPy::setLength(const Py::Tuple& args) -{ - hypothesis()->SetLength((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_LocalLengthPy::getLength(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetLength()); -} - -Py::Object StdMeshers_LocalLengthPy::setPrecision(const Py::Tuple& args) -{ - hypothesis()->SetPrecision((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_LocalLengthPy::getPrecision(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetPrecision()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_MaxElementAreaPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_MaxElementArea"); - behaviors().doc("StdMeshers_MaxElementArea"); - - add_varargs_method("setMaxArea", &StdMeshers_MaxElementAreaPy::setMaxArea, "setMaxArea()"); - add_varargs_method("getMaxArea", &StdMeshers_MaxElementAreaPy::getMaxArea, "getMaxArea()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_MaxElementAreaPy::StdMeshers_MaxElementAreaPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_MaxElementArea(hypId, studyId, gen)) -{ -} - -StdMeshers_MaxElementAreaPy::~StdMeshers_MaxElementAreaPy() -{ -} - -Py::Object StdMeshers_MaxElementAreaPy::setMaxArea(const Py::Tuple& args) -{ - hypothesis()->SetMaxArea((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_MaxElementAreaPy::getMaxArea(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetMaxArea()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_QuadranglePreferencePy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_QuadranglePreference"); - behaviors().doc("StdMeshers_QuadranglePreference"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_QuadranglePreferencePy::StdMeshers_QuadranglePreferencePy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_QuadranglePreference(hypId, studyId, gen)) -{ -} - -StdMeshers_QuadranglePreferencePy::~StdMeshers_QuadranglePreferencePy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Quadrangle_2DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Quadrangle_2D"); - behaviors().doc("StdMeshers_Quadrangle_2D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Quadrangle_2DPy::StdMeshers_Quadrangle_2DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Quadrangle_2D(hypId, studyId, gen)) -{ -} - -StdMeshers_Quadrangle_2DPy::~StdMeshers_Quadrangle_2DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Regular_1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Regular_1D"); - behaviors().doc("StdMeshers_Regular_1D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Regular_1DPy::StdMeshers_Regular_1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Regular_1D(hypId, studyId, gen)) -{ -} - -StdMeshers_Regular_1DPy::~StdMeshers_Regular_1DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_UseExisting_1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_UseExisting_1D"); - behaviors().doc("StdMeshers_UseExisting_1D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_UseExisting_1DPy::StdMeshers_UseExisting_1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_UseExisting_1D(hypId, studyId, gen)) -{ -} - -StdMeshers_UseExisting_1DPy::~StdMeshers_UseExisting_1DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_UseExisting_2DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_UseExisting_2D"); - behaviors().doc("StdMeshers_UseExisting_2D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_UseExisting_2DPy::StdMeshers_UseExisting_2DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_UseExisting_2D(hypId, studyId, gen)) -{ -} - -StdMeshers_UseExisting_2DPy::~StdMeshers_UseExisting_2DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_CompositeSegment_1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_CompositeSegment_1D"); - behaviors().doc("StdMeshers_CompositeSegment_1D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_CompositeSegment_1DPy::StdMeshers_CompositeSegment_1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_CompositeSegment_1D(hypId, studyId, gen)) -{ -} - -StdMeshers_CompositeSegment_1DPy::~StdMeshers_CompositeSegment_1DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Deflection1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Deflection1D"); - behaviors().doc("StdMeshers_Deflection1D"); - - add_varargs_method("setDeflection", &StdMeshers_Deflection1DPy::setDeflection, "setDeflection()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Deflection1DPy::StdMeshers_Deflection1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Deflection1D(hypId, studyId, gen)) -{ -} - -StdMeshers_Deflection1DPy::~StdMeshers_Deflection1DPy() -{ -} - -Py::Object StdMeshers_Deflection1DPy::setDeflection(const Py::Tuple& args) -{ - double fine = (double)Py::Float(args[0]); - hypothesis()->SetDeflection(fine); - return Py::None(); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Hexa_3DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Hexa_3D"); - behaviors().doc("StdMeshers_Hexa_3D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Hexa_3DPy::StdMeshers_Hexa_3DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Hexa_3D(hypId, studyId, gen)) -{ -} - -StdMeshers_Hexa_3DPy::~StdMeshers_Hexa_3DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_TrianglePreferencePy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_TrianglePreference"); - behaviors().doc("StdMeshers_TrianglePreference"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_TrianglePreferencePy::StdMeshers_TrianglePreferencePy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_TrianglePreference(hypId, studyId, gen)) -{ -} - -StdMeshers_TrianglePreferencePy::~StdMeshers_TrianglePreferencePy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_StartEndLengthPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_StartEndLength"); - behaviors().doc("StdMeshers_StartEndLength"); - add_varargs_method("setLength", &StdMeshers_StartEndLengthPy::setLength, "setLength()"); - add_varargs_method("getLength", &StdMeshers_StartEndLengthPy::getLength, "getLength()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_StartEndLengthPy::StdMeshers_StartEndLengthPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_StartEndLength(hypId, studyId, gen)) -{ -} - -StdMeshers_StartEndLengthPy::~StdMeshers_StartEndLengthPy() -{ -} - -Py::Object StdMeshers_StartEndLengthPy::setLength(const Py::Tuple& args) -{ - hypothesis()->SetLength((double)Py::Float(args[0]),(bool)Py::Boolean(args[1])); - return Py::None(); -} - -Py::Object StdMeshers_StartEndLengthPy::getLength(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetLength((bool)Py::Boolean(args[0]))); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_SegmentLengthAroundVertexPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_SegmentLengthAroundVertex"); - behaviors().doc("StdMeshers_SegmentLengthAroundVertex"); - add_varargs_method("setLength", &StdMeshers_SegmentLengthAroundVertexPy::setLength, "setLength()"); - add_varargs_method("getLength", &StdMeshers_SegmentLengthAroundVertexPy::getLength, "getLength()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_SegmentLengthAroundVertexPy::StdMeshers_SegmentLengthAroundVertexPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_SegmentLengthAroundVertex(hypId, studyId, gen)) -{ -} - -StdMeshers_SegmentLengthAroundVertexPy::~StdMeshers_SegmentLengthAroundVertexPy() -{ -} - -Py::Object StdMeshers_SegmentLengthAroundVertexPy::setLength(const Py::Tuple& args) -{ - hypothesis()->SetLength((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_SegmentLengthAroundVertexPy::getLength(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetLength()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_SegmentAroundVertex_0DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_SegmentAroundVertex_0D"); - behaviors().doc("StdMeshers_SegmentAroundVertex_0D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_SegmentAroundVertex_0DPy::StdMeshers_SegmentAroundVertex_0DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_SegmentAroundVertex_0D(hypId, studyId, gen)) -{ -} - -StdMeshers_SegmentAroundVertex_0DPy::~StdMeshers_SegmentAroundVertex_0DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_RadialPrism_3DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_RadialPrism_3D"); - behaviors().doc("StdMeshers_RadialPrism_3D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_RadialPrism_3DPy::StdMeshers_RadialPrism_3DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_RadialPrism_3D(hypId, studyId, gen)) -{ -} - -StdMeshers_RadialPrism_3DPy::~StdMeshers_RadialPrism_3DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_QuadraticMeshPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_QuadraticMesh"); - behaviors().doc("StdMeshers_QuadraticMesh"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_QuadraticMeshPy::StdMeshers_QuadraticMeshPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_QuadraticMesh(hypId, studyId, gen)) -{ -} - -StdMeshers_QuadraticMeshPy::~StdMeshers_QuadraticMeshPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_ProjectionSource3DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_ProjectionSource3D"); - behaviors().doc("StdMeshers_ProjectionSource3D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_ProjectionSource3DPy::StdMeshers_ProjectionSource3DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_ProjectionSource3D(hypId, studyId, gen)) -{ -} - -StdMeshers_ProjectionSource3DPy::~StdMeshers_ProjectionSource3DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_ProjectionSource2DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_ProjectionSource2D"); - behaviors().doc("StdMeshers_ProjectionSource2D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_ProjectionSource2DPy::StdMeshers_ProjectionSource2DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_ProjectionSource2D(hypId, studyId, gen)) -{ -} - -StdMeshers_ProjectionSource2DPy::~StdMeshers_ProjectionSource2DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_ProjectionSource1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_ProjectionSource1D"); - behaviors().doc("StdMeshers_ProjectionSource1D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_ProjectionSource1DPy::StdMeshers_ProjectionSource1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_ProjectionSource1D(hypId, studyId, gen)) -{ -} - -StdMeshers_ProjectionSource1DPy::~StdMeshers_ProjectionSource1DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Projection_3DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Projection_3D"); - behaviors().doc("StdMeshers_Projection_3D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Projection_3DPy::StdMeshers_Projection_3DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Projection_3D(hypId, studyId, gen)) -{ -} - -StdMeshers_Projection_3DPy::~StdMeshers_Projection_3DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Projection_2DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Projection_2D"); - behaviors().doc("StdMeshers_Projection_2D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Projection_2DPy::StdMeshers_Projection_2DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Projection_2D(hypId, studyId, gen)) -{ -} - -StdMeshers_Projection_2DPy::~StdMeshers_Projection_2DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Projection_1DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Projection_1D"); - behaviors().doc("StdMeshers_Projection_1D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Projection_1DPy::StdMeshers_Projection_1DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Projection_1D(hypId, studyId, gen)) -{ -} - -StdMeshers_Projection_1DPy::~StdMeshers_Projection_1DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_Prism_3DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_Prism_3D"); - behaviors().doc("StdMeshers_Prism_3D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_Prism_3DPy::StdMeshers_Prism_3DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_Prism_3D(hypId, studyId, gen)) -{ -} - -StdMeshers_Prism_3DPy::~StdMeshers_Prism_3DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_NumberOfSegmentsPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_NumberOfSegments"); - behaviors().doc("StdMeshers_NumberOfSegments"); - add_varargs_method("setNumberOfSegments",&StdMeshers_NumberOfSegmentsPy::setNumSegm,"setNumberOfSegments()"); - add_varargs_method("getNumberOfSegments",&StdMeshers_NumberOfSegmentsPy::getNumSegm,"getNumberOfSegments()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_NumberOfSegmentsPy::StdMeshers_NumberOfSegmentsPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_NumberOfSegments(hypId, studyId, gen)) -{ -} - -StdMeshers_NumberOfSegmentsPy::~StdMeshers_NumberOfSegmentsPy() -{ -} - -Py::Object StdMeshers_NumberOfSegmentsPy::setNumSegm(const Py::Tuple& args) -{ - hypothesis()->SetNumberOfSegments((int)Py::Int(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_NumberOfSegmentsPy::getNumSegm(const Py::Tuple& args) -{ - return Py::Int(hypothesis()->GetNumberOfSegments()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_NumberOfLayersPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_NumberOfLayers"); - behaviors().doc("StdMeshers_NumberOfLayers"); - add_varargs_method("setNumberOfLayers",&StdMeshers_NumberOfLayersPy::setNumLayers,"setNumberOfLayers()"); - add_varargs_method("getNumberOfLayers",&StdMeshers_NumberOfLayersPy::getNumLayers,"getNumberOfLayers()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_NumberOfLayersPy::StdMeshers_NumberOfLayersPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_NumberOfLayers(hypId, studyId, gen)) -{ -} - -StdMeshers_NumberOfLayersPy::~StdMeshers_NumberOfLayersPy() -{ -} - -Py::Object StdMeshers_NumberOfLayersPy::setNumLayers(const Py::Tuple& args) -{ - hypothesis()->SetNumberOfLayers((int)Py::Int(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_NumberOfLayersPy::getNumLayers(const Py::Tuple& args) -{ - return Py::Int(hypothesis()->GetNumberOfLayers()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_MEFISTO_2DPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_MEFISTO_2D"); - behaviors().doc("StdMeshers_MEFISTO_2D"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_MEFISTO_2DPy::StdMeshers_MEFISTO_2DPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_MEFISTO_2D(hypId, studyId, gen)) -{ -} - -StdMeshers_MEFISTO_2DPy::~StdMeshers_MEFISTO_2DPy() -{ -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_MaxElementVolumePy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_MaxElementVolume"); - behaviors().doc("StdMeshers_MaxElementVolume"); - add_varargs_method("setMaxVolume",&StdMeshers_MaxElementVolumePy::setMaxVolume,"setMaxVolume()"); - add_varargs_method("getMaxVolume",&StdMeshers_MaxElementVolumePy::getMaxVolume,"getMaxVolume()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_MaxElementVolumePy::StdMeshers_MaxElementVolumePy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_MaxElementVolume(hypId, studyId, gen)) -{ -} - -StdMeshers_MaxElementVolumePy::~StdMeshers_MaxElementVolumePy() -{ -} - -Py::Object StdMeshers_MaxElementVolumePy::setMaxVolume(const Py::Tuple& args) -{ - hypothesis()->SetMaxVolume((double)Py::Float(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_MaxElementVolumePy::getMaxVolume(const Py::Tuple& args) -{ - return Py::Float(hypothesis()->GetMaxVolume()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_LengthFromEdgesPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_LengthFromEdges"); - behaviors().doc("StdMeshers_LengthFromEdges"); - add_varargs_method("setMode",&StdMeshers_LengthFromEdgesPy::setMode,"setMode()"); - add_varargs_method("getMode",&StdMeshers_LengthFromEdgesPy::getMode,"getMode()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_LengthFromEdgesPy::StdMeshers_LengthFromEdgesPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_LengthFromEdges(hypId, studyId, gen)) -{ -} - -StdMeshers_LengthFromEdgesPy::~StdMeshers_LengthFromEdgesPy() -{ -} - -Py::Object StdMeshers_LengthFromEdgesPy::setMode(const Py::Tuple& args) -{ - hypothesis()->SetMode((int)Py::Int(args[0])); - return Py::None(); -} - -Py::Object StdMeshers_LengthFromEdgesPy::getMode(const Py::Tuple& args) -{ - return Py::Int(hypothesis()->GetMode()); -} - -// ---------------------------------------------------------------------------- - -void StdMeshers_LayerDistributionPy::init_type(PyObject* module) -{ - behaviors().name("StdMeshers_LayerDistribution"); - behaviors().doc("StdMeshers_LayerDistribution"); - add_varargs_method("setLayerDistribution", - &StdMeshers_LayerDistributionPy::setLayerDistribution, - "setLayerDistribution()"); - add_varargs_method("getLayerDistribution", - &StdMeshers_LayerDistributionPy::getLayerDistribution, - "getLayerDistribution()"); - SMESH_HypothesisPyBase::init_type(module); -} - -StdMeshers_LayerDistributionPy::StdMeshers_LayerDistributionPy(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_HypothesisPyBase(new StdMeshers_LayerDistribution(hypId, studyId, gen)) -{ -} - -StdMeshers_LayerDistributionPy::~StdMeshers_LayerDistributionPy() -{ -} - -Py::Object StdMeshers_LayerDistributionPy::setLayerDistribution(const Py::Tuple& args) -{ - return Py::None(); -} - -Py::Object StdMeshers_LayerDistributionPy::getLayerDistribution(const Py::Tuple& args) -{ - //return hypothesis()->GetLayerDistribution(); - return Py::None(); -} +/*************************************************************************** + * Copyright (c) 2010 Werner Mayer * + * * + * 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 "HypothesisPy.h" +#include "FemMeshPy.h" +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include + +using namespace Fem; + + +HypothesisPy::HypothesisPy(boost::shared_ptr h) + : hyp(h) +{ +} + +HypothesisPy::~HypothesisPy() +{ +} + +// ---------------------------------------------------------------------------- + +template +void SMESH_HypothesisPy::init_type(PyObject* module) +{ + // you must have overwritten the virtual functions + SMESH_HypothesisPy::behaviors().supportRepr(); + SMESH_HypothesisPy::behaviors().supportGetattr(); + SMESH_HypothesisPy::behaviors().supportSetattr(); + SMESH_HypothesisPy::behaviors().type_object()->tp_new = &PyMake; + + SMESH_HypothesisPy::add_varargs_method("setLibName", &SMESH_HypothesisPy::setLibName, "setLibName(String)"); + SMESH_HypothesisPy::add_varargs_method("getLibName", &SMESH_HypothesisPy::getLibName, "String getLibName()"); + SMESH_HypothesisPy::add_varargs_method("setParameters", &SMESH_HypothesisPy::setParameters, "setParameters(String)"); + SMESH_HypothesisPy::add_varargs_method("getParameters", &SMESH_HypothesisPy::getParameters, "String getParameters()"); + SMESH_HypothesisPy::add_varargs_method("setLastParameters", &SMESH_HypothesisPy::setLastParameters, "setLastParameters(String)"); + SMESH_HypothesisPy::add_varargs_method("getLastParameters", &SMESH_HypothesisPy::getLastParameters, "String getLastParameters()"); + SMESH_HypothesisPy::add_varargs_method("clearParameters", &SMESH_HypothesisPy::clearParameters, "clearParameters()"); + SMESH_HypothesisPy::add_varargs_method("isAuxiliary", &SMESH_HypothesisPy::isAuxiliary, "Bool isAuxiliary()"); + SMESH_HypothesisPy::add_varargs_method("setParametersByMesh", &SMESH_HypothesisPy::setParametersByMesh, "setParametersByMesh(Mesh,Shape)"); + Base::Interpreter().addType(SMESH_HypothesisPy::behaviors().type_object(), + module,SMESH_HypothesisPy::behaviors().getName()); +} + +template +SMESH_HypothesisPy::SMESH_HypothesisPy(SMESH_Hypothesis* h) : hyp(h) +{ +} + +template +SMESH_HypothesisPy::~SMESH_HypothesisPy() +{ +} + +template +Py::Object SMESH_HypothesisPy::getattr(const char *name) +{ + if (strcmp(name,"this") == 0) + return Hypothesis(Py::asObject(new HypothesisPy(this->getHypothesis()))); + return Py::PythonExtension::getattr(name); +} + +template +Py::Object SMESH_HypothesisPy::repr() +{ + std::stringstream str; + str << hyp->GetName() << ", " << hyp->GetID(); + return Py::String(str.str()); +} + +template +Py::Object SMESH_HypothesisPy::setLibName(const Py::Tuple& args) +{ + std::string libName = (std::string)Py::String(args[0]); + hypothesis()->SetLibName(libName.c_str()); + return Py::None(); +} + +template +Py::Object SMESH_HypothesisPy::getLibName(const Py::Tuple& args) +{ + return Py::String(hypothesis()->GetLibName()); +} + +template +Py::Object SMESH_HypothesisPy::setParameters(const Py::Tuple& args) +{ + std::string paramName = (std::string)Py::String(args[0]); + hypothesis()->SetParameters(paramName.c_str()); + return Py::None(); +} + +template +Py::Object SMESH_HypothesisPy::getParameters(const Py::Tuple& args) +{ + return Py::String(hypothesis()->GetParameters()); +} + +template +Py::Object SMESH_HypothesisPy::setLastParameters(const Py::Tuple& args) +{ + std::string paramName = (std::string)Py::String(args[0]); + hypothesis()->SetLastParameters(paramName.c_str()); + return Py::None(); +} + +template +Py::Object SMESH_HypothesisPy::getLastParameters(const Py::Tuple& args) +{ + return Py::String(hypothesis()->GetLastParameters()); +} + +template +Py::Object SMESH_HypothesisPy::clearParameters(const Py::Tuple& args) +{ + hypothesis()->ClearParameters(); + return Py::None(); +} + +template +Py::Object SMESH_HypothesisPy::setParametersByMesh(const Py::Tuple& args) +{ + PyObject *mesh, *shape; + if (!PyArg_ParseTuple(args.ptr(), "O!O!", + &(Fem::FemMeshPy::Type), &mesh, + &(Part::TopoShapePy::Type), &shape)) + throw Py::Exception(); + Fem::FemMesh* m = static_cast(mesh)->getFemMeshPtr(); + const TopoDS_Shape& s = static_cast(shape)->getTopoShapePtr()->_Shape; + return Py::Boolean(hypothesis()->SetParametersByMesh(m->getSMesh(), s)); +} + +template +Py::Object SMESH_HypothesisPy::isAuxiliary(const Py::Tuple& args) +{ + return Py::Boolean(hypothesis()->IsAuxiliary()); +} + +template +PyObject *SMESH_HypothesisPy::PyMake(struct _typeobject *type, PyObject * args, PyObject * kwds) +{ + int hypId; + PyObject* obj; + if (!PyArg_ParseTuple(args, "iO!",&hypId,&(FemMeshPy::Type),&obj)) + return 0; + FemMesh* mesh = static_cast(obj)->getFemMeshPtr(); + return new T(hypId, 1, mesh->getGenerator()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Arithmetic1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Arithmetic1D"); + behaviors().doc("StdMeshers_Arithmetic1D"); + + add_varargs_method("setLength", &StdMeshers_Arithmetic1DPy::setLength, "setLength()"); + add_varargs_method("getLength", &StdMeshers_Arithmetic1DPy::getLength, "getLength()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Arithmetic1DPy::StdMeshers_Arithmetic1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Arithmetic1D(hypId, studyId, gen)) +{ +} + +StdMeshers_Arithmetic1DPy::~StdMeshers_Arithmetic1DPy() +{ +} + +Py::Object StdMeshers_Arithmetic1DPy::setLength(const Py::Tuple& args) +{ + hypothesis()-> + SetLength((double)Py::Float(args[0]), (bool)Py::Boolean(args[1])); + return Py::None(); +} + +Py::Object StdMeshers_Arithmetic1DPy::getLength(const Py::Tuple& args) +{ + int start; + if (!PyArg_ParseTuple(args.ptr(), "i",&start)) + throw Py::Exception(); + return Py::Float(hypothesis()-> + GetLength(start ? true : false)); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_AutomaticLengthPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_AutomaticLength"); + behaviors().doc("StdMeshers_AutomaticLength"); + + add_varargs_method("setFineness", &StdMeshers_AutomaticLengthPy::setFineness, "setFineness()"); + add_varargs_method("getFineness", &StdMeshers_AutomaticLengthPy::getFineness, "getFineness()"); + add_varargs_method("getLength", &StdMeshers_AutomaticLengthPy::getLength, "getLength()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_AutomaticLengthPy::StdMeshers_AutomaticLengthPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(0) +{ +} + +StdMeshers_AutomaticLengthPy::~StdMeshers_AutomaticLengthPy() +{ +} + +Py::Object StdMeshers_AutomaticLengthPy::setFineness(const Py::Tuple& args) +{ + double fine = (double)Py::Float(args[0]); + hypothesis()->SetFineness(fine); + return Py::None(); +} + +Py::Object StdMeshers_AutomaticLengthPy::getFineness(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetFineness()); +} + +namespace Py { + typedef ExtensionObject FemMesh; + typedef ExtensionObject TopoShape; + template<> bool FemMesh::accepts (PyObject *pyob) const + { + return (pyob && PyObject_TypeCheck(pyob, &(Fem::FemMeshPy::Type))); + } + template<> bool TopoShape::accepts (PyObject *pyob) const + { + return (pyob && PyObject_TypeCheck(pyob, &(Part::TopoShapePy::Type))); + } +} + +Py::Object StdMeshers_AutomaticLengthPy::getLength(const Py::Tuple& args) +{ + Py::FemMesh mesh(args[0]); + Py::Object shape_or_double(args[1]); + + Fem::FemMesh* m = mesh.extensionObject()->getFemMeshPtr(); + if (shape_or_double.type() == Py::Float().type()) { + double len = (double)Py::Float(shape_or_double); + return Py::Float(hypothesis()->GetLength(m->getSMesh(),len)); + } + else { + Py::TopoShape shape(shape_or_double); + const TopoDS_Shape& s = shape.extensionObject()->getTopoShapePtr()->_Shape; + return Py::Float(hypothesis()->GetLength(m->getSMesh(),s)); + } + + throw Py::Exception(); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_NotConformAllowedPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_NotConformAllowed"); + behaviors().doc("StdMeshers_NotConformAllowed"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_NotConformAllowedPy::StdMeshers_NotConformAllowedPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_NotConformAllowed(hypId, studyId, gen)) +{ +} + +StdMeshers_NotConformAllowedPy::~StdMeshers_NotConformAllowedPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_MaxLengthPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_MaxLength"); + behaviors().doc("StdMeshers_MaxLength"); + + add_varargs_method("setLength", &StdMeshers_MaxLengthPy::setLength, "setLength()"); + add_varargs_method("getLength", &StdMeshers_MaxLengthPy::getLength, "getLength()"); + add_varargs_method("havePreestimatedLength", &StdMeshers_MaxLengthPy::havePreestimatedLength, "havePreestimatedLength()"); + add_varargs_method("getPreestimatedLength", &StdMeshers_MaxLengthPy::getPreestimatedLength, "getPreestimatedLength()"); + add_varargs_method("setPreestimatedLength", &StdMeshers_MaxLengthPy::setPreestimatedLength, "setPreestimatedLength()"); + add_varargs_method("setUsePreestimatedLength", &StdMeshers_MaxLengthPy::setUsePreestimatedLength, "setUsePreestimatedLength()"); + add_varargs_method("getUsePreestimatedLength", &StdMeshers_MaxLengthPy::getUsePreestimatedLength, "getUsePreestimatedLength()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_MaxLengthPy::StdMeshers_MaxLengthPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_MaxLength(hypId, studyId, gen)) +{ +} + +StdMeshers_MaxLengthPy::~StdMeshers_MaxLengthPy() +{ +} + +Py::Object StdMeshers_MaxLengthPy::setLength(const Py::Tuple& args) +{ + hypothesis()->SetLength((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_MaxLengthPy::getLength(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetLength()); +} + +Py::Object StdMeshers_MaxLengthPy::havePreestimatedLength(const Py::Tuple& args) +{ + return Py::Boolean(hypothesis()->HavePreestimatedLength()); +} + +Py::Object StdMeshers_MaxLengthPy::getPreestimatedLength(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetPreestimatedLength()); +} + +Py::Object StdMeshers_MaxLengthPy::setPreestimatedLength(const Py::Tuple& args) +{ + hypothesis()->SetPreestimatedLength((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_MaxLengthPy::setUsePreestimatedLength(const Py::Tuple& args) +{ + hypothesis()->SetUsePreestimatedLength((bool)Py::Boolean(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_MaxLengthPy::getUsePreestimatedLength(const Py::Tuple& args) +{ + return Py::Boolean(hypothesis()->GetUsePreestimatedLength()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_LocalLengthPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_LocalLength"); + behaviors().doc("StdMeshers_LocalLength"); + + add_varargs_method("setLength", &StdMeshers_LocalLengthPy::setLength, "setLength()"); + add_varargs_method("getLength", &StdMeshers_LocalLengthPy::getLength, "getLength()"); + add_varargs_method("setPrecision", &StdMeshers_LocalLengthPy::setPrecision, "setPrecision()"); + add_varargs_method("getPrecision", &StdMeshers_LocalLengthPy::getPrecision, "getPrecision()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_LocalLengthPy::StdMeshers_LocalLengthPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_LocalLength(hypId, studyId, gen)) +{ +} + +StdMeshers_LocalLengthPy::~StdMeshers_LocalLengthPy() +{ +} + +Py::Object StdMeshers_LocalLengthPy::setLength(const Py::Tuple& args) +{ + hypothesis()->SetLength((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_LocalLengthPy::getLength(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetLength()); +} + +Py::Object StdMeshers_LocalLengthPy::setPrecision(const Py::Tuple& args) +{ + hypothesis()->SetPrecision((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_LocalLengthPy::getPrecision(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetPrecision()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_MaxElementAreaPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_MaxElementArea"); + behaviors().doc("StdMeshers_MaxElementArea"); + + add_varargs_method("setMaxArea", &StdMeshers_MaxElementAreaPy::setMaxArea, "setMaxArea()"); + add_varargs_method("getMaxArea", &StdMeshers_MaxElementAreaPy::getMaxArea, "getMaxArea()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_MaxElementAreaPy::StdMeshers_MaxElementAreaPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_MaxElementArea(hypId, studyId, gen)) +{ +} + +StdMeshers_MaxElementAreaPy::~StdMeshers_MaxElementAreaPy() +{ +} + +Py::Object StdMeshers_MaxElementAreaPy::setMaxArea(const Py::Tuple& args) +{ + hypothesis()->SetMaxArea((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_MaxElementAreaPy::getMaxArea(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetMaxArea()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_QuadranglePreferencePy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_QuadranglePreference"); + behaviors().doc("StdMeshers_QuadranglePreference"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_QuadranglePreferencePy::StdMeshers_QuadranglePreferencePy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_QuadranglePreference(hypId, studyId, gen)) +{ +} + +StdMeshers_QuadranglePreferencePy::~StdMeshers_QuadranglePreferencePy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Quadrangle_2DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Quadrangle_2D"); + behaviors().doc("StdMeshers_Quadrangle_2D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Quadrangle_2DPy::StdMeshers_Quadrangle_2DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Quadrangle_2D(hypId, studyId, gen)) +{ +} + +StdMeshers_Quadrangle_2DPy::~StdMeshers_Quadrangle_2DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Regular_1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Regular_1D"); + behaviors().doc("StdMeshers_Regular_1D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Regular_1DPy::StdMeshers_Regular_1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Regular_1D(hypId, studyId, gen)) +{ +} + +StdMeshers_Regular_1DPy::~StdMeshers_Regular_1DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_UseExisting_1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_UseExisting_1D"); + behaviors().doc("StdMeshers_UseExisting_1D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_UseExisting_1DPy::StdMeshers_UseExisting_1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_UseExisting_1D(hypId, studyId, gen)) +{ +} + +StdMeshers_UseExisting_1DPy::~StdMeshers_UseExisting_1DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_UseExisting_2DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_UseExisting_2D"); + behaviors().doc("StdMeshers_UseExisting_2D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_UseExisting_2DPy::StdMeshers_UseExisting_2DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_UseExisting_2D(hypId, studyId, gen)) +{ +} + +StdMeshers_UseExisting_2DPy::~StdMeshers_UseExisting_2DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_CompositeSegment_1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_CompositeSegment_1D"); + behaviors().doc("StdMeshers_CompositeSegment_1D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_CompositeSegment_1DPy::StdMeshers_CompositeSegment_1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_CompositeSegment_1D(hypId, studyId, gen)) +{ +} + +StdMeshers_CompositeSegment_1DPy::~StdMeshers_CompositeSegment_1DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Deflection1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Deflection1D"); + behaviors().doc("StdMeshers_Deflection1D"); + + add_varargs_method("setDeflection", &StdMeshers_Deflection1DPy::setDeflection, "setDeflection()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Deflection1DPy::StdMeshers_Deflection1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Deflection1D(hypId, studyId, gen)) +{ +} + +StdMeshers_Deflection1DPy::~StdMeshers_Deflection1DPy() +{ +} + +Py::Object StdMeshers_Deflection1DPy::setDeflection(const Py::Tuple& args) +{ + double fine = (double)Py::Float(args[0]); + hypothesis()->SetDeflection(fine); + return Py::None(); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Hexa_3DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Hexa_3D"); + behaviors().doc("StdMeshers_Hexa_3D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Hexa_3DPy::StdMeshers_Hexa_3DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Hexa_3D(hypId, studyId, gen)) +{ +} + +StdMeshers_Hexa_3DPy::~StdMeshers_Hexa_3DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_TrianglePreferencePy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_TrianglePreference"); + behaviors().doc("StdMeshers_TrianglePreference"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_TrianglePreferencePy::StdMeshers_TrianglePreferencePy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_TrianglePreference(hypId, studyId, gen)) +{ +} + +StdMeshers_TrianglePreferencePy::~StdMeshers_TrianglePreferencePy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_StartEndLengthPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_StartEndLength"); + behaviors().doc("StdMeshers_StartEndLength"); + add_varargs_method("setLength", &StdMeshers_StartEndLengthPy::setLength, "setLength()"); + add_varargs_method("getLength", &StdMeshers_StartEndLengthPy::getLength, "getLength()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_StartEndLengthPy::StdMeshers_StartEndLengthPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_StartEndLength(hypId, studyId, gen)) +{ +} + +StdMeshers_StartEndLengthPy::~StdMeshers_StartEndLengthPy() +{ +} + +Py::Object StdMeshers_StartEndLengthPy::setLength(const Py::Tuple& args) +{ + hypothesis()->SetLength((double)Py::Float(args[0]),(bool)Py::Boolean(args[1])); + return Py::None(); +} + +Py::Object StdMeshers_StartEndLengthPy::getLength(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetLength((bool)Py::Boolean(args[0]))); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_SegmentLengthAroundVertexPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_SegmentLengthAroundVertex"); + behaviors().doc("StdMeshers_SegmentLengthAroundVertex"); + add_varargs_method("setLength", &StdMeshers_SegmentLengthAroundVertexPy::setLength, "setLength()"); + add_varargs_method("getLength", &StdMeshers_SegmentLengthAroundVertexPy::getLength, "getLength()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_SegmentLengthAroundVertexPy::StdMeshers_SegmentLengthAroundVertexPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_SegmentLengthAroundVertex(hypId, studyId, gen)) +{ +} + +StdMeshers_SegmentLengthAroundVertexPy::~StdMeshers_SegmentLengthAroundVertexPy() +{ +} + +Py::Object StdMeshers_SegmentLengthAroundVertexPy::setLength(const Py::Tuple& args) +{ + hypothesis()->SetLength((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_SegmentLengthAroundVertexPy::getLength(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetLength()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_SegmentAroundVertex_0DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_SegmentAroundVertex_0D"); + behaviors().doc("StdMeshers_SegmentAroundVertex_0D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_SegmentAroundVertex_0DPy::StdMeshers_SegmentAroundVertex_0DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_SegmentAroundVertex_0D(hypId, studyId, gen)) +{ +} + +StdMeshers_SegmentAroundVertex_0DPy::~StdMeshers_SegmentAroundVertex_0DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_RadialPrism_3DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_RadialPrism_3D"); + behaviors().doc("StdMeshers_RadialPrism_3D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_RadialPrism_3DPy::StdMeshers_RadialPrism_3DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_RadialPrism_3D(hypId, studyId, gen)) +{ +} + +StdMeshers_RadialPrism_3DPy::~StdMeshers_RadialPrism_3DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_QuadraticMeshPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_QuadraticMesh"); + behaviors().doc("StdMeshers_QuadraticMesh"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_QuadraticMeshPy::StdMeshers_QuadraticMeshPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_QuadraticMesh(hypId, studyId, gen)) +{ +} + +StdMeshers_QuadraticMeshPy::~StdMeshers_QuadraticMeshPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_ProjectionSource3DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_ProjectionSource3D"); + behaviors().doc("StdMeshers_ProjectionSource3D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_ProjectionSource3DPy::StdMeshers_ProjectionSource3DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_ProjectionSource3D(hypId, studyId, gen)) +{ +} + +StdMeshers_ProjectionSource3DPy::~StdMeshers_ProjectionSource3DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_ProjectionSource2DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_ProjectionSource2D"); + behaviors().doc("StdMeshers_ProjectionSource2D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_ProjectionSource2DPy::StdMeshers_ProjectionSource2DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_ProjectionSource2D(hypId, studyId, gen)) +{ +} + +StdMeshers_ProjectionSource2DPy::~StdMeshers_ProjectionSource2DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_ProjectionSource1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_ProjectionSource1D"); + behaviors().doc("StdMeshers_ProjectionSource1D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_ProjectionSource1DPy::StdMeshers_ProjectionSource1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_ProjectionSource1D(hypId, studyId, gen)) +{ +} + +StdMeshers_ProjectionSource1DPy::~StdMeshers_ProjectionSource1DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Projection_3DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Projection_3D"); + behaviors().doc("StdMeshers_Projection_3D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Projection_3DPy::StdMeshers_Projection_3DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Projection_3D(hypId, studyId, gen)) +{ +} + +StdMeshers_Projection_3DPy::~StdMeshers_Projection_3DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Projection_2DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Projection_2D"); + behaviors().doc("StdMeshers_Projection_2D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Projection_2DPy::StdMeshers_Projection_2DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Projection_2D(hypId, studyId, gen)) +{ +} + +StdMeshers_Projection_2DPy::~StdMeshers_Projection_2DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Projection_1DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Projection_1D"); + behaviors().doc("StdMeshers_Projection_1D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Projection_1DPy::StdMeshers_Projection_1DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Projection_1D(hypId, studyId, gen)) +{ +} + +StdMeshers_Projection_1DPy::~StdMeshers_Projection_1DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_Prism_3DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_Prism_3D"); + behaviors().doc("StdMeshers_Prism_3D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_Prism_3DPy::StdMeshers_Prism_3DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_Prism_3D(hypId, studyId, gen)) +{ +} + +StdMeshers_Prism_3DPy::~StdMeshers_Prism_3DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_NumberOfSegmentsPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_NumberOfSegments"); + behaviors().doc("StdMeshers_NumberOfSegments"); + add_varargs_method("setNumberOfSegments",&StdMeshers_NumberOfSegmentsPy::setNumSegm,"setNumberOfSegments()"); + add_varargs_method("getNumberOfSegments",&StdMeshers_NumberOfSegmentsPy::getNumSegm,"getNumberOfSegments()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_NumberOfSegmentsPy::StdMeshers_NumberOfSegmentsPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_NumberOfSegments(hypId, studyId, gen)) +{ +} + +StdMeshers_NumberOfSegmentsPy::~StdMeshers_NumberOfSegmentsPy() +{ +} + +Py::Object StdMeshers_NumberOfSegmentsPy::setNumSegm(const Py::Tuple& args) +{ + hypothesis()->SetNumberOfSegments((int)Py::Int(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_NumberOfSegmentsPy::getNumSegm(const Py::Tuple& args) +{ + return Py::Int(hypothesis()->GetNumberOfSegments()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_NumberOfLayersPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_NumberOfLayers"); + behaviors().doc("StdMeshers_NumberOfLayers"); + add_varargs_method("setNumberOfLayers",&StdMeshers_NumberOfLayersPy::setNumLayers,"setNumberOfLayers()"); + add_varargs_method("getNumberOfLayers",&StdMeshers_NumberOfLayersPy::getNumLayers,"getNumberOfLayers()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_NumberOfLayersPy::StdMeshers_NumberOfLayersPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_NumberOfLayers(hypId, studyId, gen)) +{ +} + +StdMeshers_NumberOfLayersPy::~StdMeshers_NumberOfLayersPy() +{ +} + +Py::Object StdMeshers_NumberOfLayersPy::setNumLayers(const Py::Tuple& args) +{ + hypothesis()->SetNumberOfLayers((int)Py::Int(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_NumberOfLayersPy::getNumLayers(const Py::Tuple& args) +{ + return Py::Int(hypothesis()->GetNumberOfLayers()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_MEFISTO_2DPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_MEFISTO_2D"); + behaviors().doc("StdMeshers_MEFISTO_2D"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_MEFISTO_2DPy::StdMeshers_MEFISTO_2DPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_MEFISTO_2D(hypId, studyId, gen)) +{ +} + +StdMeshers_MEFISTO_2DPy::~StdMeshers_MEFISTO_2DPy() +{ +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_MaxElementVolumePy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_MaxElementVolume"); + behaviors().doc("StdMeshers_MaxElementVolume"); + add_varargs_method("setMaxVolume",&StdMeshers_MaxElementVolumePy::setMaxVolume,"setMaxVolume()"); + add_varargs_method("getMaxVolume",&StdMeshers_MaxElementVolumePy::getMaxVolume,"getMaxVolume()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_MaxElementVolumePy::StdMeshers_MaxElementVolumePy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_MaxElementVolume(hypId, studyId, gen)) +{ +} + +StdMeshers_MaxElementVolumePy::~StdMeshers_MaxElementVolumePy() +{ +} + +Py::Object StdMeshers_MaxElementVolumePy::setMaxVolume(const Py::Tuple& args) +{ + hypothesis()->SetMaxVolume((double)Py::Float(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_MaxElementVolumePy::getMaxVolume(const Py::Tuple& args) +{ + return Py::Float(hypothesis()->GetMaxVolume()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_LengthFromEdgesPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_LengthFromEdges"); + behaviors().doc("StdMeshers_LengthFromEdges"); + add_varargs_method("setMode",&StdMeshers_LengthFromEdgesPy::setMode,"setMode()"); + add_varargs_method("getMode",&StdMeshers_LengthFromEdgesPy::getMode,"getMode()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_LengthFromEdgesPy::StdMeshers_LengthFromEdgesPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_LengthFromEdges(hypId, studyId, gen)) +{ +} + +StdMeshers_LengthFromEdgesPy::~StdMeshers_LengthFromEdgesPy() +{ +} + +Py::Object StdMeshers_LengthFromEdgesPy::setMode(const Py::Tuple& args) +{ + hypothesis()->SetMode((int)Py::Int(args[0])); + return Py::None(); +} + +Py::Object StdMeshers_LengthFromEdgesPy::getMode(const Py::Tuple& args) +{ + return Py::Int(hypothesis()->GetMode()); +} + +// ---------------------------------------------------------------------------- + +void StdMeshers_LayerDistributionPy::init_type(PyObject* module) +{ + behaviors().name("StdMeshers_LayerDistribution"); + behaviors().doc("StdMeshers_LayerDistribution"); + add_varargs_method("setLayerDistribution", + &StdMeshers_LayerDistributionPy::setLayerDistribution, + "setLayerDistribution()"); + add_varargs_method("getLayerDistribution", + &StdMeshers_LayerDistributionPy::getLayerDistribution, + "getLayerDistribution()"); + SMESH_HypothesisPyBase::init_type(module); +} + +StdMeshers_LayerDistributionPy::StdMeshers_LayerDistributionPy(int hypId, int studyId, SMESH_Gen* gen) + : SMESH_HypothesisPyBase(new StdMeshers_LayerDistribution(hypId, studyId, gen)) +{ +} + +StdMeshers_LayerDistributionPy::~StdMeshers_LayerDistributionPy() +{ +} + +Py::Object StdMeshers_LayerDistributionPy::setLayerDistribution(const Py::Tuple& args) +{ + return Py::None(); +} + +Py::Object StdMeshers_LayerDistributionPy::getLayerDistribution(const Py::Tuple& args) +{ + //return hypothesis()->GetLayerDistribution(); + return Py::None(); +} diff --git a/src/Mod/Mesh/App/WildMagic4/Wm4Query2Filtered.inl b/src/Mod/Mesh/App/WildMagic4/Wm4Query2Filtered.inl index 772c4c325..8306c72c3 100644 --- a/src/Mod/Mesh/App/WildMagic4/Wm4Query2Filtered.inl +++ b/src/Mod/Mesh/App/WildMagic4/Wm4Query2Filtered.inl @@ -1,105 +1,105 @@ -// Wild Magic Source Code -// David Eberly -// http://www.geometrictools.com -// Copyright (c) 1998-2007 -// -// This library is free software; you can redistribute it and/or modify it -// under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2.1 of the License, or (at -// your option) any later version. The license is available for reading at -// either of the locations: -// http://www.gnu.org/copyleft/lgpl.html -// http://www.geometrictools.com/License/WildMagicLicense.pdf -// The license applies to versions 0 through 4 of Wild Magic. -// -// Version: 4.0.0 (2006/06/28) - -namespace Wm4 -{ -//---------------------------------------------------------------------------- -template -Query2Filtered::Query2Filtered (int iVQuantity, - const Vector2* akVertex, Real fUncertainty) - : - Query2(iVQuantity,akVertex), - m_kRQuery(iVQuantity,akVertex) -{ - assert((Real)0.0 <= fUncertainty && fUncertainty <= (Real)1.0); - m_fUncertainty = fUncertainty; -} -//---------------------------------------------------------------------------- -template -Query2Filtered::~Query2Filtered () -{ -} -//---------------------------------------------------------------------------- -template -Query::Type Query2Filtered::GetType () const -{ - return Query::QT_FILTERED; -} -//---------------------------------------------------------------------------- -template -int Query2Filtered::ToLine (const Vector2& rkP, int iV0, int iV1) - const -{ - const Vector2& rkV0 = m_akVertex[iV0]; - const Vector2& rkV1 = m_akVertex[iV1]; - - Real fX0 = rkP[0] - rkV0[0]; - Real fY0 = rkP[1] - rkV0[1]; - Real fX1 = rkV1[0] - rkV0[0]; - Real fY1 = rkV1[1] - rkV0[1]; - - Real fLen0 = Math::Sqrt(fX0*fX0 + fY0*fY0); - Real fLen1 = Math::Sqrt(fX1*fX1 + fY1*fY1); - Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1; - - Real fDet2 = Det2(fX0,fY0,fX1,fY1); - if (Math::FAbs(fDet2) >= fScaledUncertainty) - { - return (fDet2 > (Real)0.0 ? +1 : (fDet2 < (Real)0.0 ? -1 : 0)); - } - - return m_kRQuery.ToLine(rkP,iV0,iV1); -} -//---------------------------------------------------------------------------- -template -int Query2Filtered::ToCircumcircle (const Vector2& rkP, int iV0, - int iV1, int iV2) const -{ - const Vector2& rkV0 = m_akVertex[iV0]; - const Vector2& rkV1 = m_akVertex[iV1]; - const Vector2& rkV2 = m_akVertex[iV2]; - - Real fS0x = rkV0[0] + rkP[0]; - Real fD0x = rkV0[0] - rkP[0]; - Real fS0y = rkV0[1] + rkP[1]; - Real fD0y = rkV0[1] - rkP[1]; - Real fS1x = rkV1[0] + rkP[0]; - Real fD1x = rkV1[0] - rkP[0]; - Real fS1y = rkV1[1] + rkP[1]; - Real fD1y = rkV1[1] - rkP[1]; - Real fS2x = rkV2[0] + rkP[0]; - Real fD2x = rkV2[0] - rkP[0]; - Real fS2y = rkV2[1] + rkP[1]; - Real fD2y = rkV2[1] - rkP[1]; - Real fZ0 = fS0x*fD0x + fS0y*fD0y; - Real fZ1 = fS1x*fD1x + fS1y*fD1y; - Real fZ2 = fS2x*fD2x + fS2y*fD2y; - - Real fLen0 = Math::Sqrt(fD0x*fD0x + fD0y*fD0y + fZ0*fZ0); - Real fLen1 = Math::Sqrt(fD1x*fD1x + fD1y*fD1y + fZ1*fZ1); - Real fLen2 = Math::Sqrt(fD2x*fD2x + fD2y*fD2y + fZ2*fZ2); - Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1*fLen2; - - Real fDet3 = Det3(fD0x,fD0y,fZ0,fD1x,fD1y,fZ1,fD2x,fD2y,fZ2); - if (Math::FAbs(fDet3) >= fScaledUncertainty) - { - return (fDet3 < (Real)0.0 ? 1 : (fDet3 > (Real)0.0 ? -1 : 0)); - } - - return m_kRQuery.ToCircumcircle(rkP,iV0,iV1,iV2); -} -//---------------------------------------------------------------------------- -} //namespace Wm4 +// Wild Magic Source Code +// David Eberly +// http://www.geometrictools.com +// Copyright (c) 1998-2007 +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or (at +// your option) any later version. The license is available for reading at +// either of the locations: +// http://www.gnu.org/copyleft/lgpl.html +// http://www.geometrictools.com/License/WildMagicLicense.pdf +// The license applies to versions 0 through 4 of Wild Magic. +// +// Version: 4.0.0 (2006/06/28) + +namespace Wm4 +{ +//---------------------------------------------------------------------------- +template +Query2Filtered::Query2Filtered (int iVQuantity, + const Vector2* akVertex, Real fUncertainty) + : + Query2(iVQuantity,akVertex), + m_kRQuery(iVQuantity,akVertex) +{ + assert((Real)0.0 <= fUncertainty && fUncertainty <= (Real)1.0); + m_fUncertainty = fUncertainty; +} +//---------------------------------------------------------------------------- +template +Query2Filtered::~Query2Filtered () +{ +} +//---------------------------------------------------------------------------- +template +Query::Type Query2Filtered::GetType () const +{ + return Query::QT_FILTERED; +} +//---------------------------------------------------------------------------- +template +int Query2Filtered::ToLine (const Vector2& rkP, int iV0, int iV1) + const +{ + const Vector2& rkV0 = m_akVertex[iV0]; + const Vector2& rkV1 = m_akVertex[iV1]; + + Real fX0 = rkP[0] - rkV0[0]; + Real fY0 = rkP[1] - rkV0[1]; + Real fX1 = rkV1[0] - rkV0[0]; + Real fY1 = rkV1[1] - rkV0[1]; + + Real fLen0 = Math::Sqrt(fX0*fX0 + fY0*fY0); + Real fLen1 = Math::Sqrt(fX1*fX1 + fY1*fY1); + Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1; + + Real fDet2 = this->Det2(fX0,fY0,fX1,fY1); + if (Math::FAbs(fDet2) >= fScaledUncertainty) + { + return (fDet2 > (Real)0.0 ? +1 : (fDet2 < (Real)0.0 ? -1 : 0)); + } + + return m_kRQuery.ToLine(rkP,iV0,iV1); +} +//---------------------------------------------------------------------------- +template +int Query2Filtered::ToCircumcircle (const Vector2& rkP, int iV0, + int iV1, int iV2) const +{ + const Vector2& rkV0 = m_akVertex[iV0]; + const Vector2& rkV1 = m_akVertex[iV1]; + const Vector2& rkV2 = m_akVertex[iV2]; + + Real fS0x = rkV0[0] + rkP[0]; + Real fD0x = rkV0[0] - rkP[0]; + Real fS0y = rkV0[1] + rkP[1]; + Real fD0y = rkV0[1] - rkP[1]; + Real fS1x = rkV1[0] + rkP[0]; + Real fD1x = rkV1[0] - rkP[0]; + Real fS1y = rkV1[1] + rkP[1]; + Real fD1y = rkV1[1] - rkP[1]; + Real fS2x = rkV2[0] + rkP[0]; + Real fD2x = rkV2[0] - rkP[0]; + Real fS2y = rkV2[1] + rkP[1]; + Real fD2y = rkV2[1] - rkP[1]; + Real fZ0 = fS0x*fD0x + fS0y*fD0y; + Real fZ1 = fS1x*fD1x + fS1y*fD1y; + Real fZ2 = fS2x*fD2x + fS2y*fD2y; + + Real fLen0 = Math::Sqrt(fD0x*fD0x + fD0y*fD0y + fZ0*fZ0); + Real fLen1 = Math::Sqrt(fD1x*fD1x + fD1y*fD1y + fZ1*fZ1); + Real fLen2 = Math::Sqrt(fD2x*fD2x + fD2y*fD2y + fZ2*fZ2); + Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1*fLen2; + + Real fDet3 = this->Det3(fD0x,fD0y,fZ0,fD1x,fD1y,fZ1,fD2x,fD2y,fZ2); + if (Math::FAbs(fDet3) >= fScaledUncertainty) + { + return (fDet3 < (Real)0.0 ? 1 : (fDet3 > (Real)0.0 ? -1 : 0)); + } + + return m_kRQuery.ToCircumcircle(rkP,iV0,iV1,iV2); +} +//---------------------------------------------------------------------------- +} //namespace Wm4 diff --git a/src/Mod/Mesh/App/WildMagic4/Wm4Query3Filtered.inl b/src/Mod/Mesh/App/WildMagic4/Wm4Query3Filtered.inl index 45a723996..75224ee52 100644 --- a/src/Mod/Mesh/App/WildMagic4/Wm4Query3Filtered.inl +++ b/src/Mod/Mesh/App/WildMagic4/Wm4Query3Filtered.inl @@ -1,129 +1,129 @@ -// Wild Magic Source Code -// David Eberly -// http://www.geometrictools.com -// Copyright (c) 1998-2007 -// -// This library is free software; you can redistribute it and/or modify it -// under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2.1 of the License, or (at -// your option) any later version. The license is available for reading at -// either of the locations: -// http://www.gnu.org/copyleft/lgpl.html -// http://www.geometrictools.com/License/WildMagicLicense.pdf -// The license applies to versions 0 through 4 of Wild Magic. -// -// Version: 4.0.0 (2006/06/28) - -namespace Wm4 -{ -//---------------------------------------------------------------------------- -template -Query3Filtered::Query3Filtered (int iVQuantity, - const Vector3* akVertex, Real fUncertainty) - : - Query3(iVQuantity,akVertex), - m_kRQuery(iVQuantity,akVertex) -{ - assert((Real)0.0 <= fUncertainty && fUncertainty <= (Real)1.0); - m_fUncertainty = fUncertainty; -} -//---------------------------------------------------------------------------- -template -Query3Filtered::~Query3Filtered () -{ -} -//---------------------------------------------------------------------------- -template -Query::Type Query3Filtered::GetType () const -{ - return Query::QT_FILTERED; -} -//---------------------------------------------------------------------------- -template -int Query3Filtered::ToPlane (const Vector3& rkP, int iV0, int iV1, - int iV2) const -{ - const Vector3& rkV0 = m_akVertex[iV0]; - const Vector3& rkV1 = m_akVertex[iV1]; - const Vector3& rkV2 = m_akVertex[iV2]; - - Real fX0 = rkP[0] - rkV0[0]; - Real fY0 = rkP[1] - rkV0[1]; - Real fZ0 = rkP[2] - rkV0[2]; - Real fX1 = rkV1[0] - rkV0[0]; - Real fY1 = rkV1[1] - rkV0[1]; - Real fZ1 = rkV1[2] - rkV0[2]; - Real fX2 = rkV2[0] - rkV0[0]; - Real fY2 = rkV2[1] - rkV0[1]; - Real fZ2 = rkV2[2] - rkV0[2]; - - Real fLen0 = Math::Sqrt(fX0*fX0 + fY0*fY0 + fZ0*fZ0); - Real fLen1 = Math::Sqrt(fX1*fX1 + fY1*fY1 + fZ1*fZ1); - Real fLen2 = Math::Sqrt(fX2*fX2 + fY2*fY2 + fZ2*fZ2); - Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1*fLen2; - - Real fDet3 = Det3(fX0,fY0,fZ0,fX1,fY1,fZ1,fX2,fY2,fZ2); - if (Math::FAbs(fDet3) >= fScaledUncertainty) - { - return (fDet3 > (Real)0.0 ? +1 : (fDet3 < (Real)0.0 ? -1 : 0)); - } - - return m_kRQuery.ToPlane(rkP,iV0,iV1,iV2); -} -//---------------------------------------------------------------------------- -template -int Query3Filtered::ToCircumsphere (const Vector3& rkP, int iV0, - int iV1, int iV2, int iV3) const -{ - const Vector3& rkV0 = m_akVertex[iV0]; - const Vector3& rkV1 = m_akVertex[iV1]; - const Vector3& rkV2 = m_akVertex[iV2]; - const Vector3& rkV3 = m_akVertex[iV3]; - - Real fS0x = rkV0[0] + rkP[0]; - Real fD0x = rkV0[0] - rkP[0]; - Real fS0y = rkV0[1] + rkP[1]; - Real fD0y = rkV0[1] - rkP[1]; - Real fS0z = rkV0[2] + rkP[2]; - Real fD0z = rkV0[2] - rkP[2]; - Real fS1x = rkV1[0] + rkP[0]; - Real fD1x = rkV1[0] - rkP[0]; - Real fS1y = rkV1[1] + rkP[1]; - Real fD1y = rkV1[1] - rkP[1]; - Real fS1z = rkV1[2] + rkP[2]; - Real fD1z = rkV1[2] - rkP[2]; - Real fS2x = rkV2[0] + rkP[0]; - Real fD2x = rkV2[0] - rkP[0]; - Real fS2y = rkV2[1] + rkP[1]; - Real fD2y = rkV2[1] - rkP[1]; - Real fS2z = rkV2[2] + rkP[2]; - Real fD2z = rkV2[2] - rkP[2]; - Real fS3x = rkV3[0] + rkP[0]; - Real fD3x = rkV3[0] - rkP[0]; - Real fS3y = rkV3[1] + rkP[1]; - Real fD3y = rkV3[1] - rkP[1]; - Real fS3z = rkV3[2] + rkP[2]; - Real fD3z = rkV3[2] - rkP[2]; - Real fW0 = fS0x*fD0x + fS0y*fD0y + fS0z*fD0z; - Real fW1 = fS1x*fD1x + fS1y*fD1y + fS1z*fD1z; - Real fW2 = fS2x*fD2x + fS2y*fD2y + fS2z*fD2z; - Real fW3 = fS3x*fD3x + fS3y*fD3y + fS3z*fD3z; - - Real fLen0 = Math::Sqrt(fD0x*fD0x+fD0y*fD0y+fD0z*fD0z+fW0*fW0); - Real fLen1 = Math::Sqrt(fD1x*fD1x+fD1y*fD1y+fD1z*fD1z+fW1*fW1); - Real fLen2 = Math::Sqrt(fD2x*fD2x+fD2y*fD2y+fD2z*fD2z+fW2*fW2); - Real fLen3 = Math::Sqrt(fD3x*fD3x+fD3y*fD3y+fD3z*fD3z+fW3*fW3); - Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1*fLen2*fLen3; - - Real fDet4 = Det4(fD0x,fD0y,fD0z,fW0,fD1x,fD1y,fD1z,fW1,fD2x, - fD2y,fD2z,fW2,fD3x,fD3y,fD3z,fW3); - - if (Math::FAbs(fDet4) >= fScaledUncertainty) - { - return (fDet4 > (Real)0.0 ? 1 : (fDet4 < (Real)0.0 ? -1 : 0)); - } - - return m_kRQuery.ToCircumsphere(rkP,iV0,iV1,iV2,iV3); -} -//---------------------------------------------------------------------------- -} //namespace Wm4 +// Wild Magic Source Code +// David Eberly +// http://www.geometrictools.com +// Copyright (c) 1998-2007 +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or (at +// your option) any later version. The license is available for reading at +// either of the locations: +// http://www.gnu.org/copyleft/lgpl.html +// http://www.geometrictools.com/License/WildMagicLicense.pdf +// The license applies to versions 0 through 4 of Wild Magic. +// +// Version: 4.0.0 (2006/06/28) + +namespace Wm4 +{ +//---------------------------------------------------------------------------- +template +Query3Filtered::Query3Filtered (int iVQuantity, + const Vector3* akVertex, Real fUncertainty) + : + Query3(iVQuantity,akVertex), + m_kRQuery(iVQuantity,akVertex) +{ + assert((Real)0.0 <= fUncertainty && fUncertainty <= (Real)1.0); + m_fUncertainty = fUncertainty; +} +//---------------------------------------------------------------------------- +template +Query3Filtered::~Query3Filtered () +{ +} +//---------------------------------------------------------------------------- +template +Query::Type Query3Filtered::GetType () const +{ + return Query::QT_FILTERED; +} +//---------------------------------------------------------------------------- +template +int Query3Filtered::ToPlane (const Vector3& rkP, int iV0, int iV1, + int iV2) const +{ + const Vector3& rkV0 = m_akVertex[iV0]; + const Vector3& rkV1 = m_akVertex[iV1]; + const Vector3& rkV2 = m_akVertex[iV2]; + + Real fX0 = rkP[0] - rkV0[0]; + Real fY0 = rkP[1] - rkV0[1]; + Real fZ0 = rkP[2] - rkV0[2]; + Real fX1 = rkV1[0] - rkV0[0]; + Real fY1 = rkV1[1] - rkV0[1]; + Real fZ1 = rkV1[2] - rkV0[2]; + Real fX2 = rkV2[0] - rkV0[0]; + Real fY2 = rkV2[1] - rkV0[1]; + Real fZ2 = rkV2[2] - rkV0[2]; + + Real fLen0 = Math::Sqrt(fX0*fX0 + fY0*fY0 + fZ0*fZ0); + Real fLen1 = Math::Sqrt(fX1*fX1 + fY1*fY1 + fZ1*fZ1); + Real fLen2 = Math::Sqrt(fX2*fX2 + fY2*fY2 + fZ2*fZ2); + Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1*fLen2; + + Real fDet3 = this->Det3(fX0,fY0,fZ0,fX1,fY1,fZ1,fX2,fY2,fZ2); + if (Math::FAbs(fDet3) >= fScaledUncertainty) + { + return (fDet3 > (Real)0.0 ? +1 : (fDet3 < (Real)0.0 ? -1 : 0)); + } + + return m_kRQuery.ToPlane(rkP,iV0,iV1,iV2); +} +//---------------------------------------------------------------------------- +template +int Query3Filtered::ToCircumsphere (const Vector3& rkP, int iV0, + int iV1, int iV2, int iV3) const +{ + const Vector3& rkV0 = m_akVertex[iV0]; + const Vector3& rkV1 = m_akVertex[iV1]; + const Vector3& rkV2 = m_akVertex[iV2]; + const Vector3& rkV3 = m_akVertex[iV3]; + + Real fS0x = rkV0[0] + rkP[0]; + Real fD0x = rkV0[0] - rkP[0]; + Real fS0y = rkV0[1] + rkP[1]; + Real fD0y = rkV0[1] - rkP[1]; + Real fS0z = rkV0[2] + rkP[2]; + Real fD0z = rkV0[2] - rkP[2]; + Real fS1x = rkV1[0] + rkP[0]; + Real fD1x = rkV1[0] - rkP[0]; + Real fS1y = rkV1[1] + rkP[1]; + Real fD1y = rkV1[1] - rkP[1]; + Real fS1z = rkV1[2] + rkP[2]; + Real fD1z = rkV1[2] - rkP[2]; + Real fS2x = rkV2[0] + rkP[0]; + Real fD2x = rkV2[0] - rkP[0]; + Real fS2y = rkV2[1] + rkP[1]; + Real fD2y = rkV2[1] - rkP[1]; + Real fS2z = rkV2[2] + rkP[2]; + Real fD2z = rkV2[2] - rkP[2]; + Real fS3x = rkV3[0] + rkP[0]; + Real fD3x = rkV3[0] - rkP[0]; + Real fS3y = rkV3[1] + rkP[1]; + Real fD3y = rkV3[1] - rkP[1]; + Real fS3z = rkV3[2] + rkP[2]; + Real fD3z = rkV3[2] - rkP[2]; + Real fW0 = fS0x*fD0x + fS0y*fD0y + fS0z*fD0z; + Real fW1 = fS1x*fD1x + fS1y*fD1y + fS1z*fD1z; + Real fW2 = fS2x*fD2x + fS2y*fD2y + fS2z*fD2z; + Real fW3 = fS3x*fD3x + fS3y*fD3y + fS3z*fD3z; + + Real fLen0 = Math::Sqrt(fD0x*fD0x+fD0y*fD0y+fD0z*fD0z+fW0*fW0); + Real fLen1 = Math::Sqrt(fD1x*fD1x+fD1y*fD1y+fD1z*fD1z+fW1*fW1); + Real fLen2 = Math::Sqrt(fD2x*fD2x+fD2y*fD2y+fD2z*fD2z+fW2*fW2); + Real fLen3 = Math::Sqrt(fD3x*fD3x+fD3y*fD3y+fD3z*fD3z+fW3*fW3); + Real fScaledUncertainty = m_fUncertainty*fLen0*fLen1*fLen2*fLen3; + + Real fDet4 = this->Det4(fD0x,fD0y,fD0z,fW0,fD1x,fD1y,fD1z,fW1,fD2x, + fD2y,fD2z,fW2,fD3x,fD3y,fD3z,fW3); + + if (Math::FAbs(fDet4) >= fScaledUncertainty) + { + return (fDet4 > (Real)0.0 ? 1 : (fDet4 < (Real)0.0 ? -1 : 0)); + } + + return m_kRQuery.ToCircumsphere(rkP,iV0,iV1,iV2,iV3); +} +//---------------------------------------------------------------------------- +} //namespace Wm4 From af3eefbb5b44e078c6f58a4e388d4004aea5e347 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 13 May 2012 14:56:24 -0300 Subject: [PATCH 149/517] Small fixes to wiki download scripts --- src/Tools/offlinedoc/buildwikiindex.py | 43 ++++++++++++++++++++++---- src/Tools/offlinedoc/downloadwiki.py | 5 ++- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/Tools/offlinedoc/buildwikiindex.py b/src/Tools/offlinedoc/buildwikiindex.py index 581ef0d3e..f7cee86c8 100755 --- a/src/Tools/offlinedoc/buildwikiindex.py +++ b/src/Tools/offlinedoc/buildwikiindex.py @@ -42,6 +42,7 @@ NORETRIEVE = ['Manual','Developer_hub','Power_users_hub','Users_hub','Source_doc GETTRANSLATIONS = False # Set true if you want to get the translations too. MAXFAIL = 3 # max number of retries if download fails VERBOSE = True # to display what's going on. Otherwise, runs totally silent. +WRITETHROUGH = True # if true, fetched files are constantly written to disk, in case of failure. # END CONFIGURATION ############################################## @@ -52,8 +53,24 @@ def crawl(): todolist = [] processed = [] count = 1 - indexpages,imgs = get(INDEX) - todolist.extend(indexpages) + if os.path.exists("wikifiles.txt"): + f = open("wikifiles.txt","r") + if VERBOSE: print "Reading existing list..." + for l in f.readlines(): + if l.strip() != "": + if VERBOSE: print "Adding ",l + processed.append(l.strip()) + f.close() + if os.path.exists("todolist.txt"): + f = open("todolist.txt","r") + if VERBOSE: print "Reading existing todo list..." + for l in f.readlines(): + if l.strip() != "": + todolist.append(l.strip()) + f.close() + else: + indexpages,imgs = get(INDEX) + todolist.extend(indexpages) while todolist: targetpage = todolist.pop() if not targetpage in NORETRIEVE: @@ -66,8 +83,12 @@ def crawl(): for p in pages: if (not (p in todolist)) and (not (p in processed)): todolist.append(p) + if WRITETHROUGH: + writeList(processed) + writeList(todolist,"todolist.txt") if VERBOSE: print "Fetched ", count, " pages" - writeList(processed) + if not WRITETHROUGH: + writeList(processed) return 0 def get(page): @@ -136,12 +157,22 @@ def fetchpage(page): failcount += 1 print 'Error: unable to fetch page ' + page -def writeList(pages): - f = open("wikifiles.txt","wb") +def cleanList(pagelist): + "cleans the list" + npages = [] + for p in pagelist: + if not p in npages: + if not "redlink" in p: + npages.append(p) + return npages + +def writeList(pages,filename="wikifiles.txt"): + pages = cleanList(pages) + f = open(filename,"wb") for p in pages: f.write(p+"\n") f.close() - if VERBOSE: print "written wikifiles.txt" + if VERBOSE: print "written ",filename if __name__ == "__main__": crawl() diff --git a/src/Tools/offlinedoc/downloadwiki.py b/src/Tools/offlinedoc/downloadwiki.py index 758910766..50f88a2eb 100755 --- a/src/Tools/offlinedoc/downloadwiki.py +++ b/src/Tools/offlinedoc/downloadwiki.py @@ -236,6 +236,9 @@ def fetchpage(page): def fetchimage(imagelink): "retrieves given image from the wiki and saves it" + if imagelink[0:5] == "File:": + print "Skipping file page link" + return filename = re.findall('.*/(.*)',imagelink)[0] print "saving",filename if not exists(filename,image=True): @@ -263,7 +266,7 @@ def local(page,image=False): def exists(page,image=False): "checks if given page/image already exists" - path = local(page,image) + path = local(page.replace("/","-"),image) if os.path.exists(path): return True return False From 958246985758e44864b461bcd0cb2eeaf13a30ba Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 13 May 2012 20:47:20 -0300 Subject: [PATCH 150/517] Minor tweaks to Arch icons --- src/Mod/Arch/Makefile.am | 4 +- src/Mod/Arch/Resources/Arch.qrc | 2 + src/Mod/Arch/Resources/icons/Arch_Roof.svg | 406 ++++++++++++++++++ .../Arch/Resources/icons/Arch_Roof_Tree.svg | 397 +++++++++++++++++ .../Arch/Resources/icons/Arch_Site_Tree.svg | 18 +- .../Arch/Resources/icons/Arch_Wall_Tree.svg | 28 +- 6 files changed, 831 insertions(+), 24 deletions(-) create mode 100644 src/Mod/Arch/Resources/icons/Arch_Roof.svg create mode 100644 src/Mod/Arch/Resources/icons/Arch_Roof_Tree.svg diff --git a/src/Mod/Arch/Makefile.am b/src/Mod/Arch/Makefile.am index e26e085eb..61917f8f7 100644 --- a/src/Mod/Arch/Makefile.am +++ b/src/Mod/Arch/Makefile.am @@ -59,6 +59,8 @@ EXTRA_DIST = \ Resources/icons/Arch_Structure_Tree.svg \ Resources/icons/Arch_Window_Tree.svg \ Resources/icons/Arch_Axis.svg \ - Resources/icons/Arch_Axis_Tree.svg + Resources/icons/Arch_Axis_Tree.svg \ + Resources/icons/Arch_Roof.svg \ + Resources/icons/Arch_Roof_Tree.svg Resources/ui/archprefs-base.ui diff --git a/src/Mod/Arch/Resources/Arch.qrc b/src/Mod/Arch/Resources/Arch.qrc index 7d305d710..b3667134c 100644 --- a/src/Mod/Arch/Resources/Arch.qrc +++ b/src/Mod/Arch/Resources/Arch.qrc @@ -24,6 +24,8 @@ icons/Arch_Window_Tree.svg icons/Arch_Axis.svg icons/Arch_Axis_Tree.svg + icons/Arch_Roof.svg + icons/Arch_Roof_Tree.svg ui/archprefs-base.ui translations/Arch_af.qm translations/Arch_de.qm diff --git a/src/Mod/Arch/Resources/icons/Arch_Roof.svg b/src/Mod/Arch/Resources/icons/Arch_Roof.svg new file mode 100644 index 000000000..0d72e27b0 --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_Roof.svg @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/Mod/Arch/Resources/icons/Arch_Roof_Tree.svg b/src/Mod/Arch/Resources/icons/Arch_Roof_Tree.svg new file mode 100644 index 000000000..8b105168a --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_Roof_Tree.svg @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/Mod/Arch/Resources/icons/Arch_Site_Tree.svg b/src/Mod/Arch/Resources/icons/Arch_Site_Tree.svg index 4e4bd7931..d43aee613 100644 --- a/src/Mod/Arch/Resources/icons/Arch_Site_Tree.svg +++ b/src/Mod/Arch/Resources/icons/Arch_Site_Tree.svg @@ -14,8 +14,8 @@ height="64px" id="svg2985" version="1.1" - inkscape:version="0.48.1 r9760" - sodipodi:docname="Arch_Site.svg"> + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="Arch_Site_Tree.svg"> @@ -99,7 +99,7 @@ image/svg+xml - + @@ -118,7 +118,7 @@ id="path3869" inkscape:connector-curvature="0" /> diff --git a/src/Mod/Arch/Resources/icons/Arch_Wall_Tree.svg b/src/Mod/Arch/Resources/icons/Arch_Wall_Tree.svg index 94c448db0..9ab2fe930 100644 --- a/src/Mod/Arch/Resources/icons/Arch_Wall_Tree.svg +++ b/src/Mod/Arch/Resources/icons/Arch_Wall_Tree.svg @@ -13,8 +13,8 @@ height="64px" id="svg2816" version="1.1" - inkscape:version="0.48.1 r9760" - sodipodi:docname="preferences-arch.svg"> + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="Arch_Wall_Tree.svg"> image/svg+xml - + @@ -160,7 +160,7 @@ y="59.61282" transform="matrix(0.7577145,-0.65258619,0,1,0,0)" /> @@ -191,7 +191,7 @@ id="path3849" sodipodi:nodetypes="cccccc" /> From 73d2fa9e61b09a8d636501acd6a41ece64d6f564 Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 14 May 2012 10:44:44 +0200 Subject: [PATCH 151/517] Sketcher: avoid duplicate code and unnecessary arguments --- src/Mod/Sketcher/App/Sketch.cpp | 13 ++---- src/Mod/Sketcher/App/Sketch.h | 16 ++++++- src/Mod/Sketcher/App/SketchObject.cpp | 8 ++-- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 51 ++++----------------- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 2 + 5 files changed, 35 insertions(+), 55 deletions(-) diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index 608d9da0e..969c08312 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -96,8 +96,9 @@ void Sketch::clear(void) Conflicting.clear(); } -int Sketch::setUpSketch(const std::vector &GeoList, const std::vector &ConstraintList, - bool withDiagnose, int extGeoCount) +int Sketch::setUpSketch(const std::vector &GeoList, + const std::vector &ConstraintList, + int extGeoCount) { clear(); @@ -121,11 +122,7 @@ int Sketch::setUpSketch(const std::vector &GeoList, const std: GCSsys.clearByTag(-1); GCSsys.clearByTag(-2); GCSsys.initSolution(Parameters); - - if (withDiagnose) - return diagnose(); - else - return 0; + return diagnose(); } const char* nameByType(Sketch::GeoType type) @@ -1606,7 +1603,7 @@ int Sketch::solve(void) break; } - // if successfully solved try write the parameters back + // if successfully solved try to write the parameters back if (ret == GCS::Success) { GCSsys.applySolution(); valid_solution = updateGeometry(); diff --git a/src/Mod/Sketcher/App/Sketch.h b/src/Mod/Sketcher/App/Sketch.h index ec108421b..3f22f7fdd 100644 --- a/src/Mod/Sketcher/App/Sketch.h +++ b/src/Mod/Sketcher/App/Sketch.h @@ -53,9 +53,21 @@ public: int solve(void); /// delete all geometry and constraints, leave an empty sketch void clear(void); - /// set the sketch up with geoms and constraints + /** set the sketch up with geoms and constraints + * + * returns the degree of freedom of a sketch and calculates a list of + * conflicting constraints + * + * 0 degrees of freedom correspond to a fully constrained sketch + * -1 degrees of freedom correspond to an over-constrained sketch + * positive degrees of freedom correspond to an under-constrained sketch + * + * an over-constrained sketch will always contain conflicting constraints + * a fully constrained or under-constrained sketch may contain conflicting + * constraints or may not + */ int setUpSketch(const std::vector &GeoList, const std::vector &ConstraintList, - bool withDiagnose=true, int extGeoCount=0); + int extGeoCount=0); /// return the actual geometry of the sketch a TopoShape Part::TopoShape toShape(void) const; /// add unspecified geometry diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 95aa455a7..c9e5b3845 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -97,7 +97,7 @@ App::DocumentObjectExecReturn *SketchObject::execute(void) rebuildExternalGeometry(); Sketch sketch; int dofs = sketch.setUpSketch(getCompleteGeometry(), Constraints.getValues(), - true, getExternalGeometryCount()); + getExternalGeometryCount()); if (dofs < 0) { // over-constrained sketch std::string msg="Over-constrained sketch\n"; appendConflictMsg(sketch.getConflicting(), msg); @@ -128,7 +128,7 @@ int SketchObject::hasConflicts(void) const // set up a sketch (including dofs counting and diagnosing of conflicts) Sketch sketch; int dofs = sketch.setUpSketch(getCompleteGeometry(), Constraints.getValues(), - true, getExternalGeometryCount()); + getExternalGeometryCount()); if (dofs < 0) // over-constrained sketch return -2; if (sketch.hasConflicts()) // conflicting constraints @@ -166,7 +166,7 @@ int SketchObject::setDatum(int ConstrId, double Datum) // set up a sketch (including dofs counting and diagnosing of conflicts) Sketch sketch; int dofs = sketch.setUpSketch(getCompleteGeometry(), Constraints.getValues(), - true, getExternalGeometryCount()); + getExternalGeometryCount()); int err=0; if (dofs < 0) // over-constrained sketch err = -3; @@ -192,7 +192,7 @@ int SketchObject::movePoint(int GeoId, PointPos PosId, const Base::Vector3d& toP { Sketch sketch; int dofs = sketch.setUpSketch(getCompleteGeometry(), Constraints.getValues(), - true, getExternalGeometryCount()); + getExternalGeometryCount()); if (dofs < 0) // over-constrained sketch return -1; if (sketch.hasConflicts()) // conflicting constraints diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index ee289f1d7..1618af878 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2694,42 +2694,7 @@ void ViewProviderSketch::updateData(const App::Property *prop) if (edit && (prop == &(getSketchObject()->Geometry) || &(getSketchObject()->Constraints))) { edit->FullyConstrained = false; - int dofs = edit->ActSketch.setUpSketch(getSketchObject()->getCompleteGeometry(), - getSketchObject()->Constraints.getValues(), - true, getSketchObject()->getExternalGeometryCount()); - std::string msg; - if (getSketchObject()->Geometry.getSize() == 0) { - signalSetUp(-1, 0, msg); - signalSolved(-1, 0); - } - else if (dofs < 0) { // over-constrained sketch - SketchObject::appendConflictMsg(edit->ActSketch.getConflicting(), msg); - //Base::Console().Warning("Over-constrained sketch\n%s",msg.c_str()); - signalSetUp(3, 0, msg); - signalSolved(-1,0); - } - else if (edit->ActSketch.hasConflicts()) { // conflicting constraints - SketchObject::appendConflictMsg(edit->ActSketch.getConflicting(), msg); - //Base::Console().Warning("Sketch with conflicting constraints\n%s",msg.c_str()); - signalSetUp(2, dofs, msg); - signalSolved(-1,0); - } - else if (edit->ActSketch.solve() == 0) { // solving the sketch - if (dofs == 0) { - // color the sketch as fully constrained - edit->FullyConstrained = true; - //Base::Console().Message("Fully constrained sketch\n"); - signalSetUp(0, 0, msg); - } - else { - //Base::Console().Message("Under-constrained sketch with %d degrees of freedom\n", dofs); - signalSetUp(1, dofs, msg); - } - signalSolved(0,edit->ActSketch.SolveTime); - } - else { - signalSolved(1,edit->ActSketch.SolveTime); - } + solveSketch(); draw(true); } if (edit && &(getSketchObject()->Constraints)) { @@ -2831,10 +2796,18 @@ bool ViewProviderSketch::setEdit(int ModNum) else Gui::Control().showDialog(new TaskDlgEditSketch(this)); + solveSketch(); + draw(); + + return true; +} + +void ViewProviderSketch::solveSketch(void) +{ // set up the sketch and diagnose possible conflicts int dofs = edit->ActSketch.setUpSketch(getSketchObject()->getCompleteGeometry(), getSketchObject()->Constraints.getValues(), - true, getSketchObject()->getExternalGeometryCount()); + getSketchObject()->getExternalGeometryCount()); std::string msg; if (getSketchObject()->Geometry.getSize() == 0) { signalSetUp(-1, 0, msg); @@ -2868,10 +2841,6 @@ bool ViewProviderSketch::setEdit(int ModNum) else { signalSolved(1, edit->ActSketch.SolveTime); } - - draw(); - - return true; } void ViewProviderSketch::createEditInventorNodes(void) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 572547186..234ede976 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -183,6 +183,8 @@ protected: virtual void unsetEdit(int ModNum); virtual void setEditViewer(Gui::View3DInventorViewer*, int ModNum); virtual void unsetEditViewer(Gui::View3DInventorViewer*); + /// set up and solve the sketch + void solveSketch(void); /// helper to detect whether the picked point lies on the sketch bool isPointOnSketch(const SoPickedPoint *pp) const; /// get called by the container whenever a property has been changed From 63b2b239b164425ad856e891cb05a5afcd1940f8 Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 14 May 2012 10:55:44 +0200 Subject: [PATCH 152/517] Sketcher: use low precision solving during mouse drag and code simplifications --- src/Mod/Sketcher/App/Sketch.cpp | 9 ++------- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 4 ++-- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index 969c08312..bfdc0aa3a 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -120,7 +120,6 @@ int Sketch::setUpSketch(const std::vector &GeoList, addConstraints(ConstraintList); GCSsys.clearByTag(-1); - GCSsys.clearByTag(-2); GCSsys.initSolution(Parameters); return diagnose(); } @@ -1566,7 +1565,6 @@ int Sketch::solve(void) Base::TimeInfo start_time; if (!isInitMove) { // make sure we are in single subsystem mode GCSsys.clearByTag(-1); - GCSsys.clearByTag(-2); isFine = true; } @@ -1590,13 +1588,11 @@ int Sketch::solve(void) break; case 3: // last resort: augment the system with a second subsystem and use the SQP solver solvername = "SQP(augmented system)"; - GCSsys.clearByTag(-1); - GCSsys.clearByTag(-2); InitParameters.resize(Parameters.size()); int i=0; for (std::vector::iterator it = Parameters.begin(); it != Parameters.end(); ++it, i++) { InitParameters[i] = **it; - GCSsys.addConstraintEqual(*it, &InitParameters[i], -2); + GCSsys.addConstraintEqual(*it, &InitParameters[i], -1); } GCSsys.initSolution(Parameters); ret = GCSsys.solve(isFine); @@ -1615,7 +1611,7 @@ int Sketch::solve(void) } if (soltype == 3) // cleanup temporary constraints of the augmented system - GCSsys.clearByTag(-2); + GCSsys.clearByTag(-1); if (valid_solution) { if (soltype == 1) @@ -1652,7 +1648,6 @@ int Sketch::initMove(int geoId, PointPos pos, bool fine) geoId = checkGeoId(geoId); GCSsys.clearByTag(-1); - GCSsys.clearByTag(-2); // don't try to move sketches that contain conflicting constraints if (hasConflicts()) { diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 1618af878..78841d18c 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -768,7 +768,7 @@ bool ViewProviderSketch::mouseMove(const SbVec3f &point, const SbVec3f &normal, int GeoId; Sketcher::PointPos PosId; getSketchObject()->getGeoVertexIndex(edit->DragPoint, GeoId, PosId); - edit->ActSketch.initMove(GeoId, PosId); + edit->ActSketch.initMove(GeoId, PosId, false); relative = false; xInit = 0; yInit = 0; @@ -785,7 +785,7 @@ bool ViewProviderSketch::mouseMove(const SbVec3f &point, const SbVec3f &normal, edit->PreselectCurve != -1 && edit->DragCurve != edit->PreselectCurve) { Mode = STATUS_SKETCH_DragCurve; edit->DragCurve = edit->PreselectCurve; - edit->ActSketch.initMove(edit->DragCurve, Sketcher::none); + edit->ActSketch.initMove(edit->DragCurve, Sketcher::none, false); const Part::Geometry *geo = getSketchObject()->getGeometry(edit->DragCurve); if (geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { relative = true; From ce5d9a332a75c3e02c79709f38c62311d60a0b2e Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 14 May 2012 11:28:05 +0200 Subject: [PATCH 153/517] Sketcher, Issue #0000691: detect redundant constraints and skip them if necessary --- src/Mod/Sketcher/App/Sketch.cpp | 33 +- src/Mod/Sketcher/App/Sketch.h | 19 +- src/Mod/Sketcher/App/SketchObject.cpp | 19 + src/Mod/Sketcher/App/SketchObject.h | 2 + src/Mod/Sketcher/App/freegcs/GCS.cpp | 438 ++++++++++++------ src/Mod/Sketcher/App/freegcs/GCS.h | 40 +- src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp | 3 + src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 33 +- 8 files changed, 386 insertions(+), 201 deletions(-) diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index bfdc0aa3a..59b6410a7 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -120,8 +120,11 @@ int Sketch::setUpSketch(const std::vector &GeoList, addConstraints(ConstraintList); GCSsys.clearByTag(-1); - GCSsys.initSolution(Parameters); - return diagnose(); + GCSsys.declareUnknowns(Parameters); + GCSsys.initSolution(); + GCSsys.getConflicting(Conflicting); + GCSsys.getRedundant(Redundant); + return GCSsys.dofsNumber(); } const char* nameByType(Sketch::GeoType type) @@ -1594,7 +1597,7 @@ int Sketch::solve(void) InitParameters[i] = **it; GCSsys.addConstraintEqual(*it, &InitParameters[i], -1); } - GCSsys.initSolution(Parameters); + GCSsys.initSolution(); ret = GCSsys.solve(isFine); break; } @@ -1603,8 +1606,11 @@ int Sketch::solve(void) if (ret == GCS::Success) { GCSsys.applySolution(); valid_solution = updateGeometry(); - if (!valid_solution) + if (!valid_solution) { + GCSsys.undoSolution(); + updateGeometry(); Base::Console().Warning("Invalid solution from %s solver.\n", solvername.c_str()); + } } else { valid_solution = false; //Base::Console().Log("NotSolved "); @@ -1630,11 +1636,6 @@ int Sketch::solve(void) } } // soltype - if (!valid_solution) { // undo any changes - GCSsys.undoSolution(); - updateGeometry(); - } - Base::TimeInfo end_time; //Base::Console().Log("T:%s\n",Base::TimeInfo::diffTime(start_time,end_time).c_str()); SolveTime = Base::TimeInfo::diffTimeF(start_time,end_time); @@ -1752,7 +1753,7 @@ int Sketch::initMove(int geoId, PointPos pos, bool fine) } InitParameters = MoveParameters; - GCSsys.initSolution(Parameters); + GCSsys.initSolution(); isInitMove = true; return 0; } @@ -1830,18 +1831,6 @@ Base::Vector3d Sketch::getPoint(int geoId, PointPos pos) return Base::Vector3d(); } -int Sketch::diagnose(void) -{ - Conflicting.clear(); - if (GCSsys.isInit()) { - int dofs = GCSsys.diagnose(Parameters, Conflicting); - return dofs; - } - else { - return -1; - } -} - TopoShape Sketch::toShape(void) const diff --git a/src/Mod/Sketcher/App/Sketch.h b/src/Mod/Sketcher/App/Sketch.h index 3f22f7fdd..3ea95bc4f 100644 --- a/src/Mod/Sketcher/App/Sketch.h +++ b/src/Mod/Sketcher/App/Sketch.h @@ -83,20 +83,10 @@ public: /// retrieves a point Base::Vector3d getPoint(int geoId, PointPos pos); - /** returns the degree of freedom of a sketch and calculates a list of - * conflicting constraints - * - * 0 degrees of freedom correspond to a fully constrained sketch - * -1 degrees of freedom correspond to an over-constrained sketch - * positive degrees of freedom correspond to an under-constrained sketch - * - * an over-constrained sketch will always contain conflicting constraints - * a fully constrained or under-constrained sketch may contain conflicting - * constraints or may not - */ - int diagnose(void); - bool hasConflicts(void) const { return (Conflicting.size() > 0); }; - const std::vector &getConflicting(void) const { return Conflicting; }; + bool hasConflicts(void) const { return (Conflicting.size() > 0); } + const std::vector &getConflicting(void) const { return Conflicting; } + bool hasRedundancies(void) const { return (Redundant.size() > 0); } + const std::vector &getRedundant(void) const { return Redundant; } /** set the datum of a distance or angle constraint to a certain value and solve * This can cause the solving to fail! @@ -213,6 +203,7 @@ protected: GCS::System GCSsys; int ConstraintsCounter; std::vector Conflicting; + std::vector Redundant; // solving parameters std::vector Parameters; // with memory allocation diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index c9e5b3845..8d75c5f24 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -108,6 +108,11 @@ App::DocumentObjectExecReturn *SketchObject::execute(void) appendConflictMsg(sketch.getConflicting(), msg); return new App::DocumentObjectExecReturn(msg.c_str(),this); } + if (sketch.hasRedundancies()) { // redundant constraints + std::string msg="Sketch with redundant constraints\n"; + appendRedundantMsg(sketch.getRedundant(), msg); + return new App::DocumentObjectExecReturn(msg.c_str(),this); + } // solve the sketch if (sketch.solve() != 0) @@ -1396,6 +1401,20 @@ void SketchObject::appendConflictMsg(const std::vector &conflicting, std::s msg = ss.str(); } +void SketchObject::appendRedundantMsg(const std::vector &redundant, std::string &msg) +{ + std::stringstream ss; + if (msg.length() > 0) + ss << msg; + if (redundant.size() > 0) { + ss << "The following constraints were identified as redundant and should be removed:\n" << redundant[0]; + for (unsigned int i=1; i < redundant.size(); i++) + ss << ", " << redundant[i]; + ss << "\n"; + } + msg = ss.str(); +} + PyObject *SketchObject::getPyObject(void) { if (PythonObject.is(Py::_None())) { diff --git a/src/Mod/Sketcher/App/SketchObject.h b/src/Mod/Sketcher/App/SketchObject.h index 83802d83a..cf865d405 100644 --- a/src/Mod/Sketcher/App/SketchObject.h +++ b/src/Mod/Sketcher/App/SketchObject.h @@ -136,6 +136,8 @@ public: /// generates a warning message about constraint conflicts and appends it to the given message static void appendConflictMsg(const std::vector &conflicting, std::string &msg); + /// generates a warning message about redundant constraints and appends it to the given message + static void appendRedundantMsg(const std::vector &redundant, std::string &msg); // from base class virtual PyObject *getPyObject(void); diff --git a/src/Mod/Sketcher/App/freegcs/GCS.cpp b/src/Mod/Sketcher/App/freegcs/GCS.cpp index c608c9bd0..aa850c9a2 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/freegcs/GCS.cpp @@ -41,19 +41,20 @@ typedef boost::adjacency_list Gra // System System::System() -: clist(0), +: plist(0), clist(0), c2p(), p2c(), - subsyslist(0), - reference(), - init(false) + subSystems(0), subSystemsAux(0), + reference(0), + hasUnknowns(false), hasDiagnosis(false), isInit(false) { } System::System(std::vector clist_) -: c2p(), p2c(), - subsyslist(0), - reference(), - init(false) +: plist(0), + c2p(), p2c(), + subSystems(0), subSystemsAux(0), + reference(0), + hasUnknowns(false), hasDiagnosis(false), isInit(false) { // create own (shallow) copy of constraints for (std::vector::iterator constr=clist_.begin(); @@ -125,7 +126,16 @@ System::~System() void System::clear() { - clearReference(); + plist.clear(); + pIndex.clear(); + hasUnknowns = false; + hasDiagnosis = false; + + redundant.clear(); + conflictingTags.clear(); + redundantTags.clear(); + + reference.clear(); clearSubSystems(); free(clist); c2p.clear(); @@ -148,7 +158,9 @@ void System::clearByTag(int tagId) int System::addConstraint(Constraint *constr) { - clearReference(); + isInit = false; + if (constr->getTag() >= 0) // negatively tagged constraints have no impact + hasDiagnosis = false; // on the diagnosis clist.push_back(constr); VEC_pD constr_params = constr->params(); @@ -163,12 +175,15 @@ int System::addConstraint(Constraint *constr) void System::removeConstraint(Constraint *constr) { - clearReference(); - clearSubSystems(); - std::vector::iterator it; it = std::find(clist.begin(), clist.end(), constr); + if (it == clist.end()) + return; + clist.erase(it); + if (constr->getTag() >= 0) + hasDiagnosis = false; + clearSubSystems(); VEC_pD constr_params = c2p[constr]; for (VEC_pD::const_iterator param=constr_params.begin(); @@ -545,9 +560,18 @@ void System::rescaleConstraint(int id, double coeff) clist[id]->rescale(coeff); } - -void System::initSolution(VEC_pD ¶ms) +void System::declareUnknowns(VEC_pD ¶ms) { + plist = params; + pIndex.clear(); + for (int i=0; i < int(plist.size()); ++i) + pIndex[plist[i]] = i; + hasUnknowns = true; +} + +void System::initSolution() +{ + // - Stores the current parameters values in the vector "reference" // - identifies any decoupled subsystems and partitions the original // system into corresponding components // - Stores the current parameters in the vector "reference" @@ -556,18 +580,38 @@ void System::initSolution(VEC_pD ¶ms) // - Organizes the rest of constraints into two subsystems for // tag ids >=0 and < 0 respectively and applies the // system reduction specified in the previous step - MAP_pD_I pIndex; - for (int i=0; i < int(params.size()); ++i) - pIndex[params[i]] = i; + + isInit = false; + if (!hasUnknowns) + return; + + // storing reference configuration + setReference(); + + // diagnose conflicting or redundant constraints + if (!hasDiagnosis) { + diagnose(); + if (!hasDiagnosis) + return; + } + std::vector clistR; + if (redundant.size()) { + for (std::vector::const_iterator constr=clist.begin(); + constr != clist.end(); ++constr) + if (redundant.count(*constr) == 0) + clistR.push_back(*constr); + } + else + clistR = clist; // partitioning into decoupled components Graph g; - for (int i=0; i < int(params.size() + clist.size()); i++) + for (int i=0; i < int(plist.size() + clistR.size()); i++) boost::add_vertex(g); - int cvtid = int(params.size()); - for (std::vector::const_iterator constr=clist.begin(); - constr != clist.end(); ++constr, cvtid++) { + int cvtid = int(plist.size()); + for (std::vector::const_iterator constr=clistR.begin(); + constr != clistR.end(); ++constr, cvtid++) { VEC_pD &cparams = c2p[*constr]; for (VEC_pD::const_iterator param=cparams.begin(); param != cparams.end(); ++param) { @@ -580,113 +624,131 @@ void System::initSolution(VEC_pD ¶ms) VEC_I components(boost::num_vertices(g)); int componentsSize = boost::connected_components(g, &components[0]); - clearReference(); - for (VEC_pD::const_iterator param=params.begin(); - param != params.end(); ++param) - reference[*param] = **param; - // identification of equality constraints and parameter reduction - std::set eliminated; // constraints that will be eliminated through reduction - reductionmap.clear(); + std::set reducedConstrs; // constraints that will be eliminated through reduction + reductionmaps.clear(); // destroy any maps + reductionmaps.resize(componentsSize); // create empty maps to be filled in { - VEC_pD reduced_params=params; + VEC_pD reducedParams=plist; - for (std::vector::const_iterator constr=clist.begin(); - constr != clist.end(); ++constr) { + for (std::vector::const_iterator constr=clistR.begin(); + constr != clistR.end(); ++constr) { if ((*constr)->getTag() >= 0 && (*constr)->getTypeId() == Equal) { MAP_pD_I::const_iterator it1,it2; it1 = pIndex.find((*constr)->params()[0]); it2 = pIndex.find((*constr)->params()[1]); if (it1 != pIndex.end() && it2 != pIndex.end()) { - eliminated.insert(*constr); - double *p_kept = reduced_params[it1->second]; - double *p_replaced = reduced_params[it2->second]; - for (int i=0; i < int(params.size()); ++i) - if (reduced_params[i] == p_replaced) - reduced_params[i] = p_kept; + reducedConstrs.insert(*constr); + double *p_kept = reducedParams[it1->second]; + double *p_replaced = reducedParams[it2->second]; + for (int i=0; i < int(plist.size()); ++i) + if (reducedParams[i] == p_replaced) + reducedParams[i] = p_kept; } } } - for (int i=0; i < int(params.size()); ++i) - if (params[i] != reduced_params[i]) - reductionmap[params[i]] = reduced_params[i]; + for (int i=0; i < int(plist.size()); ++i) + if (plist[i] != reducedParams[i]) { + int cid = components[i]; + reductionmaps[cid][plist[i]] = reducedParams[i]; + } } - std::vector< std::vector > clists0(componentsSize), - clists1(componentsSize), - clists2(componentsSize); - int i = int(params.size()); - for (std::vector::const_iterator constr=clist.begin(); - constr != clist.end(); ++constr, i++) { - if (eliminated.count(*constr) == 0) { - int id = components[i]; - if ((*constr)->getTag() >= 0) - clists0[id].push_back(*constr); - else if ((*constr)->getTag() == -1) // move constraints - clists1[id].push_back(*constr); - else // distance from reference constraints - clists2[id].push_back(*constr); + clists.clear(); // destroy any lists + clists.resize(componentsSize); // create empty lists to be filled in + int i = int(plist.size()); + for (std::vector::const_iterator constr=clistR.begin(); + constr != clistR.end(); ++constr, i++) { + if (reducedConstrs.count(*constr) == 0) { + int cid = components[i]; + clists[cid].push_back(*constr); } } - std::vector< std::vector > plists(componentsSize); - for (int i=0; i < int(params.size()); ++i) { - int id = components[i]; - plists[id].push_back(params[i]); + plists.clear(); // destroy any lists + plists.resize(componentsSize); // create empty lists to be filled in + for (int i=0; i < int(plist.size()); ++i) { + int cid = components[i]; + plists[cid].push_back(plist[i]); } + // calculates subSystems and subSystemsAux from clists, plists and reductionmaps clearSubSystems(); - for (int cid=0; cid < componentsSize; cid++) { - subsyslist.push_back(std::vector(0)); - if (clists0[cid].size() > 0) - subsyslist[cid].push_back(new SubSystem(clists0[cid], plists[cid], reductionmap)); - if (clists1[cid].size() > 0) - subsyslist[cid].push_back(new SubSystem(clists1[cid], plists[cid], reductionmap)); - if (clists2[cid].size() > 0) - subsyslist[cid].push_back(new SubSystem(clists2[cid], plists[cid], reductionmap)); + for (int cid=0; cid < clists.size(); cid++) { + std::vector clist0, clist1; + for (std::vector::const_iterator constr=clists[cid].begin(); + constr != clists[cid].end(); ++constr) { + if ((*constr)->getTag() >= 0) + clist0.push_back(*constr); + else // move or distance from reference constraints + clist1.push_back(*constr); + } + + subSystems.push_back(NULL); + subSystemsAux.push_back(NULL); + if (clist0.size() > 0) + subSystems[cid] = new SubSystem(clist0, plists[cid], reductionmaps[cid]); + if (clist1.size() > 0) + subSystemsAux[cid] = new SubSystem(clist1, plists[cid], reductionmaps[cid]); } - init = true; + + isInit = true; } -void System::clearReference() +void System::setReference() { - init = false; reference.clear(); + reference.reserve(plist.size()); + for (VEC_pD::const_iterator param=plist.begin(); + param != plist.end(); ++param) + reference.push_back(**param); } void System::resetToReference() { - for (MAP_pD_D::const_iterator it=reference.begin(); - it != reference.end(); ++it) - *(it->first) = it->second; + if (reference.size() == plist.size()) { + VEC_D::const_iterator ref=reference.begin(); + VEC_pD::iterator param=plist.begin(); + for (; ref != reference.end(); ++ref, ++param) + **param = *ref; + } } int System::solve(VEC_pD ¶ms, bool isFine, Algorithm alg) { - initSolution(params); + declareUnknowns(params); + initSolution(); return solve(isFine, alg); } int System::solve(bool isFine, Algorithm alg) { + if (!isInit) + return Failed; + bool isReset = false; // return success by default in order to permit coincidence constraints to be applied // even if no other system has to be solved int res = Success; - for (int cid=0; cid < int(subsyslist.size()); cid++) { - if (subsyslist[cid].size() > 0 && !isReset) { + for (int cid=0; cid < int(subSystems.size()); cid++) { + if ((subSystems[cid] || subSystemsAux[cid]) && !isReset) { resetToReference(); isReset = true; } - if (subsyslist[cid].size() == 1) - res = std::max(res, solve(subsyslist[cid][0], isFine, alg)); - else if (subsyslist[cid].size() == 2) - res = std::max(res, solve(subsyslist[cid][0], subsyslist[cid][1], isFine)); - else if (subsyslist[cid].size() > 2) - // subsystem 1 has higher priority than subsystems 2,3,... - // these subsystems act like a preconditioner - for (int i=subsyslist[cid].size()-1; i > 0; i--) - res = std::max(res, solve(subsyslist[cid][0], subsyslist[cid][i], isFine)); + if (subSystems[cid] && subSystemsAux[cid]) + res = std::max(res, solve(subSystems[cid], subSystemsAux[cid], isFine)); + else if (subSystems[cid]) + res = std::max(res, solve(subSystems[cid], isFine, alg)); + else if (subSystemsAux[cid]) + res = std::max(res, solve(subSystemsAux[cid], isFine, alg)); + } + if (res == Success) { + for (std::set::const_iterator constr=redundant.begin(); + constr != redundant.end(); constr++) + if ((*constr)->error() > XconvergenceFine) { + res = Converged; + return res; + } } return res; } @@ -1068,7 +1130,7 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) int xsizeB = subsysB->pSize(); int csizeA = subsysA->cSize(); - VEC_pD plist(xsizeA+xsizeB); + VEC_pD plistAB(xsizeA+xsizeB); { VEC_pD plistA, plistB; subsysA->getParamList(plistA); @@ -1079,10 +1141,10 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) VEC_pD::const_iterator it; it = std::set_union(plistA.begin(),plistA.end(), - plistB.begin(),plistB.end(),plist.begin()); - plist.resize(it-plist.begin()); + plistB.begin(),plistB.end(),plistAB.begin()); + plistAB.resize(it-plistAB.begin()); } - int xsize = plist.size(); + int xsize = plistAB.size(); Eigen::MatrixXd B = Eigen::MatrixXd::Identity(xsize, xsize); Eigen::MatrixXd JA(csizeA, xsize); @@ -1100,12 +1162,12 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) subsysA->redirectParams(); subsysB->redirectParams(); - subsysB->getParams(plist,x); - subsysA->getParams(plist,x); - subsysB->setParams(plist,x); // just to ensure that A and B are synchronized + subsysB->getParams(plistAB,x); + subsysA->getParams(plistAB,x); + subsysB->setParams(plistAB,x); // just to ensure that A and B are synchronized - subsysB->calcGrad(plist,grad); - subsysA->calcJacobi(plist,JA); + subsysB->calcGrad(plistAB,grad); + subsysA->calcJacobi(plistAB,JA); subsysA->calcResidual(resA); double convergence = isFine ? XconvergenceFine : XconvergenceRough; @@ -1130,7 +1192,7 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) double tau=0.5; double rho=0.5; double alpha=1; - alpha = std::min(alpha, subsysA->maxStep(plist,xdir)); + alpha = std::min(alpha, subsysA->maxStep(plistAB,xdir)); // Eq. 18.32 // double mu = lambda.lpNorm() + 0.01; @@ -1148,8 +1210,8 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) double deriv = grad.dot(xdir) - mu * resA.lpNorm<1>(); x = x0 + alpha * xdir; - subsysA->setParams(plist,x); - subsysB->setParams(plist,x); + subsysA->setParams(plistAB,x); + subsysB->setParams(plistAB,x); subsysA->calcResidual(resA); double f = subsysB->error() + mu * resA.lpNorm<1>(); @@ -1161,8 +1223,8 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) // Eigen::ComputeThinV).solve(-resA); xdir1 = -Y*resA; x += xdir1; // = x0 + alpha * xdir + xdir1 - subsysA->setParams(plist,x); - subsysB->setParams(plist,x); + subsysA->setParams(plistAB,x); + subsysB->setParams(plistAB,x); subsysA->calcResidual(resA); f = subsysB->error() + mu * resA.lpNorm<1>(); if (f < f0 + eta * alpha * deriv) @@ -1172,8 +1234,8 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) if (alpha < 1e-8) // let the linesearch fail alpha = 0.; x = x0 + alpha * xdir; - subsysA->setParams(plist,x); - subsysB->setParams(plist,x); + subsysA->setParams(plistAB,x); + subsysB->setParams(plistAB,x); subsysA->calcResidual(resA); f = subsysB->error() + mu * resA.lpNorm<1>(); if (alpha < 1e-8) // let the linesearch fail @@ -1186,8 +1248,8 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) y = grad - JA.transpose() * lambda; { - subsysB->calcGrad(plist,grad); - subsysA->calcJacobi(plist,JA); + subsysB->calcGrad(plistAB,grad); + subsysA->calcJacobi(plistAB,JA); subsysA->calcResidual(resA); } y = grad - JA.transpose() * lambda - y; // Eq. 18.13 @@ -1225,13 +1287,15 @@ int System::solve(SubSystem *subsysA, SubSystem *subsysB, bool isFine) void System::applySolution() { - for (int cid=0; cid < int(subsyslist.size()); cid++) - for (int i=subsyslist[cid].size()-1; i >= 0; i--) - subsyslist[cid][i]->applySolution(); - - for (MAP_pD_pD::const_iterator it=reductionmap.begin(); - it != reductionmap.end(); ++it) - *(it->first) = *(it->second); + for (int cid=0; cid < int(subSystems.size()); cid++) { + if (subSystemsAux[cid]) + subSystemsAux[cid]->applySolution(); + if (subSystems[cid]) + subSystems[cid]->applySolution(); + for (MAP_pD_pD::const_iterator it=reductionmaps[cid].begin(); + it != reductionmaps[cid].end(); ++it) + *(it->first) = *(it->second); + } } void System::undoSolution() @@ -1239,7 +1303,7 @@ void System::undoSolution() resetToReference(); } -int System::diagnose(VEC_pD ¶ms, VEC_I &conflictingTags) +int System::diagnose() { // Analyses the constrainess grad of the system and provides feedback // The vector "conflictingTags" will hold a group of conflicting constraints @@ -1251,22 +1315,24 @@ int System::diagnose(VEC_pD ¶ms, VEC_I &conflictingTags) // will provide no feedback about possible conflicts between // two high priority constraints. For this reason, tagging // constraints with 0 should be used carefully. - if (!isInit()) - return -1; + hasDiagnosis = false; + if (!hasUnknowns) { + dofs = -1; + return dofs; + } + redundant.clear(); conflictingTags.clear(); - std::vector conflictingIndex; - VEC_I tags; - Eigen::MatrixXd J(clist.size(), params.size()); + redundantTags.clear(); + Eigen::MatrixXd J(clist.size(), plist.size()); int count=0; for (std::vector::iterator constr=clist.begin(); constr != clist.end(); ++constr) { (*constr)->revertParams(); if ((*constr)->getTag() >= 0) { count++; - tags.push_back((*constr)->getTag()); - for (int j=0; j < int(params.size()); j++) - J(count-1,j) = (*constr)->grad(params[j]); + for (int j=0; j < int(plist.size()); j++) + J(count-1,j) = (*constr)->grad(plist[j]); } } @@ -1284,7 +1350,7 @@ int System::diagnose(VEC_pD ¶ms, VEC_I &conflictingTags) R = qrJT.matrixQR().topRows(constrNum) .triangularView(); - if (constrNum > rank) { // conflicting constraints + if (constrNum > rank) { // conflicting or redundant constraints for (int i=1; i < rank; i++) { // eliminate non zeros above pivot assert(R(i,i) != 0); @@ -1296,43 +1362,139 @@ int System::diagnose(VEC_pD ¶ms, VEC_I &conflictingTags) } } } - conflictingIndex.resize(constrNum-rank); + std::vector< std::vector > conflictGroups(constrNum-rank); for (int j=rank; j < constrNum; j++) { for (int row=0; row < rank; row++) { if (fabs(R(row,j)) > 1e-10) { int origCol = qrJT.colsPermutation().indices()[row]; - conflictingIndex[j-rank].push_back(origCol); + conflictGroups[j-rank].push_back(clist[origCol]); } } int origCol = qrJT.colsPermutation().indices()[j]; - conflictingIndex[j-rank].push_back(origCol); + conflictGroups[j-rank].push_back(clist[origCol]); } - SET_I tags_set; - for (int i=0; i < conflictingIndex.size(); i++) { - for (int j=0; j < conflictingIndex[i].size(); j++) { - tags_set.insert(tags[conflictingIndex[i][j]]); + // try to remove the conflicting constraints and solve the + // system in order to check if the removed constraints were + // just redundant but not really conflicting + std::set skipped; + SET_I satisfiedGroups; + while (1) { + std::map< Constraint *, SET_I > conflictingMap; + for (int i=0; i < conflictGroups.size(); i++) { + if (satisfiedGroups.count(i) == 0) { + for (int j=0; j < conflictGroups[i].size(); j++) { + Constraint *constr = conflictGroups[i][j]; + if (constr->getTag() != 0) // exclude constraints tagged with zero + conflictingMap[constr].insert(i); + } + } + } + if (conflictingMap.empty()) + break; + + int maxPopularity = 0; + Constraint *mostPopular = NULL; + for (std::map< Constraint *, SET_I >::const_iterator it=conflictingMap.begin(); + it != conflictingMap.end(); it++) { + if (it->second.size() >= maxPopularity) { + mostPopular = it->first; + maxPopularity = it->second.size(); + } + } + if (maxPopularity > 0) { + skipped.insert(mostPopular); + for (SET_I::const_iterator it=conflictingMap[mostPopular].begin(); + it != conflictingMap[mostPopular].end(); it++) + satisfiedGroups.insert(*it); } } - tags_set.erase(0); // exclude constraints tagged with zero - conflictingTags.resize(tags_set.size()); - std::copy(tags_set.begin(), tags_set.end(), conflictingTags.begin()); - if (paramsNum == rank) // over-constrained - return paramsNum - constrNum; + std::vector clistTmp; + clistTmp.reserve(clist.size()); + for (std::vector::iterator constr=clist.begin(); + constr != clist.end(); ++constr) + if (skipped.count(*constr) == 0) + clistTmp.push_back(*constr); + + SubSystem *subSysTmp = new SubSystem(clistTmp, plist); + int res = solve(subSysTmp); + if (res == Success) { + subSysTmp->applySolution(); + for (std::set::const_iterator constr=skipped.begin(); + constr != skipped.end(); constr++) { + if ((*constr)->error() < XconvergenceFine) + redundant.insert(*constr); + } + resetToReference(); + + std::vector< std::vector > conflictGroupsOrig=conflictGroups; + conflictGroups.clear(); + for (int i=conflictGroupsOrig.size()-1; i >= 0; i--) { + bool isRedundant = false; + for (int j=0; j < conflictGroupsOrig[i].size(); j++) { + if (redundant.count(conflictGroupsOrig[i][j]) > 0) { + isRedundant = true; + break; + } + } + if (!isRedundant) + conflictGroups.push_back(conflictGroupsOrig[i]); + else + constrNum--; + } + } + delete subSysTmp; + + // simplified output of conflicting tags + SET_I conflictingTagsSet; + for (int i=0; i < conflictGroups.size(); i++) { + for (int j=0; j < conflictGroups[i].size(); j++) { + conflictingTagsSet.insert(conflictGroups[i][j]->getTag()); + } + } + conflictingTagsSet.erase(0); // exclude constraints tagged with zero + conflictingTags.resize(conflictingTagsSet.size()); + std::copy(conflictingTagsSet.begin(), conflictingTagsSet.end(), + conflictingTags.begin()); + + // output of redundant tags + SET_I redundantTagsSet; + for (std::set::iterator constr=redundant.begin(); + constr != redundant.end(); ++constr) + redundantTagsSet.insert((*constr)->getTag()); + // remove tags represented at least in one non-redundant constraint + for (std::vector::iterator constr=clist.begin(); + constr != clist.end(); ++constr) + if (redundant.count(*constr) == 0) + redundantTagsSet.erase((*constr)->getTag()); + redundantTags.resize(redundantTagsSet.size()); + std::copy(redundantTagsSet.begin(), redundantTagsSet.end(), + redundantTags.begin()); + + if (paramsNum == rank && constrNum > rank) { // over-constrained + hasDiagnosis = true; + dofs = paramsNum - constrNum; + return dofs; + } } - return paramsNum - rank; + hasDiagnosis = true; + dofs = paramsNum - rank; + return dofs; } - return params.size(); + hasDiagnosis = true; + dofs = plist.size(); + return dofs; } void System::clearSubSystems() { - init = false; - for (int i=0; i < int(subsyslist.size()); i++) - free(subsyslist[i]); - subsyslist.clear(); + isInit = false; + free(subSystems); + free(subSystemsAux); + subSystems.clear(); + subSystemsAux.clear(); } double lineSearch(SubSystem *subsys, Eigen::VectorXd &xdir) diff --git a/src/Mod/Sketcher/App/freegcs/GCS.h b/src/Mod/Sketcher/App/freegcs/GCS.h index 5cd1466ea..f0d87906f 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.h +++ b/src/Mod/Sketcher/App/freegcs/GCS.h @@ -49,25 +49,31 @@ namespace GCS // This is the main class. It holds all constraints and information // about partitioning into subsystems and solution strategies private: - std::vector clist; + VEC_pD plist; // list of the unknown parameters + MAP_pD_I pIndex; + std::vector clist; std::map c2p; // constraint to parameter adjacency list std::map > p2c; // parameter to constraint adjacency list - // each row of subsyslist contains up to 3 subsystems. - // the first one has the highest priority, always used as the primary subsystem - // the second one is used as secondary subsystem - // the third one is used as secondary system and serves as a preconditioner - std::vector< std::vector > subsyslist; + std::vector subSystems, subSystemsAux; void clearSubSystems(); - MAP_pD_D reference; - void clearReference(); - void resetToReference(); + VEC_D reference; + void setReference(); // copies the current parameter values to reference + void resetToReference(); // reverts all parameter values to the stored reference - MAP_pD_pD reductionmap; // for simplification of equality constraints + std::vector< VEC_pD > plists; // partitioned plist except equality constraints + std::vector< std::vector > clists; // partitioned clist except equality constraints + std::vector< MAP_pD_pD > reductionmaps; // for simplification of equality constraints - bool init; + int dofs; + std::set redundant; + VEC_I conflictingTags, redundantTags; + + bool hasUnknowns; // if plist is filled with the unknown parameters + bool hasDiagnosis; // if dofs, conflictingTags, redundantTags are up to date + bool isInit; // if plists, clists, reductionmaps are up to date int solve_BFGS(SubSystem *subsys, bool isFine); int solve_LM(SubSystem *subsys); @@ -147,7 +153,8 @@ namespace GCS int addConstraintP2PSymmetric(Point &p1, Point &p2, Line &l, int tagId=0); void rescaleConstraint(int id, double coeff); - void initSolution(VEC_pD ¶ms); + void declareUnknowns(VEC_pD ¶ms); + void initSolution(); int solve(bool isFine=true, Algorithm alg=DogLeg); int solve(VEC_pD ¶ms, bool isFine=true, Algorithm alg=DogLeg); @@ -157,9 +164,12 @@ namespace GCS void applySolution(); void undoSolution(); - bool isInit() const { return init; } - - int diagnose(VEC_pD ¶ms, VEC_I &conflictingTags); + int diagnose(); + int dofsNumber() { return hasDiagnosis ? dofs : -1; } + void getConflicting(VEC_I &conflictingOut) const + { conflictingOut = hasDiagnosis ? conflictingTags : VEC_I(0); } + void getRedundant(VEC_I &redundantOut) const + { redundantOut = hasDiagnosis ? redundantTags : VEC_I(0); } }; /////////////////////////////////////// diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp index 7061f3a97..5ef6c65fb 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp @@ -86,6 +86,9 @@ void TaskSketcherMessages::slotSetUp(int type, int dofs, const std::string &msg) case 3: ui->labelConstrainStatus->setText(QString::fromLatin1("Over-constrained sketch
%1
").arg(QString::fromStdString(msg))); break; + case 4: + ui->labelConstrainStatus->setText(QString::fromLatin1("Sketch contains redundant constraints
%1").arg(QString::fromStdString(msg))); + break; } } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 78841d18c..2239f7445 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2825,21 +2825,30 @@ void ViewProviderSketch::solveSketch(void) signalSetUp(2, dofs, msg); signalSolved(-1, 0); } - else if (edit->ActSketch.solve() == 0) { // solving the sketch - if (dofs == 0) { - // color the sketch as fully constrained - edit->FullyConstrained = true; - //Base::Console().Message("Fully constrained sketch\n"); - signalSetUp(0, 0, msg); + else { + if (edit->ActSketch.hasRedundancies()) { // redundant constraints + SketchObject::appendRedundantMsg(edit->ActSketch.getRedundant(), msg); + //Base::Console().Warning("Sketch with redundant constraints\n%s",msg.c_str()); + signalSetUp(4, dofs, msg); + } + if (edit->ActSketch.solve() == 0) { // solving the sketch + if (dofs == 0) { + // color the sketch as fully constrained + edit->FullyConstrained = true; + if (!edit->ActSketch.hasRedundancies()) { + //Base::Console().Message("Fully constrained sketch\n"); + signalSetUp(0, 0, msg); + } + } + else if (!edit->ActSketch.hasRedundancies()) { + //Base::Console().Message("Under-constrained sketch with %d degrees of freedom\n", dofs); + signalSetUp(1, dofs, msg); + } + signalSolved(0, edit->ActSketch.SolveTime); } else { - //Base::Console().Message("Under-constrained sketch with %d degrees of freedom\n", dofs); - signalSetUp(1, dofs, msg); + signalSolved(1, edit->ActSketch.SolveTime); } - signalSolved(0, edit->ActSketch.SolveTime); - } - else { - signalSolved(1, edit->ActSketch.SolveTime); } } From 1183b468bd91da9b56853cf9f13342343cd28c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 14 May 2012 14:06:07 +0200 Subject: [PATCH 154/517] Added tool to setup ship weights (structural based) --- src/Mod/Ship/CMakeLists.txt | 18 +- src/Mod/Ship/Icons/Weight.png | Bin 0 -> 7327 bytes src/Mod/Ship/Icons/Weight.xcf | Bin 0 -> 32353 bytes src/Mod/Ship/Icons/Weight.xpm | 721 +++++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Instance.py | 41 +- src/Mod/Ship/Makefile.am | 6 + src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/shipHydrostatics/Tools.py | 2 +- src/Mod/Ship/tankWeights/TaskPanel.py | 212 ++++++++ src/Mod/Ship/tankWeights/TaskPanel.ui | 97 ++++ src/Mod/Ship/tankWeights/__init__.py | 36 ++ 12 files changed, 1145 insertions(+), 5 deletions(-) create mode 100644 src/Mod/Ship/Icons/Weight.png create mode 100644 src/Mod/Ship/Icons/Weight.xcf create mode 100644 src/Mod/Ship/Icons/Weight.xpm create mode 100644 src/Mod/Ship/tankWeights/TaskPanel.py create mode 100644 src/Mod/Ship/tankWeights/TaskPanel.ui create mode 100644 src/Mod/Ship/tankWeights/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index a362a0c6a..a3c14ce96 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -33,6 +33,9 @@ SET(ShipIcons_SRCS Icons/ReparametrizeIco.xpm Icons/Ship.xcf Icons/Ship.xpm + Icons/Weight.png + Icons/Weight.xcf + Icons/Weight.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -96,6 +99,13 @@ SET(ShipUtils_SRCS ) SOURCE_GROUP("shiputils" FILES ${ShipUtils_SRCS}) +SET(ShipWeights_SRCS + tankWeights/__init__.py + tankWeights/TaskPanel.py + tankWeights/TaskPanel.ui +) +SOURCE_GROUP("shipweights" FILES ${ShipWeights_SRCS}) + SET(ShipCreateTank_SRCS tankCreateTank/__init__.py tankCreateTank/TaskPanel.py @@ -103,7 +113,7 @@ SET(ShipCreateTank_SRCS ) SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipCreateTank_SRCS}) +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -159,6 +169,12 @@ INSTALL( DESTINATION Mod/Ship/shipUtils ) +INSTALL( + FILES + ${ShipWeights_SRCS} + DESTINATION + Mod/Ship/tankWeights +) INSTALL( FILES ${ShipCreateTank_SRCS} diff --git a/src/Mod/Ship/Icons/Weight.png b/src/Mod/Ship/Icons/Weight.png new file mode 100644 index 0000000000000000000000000000000000000000..b613fa569e1ba8860e75b14b7ae9f17fcd46dd34 GIT binary patch literal 7327 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 z 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 JLcuER{{W=4{qg_+ literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/Weight.xcf b/src/Mod/Ship/Icons/Weight.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e10ea8e991301b56e4a9a30104fe9db7056c8776 GIT binary patch literal 32353 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 c #767576", +", c #90908F", +"' c #A1A2A2", +") c #ACACAC", +"! c #A1A1A1", +"~ c #8F8E8F", +"{ c #777776", +"] c #636363", +"^ c #636364", +"/ c #636263", +"( c #636362", +"_ c #767676", +": c #9D9D9D", +"< c #B0B0B1", +"[ c #B1B1B0", +"} c #B0B0B0", +"| c #AFAFAF", +"1 c #9C9C9C", +"2 c #767777", +"3 c #656565", +"4 c #646463", +"5 c #868787", +"6 c #AFAFB0", +"7 c #AEAEAE", +"8 c #ADAEAE", +"9 c #ADADAE", +"0 c #868687", +"a c #666667", +"b c #676766", +"c c #656665", +"d c #7B7B7C", +"e c #AFAEAE", +"f c #ACADAC", +"g c #ACACAB", +"h c #7C7C7C", +"i c #686867", +"j c #686868", +"k c #666767", +"l c #A0A0A0", +"m c #ADADAD", +"n c #ADADAC", +"o c #ABAAAA", +"p c #ABABAA", +"q c #9E9E9E", +"r c #6A6969", +"s c #696969", +"t c #676768", +"u c #676868", +"v c #7F7F7F", +"w c #ABABAC", +"x c #A9A9A9", +"y c #A8A8A9", +"z c #80807F", +"A c #6B6B6B", +"B c #6B6C6B", +"C c #696A69", +"D c #939394", +"E c #AAAAAA", +"F c #A7A8A8", +"G c #A8A7A8", +"H c #929292", +"I c #6D6C6D", +"J c #6D6D6D", +"K c #6A6A6A", +"L c #A6A6A6", +"M c #9D9E9E", +"N c #6D6E6E", +"O c #6E6E6D", +"P c #6C6C6C", +"Q c #A0A09F", +"R c #A8A7A7", +"S c #A4A4A5", +"T c #706F6F", +"U c #706F70", +"V c #6D6E6D", +"W c #A6A5A6", +"X c #A3A3A3", +"Y c #919191", +"Z c #717070", +"` c #707171", +" . c #6F6F6F", +".. c #6F6F6E", +"+. c #818281", +"@. c #A4A4A4", +"#. c #A2A2A2", +"$. c #A2A2A1", +"%. c #727272", +"&. c #707071", +"*. c #717071", +"=. c #9A9A9A", +"-. c #A2A2A3", +";. c #A0A1A0", +">. c #989897", +",. c #737473", +"'. c #737474", +"). c #727172", +"!. c #808080", +"~. c #9F9F9F", +"{. c #9E9F9F", +"]. c #808181", +"^. c #747574", +"/. c #757575", +"(. c #737373", +"_. c #737374", +":. c #888888", +"<. c #A09FA0", +"[. c #9F9FA0", +"}. c #A09F9F", +"|. c #878888", +"1. c #767675", +"2. c #949494", +"3. c #9D9D9E", +"4. c #9D9C9C", +"5. c #9C9C9D", +"6. c #787778", +"7. c #777778", +"8. c #777777", +"9. c #8C8C8C", +"0. c #999A99", +"a. c #818181", +"b. c #797878", +"c. c #797879", +"d. c #605F60", +"e. c #605F5F", +"f. c #606160", +"g. c #616061", +"h. c #626162", +"i. c #616262", +"j. c #636262", +"k. c #626363", +"l. c #636463", +"m. c #646464", +"n. c #646564", +"o. c #646465", +"p. c #656564", +"q. c #656666", +"r. c #666666", +"s. c #666565", +"t. c #676666", +"u. c #676767", +"v. c #686768", +"w. c #686767", +"x. c #696869", +"y. c #5F5F60", +"z. c #616060", +"A. c #626161", +"B. c #626263", +"C. c #636464", +"D. c #656464", +"E. c #656566", +"F. c #696868", +"G. c #6A6A69", +"H. c #69696A", +"I. c #B3B3B3", +"J. c #B3B2B2", +"K. c #B2B2B2", +"L. c #B2B2B1", +"M. c #B2B1B1", +"N. c #B1B1B1", +"O. c #B0B1B1", +"P. c #AFB0AF", +"Q. c #AEAFAF", +"R. c #ACADAD", +"S. c #ABABAB", +"T. c #AAABAA", +"U. c #AAA9AA", +"V. c #6B6B6A", +"W. c #6B6C6C", +"X. c #6C6B6C", +"Y. c #B2B3B3", +"Z. c #B2B3B2", +"`. c #B2B1B2", +" + c #B1B2B1", +".+ c #B1B1B2", +"++ c #B1B0B0", +"@+ c #B0AFB0", +"#+ c #AFAEAF", +"$+ c #AEADAE", +"%+ c #ADACAC", +"&+ c #ACACAD", +"*+ c #ABACAC", +"=+ c #ACABAB", +"-+ c #AAAAAB", +";+ c #A9A9AA", +">+ c #A8A8A8", +",+ c #6D6C6C", +"'+ c #6C6D6D", +")+ c #B1B2B2", +"!+ c #B0B1B0", +"~+ c #AFB0B0", +"{+ c #AEAFAE", +"]+ c #AFAFAE", +"^+ c #AEADAD", +"/+ c #ACABAC", +"(+ c #A9AAAA", +"_+ c #A9A8A9", +":+ c #A7A7A7", +"<+ c #A6A7A6", +"[+ c #6E6E6E", +"}+ c #B1B0B1", +"|+ c #ADAEAD", +"1+ c #ADACAD", +"2+ c #A9A8A8", +"3+ c #A7A8A7", +"4+ c #A7A6A7", +"5+ c #A5A5A6", +"6+ c #A6A6A5", +"7+ c #A6A5A5", +"8+ c #A5A5A5", +"9+ c #6F6F70", +"0+ c #5F605F", +"a+ c #B3B2B3", +"b+ c #AAABAB", +"c+ c #A9AAA9", +"d+ c #A4A5A5", +"e+ c #A3A4A4", +"f+ c #A4A3A3", +"g+ c #A3A3A4", +"h+ c #B0AFAF", +"i+ c #AEAEAF", +"j+ c #A8A9A8", +"k+ c #A7A7A8", +"l+ c #A7A7A6", +"m+ c #A7A6A6", +"n+ c #A5A4A4", +"o+ c #A4A3A4", +"p+ c #A3A4A3", +"q+ c #A3A3A2", +"r+ c #B2B2B3", +"s+ c #AAAAA9", +"t+ c #A6A6A7", +"u+ c #A5A6A6", +"v+ c #A5A6A5", +"w+ c #A4A5A4", +"x+ c #A4A4A3", +"y+ c #A1A2A1", +"z+ c #A1A1A0", +"A+ c #737273", +"B+ c #747374", +"C+ c #AEAEAD", +"D+ c #A6A7A7", +"E+ c #A2A3A2", +"F+ c #A2A1A2", +"G+ c #A0A1A1", +"H+ c #A1A0A1", +"I+ c #A0A0A1", +"J+ c #747474", +"K+ c #B0B0AF", +"L+ c #ABACAB", +"M+ c #ABAAAB", +"N+ c #A5A4A5", +"O+ c #A3A2A3", +"P+ c #A2A1A1", +"Q+ c #9FA09F", +"R+ c #9E9F9E", +"S+ c #757676", +"T+ c #AAA9A9", +"U+ c #A5A5A4", +"V+ c #A2A3A3", +"W+ c #A1A1A2", +"X+ c #9F9E9E", +"Y+ c #9E9D9D", +"Z+ c #9C9D9D", +"`+ c #9D9D9C", +" @ c #777877", +".@ c #A8A8A7", +"+@ c #9FA0A0", +"@@ c #9F9E9F", +"#@ c #9D9E9D", +"$@ c #9C9D9C", +"%@ c #9B9C9C", +"&@ c #787879", +"*@ c #676867", +"=@ c #A9A9A8", +"-@ c #9E9E9D", +";@ c #9C9C9B", +">@ c #9B9B9B", +",@ c #9B9B9A", +"'@ c #9A9B9B", +")@ c #797A79", +"!@ c #797A7A", +"~@ c #7A797A", +"{@ c #686969", +"]@ c #9D9C9D", +"^@ c #9A9B9A", +"/@ c #999A9A", +"(@ c #999999", +"_@ c #999899", +":@ c #7A7B7B", +"<@ c #7B7B7B", +"[@ c #A3A2A2", +"}@ c #A1A0A0", +"|@ c #9E9E9F", +"1@ c #9C9B9C", +"2@ c #9C9B9B", +"3@ c #9A9A99", +"4@ c #9A999A", +"5@ c #989998", +"6@ c #989898", +"7@ c #979898", +"8@ c #989797", +"9@ c #979797", +"0@ c #7C7C7D", +"a@ c #6B6A6A", +"b@ c #6B6A6B", +"c@ c #000000", +"d@ c #9F9F9E", +"e@ c #9B9A9A", +"f@ c #9A9999", +"g@ c #989899", +"h@ c #969796", +"i@ c #969696", +"j@ c #7D7E7D", +"k@ c #7E7E7E", +"l@ c #9B9B9C", +"m@ c #999898", +"n@ c #979897", +"o@ c #969697", +"p@ c #969595", +"q@ c #959596", +"r@ c #959595", +"s@ c #959594", +"t@ c #959495", +"u@ c #7E7F7F", +"v@ c #6C6D6C", +"w@ c #9E9D9E", +"x@ c #979798", +"y@ c #969596", +"z@ c #969695", +"A@ c #949594", +"B@ c #939494", +"C@ c #949493", +"D@ c #939493", +"E@ c #807F80", +"F@ c #9B9C9B", +"G@ c #969797", +"H@ c #959696", +"I@ c #959494", +"J@ c #949394", +"K@ c #939393", +"L@ c #939293", +"M@ c #929392", +"N@ c #939292", +"O@ c #818282", +"P@ c #6E6F6F", +"Q@ c #989999", +"R@ c #979696", +"S@ c #939392", +"T@ c #929393", +"U@ c #919291", +"V@ c #919190", +"W@ c #828283", +"X@ c #828382", +"Y@ c #707070", +"Z@ c #9B9A9B", +"`@ c #9A9A9B", +" # c #949595", +".# c #929291", +"+# c #929191", +"@# c #919091", +"## c #909090", +"$# c #908F90", +"%# c #8F8F90", +"&# c #848383", +"*# c #838384", +"=# c #848484", +"-# c #717171", +";# c #999998", +"># c #979697", +",# c #909190", +"'# c #919090", +")# c #8F8F8F", +"!# c #8E8E8E", +"~# c #8E8F8E", +"{# c #858484", +"]# c #858585", +"^# c #727372", +"/# c #99999A", +"(# c #959695", +"_# c #949495", +":# c #949393", +"<# c #919292", +"[# c #908F8F", +"}# c #8F8F8E", +"|# c #8F8E8E", +"1# c #8E8F8F", +"2# c #8E8D8E", +"3# c #8E8D8D", +"4# c #8D8E8D", +"5# c #8D8C8D", +"6# c #8D8D8D", +"7# c #868686", +"8# c #747473", +"9# c #929192", +"0# c #909091", +"a# c #8D8E8E", +"b# c #8D8D8E", +"c# c #8C8D8D", +"d# c #8B8C8B", +"e# c #878787", +"f# c #878887", +"g# c #747475", +"h# c #747575", +"i# c #979796", +"j# c #8E8E8F", +"k# c #8E8E8D", +"l# c #8D8D8C", +"m# c #8B8C8C", +"n# c #8B8B8B", +"o# c #8A8B8B", +"p# c #8B8A8A", +"q# c #8A8A8A", +"r# c #888988", +"s# c #898989", +"t# c #8F9090", +"u# c #8D8C8C", +"v# c #8C8B8C", +"w# c #8B8B8A", +"x# c #8C8C8B", +"y# c #8A8A8B", +"z# c #89898A", +"A# c #898A89", +"B# c #8A8989", +"C# c #888788", +"D# c #8C8B8B", +"E# c #777878", +"F# c #8B8A8B", +"G# c #8A8B8A", +"H# c #8A898A", +"I# c #8A8A89", +"J# c #888989", +"K# c #898888", +"L# c #888887", +"M# c #868786", +"N# c #797978", +"O# c #797979", +"P# c #929293", +"Q# c #878788", +"R# c #878687", +"S# c #868586", +"T# c #858485", +"U# c #7A7A7A", +"V# c #898A8A", +"W# c #898889", +"X# c #888889", +"Y# c #888787", +"Z# c #878786", +"`# c #868685", +" $ c #858685", +".$ c #838483", +"+$ c #8F908F", +"@$ c #7B7C7C", +"#$ c #8C8C8D", +"$$ c #898988", +"%$ c #878686", +"&$ c #868585", +"*$ c #848585", +"=$ c #858584", +"-$ c #838383", +";$ c #828282", +">$ c #838282", +",$ c #7D7C7C", +"'$ c #858586", +")$ c #838484", +"!$ c #838382", +"~$ c #818182", +"{$ c #828181", +"]$ c #808180", +"^$ c #919192", +"/$ c #7E7D7D", +"($ c #8C8D8C", +"_$ c #838283", +":$ c #828383", +"<$ c #828281", +"[$ c #818180", +"}$ c #7F807F", +"|$ c #7E7E7F", +"1$ c #7E7F7E", +"2$ c #7F7E7F", +"3$ c #858686", +"4$ c #848384", +"5$ c #818081", +"6$ c #818080", +"7$ c #807F7F", +"8$ c #7F7F7E", +"9$ c #7F7F80", +"0$ c #909191", +"a$ c #8B8B8C", +"b$ c #848584", +"c$ c #848483", +"d$ c #7E7E7D", +"e$ c #7E7D7E", +"f$ c #7D7D7D", +"g$ c #828182", +"h$ c #7F8080", +"i$ c #7D7C7D", +"j$ c #7C7D7D", +"k$ c #7C7D7C", +"l$ c #7C7C7B", +"m$ c #7B7C7B", +"n$ c #7D7E7E", +"o$ c #7D7D7E", +"p$ c #7D7D7C", +"q$ c #7C7B7C", +"r$ c #7B7B7A", +"s$ c #7A7B7A", +"t$ c #7A7A7B", +"u$ c #7A7A79", +"v$ c #787979", +"w$ c #848485", +"x$ c #7F7E7E", +"y$ c #7C7B7B", +"z$ c #7A7979", +"A$ c #787878", +"B$ c #787777", +"C$ c #787877", +"D$ c #808081", +"E$ c #787978", +"F$ c #777677", +"G$ c #767776", +"H$ c #7B7A7A", +"I$ c #767677", +"J$ c #757576", +"K$ c #757475", +"L$ c #747373", +"M$ c #727373", +"N$ c #737372", +"O$ c #737272", +"P$ c #7B7A7B", +"Q$ c #757675", +"R$ c #757574", +"S$ c #717272", +"T$ c #717172", +"U$ c #777676", +"V$ c #70706F", +"W$ c #79797A", +"X$ c #757474", +"Y$ c #727271", +"Z$ c #727171", +"`$ c #6F6E6F", +" % c #767575", +".% c #6F6E6E", +"+% c #6E6F6E", +"@% c #6E6D6D", +"#% c #6D6D6E", +"$% c #6D6D6C", +"%% c #717271", +"&% c #6C6C6D", +"*% c #6B6B6C", +"=% c #717170", +"-% c #6F706F", +";% c #6E6D6E", +">% c #6C6C6B", +",% c #6A6B6B", +"'% c #6A6B6A", +")% c #707170", +"!% c #6F7070", +"~% c #6A6A6B", +"{% c #6E6E6F", +"]% c #696A6A", +"^% c #696968", +"/% c #686968", +"(% c #666766", +"_% c #6C6B6B", +":% c #676667", +"<% c #6A696A", +"[% c #656465", +"}% c #666566", +"|% c #666665", +"1% c #646565", +"2% c #646364", +"3% c #646363", +"4% c #989798", +"5% c #686869", +"6% c #626362", +"7% c #606061", +"8% c #B3B3B2", +"9% c #A8A9A9", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . + @ + # + ", +" + + $ + % & & & * * = ", +" - - ; > , ' ) ! ~ { ] ] ^ ", +" / ( _ : < [ < } } | | 1 2 3 3 ", +" 4 4 5 } 6 | | 7 7 8 9 0 a b ", +" 3 c d e 7 7 f ) g h i j ", +" k k l m n o p q r s ", +" t u v ) w x y z A B ", +" C s D o E F G H I J ", +" K A l x L M N O ", +" P P Q R S 1 T U ", +" V V H L W X X Y Z ` ", +" ...+.@.S #.$.+.%.%. ", +" &.*.=.-.X ;.l >.,.'. ", +" ).%.!.! ! ! ~.~.{.].^./. ", +" (._.:.<.[.}.~. q q q M |.1._ ", +" /./.v 2.q M 3.: : 4.5.H !.6.7. ", +" 2 { 8.!.9.2.0.2.9.a.b.b.c. ", +" . . . . . . . . . . . . . . . . . . . . . . . . . . d.. e.@ f.f.g.& & h.& = i.j.j.j.k.] ] l.4 m.n.o.p.3 3 q.r.s.r.r.t.t.u.u.j v.w.j j x. ", +" . . . . . . . . . . . . . . . . . . . . . . . @ d.y.+ z.z.f.$ & A.A.= * * j.B.] ] C.m.4 m.m.D.p.p.3 E.E.r.r.t.r.u.u.u.u t i j j x.F.s s G.H.K K ", +" . . . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.K.K.K.L.M.N.O.} } } } } P.| | Q.7 7 8 m m 9 m f R.) ) ) S.S.S.S.T.E E U.E x V.A W.X. ", +" . . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.Y.Z.K.`. +M..+N.++N.++} @+| | | | e #+7 $+$+m m %+&+) ) ) *+=+g S.o E -+;+E ;+x x x >+>+>+F G ,+'+J ", +" . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.I.K.K.K.K.)+M.[ ++!+} ~+} ~+| | {+]+{+$+7 $+^+m n n %+) /+w S.S.S.o E E E U.(+x x x _+>+>+>+:+R :+:+<+:+L O [+ ", +" . . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.Z.K.K..+`.N.N.}+++} ~+} 6 | | | e 7 7 7 m |+m &+1+f ) *+*+w S.T.-+o E E E (+x x 2+2+>+>+3+F R :+4+L L L 5+6+7+8+@. .9+T ", +" 0+@ I.I.I.I.I.I.I.I.I.Y.a+Z.K.K.L.N.N.[ !+} } } ~+} 6 | {+7 7 7 $+m ^+m ) ) 1+) g /+S.S.S.b+E E E (+c+x x y >+>+>+F F :+:+:+L L L W W 5+8+S d+@.@.e+f+g+Z &. ", +" & $ I.I.I.I.I.I.J.K.K. +L.N.N.!+} } h+| | 6 | | {+i+7 7 8 m R.R.) ) ) ) *+w S.b+b+E E E (+x x _+j+y >+G G 3+k+:+l+m+m+L 7+5+5+d+8+n+@.o+o+p+X q+X #.#.#.).%. ", +" & * * r+K.L.)+.+N.N.++N.!+} } h+@+| | | 7 7 7 9 m m 1+&+&+f ) ) w S.S.o E T.s+s+x (+x 2+j+y >+F k+:+:+4+t+t+L u+u+v+v+8+8+w+@.x+o+@.X X q+-.-.#.' y+! ! z+A+(.B+ ", +" ] / +.+N.N.} !+} @+@+P.| | ]+i+7 |+C+m m m &+f f g *+=+S.S.S.o E E U.s+(+x x j+2+>+F k+k+:+D+m+L L 6+8+7+8+8+8+n+@.@.o+x+f+X -.E+#.' F+' ! ! ;.G+H+I+}.}.<.J+/. ", +" 4 m.m.!+K+@+~+h+| #+7 {+7 C+^+8 m m &+&+) g L+S.S.S.p M+E U.s+x x x x 2+2+>+R F k+:+<+l+L L L W 8+v+N+w+@.S x+x+X X q+X O+E+F+P+F+! ! H+I+;.Q l Q+~.~.{.~.R+q S+_ _ ", +" 3 3 h+| | {+e 7 ^+^+^+m m ) ) ) ) =+w S.S.b+-+T.U.c+T+;+x x 2+2+>+>+R :+:+D+L L L L 6+7+8+N+U+w+@.e+x+o+p+V+X #.E+' y+W+! H+l l l l [.[.~.{.~.q X+q 3.Y+: : Z+`+8. @ ", +" r.r.7 m 7 ^+m n R.) ) L+*+=+L+S.-+b+E E (+T+x x x >+j+>+.@G :+l+:+D+L L u+7+5+8+N+8+@.@.f+X f+f+q+X #.#.y+' $.! ! ;.I+l Q +@Q+}.@@~.q q q #@3.: : : $@$@1 1 %@%@&@c. ", +" u.w.*@m &+&+) /+w S.S.S.S.o o E x c+T+x y =@>+>+R G :+:+:+m+:+6+7+6+8+8+8+n+S @.e+@.x+X q+#.#.E+#.y+! ! ! z+I+l l +@l }.~.~.R+R+q -@#@: : `+5.1 1 ;@>@>@>@>@,@'@=.)@!@~@ ", +" j {@g S.S.S.S.E p E c+T+U.x x 2+_+>+>+F R R t+:+m+L L 5+v+8+8+8+N+w+@.@.f+p+f+X X #.#.#.! ! ! ! I+z+l l [.~.~.~.{.X+q q M M : : ]@5.1 1 %@;@>@>@>@>@^@=./@(@(@0.(@_@:@<@ ", +" H.s r M+T.E E T+;+x =@x y >+>+G F :+:+D+L L L L 7+8+8+n+U+@.@.p+p+X X O+V+#.[@#.$.P+! ! }@G+l <.Q [.[.~.@@|@q q M #@: : : 4.1 1 1@2@>@>@>@=.=.=.3@4@3@(@(@_@5@6@7@8@9@h h 0@ ", +" a@b@T+;+x =@y >+>+>+3+G :+:+l+c@c@c@c@c@c@d+8+N+@.@.@.X o+X X q+#.#.P+P+W+! ! G+H+l +@+@<.~.~.d@R+q q 3.M 3.: ]@Z+5.1@2@1 >@>@=.=.e@=.=.f@(@(@(@g@6@6@6@6@9@8@h@9@i@i@i@j@k@ ", +" P W.j+>+G R 3+:+:+t+:+L L 7+7+c@c@c@c@c@c@@.@.X X O+X #.' #.F+P+! G+H+l l l ~.Q ~.~.X+q R+-@M M #@Z+]@4.1 1 ;@2@l@>@e@^@^@=.4@=.0.(@(@5@m@6@>.8@n@9@9@i@o@i@p@q@p@r@s@t@v u@ ", +" J J v@:+:+:+l+L 5+6+5+8+d+d+@.@.c@c@c@c@c@c@#.#.#.#.' P+! ! ! I+l Q ~.~.~.d@q X+q q w@3.: : 5.1 4.1 %@2@>@>@>@e@=.=.3@4@0._@_@5@5@6@6@x@9@8@9@9@i@i@i@y@z@r@r@t@A@2.B@C@D@!.E@!. ", +" O [+L L v+8+8+8+8+S @.e+x+x+X X c@c@c@c@c@c@! H+! }@}@l l l [.~.{.d@q q M w@Y+: : ]@1 $@1 1 %@F@>@'@'@=.=.4@=.(@(@g@(@6@6@7@9@n@9@9@o@G@i@z@H@y@r@r@I@r@2.2.2.J@K@K@L@M@N@H a.O@ ", +" P@T N+w+n+@.@.g+X X V+O+V+[@#.y+c@c@c@c@c@c@l Q Q+~.~.~.{.{.q q q : : `+: `+1 ;@2@F@l@>@,@^@=.=./@/@(@Q@Q@m@5@6@x@x@x@9@9@i@R@i@z@r@q@r@r@t@A@A@D 2.K@D@K@S@T@H H U@H Y Y V@W@X@ ", +" Y@Y@Y@p+g+X [@X #.-.#.F+W+! ! ! ! c@c@c@c@c@c@|@q q q M 3.: : ]@]@5.1 1 1 >@>@^@Z@=.`@=.f@f@(@Q@m@6@Q@6@x@9@8@9@9@o@R@i@i@y@q@r@ #I@I@2.J@B@K@K@S@N@M@H .#+#.#Y Y V@@#####$#%#&#*#=# ", +" -#-#-.O+#.' ! P+W+z+}@I+}@l l Q [.c@c@c@c@c@c@Y+: ]@Z+: 1 1 %@>@>@>@>@'@=.=./@3@(@(@;#6@6@6@6@7@9@n@>#9@i@R@i@i@q@r@r@ #s@2.2.J@D D@K@S@K@H N@H +#Y Y Y ,#'#####, $#)#)#)#!#~#!#{#]# ", +" %.^#! ! ! }@z+}@l +@+@~.~.X+{.R+q c@c@c@c@c@c@1 1 ;@;@F@>@=.e@'@=./#3@f@(@Q@_@5@m@>.>.n@9@G@R@>#o@i@(#z@H@r@t@2._#2.:#B@D K@N@T@H H .#<#Y Y Y Y ######$#[#)#}#|#1#|#!#2#3#4#5#6#7#7# ", +" (.(.8#l l l ~.[.d@~.q X+q Y+#@3.: Z+c@c@c@c@c@c@>@>@^@`@=.=./@c@c@c@c@c@c@6@>.8@9@9@h@9@i@i@c@c@c@c@c@c@2.2.2.c@c@c@c@c@c@H U@9#U@Y Y Y 0#####%#)#)#)#)#!#}#a#b#b#6#c#5#c#9.9.9.d#e#f#e# ", +" g#h#~.|@@@|@q -@q #@: : : 4.$@F@%@%@c@c@c@c@c@c@4@4@(@(@Q@Q@c@c@c@c@c@c@i#i#o@i@z@i@H@r@c@c@c@c@c@c@c@c@c@N@M@c@c@c@c@c@c@Y '#'#####%#%#)#)#j#!#!#!#k#!#6#6#5#9.l#9.9.m#d#n#o#o#p#q#r#s# ", +" S+/.S+q q 3.: ]@$@`+4.1 %@l@>@Z@,@e@=.c@c@c@c@c@c@(@m@6@>.8@n@c@c@c@c@c@i@y@q@r@r@s@s@2.c@c@c@c@c@c@c@c@c@c@c@U@c@c@c@c@c@c@t#, )#1#}#|#!#!#2#4#6#6#c#u#9.9.v#n#n#n#w#q#q#q#q#q#s#s#s#q#q#p# ", +" 2 8.`+`+1 1 %@1 F@2@>@>@^@=./@3@4@/@(@c@c@c@c@c@c@9@9@9@>#h@c@c@c@c@c@r@r@t@I@2.B@D@K@K@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@|#!#!#6#b#6#5#l#9.9.9.x#9.n#n#n#o#y#q#z#A#B#s#s#r#:.:.f#C#f#d#D# ", +" 7.E#%@l@>@>@`@'@e@3@=.4@(@(@5@5@6@6@6@c@c@c@c@c@c@i@i@r@r@c@c@c@c@c@c@K@K@D@K@S@S@L@H c@c@c@c@c@c@c@##$#$#$#c@c@c@c@c@c@c@c@6#6#9.5#9.9.d#D#n#n#F#q#G#q#H#I#A#s#J#K#K#:.C#C#L#e#e#M#7#7#9.9. ", +" N#c.O#e@=.=.=.(@0.(@(@_@5@>.6@7@9@9@9@G@c@c@c@c@c@c@s@r@r@c@c@c@c@c@c@S@S@P#H U@Y Y Y Y c@c@c@c@c@c@)#~ 1#~#!#2#c@c@c@c@c@c@c@x#n#9.n#n#w#G#q#I#H#B#A#s#r#s#:.:.:.Q#L#e#R#R#7#7#S#7#]#]#T#a#!#~# ", +" ~@U#f@f@(@Q@m@g@7@>.x@n@9@i@9@i@H@y@r@y@c@c@c@c@c@c@2.D c@c@c@c@c@c@H U@Y Y V@,#,###, c@c@c@c@c@c@c@a#a#k#6#5#6#c@c@c@c@c@c@c@o#y#q#q#I#s#V#W#s#X#:.:.Y#:.C#e#Z#7#7#`#7# $]#]#T#]#{#=#=#=#.$)#+$ ", +" <@@$6@8@9@x@9@9@o@o@i@i@y@H@r@r@ #I@A@2.c@c@c@c@c@c@M@c@c@c@c@c@c@Y 0#####$#)#)#)#1#~#c@c@c@c@c@c@u#6##$9.9.D#D#d#c@c@c@c@c@c@A#s#$$J#X#r#:.:.f#e#e#%$R#7#7#&$]#`#*$=$=$=#=#=#*#-$-$-$;$W@>$,#Y ", +" h h ,$9@i@i@i@i@y@H@r@r@r@r@_#2.J@:#K@K@N@c@c@c@c@c@c@c@c@c@c@c@c@##$#%#)#1#|#~#!#a#a#6#c@c@c@c@c@c@D#9.n#o#p#q#q#B#c@c@c@c@c@c@:.|.:.L#e#5 Z#R#7#7#'$ $]#]#{#=#=#=#=#)$&#-$-$W@!$X@;$~${$a.]$H H ^$ ", +" j@/$H@y@p@r@r@t@2.2.2.2.J@:#K@K@P#M@H H +#c@c@c@c@c@c@c@c@c@c@c@c@c@!#2#k#b#3#5#c##$($9.c@c@c@c@c@c@o#q#V#z#B#s#s#W#c@c@c@c@c@c@e#e#0 7#`#`#S#]#]#=$T#=#=#)$*#-$-$_$:$;$;$<$O@{$a.]$[$!.!.!.v }$K@:# ", +" |$1$2$s@2.2.C@:#D@K@K@K@H M@H H U@Y Y Y 0###c@c@c@c@c@c@c@c@c@c@c@c@c@c#5##$9.9.m#D#v#n#o#c@c@c@c@c@c@s#J#$$:.:.:.L#Y#c@c@c@c@c@c@`#3$]#]#]#*$]#=#*#4$)$-$!$X@!$;$;$~$a.a.].5$5$6$!.}$7$v 8$v u@2$2.2.r@ ", +" 9$}$:#B@K@K@L@H N@<#H <#<#@#0$0$######, +$)#c@c@c@c@c@c@c@c@c@c@c@c@c@c@a$D#y#p#q#q#q#q#s#c@c@c@c@c@c@C#e#:.e#e#5 %$7#c@c@c@c@c@c@b$=#c$=#-$-$-$W@;$;$;$;$+.a.a.a.[$[$!.!.!.}$v u@2$k@k@k@d$e$f$,$f$r@z@ ", +" a.].L@T@H U@+#U@Y Y Y ######, +$)#)#j#!#!#k#c@c@c@c@c@c@c@c@a$c@c@c@c@c@p#q#I#B#s#s#K#s#K#c@c@c@c@c@c@%$%$7#7#'$'$]#{#c@c@c@c@c@c@-$-$:$!$X@g$~$O@+.a.a.[$!.!.}$E@h$v 2$2$|$k@k@f$/$f$i$j$k$h l$@$m$9@9@ ", +" g$~$<$+#Y @#'#V@t#[#[#%#)#1#|#j#!#k#b#6#4#l#l#c@c@c@c@c@c@n#w#y#c@c@c@c@c@c@W#J#:.:.:.|.e#e#c@c@c@c@c@c@3$]#*$=$=$=#4$*#c@c@c@c@c@c@<$a.+.a.a.[$].!.z E@z v v v |$1$k@n$k@f$o$f$j$p$0@h q$<@<@r$r$s$s$6@6@5@ ", +" >$-$,###+$[#[#)#}#}#!#!#b#b#6#6#6#6##$u#9.x#d#c@c@c@c@c@c@I#B#s#s#c@c@c@c@c@c@Q#5 Z#M#7#7#7#c@c@c@c@c@c@=#c$c$-$-$-$>$X@c@c@c@c@c@c@a.[$!.!.7$h$v 8$8$8$1$k@n$j@/$f$f$j$0@h q$<@l$<@<@t$U#U#~@u$O#O#O#v$f@/@ ", +" c$)$=#)#)#!#~#!#3#a#4#6#5#9.#$9.v#m#n#n#n#w#G#q#c@c@c@c@c@c@$$K#:.C#c@c@c@c@c@c@7#7# $ $]#T#w$c@c@c@c@c@c@c@!$X@;$;$a.<$c@c@c@c@c@c@c@v v v k@x$k@k@k@o$o$f$k$f$i$h l$q$y$<@<@<@t$U#U#u$O#z$c.&@b.A$E#B$C$,@^@,@ ", +" ]#]#!#6#k#3#6#6#l#($9.9.m#n#n#n#F#y#q#I#V#z#s#s#c@c@c@c@c@c@e#e#M#M#7#c@c@c@c@c@c@b$=#=#)$.$-$-$c@c@c@c@c@c@g${$a.!.a.D$c@c@c@c@c@c@c@x$k@d$/$f$f$j$p$h h h c@c@c@c@c@c@U#U#z$~@O#b.E$c.A$A$C$7.8.8.F$G$_ _ 1 1 ", +" 7#7##$9.c#9.x#n#n#n#n#n#p#q#I#H#s#s#s#s#J#:.:.L#c@c@c@c@c@c@3$ $&$]#]#c@c@c@c@c@c@-$-$>$>$;$;$O@c@c@c@c@c@c@c@!.E@9$v c@c@c@c@c@c@c@c@f$f$0@0@h <@l$y$<@t$H$c@c@c@c@c@c@c.O#c.&@A$A$8.B$8.{ I$_ > S+/.J$/.h#: #@ ", +" e#e#Y#v#n#n#o#p#q#q#q#A#z#s#J#K#X#:.:.Q#e#e#e#Z#0 c@c@c@c@c@c@b$*$b$=#=#)$c@c@c@c@c@c@O@;$a.a.]$].6$c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@d <@<@r$:@<@H$U#u$u$U#c@c@c@c@c@c@7.7.8.I$2 I$_ S+S+S+/.g#/./.^.J+'.8#q @@{. ", +" :.:.F#p#q#q#q#A#s#J#s#X#:.:.|.L#Y#5 %$7#7#7# $`#]#c@c@c@c@c@c@c$-$-$-$>$;$;$c@c@c@c@c@c@!.!.!.}$v v c@c@c@c@c@c@c@c@c@c@c@h c@c@c@c@c@c@r$U#U#~@u$O#O#N#E$A$A$c@c@c@c@c@c@2 _ _ 1.J$J$/.K$h#J+J+L$'.(.M$N$%.O$%.l +@ ", +" z#V#z#$$W#X#r#:.:.Q#e#Q#R#Z#%$7#S#'$]#]#]#]#=#{#=#c@c@c@c@c@c@W@;$;$+.a.a.5$c@c@c@c@c@c@v u@1$1$k@k@d$c@c@c@c@c@c@c@c@c@<@P$c@c@c@c@c@c@z$O#v$b.A$A$A$B$B$8.8.c@c@c@c@c@c@Q$K$J+R$J+J+B+L$'.(.(.%.O$%.S$T$-#-#` H+! ", +" p#F#w#:.:.:.Y#e#Z#Z#7#7#7#`#&$]#]#T#b$=#=#c$-$*#-$!$c@c@c@c@c@c@a.].]$]$!.E@}$9$c@c@c@c@c@c@e$f$f$f$f$i$h h c@c@c@c@c@s$U#U#u$c@c@c@c@c@c@A$ @6. @8.{ 2 U$_ _ _ c@c@c@c@c@c@B+J+_.(.A+A+^#%.%.%.%.S$` *.-#Y@Y@U V$#.q+E+ ", +" v#9.e#5 e#7#7#S#3$]#]#]#*$=$b$4$&#-$-$-$:$_$;$;$<$<${$a.].]$!.!.!.z v 8$v 8$x$k@k@d$j@f$f$p$f$h l$m$d <@<@:@U#t$u$W$O#O#O#v$v$c@c@c@c@c@c@{ { G$_ _ _ /./.h#X$^.^.8#(.,.(.(.A+%.%.Y$Z$S$-#-#*.Z Y@Y@U U . .`$`$[+[+e+o+ ", +" c#5#6#7#`#]#]#=$=$w$=#c$=#-$4$-$_$X@;$;${$a.{$a.a.a.6$!.h$7$}$2$2$k@k@k@n$/$f$f$f$k$k$h h q$m$<@P$r$U#U#U#U#u$O#O#c.E$A$E#7. @7.c@c@c@c@c@c@J$ %/./.X$J+J+_.B+(.(.A+M$^#%.%.S$S$-#-#*.&.Z Y@U . ....%+%[+[+@%#%#%J $%U+8+8+ ", +" 2#!#*$b$w$=#.$-$-$-$W@-$;$;$;${${$a.a.!.!.!.h$h$9$v v 2$2$1$e$k@k@j@p$h ,$h h l$h <@<@<@U#s$U#U#W$W$O#c@c@c@c@c@c@8.E#8.2 8._ c@c@c@c@c@c@R$g#J+_.8#,.(.A+M$%.A+%%S$-#-#-#` Y@Y@Y@V$ .9+ .[+`$.%[+[+N J J I &%,+P P P *%<+<+ ", +" ~ )#-$-$-$:$_$>$;$g$g$+.a.a.6$5$!.!.E@7$v v |$|$k@k@k@f$/$f$k$h k$h @$l$<@<@:@<@r$U#~@u$z$)@O#b.A$E$C$c@c@c@c@c@c@c@S+1.S+Q$c@c@c@c@c@c@c@L$(.(.N$%.%.%.Z$).-#-#=%*.Y@Y@U -% . . .[++%O V ;%J J J v@P W.>%A A A ,%'%V.K :+3+ ", +" )###,#;$;$g$a.+.a.a.[$a.!.h$9$E@v 8$v x$x$n$e$/$f$f$i$0@k$h q$q$d <@H$t$U#U#~@U#!@O#v$&@A$b.7.6.7.8.8.F$8.c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@O$%.S$Y$-#-#=%` )%Y@!%9+T T ..%P@[+N ;%O J J '+$%I P P B A A a@b@~%K r s s s F.2+=@_+ ", +" Y Y a.a.a.5$!.]$E@z z v u@u@k@x$k@e$f$f$j$f$h 0@h h d <@<@<@H$U#U#U#u$O#O#N#A$E$A$A$C$A$8.8.U$_ _ > > _ /./.c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@-#Z )%&.Y@Y@T !% . .{%+%[+[+N V @%I $%,+&%P W.P A A A ,%K K G.]%s s s x.j j j u w.E E ", +" S@M@!.E@}$v v v 8$1$k@k@k@e$f$f$j$h k$h y$q$<@<@U#r$U#U#u$U#O#v$E$N#b.A$B$ @8.8.{ I$U$2 > %S+Q$h#/.g#J+,.J+,.c@c@c@c@c@c@c@c@c@c@c@c@` Y@!%!%T . .`$[+[+N O J J J $%I P P P P A A A ,%'%K s H.H.s ^%/%^%j t u t u.u.(%b a S.L+ ", +" D K@C@v u@k@k@k@j@f$/$f$f$h h h d d <@<@P$:@H$u$U#!@z$O#&@O#c.A$E#6.8.8.F$F$G$_ _ %> /.X$/.^.J+J+_.J+(.(.(.A+^#%.Y$c@c@c@c@c@c@c@c@T . .P@P@{%[+O N N J J $%P ,+B _%*%_%,%b@,%K K K H.s s s j j j i *@u.u.k :%(%a r.3 c s.3 ) R.1+ ", +" 2.s@k@e$j@j@p$f$p$h h q$<@<@<@s$t$t$U#U#W$O#O#c.A$A$A$A$ @7.8.{ { I$_ Q$J$> /./.g#J+J+J+J+8#(.(.M$A+%.%.S$T$-#-#*.)%Y@Y@U Y@-% .+%{%+%[+[+;%@%J $%&%P P X.X._%A A A V.,%K <%C C s /%s ^%u j u.u.u.u.a :%r.r.E.3 3 p.p.[%m.m.m.] 9 ^+ ", +" z@i@H@,$j$h @$m$d <@<@P$U#U#)@U#u$O#E$b.b.A$A$6.C$7.8.G$I$_ _ _ S+Q$/.K$R$^.J+'.(._.(.(.(.O$O$%.%.-#-#-#-#-#)%V$Y@T -% . . .{%[+N N J J J v@,+P _%>%X.B A '%A K G.G.<%r s /%{@j j j v.*@u.t.t.r.r.}%E.|%3 1%o.p.m.2%m.] 3%] / j.j.#+| | ", +" 9@9@h l$<@<@t$H$U#u$W$O#O#O#O#A$b.A$E# @8.8.8.I$_ _ /.S+1./.R$/.J+J+L$8#(.(.(.^#A+%.S$Z$%%-#*.-#)%=%Y@T V$-% ...`$+%[+O J J J '+&%J P P X._%A A V.A K K ]%C r ^%{@^%j j v.*@w.u.u.:%t.r.r.c q.3 1%1%3 m.4 ] 4 ] ] / * * * A.& & f.& < ++ ", +" 4%6@H$U#!@z$W$O#O#b.c.A$A$C$7.7.8.I$U$G$_ /.1.1././.R$^.J+_._.'.(.(.^#A+%.%.Z$T$-#-#=%)%Y@Y@T T . .`$`$+%[+[+O @%J ,+&%P P P W._%A A A K K K K G.s ^%F.s j u u j u u.k b r.|%s.s.3 3 [%p.[%m.m.] ^ ] ] k.( * = * - & $ % z.+ + # + .+.+ ", +" _@(@(@O#E$E$A$A$6.8.C$8.8.8._ _ _ S+S+/././.X$X$J+J+(.L$(.(.N$M$%.%.%%%%-#-#Y@)%Z 9+Y@ . . .`$+%[+O N O #%J J v@$%P P A *%A V.,%~%a@K K s s ^%^%5%/%i u.*@u.u.b r.r.r.|%3 s.3 3 1%m.m.m.] m.] 6%] * * i.- - - & + 7%+ + + y.. . . . . a+I.I. ", +" =.=.A$A$B$8. @I$F$G$G$_ S+ %/./.^.J+^.8#J+B+(.(.O$A+%.%.Y$%.T$-#-#=%Y@Y@!%-%U . ...[++%[+O @%J J '+P v@P W.B _%A A ,%,%K K <%s s {@{@^%j v.i t u.u.t.a r.r.r.E.E.3 o.D.m.m.C.l.3%] ( / j.* = A.& & g.g.z.+ d.y.. . . . . . . . . . . . I.I. ", +" >@>@>@8.8._ G$> > _ S+R$g#^.J+J+8#_.(.(.N$^#O$%.T$-#-#-#-#=%Y@Y@Y@!%9+ .[+P@..[+[+O J J J ,+$%P P B W.*%A ~%K K K <%s <%s F.5%/%j u v.u.w.u.k t.r.r.3 }%3 [%D.1%m.m.4 C.2%] ] ( 6%* A.- & & & + + + d.0+y.. . . . . . . . . . . . . . . . I.I.I. ", +" 1 1 _ J$/.J$/.R$J+R$J+8#_.(.(.M$O$O$%.Y$S$T$=%-#Z &.Y@Y@ .T ...`$[+[+N [+N J I '+v@P P W._%A A ,%A K ]%K C s s s s /%j v.w.j u.u.k :%r.|%r.q.3 3 3 n.m.m.2%C.] ] / B.* * * A.h.& z.+ + + 0++ 0+0+. . . . . . . . . . . . . . . . . . . . . I.I. ", +" : 3.R$K$J+J+(.L$(.A+N$N$%.%.Y$-#T$-#&.&.` Y@-%V$ . ...+%{%[+N [+J J ,+&%P P P P A A A A K K K K G.s s x.F.5%j j w.u.u.a u.r.r.r.3 q.c 1%1%o.m.m.2%C.] ] ] k.6%* = & ; & $ f.f.d.@ d.. . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I. ", +" |@d@8#(.(.A+^#%.Y$-#-#-#-#*.&.Y@Y@Y@9+9+ .+%+%[+[+[+[+#%J J v@P P W.*%_%A A a@'%K K H.C <%x.F.5%j j i i *@u.:%b r.r.r.}%3 3 3 [%o.o.2%m.^ ^ ] / 6%j.= h.= h.& & f.+ + + y.y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I. ", +" Q+[.l %.Y$Y$-#-#-#&.Z !%V$9+ . . . ..%[+V [+J J J v@J P P X._%A A a@V.~%]%K r s s s {@j j j i u.u.u.k (%r.}%|%c 3 1%p.3 m.^ C.] ] ] * * j.h.- ; & % 7%f.+ + + e.e.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I.I. ", +" ! ! -#)%Y@V$V$9+ . ...{%[+O [+@%J J '+I $%P P P A B A ~%b@V.<%r C s s s /%j j *@w.i u.u.k r.r.r.3 3 3 3 D.m.m.] 3%] ] 6%k.* * * = h.& & g.f.+ + y.# d.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I. ", +" #.#.E+U ..%[+{%[+V @%[+J J v@v@P B W.*%A V.a@'%K r <%C H.s /%j j j i *@u.u.k b t.r.q.|%|%3 3 n.1%4 m.3%] ] j.B.j.* * * & & & g.+ f.+ . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I.I. ", +" f+x+@.@.N+d+N+8+u+5+u+L L l+l+<+:+:+F >+>+>+2+2+x x c+(+E E T.E b+S.g S.g ) ) f n m m m 8 $+^+7 i+e 7 | | ~+K+K+++}+[ }+N.N.K.`.K.Z.K.8%I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I. ", +" 8+8+5+L L L <+D+:+4+F .@:+>+>+>+9%x x T+U.E U.E b+b+S.S.g w ) ) f R.n m m m ^+7 8 7 7 ]+Q.| | P.h+} < N.}+N.N.)+ +)+K.Z.Y.8%I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I. ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 05dbfecb5..6cf4c9689 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -34,13 +34,13 @@ class ShipWorkbench ( Workbench ): # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) - list = ["Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank"] self.appendToolbar("Loading",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) - list = ["Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank"] self.appendToolbar("Loading",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 16d77f868..adba4d22b 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -663,7 +663,7 @@ class ViewProviderShip: def sections(obj): """ Returns the discretization points of sections, with the advantage that is a list of nSections lists, with the points. - @param Ship object + @param obj Ship object @return Sections points """ histogram = obj.nPoints[:] @@ -674,3 +674,42 @@ def sections(obj): for j in range(histogram[i],histogram[i+1]): sections[i].append(points[j]) return sections + +def weights(obj): + """ Returns Ship weights list. If weights has not been sets, + this tool creates it. + @param obj Ship object + @return Weights list. None if errors + """ + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + return None + if not obj.IsShip: + return None + # Test if properties already exist + try: + props.index("WeightNames") + except ValueError: + obj.addProperty("App::PropertyStringList","WeightNames","Ship", str(Translator.translate("Ship Weights names"))).WeightNames=[Translator.translate("Lightweight").__str__()] + try: + props.index("WeightMass") + except ValueError: + # Compute mass aproximation + from shipHydrostatics import Tools + disp = Tools.Displacement(obj,obj.Draft,0.0) + obj.addProperty("App::PropertyFloatList","WeightMass","Ship", str(Translator.translate("Ship Weights masses"))).WeightMass=[1000.0 * disp[1]] + try: + props.index("WeightPos") + except ValueError: + # Compute mass aproximation + from shipHydrostatics import Tools + disp = Tools.Displacement(obj,obj.Draft,0.0) + obj.addProperty("App::PropertyVectorList","WeightPos","Ship", str(Translator.translate("Ship Weights centers of gravity"))).WeightPos=[Vector(disp[2],0.0,obj.Draft)] + # Setup list + weights = [] + for i in range(0,len(obj.WeightNames)): + weights.append([obj.WeightNames[i], obj.WeightMass[i], obj.WeightPos[i]]) + return weights diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 0251da41d..35c1957b7 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -34,6 +34,9 @@ nobase_data_DATA = \ Icons/ReparametrizeIco.xpm \ Icons/Ship.xcf \ Icons/Ship.xpm \ + Icons/Weight.png \ + Icons/Weight.xcf \ + Icons/Weight.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -66,6 +69,9 @@ nobase_data_DATA = \ shipUtils/Math.py \ shipUtils/Paths.py \ shipUtils/Translator.py \ + tankWeights/__init__.py \ + tankWeights/TaskPanel.py \ + tankWeights/TaskPanel.ui \ tankCreateTank/__init__.py \ tankCreateTank/TaskPanel.py \ tankCreateTank/TaskPanel.ui diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index f62bebfb4..71a9e75e4 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -84,6 +84,18 @@ class Hydrostatics: ToolTip = str(Translator.translate('Plot ship hydrostatics')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class SetWeights: + def Activated(self): + import tankWeights + tankWeights.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Weight.png" + MenuText = str(Translator.translate('Set ship weights')) + ToolTip = str(Translator.translate('Set ship weights, tanks must be added later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + class CreateTank: def Activated(self): import tankCreateTank @@ -101,4 +113,5 @@ FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) +FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index a2b1f2c65..3db003957 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -116,7 +116,7 @@ def Displacement(ship, draft, trim): @param ship Selected ship instance @param draft Draft. @param trim Trim in degrees. - @return [areas,disp,xcb]: \n + @return [areas,disp,xcb,Cb]: \n areas : Area of each section \n disp: Ship displacement \n xcb: X bouyance center coordinate diff --git a/src/Mod/Ship/tankWeights/TaskPanel.py b/src/Mod/Ship/tankWeights/TaskPanel.py new file mode 100644 index 000000000..14cda21e5 --- /dev/null +++ b/src/Mod/Ship/tankWeights/TaskPanel.py @@ -0,0 +1,212 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +from Instance import * +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/tankWeights/TaskPanel.ui" + self.ship = None + + def accept(self): + if not self.ship: + return False + # Setup lists + name = [] + mass = [] + pos = [] + for i in range(0,self.form.weights.rowCount() - 1): + item = self.form.weights.item(i,0) + name.append(item.text().__str__()) + item = self.form.weights.item(i,1) + mass.append(item.text().toFloat()[0]) + vec = [] + item = self.form.weights.item(i,2) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,3) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,4) + vec.append(item.text().toFloat()[0]) + pos.append(App.Base.Vector(vec[0],vec[1],vec[2])) + # Send to ship + self.ship.WeightNames = name[:] + self.ship.WeightMass = mass[:] + self.ship.WeightPos = pos[:] + return True + + def reject(self): + if not self.ship: + return False + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.weights = form.findChild(QtGui.QTableWidget, "Weights") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.weights,QtCore.SIGNAL("cellChanged(int,int)"),self.onTableItem); + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Get selected geometry. + @return False if sucessfully values initialized. + """ + # Get selected objects + selObjs = FreeCADGui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + continue + if obj.IsShip: + # Test if another ship already selected + if self.ship: + msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.ship = obj + # Test if any valid ship was selected + if not self.ship: + msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") + App.Console.PrintError(msg) + return True + # Get weights + w = weights(self.ship) + # Set the items + self.form.weights.setRowCount(len(w)+1) + for i in range(0,len(w)): + item = QtGui.QTableWidgetItem(w[i][0]) + self.form.weights.setItem(i,0,item) + string = '%g' % (w[i][1]) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,1,item) + string = '%g' % (w[i][2].x) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,2,item) + string = '%g' % (w[i][2].y) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,3,item) + string = '%g' % (w[i][2].z) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,4,item) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Set weights")) + labels = [] + labels.append(Translator.translate("Name")) + labels.append(Translator.translate("Mass") + " [kg]") + labels.append(QtCore.QString("g.x [m]")) + labels.append(QtCore.QString("g.y [m]")) + labels.append(QtCore.QString("g.z [m]")) + self.form.weights.setHorizontalHeaderLabels(labels) + + def onTableItem(self, row, column): + """ Function called when an item of table is changed. + @param row Changed item row + @param column Changed item column + """ + item = self.form.weights.item(row,column) + # Row deletion + if column == 0: + if not item.text(): + self.form.weights.removeRow(row) + # Ensure that exist one empty item at the end + nRow = self.form.weights.rowCount() + last = self.form.weights.item(nRow-1,0) + if last: + if(last.text() != ''): + self.form.weights.setRowCount(nRow+1) + # Fields must be numbers + for i in range(0,self.form.weights.rowCount()-1): # Avoid last row + for j in range(1,self.form.weights.columnCount()): # Avoid name column + item = self.form.weights.item(i,j) + if not item: + item = QtGui.QTableWidgetItem('0.0') + self.form.weights.setItem(i,j,item) + continue + (number,flag) = item.text().toFloat() + if not flag: + item.setText('0.0') + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/tankWeights/TaskPanel.ui b/src/Mod/Ship/tankWeights/TaskPanel.ui new file mode 100644 index 000000000..23dc4ff1b --- /dev/null +++ b/src/Mod/Ship/tankWeights/TaskPanel.ui @@ -0,0 +1,97 @@ + + + TaskPanel + + + + 0 + 0 + 260 + 256 + + + + Set wieghts + + + + + + true + + + 1 + + + 5 + + + false + + + 20 + + + false + + + false + + + + + Name + + + + + Mass [kg] + + + + + g.x [m] + + + + + g.y [m] + + + + + g.z [m] + + + + + Lightweight + + + + + 0.0 + + + + + 0.0 + + + + + 0.0 + + + + + 0.0 + + + + + + + + + diff --git a/src/Mod/Ship/tankWeights/__init__.py b/src/Mod/Ship/tankWeights/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/tankWeights/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 0a3a2b1de0e95e85eacdbde0856b83c3cbf42547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 14 May 2012 14:42:14 +0200 Subject: [PATCH 155/517] Added annotations to ship weights definition tool --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 1 + src/Mod/Ship/tankWeights/Preview.py | 106 ++++++++++++++++++++++++++ src/Mod/Ship/tankWeights/TaskPanel.py | 34 +++++++++ 4 files changed, 142 insertions(+) create mode 100644 src/Mod/Ship/tankWeights/Preview.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index a3c14ce96..c44e313ab 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -101,6 +101,7 @@ SOURCE_GROUP("shiputils" FILES ${ShipUtils_SRCS}) SET(ShipWeights_SRCS tankWeights/__init__.py + tankWeights/Preview.py tankWeights/TaskPanel.py tankWeights/TaskPanel.ui ) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 35c1957b7..01b296c01 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -70,6 +70,7 @@ nobase_data_DATA = \ shipUtils/Paths.py \ shipUtils/Translator.py \ tankWeights/__init__.py \ + tankWeights/Preview.py \ tankWeights/TaskPanel.py \ tankWeights/TaskPanel.ui \ tankCreateTank/__init__.py \ diff --git a/src/Mod/Ship/tankWeights/Preview.py b/src/Mod/Ship/tankWeights/Preview.py new file mode 100644 index 000000000..571155bb9 --- /dev/null +++ b/src/Mod/Ship/tankWeights/Preview.py @@ -0,0 +1,106 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD,FreeCADGui +from FreeCAD import Base +from FreeCAD import Part +# FreeCADShip modules +from shipUtils import Paths, Translator + +class Preview(object): + def __init__(self): + """ Constructor. + """ + self.objects = [] + + def reinit(self): + """ Reinitializate drawer. + """ + self.clean() + + def update(self, names, pos): + """ Update the 3D view printing annotations. + @param names Weight names. + @param pos Weight positions (FreeCAD::Base::Vector). + """ + # Destroy all previous entities + self.clean() + for i in range(0, len(names)): + # Draw gravity line + line = Part.makeLine((pos[i].x,pos[i].y,pos[i].z),(pos[i].x,pos[i].y,pos[i].z - 9.81)) + Part.show(line) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'Line' + # Draw circles + circle = Part.makeCircle(0.5, pos[i], Base.Vector(1.0,0.0,0.0)) + Part.show(circle) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'CircleX' + circle = Part.makeCircle(0.5, pos[i], Base.Vector(0.0,1.0,0.0)) + Part.show(circle) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'CircleY' + circle = Part.makeCircle(0.5, pos[i], Base.Vector(0.0,0.0,1.0)) + Part.show(circle) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'CircleZ' + # Draw annotation + self.objects.append(DrawText(names[i] + 'Text', names[i], Base.Vector(pos[i].x+1.0,pos[i].y,pos[i].z))) + + def clean(self): + """ Erase all annotations from screen. + """ + for i in range(0,len(self.objects)): + if not FreeCAD.ActiveDocument.getObject(self.objects[i].Name): + continue + FreeCAD.ActiveDocument.removeObject(self.objects[i].Name) + self.objects = [] + +def DrawText(name, string, position, displayMode="Screen", angle=0.0, justification="Left", colour=(0.00,0.00,0.00), size=12): + """ Draws a text in a desired position. + @param name Name of the object + @param string Text to draw (recommended format u'') + @param position Point to draw the text + @param angle Counter clockwise rotation of text + @param justification Alignement of the text ("Left", "Right" or "Center") + @param colour Colour of the text + @param size Font size + @return FreeCAD annotation object + """ + # Create the object + text = FreeCAD.ActiveDocument.addObject("App::Annotation",name) + # Set the text + text.LabelText = [string, u''] + # Set the options + text.Position = position + FreeCADGui.ActiveDocument.getObject(text.Name).Rotation = angle + FreeCADGui.ActiveDocument.getObject(text.Name).Justification = justification + FreeCADGui.ActiveDocument.getObject(text.Name).FontSize = size + FreeCADGui.ActiveDocument.getObject(text.Name).TextColor = colour + FreeCADGui.ActiveDocument.getObject(text.Name).DisplayMode = displayMode + return FreeCAD.ActiveDocument.getObject(text.Name) diff --git a/src/Mod/Ship/tankWeights/TaskPanel.py b/src/Mod/Ship/tankWeights/TaskPanel.py index 14cda21e5..a01f7c73c 100644 --- a/src/Mod/Ship/tankWeights/TaskPanel.py +++ b/src/Mod/Ship/tankWeights/TaskPanel.py @@ -27,6 +27,7 @@ import FreeCADGui as Gui # Qt library from PyQt4 import QtGui,QtCore # Module +import Preview from Instance import * from shipUtils import Paths, Translator @@ -34,8 +35,10 @@ class TaskPanel: def __init__(self): self.ui = Paths.modulePath() + "/tankWeights/TaskPanel.ui" self.ship = None + self.preview = Preview.Preview() def accept(self): + self.preview.clean() if not self.ship: return False # Setup lists @@ -62,6 +65,7 @@ class TaskPanel: return True def reject(self): + self.preview.clean() if not self.ship: return False return True @@ -98,6 +102,21 @@ class TaskPanel: self.retranslateUi() # Connect Signals and Slots QtCore.QObject.connect(form.weights,QtCore.SIGNAL("cellChanged(int,int)"),self.onTableItem); + # Update screen + name = [] + pos = [] + for i in range(0,self.form.weights.rowCount() - 1): + item = self.form.weights.item(i,0) + name.append(item.text().__str__()) + vec = [] + item = self.form.weights.item(i,2) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,3) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,4) + vec.append(item.text().toFloat()[0]) + pos.append(App.Base.Vector(vec[0],vec[1],vec[2])) + self.preview.update(name, pos) def getMainWindow(self): "returns the main window" @@ -202,6 +221,21 @@ class TaskPanel: (number,flag) = item.text().toFloat() if not flag: item.setText('0.0') + # Update screen annotations + name = [] + pos = [] + for i in range(0,self.form.weights.rowCount() - 1): + item = self.form.weights.item(i,0) + name.append(item.text().__str__()) + vec = [] + item = self.form.weights.item(i,2) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,3) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,4) + vec.append(item.text().toFloat()[0]) + pos.append(App.Base.Vector(vec[0],vec[1],vec[2])) + self.preview.update(name, pos) def createTask(): panel = TaskPanel() From 56758cab50935204d36eb39282af41de19ed6658 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 14 May 2012 11:13:19 -0300 Subject: [PATCH 156/517] Fixed bug in Draft Clone --- src/Mod/Draft/Draft.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 6f8250a3d..0014a4513 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2853,8 +2853,9 @@ class _Clone: if o.isDerivedFrom("Part::Feature"): sh = o.Shape.copy() m = FreeCAD.Matrix() - m.scale(obj.Scale) - sh = sh.transformGeometry(m) + if hasattr(obj,"Scale") and not sh.isNull(): + m.scale(obj.Scale) + sh = sh.transformGeometry(m) shapes.append(sh) if shapes: obj.Shape = Part.makeCompound(shapes) From 57403910b0381afe3287e1e6f8b10b6991a195b1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 14 May 2012 19:15:11 +0200 Subject: [PATCH 157/517] Replace makeTube algorithm --- src/Mod/Part/App/AppPartPy.cpp | 29 +++++++++++++++++-- src/Mod/Part/App/TopoShape.cpp | 51 ++++++++++++++++++++++------------ src/Mod/Part/App/TopoShape.h | 3 +- 3 files changed, 60 insertions(+), 23 deletions(-) diff --git a/src/Mod/Part/App/AppPartPy.cpp b/src/Mod/Part/App/AppPartPy.cpp index 2662593c5..2132042df 100644 --- a/src/Mod/Part/App/AppPartPy.cpp +++ b/src/Mod/Part/App/AppPartPy.cpp @@ -1043,14 +1043,36 @@ static PyObject * makeTube(PyObject *self, PyObject *args) PyObject *pshape; double radius; double tolerance=0.001; + char* scont = "C0"; + int maxdegree = 3; + int maxsegment = 30; // Path + radius - if (!PyArg_ParseTuple(args, "O!d", &(TopoShapePy::Type), &pshape, &radius)) + if (!PyArg_ParseTuple(args, "O!d|sii", &(TopoShapePy::Type), &pshape, &radius, &scont, &maxdegree, &maxsegment)) return 0; + std::string str_cont = scont; + int cont; + if (str_cont == "C0") + cont = (int)GeomAbs_C0; + else if (str_cont == "C1") + cont = (int)GeomAbs_C1; + else if (str_cont == "C2") + cont = (int)GeomAbs_C2; + else if (str_cont == "C3") + cont = (int)GeomAbs_C3; + else if (str_cont == "CN") + cont = (int)GeomAbs_CN; + else if (str_cont == "G1") + cont = (int)GeomAbs_G1; + else if (str_cont == "G2") + cont = (int)GeomAbs_G2; + else + cont = (int)GeomAbs_C0; + try { const TopoDS_Shape& path_shape = static_cast(pshape)->getTopoShapePtr()->_Shape; TopoShape myShape(path_shape); - TopoDS_Shape face = myShape.makeTube(radius, tolerance); + TopoDS_Shape face = myShape.makeTube(radius, tolerance, cont, maxdegree, maxsegment); return new TopoShapeFacePy(new TopoShape(face)); } catch (Standard_Failure) { @@ -1465,7 +1487,8 @@ struct PyMethodDef Part_methods[] = { "these must have the same number of edges."}, {"makeTube" ,makeTube,METH_VARARGS, - "makeTube(edge,float) -- Create a tube."}, + "makeTube(edge,radius,[continuity,max degree,max segments]) -- Create a tube.\n" + "continuity is a string which must be 'C0','C1','C2','C3','CN','G1' or 'G1',"}, {"makeSweepSurface" ,makeSweepSurface,METH_VARARGS, "makeSweepSurface(edge(path),edge(profile),[float]) -- Create a profile along a path."}, diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index f78bc5026..22ccd16ad 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -32,7 +32,9 @@ # include # include # include +# include # include +# include # include # include # include @@ -1343,7 +1345,8 @@ TopoDS_Shape TopoShape::makePipeShell(const TopTools_ListOfShape& profiles, return mkPipeShell.Shape(); } -TopoDS_Shape TopoShape::makeTube(double radius, double tol) const +#if 0 +TopoDS_Shape TopoShape::makeTube() const { // http://opencascade.blogspot.com/2009/11/surface-modeling-part3.html if (this->_Shape.IsNull()) @@ -1378,43 +1381,54 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol) const ); return mkBuilder.Face(); } - -// for testing -static Handle(Law_Function) CreateBsFunction (const Standard_Real theFirst, const Standard_Real theLast) +#else +static Handle(Law_Function) CreateBsFunction (const Standard_Real theFirst, const Standard_Real theLast, const Standard_Real theRadius) { //Handle_Law_BSpline aBs; //Handle_Law_BSpFunc aFunc = new Law_BSpFunc (aBs, theFirst, theLast); Handle_Law_Linear aFunc = new Law_Linear(); - aFunc->Set(theFirst, 2.0, theLast, 3.0); + aFunc->Set(theFirst, theRadius, theLast, theRadius); return aFunc; } -// for testing -TopoDS_Shape TopoShape::makeTube() const +TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdegree, int maxsegm) const { // http://opencascade.blogspot.com/2009/11/surface-modeling-part3.html - Standard_Real theTol = 0.001; + Standard_Real theTol = tol; Standard_Boolean theIsPolynomial = Standard_True; Standard_Boolean myIsElem = Standard_True; - GeomAbs_Shape theContinuity = GeomAbs_G1; - Standard_Integer theMaxDegree = 3; - Standard_Integer theMaxSegment = 1000; + GeomAbs_Shape theContinuity = GeomAbs_Shape(cont); + Standard_Integer theMaxDegree = maxdegree; + Standard_Integer theMaxSegment = maxsegm; if (this->_Shape.IsNull()) Standard_Failure::Raise("Cannot sweep along empty spine"); - if (this->_Shape.ShapeType() != TopAbs_EDGE) - Standard_Failure::Raise("Spine shape is not an edge"); - const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); - BRepAdaptor_Curve path_adapt(path_edge); + Handle(Adaptor3d_HCurve) myPath; + if (this->_Shape.ShapeType() == TopAbs_EDGE) { + const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); + BRepAdaptor_Curve path_adapt(path_edge); + myPath = new BRepAdaptor_HCurve(path_adapt); + theContinuity = GeomAbs_C0; + } + //else if (this->_Shape.ShapeType() == TopAbs_WIRE) { + // const TopoDS_Wire& path_wire = TopoDS::Wire(this->_Shape); + // BRepAdaptor_CompCurve path_adapt(path_wire); + // myPath = new BRepAdaptor_HCompCurve(path_adapt); + //} + //else { + // Standard_Failure::Raise("Spine shape is neither an edge nor a wire"); + //} + else { + Standard_Failure::Raise("Spine shape is not an edge"); + } //circular profile - Handle(Geom_Circle) aCirc = new Geom_Circle (gp::XOY(), 1.0); + Handle(Geom_Circle) aCirc = new Geom_Circle (gp::XOY(), radius); aCirc->Rotate (gp::OZ(), Standard_PI/2.); //perpendicular section - Handle(BRepAdaptor_HCurve) myPath = new BRepAdaptor_HCurve(path_adapt); - Handle(Law_Function) myEvol = ::CreateBsFunction (myPath->FirstParameter(), myPath->LastParameter()); + Handle(Law_Function) myEvol = ::CreateBsFunction (myPath->FirstParameter(), myPath->LastParameter(), radius); Handle(GeomFill_SectionLaw) aSec = new GeomFill_EvolvedSection(aCirc, myEvol); Handle(GeomFill_LocationLaw) aLoc = new GeomFill_CurveAndTrihedron(new GeomFill_CorrectedFrenet); aLoc->SetCurve (myPath); @@ -1438,6 +1452,7 @@ TopoDS_Shape TopoShape::makeTube() const return TopoDS_Shape(); } +#endif TopoDS_Shape TopoShape::makeSweep(const TopoDS_Shape& profile, double tol, int fillMode) const { diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index 0cf1087f9..1de76b1ca 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -158,8 +158,7 @@ public: TopoDS_Shape makeThickSolid(const TopTools_ListOfShape& remFace, Standard_Real offset, Standard_Real tolerance) const; TopoDS_Shape makeSweep(const TopoDS_Shape& profile, double, int) const; - TopoDS_Shape makeTube(double radius, double tol) const; - TopoDS_Shape makeTube() const; + TopoDS_Shape makeTube(double radius, double tol, int cont, int maxdeg, int maxsegm) const; TopoDS_Shape makeHelix(Standard_Real pitch, Standard_Real height, Standard_Real radius, Standard_Real angle=0, Standard_Boolean left=Standard_False) const; TopoDS_Shape makeLoft(const TopTools_ListOfShape& profiles, Standard_Boolean isSolid, From e63eaf90755fb880441f3472d04c8d2387795fbc Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Tue, 15 May 2012 18:01:15 +0200 Subject: [PATCH 158/517] add isNull() method to Rotation --- src/Base/RotationPy.xml | 8 ++++++++ src/Base/RotationPyImp.cpp | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/Base/RotationPy.xml b/src/Base/RotationPy.xml index 02dc34ee8..111cfb74c 100644 --- a/src/Base/RotationPy.xml +++ b/src/Base/RotationPy.xml @@ -48,6 +48,14 @@ + + + + isNull() -> Bool + returns True if the rotation equals the unity matrix + + + The rotation elements (as quaternion) diff --git a/src/Base/RotationPyImp.cpp b/src/Base/RotationPyImp.cpp index 7abede54c..159952c7e 100644 --- a/src/Base/RotationPyImp.cpp +++ b/src/Base/RotationPyImp.cpp @@ -144,6 +144,17 @@ PyObject* RotationPy::toEuler(PyObject * args) return Py::new_reference_to(tuple); } +PyObject* RotationPy::isNull(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + Base::Rotation rot = * getRotationPtr(); + Base::Rotation nullrot(0,0,0,1); + Base::Rotation nullrotinv(0,0,0,-1); + bool null = (rot == nullrot) | (rot == nullrotinv); + return Py_BuildValue("O", (null ? Py_True : Py_False)); +} + Py::Tuple RotationPy::getQ(void) const { double q0, q1, q2, q3; From 1a79480bd61bda58381d48b1c1543f61273d2976 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 16 May 2012 16:31:02 -0300 Subject: [PATCH 159/517] Added 0000145 : Drawing clip objects --- src/Mod/Drawing/App/AppDrawing.cpp | 2 + src/Mod/Drawing/App/CMakeLists.txt | 2 + src/Mod/Drawing/App/FeatureClip.cpp | 111 +++ src/Mod/Drawing/App/FeatureClip.h | 71 ++ src/Mod/Drawing/App/FeaturePage.cpp | 7 +- src/Mod/Drawing/App/Makefile.am | 2 + src/Mod/Drawing/Gui/Command.cpp | 47 +- src/Mod/Drawing/Gui/Resources/Drawing.qrc | 1 + src/Mod/Drawing/Gui/Resources/Makefile.am | 1 + .../Resources/icons/actions/drawing-clip.svg | 710 ++++++++++++++++++ src/Mod/Drawing/Gui/Workbench.cpp | 4 + 11 files changed, 955 insertions(+), 3 deletions(-) create mode 100644 src/Mod/Drawing/App/FeatureClip.cpp create mode 100644 src/Mod/Drawing/App/FeatureClip.h create mode 100644 src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg diff --git a/src/Mod/Drawing/App/AppDrawing.cpp b/src/Mod/Drawing/App/AppDrawing.cpp index a581668ba..016abf81b 100644 --- a/src/Mod/Drawing/App/AppDrawing.cpp +++ b/src/Mod/Drawing/App/AppDrawing.cpp @@ -22,6 +22,7 @@ #include "FeatureViewPart.h" #include "FeatureViewAnnotation.h" #include "FeatureProjection.h" +#include "FeatureClip.h" #include "PageGroup.h" extern struct PyMethodDef Drawing_methods[]; @@ -59,6 +60,7 @@ void DrawingExport initDrawing() Drawing::FeatureViewPartPython ::init(); Drawing::FeatureViewPython ::init(); Drawing::FeatureViewAnnotation ::init(); + Drawing::FeatureClip ::init(); } } // extern "C" diff --git a/src/Mod/Drawing/App/CMakeLists.txt b/src/Mod/Drawing/App/CMakeLists.txt index 98767a24a..00710b75e 100644 --- a/src/Mod/Drawing/App/CMakeLists.txt +++ b/src/Mod/Drawing/App/CMakeLists.txt @@ -29,6 +29,8 @@ SET(Features_SRCS FeatureViewPart.h FeatureViewAnnotation.cpp FeatureViewAnnotation.h + FeatureClip.cpp + FeatureClip.h PageGroup.cpp PageGroup.h ) diff --git a/src/Mod/Drawing/App/FeatureClip.cpp b/src/Mod/Drawing/App/FeatureClip.cpp new file mode 100644 index 000000000..c45229929 --- /dev/null +++ b/src/Mod/Drawing/App/FeatureClip.cpp @@ -0,0 +1,111 @@ +/*************************************************************************** + * Copyright (c) Yorik van Havre 2012 * + * * + * 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" + +#ifndef _PreComp_ +# include +#endif + + +#include +#include +#include +#include +#include +#include + +#include "FeatureClip.h" +#include "FeatureView.h" + +using namespace Drawing; +using namespace std; + + +//=========================================================================== +// FeaturePage +//=========================================================================== + +PROPERTY_SOURCE(Drawing::FeatureClip, App::DocumentObjectGroup) + +FeatureClip::FeatureClip(void) +{ + static const char *group = "Drawing view"; + App::PropertyType hidden = (App::PropertyType)(App::Prop_Hidden); + ADD_PROPERTY_TYPE(ViewResult ,(""),group,hidden,"Resulting SVG view of this clip"); + ADD_PROPERTY_TYPE(X ,(10),group,App::Prop_None ,"The left margin of the view area of this clip"); + ADD_PROPERTY_TYPE(Y ,(10),group,App::Prop_None ,"The top margin of the view area of this clip"); + ADD_PROPERTY_TYPE(Height ,(10),group,App::Prop_None ,"The height of the view area of this clip"); + ADD_PROPERTY_TYPE(Width ,(10),group,App::Prop_None ,"The width of the view area of this clip"); + ADD_PROPERTY_TYPE(ShowFrame ,(0),group,App::Prop_None,"Specifies if the clip frame appears on the page or not"); +} + +FeatureClip::~FeatureClip() +{ +} + +/// get called by the container when a Property was changed +void FeatureClip::onChanged(const App::Property* prop) +{ + App::DocumentObjectGroup::onChanged(prop); +} + +App::DocumentObjectExecReturn *FeatureClip::execute(void) +{ + ostringstream svg; + + // creating clip path + svg << "" + << "" << endl; + + // show clip frame on the page if needed + + if (ShowFrame.getValue()) { + svg << "" << endl; + } + + // create clipped group + svg << "" << endl; + + // get through the children and collect all the views + const std::vector &Grp = Group.getValues(); + for (std::vector::const_iterator It= Grp.begin();It!=Grp.end();++It) { + if ((*It)->getTypeId().isDerivedFrom(Drawing::FeatureView::getClassTypeId())) { + Drawing::FeatureView *View = dynamic_cast(*It); + svg << View->ViewResult.getValue() << endl; + } + } + + // closing clipped group + svg << "" << endl; + + ViewResult.setValue(svg.str().c_str()); + return App::DocumentObject::StdReturn; +} diff --git a/src/Mod/Drawing/App/FeatureClip.h b/src/Mod/Drawing/App/FeatureClip.h new file mode 100644 index 000000000..ae1e6c0fc --- /dev/null +++ b/src/Mod/Drawing/App/FeatureClip.h @@ -0,0 +1,71 @@ +/*************************************************************************** + * Copyright (c) Yorik van Havre 2012 * + * * + * 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 _FeatureClip_h_ +#define _FeatureClip_h_ + + +#include +#include + +namespace Drawing +{ + +/** Base class of all View Features in the drawing module + */ +class DrawingExport FeatureClip: public App::DocumentObjectGroup +{ + PROPERTY_HEADER(Drawing::FeatureClip); + +public: + /// Constructor + FeatureClip(void); + virtual ~FeatureClip(); + + App::PropertyFloat X; + App::PropertyFloat Y; + App::PropertyFloat Width; + App::PropertyFloat Height; + App::PropertyBool ShowFrame; + App::PropertyString ViewResult; + + /** @name methods overide Feature */ + //@{ + /// recalculate the Feature + virtual App::DocumentObjectExecReturn *execute(void); + //@} + + /// returns the type name of the ViewProvider + virtual const char* getViewProviderName(void) const { + return "DrawingGui::ViewProviderDrawingPage"; + } + +protected: + void onChanged(const App::Property* prop); +}; + + +} //namespace Drawing + + +#endif diff --git a/src/Mod/Drawing/App/FeaturePage.cpp b/src/Mod/Drawing/App/FeaturePage.cpp index 684fe28cf..c1730ebc4 100644 --- a/src/Mod/Drawing/App/FeaturePage.cpp +++ b/src/Mod/Drawing/App/FeaturePage.cpp @@ -37,6 +37,7 @@ #include "FeaturePage.h" #include "FeatureView.h" +#include "FeatureClip.h" using namespace Drawing; using namespace std; @@ -124,10 +125,14 @@ App::DocumentObjectExecReturn *FeaturePage::execute(void) // get through the children and collect all the views const std::vector &Grp = Group.getValues(); for (std::vector::const_iterator It= Grp.begin();It!=Grp.end();++It) { - if ((*It)->getTypeId().isDerivedFrom(Drawing::FeatureView::getClassTypeId())) { + if ( (*It)->getTypeId().isDerivedFrom(Drawing::FeatureView::getClassTypeId()) ) { Drawing::FeatureView *View = dynamic_cast(*It); ofile << View->ViewResult.getValue(); ofile << tempendl << tempendl << tempendl; + } else if ( (*It)->getTypeId().isDerivedFrom(Drawing::FeatureClip::getClassTypeId()) ) { + Drawing::FeatureClip *Clip = dynamic_cast(*It); + ofile << Clip->ViewResult.getValue(); + ofile << tempendl << tempendl << tempendl; } } } diff --git a/src/Mod/Drawing/App/Makefile.am b/src/Mod/Drawing/App/Makefile.am index 462017c0f..098b9b786 100644 --- a/src/Mod/Drawing/App/Makefile.am +++ b/src/Mod/Drawing/App/Makefile.am @@ -15,6 +15,8 @@ libDrawing_la_SOURCES=\ FeatureViewPart.h \ FeatureViewAnnotation.cpp \ FeatureViewAnnotation.h \ + FeatureClip.cpp \ + FeatureClip.h \ PageGroup.cpp \ PageGroup.h \ ProjectionAlgos.cpp \ diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index 2f9345b97..7ed5a4641 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -366,9 +366,9 @@ CmdDrawingAnnotation::CmdDrawingAnnotation() // seting the sGroup = QT_TR_NOOP("Drawing"); sMenuText = QT_TR_NOOP("&Annotation"); - sToolTipText = QT_TR_NOOP("Inserts an Annotation view in the active document"); + sToolTipText = QT_TR_NOOP("Inserts an Annotation view in the active drawing"); sWhatsThis = "Drawing_Annotation"; - sStatusTip = QT_TR_NOOP("Inserts an Annotation view in the active document"); + sStatusTip = QT_TR_NOOP("Inserts an Annotation view in the active drawing"); sPixmap = "actions/drawing-annotation"; } @@ -398,6 +398,48 @@ bool CmdDrawingAnnotation::isActive(void) return (getActiveGuiDocument() ? true : false); } + +//=========================================================================== +// Drawing_Clip +//=========================================================================== + +DEF_STD_CMD_A(CmdDrawingClip); + +CmdDrawingClip::CmdDrawingClip() + : Command("Drawing_Clip") +{ + // seting the + sGroup = QT_TR_NOOP("Drawing"); + sMenuText = QT_TR_NOOP("&Clip"); + sToolTipText = QT_TR_NOOP("Inserts a clip group in the active drawing"); + sWhatsThis = "Drawing_Annotation"; + sStatusTip = QT_TR_NOOP("Inserts a clip group in the active drawing"); + sPixmap = "actions/drawing-clip"; +} + +void CmdDrawingClip::activated(int iMsg) +{ + + std::vector pages = this->getDocument()->getObjectsOfType(Drawing::FeaturePage::getClassTypeId()); + if (pages.empty()){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page to insert"), + QObject::tr("Create a page to insert.")); + return; + } + std::string PageName = pages.front()->getNameInDocument(); + std::string FeatName = getUniqueObjectName("Clip"); + openCommand("Create Clip"); + doCommand(Doc,"App.activeDocument().addObject('Drawing::FeatureClip','%s')",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); + updateActive(); + commitCommand(); +} + +bool CmdDrawingClip::isActive(void) +{ + return (getActiveGuiDocument() ? true : false); +} + //=========================================================================== // Drawing_ExportPage //=========================================================================== @@ -495,6 +537,7 @@ void CreateDrawingCommands(void) rcCmdMgr.addCommand(new CmdDrawingOrthoViews()); rcCmdMgr.addCommand(new CmdDrawingOpenBrowserView()); rcCmdMgr.addCommand(new CmdDrawingAnnotation()); + rcCmdMgr.addCommand(new CmdDrawingClip()); rcCmdMgr.addCommand(new CmdDrawingExportPage()); rcCmdMgr.addCommand(new CmdDrawingProjectShape()); } diff --git a/src/Mod/Drawing/Gui/Resources/Drawing.qrc b/src/Mod/Drawing/Gui/Resources/Drawing.qrc index fad40eb81..bc0ae4cdf 100644 --- a/src/Mod/Drawing/Gui/Resources/Drawing.qrc +++ b/src/Mod/Drawing/Gui/Resources/Drawing.qrc @@ -17,6 +17,7 @@ icons/actions/drawing-orthoviews.svg icons/actions/drawing-openbrowser.svg icons/actions/drawing-annotation.svg + icons/actions/drawing-clip.svg translations/Drawing_af.qm translations/Drawing_de.qm translations/Drawing_es.qm diff --git a/src/Mod/Drawing/Gui/Resources/Makefile.am b/src/Mod/Drawing/Gui/Resources/Makefile.am index e42a14b03..69b335394 100644 --- a/src/Mod/Drawing/Gui/Resources/Makefile.am +++ b/src/Mod/Drawing/Gui/Resources/Makefile.am @@ -21,6 +21,7 @@ EXTRA_DIST = \ icons/actions/drawing-orthoviews.svg \ icons/actions/drawing-openbrowser.svg \ icons/actions/drawing-annotation.svg \ + icons/actions/drawing-clip.svg \ icons/Page.svg \ icons/Pages.svg \ icons/View.svg \ diff --git a/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg b/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg new file mode 100644 index 000000000..dd58ec78a --- /dev/null +++ b/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg @@ -0,0 +1,710 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/Mod/Drawing/Gui/Workbench.cpp b/src/Mod/Drawing/Gui/Workbench.cpp index b7bd8bbce..e74f510e6 100644 --- a/src/Mod/Drawing/Gui/Workbench.cpp +++ b/src/Mod/Drawing/Gui/Workbench.cpp @@ -63,6 +63,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *part << "Drawing_OrthoViews"; *part << "Drawing_OpenBrowserView"; *part << "Drawing_Annotation"; + *part << "Drawing_Clip"; *part << "Drawing_ExportPage"; return root; @@ -80,6 +81,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const *part << "Drawing_OrthoViews"; *part << "Drawing_OpenBrowserView"; *part << "Drawing_Annotation"; + *part << "Drawing_Clip"; *part << "Drawing_ExportPage"; return root; } @@ -97,6 +99,8 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const *img << "Drawing_NewPage"; *img << "Drawing_OrthoViews"; *img << "Drawing_OpenBrowserView"; + *img << "Drawing_Annotation"; + *img << "Drawing_Clip"; img = new Gui::ToolBarItem(root); img->setCommand("Views"); *img << "Drawing_NewView"; From 2edfd1428c1943fedb95895ae8bbf1a77ffe8bbb Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 00:12:30 +0200 Subject: [PATCH 160/517] fix in makeTube --- src/Mod/Part/App/TopoShape.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index 22ccd16ad..fd90af18f 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1409,7 +1409,6 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdeg const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); BRepAdaptor_Curve path_adapt(path_edge); myPath = new BRepAdaptor_HCurve(path_adapt); - theContinuity = GeomAbs_C0; } //else if (this->_Shape.ShapeType() == TopAbs_WIRE) { // const TopoDS_Wire& path_wire = TopoDS::Wire(this->_Shape); From 23f4ce0d8f3af05dacb6a72656b42043fe21a54f Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 01:25:31 +0200 Subject: [PATCH 161/517] Mesh segmentation --- src/Mod/Mesh/App/CMakeLists.txt | 14 +- src/Mod/Mesh/App/Core/Algorithm.cpp | 37 ++-- src/Mod/Mesh/App/Core/Algorithm.h | 45 ++++- src/Mod/Mesh/App/Core/Approximation.cpp | 99 ++++----- src/Mod/Mesh/App/Core/Approximation.h | 203 +++++++++++-------- src/Mod/Mesh/App/Core/Curvature.cpp | 236 ++++++++++++++++++++++ src/Mod/Mesh/App/Core/Curvature.h | 75 +++++++ src/Mod/Mesh/App/Core/Segmentation.cpp | 228 +++++++++++++++++++++ src/Mod/Mesh/App/Core/Segmentation.h | 161 +++++++++++++++ src/Mod/Mesh/App/FeatureMeshCurvature.cpp | 50 ++--- src/Mod/Mesh/App/Makefile.am | 11 +- src/Mod/Mesh/App/Mesh.cpp | 12 +- src/Mod/Mesh/App/Mesh.h | 2 +- src/Mod/Mesh/App/MeshPy.xml | 17 +- src/Mod/Mesh/App/MeshPyImp.cpp | 51 ++++- 15 files changed, 1033 insertions(+), 208 deletions(-) create mode 100644 src/Mod/Mesh/App/Core/Curvature.cpp create mode 100644 src/Mod/Mesh/App/Core/Curvature.h create mode 100644 src/Mod/Mesh/App/Core/Segmentation.cpp create mode 100644 src/Mod/Mesh/App/Core/Segmentation.h diff --git a/src/Mod/Mesh/App/CMakeLists.txt b/src/Mod/Mesh/App/CMakeLists.txt index ee813be7b..97e285680 100644 --- a/src/Mod/Mesh/App/CMakeLists.txt +++ b/src/Mod/Mesh/App/CMakeLists.txt @@ -1,20 +1,26 @@ if(WIN32) - add_definitions(-DFCAppMesh -DWM4_FOUNDATION_DLL_EXPORT) + add_definitions(-DFCAppMesh -DWM4_FOUNDATION_DLL_EXPORT -DEIGEN2_SUPPORT) +else (Win32) + add_definitions(-DEIGEN2_SUPPORT) endif(WIN32) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/src/3rdParty ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_PATH} ${XERCESC_INCLUDE_DIR} + ${QT_QTCORE_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} - ${EIGEN2_INCLUDE_DIR} + ${EIGEN3_INCLUDE_DIR} ) set(Mesh_LIBS ${Boost_LIBRARIES} + ${QT_QTCORE_LIBRARY} + ${QT_QTCORE_LIBRARY_DEBUG} FreeCADBase FreeCADApp ) @@ -41,6 +47,8 @@ SET(Core_SRCS Core/Approximation.h Core/Builder.cpp Core/Builder.h + Core/Curvature.cpp + Core/Curvature.h Core/Definitions.cpp Core/Definitions.h Core/Degeneration.cpp @@ -61,6 +69,8 @@ SET(Core_SRCS Core/MeshKernel.h Core/Projection.cpp Core/Projection.h + Core/Segmentation.cpp + Core/Segmentation.h Core/SetOperations.cpp Core/SetOperations.h Core/Smoothing.cpp diff --git a/src/Mod/Mesh/App/Core/Algorithm.cpp b/src/Mod/Mesh/App/Core/Algorithm.cpp index 40d4907d4..281fba7f7 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.cpp +++ b/src/Mod/Mesh/App/Core/Algorithm.cpp @@ -1156,7 +1156,6 @@ void MeshAlgorithm::CheckFacets(const Base::ViewProjMethod* pclProj, const Base: { const MeshPointArray& p = _rclMesh.GetPoints(); const MeshFacetArray& f = _rclMesh.GetFacets(); - Base::SequencerLauncher seq("Check facets", f.size()); Base::Vector3f pt2d; unsigned long index=0; for (MeshFacetArray::_TConstIterator it = f.begin(); it != f.end(); ++it,++index) { @@ -1167,7 +1166,6 @@ void MeshAlgorithm::CheckFacets(const Base::ViewProjMethod* pclProj, const Base: break; } } - seq.next(); } } @@ -1743,47 +1741,38 @@ std::set MeshRefPointToFacets::NeighbourPoints(const std::vector< return nb; } -// ermittelt alle Nachbarn zum Facet deren Schwerpunkt unterhalb der mpx. Distanz befindet. -// Facet deren VISIT-Flag gesetzt ist werden nicht beruecksichtig. -/// @todo -void MeshRefPointToFacets::Neighbours (unsigned long ulFacetInd, float fMpxDist, std::vector &rclNb) +void MeshRefPointToFacets::Neighbours (unsigned long ulFacetInd, float fMaxDist, MeshCollector& collect) const { - rclNb.clear(); + std::set visited; Base::Vector3f clCenter = _rclMesh.GetFacet(ulFacetInd).GetGravityPoint(); const MeshFacetArray& rFacets = _rclMesh.GetFacets(); - SearchNeighbours(rFacets.begin() + ulFacetInd, clCenter, fMpxDist * fMpxDist, rclNb); - - for (std::vector::iterator i = rclNb.begin(); i != rclNb.end(); i++) - (*i)->ResetFlag(MeshFacet::VISIT); + SearchNeighbours(rFacets, ulFacetInd, clCenter, fMaxDist * fMaxDist, visited, collect); } -/// @todo -void MeshRefPointToFacets::SearchNeighbours(MeshFacetArray::_TConstIterator f_it, const Base::Vector3f &rclCenter, float fMpxDist, std::vector &rclNb) +void MeshRefPointToFacets::SearchNeighbours(const MeshFacetArray& rFacets, unsigned long index, const Base::Vector3f &rclCenter, + float fMaxDist2, std::set& visited, MeshCollector& collect) const { - if (f_it->IsFlag(MeshFacet::VISIT) == true) + if (visited.find(index) != visited.end()) return; - if (Base::DistanceP2(rclCenter, _rclMesh.GetFacet(*f_it).GetGravityPoint()) > fMpxDist) + const MeshFacet& face = rFacets[index]; + if (Base::DistanceP2(rclCenter, _rclMesh.GetFacet(face).GetGravityPoint()) > fMaxDist2) return; - rclNb.push_back(f_it); - f_it->SetFlag(MeshFacet::VISIT); - - MeshPointArray::_TConstIterator p_beg = _rclMesh.GetPoints().begin(); - MeshFacetArray::_TConstIterator f_beg = _rclMesh.GetFacets().begin(); - + visited.insert(index); + collect.Append(_rclMesh, index); for (int i = 0; i < 3; i++) { - const std::set &f = (*this)[f_it->_aulPoints[i]]; + const std::set &f = (*this)[face._aulPoints[i]]; for (std::set::const_iterator j = f.begin(); j != f.end(); ++j) { - SearchNeighbours(f_beg+*j, rclCenter, fMpxDist, rclNb); + SearchNeighbours(rFacets, *j, rclCenter, fMaxDist2, visited, collect); } } } MeshFacetArray::_TConstIterator -MeshRefPointToFacets::getFacet (unsigned long index) const +MeshRefPointToFacets::GetFacet (unsigned long index) const { return _rclMesh.GetFacets().begin() + index; } diff --git a/src/Mod/Mesh/App/Core/Algorithm.h b/src/Mod/Mesh/App/Core/Algorithm.h index 9baa667e2..78a4caf5b 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.h +++ b/src/Mod/Mesh/App/Core/Algorithm.h @@ -310,6 +310,43 @@ protected: const MeshKernel &_rclMesh; /**< The mesh kernel. */ }; +class MeshExport MeshCollector +{ +public: + MeshCollector(){} + virtual void Append(const MeshCore::MeshKernel&, unsigned long index) = 0; +}; + +class MeshExport PointCollector : public MeshCollector +{ +public: + PointCollector(std::vector& ind) : indices(ind){} + virtual void Append(const MeshCore::MeshKernel& kernel, unsigned long index) + { + unsigned long ulP1, ulP2, ulP3; + kernel.GetFacetPoints(index, ulP1, ulP2, ulP3); + indices.push_back(ulP1); + indices.push_back(ulP2); + indices.push_back(ulP3); + } + +private: + std::vector& indices; +}; + +class MeshExport FacetCollector : public MeshCollector +{ +public: + FacetCollector(std::vector& ind) : indices(ind){} + void Append(const MeshCore::MeshKernel&, unsigned long index) + { + indices.push_back(index); + } + +private: + std::vector& indices; +}; + /** * The MeshRefPointToFacets builds up a structure to have access to all facets indexing * a point. @@ -329,14 +366,14 @@ public: /// Rebuilds up data structure void Rebuild (void); const std::set& operator[] (unsigned long) const; - MeshFacetArray::_TConstIterator getFacet (unsigned long) const; + MeshFacetArray::_TConstIterator GetFacet (unsigned long) const; std::set NeighbourPoints(const std::vector& , int level) const; - void Neighbours (unsigned long ulFacetInd, float fMaxDist, std::vector &rclNb); + void Neighbours (unsigned long ulFacetInd, float fMaxDist, MeshCollector& collect) const; Base::Vector3f GetNormal(unsigned long) const; protected: - void SearchNeighbours(MeshFacetArray::_TConstIterator pFIter, const Base::Vector3f &rclCenter, - float fMaxDist, std::vector &rclNb); + void SearchNeighbours(const MeshFacetArray& rFacets, unsigned long index, const Base::Vector3f &rclCenter, + float fMaxDist, std::set &visit, MeshCollector& collect) const; protected: const MeshKernel &_rclMesh; /**< The mesh kernel. */ diff --git a/src/Mod/Mesh/App/Core/Approximation.cpp b/src/Mod/Mesh/App/Core/Approximation.cpp index ace1a796e..15b0c522f 100644 --- a/src/Mod/Mesh/App/Core/Approximation.cpp +++ b/src/Mod/Mesh/App/Core/Approximation.cpp @@ -37,6 +37,7 @@ #include //#define FC_USE_EIGEN +//#define FC_USE_BOOST #if defined(FC_USE_BOOST) #include #include @@ -54,25 +55,26 @@ extern "C" void LAPACK_DGESV (int const* n, int const* nrhs, #elif defined(FC_USE_EIGEN) # include #endif +# include using namespace MeshCore; -void Approximation::Convert( const Wm4::Vector3& Wm4, Base::Vector3f& pt) +void Approximation::Convert( const Wm4::Vector3& Wm4, Base::Vector3f& pt) { - pt.Set( Wm4.X(), Wm4.Y(), Wm4.Z() ); + pt.Set( (float)Wm4.X(), (float)Wm4.Y(), (float)Wm4.Z() ); } -void Approximation::Convert( const Base::Vector3f& pt, Wm4::Vector3& Wm4) +void Approximation::Convert( const Base::Vector3f& pt, Wm4::Vector3& Wm4) { Wm4.X() = pt.x; Wm4.Y() = pt.y; Wm4.Z() = pt.z; } -void Approximation::GetMgcVectorArray(std::vector< Wm4::Vector3 >& rcPts) const +void Approximation::GetMgcVectorArray(std::vector< Wm4::Vector3 >& rcPts) const { std::list< Base::Vector3f >::const_iterator It; for (It = _vPoints.begin(); It != _vPoints.end(); ++It) { - Wm4::Vector3 pt( (*It).x, (*It).y, (*It).z ); + Wm4::Vector3 pt( (*It).x, (*It).y, (*It).z ); rcPts.push_back( pt ); } } @@ -176,7 +178,7 @@ float PlaneFit::Fit() int r = lapack::syev('V','U',A,eigenval,lapack::optimal_workspace()); if (r) { } - float sigma; + float sigma = 0; #elif defined(FC_USE_EIGEN) Eigen::Matrix3d covMat = Eigen::Matrix3d::Zero(); covMat(0,0) = sxx; @@ -360,17 +362,15 @@ void PlaneFit::ProjectToPlane () // ------------------------------------------------------------------------------- -float FunctionContainer::dKoeff[]; // Koeffizienten der Quadrik - -bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance) +bool QuadraticFit::GetCurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance) { assert( _bIsFitted ); bool bResult = false; if (_bIsFitted) { - Wm4::Vector3 Dir0, Dir1; + Wm4::Vector3 Dir0, Dir1; FunctionContainer clFuncCont( _fCoeff ); bResult = clFuncCont.CurvatureInfo( x, y, z, rfCurv0, rfCurv1, Dir0, Dir1, dDistance ); @@ -382,7 +382,7 @@ bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, return bResult; } -bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1) +bool QuadraticFit::GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1) { bool bResult = false; @@ -394,12 +394,12 @@ bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, f return bResult; } -const float& QuadraticFit::GetCoeffArray() const +const double& QuadraticFit::GetCoeffArray() const { return _fCoeff[0]; } -float QuadraticFit::GetCoeff(unsigned long ulIndex) const +double QuadraticFit::GetCoeff(unsigned long ulIndex) const { assert( ulIndex >= 0 && ulIndex < 10 ); @@ -414,9 +414,9 @@ float QuadraticFit::Fit() float fResult = FLOAT_MAX; if (CountPoints() > 0) { - std::vector< Wm4::Vector3 > cPts; + std::vector< Wm4::Vector3 > cPts; GetMgcVectorArray( cPts ); - fResult = Wm4::QuadraticFit3( CountPoints(), &(cPts[0]), _fCoeff ); + fResult = Wm4::QuadraticFit3( CountPoints(), &(cPts[0]), _fCoeff ); _fLastResult = fResult; _bIsFitted = true; @@ -425,7 +425,7 @@ float QuadraticFit::Fit() return fResult; } -void QuadraticFit::CalcEigenValues(float &dLambda1, float &dLambda2, float &dLambda3, +void QuadraticFit::CalcEigenValues(double &dLambda1, double &dLambda2, double &dLambda3, Base::Vector3f &clEV1, Base::Vector3f &clEV2, Base::Vector3f &clEV3) const { assert( _bIsFitted ); @@ -451,16 +451,16 @@ void QuadraticFit::CalcEigenValues(float &dLambda1, float &dLambda2, float &dLam * */ - Wm4::Matrix3 akMat(_fCoeff[4], _fCoeff[7]/2.0f, _fCoeff[8]/2.0f, + Wm4::Matrix3 akMat(_fCoeff[4], _fCoeff[7]/2.0f, _fCoeff[8]/2.0f, _fCoeff[7]/2.0f, _fCoeff[5], _fCoeff[9]/2.0f, _fCoeff[8]/2.0f, _fCoeff[9]/2.0f, _fCoeff[6] ); - Wm4::Matrix3 rkRot, rkDiag; + Wm4::Matrix3 rkRot, rkDiag; akMat.EigenDecomposition( rkRot, rkDiag ); - Wm4::Vector3 vEigenU = rkRot.GetColumn(0); - Wm4::Vector3 vEigenV = rkRot.GetColumn(1); - Wm4::Vector3 vEigenW = rkRot.GetColumn(2); + Wm4::Vector3 vEigenU = rkRot.GetColumn(0); + Wm4::Vector3 vEigenV = rkRot.GetColumn(1); + Wm4::Vector3 vEigenW = rkRot.GetColumn(2); Convert( vEigenU, clEV1 ); Convert( vEigenV, clEV2 ); @@ -471,11 +471,11 @@ void QuadraticFit::CalcEigenValues(float &dLambda1, float &dLambda2, float &dLam dLambda3 = rkDiag[2][2]; } -void QuadraticFit::CalcZValues( float x, float y, float &dZ1, float &dZ2 ) const +void QuadraticFit::CalcZValues( double x, double y, double &dZ1, double &dZ2 ) const { assert( _bIsFitted ); - float dDisk = _fCoeff[3]*_fCoeff[3]+2*_fCoeff[3]*_fCoeff[8]*x+2*_fCoeff[3]*_fCoeff[9]*y+ + double dDisk = _fCoeff[3]*_fCoeff[3]+2*_fCoeff[3]*_fCoeff[8]*x+2*_fCoeff[3]*_fCoeff[9]*y+ _fCoeff[8]*_fCoeff[8]*x*x+2*_fCoeff[8]*x*_fCoeff[9]*y+_fCoeff[9]*_fCoeff[9]*y*y- 4*_fCoeff[6]*_fCoeff[0]-4*_fCoeff[6]*_fCoeff[1]*x-4*_fCoeff[6]*_fCoeff[2]*y- 4*_fCoeff[6]*_fCoeff[7]*x*y-4*_fCoeff[6]*_fCoeff[4]*x*x-4*_fCoeff[6]*_fCoeff[5]*y*y; @@ -494,8 +494,8 @@ void QuadraticFit::CalcZValues( float x, float y, float &dZ1, float &dZ2 ) const else dDisk = sqrt( dDisk ); - dZ1 = 0.5f * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y + dDisk ) / _fCoeff[6] ); - dZ2 = 0.5f * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y - dDisk ) / _fCoeff[6] ); + dZ1 = 0.5 * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y + dDisk ) / _fCoeff[6] ); + dZ2 = 0.5 * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y - dDisk ) / _fCoeff[6] ); } // ------------------------------------------------------------------------------- @@ -529,13 +529,13 @@ float SurfaceFit::Fit() return fResult; } -bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance ) +bool SurfaceFit::GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance ) { bool bResult = false; if (_bIsFitted) { - Wm4::Vector3 Dir0, Dir1; + Wm4::Vector3 Dir0, Dir1; FunctionContainer clFuncCont( _fCoeff ); bResult = clFuncCont.CurvatureInfo( x, y, z, rfCurv0, rfCurv1, Dir0, Dir1, dDistance ); @@ -547,7 +547,7 @@ bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, flo return bResult; } -bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1) +bool SurfaceFit::GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1) { assert( _bIsFitted ); bool bResult = false; @@ -560,18 +560,17 @@ bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, flo return bResult; } -float SurfaceFit::PolynomFit() +double SurfaceFit::PolynomFit() { if (PlaneFit::Fit() == FLOAT_MAX) return FLOAT_MAX; -#if 0 -#if defined(FC_USE_BOOST) Base::Vector3d bs(this->_vBase.x,this->_vBase.y,this->_vBase.z); Base::Vector3d ex(this->_vDirU.x,this->_vDirU.y,this->_vDirU.z); Base::Vector3d ey(this->_vDirV.x,this->_vDirV.y,this->_vDirV.z); Base::Vector3d ez(this->_vDirW.x,this->_vDirW.y,this->_vDirW.z); +#if defined(FC_USE_BOOST) ublas::matrix A(6,6); ublas::vector b(6); for (int i=0; i<6; i++) { @@ -580,6 +579,11 @@ float SurfaceFit::PolynomFit() } b(i) = 0.0; } +#else + Eigen::Matrix A = Eigen::Matrix::Zero(); + Eigen::Matrix b = Eigen::Matrix::Zero(); + Eigen::Matrix x = Eigen::Matrix::Zero(); +#endif for (std::list::const_iterator it = _vPoints.begin(); it != _vPoints.end(); it++) { Base::Vector3d clPoint(it->x,it->y,it->z); @@ -648,29 +652,34 @@ float SurfaceFit::PolynomFit() A(5,4) = A(4,5); - +#if defined(FC_USE_BOOST) namespace lapack= boost::numeric::bindings::lapack; //std::clog << A << std::endl; //std::clog << b << std::endl; - lapack::gesv(A,b); + //lapack::gesv(A,b); + ublas::vector x(6); + x = b; //std::clog << b << std::endl; +#else + // A.llt().solve(b,&x); // not sure if always positive definite + A.qr().solve(b,&x); +#endif - _fCoeff[0] = (float)(-b(5)); - _fCoeff[1] = (float)(-b(3)); - _fCoeff[2] = (float)(-b(4)); + _fCoeff[0] = (float)(-x(5)); + _fCoeff[1] = (float)(-x(3)); + _fCoeff[2] = (float)(-x(4)); _fCoeff[3] = 1.0f; - _fCoeff[4] = (float)(-b(0)); - _fCoeff[5] = (float)(-b(1)); + _fCoeff[4] = (float)(-x(0)); + _fCoeff[5] = (float)(-x(1)); _fCoeff[6] = 0.0f; - _fCoeff[7] = (float)(-b(2)); + _fCoeff[7] = (float)(-x(2)); _fCoeff[8] = 0.0f; _fCoeff[9] = 0.0f; -#endif -#endif + return 0.0f; } -float SurfaceFit::Value(float x, float y) const +double SurfaceFit::Value(double x, double y) const { float z = 0.0f; if (_bIsFitted) { diff --git a/src/Mod/Mesh/App/Core/Approximation.h b/src/Mod/Mesh/App/Core/Approximation.h index 74124f35e..623a17dac 100644 --- a/src/Mod/Mesh/App/Core/Approximation.h +++ b/src/Mod/Mesh/App/Core/Approximation.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -34,8 +35,64 @@ #include #include -namespace MeshCore { +namespace Wm4 +{ +/** + * An implicit surface is defined by F(x,y,z) = 0. + * This polynomial surface is actually defined as z = f(x,y) = ax^2 + by^2 + cx + dy + exy + g. + * To use Wm3 routines for implicit surfaces we can write the surface also as F(x,y,z) = f(x,y) - z = 0. + * @author Werner Mayer + */ +template +class PolynomialSurface : public ImplicitSurface +{ +public: + PolynomialSurface (const Real afCoeff[6]) + { for (int i=0; i<6; i++) m_afCoeff[i] = afCoeff[i]; } + + virtual ~PolynomialSurface () {} + + // the function + virtual Real F (const Vector3& rkP) const + { + return ( m_afCoeff[0]*rkP.X()*rkP.X() + + m_afCoeff[1]*rkP.Y()*rkP.Y() + + m_afCoeff[2]*rkP.X() + + m_afCoeff[3]*rkP.Y() + + m_afCoeff[4]*rkP.X()*rkP.Y() + + m_afCoeff[5]-rkP.Z()) ; + } + + // first-order partial derivatives + virtual Real FX (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[0]*rkP.X() + m_afCoeff[2] + m_afCoeff[4]*rkP.Y()); } + virtual Real FY (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[1]*rkP.Y() + m_afCoeff[3] + m_afCoeff[4]*rkP.X()); } + virtual Real FZ (const Vector3& rkP) const + { return (Real)-1.0; } + + // second-order partial derivatives + virtual Real FXX (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[0]); } + virtual Real FXY (const Vector3& rkP) const + { return (Real)(m_afCoeff[4]); } + virtual Real FXZ (const Vector3& rkP) const + { return (Real)0.0; } + virtual Real FYY (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[1]); } + virtual Real FYZ (const Vector3& rkP) const + { return (Real)0.0; } + virtual Real FZZ (const Vector3& rkP) const + { return (Real)0.0; } + +protected: + Real m_afCoeff[6]; +}; + +} + +namespace MeshCore { /** * Abstract base class for approximation of a geometry to a given set of points. @@ -104,15 +161,15 @@ protected: /** * Converts point from Wm4::Vector3 to Base::Vector3f. */ - static void Convert( const Wm4::Vector3&, Base::Vector3f&); + static void Convert( const Wm4::Vector3&, Base::Vector3f&); /** * Converts point from Base::Vector3f to Wm4::Vector3. */ - static void Convert( const Base::Vector3f&, Wm4::Vector3&); + static void Convert( const Base::Vector3f&, Wm4::Vector3&); /** * Creates a vector of Wm4::Vector3 elements. */ - void GetMgcVectorArray( std::vector< Wm4::Vector3 >& rcPts ) const; + void GetMgcVectorArray( std::vector< Wm4::Vector3 >& rcPts ) const; protected: std::list< Base::Vector3f > _vPoints; /**< Holds the points for the fit algorithm. */ @@ -201,22 +258,22 @@ public: /** * bertragen der Quadric-Koeffizienten * @param ulIndex Nummer des Koeffizienten (0..9) - * @return float Wert des Koeffizienten + * @return double Wert des Koeffizienten */ - float GetCoeff(unsigned long ulIndex) const; + double GetCoeff(unsigned long ulIndex) const; /** * bertragen der Koeffizientan als Referenz * auf das interne Array - * @return const float& Referenz auf das float-Array + * @return const double& Referenz auf das double-Array */ - const float& GetCoeffArray() const; + const double& GetCoeffArray() const; /** * Aufruf des Fit-Algorithmus * @return float Qualitt des Fits. */ float Fit(); - void CalcZValues(float x, float y, float &dZ1, float &dZ2) const; + void CalcZValues(double x, double y, double &dZ1, double &dZ2) const; /** * Berechnen der Krmmungswerte der Quadric in einem bestimmten Punkt. * @param x X-Koordinate @@ -229,12 +286,12 @@ public: * @param dDistance * @return bool Fehlerfreie Ausfrhung = true, ansonsten false */ - bool GetCurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance); + bool GetCurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance); - bool GetCurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfcurv1); + bool GetCurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfcurv1); /** * Aufstellen der Formanmatrix A und Berechnen der Eigenwerte. * @param dLambda1 Eigenwert 1 @@ -244,11 +301,11 @@ public: * @param clEV2 Eigenvektor 2 * @param clEV3 Eigenvektor 3 */ - void CalcEigenValues(float &dLambda1, float &dLambda2, float &dLambda3, + void CalcEigenValues(double &dLambda1, double &dLambda2, double &dLambda3, Base::Vector3f &clEV1, Base::Vector3f &clEV2, Base::Vector3f &clEV3) const; protected: - float _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ + double _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ }; // ------------------------------------------------------------------------------- @@ -275,15 +332,15 @@ public: */ virtual ~SurfaceFit(){}; - bool GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance); - bool GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfcurv1); + bool GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance); + bool GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfcurv1); float Fit(); - float Value(float x, float y) const; + double Value(double x, double y) const; protected: - float PolynomFit(); - float _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ + double PolynomFit(); + double _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ }; // ------------------------------------------------------------------------------- @@ -300,42 +357,24 @@ public: * Die MGC-Algorithmen arbeiten mit Funktionen dieses * Types */ - typedef float (*Function)(float,float,float); + typedef double (*Function)(double,double,double); /** * Der parametrisierte Konstruktor. Erwartet ein Array * mit den Quadric-Koeffizienten. * @param pKoef Zeiger auf die Quadric-Parameter - * (float [10]) + * (double [10]) */ - FunctionContainer(const float *pKoef) + FunctionContainer(const double *pKoef) { Assign( pKoef ); -/* - Function oF; - Function aoDF[3]; - Function aoD2F[6]; - - oF = &F; - aoDF[0] = &Fx; - aoDF[1] = &Fy; - aoDF[2] = &Fz; - aoD2F[0] = &Fxx; - aoD2F[1] = &Fxy; - aoD2F[2] = &Fxz; - aoD2F[3] = &Fyy; - aoD2F[4] = &Fyz; - aoD2F[5] = &Fzz; - - pImplSurf = new Wm4::QuadricSurface( oF, aoDF, aoD2F );*/ - - pImplSurf = new Wm4::QuadricSurface( dKoeff ); + pImplSurf = new Wm4::QuadricSurface( dKoeff ); } /** * bernehmen der Quadric-Parameter * @param pKoef Zeiger auf die Quadric-Parameter - * (doube [10]) + * (double [10]) */ - void Assign( const float *pKoef ) + void Assign( const double *pKoef ) { for (long ct=0; ct < 10; ct++) dKoeff[ ct ] = pKoef[ ct ]; @@ -344,13 +383,13 @@ public: * Destruktor. Lscht die ImpicitSurface Klasse * der MGC-Bibliothek wieder */ - virtual ~FunctionContainer(){ delete pImplSurf; } + ~FunctionContainer(){ delete pImplSurf; } /** * Zugriff auf die Koeffizienten der Quadric * @param idx Index des Parameters - * @return float& Der Koeffizient + * @return double& Der Koeffizient */ - float& operator[](int idx){ return dKoeff[ idx ]; } + double& operator[](int idx){ return dKoeff[ idx ]; } /** * Redirector auf eine Methode der MGC Bibliothek. Ermittelt * die Hauptkrmmungen und ihre Richtungen im angegebenen Punkt. @@ -364,22 +403,22 @@ public: * @param dDistance Ergebnis das die Entfernung des Punktes von der Quadrik angibt. * @return bool Fehlerfreie Ausfrhung = true, ansonsten false */ - bool CurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1, - Wm4::Vector3 &rkDir0, Wm4::Vector3 &rkDir1, float &dDistance) + bool CurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1, + Wm4::Vector3 &rkDir0, Wm4::Vector3 &rkDir1, double &dDistance) { - return pImplSurf->ComputePrincipalCurvatureInfo( Wm4::Vector3(x, y, z),rfCurv0, rfCurv1, rkDir0, rkDir1 ); + return pImplSurf->ComputePrincipalCurvatureInfo( Wm4::Vector3(x, y, z),rfCurv0, rfCurv1, rkDir0, rkDir1 ); } - Base::Vector3f GetGradient( float x, float y, float z ) const + Base::Vector3f GetGradient( double x, double y, double z ) const { - Wm4::Vector3 grad = pImplSurf->GetGradient( Wm4::Vector3(x, y, z) ); + Wm4::Vector3 grad = pImplSurf->GetGradient( Wm4::Vector3(x, y, z) ); return Base::Vector3f( grad.X(), grad.Y(), grad.Z() ); } - Base::Matrix4D GetHessian( float x, float y, float z ) const + Base::Matrix4D GetHessian( double x, double y, double z ) const { - Wm4::Matrix3 hess = pImplSurf->GetHessian( Wm4::Vector3(x, y, z) ); + Wm4::Matrix3 hess = pImplSurf->GetHessian( Wm4::Vector3(x, y, z) ); Base::Matrix4D cMat; cMat.setToUnity(); cMat[0][0] = hess[0][0]; cMat[0][1] = hess[0][1]; cMat[0][2] = hess[0][2]; cMat[1][0] = hess[1][0]; cMat[1][1] = hess[1][1]; cMat[1][2] = hess[1][2]; @@ -387,23 +426,23 @@ public: return cMat; } - bool CurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1) + bool CurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1) { - float dQuot = Fz(x,y,z); - float zx = - ( Fx(x,y,z) / dQuot ); - float zy = - ( Fy(x,y,z) / dQuot ); + double dQuot = Fz(x,y,z); + double zx = - ( Fx(x,y,z) / dQuot ); + double zy = - ( Fy(x,y,z) / dQuot ); - float zxx = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zx * zx + dKoeff[8] * zx ) ) / dQuot; - float zyy = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zy * zy + dKoeff[9] * zy ) ) / dQuot; - float zxy = - ( dKoeff[6] * zx * zy + dKoeff[7] + dKoeff[8] * zy + dKoeff[9] * zx ) / dQuot; + double zxx = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zx * zx + dKoeff[8] * zx ) ) / dQuot; + double zyy = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zy * zy + dKoeff[9] * zy ) ) / dQuot; + double zxy = - ( dKoeff[6] * zx * zy + dKoeff[7] + dKoeff[8] * zy + dKoeff[9] * zx ) / dQuot; - float dNen = 1 + zx*zx + zy*zy; - float dNenSqrt = (float)sqrt( dNen ); - float K = ( zxx * zyy - zxy * zxy ) / ( dNen * dNen ); - float H = 0.5f * ( ( 1.0f+zx*zx - 2*zx*zy*zxy + (1.0f+zy*zy)*zxx ) / ( dNenSqrt * dNenSqrt * dNenSqrt ) ) ; + double dNen = 1 + zx*zx + zy*zy; + double dNenSqrt = (double)sqrt( dNen ); + double K = ( zxx * zyy - zxy * zxy ) / ( dNen * dNen ); + double H = 0.5f * ( ( 1.0f+zx*zx - 2*zx*zy*zxy + (1.0f+zy*zy)*zxx ) / ( dNenSqrt * dNenSqrt * dNenSqrt ) ) ; - float dDiscr = (float)sqrt(fabs(H*H-K)); + double dDiscr = (double)sqrt(fabs(H*H-K)); rfCurv0 = H - dDiscr; rfCurv1 = H + dDiscr; @@ -411,7 +450,7 @@ public: } //+++++++++ Quadric +++++++++++++++++++++++++++++++++++++++ - static float F ( float x, float y, float z ) + double F ( double x, double y, double z ) { return (dKoeff[0] + dKoeff[1]*x + dKoeff[2]*y + dKoeff[3]*z + dKoeff[4]*x*x + dKoeff[5]*y*y + dKoeff[6]*z*z + @@ -419,48 +458,48 @@ public: } //+++++++++ 1. derivations ++++++++++++++++++++++++++++++++ - static float Fx ( float x, float y, float z ) + double Fx ( double x, double y, double z ) { return( dKoeff[1] + 2.0f*dKoeff[4]*x + dKoeff[7]*y + dKoeff[8]*z ); } - static float Fy ( float x, float y, float z ) + double Fy ( double x, double y, double z ) { return( dKoeff[2] + 2.0f*dKoeff[5]*y + dKoeff[7]*x + dKoeff[9]*z ); } - static float Fz ( float x, float y, float z ) + double Fz ( double x, double y, double z ) { return( dKoeff[3] + 2.0f*dKoeff[6]*z + dKoeff[8]*x + dKoeff[9]*y ); } //+++++++++ 2. derivations ++++++++++++++++++++++++++++++++ - static float Fxx( float x, float y, float z ) + double Fxx( double x, double y, double z ) { return( 2.0f*dKoeff[4] ); } - static float Fxy( float x, float y, float z ) + double Fxy( double x, double y, double z ) { return( dKoeff[7] ); } - static float Fxz( float x, float y, float z ) + double Fxz( double x, double y, double z ) { return( dKoeff[8] ); } - static float Fyy( float x, float y, float z ) + double Fyy( double x, double y, double z ) { return( 2.0f*dKoeff[5] ); } - static float Fyz( float x, float y, float z ) + double Fyz( double x, double y, double z ) { return( dKoeff[9] ); } - static float Fzz( float x, float y, float z ) + double Fzz( double x, double y, double z ) { return( 2.0f*dKoeff[6] ); } protected: - static float dKoeff[ 10 ]; /**< Koeffizienten der Quadric */ - Wm4::ImplicitSurface *pImplSurf; /**< Zugriff auf die MGC-Bibliothek */ + double dKoeff[ 10 ]; /**< Koeffizienten der Quadric */ + Wm4::ImplicitSurface *pImplSurf; /**< Zugriff auf die MGC-Bibliothek */ private: /** diff --git a/src/Mod/Mesh/App/Core/Curvature.cpp b/src/Mod/Mesh/App/Core/Curvature.cpp new file mode 100644 index 000000000..d0371da4b --- /dev/null +++ b/src/Mod/Mesh/App/Core/Curvature.cpp @@ -0,0 +1,236 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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" +#ifndef _PreComp_ +# include +#endif + +#include +#include +#include +#include + +#include +#include + +#include "Curvature.h" +#include "Algorithm.h" +#include "Approximation.h" +#include "MeshKernel.h" +#include "Iterator.h" +#include "Tools.h" +#include +#include + +using namespace MeshCore; + +MeshCurvature::MeshCurvature(const MeshKernel& kernel) + : myKernel(kernel), myMinPoints(20), myRadius(0.5f) +{ + mySegment.resize(kernel.CountFacets()); + std::generate(mySegment.begin(), mySegment.end(), Base::iotaGen(0)); +} + +MeshCurvature::MeshCurvature(const MeshKernel& kernel, const std::vector& segm) + : myKernel(kernel), myMinPoints(20), myRadius(0.5f), mySegment(segm) +{ +} + +void MeshCurvature::ComputePerFace(bool parallel) +{ + Base::Vector3f rkDir0, rkDir1, rkPnt; + Base::Vector3f rkNormal; + myCurvature.clear(); + MeshRefPointToFacets search(myKernel); + FacetCurvature face(myKernel, search, myRadius, myMinPoints); + + if (!parallel) { + Base::SequencerLauncher seq("Curvature estimation", mySegment.size()); + for (std::vector::iterator it = mySegment.begin(); it != mySegment.end(); ++it) { + CurvatureInfo info = face.Compute(*it); + myCurvature.push_back(info); + seq.next(); + } + } + else { + QFuture future = QtConcurrent::mapped + (mySegment, boost::bind(&FacetCurvature::Compute, &face, _1)); + QFutureWatcher watcher; + watcher.setFuture(future); + watcher.waitForFinished(); + for (QFuture::const_iterator it = future.begin(); it != future.end(); ++it) { + myCurvature.push_back(*it); + } + } +} + +void MeshCurvature::ComputePerVertex() +{ + myCurvature.clear(); + + // get all points + std::vector< Wm4::Vector3 > aPnts; + aPnts.reserve(myKernel.CountPoints()); + MeshPointIterator cPIt(myKernel); + for (cPIt.Init(); cPIt.More(); cPIt.Next()) { + Wm4::Vector3 cP(cPIt->x, cPIt->y, cPIt->z); + aPnts.push_back(cP); + } + + // get all point connections + std::vector aIdx; + aIdx.reserve(3*myKernel.CountFacets()); + const MeshFacetArray& raFts = myKernel.GetFacets(); + for (MeshFacetArray::const_iterator jt = raFts.begin(); jt != raFts.end(); ++jt) { + for (int i=0; i<3; i++) { + aIdx.push_back((int)jt->_aulPoints[i]); + } + } + + // compute vertex based curvatures + Wm4::MeshCurvature meshCurv(myKernel.CountPoints(), &(aPnts[0]), myKernel.CountFacets(), &(aIdx[0])); + + // get curvature information now + const Wm4::Vector3* aMaxCurvDir = meshCurv.GetMaxDirections(); + const Wm4::Vector3* aMinCurvDir = meshCurv.GetMinDirections(); + const double* aMaxCurv = meshCurv.GetMaxCurvatures(); + const double* aMinCurv = meshCurv.GetMinCurvatures(); + + myCurvature.reserve(myKernel.CountPoints()); + for (unsigned long i=0; i& ind) : indices(ind){} + virtual void Append(const MeshCore::MeshKernel& kernel, unsigned long index) + { + unsigned long ulP1, ulP2, ulP3; + kernel.GetFacetPoints(index, ulP1, ulP2, ulP3); + indices.insert(ulP1); + indices.insert(ulP2); + indices.insert(ulP3); + } + +private: + std::set& indices; +}; +} + +// -------------------------------------------------------- + +FacetCurvature::FacetCurvature(const MeshKernel& kernel, const MeshRefPointToFacets& search, float r, unsigned long pt) + : myKernel(kernel), mySearch(search), myRadius(r), myMinPoints(pt) +{ +} + +CurvatureInfo FacetCurvature::Compute(unsigned long index) const +{ + Base::Vector3f rkDir0, rkDir1, rkPnt; + Base::Vector3f rkNormal; + + MeshGeomFacet face = myKernel.GetFacet(index); + Base::Vector3f face_gravity = face.GetGravityPoint(); + Base::Vector3f face_normal = face.GetNormal(); + std::set point_indices; + FitPointCollector collect(point_indices); + + float searchDist = myRadius; + int attempts=0; + do { + mySearch.Neighbours(index, searchDist, collect); + if (point_indices.empty()) + break; + float min_points = myMinPoints; + float use_points = point_indices.size(); + searchDist = searchDist * sqrt(min_points/use_points); + } + while((point_indices.size() < myMinPoints) && (attempts++ < 3)); + + std::vector fitPoints; + const MeshPointArray& verts = myKernel.GetPoints(); + fitPoints.reserve(point_indices.size()); + for (std::set::iterator it = point_indices.begin(); it != point_indices.end(); ++it) { + fitPoints.push_back(verts[*it] - face_gravity); + } + + float fMin, fMax; + if (fitPoints.size() >= myMinPoints) { + SurfaceFit surf_fit; + surf_fit.AddPoints(fitPoints); + surf_fit.Fit(); + rkNormal = surf_fit.GetNormal(); + double dMin, dMax, dDistance; + if (surf_fit.GetCurvatureInfo(0.0, 0.0, 0.0, dMin, dMax, rkDir1, rkDir0, dDistance)) { + fMin = (float)dMin; + fMax = (float)dMax; + } + else { + fMin = FLT_MAX; + fMax = FLT_MAX; + } + } + else { + // too few points => cannot calc any properties + fMin = FLT_MAX; + fMax = FLT_MAX; + } + + CurvatureInfo info; + if (fMin < fMax) { + info.fMaxCurvature = fMax; + info.fMinCurvature = fMin; + info.cMaxCurvDir = rkDir1; + info.cMinCurvDir = rkDir0; + } + else { + info.fMaxCurvature = fMin; + info.fMinCurvature = fMax; + info.cMaxCurvDir = rkDir0; + info.cMinCurvDir = rkDir1; + } + + // Reverse the direction of the normal vector if required + // (Z component of "local" normal vectors should be opposite in sign to the "local" view vector) + if (rkNormal * face_normal < 0.0) { + // Note: Changing the normal directions is similar to flipping over the object. + // In this case we must adjust the curvature information as well. + std::swap(info.cMaxCurvDir,info.cMinCurvDir); + std::swap(info.fMaxCurvature,info.fMinCurvature); + info.fMaxCurvature *= (-1.0); + info.fMinCurvature *= (-1.0); + } + + return info; +} diff --git a/src/Mod/Mesh/App/Core/Curvature.h b/src/Mod/Mesh/App/Core/Curvature.h new file mode 100644 index 000000000..7c200946a --- /dev/null +++ b/src/Mod/Mesh/App/Core/Curvature.h @@ -0,0 +1,75 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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 MESHCORE_CURVATURE_H +#define MESHCORE_CURVATURE_H + +#include +#include + +namespace MeshCore { + +class MeshKernel; +class MeshRefPointToFacets; + +/** Curvature information. */ +struct MeshExport CurvatureInfo +{ + float fMaxCurvature, fMinCurvature; + Base::Vector3f cMaxCurvDir, cMinCurvDir; +}; + +class MeshExport FacetCurvature +{ +public: + FacetCurvature(const MeshKernel& kernel, const MeshRefPointToFacets& search, float, unsigned long); + CurvatureInfo Compute(unsigned long index) const; + +private: + const MeshKernel& myKernel; + const MeshRefPointToFacets& mySearch; + unsigned long myMinPoints; + float myRadius; +}; + +class MeshExport MeshCurvature +{ +public: + MeshCurvature(const MeshKernel& kernel); + MeshCurvature(const MeshKernel& kernel, const std::vector& segm); + float GetRadius() const { return myRadius; } + void SetRadius(float r) { myRadius = r; } + void ComputePerFace(bool parallel); + void ComputePerVertex(); + const std::vector& GetCurvature() const { return myCurvature; } + +private: + const MeshKernel& myKernel; + unsigned long myMinPoints; + float myRadius; + std::vector mySegment; + std::vector myCurvature; +}; + +} // MeshCore + +#endif // MESHCORE_CURVATURE_H diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp new file mode 100644 index 000000000..4326457e5 --- /dev/null +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -0,0 +1,228 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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" +#ifndef _PreComp_ +#include +#endif + +#include "Segmentation.h" +#include "Algorithm.h" +#include "Approximation.h" + +using namespace MeshCore; + +void MeshSurfaceSegment::PrepareFacet(unsigned long) +{ +} + +void MeshSurfaceSegment::AddSegment(const std::vector& segm) +{ + if (segm.size() >= minFacets) { + segments.push_back(segm); + } +} + +// -------------------------------------------------------- + +MeshDistancePlanarSegment::MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol) + : MeshDistanceSurfaceSegment(mesh, minFacets, tol), fitter(new PlaneFit) +{ +} + +MeshDistancePlanarSegment::~MeshDistancePlanarSegment() +{ + delete fitter; +} + +void MeshDistancePlanarSegment::PrepareFacet(unsigned long index) +{ + fitter->Clear(); + + MeshGeomFacet triangle = kernel.GetFacet(index); + basepoint = triangle.GetGravityPoint(); + normal = triangle.GetNormal(); + fitter->AddPoint(triangle._aclPoints[0]); + fitter->AddPoint(triangle._aclPoints[1]); + fitter->AddPoint(triangle._aclPoints[2]); +} + +bool MeshDistancePlanarSegment::TestFacet (const MeshFacet& face) const +{ + if (!fitter->Done()) + fitter->Fit(); + MeshGeomFacet triangle = kernel.GetFacet(face); + for (int i=0; i<3; i++) { + if (fabs(fitter->GetDistanceToPlane(triangle._aclPoints[i])) > tolerance) + return false; + } + + fitter->AddPoint(triangle.GetGravityPoint()); + return true; +} + +// -------------------------------------------------------- + +bool MeshCurvaturePlanarSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (fabs(ci.fMinCurvature) > tolerance) + return false; + if (fabs(ci.fMaxCurvature) > tolerance) + return false; + } + + return true; +} + +bool MeshCurvatureCylindricalSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (ci.fMaxCurvature > ci.fMinCurvature) { + // convexe + if (fabs(ci.fMinCurvature) > tolerance) + return false; + float diff = ci.fMaxCurvature - curvature; + if (fabs(diff) > tolerance) + return false; + } + else { + // concave + if (fabs(ci.fMaxCurvature) > tolerance) + return false; + float diff = ci.fMinCurvature + curvature; + if (fabs(diff) > tolerance) + return false; + } + } + + return true; +} + +bool MeshCurvatureSphericalSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (ci.fMaxCurvature * ci.fMinCurvature < 0) + return false; + float diff; + diff = fabs(ci.fMinCurvature) - curvature; + if (fabs(diff) > tolerance) + return false; + diff = fabs(ci.fMaxCurvature) - curvature; + if (fabs(diff) > tolerance) + return false; + } + + return true; +} + +bool MeshCurvatureFreeformSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (fabs(ci.fMinCurvature-c2) > tolerance) + return false; + if (fabs(ci.fMaxCurvature-c1) > tolerance) + return false; + } + + return true; +} + +// -------------------------------------------------------- + +MeshSurfaceVisitor::MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices) + : indices(indices), segm(segm) +{ +} + +MeshSurfaceVisitor::~MeshSurfaceVisitor () +{ +} + +bool MeshSurfaceVisitor::AllowVisit (const MeshFacet& face, const MeshFacet&, + unsigned long, unsigned long, unsigned short) +{ + return segm.TestFacet(face); +} + +bool MeshSurfaceVisitor::Visit (const MeshFacet & face, const MeshFacet &, + unsigned long ulFInd, unsigned long) +{ + indices.push_back(ulFInd); + return true; +} + +// -------------------------------------------------------- + +void MeshSegmentAlgorithm::FindSegments(std::vector& segm) +{ + // reset VISIT flags + unsigned long startFacet; + MeshCore::MeshAlgorithm cAlgo(myKernel); + cAlgo.ResetFacetFlag(MeshCore::MeshFacet::VISIT); + + const MeshCore::MeshFacetArray& rFAry = myKernel.GetFacets(); + MeshCore::MeshFacetArray::_TConstIterator iCur = rFAry.begin(); + MeshCore::MeshFacetArray::_TConstIterator iBeg = rFAry.begin(); + MeshCore::MeshFacetArray::_TConstIterator iEnd = rFAry.end(); + + // start from the first not visited facet + cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); + std::vector resetVisited; + + for (std::vector::iterator it = segm.begin(); it != segm.end(); ++it) { + cAlgo.ResetFacetsFlag(resetVisited, MeshCore::MeshFacet::VISIT); + resetVisited.clear(); + + iCur = std::find_if(iBeg, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), + MeshCore::MeshFacet::VISIT)); + startFacet = iCur - iBeg; + while (startFacet != ULONG_MAX) { + // collect all facets of the same geometry + std::vector indices; + indices.push_back(startFacet); + (*it)->PrepareFacet(startFacet); + MeshSurfaceVisitor pv(**it, indices); + myKernel.VisitNeighbourFacets(pv, startFacet); + + // add or discard the segment + if (indices.size() == 1) { + resetVisited.push_back(startFacet); + } + else { + (*it)->AddSegment(indices); + } + + // search for the next start facet + iCur = std::find_if(iCur, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), + MeshCore::MeshFacet::VISIT)); + if (iCur < iEnd) + startFacet = iCur - iBeg; + else + startFacet = ULONG_MAX; + } + } +} diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h new file mode 100644 index 000000000..e45ecff4c --- /dev/null +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -0,0 +1,161 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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 MESHCORE_SEGMENTATION_H +#define MESHCORE_SEGMENTATION_H + +#include "MeshKernel.h" +#include "Curvature.h" +#include "Visitor.h" +#include + +namespace MeshCore { + +class PlaneFit; +class MeshFacet; +typedef std::vector MeshSegment; + +class MeshExport MeshSurfaceSegment +{ +public: + MeshSurfaceSegment(unsigned long minFacets) + : minFacets(minFacets) {} + virtual ~MeshSurfaceSegment() {} + virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; + virtual void PrepareFacet(unsigned long); + void AddSegment(const std::vector&); + const std::vector GetSegments() const { return segments; } + +protected: + std::vector segments; + unsigned long minFacets; +}; + +// -------------------------------------------------------- + +class MeshExport MeshDistanceSurfaceSegment : public MeshSurfaceSegment +{ +public: + MeshDistanceSurfaceSegment(const MeshKernel& mesh, unsigned long minFacets, float tol) + : MeshSurfaceSegment(minFacets), kernel(mesh), tolerance(tol) {} + +protected: + const MeshKernel& kernel; + float tolerance; +}; + +class MeshExport MeshDistancePlanarSegment : public MeshDistanceSurfaceSegment +{ +public: + MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); + virtual ~MeshDistancePlanarSegment(); + bool TestFacet (const MeshFacet &rclFacet) const; + void PrepareFacet(unsigned long); + +protected: + Base::Vector3f basepoint; + Base::Vector3f normal; + PlaneFit* fitter; +}; + +// -------------------------------------------------------- + +class MeshExport MeshCurvatureSurfaceSegment : public MeshSurfaceSegment +{ +public: + MeshCurvatureSurfaceSegment(const std::vector& ci, unsigned long minFacets, float tol) + : MeshSurfaceSegment(minFacets), info(ci), tolerance(tol) {} + +protected: + const std::vector& info; + float tolerance; +}; + +class MeshExport MeshCurvaturePlanarSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvaturePlanarSegment(const std::vector& ci, unsigned long minFacets, float tol) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol) {} + virtual bool TestFacet (const MeshFacet &rclFacet) const; +}; + +class MeshExport MeshCurvatureCylindricalSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvatureCylindricalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float curvature; +}; + +class MeshExport MeshCurvatureSphericalSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvatureSphericalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float curvature; +}; + +class MeshExport MeshCurvatureFreeformSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvatureFreeformSegment(const std::vector& ci, unsigned long minFacets, float tol, float c1, float c2) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol), c1(c1), c2(c2) {} + virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float c1, c2; +}; + +class MeshExport MeshSurfaceVisitor : public MeshFacetVisitor +{ +public: + MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices); + virtual ~MeshSurfaceVisitor (); + bool AllowVisit (const MeshFacet& face, const MeshFacet&, + unsigned long, unsigned long, unsigned short neighbourIndex); + bool Visit (const MeshFacet & face, const MeshFacet &, + unsigned long ulFInd, unsigned long); + +protected: + std::vector &indices; + const MeshSurfaceSegment& segm; +}; + +class MeshExport MeshSegmentAlgorithm +{ +public: + MeshSegmentAlgorithm(const MeshKernel& kernel) : myKernel(kernel) {} + void FindSegments(std::vector&); + +private: + const MeshKernel& myKernel; +}; + +} // MeshCore + +#endif // MESHCORE_SEGMENTATION_H diff --git a/src/Mod/Mesh/App/FeatureMeshCurvature.cpp b/src/Mod/Mesh/App/FeatureMeshCurvature.cpp index f618f2dea..f7bc01205 100644 --- a/src/Mod/Mesh/App/FeatureMeshCurvature.cpp +++ b/src/Mod/Mesh/App/FeatureMeshCurvature.cpp @@ -29,18 +29,16 @@ #include #include #include -#include -#include #include "FeatureMeshCurvature.h" #include "MeshFeature.h" +#include "Core/Curvature.h" #include "Core/Elements.h" #include "Core/Iterator.h" using namespace Mesh; -using namespace MeshCore; PROPERTY_SOURCE(Mesh::Curvature, App::DocumentObject) @@ -68,42 +66,20 @@ App::DocumentObjectExecReturn *Curvature::execute(void) } // get all points - const MeshKernel& rMesh = pcFeat->Mesh.getValue().getKernel(); - std::vector< Wm4::Vector3 > aPnts; - aPnts.reserve(rMesh.CountPoints()); - MeshPointIterator cPIt( rMesh ); - for (cPIt.Init(); cPIt.More(); cPIt.Next()) { - Wm4::Vector3 cP(cPIt->x, cPIt->y, cPIt->z); - aPnts.push_back(cP); - } + const MeshCore::MeshKernel& rMesh = pcFeat->Mesh.getValue().getKernel(); + MeshCore::MeshCurvature meshCurv(rMesh); + meshCurv.ComputePerVertex(); + const std::vector& curv = meshCurv.GetCurvature(); - // get all point connections - std::vector aIdx; - aIdx.reserve(3*rMesh.CountFacets()); - const std::vector& raFts = rMesh.GetFacets(); - for (std::vector::const_iterator jt = raFts.begin(); jt != raFts.end(); ++jt) { - for (int i=0; i<3; i++) { - aIdx.push_back((int)jt->_aulPoints[i]); - } - } - - // compute vertex based curvatures - Wm4::MeshCurvature meshCurv(rMesh.CountPoints(), &(aPnts[0]), rMesh.CountFacets(), &(aIdx[0])); - - // get curvature information now - const Wm4::Vector3* aMaxCurvDir = meshCurv.GetMaxDirections(); - const Wm4::Vector3* aMinCurvDir = meshCurv.GetMinDirections(); - const float* aMaxCurv = meshCurv.GetMaxCurvatures(); - const float* aMinCurv = meshCurv.GetMinCurvatures(); - - std::vector values(rMesh.CountPoints()); - for (unsigned long i=0; i values; + values.reserve(curv.size()); + for (std::vector::const_iterator it = curv.begin(); it != curv.end(); ++it) { CurvatureInfo ci; - ci.cMaxCurvDir = Base::Vector3f(aMaxCurvDir[i].X(), aMaxCurvDir[i].Y(), aMaxCurvDir[i].Z()); - ci.cMinCurvDir = Base::Vector3f(aMinCurvDir[i].X(), aMinCurvDir[i].Y(), aMinCurvDir[i].Z()); - ci.fMaxCurvature = aMaxCurv[i]; - ci.fMinCurvature = aMinCurv[i]; - values[i] = ci; + ci.cMaxCurvDir = it->cMaxCurvDir; + ci.cMinCurvDir = it->cMinCurvDir; + ci.fMaxCurvature = it->fMaxCurvature; + ci.fMinCurvature = it->fMinCurvature; + values.push_back(ci); } CurvInfo.setValues(values); diff --git a/src/Mod/Mesh/App/Makefile.am b/src/Mod/Mesh/App/Makefile.am index 6309f0d91..27537e060 100644 --- a/src/Mod/Mesh/App/Makefile.am +++ b/src/Mod/Mesh/App/Makefile.am @@ -22,6 +22,8 @@ libMesh_la_SOURCES=\ Core/Approximation.h \ Core/Builder.cpp \ Core/Builder.h \ + Core/Curvature.cpp \ + Core/Curvature.h \ Core/Definitions.cpp \ Core/Definitions.h \ Core/Degeneration.cpp \ @@ -42,6 +44,8 @@ libMesh_la_SOURCES=\ Core/MeshIO.h \ Core/Projection.cpp \ Core/Projection.h \ + Core/Segmentation.cpp \ + Core/Segmentation.h \ Core/SetOperations.cpp \ Core/SetOperations.h \ Core/Smoothing.cpp \ @@ -324,9 +328,9 @@ nobase_include_HEADERS = \ # the library search path. -libMesh_la_LDFLAGS = -L../../../Base -L../../../App $(all_libraries) $(GTS_LIBS) \ +libMesh_la_LDFLAGS = -L../../../Base -L../../../App $(QT4_CORE_LIBS) $(all_libraries) $(GTS_LIBS) \ -version-info @LIB_CURRENT@:@LIB_REVISION@:@LIB_AGE@ -libMesh_la_CPPFLAGS = -DMeshExport= +libMesh_la_CPPFLAGS = -DMeshExport= -DEIGEN2_SUPPORT libMesh_la_LIBADD = \ @BOOST_FILESYSTEM_LIB@ @BOOST_REGEX_LIB@ @BOOST_SYSTEM_LIB@ \ @@ -354,7 +358,8 @@ Mesh_la_DEPENDENCIES = libMesh.la #-------------------------------------------------------------------------------------- # set the include path found by configure -AM_CXXFLAGS = -I$(top_srcdir)/src/3rdParty -I$(top_srcdir)/src -I$(top_builddir)/src $(GTS_CFLAGS) $(all_includes) +AM_CXXFLAGS = -I$(top_srcdir)/src/3rdParty -I$(top_srcdir)/src -I$(top_builddir)/src $(GTS_CFLAGS) \ + $(all_includes) $(QT4_CORE_CXXFLAGS) includedir = @includedir@/Mod/Mesh/App libdir = $(prefix)/Mod/Mesh diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index bd7be06d0..89f85856a 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -1422,10 +1422,11 @@ MeshObject* MeshObject::meshFromSegment(const std::vector& indice return new MeshObject(kernel, _Mtrx); } -std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, const Segment& aSegment, float dev) const +std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, const Segment& aSegment, + float dev, unsigned long minFacets) const { std::vector segm; - unsigned long startFacet, visited; + unsigned long startFacet; if (this->_kernel.CountFacets() == 0) return segm; @@ -1445,7 +1446,7 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons MeshCore::MeshFacetArray::_TConstIterator iEnd = rFAry.end(); // start from the first not visited facet - visited = cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); + cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), MeshCore::MeshFacet::VISIT)); startFacet = iTri - iBeg; @@ -1455,7 +1456,7 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons std::vector indices; indices.push_back(startFacet); MeshCore::MeshPlaneVisitor pv(this->_kernel, startFacet, dev, indices); - visited += this->_kernel.VisitNeighbourFacets(pv, startFacet); + this->_kernel.VisitNeighbourFacets(pv, startFacet); iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), MeshCore::MeshFacet::VISIT)); @@ -1463,7 +1464,8 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons startFacet = iTri - iBeg; else startFacet = ULONG_MAX; - segm.push_back(Segment(const_cast(this), indices, false)); + if (indices.size() > minFacets) + segm.push_back(Segment(const_cast(this), indices, false)); } return segm; diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index dcd1ca19d..3d884517f 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -266,7 +266,7 @@ public: const Segment& getSegment(unsigned long) const; Segment& getSegment(unsigned long); MeshObject* meshFromSegment(const std::vector&) const; - std::vector getSegmentsFromType(Type, const Segment& aSegment, float dev) const; + std::vector getSegmentsFromType(Type, const Segment& aSegment, float dev, unsigned long minFacets) const; //@} /** @name Primitives */ diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index 6070d9fc1..f29a59730 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -370,13 +370,26 @@ an empty dictionary if there is no intersection. - + - Get all planes of the mesh as segment. + getPlanarSegments(dev,[min faces=0]) -> list +Get all planes of the mesh as segment. In the worst case each triangle can be regarded as single plane if none of its neighours is coplanar. + + + getSegmentsByCurvature(list) -> list +The argument list gives a list if tuples where it defines the preferred maximum curvature, +the preferred minumum curvature, the tolerance and the number of minimum faces for the segment. +Example: +c=(1.0, 0.0, 0.1, 500) # search for a cylinder with radius 1.0 +p=(0.0, 0.0, 0.1, 500) # search for a plane +mesh.getSegmentsByCurvature([c,p]) + + + A collection of the mesh points diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 143ff61f9..1e32bf2f3 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -41,6 +41,8 @@ #include "Core/Grid.h" #include "Core/MeshKernel.h" #include "Core/Triangulation.h" +#include "Core/Segmentation.h" +#include "Core/Curvature.h" using namespace Mesh; @@ -1356,15 +1358,16 @@ PyObject* MeshPy::nearestFacetOnRay(PyObject *args) } } -PyObject* MeshPy::getPlanes(PyObject *args) +PyObject* MeshPy::getPlanarSegments(PyObject *args) { float dev; - if (!PyArg_ParseTuple(args, "f",&dev)) + unsigned long minFacets=0; + if (!PyArg_ParseTuple(args, "f|k",&dev,&minFacets)) return NULL; Mesh::MeshObject* mesh = getMeshObjectPtr(); std::vector segments = mesh->getSegmentsFromType - (Mesh::MeshObject::PLANE, Mesh::Segment(mesh,false), dev); + (Mesh::MeshObject::PLANE, Mesh::Segment(mesh,false), dev, minFacets); Py::List s; for (std::vector::iterator it = segments.begin(); it != segments.end(); ++it) { @@ -1379,6 +1382,48 @@ PyObject* MeshPy::getPlanes(PyObject *args) return Py::new_reference_to(s); } +PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) +{ + PyObject* l; + if (!PyArg_ParseTuple(args, "O!",&PyList_Type,&l)) + return NULL; + + const MeshCore::MeshKernel& kernel = getMeshObjectPtr()->getKernel(); + MeshCore::MeshSegmentAlgorithm finder(kernel); + MeshCore::MeshCurvature meshCurv(kernel); + meshCurv.ComputePerVertex(); + + Py::List func(l); + std::vector segm; + //segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment(meshCurv.GetCurvature(), minFacets, dev, 4.75f)); + //segm.push_back(new MeshCore::MeshCurvaturePlanarSegment(meshCurv.GetCurvature(), minFacets, dev)); + for (Py::List::iterator it = func.begin(); it != func.end(); ++it) { + Py::Tuple t(*it); + float c1 = (float)Py::Float(t[0]); + float c2 = (float)Py::Float(t[1]); + float tol = (float)Py::Float(t[2]); + int num = (int)Py::Int(t[3]); + segm.push_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol, c1, c2)); + } + + finder.FindSegments(segm); + + Py::List list; + for (std::vector::iterator segmIt = segm.begin(); segmIt != segm.end(); ++segmIt) { + std::vector data = (*segmIt)->GetSegments(); + delete (*segmIt); + for (std::vector::iterator it = data.begin(); it != data.end(); ++it) { + Py::List ary; + for (MeshCore::MeshSegment::const_iterator jt = it->begin(); jt != it->end(); ++jt) { + ary.append(Py::Int((int)*jt)); + } + list.append(ary); + } + } + + return Py::new_reference_to(list); +} + Py::Int MeshPy::getCountPoints(void) const { return Py::Int((long)getMeshObjectPtr()->countPoints()); From 886af5096c1c88aafbca0591efad2fa468a72364 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 01:40:05 +0200 Subject: [PATCH 162/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.cpp | 6 +++--- src/Mod/Mesh/App/Core/Segmentation.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 4326457e5..450a7a067 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -31,7 +31,7 @@ using namespace MeshCore; -void MeshSurfaceSegment::PrepareFacet(unsigned long) +void MeshSurfaceSegment::Initialize(unsigned long) { } @@ -54,7 +54,7 @@ MeshDistancePlanarSegment::~MeshDistancePlanarSegment() delete fitter; } -void MeshDistancePlanarSegment::PrepareFacet(unsigned long index) +void MeshDistancePlanarSegment::Initialize(unsigned long index) { fitter->Clear(); @@ -204,7 +204,7 @@ void MeshSegmentAlgorithm::FindSegments(std::vector& segm) // collect all facets of the same geometry std::vector indices; indices.push_back(startFacet); - (*it)->PrepareFacet(startFacet); + (*it)->Initialize(startFacet); MeshSurfaceVisitor pv(**it, indices); myKernel.VisitNeighbourFacets(pv, startFacet); diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index e45ecff4c..07e9fa9ca 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -41,7 +41,7 @@ public: : minFacets(minFacets) {} virtual ~MeshSurfaceSegment() {} virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; - virtual void PrepareFacet(unsigned long); + virtual void Initialize(unsigned long); void AddSegment(const std::vector&); const std::vector GetSegments() const { return segments; } @@ -69,7 +69,7 @@ public: MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); virtual ~MeshDistancePlanarSegment(); bool TestFacet (const MeshFacet &rclFacet) const; - void PrepareFacet(unsigned long); + void Initialize(unsigned long); protected: Base::Vector3f basepoint; From fc5328323964fb4f19f8e980521773a4204bd664 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 15:57:32 +0200 Subject: [PATCH 163/517] Mesh segmentation --- src/Mod/Complete/Gui/Workbench.cpp | 1 + src/Mod/Mesh/App/Core/Segmentation.h | 2 +- src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h | 6 +- src/Mod/Mesh/App/MeshPyImp.cpp | 8 +- src/Mod/Mesh/Gui/CMakeLists.txt | 4 + src/Mod/Mesh/Gui/Command.cpp | 35 +++ src/Mod/Mesh/Gui/Makefile.am | 2 + src/Mod/Mesh/Gui/Segmentation.cpp | 136 ++++++++++++ src/Mod/Mesh/Gui/Segmentation.h | 74 +++++++ src/Mod/Mesh/Gui/Segmentation.ui | 227 ++++++++++++++++++++ src/Mod/Mesh/Gui/Workbench.cpp | 3 +- 11 files changed, 488 insertions(+), 10 deletions(-) create mode 100644 src/Mod/Mesh/Gui/Segmentation.cpp create mode 100644 src/Mod/Mesh/Gui/Segmentation.h create mode 100644 src/Mod/Mesh/Gui/Segmentation.ui diff --git a/src/Mod/Complete/Gui/Workbench.cpp b/src/Mod/Complete/Gui/Workbench.cpp index d60424b2d..9b0b0fcf0 100644 --- a/src/Mod/Complete/Gui/Workbench.cpp +++ b/src/Mod/Complete/Gui/Workbench.cpp @@ -229,6 +229,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_ToolMesh" + << "Mesh_Segmentation" << "Mesh_VertexCurvature"; // Part **************************************************************************************************** diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 07e9fa9ca..021961001 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -43,7 +43,7 @@ public: virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; virtual void Initialize(unsigned long); void AddSegment(const std::vector&); - const std::vector GetSegments() const { return segments; } + const std::vector& GetSegments() const { return segments; } protected: std::vector segments; diff --git a/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h b/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h index 16f6e1a57..76c51c54b 100644 --- a/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h +++ b/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h @@ -21,8 +21,8 @@ ***************************************************************************/ -#ifndef FEATURE_MESH_SEGMENT_H -#define FEATURE_MESH_SEGMENT_H +#ifndef FEATURE_MESH_SEGMENTBYMESH_H +#define FEATURE_MESH_SEGMENTBYMESH_H #include @@ -63,4 +63,4 @@ public: } -#endif // FEATURE_MESH_SEGMENT_H +#endif // FEATURE_MESH_SEGMENTBYMESH_H diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 1e32bf2f3..dd1f0e3e1 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -1395,8 +1395,6 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) Py::List func(l); std::vector segm; - //segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment(meshCurv.GetCurvature(), minFacets, dev, 4.75f)); - //segm.push_back(new MeshCore::MeshCurvaturePlanarSegment(meshCurv.GetCurvature(), minFacets, dev)); for (Py::List::iterator it = func.begin(); it != func.end(); ++it) { Py::Tuple t(*it); float c1 = (float)Py::Float(t[0]); @@ -1410,15 +1408,15 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) Py::List list; for (std::vector::iterator segmIt = segm.begin(); segmIt != segm.end(); ++segmIt) { - std::vector data = (*segmIt)->GetSegments(); - delete (*segmIt); - for (std::vector::iterator it = data.begin(); it != data.end(); ++it) { + const std::vector& data = (*segmIt)->GetSegments(); + for (std::vector::const_iterator it = data.begin(); it != data.end(); ++it) { Py::List ary; for (MeshCore::MeshSegment::const_iterator jt = it->begin(); jt != it->end(); ++jt) { ary.append(Py::Int((int)*jt)); } list.append(ary); } + delete (*segmIt); } return Py::new_reference_to(list); diff --git a/src/Mod/Mesh/Gui/CMakeLists.txt b/src/Mod/Mesh/Gui/CMakeLists.txt index 9941cac13..ae4701a0f 100644 --- a/src/Mod/Mesh/Gui/CMakeLists.txt +++ b/src/Mod/Mesh/Gui/CMakeLists.txt @@ -34,6 +34,7 @@ set(Dialogs_UIC_SRCS DlgSettingsMeshView.ui DlgSmoothing.ui RemoveComponents.ui + Segmentation.ui ) qt4_wrap_ui(Dialogs_UIC_HDRS ${Dialogs_UIC_SRCS}) SET(Dialogs_SRCS @@ -53,6 +54,9 @@ SET(Dialogs_SRCS RemoveComponents.ui RemoveComponents.cpp RemoveComponents.h + Segmentation.ui + Segmentation.cpp + Segmentation.h ) SOURCE_GROUP("Dialogs" FILES ${Dialogs_SRCS}) diff --git a/src/Mod/Mesh/Gui/Command.cpp b/src/Mod/Mesh/Gui/Command.cpp index 03d971474..cc83bdaa0 100644 --- a/src/Mod/Mesh/Gui/Command.cpp +++ b/src/Mod/Mesh/Gui/Command.cpp @@ -69,6 +69,7 @@ #include "ViewProviderMeshFaceSet.h" #include "ViewProviderCurvature.h" #include "MeshEditor.h" +#include "Segmentation.h" using namespace Mesh; @@ -1368,6 +1369,39 @@ bool CmdMeshFillInteractiveHole::isActive(void) return false; } +DEF_STD_CMD_A(CmdMeshSegmentation); + +CmdMeshSegmentation::CmdMeshSegmentation() + : Command("Mesh_Segmentation") +{ + sAppModule = "Mesh"; + sGroup = QT_TR_NOOP("Mesh"); + sMenuText = QT_TR_NOOP("Create mesh segments..."); + sToolTipText = QT_TR_NOOP("Create mesh segments"); + sWhatsThis = "Mesh_Segmentation"; + sStatusTip = QT_TR_NOOP("Create mesh segments"); +} + +void CmdMeshSegmentation::activated(int iMsg) +{ + std::vector objs = Gui::Selection().getObjectsOfType + (Mesh::Feature::getClassTypeId()); + Mesh::Feature* mesh = static_cast(objs.front()); + Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog(); + if (!dlg) { + dlg = new MeshGui::TaskSegmentation(mesh); + } + Gui::Control().showDialog(dlg); +} + +bool CmdMeshSegmentation::isActive(void) +{ + if (Gui::Control().activeDialog()) + return false; + return Gui::Selection().countObjectsOfType + (Mesh::Feature::getClassTypeId()) == 1; +} + void CreateMeshCommands(void) { Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); @@ -1400,4 +1434,5 @@ void CreateMeshCommands(void) rcCmdMgr.addCommand(new CmdMeshFillInteractiveHole()); rcCmdMgr.addCommand(new CmdMeshRemoveCompByHand()); rcCmdMgr.addCommand(new CmdMeshFromGeometry()); + rcCmdMgr.addCommand(new CmdMeshSegmentation()); } diff --git a/src/Mod/Mesh/Gui/Makefile.am b/src/Mod/Mesh/Gui/Makefile.am index 6b2066ff0..46158d1e1 100644 --- a/src/Mod/Mesh/Gui/Makefile.am +++ b/src/Mod/Mesh/Gui/Makefile.am @@ -7,6 +7,7 @@ BUILT_SOURCES=\ ui_DlgSettingsMeshView.h \ ui_DlgSmoothing.h \ ui_RemoveComponents.h \ + ui_Segmentation.h \ moc_DlgEvaluateMeshImp.cpp \ moc_DlgRegularSolidImp.cpp \ moc_DlgSettingsMeshView.cpp \ @@ -127,6 +128,7 @@ EXTRA_DIST = \ DlgSettingsMeshView.ui \ DlgSmoothing.ui \ RemoveComponents.ui \ + Segmentation.ui \ Resources/Mesh.qrc \ Resources/translations/Mesh_af.qm \ Resources/translations/Mesh_af.ts \ diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp new file mode 100644 index 000000000..962d65f2e --- /dev/null +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -0,0 +1,136 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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" + +#ifndef _PreComp_ +#endif + +#include "Segmentation.h" +#include "ui_Segmentation.h" +#include +#include + +#include +#include +#include +#include +#include + +using namespace MeshGui; + +Segmentation::Segmentation(Mesh::Feature* mesh, QWidget* parent, Qt::WFlags fl) + : QWidget(parent, fl), myMesh(mesh) +{ + ui = new Ui_Segmentation; + ui->setupUi(this); + ui->numPln->setRange(1, INT_MAX); + ui->numPln->setValue(100); + ui->numCyl->setRange(1, INT_MAX); + ui->numCyl->setValue(100); + ui->numSph->setRange(1, INT_MAX); + ui->numSph->setValue(100); +} + +Segmentation::~Segmentation() +{ + // no need to delete child widgets, Qt does it all for us + delete ui; +} + +void Segmentation::accept() +{ + const Mesh::MeshObject* mesh = myMesh->Mesh.getValuePtr(); + // make a copy because we might smooth the mesh before + MeshCore::MeshKernel kernel = mesh->getKernel(); + + if (ui->checkBoxSmooth->isChecked()) { + MeshCore::LaplaceSmoothing smoother(kernel); + smoother.Smooth(ui->smoothSteps->value()); + } + + MeshCore::MeshSegmentAlgorithm finder(kernel); + MeshCore::MeshCurvature meshCurv(kernel); + meshCurv.ComputePerVertex(); + + std::vector segm; + if (ui->groupBoxCyl->isChecked()) { + segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment + (meshCurv.GetCurvature(), ui->numCyl->value(), ui->tolCyl->value(), ui->radCyl->value())); + } + if (ui->groupBoxSph->isChecked()) { + segm.push_back(new MeshCore::MeshCurvatureSphericalSegment + (meshCurv.GetCurvature(), ui->numSph->value(), ui->tolSph->value(), ui->radSph->value())); + } + if (ui->groupBoxPln->isChecked()) { + segm.push_back(new MeshCore::MeshCurvaturePlanarSegment + (meshCurv.GetCurvature(), ui->numPln->value(), ui->tolPln->value())); + } + finder.FindSegments(segm); + + App::Document* document = App::GetApplication().getActiveDocument(); + for (std::vector::iterator it = segm.begin(); it != segm.end(); ++it) { + const std::vector& data = (*it)->GetSegments(); + for (std::vector::const_iterator jt = data.begin(); jt != data.end(); ++jt) { + Mesh::MeshObject* segment = mesh->meshFromSegment(*jt); + Mesh::Feature* feaSegm = static_cast(document->addObject("Mesh::Feature", "Segment")); + Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing(); + feaMesh->swap(*segment); + feaSegm->Mesh.finishEditing(); + delete segment; + } + delete (*it); + } +} + +void Segmentation::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + ui->retranslateUi(this); + } + QWidget::changeEvent(e); +} + +// --------------------------------------- + +/* TRANSLATOR MeshGui::TaskRemoveComponents */ + +TaskSegmentation::TaskSegmentation(Mesh::Feature* mesh) +{ + widget = new Segmentation(mesh); + taskbox = new Gui::TaskView::TaskBox( + QPixmap(), widget->windowTitle(), false, 0); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); +} + +TaskSegmentation::~TaskSegmentation() +{ + // automatically deleted in the sub-class +} + +bool TaskSegmentation::accept() +{ + widget->accept(); + return true; +} diff --git a/src/Mod/Mesh/Gui/Segmentation.h b/src/Mod/Mesh/Gui/Segmentation.h new file mode 100644 index 000000000..95d141163 --- /dev/null +++ b/src/Mod/Mesh/Gui/Segmentation.h @@ -0,0 +1,74 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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 MESHGUI_SEGMENTATION_H +#define MESHGUI_SEGMENTATION_H + +#include +#include +#include + +// forward declarations +namespace Mesh { class Feature; } + +namespace MeshGui { +class Ui_Segmentation; + +class MeshGuiExport Segmentation : public QWidget +{ +public: + Segmentation(Mesh::Feature* mesh, QWidget* parent = 0, Qt::WFlags fl = 0); + ~Segmentation(); + void accept(); + +protected: + void changeEvent(QEvent *e); + +private: + Ui_Segmentation* ui; + Mesh::Feature* myMesh; +}; + +/** + * Embed the panel into a task dialog. + */ +class TaskSegmentation : public Gui::TaskView::TaskDialog +{ +public: + TaskSegmentation(Mesh::Feature* mesh); + ~TaskSegmentation(); + +public: + bool accept(); + + virtual QDialogButtonBox::StandardButtons getStandardButtons() const + { return QDialogButtonBox::Ok | QDialogButtonBox::Cancel; } + +private: + Segmentation* widget; + Gui::TaskView::TaskBox* taskbox; +}; + +} + +#endif // MESHGUI_SEGMENTATION_H diff --git a/src/Mod/Mesh/Gui/Segmentation.ui b/src/Mod/Mesh/Gui/Segmentation.ui new file mode 100644 index 000000000..129c89873 --- /dev/null +++ b/src/Mod/Mesh/Gui/Segmentation.ui @@ -0,0 +1,227 @@ + + + MeshGui::Segmentation + + + + 0 + 0 + 289 + 379 + + + + Mesh segmentation + + + + + + Smooth mesh + + + true + + + + + + + 3 + + + + + + + Plane + + + true + + + + + + Tolerance + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Minumum number of faces + + + + + + + 100000 + + + 100 + + + + + + + + + + Cylinder + + + true + + + + + + Radius + + + + + + + 0.100000000000000 + + + 5.000000000000000 + + + + + + + Tolerance + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Minimum number of faces + + + + + + + 100000 + + + 100 + + + + + + + + + + Sphere + + + true + + + + + + Radius + + + + + + + 0.100000000000000 + + + 5.000000000000000 + + + + + + + Tolerance + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Minimum number of faces + + + + + + + 100000 + + + 100 + + + + + + + + + + + + checkBoxSmooth + toggled(bool) + smoothSteps + setEnabled(bool) + + + 75 + 24 + + + 188 + 19 + + + + + diff --git a/src/Mod/Mesh/Gui/Workbench.cpp b/src/Mod/Mesh/Gui/Workbench.cpp index a2a3fa087..25b9bd656 100644 --- a/src/Mod/Mesh/Gui/Workbench.cpp +++ b/src/Mod/Mesh/Gui/Workbench.cpp @@ -190,7 +190,8 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Mesh_FillupHoles" << "Mesh_FillInteractiveHole" << "Mesh_RemoveComponents" << "Mesh_RemoveCompByHand" << "Mesh_AddFacet" << "Mesh_Smoothing" << "Separator" << "Mesh_BuildRegularSolid" << boolean << "Separator" << "Mesh_PolySelect" << "Mesh_PolyCut" - << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_PolyTrim" << "Mesh_VertexCurvature"; + << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_PolyTrim" << "Mesh_Segmentation" + << "Mesh_VertexCurvature"; return root; } From e977602de26bf6aece5a0e96b8525f5b559f9290 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 12:57:48 -0300 Subject: [PATCH 164/517] Added 0000387 : Arch roof tool --- src/Mod/Arch/Arch.py | 1 + src/Mod/Arch/ArchRoof.py | 137 ++++ src/Mod/Arch/Arch_rc.py | 1014 +++++++++++++++++++----------- src/Mod/Arch/CMakeLists.txt | 1 + src/Mod/Arch/InitGui.py | 2 +- src/Mod/Arch/Makefile.am | 3 +- src/WindowsInstaller/ModArch.wxi | 1 + 7 files changed, 781 insertions(+), 378 deletions(-) create mode 100644 src/Mod/Arch/ArchRoof.py diff --git a/src/Mod/Arch/Arch.py b/src/Mod/Arch/Arch.py index 81bb29ffe..fc537d85a 100644 --- a/src/Mod/Arch/Arch.py +++ b/src/Mod/Arch/Arch.py @@ -39,3 +39,4 @@ from ArchCommands import * from ArchSectionPlane import * from ArchWindow import * from ArchAxis import * +from ArchRoof import * diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py new file mode 100644 index 000000000..62850f243 --- /dev/null +++ b/src/Mod/Arch/ArchRoof.py @@ -0,0 +1,137 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2012 * +#* Yorik van Havre * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import FreeCAD,FreeCADGui,Draft,ArchComponent +from draftlibs import fcvec +from FreeCAD import Vector +from PyQt4 import QtCore + +__title__="FreeCAD Roof" +__author__ = "Yorik van Havre" +__url__ = "http://free-cad.sourceforge.net" + +def makeRoof(baseobj,facenr=1,angle=45,name="Roof"): + '''makeRoof(baseobj,[facenr],[angle],[name]) : Makes a roof based on a + face from an existing object. You can provide the number of the face + to build the roof on (default = 1), the angle (default=45) and a name (default + = roof).''' + obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name) + _Roof(obj) + _ViewProviderRoof(obj.ViewObject) + obj.Base = baseobj + obj.Face = facenr + obj.Angle = angle + return obj + +class _CommandRoof: + "the Arch Roof command definition" + def GetResources(self): + return {'Pixmap' : 'Arch_Roof', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Roof","Roof"), + 'Accel': "R, F", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Roof","Creates a roof object from the selected face of an object")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False + + def Activated(self): + sel = FreeCADGui.Selection.getSelectionEx() + if sel: + sel = sel[0] + if sel.HasSubObjects: + if "Face" in sel.SubElementNames[0]: + obj = sel.Object + idx = int(sel.SubElementNames[0][4:]) + FreeCAD.ActiveDocument.openTransaction("Create Roof") + makeRoof(obj,idx) + FreeCAD.ActiveDocument.commitTransaction() + +class _Roof(ArchComponent.Component): + "The Roof object" + def __init__(self,obj): + ArchComponent.Component.__init__(self,obj) + obj.addProperty("App::PropertyAngle","Angle","Base", + "The angle of this roof") + obj.addProperty("App::PropertyInteger","Face","Base", + "The face number of the base object used to build this roof") + obj.addProperty("App::PropertyLink","Base","Base", + "The base object this roof is built on") + self.Type = "Structure" + + def execute(self,obj): + self.createGeometry(obj) + + def onChanged(self,obj,prop): + if prop in ["Base","Face","Angle","Additions","Subtractions"]: + self.createGeometry(obj) + + def createGeometry(self,obj): + import Part,math + from draftlibs import fcgeo + pl = obj.Placement + + if obj.Base and obj.Face and obj.Angle: + if len(obj.Base.Shape.Faces) >= obj.Face: + f = obj.Base.Shape.Faces[obj.Face-1] + if len(f.Wires) == 1: + if f.Wires[0].isClosed(): + c = round(math.tan(math.radians(obj.Angle)),Draft.precision()) + norm = f.normalAt(0,0) + d = f.BoundBox.DiagonalLength + edges = fcgeo.sortEdges(f.Edges) + l = len(edges) + edges.append(edges[0]) + shps = [] + for i in range(l): + v = fcgeo.vec(fcgeo.angleBisection(edges[i],edges[i+1])) + v.normalize() + bis = v.getAngle(fcgeo.vec(edges[i])) + delta = 1/math.cos(bis) + v.multiply(delta) + n = (FreeCAD.Vector(norm)).multiply(c) + dv = v.add(n) + dv.normalize() + dv.scale(d,d,d) + shps.append(f.extrude(dv)) + c = shps.pop() + for s in shps: + c = c.common(s) + c = c.removeSplitter() + if not c.isNull(): + obj.Shape = c + if not fcgeo.isNull(pl): + obj.Placement = pl + +class _ViewProviderRoof(ArchComponent.ViewProviderComponent): + "A View Provider for the Roof object" + + def __init__(self,vobj): + ArchComponent.ViewProviderComponent.__init__(self,vobj) + + def getIcon(self): + return ":/icons/Arch_Roof_Tree.svg" + +FreeCADGui.addCommand('Arch_Roof',_CommandRoof()) diff --git a/src/Mod/Arch/Arch_rc.py b/src/Mod/Arch/Arch_rc.py index cfb5796f4..6e7f3870a 100644 --- a/src/Mod/Arch/Arch_rc.py +++ b/src/Mod/Arch/Arch_rc.py @@ -2,8 +2,8 @@ # Resource object code # -# Created: Wed Apr 18 19:00:26 2012 -# by: The Resource Compiler for PyQt (Qt v4.7.4) +# Created: Sun May 13 20:45:11 2012 +# by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -6791,7 +6791,7 @@ qt_resource_data = "\ \x60\x24\x14\x71\x18\x20\xc8\x29\x21\x64\x0a\xba\x54\x4c\x69\x8a\ \x07\xa3\xfe\x50\x76\x18\x1a\x6f\x00\x69\x8d\xda\xda\x66\xb6\xba\ \xbe\xb8\xb2\x35\xc7\xf5\xc5\x7f\x01\x9a\x79\xce\xaf\ -\x00\x00\x12\x5a\ +\x00\x00\x12\x5c\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -6831,173 +6831,233 @@ qt_resource_data = "\ \x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\x39\x38\ \x35\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\ \x2e\x31\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x31\x20\ -\x72\x39\x37\x36\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\ -\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x41\x72\x63\x68\ -\x5f\x53\x69\x74\x65\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\ -\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\ -\x73\x32\x39\x38\x37\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\ -\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ -\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x22\x3e\x0a\x20\x20\x20\x20\ -\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ -\x6f\x72\x3a\x23\x66\x66\x62\x34\x30\x30\x3b\x73\x74\x6f\x70\x2d\ -\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ -\x70\x33\x37\x39\x36\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ -\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ -\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ -\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ -\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\ -\x37\x39\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ -\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ -\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ -\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\ -\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\ -\x38\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ -\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x62\x34\ -\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ -\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ -\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x36\x2d\x35\x22\ -\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ -\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x65\x61\ -\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ -\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ -\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x38\x2d\x38\x22\ -\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\ -\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ -\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\ -\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x36\ -\x32\x2e\x36\x35\x32\x33\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x79\x31\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x35\x2e\x31\x38\x34\ -\x39\x37\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ -\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ -\x61\x74\x72\x69\x78\x28\x31\x2e\x30\x32\x36\x35\x35\x36\x38\x2c\ -\x30\x2c\x30\x2c\x30\x2e\x39\x31\x34\x39\x30\x36\x32\x36\x2c\x2d\ -\x33\x2e\x32\x33\x36\x37\x30\x36\x2c\x2d\x31\x2e\x38\x30\x32\x37\ -\x30\x33\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ -\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ -\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ -\x64\x69\x65\x6e\x74\x33\x38\x38\x36\x22\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ -\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\ -\x34\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\ -\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ -\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ -\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\ -\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\x31\x22\x3e\x0a\x20\ -\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ -\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x62\x34\x30\x30\x3b\x73\x74\ -\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ -\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ -\x73\x74\x6f\x70\x33\x37\x39\x36\x2d\x32\x22\x20\x2f\x3e\x0a\x20\ -\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ -\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\x73\x74\ -\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ -\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ -\x73\x74\x6f\x70\x33\x37\x39\x38\x2d\x32\x22\x20\x2f\x3e\x0a\x20\ +\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\ +\x31\x20\x72\x39\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x41\x72\ +\x63\x68\x5f\x53\x69\x74\x65\x5f\x54\x72\x65\x65\x2e\x73\x76\x67\ +\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x64\x65\x66\x73\x32\x39\x38\x37\x22\x3e\x0a\x20\ +\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x62\x34\x30\ +\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x36\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\ +\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x38\x22\x20\x2f\x3e\x0a\x20\ \x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ \x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ \x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x79\x32\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x36\x32\x2e\x36\x35\x32\ -\x33\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x32\ -\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x78\x31\x3d\x22\x31\x35\x2e\x31\x38\x34\x39\x37\x31\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\ -\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ -\x28\x31\x2e\x30\x32\x36\x35\x35\x36\x38\x2c\x30\x2c\x30\x2c\x30\ -\x2e\x39\x31\x34\x39\x30\x36\x32\x36\x2c\x2d\x33\x2e\x32\x33\x36\ -\x37\x30\x36\x2c\x2d\x31\x2e\x38\x30\x32\x37\x30\x33\x32\x29\x22\ -\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ -\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\ -\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ -\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ -\x33\x38\x38\x36\x2d\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ -\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\ -\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\x31\ -\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ -\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ -\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\ -\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\ -\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\ -\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\ -\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\ -\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\ -\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x37\x39\x34\x2d\x38\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x66\x66\x62\x34\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x37\x39\x36\x2d\x35\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x37\x39\x38\x2d\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\ +\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x32\x3d\x22\x36\x32\x2e\x36\x35\x32\x33\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x32\x33\x2e\x38\x34\ +\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\ +\x22\x31\x35\x2e\x31\x38\x34\x39\x37\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2e\x30\ +\x32\x36\x35\x35\x36\x38\x2c\x30\x2c\x30\x2c\x30\x2e\x39\x31\x34\ +\x39\x30\x36\x32\x36\x2c\x2d\x33\x2e\x32\x33\x36\x37\x30\x36\x2c\ +\x2d\x31\x2e\x38\x30\x32\x37\x30\x33\x32\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x38\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\ +\x34\x2d\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\ +\x62\x34\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x36\x2d\ +\x32\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\ +\x65\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x38\x2d\ +\x32\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\ +\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x32\x33\x2e\x38\x34\ +\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\ +\x22\x36\x32\x2e\x36\x35\x32\x33\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x31\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x35\x2e\x31\ +\x38\x34\x39\x37\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2e\x30\x32\x36\x35\x35\x36\ +\x38\x2c\x30\x2c\x30\x2c\x30\x2e\x39\x31\x34\x39\x30\x36\x32\x36\ +\x2c\x2d\x33\x2e\x32\x33\x36\x37\x30\x36\x2c\x2d\x31\x2e\x38\x30\ +\x32\x37\x30\x33\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x38\x36\x2d\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x37\x39\x34\x2d\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\ +\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\ +\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\ +\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\ +\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\ +\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\ +\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\ +\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\ +\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x37\x2e\x37\x37\x38\x31\ +\x37\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x78\x3d\x22\x32\x36\x2e\x34\x33\x31\x33\x36\x37\ \x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\ -\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\ -\x6d\x3d\x22\x32\x2e\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ -\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x2d\x31\x32\x2e\x35\ -\x34\x31\x38\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x32\x33\x2e\x38\x34\x36\x36\ -\x39\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ -\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\ -\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\ -\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\ -\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\ -\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\ -\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\ -\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x30\x22\ -\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ -\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x35\ -\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ -\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\x20\x20\ +\x63\x79\x3d\x22\x33\x30\x2e\x38\x30\x36\x36\x30\x38\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\ +\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\x65\ +\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\ +\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\ +\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\ +\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\ +\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x35\x35\x22\x0a\x20\x20\ \x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\ -\x6f\x77\x2d\x79\x3d\x22\x31\x39\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\ -\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\ -\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x32\x39\x39\ -\x30\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\ -\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\ -\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\ -\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\ -\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\ -\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\ -\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\ -\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\ -\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\ -\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\ -\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\ -\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\ -\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\ -\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\ -\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\ -\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\ -\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\ -\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\ +\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\ +\x22\x32\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\ +\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\x65\ +\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6d\x65\x74\x61\x64\x61\x74\x61\x32\x39\x39\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\ +\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\ +\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\ +\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\ +\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\ +\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\ +\x3a\x74\x69\x74\x6c\x65\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\ +\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\ +\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\ +\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x62\x66\x62\x62\x62\x62\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\x65\x72\x6f\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\ +\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\ +\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\ +\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\ +\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\ +\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\ +\x20\x35\x2e\x32\x39\x30\x30\x39\x32\x2c\x34\x31\x2e\x35\x33\x32\ +\x31\x34\x36\x20\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\ +\x35\x35\x35\x35\x36\x39\x20\x32\x39\x2e\x36\x30\x35\x38\x30\x33\ +\x2c\x35\x37\x2e\x30\x37\x34\x30\x38\x31\x20\x35\x2e\x35\x32\x32\ +\x37\x37\x38\x33\x2c\x34\x36\x2e\x39\x33\x38\x30\x33\x37\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x39\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\ +\x23\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\ +\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\ +\x6e\x7a\x65\x72\x6f\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ +\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\ +\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\ +\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\ +\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\ +\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\ +\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\ +\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x64\x3d\x22\x4d\x20\x35\x39\x2e\x35\x30\x35\x39\x38\x35\x2c\ +\x31\x32\x2e\x33\x36\x32\x38\x36\x32\x20\x35\x39\x2e\x30\x34\x30\ +\x36\x31\x32\x2c\x33\x34\x2e\x34\x33\x36\x39\x31\x35\x20\x32\x39\ +\x2e\x36\x30\x35\x38\x30\x33\x2c\x35\x36\x2e\x39\x36\x31\x34\x35\ +\x39\x20\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\x35\x35\ +\x35\x35\x36\x39\x20\x34\x30\x2e\x37\x37\x34\x37\x34\x33\x2c\x31\ +\x33\x2e\x39\x33\x39\x35\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ \x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ -\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\x30\ -\x3b\x66\x69\x6c\x6c\x3a\x23\x62\x66\x62\x62\x62\x62\x3b\x66\x69\ -\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\ -\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\x65\x72\x6f\x3b\x73\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x39\x32\x62\x64\x38\x65\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\ \x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\ \x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\ @@ -7006,87 +7066,27 @@ qt_resource_data = "\ \x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ \x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ \x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ -\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\ -\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\ -\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\ -\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\ -\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\ -\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\ -\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\ -\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x35\ -\x2e\x32\x39\x30\x30\x39\x32\x2c\x34\x31\x2e\x35\x33\x32\x31\x34\ -\x36\x20\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\x35\x35\ -\x35\x35\x36\x39\x20\x32\x39\x2e\x36\x30\x35\x38\x30\x33\x2c\x35\ -\x37\x2e\x30\x37\x34\x30\x38\x31\x20\x35\x2e\x35\x32\x32\x37\x37\ -\x38\x33\x2c\x34\x36\x2e\x39\x33\x38\x30\x33\x37\x20\x7a\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ -\x39\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\ -\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\ -\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\ -\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\ -\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ -\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\ -\x65\x72\x6f\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ -\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ -\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\ -\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ -\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ -\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ -\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ -\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ -\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ -\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\ -\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\ -\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\ -\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\ -\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\ -\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\ -\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\ -\x3d\x22\x4d\x20\x35\x39\x2e\x35\x30\x35\x39\x38\x35\x2c\x31\x32\ -\x2e\x33\x36\x32\x38\x36\x32\x20\x35\x39\x2e\x30\x34\x30\x36\x31\ -\x32\x2c\x33\x34\x2e\x34\x33\x36\x39\x31\x35\x20\x32\x39\x2e\x36\ -\x30\x35\x38\x30\x33\x2c\x35\x36\x2e\x39\x36\x31\x34\x35\x39\x20\ -\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\x35\x35\x35\x35\ -\x36\x39\x20\x34\x30\x2e\x37\x37\x34\x37\x34\x33\x2c\x31\x33\x2e\ -\x39\x33\x39\x35\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x39\x22\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ -\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ -\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\ -\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ -\x22\x66\x69\x6c\x6c\x3a\x23\x35\x35\x39\x61\x35\x36\x3b\x66\x69\ -\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\ -\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\ -\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\x6f\x6b\ -\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\ -\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\ -\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ -\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\ -\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ -\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x33\x36\x2e\ -\x35\x30\x32\x38\x38\x37\x2c\x36\x2e\x34\x34\x36\x38\x36\x38\x20\ -\x2d\x31\x31\x2e\x30\x38\x39\x35\x37\x32\x2c\x38\x2e\x35\x36\x35\ -\x35\x37\x33\x20\x2d\x38\x2e\x39\x39\x39\x33\x39\x2c\x31\x36\x2e\ -\x30\x32\x39\x31\x34\x33\x20\x30\x2e\x31\x37\x34\x31\x38\x31\x2c\ -\x30\x2e\x30\x37\x35\x31\x34\x20\x4c\x20\x35\x2e\x32\x30\x38\x32\ -\x33\x31\x36\x2c\x34\x31\x2e\x37\x33\x36\x30\x32\x37\x20\x32\x39\ -\x2e\x35\x33\x35\x36\x31\x37\x2c\x35\x31\x2e\x36\x35\x34\x30\x35\ -\x39\x20\x34\x30\x2e\x34\x35\x31\x30\x30\x36\x2c\x34\x30\x2e\x36\ -\x38\x34\x31\x31\x35\x20\x34\x30\x2e\x38\x35\x37\x34\x33\x31\x2c\ -\x34\x30\x2e\x32\x38\x33\x33\x38\x36\x20\x34\x30\x2e\x36\x38\x33\ -\x32\x35\x2c\x34\x30\x2e\x32\x30\x38\x32\x34\x39\x20\x34\x39\x2e\ -\x34\x32\x31\x33\x36\x37\x2c\x32\x33\x2e\x35\x37\x38\x30\x31\x34\ -\x20\x35\x39\x2e\x35\x38\x31\x39\x36\x39\x2c\x31\x32\x2e\x34\x33\ -\x32\x37\x35\x31\x20\x33\x36\x2e\x35\x30\x32\x38\x38\x37\x2c\x36\ -\x2e\x34\x34\x36\x38\x36\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x36\x33\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ -\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x67\ -\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x33\ +\x36\x2e\x35\x30\x32\x38\x38\x37\x2c\x36\x2e\x34\x34\x36\x38\x36\ +\x38\x20\x2d\x31\x31\x2e\x30\x38\x39\x35\x37\x32\x2c\x38\x2e\x35\ +\x36\x35\x35\x37\x33\x20\x2d\x38\x2e\x39\x39\x39\x33\x39\x2c\x31\ +\x36\x2e\x30\x32\x39\x31\x34\x33\x20\x30\x2e\x31\x37\x34\x31\x38\ +\x31\x2c\x30\x2e\x30\x37\x35\x31\x34\x20\x4c\x20\x35\x2e\x32\x30\ +\x38\x32\x33\x31\x36\x2c\x34\x31\x2e\x37\x33\x36\x30\x32\x37\x20\ +\x32\x39\x2e\x35\x33\x35\x36\x31\x37\x2c\x35\x31\x2e\x36\x35\x34\ +\x30\x35\x39\x20\x34\x30\x2e\x34\x35\x31\x30\x30\x36\x2c\x34\x30\ +\x2e\x36\x38\x34\x31\x31\x35\x20\x34\x30\x2e\x38\x35\x37\x34\x33\ +\x31\x2c\x34\x30\x2e\x32\x38\x33\x33\x38\x36\x20\x34\x30\x2e\x36\ +\x38\x33\x32\x35\x2c\x34\x30\x2e\x32\x30\x38\x32\x34\x39\x20\x34\ +\x39\x2e\x34\x32\x31\x33\x36\x37\x2c\x32\x33\x2e\x35\x37\x38\x30\ +\x31\x34\x20\x35\x39\x2e\x35\x38\x31\x39\x36\x39\x2c\x31\x32\x2e\ +\x34\x33\x32\x37\x35\x31\x20\x33\x36\x2e\x35\x30\x32\x38\x38\x37\ +\x2c\x36\x2e\x34\x34\x36\x38\x36\x38\x20\x7a\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x36\x33\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\ +\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\ +\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ \x00\x00\x0e\x6b\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -8358,6 +8358,133 @@ qt_resource_data = "\ \x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\ \x65\x73\x3d\x22\x63\x63\x63\x63\x63\x22\x20\x2f\x3e\x0a\x20\x20\ \x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x07\xc4\ +\x00\ +\x00\x37\x1e\x78\x9c\xed\x5b\x6d\x8f\x9b\x48\x12\xfe\x3e\xbf\x82\ +\x65\xbe\x24\x3a\x83\xfb\x9d\x6e\x32\x9e\xd5\xdd\x46\xbb\x5a\xe9\ +\x4e\x27\x5d\x12\xdd\xc7\x88\x81\xb6\xcd\x0e\x06\x0b\xf0\xd8\xce\ +\xaf\xdf\x6a\xcc\x9b\x6d\x3c\x2f\xd9\x91\x6e\x77\x38\x4b\xc9\x40\ +\x55\x75\x77\xd5\xd3\x55\xd5\xd5\xd0\xdc\xfc\xb8\x5b\x25\xd6\x83\ +\xce\x8b\x38\x4b\x67\x36\x76\x91\x6d\xe9\x34\xcc\xa2\x38\x5d\xcc\ +\xec\x2f\x9f\x7f\x76\xa4\x6d\x15\x65\x90\x46\x41\x92\xa5\x7a\x66\ +\xa7\x99\xfd\xe3\xed\xd5\xcd\x0f\x8e\x63\xfd\x94\xeb\xa0\xd4\x91\ +\xb5\x8d\xcb\xa5\xf5\x6b\x7a\x5f\x84\xc1\x5a\x5b\xef\x96\x65\xb9\ +\xf6\xa7\xd3\xed\x76\xeb\xc6\x35\xd1\xcd\xf2\xc5\xf4\xbd\xe5\x38\ +\xb7\x57\x57\x37\xc5\xc3\xe2\xca\xb2\x2c\x18\x37\x2d\xfc\x28\x9c\ +\xd9\x75\x83\xf5\x26\x4f\x2a\xc1\x28\x9c\xea\x44\xaf\x74\x5a\x16\ +\x53\xec\xe2\xa9\xdd\x89\x87\x9d\x78\x68\x46\x8f\x1f\x74\x98\xad\ +\x56\x59\x5a\x54\x2d\xd3\xe2\xba\x27\x9c\x47\xf3\x56\xda\x68\xb3\ +\xa5\x95\x10\x56\x4a\x4d\x11\x99\x12\xe2\x80\x84\x53\xec\xd3\x32\ +\xd8\x39\xc7\x4d\x41\xc7\xa1\xa6\x04\x21\x34\x05\x5e\x27\xf9\x3c\ +\x29\x7f\x97\x00\x14\x17\x95\xa9\xb8\xfd\xd1\x01\xfe\x35\xfc\x6b\ +\x1b\x34\x04\xb7\xc8\x36\x79\xa8\xe7\xd0\x52\xbb\xa9\x2e\xa7\x1f\ +\x3f\x7f\x6c\x99\x0e\x72\xa3\x32\xea\x75\xd3\xa0\x7f\x34\xee\xd1\ +\x94\xa4\xc1\x4a\x17\xeb\x20\xd4\xc5\xb4\xa1\x57\xed\xb7\x71\x54\ +\x2e\x67\xb6\x60\xeb\x5d\x75\xbf\xd4\xf1\x62\x59\xf6\x08\x71\x34\ +\xb3\xc1\x42\x22\xb1\xa8\xee\x7b\x0e\x84\x0f\x02\x75\x77\x7e\xcb\ +\x41\x2e\x93\x2e\x75\xb1\x95\x2b\x29\x0f\xad\x1a\xcd\xfd\x28\x0b\ +\x8d\x2a\x33\xfb\xef\x79\xb8\xfc\xfa\x8f\x4d\x9c\x18\xff\x73\x0d\ +\x86\xb7\x20\x78\x13\xe9\x79\x61\x1a\x1c\x06\x36\x77\x30\xb2\xac\ +\x78\xc0\x05\xf4\x74\x90\xff\x92\x07\x51\x0c\x3e\x73\x90\x3b\x48\ +\x1e\x73\xa8\x90\xb8\x6e\x03\xad\x8a\x32\x5b\x37\xb2\xb5\x41\x40\ +\xa1\x42\x79\x76\x47\xce\xe6\xf3\x42\x83\xe1\xa8\x47\x2b\xca\x7d\ +\xa2\x0f\xd2\x4e\x98\x25\x59\xee\x5f\xcf\xe7\x73\x8c\xd1\x87\x8a\ +\x94\x01\x9e\x71\xb9\xf7\xf1\x07\xdb\x9a\x5e\x18\x6d\xa0\x8b\x70\ +\xee\x21\x24\xcf\xba\x38\x57\x05\xdb\x43\x5a\x4b\xde\x8e\x76\x33\ +\x3d\x36\xbb\xa6\xb6\x33\xb2\x86\x19\x59\xeb\xd0\xc4\x4e\xd3\x53\ +\x3b\x11\xe5\xde\xb8\xcb\xb1\x28\x8d\xda\x11\xbb\x59\x5d\x7f\xdd\ +\x01\x2a\x96\x6f\x51\x02\xff\xe1\x41\x89\xfd\x41\x02\x43\x38\xc0\ +\x1f\x34\x28\xf3\xcd\x38\xd5\x23\xdd\xd4\x1a\x38\x59\x1e\x2f\x62\ +\xf0\xa2\x4a\x8e\x60\x97\x56\xbf\xe3\x36\x00\x46\xcf\x36\x22\x09\ +\xeb\x30\x79\xcc\xfa\x93\x86\x54\x10\xf2\xb4\x22\xc8\xe5\xc6\xa8\ +\x5a\x91\x53\x55\x8e\x2d\xc4\x95\x24\xff\x43\x40\xd5\x70\x9f\x76\ +\xf3\xd4\xcc\x7d\x2f\x00\x8e\x1a\x39\x04\x9c\x8e\x1c\x00\x8f\x8f\ +\x1c\x80\xde\x42\x30\x4a\x00\x3c\x32\xa0\xc3\xa8\x00\x60\x23\x5f\ +\x07\x3c\xc1\x46\x0e\x80\x1c\x79\x12\x94\x48\x8c\x1e\x00\x67\xe4\ +\x95\x80\xa4\x23\x0f\x02\x81\x47\x9e\x06\x01\x00\x47\x8e\x1c\x02\ +\x36\xf2\x2c\x00\x00\x8c\x3d\x11\x0a\x6f\xe4\xf5\x20\x00\xe0\x8c\ +\x7c\x2d\xf0\xd0\x33\x1e\x52\xbd\x71\x00\xc6\xbe\x16\x78\xec\x0d\ +\x16\xc5\xeb\xa0\x2c\x75\x9e\x36\xed\xea\xdb\xcf\x79\x90\x16\xf3\ +\x2c\x5f\xcd\xec\x55\x50\xe6\xf1\xee\x1d\x72\x05\x6c\x0b\xa9\x47\ +\xe4\xc4\x41\xae\xc4\x92\x28\xcc\xf9\x84\xb8\x8c\x7b\x92\x62\x36\ +\xc1\xae\x94\x8c\x71\xce\x26\x0e\x11\x40\x45\x02\x89\x09\x96\x2e\ +\x51\x4c\x31\xef\xfd\xf1\xe3\xda\xc3\x28\x9c\xd0\x4e\xe3\xea\x65\ +\x88\xbf\xcc\xf5\x7c\x66\x5f\x7f\x82\x31\xd7\x05\xfe\x8a\x9d\x81\ +\x12\x2c\xcc\x92\x04\xa6\x64\x66\x07\xc9\x36\xd8\x17\xdf\x35\x99\ +\x9c\x90\x37\x58\xdc\x9d\x4c\x66\x2b\x58\x94\x59\x78\x6f\x10\xa8\ +\x70\xd5\x85\x85\xfd\xe3\xe7\xe7\x43\x78\x3f\xe6\x0a\xc2\x03\x47\ +\x60\x74\xe2\x60\x17\x21\xc8\x0d\xb2\xf2\x04\x22\xb0\xf4\x24\x5c\ +\x51\x8c\x19\x67\x72\x42\x5d\xe6\x09\xa4\xa4\x07\x57\x9c\x32\x45\ +\x68\xe7\x07\xcd\xbb\xa5\x4e\x91\xfa\xed\x13\x39\xd5\xe0\x4b\x1a\ +\x97\xc5\xcc\xde\x14\x3a\xff\x64\x5e\x5a\xfd\x3b\xfd\x52\xe8\xa7\ +\xdd\xa2\x7d\x07\x93\x03\xb5\x91\x3e\x98\x6b\x28\x8c\x49\xda\xb3\ +\xb6\x53\x88\xf4\x68\xb5\x4a\xfd\x77\x2f\x30\x8f\x10\x00\xbc\x47\ +\xd9\x0d\xbe\x27\x9a\xc7\x49\xe2\xdf\x25\x41\x78\xff\xa1\x28\xf3\ +\xec\x5e\xfb\x69\x96\xea\xde\xdb\x9a\xda\xba\xef\xf3\xdd\xb7\xf8\ +\x9c\xfe\x05\xa9\xe8\xb9\xfe\xa7\x5c\x20\x51\x89\x27\xd2\x55\x42\ +\x11\x89\xd8\xc5\x44\xd4\xf3\x85\x0b\xa9\x68\x20\xfb\xbf\x56\x2a\ +\x7a\x8b\x25\xf6\x2b\x24\x23\x31\xaa\x64\x84\xfe\x34\xc9\xe8\x25\ +\x91\xc8\x31\xa5\x92\x54\xe0\x0b\x8a\x89\x52\x06\x7c\x0c\xc5\x02\ +\xa2\xe6\x8a\x41\xa1\xe0\xc1\xdc\x30\xe5\x7a\x82\x70\x61\xd8\x8a\ +\x33\x21\xd1\xa5\x9a\x40\x89\xe1\x40\xec\xc7\xea\x40\xb8\xbc\x4e\ +\x28\xca\x37\x58\xe3\xbe\x7e\x5e\x35\x15\x1e\xa5\x02\x44\x27\x18\ +\x8a\x41\xe9\x61\x75\xb9\xc2\xeb\x4d\xd6\xa5\x1a\xef\x45\xf3\xf9\ +\x1a\x45\x4e\x6f\xc0\x31\x64\x16\xd6\xcb\xa4\x7f\x9d\xdc\xc2\x00\ +\x7b\x26\xa5\x30\x1b\x0e\x41\x60\xb7\x21\x99\x82\x6d\x06\xe7\x90\ +\x5c\x84\x07\x57\x8c\x62\xaa\xc4\x84\x78\xae\x62\x92\x99\x3d\x08\ +\x75\x29\x12\x8c\x8b\x61\x67\xa4\x14\x3d\xe5\x8a\x03\x65\xd5\xab\ +\x24\x16\x4a\xfe\xbf\xc2\x77\xc8\x0c\xe1\x3d\x86\x38\xa4\x7f\x9a\ +\x28\x7c\x91\xef\x8a\x71\x3f\xfb\xe2\x54\xbe\xc1\xe0\x7d\x09\x00\ +\x0c\xbf\x41\x0f\xb8\x70\x7c\xf4\x52\x7c\x0f\x2e\x1c\x03\x07\x4d\ +\xfb\x18\x9e\xb1\xbb\xa3\x45\x3b\x3c\xb3\xa9\xe7\x4a\xe5\xf1\x6e\ +\x6d\xde\x03\x91\x41\x8e\x83\xb4\xa6\xba\x42\x74\x47\x80\x0a\xd5\ +\x35\xe2\x1e\xee\xb2\xc5\xde\x50\x91\x8b\x85\xe4\xaa\xdb\xba\x2e\ +\xea\xb1\x86\x93\xd8\xff\xd2\x76\xc5\xcf\x6d\x87\x15\xde\x3b\x36\ +\xde\x9c\x16\x66\x5e\xef\x85\x8b\x31\x5e\x10\x17\x31\xe9\x79\xea\ +\xc8\x78\x81\x5c\xa8\x2e\x31\xf6\x9e\x69\xfc\xa9\xd4\xd0\x4a\x43\ +\x18\x21\x1e\xc2\xea\x50\x72\x30\x8e\x3d\x45\x26\xd5\x2e\x47\x50\ +\x04\xa5\x06\x48\x10\x0f\x4a\x0c\xc2\x27\xdc\x15\x88\x29\xc4\xe5\ +\x84\x11\x17\x88\x98\xca\xf7\x35\xc0\x37\x53\x73\x54\xb9\xba\x6a\ +\xbd\xd1\x9c\x73\x8e\x1e\x62\xbd\xbd\x6a\x11\xba\x0b\x5a\xad\xd6\ +\xc1\x42\x57\x07\x82\x01\xd7\x79\xf5\xab\x19\x77\x59\x1e\xe9\xbc\ +\x61\x89\xea\x77\xc4\xaa\xcf\x0c\x1f\x8e\xf0\x5f\x9d\x44\x28\xf4\ +\xda\xf2\xd1\x30\xbf\x58\x06\x51\xb6\xed\x96\xa1\x96\xf9\x2d\xcb\ +\x00\x19\x0a\xd5\xbd\x02\x7f\x3c\x63\x87\x10\x7e\xb4\x2a\xc1\x30\ +\xf2\xce\x98\x46\x1f\xe6\xc2\xae\x40\x12\x7c\xc6\xdc\xe4\x39\xc0\ +\xef\x24\xc1\x5e\x83\x51\xd5\x9f\x46\xa8\x58\x66\xdb\x45\x6e\xc0\ +\x29\xf3\x8d\x3e\x6d\x19\x65\xe1\xc6\x7c\x1e\xe0\x6c\x0e\x13\x5c\ +\x1f\x4a\xef\x49\x98\xb6\xce\xdd\x5d\xb6\x1b\xee\xa0\x48\x83\xf5\ +\x23\x6c\xc3\x71\x60\x9d\x5c\x16\x8f\xf0\xd3\x2c\xd2\x17\xf8\x6d\ +\xf7\x8e\x8e\x16\xda\x59\xc5\xd1\x3a\x8b\xd3\xf2\x49\xe9\x27\x04\ +\xb3\xbb\xdf\x20\x18\x1f\x53\xac\x96\x78\x44\xb5\x6d\x9c\xc2\x34\ +\x3b\x4d\x81\x41\xe4\x99\x33\xd4\x12\x4d\x59\xe2\x71\x79\x41\xa2\ +\x57\x7f\x9c\xb2\xcc\xb4\xab\x0b\xbc\x55\xb0\x8b\x57\xf1\x37\x1d\ +\x99\xe6\x75\x9c\xac\x74\x19\x44\x41\x19\x74\x31\xd1\x50\x88\x71\ +\x9c\x3a\x59\xe5\xd1\xdc\xff\xcf\xc7\x9f\xdb\x02\x2b\x0c\xfd\xff\ +\x66\xf9\x7d\x57\x02\x19\x81\xe0\x2e\xdb\x80\xda\x6d\x19\x66\xbe\ +\x1e\x08\x7d\x13\xde\x41\x79\x1b\xaf\xc0\xd3\xcd\xa7\x19\x7f\xdb\ +\xad\x12\x88\xce\x96\x71\x24\x6c\x16\x8c\xae\xd3\x43\xb7\xb9\x3e\ +\x7c\x7a\x31\xf8\xb5\x4a\x14\xae\x62\xd3\x68\xfa\xa9\x84\xea\xeb\ +\x57\x33\x48\xef\xec\x7f\xdd\x69\x5c\x26\xfa\xb6\x1a\xf3\x70\xd9\ +\x58\x31\xad\xcd\x68\xea\xb3\x9e\x95\x37\xd3\x06\x86\xea\x6e\xd1\ +\xc1\x73\x14\x2c\x2d\xc2\x49\x70\xa7\x93\x99\xfd\x4f\xc3\xb4\xce\ +\xb8\x8b\x3c\xdb\xac\x57\xe0\x1a\x75\x73\xbb\xab\xde\x97\xed\xa2\ +\xd9\x2b\x22\xaf\x55\x20\x38\x62\x1f\xcc\x4d\xef\x93\x84\xba\xaa\ +\xbc\xa6\x1a\x9c\x47\xd4\xb7\x07\x87\xf2\x21\xf7\x40\xa8\x23\xc8\ +\x87\x0d\xdd\x64\x7f\x18\xdd\xbf\xdb\x94\x65\x9f\xf6\x1b\xf8\xb9\ +\x0f\x0a\xa5\x51\x43\x05\x08\x75\x9e\x80\x6b\x94\x3e\x6b\x68\xa7\ +\xa3\x3a\x51\x00\x79\x2a\xcf\x83\xfd\xa1\xaa\x6d\xd4\x06\x44\xfe\ +\x65\x11\x48\xcf\x54\x21\x4f\x4c\x18\x77\xb9\x14\x1e\x22\x16\xa4\ +\x64\x89\x14\x57\xb0\x4f\xa0\x2e\x26\x9c\x23\x6c\x31\x05\x9b\x43\ +\xe5\x61\x6f\xa2\x5c\x05\x49\x4d\x51\x8b\x40\x3e\xc7\xb0\xad\x24\ +\x13\x02\xe9\x9c\xc3\x6a\x44\xad\x6f\xa7\x5b\xc7\x25\x51\x68\xa0\ +\x02\x09\xb3\x14\x4c\x2c\xb3\xdc\x81\x84\xf6\x10\x94\x9b\x5c\xf7\ +\x0b\xf3\x2e\xf1\x03\xf2\xc6\x49\x20\x30\x43\xf3\x3b\xda\x3e\x0d\ +\x4e\x00\x78\xd8\xbb\xb3\xd5\x55\xf1\xf7\x7f\x99\x19\x19\x40\xda\ +\x2c\xe1\x04\x33\x4a\x27\x44\x98\xe7\x7f\xb0\xa4\x58\x94\x03\xcd\ +\x83\xd5\x7e\xc2\x61\xba\xcc\x4a\xfe\xdc\x09\x91\x6a\xf0\x59\xfc\ +\x1f\x9a\x90\x9b\xe9\xe2\xf6\xea\xc6\x24\x89\xdb\xab\xdf\x01\x64\ +\xd9\x31\x4e\ \x00\x00\x13\xbe\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -9360,118 +9487,118 @@ qt_resource_data = "\ \x36\x14\x14\xa2\xad\xa3\xa0\xac\xa6\x04\x91\x00\x07\x92\x33\x46\ \x6d\xa5\x0d\x85\xb6\x3c\x63\xeb\xf9\x5a\xeb\xd5\x95\xd6\xd4\x5b\ \xcd\x6f\xa6\xf6\x72\x72\x7e\xf3\x07\x32\x2c\xc5\xda\ -\x00\x00\x06\xd7\ +\x00\x00\x06\xd6\ \x00\ -\x00\x27\xd0\x78\x9c\xed\x59\xdd\x6f\xe3\xb8\x11\x7f\xcf\x5f\xa1\ -\x7a\x5f\xee\x50\x93\xe2\xa7\x48\x2a\xb6\xef\xa1\x8b\x03\x0e\x68\ -\x5f\xda\x2b\xfa\x58\xc8\x12\x6d\xeb\x22\x4b\x86\x24\xc7\xc9\xfe\ -\xf5\x1d\xca\x92\x2c\x7f\xc4\xc9\x6d\x76\x7b\xc0\x39\x5a\x38\x12\ -\x39\x33\xe4\x70\x7e\x33\xe4\x0c\x77\xf2\xd3\xd3\x3a\xf3\x1e\x6d\ -\x59\xa5\x45\x3e\x1d\x51\x4c\x46\x9e\xcd\xe3\x22\x49\xf3\xe5\x74\ -\xf4\xef\x5f\x7f\x46\x7a\xe4\x55\x75\x94\x27\x51\x56\xe4\x76\x3a\ -\xca\x8b\xd1\x4f\xb3\xbb\xc9\x5f\x10\xf2\xfe\x56\xda\xa8\xb6\x89\ -\xb7\x4b\xeb\x95\xf7\x4b\xfe\x50\xc5\xd1\xc6\x7a\x3f\xac\xea\x7a\ -\x13\xfa\xfe\x6e\xb7\xc3\x69\xdb\x89\x8b\x72\xe9\xff\xe8\x21\x34\ -\xbb\xbb\x9b\x54\x8f\xcb\x3b\xcf\xf3\x60\xde\xbc\x0a\x93\x78\x3a\ -\x6a\x05\x36\xdb\x32\x6b\x18\x93\xd8\xb7\x99\x5d\xdb\xbc\xae\x7c\ -\x8a\xa9\x3f\x3a\xb0\xc7\x07\xf6\xd8\xcd\x9e\x3e\xda\xb8\x58\xaf\ -\x8b\xbc\x6a\x24\xf3\xea\xd3\x80\xb9\x4c\x16\x3d\xb7\xd3\x66\xc7\ -\x1b\x26\x6a\x8c\xf1\x09\xf3\x19\x43\xc0\x81\xaa\xe7\xbc\x8e\x9e\ -\xd0\xb1\x28\xe8\x78\x49\x94\x11\x42\x7c\xa0\x1d\x38\xdf\xc6\x15\ -\x56\x60\xd0\x0d\xfc\x7a\xf6\xae\x03\x57\xc5\xb6\x8c\xed\x02\xe4\ -\x2c\xce\x6d\xed\x7f\xfe\xf5\x73\x4f\x44\x04\x27\x75\x32\x18\xa6\ -\xb3\xe7\xd1\xac\x47\x46\xce\xa3\xb5\xad\x36\x51\x6c\x2b\xbf\xeb\ -\x6f\xe4\x77\x69\x52\xaf\xa6\xa3\x40\x6c\x9e\x9a\xf6\xca\xa6\xcb\ -\x55\x3d\xe8\x48\x93\xe9\x08\x74\x66\x9a\x06\x4d\x7b\xe0\x12\x74\ -\xcf\xd0\x0e\x17\xf6\x14\x82\x85\xc6\xd4\x2b\x8d\x0a\x48\xc3\xd2\ -\xe9\x1d\x26\x45\xec\x14\x99\x8e\x36\xa5\x5d\xd8\x12\x1c\xca\x56\ -\x28\x2a\xe3\x15\x76\x66\x99\x01\xef\x24\xb1\x8b\xca\xc9\xec\x67\ -\x76\x2d\x98\x5a\x37\x34\xa0\xf6\x93\x6d\x60\xb2\x8d\x8d\x1d\xd0\ -\x7b\xee\xc1\x2c\xf5\xb3\xb3\xc4\x31\x2b\xdf\x9b\xcb\x3b\x52\x78\ -\xf3\xdf\x27\xd0\xd6\x0b\x3d\xce\xe0\x0f\xbd\xc8\xf1\xbc\xe7\xa0\ -\x80\x1d\xbc\xc8\x45\x9e\x2f\xce\x5e\x57\x86\x69\x35\x40\x45\x99\ -\x2e\x53\x30\x50\xc3\xc7\x28\xe6\xcd\x73\x2c\x03\x8b\x1e\xac\x8d\ -\x69\x26\x46\x9e\xff\x86\xd5\x9f\x08\xf2\x80\xb1\xd7\x15\x21\x58\ -\xba\x45\xb5\x8a\x9c\xaa\x72\xbc\x42\xda\x70\xca\x77\x19\xaa\x35\ -\xf7\xe9\x30\xaf\x21\xf7\xb5\x06\x40\xe6\xc6\x4d\x20\xf9\x8d\x1b\ -\x40\xc9\x1b\x37\x80\x51\xb7\x6d\x00\xc5\x2e\xe8\x70\x53\x06\x10\ -\x37\x7e\x0e\xa8\x40\xdc\xb8\x01\xf4\x8d\x6f\x82\x9a\x04\x37\x6f\ -\x00\x74\xe3\x99\x80\xe6\x7f\xb6\x20\x98\xf8\xae\x38\x6a\xbe\x7a\ -\x01\x57\x5c\x25\x8f\xa9\xdd\x1d\x2a\xa8\x79\x54\xd9\x76\xe4\x4d\ -\xb4\x84\xaa\x38\x2b\xca\xe9\xe8\xd3\xa2\x79\x5a\xc2\xbc\x28\x13\ -\x5b\x76\xa4\xa0\x79\x8e\x48\x05\x54\x8e\x69\xfd\xbc\xbf\x07\xb8\ -\x3b\x31\x22\x8c\xda\xd3\xc9\x65\x7a\xb5\x8a\x92\x62\x37\x1d\xb1\ -\x53\xe2\x97\xa2\x58\x3b\x29\x26\x38\x09\x94\x09\x4e\xe9\x31\x98\ -\x08\x71\x26\x30\x64\xf3\xca\x9c\x51\x61\x46\xc4\x24\xc7\x84\x52\ -\x2a\xcf\xa8\xdb\x12\x2a\xcc\x1a\x65\xd1\xb3\x85\x75\x35\xaf\xce\ -\xc8\xd5\xaa\xd8\x2d\x4b\x67\x9f\xba\xdc\xda\x53\x49\x28\x53\xb7\ -\xee\x9a\x01\x6d\xf3\xb4\x86\x52\xbe\x2d\x85\x07\x1c\x4e\x16\xcd\ -\xe7\xc5\xd3\xe5\x01\xaa\x3c\xda\x5c\x21\x3b\x0a\xda\x44\xf5\xaa\ -\xba\x42\xcf\x8b\xc4\xbe\x40\xef\x87\x47\x36\x59\x5a\xb4\x4e\x93\ -\x4d\x91\xe6\xf5\xab\xdc\xaf\x30\x16\xf3\xdf\x20\x5a\xae\x29\xd6\ -\x72\x5c\x51\x6d\x97\xe6\x80\x34\x6a\xaf\x15\x28\xd3\x67\xfe\xd0\ -\x72\x74\x17\x0d\x4a\xea\x17\x38\x5c\x74\xbc\x40\x72\x9e\x78\xe6\ -\x0d\x2d\x6d\x1d\x3d\xa5\xeb\xf4\x8b\x4d\x9c\x78\x1b\x2a\x6b\x5b\ -\x47\x49\x54\x47\x87\xb0\xe8\x7a\xa0\xc0\xa6\xdd\xe5\x42\x99\x2c\ -\xc2\x7f\x7e\xfe\x79\xd6\xc6\xe1\x24\x8e\xc3\xff\x14\xe5\x43\x17\ -\x96\x9e\xe7\x18\xa2\x79\xb1\x05\xb5\x47\xb3\xbe\x7b\x92\xc4\xe1\ -\xa2\x28\xd7\x51\x3d\x4b\xd7\xe0\xec\xee\x8a\xe7\xaf\x4f\xeb\x0c\ -\x02\xb4\x27\x1c\x31\xbb\xb0\x3e\x0c\xba\x1f\xb6\xb4\xfb\x0b\x9f\ -\x8b\xb7\x5e\x49\xbc\x4e\x9d\x90\xff\xaf\x3a\xcd\xb2\x5f\xdc\x24\ -\xfd\x2e\xd8\x0f\x9a\xd6\x99\x9d\x35\x73\xee\x3f\xbb\x55\xf8\xed\ -\x32\xda\x45\xfa\x83\x55\x4e\xfc\xce\x0c\x4d\x6b\x79\x30\xcf\x51\ -\xb0\xf4\x16\xce\xa2\xb9\xcd\xa6\xa3\xbf\x3b\xa2\x77\x46\x5d\x96\ -\xc5\x76\xb3\x06\xd7\x68\xc5\x7b\xb3\x82\xcb\xf4\x5b\x5b\xfd\x9c\ -\x01\xbd\xd9\x6a\xc2\x4f\xa4\x79\xee\x17\xb0\xa8\xf0\x53\x14\x09\ -\xd1\x36\x50\xbb\x9f\x84\x74\xdf\x2c\xb7\x99\x0d\xed\xa3\x05\xbf\ -\x4b\xee\xab\xba\x2c\x1e\x6c\x2f\xbc\x6f\xee\x1d\x2e\xe4\x58\x88\ -\x40\x30\x46\x68\xd7\x9f\xa5\xb9\x05\xed\xc2\xf9\xb6\xae\x87\x7d\ -\xbf\x41\x1c\x84\xa0\x70\xde\x0d\x08\xc1\x51\xdb\x32\x03\xd7\xa9\ -\x43\xd1\xf5\x1d\xf4\x68\x3b\x92\x08\xb6\xb2\xb2\x8c\x9e\xc3\xbc\ -\xc8\xed\xb0\xb7\x58\x2c\x2a\x5b\x87\xe4\x7e\x1d\x95\x0f\xb6\xdc\ -\xd3\x1f\xd3\x2a\x9d\xa7\x99\x1b\xa2\xf9\xcc\xec\x7d\x92\x56\x1b\ -\x30\x4f\x98\xe6\x4e\x8d\xfb\xe2\xd1\x96\x8b\xac\xd8\xf5\x74\x9b\ -\x47\xf0\x42\xf3\x28\x7e\x58\x36\xfa\x85\x51\x0c\xbb\xd1\x36\x8b\ -\x6a\x7b\x38\x44\x00\x22\x67\x56\xa6\x05\x41\x1c\x09\x44\x90\xee\ -\x89\x5d\xec\x49\x6c\x78\xc0\xd9\xe1\x0e\xa4\x0b\x39\xca\xb0\xd4\ -\x52\x90\x83\xc8\x93\xbb\x93\xc2\xc6\x28\x33\x48\x95\x20\xc8\xa4\ -\xc1\x01\xc4\xf0\xa1\x82\xa8\xcb\x28\xaf\x9c\x4f\x43\x04\x45\x75\ -\x99\x3e\xfd\x40\xb0\x92\x4a\x51\x21\xc7\x88\xe0\x40\x32\xa9\x03\ -\x6a\xc6\x64\x4c\xe1\x47\x7e\x3c\x1c\xd6\x6f\xf4\x82\xc5\x42\x2d\ -\x58\xf4\x5e\x2f\x20\x46\xc3\xca\x95\xfe\xf6\x88\x7f\x47\x74\xaf\ -\xb9\xec\xd0\xc3\x2e\x7a\xc1\x29\xfa\x70\x64\xf2\x80\x99\x40\x5d\ -\x42\x5f\x68\x26\x8d\x18\xa2\xcf\x30\x87\x23\x94\x99\x23\xf4\x99\ -\xc6\x5a\x6b\x00\xf7\x2a\xfc\x86\x2b\x2e\x29\x01\xcc\x31\x17\x9a\ -\x7f\xc0\xff\x47\xc0\x3f\xb8\xe9\xfc\x4a\x07\xd0\xd8\x04\x80\xe3\ -\x99\x03\x04\x01\xf8\xc0\x37\x70\x00\x97\x55\xbc\xc9\x01\x8c\x91\ -\xf2\x9d\x0e\xf0\x1e\xdc\xff\x40\x84\xaf\x1f\x2c\x3d\x06\x00\xfb\ -\x3f\x3c\x2a\x20\x67\xa6\x92\xa9\x31\x35\x98\x19\x41\x89\xf6\xb8\ -\xc2\x44\x69\xaa\xc7\x4c\x61\xf7\x66\xc6\x63\x12\x13\xc2\x8c\xe1\ -\x63\xae\x31\xd5\x34\x90\xca\x63\x98\x06\x01\xe7\x06\xf8\x60\x7b\ -\x37\x1c\x4e\x89\x8b\xc3\x7d\x79\xe9\xb8\x91\xee\x77\x5e\xad\xb8\ -\xac\xd0\x65\x29\x90\x19\xc6\xee\xf9\xc0\xfe\x3b\x61\xcf\x01\x22\ -\x40\x4b\x89\x31\x04\xa8\x90\x42\x31\xe5\x05\x0c\x93\x80\x68\x00\ -\x90\x07\xd8\x08\x26\x84\xf6\x84\xc1\x46\xcb\x40\x8c\x85\x82\xc8\ -\x84\x02\x2a\xf0\xc0\x33\xa8\xd0\x46\x2b\xe7\x0f\x90\x03\x48\x29\ -\x2f\x0e\x77\x0d\xfb\x77\x22\xbf\xc7\xfa\x08\xbb\x37\x40\xf9\x62\ -\x0e\xd7\x20\x7a\x0e\x65\xf7\x05\x39\x09\xe1\x44\x72\x97\x5b\xee\ -\x1f\x79\xcd\x17\x8e\xa1\x18\x9a\x7d\xed\xec\xe4\xb6\x39\xad\xc7\ -\x02\xca\x60\x30\x23\xe7\x1e\xe5\x98\x13\x45\x8d\x18\x23\x0a\xd9\ -\x0f\xa5\x46\x79\x02\x83\x81\xe1\xdf\x18\x09\x4c\xb8\x94\xc6\x78\ -\x88\x81\x1e\x5c\x1b\xc3\xc6\x48\xe1\x40\x18\xc2\xb8\x87\x34\x86\ -\xca\x16\x1a\x63\x00\x25\x30\x01\x40\x41\x9b\x6c\x4a\x48\x3d\x0e\ -\x5c\x90\xd2\x40\x9c\x20\xe1\xec\xc9\xb5\x30\xaf\x63\x10\x7f\x9c\ -\xbd\xff\xaf\xb3\x97\xbf\xf3\xec\xa5\x6e\xbb\xd6\x4a\x0f\x8f\x5e\ -\x70\x2c\x2d\x14\x1d\xfc\x07\xde\x77\xcf\xbd\xbe\x5f\x01\xf6\x67\ -\xc7\x1f\x89\x53\x0f\xf8\x9d\xc5\x57\x00\xec\x81\x36\xf2\x28\xfb\ -\x32\x00\xaa\x61\x8a\x5c\xcf\xbe\xbe\x69\xf5\xf5\xe1\x02\x5f\xef\ -\x02\xe8\xac\x06\xfb\x9d\x4e\x20\x21\x31\x13\xc2\x48\x3a\x74\x02\ -\x38\xd7\xe1\x38\x10\x83\xc2\xec\xeb\x9d\xe0\x23\x0d\xfb\xa6\x69\ -\x18\x64\x4b\x0a\xe0\x62\x63\xc8\x0b\x04\xd5\x8a\x79\x92\x62\x67\ -\x7b\xc5\xc6\x54\x63\x48\xbb\xa5\xe1\x7d\xd6\x20\x9b\xec\x0a\x52\ -\x6b\x46\x3d\x1a\xe0\x40\x09\xce\x99\xcb\xb6\x21\xd9\x56\x17\xc6\ -\x7a\x39\x03\x7b\x73\xfe\x35\xf1\x97\xb3\xbb\x89\xbb\x8e\x9c\xdd\ -\xfd\x0f\x63\x62\xcf\x20\ +\x00\x27\xf1\x78\x9c\xed\x59\xdd\x6f\xdb\x36\x10\x7f\xcf\x5f\xa1\ +\xa9\x2f\x1b\x66\x51\xfc\x14\x49\xc5\xce\x30\xac\x28\x30\x60\x7b\ +\xd9\x3a\xec\xb1\x90\x25\xda\xd6\x22\x4b\x86\x24\xc7\x4e\xff\xfa\ +\x1d\x65\x49\x96\x1d\xc7\xc9\x9a\x74\x03\xe6\xc8\x48\x6d\xf1\x3e\ +\x78\xbc\xfb\x1d\x79\xc7\x8e\x7f\xd8\x2e\x33\xe7\xce\x94\x55\x5a\ +\xe4\x13\x97\x20\xec\x3a\x26\x8f\x8b\x24\xcd\xe7\x13\xf7\x8f\x8f\ +\x1f\x3c\xe5\x3a\x55\x1d\xe5\x49\x94\x15\xb9\x99\xb8\x79\xe1\xfe\ +\x70\x73\x35\xfe\xc6\xf3\x9c\x9f\x4a\x13\xd5\x26\x71\x36\x69\xbd\ +\x70\x7e\xce\x6f\xab\x38\x5a\x19\xe7\xdb\x45\x5d\xaf\x42\xdf\xdf\ +\x6c\x36\x28\x6d\x07\x51\x51\xce\xfd\xef\x1c\xcf\xbb\xb9\xba\x1a\ +\x57\x77\xf3\x2b\xc7\x71\x60\xde\xbc\x0a\x93\x78\xe2\xb6\x02\xab\ +\x75\x99\x35\x8c\x49\xec\x9b\xcc\x2c\x4d\x5e\x57\x3e\x41\xc4\x77\ +\xf7\xec\xf1\x9e\x3d\xb6\xb3\xa7\x77\x26\x2e\x96\xcb\x22\xaf\x1a\ +\xc9\xbc\x7a\x37\x60\x2e\x93\x59\xcf\x6d\xad\xd9\xb0\x86\x89\x68\ +\xad\x7d\x4c\x7d\x4a\x3d\xe0\xf0\xaa\xfb\xbc\x8e\xb6\xde\xa1\x28\ +\xd8\x78\x4a\x94\x62\x8c\x7d\xa0\xed\x39\x9f\xc7\x15\x56\xe0\xd0\ +\x15\xfc\xf5\xec\xdd\x00\xaa\x8a\x75\x19\x9b\x19\xc8\x19\x94\x9b\ +\xda\x7f\xff\xf1\x7d\x4f\xf4\x30\x4a\xea\x64\xa0\xa6\xf3\xe7\xc1\ +\xac\x07\x4e\xce\xa3\xa5\xa9\x56\x51\x6c\x2a\xbf\x1b\x6f\xe4\x37\ +\x69\x52\x2f\x26\x6e\xc0\x57\xdb\xe6\x7d\x61\xd2\xf9\xa2\x1e\x0c\ +\xa4\xc9\xc4\x05\x9b\xa9\x22\x41\xf3\x3e\x80\x04\xd9\x31\xb4\xea\ +\xc2\x9e\x82\x11\x57\x88\x21\xe2\x94\x5a\xa9\x9d\x54\x67\x79\x98\ +\x14\xb1\x35\x65\xe2\xfe\x58\xc6\x8b\x4f\x7f\x46\x59\xf6\xe9\x63\ +\x69\x0c\xb2\x6e\xb9\x01\xce\x71\x62\x66\x95\x95\xd8\xcd\x6c\xdf\ +\x60\x6a\xd5\xd0\x80\xda\x4f\xb6\x82\xc9\x56\x26\xb6\x81\xde\x71\ +\x0f\xe6\xa8\xef\xad\x27\x0e\x59\xd9\xce\x5d\xce\x81\xc1\xab\x4f\ +\x5b\xb0\xd6\x09\x1d\x46\xe1\x1f\x72\x92\xe3\x7e\xc7\x41\x20\x76\ +\xf0\x85\x4f\xf2\x7c\xb6\xfe\x3a\xa3\xa6\xb5\xc0\x2b\xca\x74\x9e\ +\x82\x83\x1a\x3e\x4a\x10\x6b\x9e\x43\x19\x58\xf4\x60\x6d\x54\x51\ +\xee\x3a\xfe\x33\x56\x7f\x24\xc8\x02\x4a\x9f\x36\x04\x23\x61\x17\ +\xd5\x1a\x72\x6c\xca\xe1\x0a\x49\xc3\x29\x5e\xe4\xa8\xd6\xdd\xc7\ +\x6a\x9e\x8a\xdc\x97\x3a\xc0\xd3\x17\xee\x02\xc1\x2e\xdc\x01\x52\ +\x5c\xb8\x03\xb4\xbc\x6c\x07\x48\x7a\xc2\x86\x8b\x72\x00\xbf\xf0\ +\x73\x40\x06\xfc\xc2\x1d\xa0\x2e\x7c\x13\x54\x38\xb8\x78\x07\x78\ +\x17\x5e\x09\x28\xf6\x7f\x4b\x82\xb1\x6f\x9b\xa3\xe6\x57\x2f\x60\ +\x5b\xab\xe4\x2e\x35\x9b\x7d\x07\x35\x8d\x2a\xd3\x6a\x5e\x45\x73\ +\xe8\x8a\xb3\xa2\x9c\xb8\xef\x66\xcd\xd3\x12\xa6\x45\x99\x98\xb2\ +\x23\x05\xcd\x73\x40\x2a\xa0\x73\x4c\xeb\xfb\xdd\x3d\xc0\xd5\x91\ +\x13\x41\x6b\x4f\xc7\xa7\xe9\xd5\x22\x4a\x8a\xcd\xc4\xa5\xc7\xc4\ +\xcf\x45\xb1\x9c\xb8\x02\x09\x6c\x1f\x72\x4c\x8e\xc1\x43\x5c\x20\ +\x4c\x45\xc0\x1f\x12\x61\x3e\x2a\x91\x22\x1a\x93\xe0\x01\x71\x5d\ +\x96\x26\xaf\xbd\x2c\xba\x37\xb0\xa8\xe6\xab\xd3\x50\x2d\x8a\xcd\ +\xbc\xb4\xce\xa9\xcb\xb5\x39\x96\x84\x0e\x75\x6d\xef\x18\xbc\x75\ +\x9e\xd6\xd0\xc7\xb7\x7d\xf0\x80\xc3\xca\x7a\xd3\x69\xb1\x3d\xad\ +\xa0\xca\xa3\xd5\x19\xb2\xa5\x78\xab\xa8\x5e\x54\x67\xe8\x79\x91\ +\x98\x47\xe8\xbd\x7a\xcf\x24\x73\xe3\x2d\xd3\x64\x55\xa4\x79\xfd\ +\x24\xf7\x13\x8c\xc5\xf4\x2f\x48\x95\x73\x86\xb5\x1c\x67\x4c\xdb\ +\xa4\x39\x84\xd9\x6b\xef\x14\x08\x55\x0f\xc0\xd0\x72\x74\xb7\x0c\ +\x52\xa8\x47\x38\x6c\x6a\x3c\x42\xb2\x30\xd4\x8f\xd0\x96\xd1\x36\ +\x5d\xa6\x9f\x4d\x62\xc5\xdb\x3c\x59\x9a\x3a\x4a\xa2\x3a\xda\xe7\ +\x44\x37\x02\xdd\x35\xe9\x6e\x16\xca\x64\x16\xfe\xf6\xfe\xc3\x4d\ +\x9b\x84\xe3\x38\x0e\xff\x2c\xca\xdb\x2e\x27\x1d\xc7\x32\x44\xd3\ +\x62\x0d\x66\xbb\x37\xfd\xf0\x38\x89\xc3\x59\x51\x2e\xa3\xfa\x26\ +\x5d\x02\xd2\xed\xfd\xce\xf7\xdb\x65\x06\xd9\xd9\x13\x0e\x98\x6d\ +\x4e\xef\x95\xee\xd4\x96\x66\x77\xdb\x73\xf2\xca\x2b\x89\x97\xa9\ +\x15\xf2\x7f\xaf\xd3\x2c\xfb\xd9\x4e\xd2\x6f\x81\xbd\xd2\xb4\xce\ +\xcc\x7e\x70\xec\xb7\xd6\xb7\x6b\xf3\x07\x8b\x1b\xfb\xdd\xea\x9b\ +\xb7\xf9\xde\x2b\x07\x39\xd2\x3b\x36\x8b\xa6\x26\x9b\xb8\xbf\x58\ +\xa2\xf3\x80\x3a\x2f\x8b\xf5\x6a\x09\x88\x68\xc5\x7b\x6f\x02\x52\ +\xfa\xed\xac\xbe\xcf\x80\xde\x6c\x2f\xe1\xbb\x26\xd1\xf1\xf5\x0c\ +\xd6\x12\xbe\x8b\x22\xce\xdb\x17\xaf\xdd\x43\x42\xb2\x7b\x2d\xd7\ +\x99\x09\xcd\x9d\x01\xb8\x25\xd7\x55\x5d\x16\xb7\xa6\x17\xde\xbd\ +\xee\x70\x16\x32\xc4\x79\xc0\x29\xc5\xa4\x1b\xcf\xd2\xdc\x80\x75\ +\xe1\x74\x5d\xd7\xc3\xb1\xbf\x00\xfe\x21\x18\x9c\x77\x0a\x21\x27\ +\x6a\x53\x66\x80\x98\x3a\xe4\xdd\xd8\xde\x8e\x76\x20\x89\x60\xfb\ +\x2a\xcb\xe8\x3e\xcc\x8b\xdc\x0c\x47\x8b\xd9\xac\x32\x75\x88\xaf\ +\x97\x51\x79\x6b\xca\x1d\xfd\x2e\xad\xd2\x69\x9a\x59\x15\xcd\xcf\ +\xcc\x5c\x27\x69\xb5\x02\xf7\x84\x69\x6e\xcd\xb8\x2e\xee\x4c\x39\ +\xcb\x8a\x4d\x4f\x37\x79\x04\x5f\xde\x34\x8a\x6f\xe7\x8d\x7d\x61\ +\x14\xc3\x26\xb4\xce\xa2\xda\xec\x0f\x0e\x08\x91\x75\x2b\x55\x1c\ +\x7b\xcc\xe3\x1e\xf6\x54\x4f\xec\x52\x4e\x20\xcd\x02\x46\xf7\xf7\ +\x1e\x5d\xa6\x11\x8a\x84\x12\x1c\xef\x45\xb6\xf6\x1e\x0a\x69\x2d\ +\xf5\xa0\x3c\x82\xdc\x12\x1a\x05\x90\xba\xfb\xae\xa1\x2e\xa3\xbc\ +\xb2\x50\x86\xc4\x89\xea\x32\xdd\x7e\x8b\x91\x14\x52\x12\x2e\x46\ +\x1e\x46\x81\xa0\x42\x05\x44\x8f\xf0\x88\xc0\x1f\xfe\x6e\x7f\x40\ +\x3f\x13\x05\xbb\xb3\xe8\xa5\x28\xc0\x5a\xc1\xca\xa5\xd4\xed\xa3\ +\x5e\x3f\xf4\x5f\x31\xcc\xe7\xb0\x3b\x84\xda\x49\x38\x1c\xc3\x80\ +\x72\xc4\x02\xaa\x03\x79\x0a\x06\x5c\x51\xa1\xf9\x10\x06\x14\x31\ +\x42\x08\xf0\x0f\x61\x40\x15\x52\x4a\x41\x94\xcf\xe2\x40\x33\xc9\ +\x04\xc1\x10\x7c\xc4\xb8\x62\x6f\x38\xf8\x4f\x71\x30\xb8\xef\xfc\ +\x42\x24\x28\xa4\x03\x08\xe8\x03\x24\x04\x01\x80\xe1\x15\x90\x60\ +\xcb\x8b\x67\x20\x21\x96\xf6\xf3\x42\x24\xbc\x24\xee\xff\x61\x84\ +\xcf\x1f\x35\x7d\x0c\x20\xec\xbf\x3a\x84\x23\xca\x89\xa0\x72\x44\ +\x34\xa2\x9a\x13\xac\x1c\x26\x11\x96\x8a\xa8\x11\xd4\xc6\xf6\x9b\ +\x6a\x87\x42\x09\x8d\xa9\xd6\x6c\xc4\x14\x22\x8a\x04\x42\x3a\x14\ +\x91\x20\x60\x4c\x03\x1f\x6c\xf8\x9a\xc1\xb9\x71\x52\xdd\xe7\xc7\ +\x0e\x20\x61\xff\x1e\xf6\x2c\xb6\x3c\xb4\xe5\x0a\x94\x88\xb1\x7d\ +\xde\x62\xff\x95\x62\xcf\x20\x44\x10\x2d\xc9\x47\x90\xa0\x5c\x70\ +\x49\xa5\x13\x50\x84\x03\xac\x20\x80\x2c\x40\x9a\x53\xce\x95\xc3\ +\x35\xd2\x0a\xfa\xa7\x11\x97\x90\x99\x94\xca\xc0\x01\x64\x10\xae\ +\xb4\x92\x16\x0f\x50\x15\x08\x21\x4e\xaa\x3b\x17\xfb\x17\x46\x7e\ +\x17\xeb\x83\xd8\x3d\x23\x94\x8f\x56\x75\x4d\x44\x1f\x86\xb2\xfb\ +\x05\x55\x0a\x66\x58\x30\x5b\x6d\xee\x1e\x71\x0e\x0b\x87\xa1\x18\ +\xba\x7d\x69\xfd\x64\xb7\x39\xa5\x46\x1c\x9a\x61\x70\x23\x63\x0e\ +\x61\x88\x61\x49\x34\x1f\x79\x04\xea\x21\x42\xb4\x74\x38\x02\x07\ +\xc3\x67\xe4\x71\x84\x99\x10\x5a\x3b\x1e\x05\x3b\x98\xd2\x9a\x8e\ +\x3c\x89\x02\xae\x31\x65\x8e\xa7\x10\xa3\x50\xc0\xea\x11\x04\x25\ +\xd0\x01\x84\x82\x34\xf5\x15\x17\x6a\x14\xd8\x24\x25\x01\x3f\x8a\ +\x84\xf5\x27\x53\x5c\x3f\x1d\x83\xf8\xed\x10\xfe\xd7\x0f\x61\xf6\ +\xc2\x43\x98\xd8\x7d\x5b\x49\x35\x3c\x83\x01\x61\x8a\x4b\x32\xf8\ +\xff\xbc\xaf\x5e\x8d\xc9\xc8\x7e\x5e\xab\x37\xeb\xf2\x8e\x5f\x12\ +\x10\x3c\x7e\x0c\x85\x7f\xd8\xa0\x05\xc0\x1e\x28\x2d\x0e\xea\x31\ +\x0d\xd1\xd5\x54\xe2\xf3\xf5\xd8\xab\x76\x68\x6f\x58\x78\x05\x2c\ +\x78\x0f\xfa\xb4\x7f\x88\x06\x01\x35\x1b\xe7\x5a\x90\x21\x1a\xe0\ +\xc8\x87\x93\x82\x0f\x9a\xb7\x2f\x47\xc3\x5b\x85\xf6\xaa\x15\x1a\ +\x14\x52\x12\xc2\x45\x47\x50\x32\x70\xa2\x24\x75\x04\x41\xd6\xf7\ +\x92\x8e\x88\x42\x50\x91\x0b\xcd\xfa\x82\x42\x34\x85\x17\x54\xdd\ +\x94\x38\x24\x40\x81\xe4\x8c\x51\x5b\x88\x43\x1d\x2e\x4f\xe8\x7a\ +\xbc\x38\x7b\x76\x69\x36\xf6\xe7\x37\x57\x63\x7b\x65\x79\x73\xf5\ +\x37\x0f\x85\xd5\xfb\ \x00\x00\x11\xff\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -10066,6 +10193,130 @@ qt_resource_data = "\ \x9a\x32\x44\x99\x70\x39\x33\x94\xd2\xeb\xa7\x55\xab\x4f\x8c\xe1\ \x70\xaa\x5e\x6a\x8c\x9b\xd9\xea\xf6\xea\xc6\x24\x6c\xb7\x57\xff\ \x06\x6a\xf1\x08\x6d\ +\x00\x00\x07\x91\ +\x00\ +\x00\x36\x0d\x78\x9c\xed\x5b\xdd\x6f\xdb\x38\x12\x7f\xcf\x5f\xa1\ +\x53\x5e\x5a\x9c\x25\xf3\x4b\x14\xa9\xda\x59\x1c\xae\xd8\xc3\x02\ +\x77\x38\x60\xdb\xe2\x1e\x0b\x59\xa2\x6d\x6d\x64\xd1\x90\xe4\xd8\ +\xee\x5f\x7f\x43\x59\x5f\x76\xe4\xa4\xe9\xe6\xa1\x17\x9d\x83\x24\ +\xd2\xcc\x90\x1c\xfe\x66\x38\x33\x94\xe8\xd9\x2f\x87\x4d\x6a\x3d\ +\xa8\xbc\x48\x74\x36\xb7\xb1\x8b\x6c\x4b\x65\x91\x8e\x93\x6c\x35\ +\xb7\xbf\x7c\xfe\xd5\x11\xb6\x55\x94\x61\x16\x87\xa9\xce\xd4\xdc\ +\xce\xb4\xfd\xcb\xdd\xcd\xec\x2f\x8e\x63\xfd\x3d\x57\x61\xa9\x62\ +\x6b\x9f\x94\x6b\xeb\xb7\xec\xbe\x88\xc2\xad\xb2\xde\xad\xcb\x72\ +\x1b\x4c\xa7\xfb\xfd\xde\x4d\x6a\xa2\xab\xf3\xd5\xf4\xbd\xe5\x38\ +\x77\x37\x37\xb3\xe2\x61\x75\x63\x59\x16\x8c\x9b\x15\x41\x1c\xcd\ +\xed\xba\xc1\x76\x97\xa7\x95\x60\x1c\x4d\x55\xaa\x36\x2a\x2b\x8b\ +\x29\x76\xf1\xd4\xee\xc4\xa3\x4e\x3c\x32\xa3\x27\x0f\x2a\xd2\x9b\ +\x8d\xce\x8a\xaa\x65\x56\xdc\xf6\x84\xf3\x78\xd9\x4a\x1b\x6d\xf6\ +\xb4\x12\xc2\x52\xca\x29\x22\x53\x42\x1c\x90\x70\x8a\x63\x56\x86\ +\x07\xe7\xbc\x29\xe8\x38\xd4\x94\x20\x84\xa6\xc0\xeb\x24\xbf\x4f\ +\x2a\x38\xa4\x00\xc5\x55\x65\x2a\x6e\x7f\x74\x80\x7f\x0b\xbf\x6d\ +\x83\x86\xe0\x16\x7a\x97\x47\x6a\x09\x2d\x95\x9b\xa9\x72\xfa\xf1\ +\xf3\xc7\x96\xe9\x20\x37\x2e\xe3\x5e\x37\x0d\xfa\x67\xe3\x9e\x99\ +\x24\x0b\x37\xaa\xd8\x86\x91\x2a\xa6\x0d\xbd\x6a\xbf\x4f\xe2\x72\ +\x3d\xb7\x39\xdb\x1e\xaa\xfb\xb5\x4a\x56\xeb\xb2\x47\x48\xe2\xb9\ +\x0d\x33\x24\x02\xf3\xea\xbe\xe7\x40\xf8\x24\x50\x77\x17\xb4\x1c\ +\xe4\x32\xe1\x52\x17\x5b\xb9\x14\xe2\xd4\xaa\xd1\x3c\x88\x75\x64\ +\x54\x99\xdb\x7f\xcb\xa3\xf5\xd7\xdf\xb5\x5e\xba\x06\xbf\x3b\x10\ +\x9a\xc5\x6a\x59\x18\xe1\xd3\xa0\xe6\x0e\x46\x15\x15\x0f\xb8\x80\ +\x9c\x0a\xf3\x7f\xe4\x61\x9c\x80\xbf\x9c\xe4\x4e\x92\xe7\x1c\xca\ +\x05\xae\xdb\x40\xab\xa2\xd4\xdb\x46\xb6\x9e\x0c\x50\x28\x97\xbe\ +\xdd\x91\xf5\x72\x59\x28\x98\x34\xea\xd1\x8a\xf2\x98\xaa\x93\xb4\ +\x13\xe9\x54\xe7\xc1\xed\xb2\xfa\x7c\xa8\x48\x1a\xb0\x4c\xca\x63\ +\x80\x3f\xd8\xd6\xf4\xca\x68\x03\x5d\x88\x85\xf9\x79\xd4\xc5\x63\ +\x55\xb0\x3d\xa4\xb5\xf0\xda\xd1\x66\xd3\xf3\x69\xd7\xd4\xd6\x1a\ +\x5b\xb0\xc6\x56\x45\x66\xdd\x34\x3d\xb5\x46\x28\x8f\xc6\x55\xce\ +\x45\x69\xdc\x8e\xd8\x59\x74\xfb\xf5\x00\xa8\x58\x81\x45\x09\xfc\ +\xc1\x83\x12\xc7\x93\x04\x86\xa5\x00\xff\xd0\xa0\xcc\x37\xe3\x50\ +\x4f\x74\x53\x6b\xe0\xe8\x3c\x59\x25\xe0\x41\x95\x1c\xc1\x2e\xad\ +\x3e\xe7\x6d\x00\x8c\xde\xdc\x88\x20\xac\xc3\xe4\xa9\xd9\x5f\x34\ +\xa4\x9c\x90\xe7\x15\x41\xae\x67\x26\x55\x2b\x72\xa9\xca\xf9\x0c\ +\x71\x25\xe9\xfd\x29\xa0\x6a\xb8\x2f\xbb\x79\xce\x72\x3f\x0a\x80\ +\x23\x47\x0e\x81\x47\x47\x0e\x80\xef\x8d\x1c\x80\x5e\x22\x18\x25\ +\x00\x3e\x19\xd0\x61\x54\x00\xb0\x91\xe7\x01\x9f\xb3\x91\x03\x20\ +\x46\x1e\x04\x05\xe2\xa3\x07\xc0\x19\x79\x25\x20\xe8\xc8\x17\x01\ +\xc7\x23\x0f\x83\x00\x80\x23\x46\x0e\x01\x1b\x79\x14\x00\x00\xc6\ +\x1e\x08\xb9\x3f\xf2\x7a\x10\x00\x70\x46\x9e\x0b\x7c\xf4\x1d\x0f\ +\xa9\xde\x38\x00\x63\xcf\x05\x3e\x7b\x83\x45\xf1\x36\x2c\x4b\x95\ +\x67\x4d\xbb\xfa\xf6\x73\x1e\x66\xc5\x52\xe7\x9b\xb9\xbd\x09\xcb\ +\x3c\x39\xbc\x43\x2e\x87\x6d\x21\xf5\x89\x98\x38\xc8\x15\x58\x10\ +\x89\x3d\x6f\x42\x5c\xe6\xf9\x82\x62\x36\xc1\xae\x10\x8c\x79\x1e\ +\x9b\x38\x84\x03\x15\x71\xc4\x27\x58\xb8\x44\x32\xc9\xfc\xf7\xe7\ +\x8f\x6b\x4f\xa3\x78\x84\x76\x1a\x57\x2f\x42\x82\x75\xae\x96\x73\ +\xfb\xf6\x13\x8c\xb9\x2d\xf0\x57\xec\x0c\x94\x60\x91\x4e\x53\x30\ +\xc9\xdc\x0e\xd3\x7d\x78\x2c\x7e\xc8\x98\x1e\x21\x6f\xb0\xb8\xbb\ +\x30\x66\x2b\x58\x94\x3a\xba\x37\x08\x54\xb8\xaa\xc2\xc2\xc1\xf9\ +\xf3\xf3\x21\xbc\x9f\x72\x05\xee\x83\x23\x30\x3a\x71\xb0\x8b\x10\ +\xc4\x06\x51\x79\x02\xe1\x58\xf8\x02\xae\x28\xc6\xcc\x63\x62\x42\ +\x5d\xe6\x73\x24\x85\x0f\x57\x1e\x65\x92\xd0\xce\x0f\x9a\xf7\x4a\ +\x9d\x22\xf5\x9b\x27\x72\xa9\xc1\x97\x2c\x29\x8b\xb9\xbd\x2b\x54\ +\xfe\xc9\xbc\xb0\xfa\x77\xf6\xa5\x50\xcf\xbb\x45\xfb\x0e\x26\x07\ +\x6a\x23\x7d\x9a\xae\xa1\x30\x26\x68\x6f\xb6\x9d\x42\xa4\x47\xab\ +\x55\xea\xbf\x7b\x01\x3b\xc2\x02\xf0\x7a\x94\xc3\xe0\x7b\xa2\x65\ +\x92\xa6\xc1\x22\x0d\xa3\xfb\x0f\x45\x99\xeb\x7b\x15\x64\x3a\x53\ +\xbd\xb7\x35\xf5\xec\x7e\xcc\x77\xdf\xe2\x73\xfa\x17\x84\xa2\xef\ +\xf5\x3f\xe9\x02\x89\x0a\x3c\x11\xae\xe4\x92\x08\xc4\xae\x06\xa2\ +\x9e\x2f\x5c\x09\x45\x03\xd1\xff\xb5\x42\xd1\x5b\x2c\xb1\x5f\x21\ +\x18\xf1\x51\x05\x23\xf4\xd3\x04\xa3\x97\xac\x44\x0f\x53\x2a\x48\ +\x05\x3e\xa7\x98\x48\x69\xc0\xc7\x50\x2c\x20\x6a\xae\x18\x14\x0a\ +\x3e\xd8\x86\x49\xd7\xe7\xc4\xe3\x86\x2d\x3d\xc6\x05\xba\x56\x13\ +\x48\x3e\xbc\x10\xfb\x6b\x75\x60\xb9\xbc\xce\x52\x14\x6f\xb0\xc6\ +\x7d\xfd\xb8\x6a\x2a\x3c\x4a\x39\x88\x4e\x30\x14\x83\xc2\xc7\xf2\ +\x7a\x85\xd7\x33\xd6\xb5\x1a\xef\x45\xf6\x7c\x8d\x22\xa7\x37\xe0\ +\x18\x22\x0b\xeb\x45\xd2\xff\x9d\xd8\xc2\x00\x7b\x26\x04\x37\x1b\ +\x0e\x4e\x60\xb7\x21\x98\x84\x6d\x86\xe7\x41\x70\xe1\x3e\x5c\x31\ +\x8a\xa9\xe4\x13\xe2\xbb\x92\x09\x66\xf6\x20\xd4\xa5\x88\x33\x8f\ +\x0f\x3b\x23\xa5\xe8\x39\x57\x1c\x28\xab\x5e\x25\xb0\x50\xf2\xff\ +\x0c\xdf\x21\x33\x84\xf7\x18\xd6\x21\xfd\x69\x56\xe1\x8b\x7c\x97\ +\x8f\xfb\xd9\x97\x47\xc5\x1b\x5c\xbc\x2f\x01\x80\xe1\x37\xe8\x01\ +\x57\x8e\x8f\x5e\x5b\xdf\x83\x89\x63\xe0\xa0\x69\x1f\xc3\x4b\xb6\ +\xec\xd6\xf1\x01\xcf\x6d\xea\xbb\x42\x42\x96\xeb\x0e\x1c\x1d\x81\ +\xca\xcc\x69\x59\xe6\xf7\x5e\x3a\x1c\xc8\xdc\xe6\xc4\x45\x4c\xf8\ +\x7e\x17\x30\x8f\x86\x8a\x5c\xa8\xb0\x30\xee\x7a\x58\xd5\x83\x3d\ +\x1d\xc5\x1a\xa9\xa1\x68\x4b\x18\x21\x3e\xc2\xf2\x94\x76\x99\x87\ +\x7d\x49\x26\x55\xa5\xcf\x29\x82\x74\x0b\x12\xc4\x87\x34\x4b\xbc\ +\x89\xe7\x72\xc4\x24\xf2\xc4\x84\x11\x17\x88\x98\x8a\xf7\x35\xc0\ +\xb3\xa9\x39\xae\x5b\x5d\xb5\x16\x31\xe7\x7c\xe3\x87\x44\xed\x6f\ +\x5a\x84\x16\x61\xab\xd5\x36\x5c\xa9\xea\x50\x2c\xe0\x7a\x3a\x58\ +\x5b\x33\x16\x3a\x8f\x55\xde\xb0\x78\xf5\x39\x63\xd5\xe7\x66\x4f\ +\x47\xd8\x6f\x2e\xbc\x14\x7a\x6d\xf9\x68\x98\x5f\xac\xc3\x58\xef\ +\xbb\x50\xdc\x32\xbf\x69\x0d\xc8\x50\xa8\x70\x25\x12\xfe\x23\x76\ +\x04\x2e\xe8\x60\xd8\xcf\x10\xea\xfb\xec\x11\xd7\x28\xc4\x5c\x28\ +\x8d\x05\xc1\x8f\x98\xbb\x3c\x07\xfc\x9d\x34\x3c\x2a\x98\x55\xf5\ +\xaf\x11\x2a\xd6\x7a\xbf\xca\x0d\x3a\x65\xbe\x53\x97\x2d\x63\x1d\ +\xed\xcc\xf9\x78\x67\x77\xb2\x70\x7d\x2a\xbb\x27\x61\xda\x3a\x8b\ +\x85\x3e\x0c\x77\x50\x64\xe1\xf6\x09\xb6\xe1\x38\x90\x2c\xd6\xc5\ +\x13\xfc\x4c\xc7\xea\x0a\xbf\xed\xde\x51\xf1\x4a\x39\x9b\x24\xde\ +\xea\x24\x2b\x9f\x95\x7e\x46\x50\x2f\xfe\x80\xd5\xf8\x94\x62\xb5\ +\xc4\x13\xaa\xed\x93\x0c\xec\xec\x34\x59\x96\x88\x47\xde\x50\x4b\ +\x34\xb9\xd9\xf7\xc4\x15\x89\x5e\x12\xbe\x64\x19\xb3\xcb\x2b\xbc\ +\x4d\x78\x48\x36\xc9\x37\x15\x9b\xe6\xf5\x42\xd9\xa8\x32\x8c\xc3\ +\x32\xec\x16\x45\x43\x21\xc6\x71\xea\x68\x95\xc7\xcb\xe0\xf7\x8f\ +\xbf\xb6\x55\x46\x14\x05\xff\xd1\xf9\x7d\x57\x07\x18\x81\x70\xa1\ +\x77\xa0\x76\x5b\x8b\x98\x23\xf4\x51\x60\xd6\x77\x58\xde\x25\x1b\ +\x70\x75\xf3\xdd\x84\xbf\x1e\x36\x29\x2c\xcf\x96\x71\x26\x6c\xa2\ +\x66\xd7\xe9\xa9\xdb\x5c\x9d\xbe\x7b\x30\xf8\x75\x8d\x38\xda\x24\ +\xa6\xd1\xf4\x53\x09\x25\xc8\x6f\x66\x90\xde\x01\xf8\xba\xd3\xa4\ +\x4c\xd5\x5d\x35\xe6\xe9\xb2\x99\xc5\xb4\x9e\x46\x53\xa4\xf4\x66\ +\x39\x9b\x36\x30\x54\x77\xab\x0e\x9e\xb3\xc5\xd2\x22\x9c\x86\x0b\ +\x95\xce\xed\x7f\x1a\xa6\xf5\x88\xbb\xca\xf5\x6e\xbb\x01\xd7\xa8\ +\x9b\xdb\x5d\x09\xbb\x6e\x33\x47\xaf\x92\xba\xe5\x0b\xf3\xf3\xc1\ +\xdc\xf4\xce\xe5\xd7\xa5\xd5\x2d\xaa\x3e\xf5\xed\xc9\xa1\x02\xda\ +\xdc\x9a\xa8\x0f\x83\x06\x8b\x5d\x59\xf6\x69\x7f\x80\x7b\x07\xa0\ +\x47\x16\x37\x54\x40\x4e\xe5\x29\x78\x44\x19\xb0\x86\x76\x39\x98\ +\x13\x87\x10\x9f\xf2\x3c\x3c\x9e\x2a\xba\x46\x5b\x00\xe2\x5f\x16\ +\x81\xb0\x4c\x25\xf2\xf9\x84\x79\xae\x27\xb8\x8f\x88\x05\xa1\x58\ +\x20\xe9\x49\xa8\x91\xa9\x8b\x89\xe7\x21\x6c\x31\x09\x1b\x23\xe9\ +\x63\x7f\x22\x5d\x09\xc1\x4c\x52\x8b\x40\x1c\xc7\xb0\xa5\x22\x13\ +\x02\x61\xdc\x83\x2c\x44\xad\x6f\x97\xdb\xa6\x35\x91\x68\x20\xfb\ +\x46\x3a\x83\x29\x96\x3a\x77\x20\x8e\x3d\x84\xe5\x2e\x57\xfd\xa2\ +\xb4\x0b\xf8\x00\xb8\xf1\x0d\x58\x8f\x91\xf9\x9c\x6d\x1d\x06\x71\ +\x07\xc7\x7a\xf7\x28\xab\x4a\xef\xfd\xcf\x6e\x88\x01\x80\x4d\xc6\ +\x26\x98\x51\x3a\x21\xdc\x3c\xf2\x82\x0c\x62\x51\x0f\x68\x3e\x24\ +\xf7\x89\x07\x56\x32\x89\xfb\x7b\xed\x20\xe4\xe0\xe3\xe7\x3f\x65\ +\x87\xd9\x74\x75\x77\x33\x33\x21\xe1\xee\xe6\xbf\x41\x63\xea\xe4\ +\ \x00\x00\x06\xdd\ \x00\ \x00\x22\x8f\x78\x9c\xed\x59\xdb\x6e\xe3\x46\x12\x7d\xf7\x57\xf4\ @@ -10327,6 +10578,10 @@ qt_resource_name = "\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x70\x00\x6c\x00\x69\x00\x74\x00\x4d\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\ \x00\x67\ \x00\x0d\ +\x07\x4a\x92\xc7\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0d\ \x01\xb7\x92\xa7\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x69\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ @@ -10373,6 +10628,11 @@ qt_resource_name = "\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x46\x00\x6c\x00\x6f\x00\x6f\x00\x72\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\ \x00\x76\x00\x67\ +\x00\x12\ +\x08\x61\x2a\xa7\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\ +\x00\x67\ \x00\x14\ \x02\xc8\x0e\x47\ \x00\x41\ @@ -10382,8 +10642,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2d\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x15\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x15\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x04\ \x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x01\x60\x78\ \x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x20\ @@ -10402,29 +10662,31 @@ 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\x2c\x00\x01\x00\x00\x00\x01\x00\x02\x43\x52\ -\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x02\x05\x83\ -\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x11\ -\x00\x00\x05\xcc\x00\x01\x00\x00\x00\x01\x00\x02\x6e\xe4\ -\x00\x00\x04\xfe\x00\x01\x00\x00\x00\x01\x00\x02\x3c\x80\ -\x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc5\x80\ -\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\x07\ +\x00\x00\x05\x4c\x00\x01\x00\x00\x00\x01\x00\x02\x4b\x1c\ +\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x02\x0d\x4d\ +\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x13\ +\x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x42\ +\x00\x00\x05\x1e\x00\x01\x00\x00\x00\x01\x00\x02\x44\x4a\ +\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\x04\x78\x00\x00\x00\x00\x00\x01\x00\x02\x1f\x5d\ +\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x02\x27\x27\ +\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\ \x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x93\x78\ -\x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xce\xd8\ +\x00\x00\x05\xec\x00\x01\x00\x00\x00\x01\x00\x02\x76\xad\ +\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\xa8\x00\x01\x00\x00\x00\x01\x00\x02\x2e\xcb\ -\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x02\ -\x00\x00\x04\xd6\x00\x01\x00\x00\x00\x01\x00\x02\x34\x1b\ -\x00\x00\x05\x56\x00\x00\x00\x00\x00\x01\x00\x02\x4a\x2d\ -\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x1e\ -\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x66\x6a\ -\x00\x00\x05\x80\x00\x01\x00\x00\x00\x01\x00\x02\x5c\x30\ -\x00\x00\x04\x58\x00\x01\x00\x00\x00\x01\x00\x02\x19\x45\ +\x00\x00\x04\xc8\x00\x01\x00\x00\x00\x01\x00\x02\x36\x95\ +\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x04\ +\x00\x00\x04\xf6\x00\x01\x00\x00\x00\x01\x00\x02\x3b\xe5\ +\x00\x00\x05\x76\x00\x00\x00\x00\x00\x01\x00\x02\x51\xf6\ +\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x20\ +\x00\x00\x05\xc0\x00\x01\x00\x00\x00\x01\x00\x02\x6e\x33\ +\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x63\xf9\ +\x00\x00\x04\x78\x00\x01\x00\x00\x00\x01\x00\x02\x21\x0f\ \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\x06\ +\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\x01\xf2\x00\x01\x00\x00\x00\x01\x00\x01\x76\xac\ " diff --git a/src/Mod/Arch/CMakeLists.txt b/src/Mod/Arch/CMakeLists.txt index a7522a413..fcfd728bb 100644 --- a/src/Mod/Arch/CMakeLists.txt +++ b/src/Mod/Arch/CMakeLists.txt @@ -20,6 +20,7 @@ SET(Arch_SRCS ArchWindow.py ArchAxis.py ArchVRM.py + ArchRoof.py ) SOURCE_GROUP("" FILES ${Arch_SRCS}) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 066ee12b8..52bf67165 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -61,7 +61,7 @@ class ArchWorkbench(Workbench): self.archtools = ["Arch_Wall","Arch_Structure","Arch_Cell", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Axis", - "Arch_SectionPlane","Arch_Add","Arch_Remove"] + "Arch_SectionPlane","Arch_Roof","Arch_Add","Arch_Remove"] self.drafttools = ["Draft_Line","Draft_Wire","Draft_Rectangle", "Draft_Polygon","Draft_Arc", "Draft_Circle","Draft_Dimension", diff --git a/src/Mod/Arch/Makefile.am b/src/Mod/Arch/Makefile.am index 61917f8f7..e30ec2a6a 100644 --- a/src/Mod/Arch/Makefile.am +++ b/src/Mod/Arch/Makefile.am @@ -27,7 +27,8 @@ data_DATA = \ ArchWindow.py \ ArchCommands.py \ ArchAxis.py \ - ArchVRM.py + ArchVRM.py \ + ArchRoof.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/WindowsInstaller/ModArch.wxi b/src/WindowsInstaller/ModArch.wxi index 094c7c617..f8bdd05c8 100644 --- a/src/WindowsInstaller/ModArch.wxi +++ b/src/WindowsInstaller/ModArch.wxi @@ -45,6 +45,7 @@ + From 1b46fc55b7f3d8c7adb1d98738170b21243ae236 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 19:07:27 +0200 Subject: [PATCH 165/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.cpp | 14 ++++++++++++-- src/Mod/Mesh/App/Core/Segmentation.h | 8 +++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 450a7a067..2e86fdb17 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -35,6 +35,10 @@ void MeshSurfaceSegment::Initialize(unsigned long) { } +void MeshSurfaceSegment::AddFacet(const MeshFacet&) +{ +} + void MeshSurfaceSegment::AddSegment(const std::vector& segm) { if (segm.size() >= minFacets) { @@ -76,10 +80,15 @@ bool MeshDistancePlanarSegment::TestFacet (const MeshFacet& face) const return false; } - fitter->AddPoint(triangle.GetGravityPoint()); return true; } +void MeshDistancePlanarSegment::AddFacet(const MeshFacet& face) +{ + MeshGeomFacet triangle = kernel.GetFacet(face); + fitter->AddPoint(triangle.GetGravityPoint()); +} + // -------------------------------------------------------- bool MeshCurvaturePlanarSegment::TestFacet (const MeshFacet &rclFacet) const @@ -153,7 +162,7 @@ bool MeshCurvatureFreeformSegment::TestFacet (const MeshFacet &rclFacet) const // -------------------------------------------------------- -MeshSurfaceVisitor::MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices) +MeshSurfaceVisitor::MeshSurfaceVisitor (MeshSurfaceSegment& segm, std::vector &indices) : indices(indices), segm(segm) { } @@ -172,6 +181,7 @@ bool MeshSurfaceVisitor::Visit (const MeshFacet & face, const MeshFacet &, unsigned long ulFInd, unsigned long) { indices.push_back(ulFInd); + segm.AddFacet(face); return true; } diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 021961001..561385c1c 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -42,6 +42,7 @@ public: virtual ~MeshSurfaceSegment() {} virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; virtual void Initialize(unsigned long); + virtual void AddFacet(const MeshFacet& rclFacet); void AddSegment(const std::vector&); const std::vector& GetSegments() const { return segments; } @@ -68,8 +69,9 @@ class MeshExport MeshDistancePlanarSegment : public MeshDistanceSurfaceSegment public: MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); virtual ~MeshDistancePlanarSegment(); - bool TestFacet (const MeshFacet &rclFacet) const; + bool TestFacet (const MeshFacet& rclFacet) const; void Initialize(unsigned long); + void AddFacet(const MeshFacet& rclFacet); protected: Base::Vector3f basepoint; @@ -134,7 +136,7 @@ private: class MeshExport MeshSurfaceVisitor : public MeshFacetVisitor { public: - MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices); + MeshSurfaceVisitor (MeshSurfaceSegment& segm, std::vector &indices); virtual ~MeshSurfaceVisitor (); bool AllowVisit (const MeshFacet& face, const MeshFacet&, unsigned long, unsigned long, unsigned short neighbourIndex); @@ -143,7 +145,7 @@ public: protected: std::vector &indices; - const MeshSurfaceSegment& segm; + MeshSurfaceSegment& segm; }; class MeshExport MeshSegmentAlgorithm From 801196bb14a542c1129cea1b4f2c6799801cdffd Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 15:59:53 -0300 Subject: [PATCH 166/517] Cleaning in the Arch module --- src/Mod/Arch/ArchSectionPlane.py | 9 ++++++--- src/Mod/Arch/ArchWindow.py | 18 ++++++++++-------- src/Mod/Arch/InitGui.py | 16 +++++++++++----- src/Mod/Arch/importIFC.py | 4 ++-- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index d4ae54c21..886cbb348 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -34,7 +34,7 @@ class _CommandSectionPlane: return {'Pixmap' : 'Arch_SectionPlane', 'Accel': "S, P", 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SectionPlane","Section Plane"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SectionPlane","Adds a section plane object to the document")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SectionPlane","Creates a section plane object, including the selected objects")} def Activated(self): sel = FreeCADGui.Selection.getSelection() @@ -47,6 +47,8 @@ class _CommandSectionPlane: for o in sel: if o.isDerivedFrom("Part::Feature"): g.append(o) + elif o.isDerivedFrom("App::DocumentObjectGroup"): + g.append(o) obj.Objects = g page = FreeCAD.ActiveDocument.addObject("Drawing::FeaturePage","Page") template = Draft.getParam("template") @@ -179,6 +181,7 @@ class _ArchDrawingView: if hasattr(obj,"Source"): if obj.Source: if obj.Source.Objects: + objs = Draft.getGroupContents(obj.Sourc.Objects) svg = '' # generating SVG @@ -188,7 +191,7 @@ class _ArchDrawingView: import ArchVRM render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) - render.addObjects(obj.Source.Objects) + render.addObjects(objs) render.cut(obj.Source.Shape) svg += render.getViewSVG(linewidth=linewidth) svg += render.getSectionSVG(linewidth=linewidth*2) @@ -197,7 +200,7 @@ class _ArchDrawingView: else: # render using the Drawing module shapes = [] - for o in obj.Source.Objects: + for o in objs: if o.isDerivedFrom("Part::Feature"): shapes.append(o.Shape) if shapes: diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 382d9e3f9..2cdf513c9 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -78,17 +78,19 @@ class _CommandWindow: return {'Pixmap' : 'Arch_Window', 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Window"), 'Accel': "W, N", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Creates a window object from scratch or from a selected object (wire, rectangle or sketch)")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Creates a window object from a selected object (wire, rectangle or sketch)")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Window") - if sel: - for obj in sel: - makeWindow(obj) - else: - rect = Draft.makeRectangle(1,1) - makeWindow(rect) + FreeCAD.ActiveDocument.openTransaction("Create Window") + for obj in sel: + makeWindow(obj) FreeCAD.ActiveDocument.commitTransaction() class _Window(ArchComponent.Component): diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 52bf67165..1de87ed47 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -58,10 +58,10 @@ class ArchWorkbench(Workbench): def Initialize(self): import DraftTools,DraftGui,Arch_rc,Arch - self.archtools = ["Arch_Wall","Arch_Structure","Arch_Cell", + self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", - "Arch_Window","Arch_Axis", - "Arch_SectionPlane","Arch_Roof","Arch_Add","Arch_Remove"] + "Arch_Window","Arch_Roof","Arch_Axis", + "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.drafttools = ["Draft_Line","Draft_Wire","Draft_Rectangle", "Draft_Polygon","Draft_Arc", "Draft_Circle","Draft_Dimension", @@ -100,6 +100,12 @@ class ArchWorkbench(Workbench): FreeCADGui.addWorkbench(ArchWorkbench) FreeCAD.addImportType("Industry Foundation Classes (*.ifc)","importIFC") FreeCAD.addExportType("Wavefront OBJ - Arch module (*.obj)","importOBJ") -FreeCAD.addImportType("Collada (*.dae)","importDAE") -FreeCAD.addExportType("Collada (*.dae)","importDAE") +# check for pycollada +try: + import collada +except: + FreeCAD.Console.PrintError("pycollada not found, no collada support.\n") +else: + FreeCAD.addImportType("Collada (*.dae)","importDAE") + FreeCAD.addExportType("Collada (*.dae)","importDAE") diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index f4a8f8392..7a0cf8ae0 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -108,7 +108,7 @@ def getIfcOpenShell(): return True def read(filename): - "Parses an IFC file with IfcOpenShell" + "Parses an IFC file" # parsing the IFC file t1 = time.time() @@ -186,7 +186,7 @@ def read(filename): IfcImport.CleanUp() else: - # use the internal python parser + # use only the internal python parser # getting walls for w in ifc.getEnt("IfcWallStandardCase"): From 1c1dbf0b2e6fb8f967e404b48f173b2ca782789b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 16:43:48 -0300 Subject: [PATCH 167/517] Fixed 0000708 - Draft DXF import --- src/Mod/Draft/importDXF.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index a03ec28aa..97e01db7f 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -1232,7 +1232,9 @@ def getWire(wire,nospline=False): points = [] for edge in edges: v1 = edge.Vertexes[0].Point - if (isinstance(edge.Curve,Part.Circle)): + if len(edge.Vertexes) < 2: + points.append((v1.x,v1.y,v1.z,None,None,0.0)) + elif (isinstance(edge.Curve,Part.Circle)): mp = fcgeo.findMidpoint(edge) v2 = edge.Vertexes[-1].Point c = edge.Curve.Center @@ -1251,14 +1253,12 @@ def getWire(wire,nospline=False): bul = -bul points.append((v1.x,v1.y,v1.z,None,None,bul)) elif (isinstance(edge.Curve,Part.BSplineCurve)) and (not nospline): - bul = 0.0 spline = getSplineSegs(edge) spline.pop() for p in spline: - points.append((p.x,p.y,p.z,None,None,bul)) + points.append((p.x,p.y,p.z,None,None,0.0)) else: - bul = 0.0 - points.append((v1.x,v1.y,v1.z,None,None,bul)) + points.append((v1.x,v1.y,v1.z,None,None,0.0)) if not fcgeo.isReallyClosed(wire): v = edges[-1].Vertexes[-1].Point points.append(fcvec.tup(v)) From 82265b4ea9929865f1ebb8a284230d21e2c94aca Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 17:43:57 -0300 Subject: [PATCH 168/517] Refining of Arch Roof tool --- src/Mod/Arch/ArchComponent.py | 2 -- src/Mod/Arch/ArchRoof.py | 21 ++++++++++++++++++--- src/Mod/Arch/ArchStructure.py | 2 ++ src/Mod/Arch/ArchWall.py | 2 ++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index b6065fa04..c9fa5a347 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -260,8 +260,6 @@ class Component: "Other shapes that are appended to this wall") obj.addProperty("App::PropertyLinkList","Subtractions","Base", "Other shapes that are subtracted from this wall") - obj.addProperty("App::PropertyVector","Normal","Base", - "The normal extrusion direction of this wall (keep (0,0,0) for automatic normal)") obj.Proxy = self self.Type = "Component" self.Subvolume = None diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 62850f243..37d06b58e 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -61,13 +61,30 @@ class _CommandRoof: sel = FreeCADGui.Selection.getSelectionEx() if sel: sel = sel[0] + obj = sel.Object if sel.HasSubObjects: if "Face" in sel.SubElementNames[0]: - obj = sel.Object idx = int(sel.SubElementNames[0][4:]) FreeCAD.ActiveDocument.openTransaction("Create Roof") makeRoof(obj,idx) FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + elif obj.isDerivedFrom("Part::Feature"): + if len(obj.Shape.Faces) == 1: + FreeCAD.ActiveDocument.openTransaction("Create Roof") + makeRoof(obj,1) + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + elif obj.isDerivedFrom("Part::Feature"): + if len(obj.Shape.Faces) == 1: + FreeCAD.ActiveDocument.openTransaction("Create Roof") + makeRoof(obj,1) + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + else: + FreeCAD.Console.PrintMessage("Unable to create a roof") + else: + FreeCAD.Console.PrintMessage("No object selected") class _Roof(ArchComponent.Component): "The Roof object" @@ -77,8 +94,6 @@ class _Roof(ArchComponent.Component): "The angle of this roof") obj.addProperty("App::PropertyInteger","Face","Base", "The face number of the base object used to build this roof") - obj.addProperty("App::PropertyLink","Base","Base", - "The base object this roof is built on") self.Type = "Structure" def execute(self,obj): diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 63d7b668c..cd87115eb 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -86,6 +86,8 @@ class _Structure(ArchComponent.Component): "The height or extrusion depth of this element. Keep 0 for automatic") obj.addProperty("App::PropertyLinkList","Axes","Base", "Axes systems this structure is built on") + obj.addProperty("App::PropertyVector","Normal","Base", + "The normal extrusion direction of this object (keep (0,0,0) for automatic normal)") self.Type = "Structure" def execute(self,obj): diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 108edabfc..36c33e7a8 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -251,6 +251,8 @@ class _Wall(ArchComponent.Component): "The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid") obj.addProperty("App::PropertyEnumeration","Align","Base", "The alignment of this wall on its base object, if applicable") + obj.addProperty("App::PropertyVector","Normal","Base", + "The normal extrusion direction of this object (keep (0,0,0) for automatic normal)") obj.Align = ['Left','Right','Center'] self.Type = "Wall" obj.Width = 0.1 From 1b70aef0f2dda3db0639b706c48a2469688dc93c Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 19:01:01 -0300 Subject: [PATCH 169/517] Bugfixes in Arch --- src/Mod/Arch/ArchSectionPlane.py | 2 +- src/Mod/Arch/ArchVRM.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 886cbb348..d1c1ada50 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -181,7 +181,7 @@ class _ArchDrawingView: if hasattr(obj,"Source"): if obj.Source: if obj.Source.Objects: - objs = Draft.getGroupContents(obj.Sourc.Objects) + objs = Draft.getGroupContents(obj.Source.Objects) svg = '' # generating SVG diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index c89776e62..f7e5988ab 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -177,7 +177,8 @@ class Renderer: v = self.wp.getLocalCoords(v) verts.append(v) verts.append(verts[0]) - wires.append(Part.makePolygon(verts)) + if len(verts) > 2: + wires.append(Part.makePolygon(verts)) try: sh = ArchCommands.makeFace(wires) except: From 1de458a161a0cea2b28fb65ef9662764f448c2f8 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 19 May 2012 18:07:09 -0300 Subject: [PATCH 170/517] Allowed to drag&drop items on python groups too in tree --- src/Gui/Tree.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index 03ca7cb2f..2c5f0ea15 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -440,20 +440,39 @@ void TreeWidget::dropEvent(QDropEvent *event) ::getGroupOfObject(obj); if (par) { // allow an object to be in one group only - QString cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").removeObject(" + QString cmd; + if (par->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + // if this is a python group, call the method of its Proxy + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.removeObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromAscii(doc->getName())) .arg(QString::fromAscii(par->getNameInDocument())) .arg(QString::fromAscii(obj->getNameInDocument())); + } else { + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").removeObject(" + "App.getDocument(\"%1\").getObject(\"%3\"))") + .arg(QString::fromAscii(doc->getName())) + .arg(QString::fromAscii(par->getNameInDocument())) + .arg(QString::fromAscii(obj->getNameInDocument())); + } Gui::Application::Instance->runPythonCode(cmd.toUtf8()); } // build Python command for execution - QString cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").addObject(" + QString cmd; + if (grp->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.addObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromAscii(doc->getName())) .arg(QString::fromAscii(grp->getNameInDocument())) .arg(QString::fromAscii(obj->getNameInDocument())); + } else { + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").addObject(" + "App.getDocument(\"%1\").getObject(\"%3\"))") + .arg(QString::fromAscii(doc->getName())) + .arg(QString::fromAscii(grp->getNameInDocument())) + .arg(QString::fromAscii(obj->getNameInDocument())); + } Gui::Application::Instance->runPythonCode(cmd.toUtf8()); } gui->commitCommand(); From 30cdaf89430e065e75fd8057f23fac4892b31419 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 19 May 2012 18:18:02 -0300 Subject: [PATCH 171/517] Made Arch groups able to receive drops from the tree --- src/Mod/Arch/ArchBuilding.py | 19 +++++++++++++++++-- src/Mod/Arch/ArchFloor.py | 16 +++++++++++++++- src/Mod/Arch/ArchSite.py | 19 +++++++++++++++++-- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchBuilding.py b/src/Mod/Arch/ArchBuilding.py index 6a2cb2c33..f8ed4e8ca 100644 --- a/src/Mod/Arch/ArchBuilding.py +++ b/src/Mod/Arch/ArchBuilding.py @@ -68,12 +68,27 @@ class _Building: def __init__(self,obj): self.Type = "Building" obj.Proxy = self - + self.Object = obj + def execute(self,obj): - pass + self.Object = obj def onChanged(self,obj,prop): pass + + def addObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if not child in g: + g.append(child) + self.Object.Group = g + + def removeObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if child in g: + g.remove(child) + self.Object.Group = g class _ViewProviderBuilding: "A View Provider for the Building object" diff --git a/src/Mod/Arch/ArchFloor.py b/src/Mod/Arch/ArchFloor.py index f5b9d435e..606395961 100644 --- a/src/Mod/Arch/ArchFloor.py +++ b/src/Mod/Arch/ArchFloor.py @@ -71,13 +71,27 @@ class _Floor: "The height of this floor") self.Type = "Floor" obj.Proxy = self + self.Object = obj def execute(self,obj): - pass + self.Object = obj def onChanged(self,obj,prop): pass + def addObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if not child in g: + g.append(child) + self.Object.Group = g + + def removeObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if child in g: + g.remove(child) + self.Object.Group = g class _ViewProviderFloor: "A View Provider for the Cell object" diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index 5da538e5a..300fd09ef 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -68,13 +68,28 @@ class _Site: def __init__(self,obj): self.Type = "Site" obj.Proxy = self + self.Object = obj def execute(self,obj): - pass - + self.Object = obj + def onChanged(self,obj,prop): pass + def addObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if not child in g: + g.append(child) + self.Object.Group = g + + def removeObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if child in g: + g.remove(child) + self.Object.Group = g + class _ViewProviderSite: "A View Provider for the Site object" def __init__(self,vobj): From 6fd2aca5607d2f0deb723f7852df4938c02a3f74 Mon Sep 17 00:00:00 2001 From: msocorcim Date: Sun, 20 May 2012 23:00:23 -0400 Subject: [PATCH 172/517] Add new Mod/Mesh files to Makefile.am --- src/Mod/Mesh/Gui/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Mod/Mesh/Gui/Makefile.am b/src/Mod/Mesh/Gui/Makefile.am index 46158d1e1..dd4405cd7 100644 --- a/src/Mod/Mesh/Gui/Makefile.am +++ b/src/Mod/Mesh/Gui/Makefile.am @@ -35,6 +35,7 @@ libMeshGui_la_SOURCES=\ PropertyEditorMesh.cpp \ RemoveComponents.cpp \ RemoveComponents.h \ + Segmentation.cpp \ SoFCIndexedFaceSet.cpp \ SoFCMeshObject.cpp \ ViewProvider.cpp \ @@ -48,6 +49,7 @@ libMeshGui_la_SOURCES=\ include_HEADERS=\ PropertyEditorMesh.h \ + Segmentation.h \ SoFCIndexedFaceSet.h \ SoFCMeshObject.h \ ViewProvider.h \ From 82a985a77fbafbed2e20ebe99bc008ad2d2d5649 Mon Sep 17 00:00:00 2001 From: msocorcim Date: Sun, 20 May 2012 23:01:07 -0400 Subject: [PATCH 173/517] Replace Gui text View->Display mode with View->Document window --- src/Gui/CommandView.cpp | 2 +- src/Gui/DlgDisplayProperties.ui | 2 +- src/Gui/Language/FreeCAD.ts | 2 +- src/Gui/Language/FreeCAD_af.ts | 4 ++-- src/Gui/Language/FreeCAD_de.ts | 4 ++-- src/Gui/Language/FreeCAD_es.ts | 4 ++-- src/Gui/Language/FreeCAD_fi.ts | 4 ++-- src/Gui/Language/FreeCAD_fr.ts | 4 ++-- src/Gui/Language/FreeCAD_hr.ts | 4 ++-- src/Gui/Language/FreeCAD_hu.ts | 4 ++-- src/Gui/Language/FreeCAD_it.ts | 4 ++-- src/Gui/Language/FreeCAD_ja.ts | 4 ++-- src/Gui/Language/FreeCAD_nl.ts | 4 ++-- src/Gui/Language/FreeCAD_no.ts | 4 ++-- src/Gui/Language/FreeCAD_pl.ts | 4 ++-- src/Gui/Language/FreeCAD_pt.ts | 4 ++-- src/Gui/Language/FreeCAD_ru.ts | 4 ++-- src/Gui/Language/FreeCAD_se.ts | 4 ++-- src/Gui/Language/FreeCAD_uk.ts | 4 ++-- src/Gui/Language/FreeCAD_zh.ts | 4 ++-- src/Gui/TaskView/TaskAppearance.ui | 2 +- 21 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 1de74b6c3..712131d68 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -1172,7 +1172,7 @@ StdViewDockUndockFullscreen::StdViewDockUndockFullscreen() : Command("Std_ViewDockUndockFullscreen") { sGroup = QT_TR_NOOP("Standard-View"); - sMenuText = QT_TR_NOOP("Display mode"); + sMenuText = QT_TR_NOOP("Document window"); sToolTipText= QT_TR_NOOP("Display the active view either in fullscreen, in undocked or docked mode"); sWhatsThis = "Std_ViewDockUndockFullscreen"; sStatusTip = QT_TR_NOOP("Display the active view either in fullscreen, in undocked or docked mode"); diff --git a/src/Gui/DlgDisplayProperties.ui b/src/Gui/DlgDisplayProperties.ui index 5143bf2a8..58f4b6235 100644 --- a/src/Gui/DlgDisplayProperties.ui +++ b/src/Gui/DlgDisplayProperties.ui @@ -34,7 +34,7 @@ - Display mode: + Document window: diff --git a/src/Gui/Language/FreeCAD.ts b/src/Gui/Language/FreeCAD.ts index 3b452a860..024b5a7f1 100644 --- a/src/Gui/Language/FreeCAD.ts +++ b/src/Gui/Language/FreeCAD.ts @@ -5302,7 +5302,7 @@ You either have to finish or cancel the editing in the task panel.
- Display mode + Document window diff --git a/src/Gui/Language/FreeCAD_af.ts b/src/Gui/Language/FreeCAD_af.ts index 052ea4d8c..4ba0e26ca 100644 --- a/src/Gui/Language/FreeCAD_af.ts +++ b/src/Gui/Language/FreeCAD_af.ts @@ -5317,8 +5317,8 @@ You either have to finish or cancel the editing in the task panel. Standaardaansig - Display mode - Vertoningsmodus + Document window + Dokument venster Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_de.ts b/src/Gui/Language/FreeCAD_de.ts index be807a1b7..79e5131c2 100644 --- a/src/Gui/Language/FreeCAD_de.ts +++ b/src/Gui/Language/FreeCAD_de.ts @@ -5325,8 +5325,8 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Standardansicht - Display mode - Anzeige-Modus + Document window + Dokumentfenster Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_es.ts b/src/Gui/Language/FreeCAD_es.ts index 173822aa0..089b96e95 100644 --- a/src/Gui/Language/FreeCAD_es.ts +++ b/src/Gui/Language/FreeCAD_es.ts @@ -5323,8 +5323,8 @@ Tienes que finzalizar o cancelar la edición en el panel de tareas.Vista estándar - Display mode - Modo de visualización + Document window + Ventana de documento Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_fi.ts b/src/Gui/Language/FreeCAD_fi.ts index dab907d81..ec9cde9a0 100644 --- a/src/Gui/Language/FreeCAD_fi.ts +++ b/src/Gui/Language/FreeCAD_fi.ts @@ -5314,8 +5314,8 @@ You either have to finish or cancel the editing in the task panel. Standardi-Näkymä - Display mode - Näyttötila + Document window + Asiakirjan ikkuna Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_fr.ts b/src/Gui/Language/FreeCAD_fr.ts index c65a10cdf..f665da6bd 100644 --- a/src/Gui/Language/FreeCAD_fr.ts +++ b/src/Gui/Language/FreeCAD_fr.ts @@ -5319,8 +5319,8 @@ You either have to finish or cancel the editing in the task panel. Vue standard - Display mode - Mode d'affichage + Document window + Fenêtre de document Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_hr.ts b/src/Gui/Language/FreeCAD_hr.ts index 790f20982..11e5c702b 100644 --- a/src/Gui/Language/FreeCAD_hr.ts +++ b/src/Gui/Language/FreeCAD_hr.ts @@ -5311,8 +5311,8 @@ You either have to finish or cancel the editing in the task panel. Standardni pogled - Display mode - Način prikaza + Document window + Dokument prozor Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_hu.ts b/src/Gui/Language/FreeCAD_hu.ts index cf6433c3a..74d0db3b5 100644 --- a/src/Gui/Language/FreeCAD_hu.ts +++ b/src/Gui/Language/FreeCAD_hu.ts @@ -5318,8 +5318,8 @@ You either have to finish or cancel the editing in the task panel. Standard-nézet - Display mode - Megjelenítési mód + Document window + Dokumentum ablak Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_it.ts b/src/Gui/Language/FreeCAD_it.ts index 64b5bd7c3..cb266b1d0 100644 --- a/src/Gui/Language/FreeCAD_it.ts +++ b/src/Gui/Language/FreeCAD_it.ts @@ -5325,8 +5325,8 @@ You either have to finish or cancel the editing in the task panel. Vista standard - Display mode - Modalità di visualizzazione + Document window + Finestra del documento Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_ja.ts b/src/Gui/Language/FreeCAD_ja.ts index 5773577fd..0406284a6 100644 --- a/src/Gui/Language/FreeCAD_ja.ts +++ b/src/Gui/Language/FreeCAD_ja.ts @@ -5319,8 +5319,8 @@ You either have to finish or cancel the editing in the task panel. 標準ビュー - Display mode - 表示モード + Document window + ドキュメントウィンドウ Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_nl.ts b/src/Gui/Language/FreeCAD_nl.ts index 0a57b99f5..ea7ae833c 100644 --- a/src/Gui/Language/FreeCAD_nl.ts +++ b/src/Gui/Language/FreeCAD_nl.ts @@ -5314,8 +5314,8 @@ You either have to finish or cancel the editing in the task panel. Standaard-aanzicht - Display mode - Weergavemodus + Document window + Documentvenster Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_no.ts b/src/Gui/Language/FreeCAD_no.ts index 948c209da..56087e8fa 100644 --- a/src/Gui/Language/FreeCAD_no.ts +++ b/src/Gui/Language/FreeCAD_no.ts @@ -5315,8 +5315,8 @@ You either have to finish or cancel the editing in the task panel. Standardvisning - Display mode - Visningsmodus + Document window + Dokument-vinduet Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_pl.ts b/src/Gui/Language/FreeCAD_pl.ts index 064d5e00e..0a428556b 100644 --- a/src/Gui/Language/FreeCAD_pl.ts +++ b/src/Gui/Language/FreeCAD_pl.ts @@ -5305,8 +5305,8 @@ You either have to finish or cancel the editing in the task panel. Normalny widok - Display mode - Tryb wyświetlania + Document window + Okno dokumentu Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_pt.ts b/src/Gui/Language/FreeCAD_pt.ts index 2ed9d6bf6..fd0cde922 100644 --- a/src/Gui/Language/FreeCAD_pt.ts +++ b/src/Gui/Language/FreeCAD_pt.ts @@ -5307,8 +5307,8 @@ You either have to finish or cancel the editing in the task panel. Vista padrão - Display mode - Modo de exibição + Document window + Janela do documento Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_ru.ts b/src/Gui/Language/FreeCAD_ru.ts index 40667e37a..b1e39e830 100644 --- a/src/Gui/Language/FreeCAD_ru.ts +++ b/src/Gui/Language/FreeCAD_ru.ts @@ -5310,8 +5310,8 @@ You either have to finish or cancel the editing in the task panel. Стандартный вид - Display mode - Режим отображения + Document window + окно документа Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_se.ts b/src/Gui/Language/FreeCAD_se.ts index 1f51d8242..9b777ffac 100644 --- a/src/Gui/Language/FreeCAD_se.ts +++ b/src/Gui/Language/FreeCAD_se.ts @@ -5324,8 +5324,8 @@ You either have to finish or cancel the editing in the task panel. Standardvy - Display mode - Visningsläge + Document window + Dokumentfönstret Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_uk.ts b/src/Gui/Language/FreeCAD_uk.ts index b9dbe9099..5e0b27cb6 100644 --- a/src/Gui/Language/FreeCAD_uk.ts +++ b/src/Gui/Language/FreeCAD_uk.ts @@ -5325,8 +5325,8 @@ You either have to finish or cancel the editing in the task panel. Стандартні вигляди - Display mode - Режим показу + Document window + вікно документа Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_zh.ts b/src/Gui/Language/FreeCAD_zh.ts index 18e102a1e..a63f7f181 100644 --- a/src/Gui/Language/FreeCAD_zh.ts +++ b/src/Gui/Language/FreeCAD_zh.ts @@ -5313,8 +5313,8 @@ You either have to finish or cancel the editing in the task panel. 标准视图 - Display mode - 显示模式 + Document window + 文档窗口 Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/TaskView/TaskAppearance.ui b/src/Gui/TaskView/TaskAppearance.ui index 795549469..e775af457 100644 --- a/src/Gui/TaskView/TaskAppearance.ui +++ b/src/Gui/TaskView/TaskAppearance.ui @@ -33,7 +33,7 @@ - Display mode: + Document window: From 8ec91d29dd5604302ec4ce799e332cf91e61576c Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 14:08:57 +0200 Subject: [PATCH 174/517] Workaround for linker error with MSVC --- src/Gui/Tree.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index 2c5f0ea15..ba3672d8c 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -431,6 +431,7 @@ void TreeWidget::dropEvent(QDropEvent *event) // Open command App::Document* doc = grp->getDocument(); Gui::Document* gui = Gui::Application::Instance->getDocument(doc); + Base::Type DOGPython = Base::Type::fromName("App::DocumentObjectGroupPython"); gui->openCommand("Move object"); for (QList::Iterator it = items.begin(); it != items.end(); ++it) { // get document object @@ -441,7 +442,7 @@ void TreeWidget::dropEvent(QDropEvent *event) if (par) { // allow an object to be in one group only QString cmd; - if (par->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + if (par->getTypeId().isDerivedFrom(DOGPython)) { // if this is a python group, call the method of its Proxy cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.removeObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") @@ -460,7 +461,7 @@ void TreeWidget::dropEvent(QDropEvent *event) // build Python command for execution QString cmd; - if (grp->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + if (grp->getTypeId().isDerivedFrom(DOGPython)) { cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.addObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromAscii(doc->getName())) From fc3a9903f832e636530e610624fadacff0e8a8d3 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 15:02:51 +0200 Subject: [PATCH 175/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.cpp | 26 +++++--------- src/Mod/Mesh/App/Core/Segmentation.h | 28 ++++++++++----- src/Mod/Mesh/App/Mesh.cpp | 50 +++++++------------------- src/Mod/Mesh/App/MeshPy.xml | 6 ++-- src/Mod/Mesh/App/MeshPyImp.cpp | 7 ++-- src/Mod/Mesh/Gui/Segmentation.cpp | 2 +- src/Mod/Mesh/Gui/Segmentation.ui | 23 ++++++++++-- 7 files changed, 67 insertions(+), 75 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 2e86fdb17..01d99fb11 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -108,22 +108,12 @@ bool MeshCurvatureCylindricalSegment::TestFacet (const MeshFacet &rclFacet) cons { for (int i=0; i<3; i++) { const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; - if (ci.fMaxCurvature > ci.fMinCurvature) { - // convexe - if (fabs(ci.fMinCurvature) > tolerance) - return false; - float diff = ci.fMaxCurvature - curvature; - if (fabs(diff) > tolerance) - return false; - } - else { - // concave - if (fabs(ci.fMaxCurvature) > tolerance) - return false; - float diff = ci.fMinCurvature + curvature; - if (fabs(diff) > tolerance) - return false; - } + float fMax = std::max(fabs(ci.fMaxCurvature), fabs(ci.fMinCurvature)); + float fMin = std::min(fabs(ci.fMaxCurvature), fabs(ci.fMinCurvature)); + if (fMin > toleranceMin) + return false; + if (fabs(fMax - curvature) > toleranceMax) + return false; } return true; @@ -151,9 +141,9 @@ bool MeshCurvatureFreeformSegment::TestFacet (const MeshFacet &rclFacet) const { for (int i=0; i<3; i++) { const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; - if (fabs(ci.fMinCurvature-c2) > tolerance) + if (fabs(ci.fMinCurvature-c2) > toleranceMin) return false; - if (fabs(ci.fMaxCurvature-c1) > tolerance) + if (fabs(ci.fMaxCurvature-c1) > toleranceMax) return false; } diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 561385c1c..c894147ad 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -84,53 +84,63 @@ protected: class MeshExport MeshCurvatureSurfaceSegment : public MeshSurfaceSegment { public: - MeshCurvatureSurfaceSegment(const std::vector& ci, unsigned long minFacets, float tol) - : MeshSurfaceSegment(minFacets), info(ci), tolerance(tol) {} + MeshCurvatureSurfaceSegment(const std::vector& ci, unsigned long minFacets) + : MeshSurfaceSegment(minFacets), info(ci) {} protected: const std::vector& info; - float tolerance; }; class MeshExport MeshCurvaturePlanarSegment : public MeshCurvatureSurfaceSegment { public: MeshCurvaturePlanarSegment(const std::vector& ci, unsigned long minFacets, float tol) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol) {} + : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float tolerance; }; class MeshExport MeshCurvatureCylindricalSegment : public MeshCurvatureSurfaceSegment { public: - MeshCurvatureCylindricalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + MeshCurvatureCylindricalSegment(const std::vector& ci, unsigned long minFacets, + float tolMin, float tolMax, float radius) + : MeshCurvatureSurfaceSegment(ci, minFacets), toleranceMin(tolMin), toleranceMax(tolMax) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; private: float curvature; + float toleranceMin; + float toleranceMax; }; class MeshExport MeshCurvatureSphericalSegment : public MeshCurvatureSurfaceSegment { public: MeshCurvatureSphericalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; private: float curvature; + float tolerance; }; class MeshExport MeshCurvatureFreeformSegment : public MeshCurvatureSurfaceSegment { public: - MeshCurvatureFreeformSegment(const std::vector& ci, unsigned long minFacets, float tol, float c1, float c2) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol), c1(c1), c2(c2) {} + MeshCurvatureFreeformSegment(const std::vector& ci, unsigned long minFacets, + float tolMin, float tolMax, float c1, float c2) + : MeshCurvatureSurfaceSegment(ci, minFacets), c1(c1), c2(c2), + toleranceMin(tolMin), toleranceMax(tolMax) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; private: float c1, c2; + float toleranceMin; + float toleranceMax; }; class MeshExport MeshSurfaceVisitor : public MeshFacetVisitor diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index 89f85856a..dec5da73b 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -44,6 +44,7 @@ #include "Core/TopoAlgorithm.h" #include "Core/Evaluation.h" #include "Core/Degeneration.h" +#include "Core/Segmentation.h" #include "Core/SetOperations.h" #include "Core/Visitor.h" @@ -1426,48 +1427,21 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons float dev, unsigned long minFacets) const { std::vector segm; - unsigned long startFacet; if (this->_kernel.CountFacets() == 0) return segm; - // reset VISIT flags - MeshCore::MeshAlgorithm cAlgo(this->_kernel); - if (aSegment.isEmpty()) { - cAlgo.ResetFacetFlag(MeshCore::MeshFacet::VISIT); + MeshCore::MeshSegmentAlgorithm finder(this->_kernel); + MeshCore::MeshDistanceSurfaceSegment* surf; + surf = new MeshCore::MeshDistancePlanarSegment(this->_kernel, minFacets, dev); + std::vector surfaces; + surfaces.push_back(surf); + finder.FindSegments(surfaces); + + const std::vector& data = surf->GetSegments(); + for (std::vector::const_iterator it = data.begin(); it != data.end(); ++it) { + segm.push_back(Segment(const_cast(this), *it, false)); } - else { - cAlgo.SetFacetFlag(MeshCore::MeshFacet::VISIT); - cAlgo.ResetFacetsFlag(aSegment.getIndices(), MeshCore::MeshFacet::VISIT); - } - - const MeshCore::MeshFacetArray& rFAry = this->_kernel.GetFacets(); - MeshCore::MeshFacetArray::_TConstIterator iTri = rFAry.begin(); - MeshCore::MeshFacetArray::_TConstIterator iBeg = rFAry.begin(); - MeshCore::MeshFacetArray::_TConstIterator iEnd = rFAry.end(); - - // start from the first not visited facet - cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); - iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), - MeshCore::MeshFacet::VISIT)); - startFacet = iTri - iBeg; - - while (startFacet != ULONG_MAX) { - // collect all facets of the same geometry - std::vector indices; - indices.push_back(startFacet); - MeshCore::MeshPlaneVisitor pv(this->_kernel, startFacet, dev, indices); - this->_kernel.VisitNeighbourFacets(pv, startFacet); - - iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), - MeshCore::MeshFacet::VISIT)); - if (iTri < iEnd) - startFacet = iTri - iBeg; - else - startFacet = ULONG_MAX; - if (indices.size() > minFacets) - segm.push_back(Segment(const_cast(this), indices, false)); - } - + delete surf; return segm; } diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index f29a59730..116979807 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -382,10 +382,10 @@ plane if none of its neighours is coplanar. getSegmentsByCurvature(list) -> list The argument list gives a list if tuples where it defines the preferred maximum curvature, -the preferred minumum curvature, the tolerance and the number of minimum faces for the segment. +the preferred minumum curvature, the tolerances and the number of minimum faces for the segment. Example: -c=(1.0, 0.0, 0.1, 500) # search for a cylinder with radius 1.0 -p=(0.0, 0.0, 0.1, 500) # search for a plane +c=(1.0, 0.0, 0.1, 0.1, 500) # search for a cylinder with radius 1.0 +p=(0.0, 0.0, 0.1, 0.1, 500) # search for a plane mesh.getSegmentsByCurvature([c,p]) diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index dd1f0e3e1..a2a1e6302 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -1399,9 +1399,10 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) Py::Tuple t(*it); float c1 = (float)Py::Float(t[0]); float c2 = (float)Py::Float(t[1]); - float tol = (float)Py::Float(t[2]); - int num = (int)Py::Int(t[3]); - segm.push_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol, c1, c2)); + float tol1 = (float)Py::Float(t[2]); + float tol2 = (float)Py::Float(t[3]); + int num = (int)Py::Int(t[4]); + segm.push_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol1, tol2, c1, c2)); } finder.FindSegments(segm); diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp index 962d65f2e..223479c56 100644 --- a/src/Mod/Mesh/Gui/Segmentation.cpp +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -76,7 +76,7 @@ void Segmentation::accept() std::vector segm; if (ui->groupBoxCyl->isChecked()) { segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment - (meshCurv.GetCurvature(), ui->numCyl->value(), ui->tolCyl->value(), ui->radCyl->value())); + (meshCurv.GetCurvature(), ui->numCyl->value(), ui->tol1Cyl->value(), ui->tol2Cyl->value(), ui->radCyl->value())); } if (ui->groupBoxSph->isChecked()) { segm.push_back(new MeshCore::MeshCurvatureSphericalSegment diff --git a/src/Mod/Mesh/Gui/Segmentation.ui b/src/Mod/Mesh/Gui/Segmentation.ui index 129c89873..b6ce13bd8 100644 --- a/src/Mod/Mesh/Gui/Segmentation.ui +++ b/src/Mod/Mesh/Gui/Segmentation.ui @@ -106,12 +106,12 @@ - Tolerance + Tolerance (Flat) - + 0.100000000000000 @@ -121,13 +121,30 @@ + + + Tolerance (Curved) + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + Minimum number of faces - + 100000 From 72b922a2349bbc2a73174461c80303107a025430 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 15:53:46 +0200 Subject: [PATCH 176/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.h | 6 ++++++ src/Mod/Mesh/Gui/Segmentation.cpp | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index c894147ad..1b29f4bff 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -41,6 +41,7 @@ public: : minFacets(minFacets) {} virtual ~MeshSurfaceSegment() {} virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; + virtual const char* GetType() const = 0; virtual void Initialize(unsigned long); virtual void AddFacet(const MeshFacet& rclFacet); void AddSegment(const std::vector&); @@ -70,6 +71,7 @@ public: MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); virtual ~MeshDistancePlanarSegment(); bool TestFacet (const MeshFacet& rclFacet) const; + const char* GetType() const { return "Plane"; } void Initialize(unsigned long); void AddFacet(const MeshFacet& rclFacet); @@ -97,6 +99,7 @@ public: MeshCurvaturePlanarSegment(const std::vector& ci, unsigned long minFacets, float tol) : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Plane"; } private: float tolerance; @@ -109,6 +112,7 @@ public: float tolMin, float tolMax, float radius) : MeshCurvatureSurfaceSegment(ci, minFacets), toleranceMin(tolMin), toleranceMax(tolMax) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Cylinder"; } private: float curvature; @@ -122,6 +126,7 @@ public: MeshCurvatureSphericalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Sphere"; } private: float curvature; @@ -136,6 +141,7 @@ public: : MeshCurvatureSurfaceSegment(ci, minFacets), c1(c1), c2(c2), toleranceMin(tolMin), toleranceMax(tolMax) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Freeform"; } private: float c1, c2; diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp index 223479c56..de2b81d48 100644 --- a/src/Mod/Mesh/Gui/Segmentation.cpp +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -24,12 +24,14 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include #endif #include "Segmentation.h" #include "ui_Segmentation.h" #include #include +#include #include #include @@ -89,18 +91,32 @@ void Segmentation::accept() finder.FindSegments(segm); App::Document* document = App::GetApplication().getActiveDocument(); + document->openTransaction("Segmentation"); + + std::string internalname = "Segments_"; + internalname += myMesh->getNameInDocument(); + App::DocumentObjectGroup* group = static_cast(document->addObject + ("App::DocumentObjectGroup", internalname.c_str())); + std::string labelname = "Segments "; + labelname += myMesh->Label.getValue(); + group->Label.setValue(labelname); for (std::vector::iterator it = segm.begin(); it != segm.end(); ++it) { const std::vector& data = (*it)->GetSegments(); for (std::vector::const_iterator jt = data.begin(); jt != data.end(); ++jt) { Mesh::MeshObject* segment = mesh->meshFromSegment(*jt); - Mesh::Feature* feaSegm = static_cast(document->addObject("Mesh::Feature", "Segment")); + Mesh::Feature* feaSegm = static_cast(group->addObject("Mesh::Feature", "Segment")); Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing(); feaMesh->swap(*segment); feaSegm->Mesh.finishEditing(); delete segment; + + std::stringstream label; + label << feaSegm->Label.getValue() << " (" << (*it)->GetType() << ")"; + feaSegm->Label.setValue(label.str()); } delete (*it); } + document->commitTransaction(); } void Segmentation::changeEvent(QEvent *e) From f33a6b90a8779ac72742fb6b77da96394b291006 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 18:27:30 +0200 Subject: [PATCH 177/517] 0000712: Cad Navigation Zoom with Ctrl + causes shapes to pan off screen --- src/Gui/CommandView.cpp | 16 +++------------- src/Gui/NavigationStyle.cpp | 10 ++++++++++ src/Gui/NavigationStyle.h | 2 ++ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 1de74b6c3..525d7c266 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -59,6 +59,7 @@ #include "DemoMode.h" #include "TextureMapping.h" #include "Utilities.h" +#include "NavigationStyle.h" #include #include @@ -1817,13 +1818,7 @@ void StdViewZoomIn::activated(int iMsg) View3DInventor* view = qobject_cast(getMainWindow()->activeWindow()); if ( view ) { View3DInventorViewer* viewer = view->getViewer(); - - // send an event to the GL widget to use the internal View3DInventorViewer::zoom() method - // do only one step to zoom in - SoMouseButtonEvent e; - e.setButton(SoMouseButtonEvent::BUTTON5); - e.setState(SoMouseButtonEvent::DOWN); - viewer->sendSoEvent(&e); + viewer->navigationStyle()->zoomIn(); } } @@ -1857,12 +1852,7 @@ void StdViewZoomOut::activated(int iMsg) View3DInventor* view = qobject_cast(getMainWindow()->activeWindow()); if (view) { View3DInventorViewer* viewer = view->getViewer(); - // send an event to the GL widget to use the internal View3DInventorViewer::zoom() method - // do only one step to zoom out - SoMouseButtonEvent e; - e.setButton(SoMouseButtonEvent::BUTTON4); - e.setState(SoMouseButtonEvent::DOWN); - viewer->sendSoEvent(&e); + viewer->navigationStyle()->zoomOut(); } } diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index 192cb7ae5..30f5ecf40 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -721,6 +721,16 @@ void NavigationStyle::zoomByCursor(const SbVec2f & thispos, const SbVec2f & prev zoom(viewer->getCamera(), (thispos[1] - prevpos[1]) * 10.0f/*20.0f*/); } +void NavigationStyle::zoomIn() +{ + zoom(viewer->getCamera(), -this->zoomStep); +} + +void NavigationStyle::zoomOut() +{ + zoom(viewer->getCamera(), this->zoomStep); +} + void NavigationStyle::doZoom(SoCamera* camera, SbBool forward, const SbVec2f& pos) { SbBool zoomAtCur = this->zoomAtCursor; diff --git a/src/Gui/NavigationStyle.h b/src/Gui/NavigationStyle.h index 7644a7340..b6d4e20e6 100644 --- a/src/Gui/NavigationStyle.h +++ b/src/Gui/NavigationStyle.h @@ -115,6 +115,8 @@ public: void setZoomStep(float); void setZoomAtCursor(SbBool); SbBool isZoomAtCursor() const; + void zoomIn(); + void zoomOut(); void updateAnimation(); void redraw(); From e607ddf55f03f03902a54b181a21c928ed63115e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 21 May 2012 22:35:18 -0300 Subject: [PATCH 178/517] unified yorik's email --- src/Mod/Draft/DraftGui.py | 2 +- src/Mod/Draft/Init.py | 2 +- src/Mod/Draft/InitGui.py | 2 +- src/Mod/Draft/draftlibs/fcgeo.py | 2 +- src/Mod/Draft/draftlibs/fcvec.py | 2 +- src/Mod/Draft/importDXF.py | 4 ++-- src/Mod/Draft/importOCA.py | 4 ++-- src/Mod/Draft/importSVG.py | 2 +- src/Mod/Draft/macros.py | 2 +- src/Tools/offlinedoc/buildpdf.py | 2 +- src/Tools/offlinedoc/buildqhelp.py | 2 +- src/Tools/offlinedoc/buildwikiindex.py | 2 +- src/Tools/offlinedoc/downloadwiki.py | 2 +- src/Tools/updateTranslations.py | 2 +- src/Tools/wiki2qhelp.py | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 02c6c57d4..752abb76b 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/Init.py b/src/Mod/Draft/Init.py index 5069e5fd6..47fd3dc98 100644 --- a/src/Mod/Draft/Init.py +++ b/src/Mod/Draft/Init.py @@ -1,6 +1,6 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 1bcbadbc8..84d0b9b86 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -1,6 +1,6 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/draftlibs/fcgeo.py b/src/Mod/Draft/draftlibs/fcgeo.py index bf9f53e18..ccacbf62c 100755 --- a/src/Mod/Draft/draftlibs/fcgeo.py +++ b/src/Mod/Draft/draftlibs/fcgeo.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * #* Copyright (c) 2009, 2010 * -#* Yorik van Havre , Ken Cline * +#* Yorik van Havre , Ken Cline * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/draftlibs/fcvec.py b/src/Mod/Draft/draftlibs/fcvec.py index 0f3358cfc..1f10a2c7e 100644 --- a/src/Mod/Draft/draftlibs/fcvec.py +++ b/src/Mod/Draft/draftlibs/fcvec.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * #* Copyright (c) 2009, 2010 * -#* Yorik van Havre , Ken Cline * +#* Yorik van Havre , Ken Cline * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 97e01db7f..2c0474f8e 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -3,7 +3,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (GPL) * @@ -24,7 +24,7 @@ #*************************************************************************** __title__="FreeCAD Draft Workbench - DXF importer/exporter" -__author__ = "Yorik van Havre " +__author__ = "Yorik van Havre " __url__ = ["http://yorik.orgfree.com","http://free-cad.sourceforge.net"] ''' diff --git a/src/Mod/Draft/importOCA.py b/src/Mod/Draft/importOCA.py index 6324ce710..58131d830 100644 --- a/src/Mod/Draft/importOCA.py +++ b/src/Mod/Draft/importOCA.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU General Public License (GPL) * @@ -22,7 +22,7 @@ #*************************************************************************** __title__="FreeCAD Draft Workbench - OCA importer/exporter" -__author__ = "Yorik van Havre " +__author__ = "Yorik van Havre " __url__ = ["http://yorik.orgfree.com","http://free-cad.sourceforge.net"] ''' diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index 5de678d51..b49d4735c 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/macros.py b/src/Mod/Draft/macros.py index a2668dad8..2b106d19f 100644 --- a/src/Mod/Draft/macros.py +++ b/src/Mod/Draft/macros.py @@ -1,6 +1,6 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/buildpdf.py b/src/Tools/offlinedoc/buildpdf.py index ff9f53a15..c6dbf246f 100755 --- a/src/Tools/offlinedoc/buildpdf.py +++ b/src/Tools/offlinedoc/buildpdf.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/buildqhelp.py b/src/Tools/offlinedoc/buildqhelp.py index 4325ed915..77fa1bcae 100755 --- a/src/Tools/offlinedoc/buildqhelp.py +++ b/src/Tools/offlinedoc/buildqhelp.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/buildwikiindex.py b/src/Tools/offlinedoc/buildwikiindex.py index f7cee86c8..e685aed48 100755 --- a/src/Tools/offlinedoc/buildwikiindex.py +++ b/src/Tools/offlinedoc/buildwikiindex.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/downloadwiki.py b/src/Tools/offlinedoc/downloadwiki.py index 50f88a2eb..4fc0bdadf 100755 --- a/src/Tools/offlinedoc/downloadwiki.py +++ b/src/Tools/offlinedoc/downloadwiki.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/updateTranslations.py b/src/Tools/updateTranslations.py index 5e3e991be..695a2f633 100755 --- a/src/Tools/updateTranslations.py +++ b/src/Tools/updateTranslations.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Library General Public License (LGPL) * diff --git a/src/Tools/wiki2qhelp.py b/src/Tools/wiki2qhelp.py index 09c47139a..dc52f3815 100755 --- a/src/Tools/wiki2qhelp.py +++ b/src/Tools/wiki2qhelp.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Library General Public License (LGPL) * From fbeedc1905c86d701eb293d50f6702dc96731370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 22 May 2012 11:10:17 +0200 Subject: [PATCH 179/517] Fixed UI symbol --- src/Mod/Ship/tankCreateTank/TaskPanel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py index ec6394638..4eddbd03e 100644 --- a/src/Mod/Ship/tankCreateTank/TaskPanel.py +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py @@ -139,7 +139,7 @@ class TaskPanel: """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Create a new tank")) - name = Translator.translate("Filling level") + " (\%)" + name = Translator.translate("Filling level") + " (%)" self.form.findChild(QtGui.QLabel, "LevelLabel").setText(name) name = '\n' name = name + Translator.translate("Density") From 3e34474d9bad03987b56c5eec2f79ebd85998d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 22 May 2012 11:10:55 +0200 Subject: [PATCH 180/517] Started GZ curves computation tool development --- src/Mod/Ship/CMakeLists.txt | 15 +- src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Makefile.am | 5 +- src/Mod/Ship/ShipGui.py | 13 ++ src/Mod/Ship/TankInstance.py | 62 +++++++- src/Mod/Ship/tankGZ/TaskPanel.py | 233 +++++++++++++++++++++++++++++++ src/Mod/Ship/tankGZ/TaskPanel.ui | 140 +++++++++++++++++++ src/Mod/Ship/tankGZ/__init__.py | 36 +++++ 8 files changed, 503 insertions(+), 5 deletions(-) create mode 100644 src/Mod/Ship/tankGZ/TaskPanel.py create mode 100644 src/Mod/Ship/tankGZ/TaskPanel.ui create mode 100644 src/Mod/Ship/tankGZ/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index c44e313ab..3106dbc47 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -114,7 +114,14 @@ SET(ShipCreateTank_SRCS ) SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS}) +SET(ShipGZ_SRCS + tankGZ/__init__.py + tankGZ/TaskPanel.py + tankGZ/TaskPanel.ui +) +SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -182,6 +189,12 @@ INSTALL( DESTINATION Mod/Ship/tankCreateTank ) +INSTALL( + FILES + ${ShipGZ_SRCS} + DESTINATION + Mod/Ship/tankGZ +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 6cf4c9689..aa8a409af 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -34,13 +34,13 @@ class ShipWorkbench ( Workbench ): # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Loading",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Loading",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 01b296c01..54b7ecf6a 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -75,7 +75,10 @@ nobase_data_DATA = \ tankWeights/TaskPanel.ui \ tankCreateTank/__init__.py \ tankCreateTank/TaskPanel.py \ - tankCreateTank/TaskPanel.ui + tankCreateTank/TaskPanel.ui \ + tankGZ/__init__.py \ + tankGZ/TaskPanel.py \ + tankGZ/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 71a9e75e4..c97f1e908 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -108,6 +108,18 @@ class CreateTank: ToolTip = str(Translator.translate('Create a new ship tank')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class GZ: + def Activated(self): + import tankGZ + tankGZ.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" + MenuText = str(Translator.translate('GZ curve')) + ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -115,3 +127,4 @@ FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) +FreeCADGui.addCommand('Ship_GZ', GZ()) diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py index 584aa0f97..6e44795f8 100644 --- a/src/Mod/Ship/TankInstance.py +++ b/src/Mod/Ship/TankInstance.py @@ -45,7 +45,7 @@ class ShipTank: # Add uniqueness property to identify Tank instances obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", str(Translator.translate("True if is a valid ship tank instance"))).IsShipTank=True # Add general options - obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Filling level"))).Level=level + obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Fluid filling level percentage"))).Level=level obj.addProperty("App::PropertyFloat","Density","ShipTank", str(Translator.translate("Inside fluid density"))).Density=density # Add shapes shape = self.computeShape(solid) @@ -1884,3 +1884,63 @@ class ViewProviderShipTank: " ", " "}; """ + +def tankWeight(obj, angles=Vector(0.0,0.0,0.0), cor=Vector(0.0,0.0,0.0)): + """ Compute tank fluid weight and their center of gravity. + @param obj Tank object. + @param angles Tank angles, Roll, Pitch and Yaw. + @param cor Center or rotation. + @return Weight and center of gravity. None if errors detected + """ + # Test if is a tank instance + props = obj.PropertiesList + try: + props.index("IsShipTank") + except ValueError: + return None + if not obj.IsShipTank: + return None + # Get object solids + Solids = obj.Shape.Solids + W = [0.0, 0.0, 0.0, 0.0] + for s in Solids: + # Get fluid volume + bbox = s.BoundBox + z0 = bbox.ZMin + z1 = bbox.ZMax + dz = obj.Level/100.0 * (z1-z0) + z = z0 + dz + dx = bbox.XMax-bbox.XMin + dy = bbox.YMax-bbox.YMin + box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0))) + fluid = s.common(box) + vol = fluid.Volume + W[0] = W[0] + vol*obj.Density + # Compute fluid solid in rotated position (non linear rotation + # are ussually computed as Roll -> Pitch -> Yaw). + s.rotate(cor, Vector(1.0,0.0,0.0), angles.x) + s.rotate(cor, Vector(0.0,1.0,0.0), angles.y) + s.rotate(cor, Vector(0.0,0.0,1.0), angles.z) + bbox = s.BoundBox + z0 = bbox.ZMin + z1 = bbox.ZMax + dx = bbox.XMax-bbox.XMin + dy = bbox.YMax-bbox.YMin + Error = 0.01*vol + z = 0.0 + v = 0.0 + while(abs(vol - v) > Error): + z = z + (vol - v) / (dx*dy) + dz = z - z0 + box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0))) + fluid = s.common(box) + v = fluid.Volume + if(abs(vol - v) / (dx*dy) <= 0.000001): + break + # Add fluid moments + for f in fluid.Solids: + cog = f.CenterOfMass + W[1] = W[1] + f.Volume*obj.Density*cog.x + W[2] = W[2] + f.Volume*obj.Density*cog.y + W[3] = W[3] + f.Volume*obj.Density*cog.z + return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py new file mode 100644 index 000000000..8a47e67ae --- /dev/null +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -0,0 +1,233 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +from Instance import * +from TankInstance import * +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/tankGZ/TaskPanel.ui" + self.ship = None + self.tanks = {} + + def accept(self): + if not self.ship: + return False + return True + + def reject(self): + if not self.ship: + return False + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.tanks = form.findChild(QtGui.QListWidget, "Tanks") + form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") + form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + self.onTanksSelection() + # Connect Signals and Slots + QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) + return False + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Get selected geometry. + @return False if sucessfully values initialized. + """ + # Get selected objects + selObjs = FreeCADGui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + continue + if obj.IsShip: + # Test if another ship already selected + if self.ship: + msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.ship = obj + # Test if any valid ship was selected + if not self.ship: + msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") + App.Console.PrintError(msg) + return True + props = self.ship.PropertiesList + try: + props.index("WeightNames") + except: + msg = Translator.translate("Ship weights has not been set. You need to set weights before use this tool.\n") + App.Console.PrintError(msg) + return True + # Setup available tanks list + objs = App.ActiveDocument.Objects + iconPath = Paths.iconsPath() + "/Tank.xpm" + icon = QtGui.QIcon(QtGui.QPixmap(iconPath)) + for obj in objs: + # Try to get valid tank property + props = obj.PropertiesList + try: + props.index("IsShipTank") + except ValueError: + continue + if not obj.IsShipTank: + continue + # Add tank to list + name = obj.Name + label = obj.Label + tag = label + ' (' + name + ')' + self.tanks[tag] = name + # self.tanks.append([name, tag]) + item = QtGui.QListWidgetItem(tag) + item.setIcon(icon) + self.form.tanks.addItem(item) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("GZ curve computation")) + self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) + + def onTanksSelection(self): + """ Called when tanks are selected or deselected. + """ + # Set displacement label + disp = self.computeDisplacement() + self.form.disp.setText(Translator.translate("Displacement") + ' %g [kg]' % (disp[0])) + + def getTanks(self): + """ Get the selected tanks objects list. + @return Selected tanks list. + """ + items = self.form.tanks.selectedItems() + tanks = [] + for item in items: + tag = str(item.text()) + name = self.tanks[tag] + t = App.ActiveDocument.getObject('Tank') + if not t: + continue + tanks.append(t) + return tanks + + def computeDisplacement(self): + """ Computes ship displacement. + @return Ship displacement and center of gravity. None if errors detected. + """ + if not self.ship: + return None + # Test if is a ship instance + obj = self.ship + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + return None + if not obj.IsShip: + return None + # Test if properties already exist + try: + props.index("WeightNames") + except: + return None + # Get ship structure weights + W = [0.0, 0.0, 0.0, 0.0] + sWeights = weights(obj) + for w in sWeights: + W[0] = W[0] + w[1] + W[1] = W[1] + w[1]*w[2][0] + W[2] = W[2] + w[1]*w[2][1] + W[3] = W[3] + w[1]*w[2][2] + # Get selected tanks weights + tanks = self.getTanks() + for t in tanks: + w = tankWeight(t) + W[0] = W[0] + w[0] + W[1] = W[1] + w[0]*w[1] + W[2] = W[2] + w[0]*w[2] + W[3] = W[3] + w[0]*w[3] + return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui new file mode 100644 index 000000000..a1f16c39b --- /dev/null +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -0,0 +1,140 @@ + + + TaskPanel + + + + 0 + 0 + 256 + 368 + + + + + 256 + 368 + + + + GZ curve computation + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Loading condition + + + + + 0 + 20 + 231 + 151 + + + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::MultiSelection + + + + + + + Displacement = 0 [kg] + + + + + + + Draft = 0 [m] + + + + + + + + + + + + 0 + 0 + + + + Roll angles + + + + + 0 + 20 + 231 + 141 + + + + + QLayout::SetMinimumSize + + + + + Start [deg] + + + + + + + End [deg] + + + + + + + Number of points + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/Ship/tankGZ/__init__.py b/src/Mod/Ship/tankGZ/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/tankGZ/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 7086b80cb3ffd322ef561fdf174acfe4dcf85f33 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 11:45:40 -0300 Subject: [PATCH 181/517] Renamed Draft fcvec and fcgeo modules Draft/draftlibs/fcvec becomes Draft/DraftVecUtils Draft/draftlibs/fcgeo becomes Draft/DraftGeomUtils --- src/Doc/sphinx/Draft.rst | 13 +- src/Mod/Arch/ArchAxis.py | 4 +- src/Mod/Arch/ArchCommands.py | 16 +- src/Mod/Arch/ArchRoof.py | 14 +- src/Mod/Arch/ArchSectionPlane.py | 8 +- src/Mod/Arch/ArchStructure.py | 12 +- src/Mod/Arch/ArchVRM.py | 29 +- src/Mod/Arch/ArchWall.py | 42 ++- src/Mod/Arch/ArchWindow.py | 12 +- src/Mod/Arch/importIFC.py | 5 +- src/Mod/Arch/importOBJ.py | 5 +- src/Mod/Draft/CMakeLists.txt | 4 +- src/Mod/Draft/Draft.py | 202 +++++++------- .../{draftlibs/fcgeo.py => DraftGeomUtils.py} | 0 src/Mod/Draft/DraftSnap.py | 42 ++- src/Mod/Draft/DraftTools.py | 251 +++++++++--------- src/Mod/Draft/DraftTrackers.py | 49 ++-- .../{draftlibs/fcvec.py => DraftVecUtils.py} | 0 src/Mod/Draft/Makefile.am | 4 +- src/Mod/Draft/WorkingPlane.py | 33 ++- src/Mod/Draft/importDXF.py | 70 ++--- src/Mod/Draft/importOCA.py | 13 +- src/Mod/Draft/importSVG.py | 32 ++- src/WindowsInstaller/ModDraft.wxi | 4 +- 24 files changed, 413 insertions(+), 451 deletions(-) rename src/Mod/Draft/{draftlibs/fcgeo.py => DraftGeomUtils.py} (100%) rename src/Mod/Draft/{draftlibs/fcvec.py => DraftVecUtils.py} (100%) diff --git a/src/Doc/sphinx/Draft.rst b/src/Doc/sphinx/Draft.rst index 2b4101780..4479028b1 100644 --- a/src/Doc/sphinx/Draft.rst +++ b/src/Doc/sphinx/Draft.rst @@ -12,10 +12,15 @@ The Draft module offer several convenient functions to work with simple objects. .. automodule:: DraftSnap :members: -The draftlibs contain two submodules, widely used throughout the Draft module: fcvec, which contains useful methods for dealing with vectors, and fcgeo, which offers many tools for working with Part shape objects. +The Draft module also contains two submodules, widely used throughout the Draft and Arch modules: DraftVecUtils, which contains useful methods for dealing with vectors, and DraftGeomUtils, which offers many tools for working with OpenCascade geometry. -.. automodule:: draftlibs.fcvec +.. automodule:: DraftVecUtils :members: -.. automodule:: draftlibs.fcgeo - :members: \ No newline at end of file +.. automodule:: DraftGeomUtils + :members: + +The Draft module also features a module that contains trackers, special objects made to display 3D temporary geometry in the 3D scene, that have no real existence in the FreeCAD document. + +.. automodule:: DraftTrackers + :members: diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index a56a50ff2..37cdf9f54 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -21,9 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,math - -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,math,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore, QtGui from pivy import coin diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 5802e5e0a..2ebfad0d0 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -170,7 +169,7 @@ def makeFace(wires,method=2,cleanup=False): # cleaning up rubbish in wires if cleanup: for i in range(len(wires)): - wires[i] = fcgeo.removeInterVertices(wires[i]) + wires[i] = DraftGeomUtils.removeInterVertices(wires[i]) print "garbage removed" for w in wires: # we assume that the exterior boundary is that one with @@ -210,8 +209,7 @@ def meshToShape(obj,mark=True): mark is True (default), non-solid objects will be marked in red''' name = obj.Name - import Part,MeshPart - from draftlibs import fcgeo + import Part, MeshPart, DraftGeomUtils if "Mesh" in obj.PropertiesList: faces = [] mesh = obj.Mesh @@ -249,12 +247,12 @@ def meshToShape(obj,mark=True): def removeShape(objs,mark=True): '''takes an arch object (wall or structure) built on a cubic shape, and removes the inner shape, keeping its length, width and height as parameters.''' - from draftlibs import fcgeo + import DraftGeomUtils if not isinstance(objs,list): objs = [objs] for obj in objs: - if fcgeo.isCubic(obj.Shape): - dims = fcgeo.getCubicDimensions(obj.Shape) + if DraftGeomUtils.isCubic(obj.Shape): + dims = DraftGeomUtils.getCubicDimensions(obj.Shape) if dims: name = obj.Name tp = Draft.getType(obj) @@ -270,7 +268,7 @@ def removeShape(objs,mark=True): length = dims[1] width = dims[2] v1 = Vector(length/2,0,0) - v2 = fcvec.neg(v1) + v2 = DraftVecUtils.neg(v1) v1 = dims[0].multVec(v1) v2 = dims[0].multVec(v2) line = Draft.makeLine(v1,v2) diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 37d06b58e..31515afbc 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -104,8 +103,7 @@ class _Roof(ArchComponent.Component): self.createGeometry(obj) def createGeometry(self,obj): - import Part,math - from draftlibs import fcgeo + import Part, math, DraftGeomUtils pl = obj.Placement if obj.Base and obj.Face and obj.Angle: @@ -116,14 +114,14 @@ class _Roof(ArchComponent.Component): c = round(math.tan(math.radians(obj.Angle)),Draft.precision()) norm = f.normalAt(0,0) d = f.BoundBox.DiagonalLength - edges = fcgeo.sortEdges(f.Edges) + edges = DraftGeomUtils.sortEdges(f.Edges) l = len(edges) edges.append(edges[0]) shps = [] for i in range(l): - v = fcgeo.vec(fcgeo.angleBisection(edges[i],edges[i+1])) + v = DraftGeomUtils.vec(DraftGeomUtils.angleBisection(edges[i],edges[i+1])) v.normalize() - bis = v.getAngle(fcgeo.vec(edges[i])) + bis = v.getAngle(DraftGeomUtils.vec(edges[i])) delta = 1/math.cos(bis) v.multiply(delta) n = (FreeCAD.Vector(norm)).multiply(c) @@ -137,7 +135,7 @@ class _Roof(ArchComponent.Component): c = c.removeSplitter() if not c.isNull(): obj.Shape = c - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderRoof(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index d1c1ada50..59c802382 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -21,11 +21,10 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,Drawing,math,Draft,ArchCommands +import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,Drawing,math,Draft,ArchCommands, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore from pivy import coin -from draftlibs import fcvec class _CommandSectionPlane: @@ -176,8 +175,7 @@ class _ArchDrawingView: def updateSVG(self, obj,join=False): "encapsulates a svg fragment into a transformation node" - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils if hasattr(obj,"Source"): if obj.Source: if obj.Source.Objects: @@ -207,7 +205,7 @@ class _ArchDrawingView: base = shape.pop() for sh in shapes: base = base.fuse(sh) - svgf = Drawing.projectToSVG(base,fcvec.neg(direction)) + svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction)) if svgf: svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') svg += svgf diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index cd87115eb..2327ad7ca 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -99,7 +98,7 @@ class _Structure(ArchComponent.Component): def getAxisPoints(self,obj): "returns the gridpoints of linked axes" - from draftlibs import fcgeo + import DraftGeomUtils pts = [] if len(obj.Axes) == 1: for e in obj.Axes[0].Shape.Edges: @@ -109,12 +108,11 @@ class _Structure(ArchComponent.Component): set2 = obj.Axes[1].Shape.Edges for e1 in set1: for e2 in set2: - pts.extend(fcgeo.findIntersection(e1,e2)) + pts.extend(DraftGeomUtils.findIntersection(e1,e2)) return pts def createGeometry(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils # getting default values height = normal = None if obj.Length: @@ -187,7 +185,7 @@ class _Structure(ArchComponent.Component): obj.Shape = Part.makeCompound(fsh) else: obj.Shape = base - if not fcgeo.isNull(pl): obj.Placement = pl + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderStructure(ArchComponent.ViewProviderComponent): "A View Provider for the Structure object" diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index f7e5988ab..2de8ad0b3 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -23,8 +23,7 @@ "The FreeCAD Arch Vector Rendering Module" -import FreeCAD,math,Part,ArchCommands -from draftlibs import fcvec,fcgeo +import FreeCAD,math,Part,ArchCommands,DraftVecUtils,DraftGeomUtils DEBUG = True # if we want debug messages MAXLOOP = 10 # the max number of loop before abort @@ -171,7 +170,7 @@ class Renderer: norm = face[0].normalAt(0,0) for w in face[0].Wires: verts = [] - edges = fcgeo.sortEdges(w.Edges) + edges = DraftGeomUtils.sortEdges(w.Edges) for e in edges: v = e.Vertexes[0].Point v = self.wp.getLocalCoords(v) @@ -196,7 +195,7 @@ class Renderer: wires = [] for w in face[0].Wires: verts = [] - edges = fcgeo.sortEdges(w.Edges) + edges = DraftGeomUtils.sortEdges(w.Edges) for e in edges: v = e.Vertexes[0].Point verts.append(FreeCAD.Vector(v.x,v.y,0)) @@ -239,11 +238,11 @@ class Renderer: FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)] for c in corners: dv = c.sub(placement.Base) - um1 = fcvec.project(dv,self.wp.u).Length + um1 = DraftVecUtils.project(dv,self.wp.u).Length um = max(um,um1) - vm1 = fcvec.project(dv,self.wp.v).Length + vm1 = DraftVecUtils.project(dv,self.wp.v).Length vm = max(vm,vm1) - wm1 = fcvec.project(dv,self.wp.axis).Length + wm1 = DraftVecUtils.project(dv,self.wp.axis).Length wm = max(wm,wm1) p1 = FreeCAD.Vector(-um,vm,0) p2 = FreeCAD.Vector(um,vm,0) @@ -252,7 +251,7 @@ class Renderer: cutface = Part.makePolygon([p1,p2,p3,p4,p1]) cutface = Part.Face(cutface) cutface.Placement = placement - cutnormal = fcvec.scaleTo(self.wp.axis,wm) + cutnormal = DraftVecUtils.scaleTo(self.wp.axis,wm) cutvolume = cutface.extrude(cutnormal) shapes = [] faces = [] @@ -265,7 +264,7 @@ class Renderer: faces.append([f]+sh[1:]) sec = sol.section(cutface) if sec.Edges: - wires = fcgeo.findWires(sec.Edges) + wires = DraftGeomUtils.findWires(sec.Edges) for w in wires: sec = Part.Face(w) sections.append([sec,fill]) @@ -313,7 +312,7 @@ class Renderer: # even so, faces can still overlap if their edges cross each other for e1 in face1[0].Edges: for e2 in face2[0].Edges: - if fcgeo.findIntersection(e1,e2): + if DraftGeomUtils.findIntersection(e1,e2): return True return False @@ -354,8 +353,8 @@ class Renderer: front = 0 for v in face1[0].Vertexes: dv = v.Point.sub(face2[0].Vertexes[0].Point) - dv = fcvec.project(dv,norm) - if fcvec.isNull(dv): + dv = DraftVecUtils.project(dv,norm) + if DraftVecUtils.isNull(dv): behind += 1 front += 1 else: @@ -377,8 +376,8 @@ class Renderer: front = 0 for v in face2[0].Vertexes: dv = v.Point.sub(face1[0].Vertexes[0].Point) - dv = fcvec.project(dv,norm) - if fcvec.isNull(dv): + dv = DraftVecUtils.project(dv,norm) + if DraftVecUtils.isNull(dv): behind += 1 front += 1 else: @@ -545,7 +544,7 @@ class Renderer: def getPathData(self,w): "Returns a SVG path data string from a 2D wire" - edges = fcgeo.sortEdges(w.Edges) + edges = DraftGeomUtils.sortEdges(w.Edges) v = edges[0].Vertexes[0].Point svg = 'M '+ str(v.x) +' '+ str(v.y) + ' ' for e in edges: diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 36c33e7a8..c26125136 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -180,13 +179,13 @@ class _CommandWall: n = FreeCAD.DraftWorkingPlane.axis bv = point.sub(b) dv = bv.cross(n) - dv = fcvec.scaleTo(dv,self.Width/2) + dv = DraftVecUtils.scaleTo(dv,self.Width/2) if self.Align == "Center": self.tracker.update([b,point]) elif self.Align == "Left": self.tracker.update([b.add(dv),point.add(dv)]) else: - dv = fcvec.neg(dv) + dv = DraftVecUtils.neg(dv) self.tracker.update([b.add(dv),point.add(dv)]) def taskbox(self): @@ -275,10 +274,10 @@ class _Wall(ArchComponent.Component): f = w f = Part.Face(f) n = f.normalAt(0,0) - v1 = fcvec.scaleTo(n,width) + v1 = DraftVecUtils.scaleTo(n,width) f.translate(v1) - v2 = fcvec.neg(v1) - v2 = fcvec.scale(v1,-2) + v2 = DraftVecUtils.neg(v1) + v2 = DraftVecUtils.scale(v1,-2) f = f.extrude(v2) if delta: f.translate(delta) @@ -290,8 +289,7 @@ class _Wall(ArchComponent.Component): if not obj.Base: return - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils flat = False if hasattr(obj.ViewObject,"DisplayMode"): @@ -304,25 +302,25 @@ class _Wall(ArchComponent.Component): def getbase(wire): "returns a full shape from a base wire" - dvec = fcgeo.vec(wire.Edges[0]).cross(normal) + dvec = DraftGeomUtils.vec(wire.Edges[0]).cross(normal) dvec.normalize() if obj.Align == "Left": dvec = dvec.multiply(width) - w2 = fcgeo.offsetWire(wire,dvec) - w1 = Part.Wire(fcgeo.sortEdges(wire.Edges)) - sh = fcgeo.bind(w1,w2) + w2 = DraftGeomUtils.offsetWire(wire,dvec) + w1 = Part.Wire(DraftGeomUtils.sortEdges(wire.Edges)) + sh = DraftGeomUtils.bind(w1,w2) elif obj.Align == "Right": dvec = dvec.multiply(width) - dvec = fcvec.neg(dvec) - w2 = fcgeo.offsetWire(wire,dvec) - w1 = Part.Wire(fcgeo.sortEdges(wire.Edges)) - sh = fcgeo.bind(w1,w2) + dvec = DraftVecUtils.neg(dvec) + w2 = DraftGeomUtils.offsetWire(wire,dvec) + w1 = Part.Wire(DraftGeomUtils.sortEdges(wire.Edges)) + sh = DraftGeomUtils.bind(w1,w2) elif obj.Align == "Center": dvec = dvec.multiply(width/2) - w1 = fcgeo.offsetWire(wire,dvec) - dvec = fcvec.neg(dvec) - w2 = fcgeo.offsetWire(wire,dvec) - sh = fcgeo.bind(w1,w2) + w1 = DraftGeomUtils.offsetWire(wire,dvec) + dvec = DraftVecUtils.neg(dvec) + w2 = DraftGeomUtils.offsetWire(wire,dvec) + sh = DraftGeomUtils.bind(w1,w2) # fixing self-intersections sh.fix(0.1,0,1) if height and (not flat): @@ -388,7 +386,7 @@ class _Wall(ArchComponent.Component): if base: obj.Shape = base - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderWall(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 2cdf513c9..35813ddfc 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore,QtGui @@ -109,8 +108,7 @@ class _Window(ArchComponent.Component): self.createGeometry(obj) def createGeometry(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils pl = obj.Placement if obj.Base: if obj.Base.isDerivedFrom("Part::Feature"): @@ -135,7 +133,7 @@ class _Window(ArchComponent.Component): norm = shape.normalAt(0,0) thk = float(obj.WindowParts[(i*5)+3]) if thk: - exv = fcvec.scaleTo(norm,thk) + exv = DraftVecUtils.scaleTo(norm,thk) shape = shape.extrude(exv) for w in wires: f = Part.Face(w) @@ -144,12 +142,12 @@ class _Window(ArchComponent.Component): if obj.WindowParts[(i*5)+4]: zof = float(obj.WindowParts[(i*5)+4]) if zof: - zov = fcvec.scaleTo(norm,zof) + zov = DraftVecUtils.scaleTo(norm,zof) shape.translate(zov) print shape shapes.append(shape) obj.Shape = Part.makeCompound(shapes) - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderWindow(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 7a0cf8ae0..17dc3d166 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import ifcReader, FreeCAD, Arch, Draft, os, sys, time, Part -from draftlibs import fcvec +import ifcReader, FreeCAD, Arch, Draft, os, sys, time, Part, DraftVecUtils __title__="FreeCAD IFC importer" __author__ = "Yorik van Havre" @@ -448,7 +447,7 @@ def getPlacement(entity): z = getVector(entity.Axis) y = z.cross(x) loc = getVector(entity.Location) - m = fcvec.getPlaneRotation(x,y,z) + m = DraftVecUtils.getPlaneRotation(x,y,z) pl = FreeCAD.Placement(m) pl.move(loc) elif entity.type == "IFCLOCALPLACEMENT": diff --git a/src/Mod/Arch/importOBJ.py b/src/Mod/Arch/importOBJ.py index e5ddca434..4622e1adf 100644 --- a/src/Mod/Arch/importOBJ.py +++ b/src/Mod/Arch/importOBJ.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD -from draftlibs import fcgeo +import FreeCAD, DraftGeomUtils if open.__module__ == '__builtin__': pythonopen = open @@ -42,7 +41,7 @@ def getIndices(shape,offset): for f in shape.Faces: fi = "" # OCC vertices are unsorted. We need to sort in the right order... - edges = fcgeo.sortEdges(f.Wire.Edges) + edges = DraftGeomUtils.sortEdges(f.Wire.Edges) print edges for e in edges: print e.Vertexes[0].Point,e.Vertexes[1].Point diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index 99e27d0f9..3d1288561 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -7,6 +7,8 @@ SET(Draft_SRCS DraftGui.py DraftSnap.py DraftTrackers.py + DraftVecUtils.py + DraftGeomUtils.py WorkingPlane.py importDXF.py importOCA.py @@ -22,8 +24,6 @@ SET(DraftLibs_SRCS draftlibs/dxfImportObjects.py draftlibs/dxfLibrary.py draftlibs/dxfReader.py - draftlibs/fcgeo.py - draftlibs/fcvec.py draftlibs/__init__.py ) SOURCE_GROUP("draftlibs" FILES ${DraftLibs_SRCS}) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 0014a4513..300bc8692 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -54,9 +54,9 @@ How it works / how to extend: - DraftTools.py: Contains the user tools of the Draft module (the commands from the Draft menu), and a couple of helpers such as the "Trackers" (temporary geometry used while drawing) - - draftlibs/fcvec.py: a vector math library, contains functions that are not + - DraftVecUtils.py: a vector math library, contains functions that are not implemented in the standard FreeCAD vector - - draftlibs/fcgeo.py: a library of misc functions to manipulate shapes. + - DraftGeomUtils.py: a library of misc functions to manipulate shapes. The Draft.py contains everything to create geometry in the scene. You should start there if you intend to modify something. Then, the DraftTools @@ -72,9 +72,8 @@ How it works / how to extend: ''' # import FreeCAD modules -import FreeCAD, math, sys, os +import FreeCAD, math, sys, os, DraftVecUtils from FreeCAD import Vector -from draftlibs import fcvec from pivy import coin if FreeCAD.GuiUp: @@ -395,8 +394,8 @@ def makeCircle(radius, placement=None, face=True, startangle=None, endangle=None ref = placement.multVec(FreeCAD.Vector(1,0,0)) v1 = (edge.Vertexes[0].Point).sub(edge.Curve.Center) v2 = (edge.Vertexes[-1].Point).sub(edge.Curve.Center) - a1 = -math.degrees(fcvec.angle(v1,ref)) - a2 = -math.degrees(fcvec.angle(v2,ref)) + a1 = -math.degrees(DraftVecUtils.angle(v1,ref)) + a2 = -math.degrees(DraftVecUtils.angle(v2,ref)) obj.FirstAngle = a1 obj.LastAngle = a2 else: @@ -514,15 +513,14 @@ def makeWire(pointslist,closed=False,placement=None,face=True,support=None): and last points are identical, the wire is closed. If face is true (and wire is closed), the wire will appear filled. Instead of a pointslist, you can also pass a Part Wire.''' - from draftlibs import fcgeo - import Part + import DraftGeomUtils, Part if not isinstance(pointslist,list): e = pointslist.Wires[0].Edges - pointslist = Part.Wire(fcgeo.sortEdges(e)) + pointslist = Part.Wire(DraftGeomUtils.sortEdges(e)) nlist = [] for v in pointslist.Vertexes: nlist.append(v.Point) - if fcgeo.isReallyClosed(pointslist): + if DraftGeomUtils.isReallyClosed(pointslist): closed = True pointslist = nlist print pointslist @@ -774,8 +772,7 @@ def fuse(object1,object2): the union of the 2 given objects. If the objects are coplanar, a special Draft Wire is used, otherwise we use a standard Part fuse.''' - from draftlibs import fcgeo - import Part + import DraftGeomUtils, Part # testing if we have holes: holes = False fshape = object1.Shape.fuse(object2.Shape) @@ -783,7 +780,7 @@ def fuse(object1,object2): for f in fshape.Faces: if len(f.Wires) > 1: holes = True - if fcgeo.isCoplanar(object1.Shape.fuse(object2.Shape).Faces) and not holes: + if DraftGeomUtils.isCoplanar(object1.Shape.fuse(object2.Shape).Faces) and not holes: obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython","Fusion") _Wire(obj) if gui: @@ -879,12 +876,12 @@ def array(objectslist,arg1,arg2,arg3,arg4=None): typecheck([(xvector,Vector), (yvector,Vector), (xnum,int), (ynum,int)], "rectArray") if not isinstance(objectslist,list): objectslist = [objectslist] for xcount in range(xnum): - currentxvector=fcvec.scale(xvector,xcount) + currentxvector=DraftVecUtils.scale(xvector,xcount) if not xcount==0: move(objectslist,currentxvector,True) for ycount in range(ynum): currentxvector=FreeCAD.Base.Vector(currentxvector) - currentyvector=currentxvector.add(fcvec.scale(yvector,ycount)) + currentyvector=currentxvector.add(DraftVecUtils.scale(yvector,ycount)) if not ycount==0: move(objectslist,currentyvector,True) def polarArray(objectslist,center,angle,num): @@ -918,7 +915,7 @@ def rotate(objectslist,angle,center=Vector(0,0,0),axis=Vector(0,0,1),copy=False) newobj = obj if (obj.isDerivedFrom("Part::Feature")): shape = obj.Shape.copy() - shape.rotate(fcvec.tup(center), fcvec.tup(axis), angle) + shape.rotate(DraftVecUtils.tup(center), DraftVecUtils.tup(axis), angle) newobj.Shape = shape elif (obj.isDerivedFrom("App::Annotation")): if axis.normalize() == Vector(1,0,0): @@ -939,7 +936,7 @@ def rotate(objectslist,angle,center=Vector(0,0,0),axis=Vector(0,0,1),copy=False) elif hasattr(obj,"Placement"): shape = Part.Shape() shape.Placement = obj.Placement - shape.rotate(fcvec.tup(center), fcvec.tup(axis), angle) + shape.rotate(DraftVecUtils.tup(center), DraftVecUtils.tup(axis), angle) newobj.Placement = shape.Placement if copy: formatObject(newobj,obj) @@ -972,7 +969,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy sh = sh.transformGeometry(m) corr = Vector(center.x,center.y,center.z) corr.scale(delta.x,delta.y,delta.z) - corr = fcvec.neg(corr.sub(center)) + corr = DraftVecUtils.neg(corr.sub(center)) sh.translate(corr) if getType(obj) == "Rectangle": p = [] @@ -982,8 +979,8 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy diag = p[2].sub(p[0]) bb = p[1].sub(p[0]) bh = p[3].sub(p[0]) - nb = fcvec.project(diag,bb) - nh = fcvec.project(diag,bh) + nb = DraftVecUtils.project(diag,bb) + nh = DraftVecUtils.project(diag,bh) if obj.Length < 0: l = -nb.Length else: l = nb.Length if obj.Height < 0: h = -nh.Length @@ -1016,7 +1013,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy obj.Scale = delta corr = Vector(center.x,center.y,center.z) corr.scale(delta.x,delta.y,delta.z) - corr = fcvec.neg(corr.sub(center)) + corr = DraftVecUtils.neg(corr.sub(center)) p = obj.Placement p.move(corr) obj.Placement = p @@ -1037,8 +1034,7 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): and the offsetted wires will be bound by their endpoints, forming a face if sym is True, bind must be true too, and the offset is made on both sides, the total width being the given delta length.''' - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils def getRect(p,obj): "returns length,heigh,placement" @@ -1047,8 +1043,8 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): diag = p[2].sub(p[0]) bb = p[1].sub(p[0]) bh = p[3].sub(p[0]) - nb = fcvec.project(diag,bb) - nh = fcvec.project(diag,bh) + nb = DraftVecUtils.project(diag,bb) + nh = DraftVecUtils.project(diag,bh) if obj.Length < 0: l = -nb.Length else: l = nb.Length if obj.Height < 0: h = -nh.Length @@ -1058,7 +1054,7 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): def getRadius(obj,delta): "returns a new radius for a regular polygon" an = math.pi/obj.FacesNumber - nr = fcvec.rotate(delta,-an) + nr = DraftVecUtils.rotate(delta,-an) nr.multiply(1/math.cos(an)) nr = obj.Shape.Vertexes[0].Point.add(nr) nr = nr.sub(obj.Placement.Base) @@ -1075,18 +1071,18 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): else: if sym: d1 = delta.multiply(0.5) - d2 = fcvec.neg(d1) - n1 = fcgeo.offsetWire(obj.Shape,d1) - n2 = fcgeo.offsetWire(obj.Shape,d2) + d2 = DraftVecUtils.neg(d1) + n1 = DraftGeomUtils.offsetWire(obj.Shape,d1) + n2 = DraftGeomUtils.offsetWire(obj.Shape,d2) else: - newwire = fcgeo.offsetWire(obj.Shape,delta) - p = fcgeo.getVerts(newwire) + newwire = DraftGeomUtils.offsetWire(obj.Shape,delta) + p = DraftGeomUtils.getVerts(newwire) if occ: newobj = FreeCAD.ActiveDocument.addObject("Part::Feature","Offset") - newobj.Shape = fcgeo.offsetWire(obj.Shape,delta,occ=True) + newobj.Shape = DraftGeomUtils.offsetWire(obj.Shape,delta,occ=True) formatObject(newobj,obj) elif bind: - if not fcgeo.isReallyClosed(obj.Shape): + if not DraftGeomUtils.isReallyClosed(obj.Shape): if sym: s1 = n1 s2 = n2 @@ -1161,8 +1157,7 @@ def draftify(objectslist,makeblock=False): '''draftify(objectslist,[makeblock]): turns each object of the given list (objectslist can also be a single object) into a Draft parametric wire. If makeblock is True, multiple objects will be grouped in a block''' - from draftlibs import fcgeo - import Part + import DraftGeomUtils, Part if not isinstance(objectslist,list): objectslist = [objectslist] @@ -1170,7 +1165,7 @@ def draftify(objectslist,makeblock=False): for obj in objectslist: if obj.isDerivedFrom('Part::Feature'): for w in obj.Shape.Wires: - if fcgeo.hasCurves(w): + if DraftGeomUtils.hasCurves(w): if (len(w.Edges) == 1) and isinstance(w.Edges[0].Curve,Part.Circle): nobj = makeCircle(w.Edges[0]) else: @@ -1199,8 +1194,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct with the given linewidth and fontsize (used if the given object contains any text). You can also supply an arbitrary projection vector. the scale parameter allows to scale linewidths down, so they are resolution-independant.''' - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils svg = "" linewidth = linewidth/scale fontsize = (fontsize/scale)/2 @@ -1209,7 +1203,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct if isinstance(direction,FreeCAD.Vector): if direction != Vector(0,0,0): plane = WorkingPlane.plane() - plane.alignToPointAndAxis(Vector(0,0,0),fcvec.neg(direction),0) + plane.alignToPointAndAxis(Vector(0,0,0),DraftVecUtils.neg(direction),0) elif isinstance(direction,WorkingPlane.plane): plane = direction @@ -1240,10 +1234,10 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct def getProj(vec): if not plane: return vec - nx = fcvec.project(vec,plane.u) + nx = DraftVecUtils.project(vec,plane.u) lx = nx.Length if abs(nx.getAngle(plane.u)) > 0.1: lx = -lx - ny = fcvec.project(vec,plane.v) + ny = DraftVecUtils.project(vec,plane.v) ly = ny.Length if abs(ny.getAngle(plane.v)) > 0.1: ly = -ly return Vector(lx,ly,0) @@ -1255,7 +1249,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct def getPath(edges): svg =' dmax): - p1 = p2.add(fcvec.scaleTo(proj,dmax)) - p4 = p3.add(fcvec.scaleTo(proj,dmax)) - midpoint = p2.add(fcvec.scale(p3.sub(p2),0.5)) + p1 = p2.add(DraftVecUtils.scaleTo(proj,dmax)) + p4 = p3.add(DraftVecUtils.scaleTo(proj,dmax)) + midpoint = p2.add(DraftVecUtils.scale(p3.sub(p2),0.5)) if not proj: - ed = fcgeo.vec(base) + ed = DraftGeomUtils.vec(base) proj = ed.cross(Vector(0,0,1)) if not proj: norm = Vector(0,0,1) - else: norm = fcvec.neg(p3.sub(p2).cross(proj)) - if not fcvec.isNull(norm): + else: norm = DraftVecUtils.neg(p3.sub(p2).cross(proj)) + if not DraftVecUtils.isNull(norm): norm.normalize() va = get3DView().getViewDirection() if va.getAngle(norm) < math.pi/2: - norm = fcvec.neg(norm) + norm = DraftVecUtils.neg(norm) u = p3.sub(p2) u.normalize() c = get3DView().getCameraNode() r = c.orientation.getValue() ru = Vector(r.multVec(coin.SbVec3f(1,0,0)).getValue()) - if ru.getAngle(u) > math.pi/2: u = fcvec.neg(u) + if ru.getAngle(u) > math.pi/2: u = DraftVecUtils.neg(u) v = norm.cross(u) - offset = fcvec.scaleTo(v,obj.ViewObject.FontSize*.2) + offset = DraftVecUtils.scaleTo(v,obj.ViewObject.FontSize*.2) if obj.ViewObject: if hasattr(obj.ViewObject,"DisplayMode"): if obj.ViewObject.DisplayMode == "3D": - offset = fcvec.neg(offset) + offset = DraftVecUtils.neg(offset) if hasattr(obj.ViewObject,"TextPosition"): if obj.ViewObject.TextPosition == Vector(0,0,0): tbase = midpoint.add(offset) @@ -1839,7 +1831,7 @@ class _ViewProviderDimension: tbase = obj.ViewObject.TextPosition else: tbase = midpoint.add(offset) - rot = FreeCAD.Placement(fcvec.getPlaneRotation(u,v,norm)).Rotation.Q + rot = FreeCAD.Placement(DraftVecUtils.getPlaneRotation(u,v,norm)).Rotation.Q return p1,p2,p3,p4,tbase,norm,rot def attach(self, obj): @@ -1858,7 +1850,7 @@ class _ViewProviderDimension: self.text.string = self.text3d.string = '' self.textpos = coin.SoTransform() self.textpos.translation.setValue([tbase.x,tbase.y,tbase.z]) - tm = fcvec.getPlaneRotation(p3.sub(p2),norm) + tm = DraftVecUtils.getPlaneRotation(p3.sub(p2),norm) rm = coin.SbRotation() self.textpos.rotation = rm label = coin.SoSeparator() @@ -1917,11 +1909,11 @@ class _ViewProviderDimension: # arc linked dimension e = obj.Base.Shape.Edges[obj.LinkedVertices[0]] c = e.Curve.Center - bray = fcvec.scaleTo(obj.Dimline.sub(c),e.Curve.Radius) + bray = DraftVecUtils.scaleTo(obj.Dimline.sub(c),e.Curve.Radius) if obj.LinkedVertices[1] == 1: v1 = c else: - v1 = c.add(fcvec.neg(bray)) + v1 = c.add(DraftVecUtils.neg(bray)) v2 = c.add(bray) else: # linear linked dimension @@ -1952,8 +1944,8 @@ class _ViewProviderDimension: else: ts = (len(text)*obj.ViewObject.FontSize)/4 rm = ((p3.sub(p2)).Length/2)-ts - p2a = p2.add(fcvec.scaleTo(p3.sub(p2),rm)) - p2b = p3.add(fcvec.scaleTo(p2.sub(p3),rm)) + p2a = p2.add(DraftVecUtils.scaleTo(p3.sub(p2),rm)) + p2b = p3.add(DraftVecUtils.scaleTo(p2.sub(p3),rm)) self.coords.point.setValues([[p1.x,p1.y,p1.z], [p2.x,p2.y,p2.z], [p2a.x,p2a.y,p2a.z], @@ -2149,15 +2141,14 @@ class _ViewProviderAngularDimension: self.onChanged(vobj,"FontName") def calcGeom(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils rad = (obj.Dimline.sub(obj.Center)).Length cir = Part.makeCircle(rad,obj.Center,Vector(0,0,1),obj.FirstAngle,obj.LastAngle) - cp = fcgeo.findMidpoint(cir.Edges[0]) + cp = DraftGeomUtils.findMidpoint(cir.Edges[0]) rv = cp.sub(obj.Center) - rv = fcvec.scaleTo(rv,rv.Length + obj.ViewObject.FontSize*.2) + rv = DraftVecUtils.scaleTo(rv,rv.Length + obj.ViewObject.FontSize*.2) tbase = obj.Center.add(rv) - trot = fcvec.angle(rv)-math.pi/2 + trot = DraftVecUtils.angle(rv)-math.pi/2 if (trot > math.pi/2) or (trot < -math.pi/2): trot = trot + math.pi s = getParam("dimorientation") @@ -2276,8 +2267,7 @@ class _Rectangle: self.createGeometry(fp) def createGeometry(self,fp): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils plm = fp.Placement p1 = Vector(0,0,0) p2 = Vector(p1.x+fp.Length,p1.y,p1.z) @@ -2286,7 +2276,7 @@ class _Rectangle: shape = Part.makePolygon([p1,p2,p3,p4,p1]) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w shape = Part.Face(shape) @@ -2399,8 +2389,7 @@ class _Wire: fp.Points = pts def createGeometry(self,fp): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils plm = fp.Placement if fp.Base and (not fp.Tool): if fp.Base.isDerivedFrom("Sketcher::SketchObject"): @@ -2416,8 +2405,8 @@ class _Wire: sh1 = fp.Base.Shape.copy() sh2 = fp.Tool.Shape.copy() shape = sh1.fuse(sh2) - if fcgeo.isCoplanar(shape.Faces): - shape = fcgeo.concatenate(shape) + if DraftGeomUtils.isCoplanar(shape.Faces): + shape = DraftGeomUtils.concatenate(shape) fp.Shape = shape p = [] for v in shape.Vertexes: p.append(v.Point) @@ -2430,7 +2419,7 @@ class _Wire: shape = Part.makePolygon(fp.Points+[fp.Points[0]]) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w shape = Part.Face(shape) @@ -2444,7 +2433,7 @@ class _Wire: shape = Part.Wire(edges) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w fp.Shape = shape @@ -2510,8 +2499,7 @@ class _Polygon: self.createGeometry(fp) def createGeometry(self,fp): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils plm = fp.Placement angle = (math.pi*2)/fp.FacesNumber if fp.DrawMode == 'inscribed': @@ -2526,7 +2514,7 @@ class _Polygon: shape = Part.makePolygon(pts) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w shape = Part.Face(shape) @@ -2690,16 +2678,15 @@ class _Shape2DView: self.createGeometry(obj) def createGeometry(self,obj): - import Drawing - from draftlibs import fcgeo + import Drawing, DraftGeomUtils pl = obj.Placement if obj.Base: if obj.Base.isDerivedFrom("Part::Feature"): - if not fcvec.isNull(obj.Projection): + if not DraftVecUtils.isNull(obj.Projection): [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(obj.Base.Shape,obj.Projection) if visibleG0: obj.Shape = visibleG0 - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _Array: @@ -2745,7 +2732,7 @@ class _Array: self.createGeometry(obj) def createGeometry(self,obj): - from draftlibs import fcgeo + import DraftGeomUtils if obj.Base: pl = obj.Placement if obj.ArrayType == "ortho": @@ -2753,21 +2740,21 @@ class _Array: else: sh = self.polarArray(obj.Base.Shape,obj.Center,obj.Angle,obj.NumberPolar,obj.Axis) obj.Shape = sh - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl def rectArray(self,shape,xvector,yvector,xnum,ynum): import Part base = [shape.copy()] for xcount in range(xnum): - currentxvector=fcvec.scale(xvector,xcount) + currentxvector=DraftVecUtils.scale(xvector,xcount) if not xcount==0: nshape = shape.copy() nshape.translate(currentxvector) base.append(nshape) for ycount in range(ynum): currentxvector=FreeCAD.Vector(currentxvector) - currentyvector=currentxvector.add(fcvec.scale(yvector,ycount)) + currentyvector=currentxvector.add(DraftVecUtils.scale(yvector,ycount)) if not ycount==0: nshape = shape.copy() nshape.translate(currentyvector) @@ -2781,7 +2768,7 @@ class _Array: for i in range(num): currangle = fraction + (i*fraction) nshape = shape.copy() - nshape.rotate(fcvec.tup(center), fcvec.tup(axis), currangle) + nshape.rotate(DraftVecUtils.tup(center), DraftVecUtils.tup(axis), currangle) base.append(nshape) return Part.makeCompound(base) @@ -2845,8 +2832,7 @@ class _Clone: self.createGeometry(obj) def createGeometry(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils pl = obj.Placement shapes = [] for o in obj.Objects: @@ -2859,7 +2845,7 @@ class _Clone: shapes.append(sh) if shapes: obj.Shape = Part.makeCompound(shapes) - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderDraftPart(_ViewProviderDraft): diff --git a/src/Mod/Draft/draftlibs/fcgeo.py b/src/Mod/Draft/DraftGeomUtils.py similarity index 100% rename from src/Mod/Draft/draftlibs/fcgeo.py rename to src/Mod/Draft/DraftGeomUtils.py diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 50a0b19ba..1479a6568 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -26,9 +26,8 @@ __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers +import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers, DraftVecUtils from DraftGui import todo,getMainWindow -from draftlibs import fcvec from FreeCAD import Vector from pivy import coin from PyQt4 import QtCore,QtGui @@ -110,9 +109,8 @@ class Snapper: be True to constrain the point against the closest working plane axis. Screenpos can be a list, a tuple or a coin.SbVec2s object.""" - global Part,fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils if not hasattr(self,"toolbar"): self.makeSnapToolBar() @@ -355,7 +353,7 @@ class Snapper: for e in edges: if isinstance(e.Curve,Part.Line): np = self.getPerpendicular(e,point) - if not fcgeo.isPtOnEdge(np,e): + if not DraftGeomUtils.isPtOnEdge(np,e): if (np.sub(point)).Length < self.radius: if self.isEnabled('extension'): if np != e.Vertexes[0].Point: @@ -372,7 +370,7 @@ class Snapper: else: if self.isEnabled('parallel'): if last: - de = Part.Line(last,last.add(fcgeo.vec(e))).toShape() + de = Part.Line(last,last.add(DraftGeomUtils.vec(e))).toShape() np = self.getPerpendicular(de,point) if (np.sub(point)).Length < self.radius: if self.tracker: @@ -398,13 +396,13 @@ class Snapper: FreeCAD.Vector(0,0,1)] for a in self.polarAngles: if a == 90: - vecs.extend([ax[0],fcvec.neg(ax[0])]) - vecs.extend([ax[1],fcvec.neg(ax[1])]) + vecs.extend([ax[0],DraftVecUtils.neg(ax[0])]) + vecs.extend([ax[1],DraftVecUtils.neg(ax[1])]) else: - v = fcvec.rotate(ax[0],math.radians(a),ax[2]) - vecs.extend([v,fcvec.neg(v)]) - v = fcvec.rotate(ax[1],math.radians(a),ax[2]) - vecs.extend([v,fcvec.neg(v)]) + v = DraftVecUtils.rotate(ax[0],math.radians(a),ax[2]) + vecs.extend([v,DraftVecUtils.neg(v)]) + v = DraftVecUtils.rotate(ax[1],math.radians(a),ax[2]) + vecs.extend([v,DraftVecUtils.neg(v)]) for v in vecs: de = Part.Line(last,last.add(v)).toShape() np = self.getPerpendicular(de,point) @@ -457,7 +455,7 @@ class Snapper: snaps = [] if self.isEnabled("midpoint"): if isinstance(shape,Part.Edge): - mp = fcgeo.findMidpoint(shape) + mp = DraftGeomUtils.findMidpoint(shape) if mp: snaps.append([mp,'midpoint',mp]) return snaps @@ -472,7 +470,7 @@ class Snapper: np = self.getPerpendicular(shape,last) elif isinstance(shape.Curve,Part.Circle): dv = last.sub(shape.Curve.Center) - dv = fcvec.scaleTo(dv,shape.Curve.Radius) + dv = DraftVecUtils.scaleTo(dv,shape.Curve.Radius) np = (shape.Curve.Center).add(dv) elif isinstance(shape.Curve,Part.BSplineCurve): pr = shape.Curve.parameter(last) @@ -493,7 +491,7 @@ class Snapper: if self.constraintAxis: tmpEdge = Part.Line(last,last.add(self.constraintAxis)).toShape() # get the intersection points - pt = fcgeo.findIntersection(tmpEdge,shape,True,True) + pt = DraftGeomUtils.findIntersection(tmpEdge,shape,True,True) if pt: for p in pt: snaps.append([p,'ortho',p]) @@ -506,14 +504,14 @@ class Snapper: tmpEdge1 = Part.Line(last,last.add(self.constraintAxis)).toShape() tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() # get the intersection points - pt = fcgeo.findIntersection(tmpEdge1,tmpEdge2,True,True) + pt = DraftGeomUtils.findIntersection(tmpEdge1,tmpEdge2,True,True) if pt: return [pt[0],'ortho',pt[0]] if eline: try: tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() # get the intersection points - pt = fcgeo.findIntersection(eline,tmpEdge2,True,True) + pt = DraftGeomUtils.findIntersection(eline,tmpEdge2,True,True) if pt: return [pt[0],'ortho',pt[0]] except: @@ -526,7 +524,7 @@ class Snapper: if self.isEnabled("intersection") and self.isEnabled("extension"): if e1 and e2: # get the intersection points - pts = fcgeo.findIntersection(e1,e2,True,True) + pts = DraftGeomUtils.findIntersection(e1,e2,True,True) if pts: for p in pts: snaps.append([p,'intersection',p]) @@ -569,7 +567,7 @@ class Snapper: if (not self.maxEdges) or (len(obj.Shape.Edges) <= self.maxEdges): for e in obj.Shape.Edges: # get the intersection points - pt = fcgeo.findIntersection(e,shape) + pt = DraftGeomUtils.findIntersection(e,shape) if pt: for p in pt: snaps.append([p,'intersection',p]) @@ -597,7 +595,7 @@ class Snapper: def getPerpendicular(self,edge,pt): "returns a point on an edge, perpendicular to the given point" dv = pt.sub(edge.Vertexes[0].Point) - nv = fcvec.project(dv,fcgeo.vec(edge)) + nv = DraftVecUtils.project(dv,DraftGeomUtils.vec(edge)) np = (edge.Vertexes[0].Point).add(nv) return np @@ -690,7 +688,7 @@ class Snapper: self.constraintAxis = FreeCAD.DraftWorkingPlane.axis # calculating constrained point - cdelta = fcvec.project(delta,self.constraintAxis) + cdelta = DraftVecUtils.project(delta,self.constraintAxis) npoint = self.basepoint.add(cdelta) # setting constrain line diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index ad61cf65d..bde2ad4a7 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -29,9 +29,8 @@ __url__ = "http://free-cad.sourceforge.net" # Generic stuff #--------------------------------------------------------------------------- -import os, FreeCAD, FreeCADGui, WorkingPlane, math, re, importSVG, Draft, Draft_rc +import os, FreeCAD, FreeCADGui, WorkingPlane, math, re, importSVG, Draft, Draft_rc, DraftVecUtils from functools import partial -from draftlibs import fcvec from FreeCAD import Vector from DraftGui import todo,QtCore,QtGui from DraftSnap import * @@ -283,7 +282,7 @@ class SelectPlane: self.display('side') self.finish() elif arg == "currentView": - viewDirection = fcvec.neg(self.view.getViewDirection()) + viewDirection = DraftVecUtils.neg(self.view.getViewDirection()) plane.alignToPointAndAxis(Vector(0,0,0), viewDirection, self.offset) self.display(viewDirection) self.finish() @@ -327,9 +326,8 @@ class Creator: def Activated(self,name="None"): if FreeCAD.activeDraftCommand: FreeCAD.activeDraftCommand.finish() - global Part, fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils self.ui = None self.call = None self.doc = None @@ -348,7 +346,7 @@ class Creator: self.ui.show() rot = self.view.getCameraNode().getField("orientation").getValue() upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(fcvec.neg(self.view.getViewDirection()), Vector(0,0,0), upv) + plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) self.node = [] self.pos = [] self.constrain = None @@ -721,12 +719,12 @@ class Rectangle(Creator): p1 = self.node[0] p3 = self.node[-1] diagonal = p3.sub(p1) - p2 = p1.add(fcvec.project(diagonal, plane.v)) - p4 = p1.add(fcvec.project(diagonal, plane.u)) + p2 = p1.add(DraftVecUtils.project(diagonal, plane.v)) + p4 = p1.add(DraftVecUtils.project(diagonal, plane.u)) length = p4.sub(p1).Length - if abs(fcvec.angle(p4.sub(p1),plane.u,plane.axis)) > 1: length = -length + if abs(DraftVecUtils.angle(p4.sub(p1),plane.u,plane.axis)) > 1: length = -length height = p2.sub(p1).Length - if abs(fcvec.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height + if abs(DraftVecUtils.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height p = plane.getRotation() p.move(p1) try: @@ -847,10 +845,10 @@ class Arc(Creator): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen self.ui.cross(True) - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center if hasMod(arg,MODALT): if not self.altdown: @@ -864,12 +862,12 @@ class Arc(Creator): self.ui.switchUi(False) elif (self.step == 1): # choose radius if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) if hasMod(arg,MODALT): if not self.altdown: @@ -880,20 +878,20 @@ class Arc(Creator): num = int(info['Component'].lstrip('Edge'))-1 ed = ob.Shape.Edges[num] if len(self.tangents) == 2: - cir = fcgeo.circleFrom3tan(self.tangents[0], self.tangents[1], ed) - cl = fcgeo.findClosestCircle(point,cir) + cir = DraftGeomUtils.circleFrom3tan(self.tangents[0], self.tangents[1], ed) + cl = DraftGeomUtils.findClosestCircle(point,cir) self.center = cl.Center self.rad = cl.Radius self.arctrack.setCenter(self.center) else: - self.rad = self.center.add(fcgeo.findDistance(self.center,ed).sub(self.center)).Length + self.rad = self.center.add(DraftGeomUtils.findDistance(self.center,ed).sub(self.center)).Length else: - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) else: if self.altdown: self.ui.cross(True) self.altdown = False - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) self.ui.setRadiusValue(self.rad) self.arctrack.setRadius(self.rad) # Draw constraint tracker line. @@ -907,11 +905,11 @@ class Arc(Creator): self.linetrack.p2(point) self.linetrack.on() elif (self.step == 2): # choose first angle - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if currentrad != 0: - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 - self.linetrack.p2(fcvec.scaleTo(point.sub(self.center),self.rad).add(self.center)) + self.linetrack.p2(DraftVecUtils.scaleTo(point.sub(self.center),self.rad).add(self.center)) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): self.constraintrack.p1(point) @@ -922,11 +920,11 @@ class Arc(Creator): self.ui.setRadiusValue(math.degrees(angle)) self.firstangle = angle else: # choose second angle - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if currentrad != 0: - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 - self.linetrack.p2(fcvec.scaleTo(point.sub(self.center),self.rad).add(self.center)) + self.linetrack.p2(DraftVecUtils.scaleTo(point.sub(self.center),self.rad).add(self.center)) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): self.constraintrack.p1(point) @@ -942,10 +940,10 @@ class Arc(Creator): if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center self.support = getSupport(arg) if hasMod(arg,MODALT): @@ -990,7 +988,7 @@ class Arc(Creator): self.ui.labelRadius.setText("Aperture") self.step = 3 # scale center->point vector for proper display - u = fcvec.scaleTo(point.sub(self.center), self.rad) + u = DraftVecUtils.scaleTo(point.sub(self.center), self.rad) self.arctrack.setStartAngle(self.firstangle) msg(translate("draft", "Pick aperture:\n")) else: # choose second angle @@ -1036,15 +1034,15 @@ class Arc(Creator): if (self.step == 1): self.rad = rad if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) + cir = DraftGeomUtils.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) + cir = DraftGeomUtils.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center if self.closedCircle: @@ -1061,9 +1059,9 @@ class Arc(Creator): elif (self.step == 2): self.ui.labelRadius.setText(str(translate("draft", "Aperture"))) self.firstangle = math.radians(rad) - if fcvec.equals(plane.axis, Vector(1,0,0)): u = Vector(0,self.rad,0) - else: u = fcvec.scaleTo(Vector(1,0,0).cross(plane.axis), self.rad) - urotated = fcvec.rotate(u, math.radians(rad), plane.axis) + if DraftVecUtils.equals(plane.axis, Vector(1,0,0)): u = Vector(0,self.rad,0) + else: u = DraftVecUtils.scaleTo(Vector(1,0,0).cross(plane.axis), self.rad) + urotated = DraftVecUtils.rotate(u, math.radians(rad), plane.axis) self.arctrack.setStartAngle(self.firstangle) self.step = 3 self.ui.radiusValue.setText("") @@ -1139,10 +1137,10 @@ class Polygon(Creator): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen self.ui.cross(True) - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center if hasMod(arg,MODALT): if not self.altdown: @@ -1156,12 +1154,12 @@ class Polygon(Creator): self.ui.switchUi(False) else: # choose radius if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) if hasMod(arg,MODALT): if not self.altdown: @@ -1173,20 +1171,20 @@ class Polygon(Creator): num = int(snapped['Component'].lstrip('Edge'))-1 ed = ob.Shape.Edges[num] if len(self.tangents) == 2: - cir = fcgeo.circleFrom3tan(self.tangents[0], self.tangents[1], ed) - cl = fcgeo.findClosestCircle(point,cir) + cir = DraftGeomUtils.circleFrom3tan(self.tangents[0], self.tangents[1], ed) + cl = DraftGeomUtils.findClosestCircle(point,cir) self.center = cl.Center self.rad = cl.Radius self.arctrack.setCenter(self.center) else: - self.rad = self.center.add(fcgeo.findDistance(self.center,ed).sub(self.center)).Length + self.rad = self.center.add(DraftGeomUtils.findDistance(self.center,ed).sub(self.center)).Length else: - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) else: if self.altdown: self.ui.cross(True) self.altdown = False - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) self.ui.setRadiusValue(self.rad) self.arctrack.setRadius(self.rad) # Draw constraint tracker line. @@ -1203,10 +1201,10 @@ class Polygon(Creator): if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center if not self.node: self.support = getSupport(arg) if hasMod(arg,MODALT): @@ -1265,15 +1263,15 @@ class Polygon(Creator): "this function gets called by the toolbar when valid radius have been entered there" self.rad = rad if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) + cir = DraftGeomUtils.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) + cir = DraftGeomUtils.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center self.drawPolygon() @@ -1485,7 +1483,7 @@ class Dimension(Creator): r = point.sub(self.center) self.arctrack.setRadius(r.Length) a = self.arctrack.getAngle(point) - pair = fcgeo.getBoundaryAngles(a,self.pts) + pair = DraftGeomUtils.getBoundaryAngles(a,self.pts) if not (pair[0] < a < pair[1]): self.angledata = [4*math.pi-pair[0],2*math.pi-pair[1]] else: @@ -1496,14 +1494,14 @@ class Dimension(Creator): self.altdown = False self.ui.switchUi(False) if self.dir: - point = self.node[0].add(fcvec.project(point.sub(self.node[0]),self.dir)) + point = self.node[0].add(DraftVecUtils.project(point.sub(self.node[0]),self.dir)) if len(self.node) == 2: if self.arcmode and self.edges: cen = self.edges[0].Curve.Center rad = self.edges[0].Curve.Radius baseray = point.sub(cen) - v2 = fcvec.scaleTo(baseray,rad) - v1 = fcvec.neg(v2) + v2 = DraftVecUtils.scaleTo(baseray,rad) + v1 = DraftVecUtils.neg(v2) if shift: self.node = [cen,cen.add(v2)] self.arcmode = "radius" @@ -1574,7 +1572,7 @@ class Dimension(Creator): # there is already a snapped edge, so we start angular dimension self.edges.append(ed) self.node.extend([v1,v2]) # self.node now has the 4 endpoints - c = fcgeo.findIntersection(self.node[0], + c = DraftGeomUtils.findIntersection(self.node[0], self.node[1], self.node[2], self.node[3], @@ -1593,7 +1591,7 @@ class Dimension(Creator): self.dimtrack.on() else: if self.dir: - point = self.node[0].add(fcvec.project(point.sub(self.node[0]),self.dir)) + point = self.node[0].add(DraftVecUtils.project(point.sub(self.node[0]),self.dir)) self.node.append(point) print "node",self.node self.dimtrack.update(self.node) @@ -1610,7 +1608,7 @@ class Dimension(Creator): # for unlinked arc mode: # if self.arcmode: # v = self.node[1].sub(self.node[0]) - # v = fcvec.scale(v,0.5) + # v = DraftVecUtils.scale(v,0.5) # cen = self.node[0].add(v) # self.node = [self.node[0],self.node[1],cen] self.createObject() @@ -1651,9 +1649,8 @@ class Modifier: def Activated(self,name="None"): if FreeCAD.activeDraftCommand: FreeCAD.activeDraftCommand.finish() - global Part, fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils self.ui = None self.call = None self.commitList = [] @@ -1667,7 +1664,7 @@ class Modifier: FreeCADGui.draftToolBar.show() rot = self.view.getCameraNode().getField("orientation").getValue() upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(fcvec.neg(self.view.getViewDirection()), Vector(0,0,0), upv) + plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) self.node = [] self.ui.sourceCmd = self self.constrain = None @@ -1931,10 +1928,10 @@ class Rotate(Modifier): point,ctrlPoint,info = getPoint(self,arg) self.ui.cross(True) # this is to make sure radius is what you see on screen - if self.center and fcvec.dist(point,self.center): - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center): + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if self.extendedCopy: if not hasMod(arg,MODALT): self.step = 3 @@ -1942,9 +1939,9 @@ class Rotate(Modifier): if (self.step == 0): pass elif (self.step == 1): - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if (currentrad != 0): - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 self.linetrack.p2(point) # Draw constraint tracker line. @@ -1959,16 +1956,16 @@ class Rotate(Modifier): self.ui.radiusValue.setFocus() self.ui.radiusValue.selectAll() elif (self.step == 2): - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if (currentrad != 0): - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 if (angle < self.firstangle): sweep = (2*math.pi-self.firstangle)+angle else: sweep = angle - self.firstangle self.arctrack.setApertureAngle(sweep) - self.ghost.trans.rotation.setValue(coin.SbVec3f(fcvec.tup(plane.axis)),sweep) + self.ghost.trans.rotation.setValue(coin.SbVec3f(DraftVecUtils.tup(plane.axis)),sweep) self.linetrack.p2(point) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): @@ -1984,9 +1981,9 @@ class Rotate(Modifier): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) - if self.center and fcvec.dist(point,self.center): - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center): + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): self.center = point self.node = [point] @@ -2002,16 +1999,16 @@ class Rotate(Modifier): self.planetrack.set(point) elif (self.step == 1): self.ui.labelRadius.setText("Rotation") - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) self.arctrack.on() self.arctrack.setStartPoint(point) self.ghost.on() self.step = 2 msg(translate("draft", "Pick rotation angle:\n")) else: - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) angle = point.sub(self.center).getAngle(plane.u) - if fcvec.project(point.sub(self.center), plane.v).getAngle(plane.v) > 1: + if DraftVecUtils.project(point.sub(self.center), plane.v).getAngle(plane.v) > 1: angle = -angle if (angle < self.firstangle): sweep = (2*math.pi-self.firstangle)+angle @@ -2127,33 +2124,33 @@ class Offset(Modifier): self.ui.cross(True) point,ctrlPoint,info = getPoint(self,arg) if hasMod(arg,MODCONSTRAIN) and self.constrainSeg: - dist = fcgeo.findPerpendicular(point,self.shape,self.constrainSeg[1]) + dist = DraftGeomUtils.findPerpendicular(point,self.shape,self.constrainSeg[1]) e = self.shape.Edges[self.constrainSeg[1]] self.constraintrack.p1(e.Vertexes[0].Point) self.constraintrack.p2(point.add(dist[0])) self.constraintrack.on() else: - dist = fcgeo.findPerpendicular(point,self.shape.Edges) + dist = DraftGeomUtils.findPerpendicular(point,self.shape.Edges) self.constraintrack.off() if dist: self.ghost.on() if self.mode == "Wire": - d = fcvec.neg(dist[0]) - v1 = fcgeo.getTangent(self.shape.Edges[0],point) - v2 = fcgeo.getTangent(self.shape.Edges[dist[1]],point) - a = -fcvec.angle(v1,v2) - self.dvec = fcvec.rotate(d,a,plane.axis) + d = DraftVecUtils.neg(dist[0]) + v1 = DraftGeomUtils.getTangent(self.shape.Edges[0],point) + v2 = DraftGeomUtils.getTangent(self.shape.Edges[dist[1]],point) + a = -DraftVecUtils.angle(v1,v2) + self.dvec = DraftVecUtils.rotate(d,a,plane.axis) occmode = self.ui.occOffset.isChecked() - self.ghost.update(fcgeo.offsetWire(self.shape,self.dvec,occ=occmode),forceclosed=occmode) + self.ghost.update(DraftGeomUtils.offsetWire(self.shape,self.dvec,occ=occmode),forceclosed=occmode) elif self.mode == "BSpline": - d = fcvec.neg(dist[0]) + d = DraftVecUtils.neg(dist[0]) e = self.shape.Edges[0] - basetan = fcgeo.getTangent(e,point) + basetan = DraftGeomUtils.getTangent(e,point) self.npts = [] for p in self.sel.Points: - currtan = fcgeo.getTangent(e,p) - a = -fcvec.angle(currtan,basetan) - self.dvec = fcvec.rotate(d,a,plane.axis) + currtan = DraftGeomUtils.getTangent(e,p) + a = -DraftVecUtils.angle(currtan,basetan) + self.dvec = DraftVecUtils.rotate(d,a,plane.axis) self.npts.append(p.add(self.dvec)) self.ghost.update(self.npts) elif self.mode == "Circle": @@ -2329,12 +2326,12 @@ class Upgrade(Modifier): u = faces.pop(0) for f in faces: u = u.fuse(f) - if fcgeo.isCoplanar(faces): + if DraftGeomUtils.isCoplanar(faces): if self.sel[0].ViewObject.DisplayMode == "Wireframe": f = False else: f = True - u = fcgeo.concatenate(u) + u = DraftGeomUtils.concatenate(u) if not curves: # several coplanar and non-curved faces: they can becoem a Draft wire msg(translate("draft", "Found several objects or faces: making a parametric face\n")) @@ -2384,7 +2381,7 @@ class Upgrade(Modifier): else: # only closed wires for w in wires: - if fcgeo.isPlanar(w): + if DraftGeomUtils.isPlanar(w): f = Part.Face(w) faces.append(f) else: @@ -2405,7 +2402,7 @@ class Upgrade(Modifier): edges = openwires[0].Edges if len(edges) > 1: edges.append(Part.Line(p1,p0).toShape()) - w = Part.Wire(fcgeo.sortEdges(edges)) + w = Part.Wire(DraftGeomUtils.sortEdges(edges)) if len(edges) == 1: if len(w.Vertexes) == 2: msg(translate("draft", "Found 1 open edge: making a line\n")) @@ -2433,7 +2430,7 @@ class Upgrade(Modifier): for e in ob.Shape.Edges: edges.append(e) newob = None - nedges = fcgeo.sortEdges(edges[:]) + nedges = DraftGeomUtils.sortEdges(edges[:]) # for e in nedges: print "debug: ",e.Curve,e.Vertexes[0].Point,e.Vertexes[-1].Point w = Part.Wire(nedges) if len(w.Edges) == len(edges): @@ -2643,7 +2640,7 @@ class Trimex(Modifier): self.extrudeMode = False if self.obj.Shape.Wires: self.edges = self.obj.Shape.Wires[0].Edges - self.edges = fcgeo.sortEdges(self.edges) + self.edges = DraftGeomUtils.sortEdges(self.edges) else: self.edges = self.obj.Shape.Edges self.ghost = [] @@ -2707,7 +2704,7 @@ class Trimex(Modifier): "redraws the ghost in extrude mode" self.newpoint = self.obj.Shape.Faces[0].CenterOfMass dvec = self.point.sub(self.newpoint) - if not shift: delta = fcvec.project(dvec,self.normal) + if not shift: delta = DraftVecUtils.project(dvec,self.normal) else: delta = dvec if self.force: ratio = self.force/delta.Length @@ -2733,7 +2730,7 @@ class Trimex(Modifier): for e in self.edges: vlist.append(e.Vertexes[0].Point) vlist.append(self.edges[-1].Vertexes[-1].Point) if shift: npoint = self.activePoint - else: npoint = fcgeo.findClosest(point,vlist) + else: npoint = DraftGeomUtils.findClosest(point,vlist) if npoint > len(self.edges)/2: reverse = True if alt: reverse = not reverse self.activePoint = npoint @@ -2758,16 +2755,16 @@ class Trimex(Modifier): snapped = self.doc.getObject(snapped['Object']) pts = [] for e in snapped.Shape.Edges: - int = fcgeo.findIntersection(edge,e,True,True) + int = DraftGeomUtils.findIntersection(edge,e,True,True) if int: pts.extend(int) if pts: - point = pts[fcgeo.findClosest(point,pts)] + point = pts[DraftGeomUtils.findClosest(point,pts)] # modifying active edge if isinstance(edge.Curve,Part.Line): - perp = fcgeo.vec(edge).cross(Vector(0,0,1)) + perp = DraftGeomUtils.vec(edge).cross(Vector(0,0,1)) chord = v1.sub(point) - proj = fcvec.project(chord,perp) + proj = DraftVecUtils.project(chord,perp) self.newpoint = Vector.add(point,proj) dist = v1.sub(self.newpoint).Length ghost.p1(self.newpoint) @@ -2776,15 +2773,15 @@ class Trimex(Modifier): if real: if self.force: ray = self.newpoint.sub(v1) - ray = fcvec.scale(ray,self.force/ray.Length) + ray = DraftVecUtils.scale(ray,self.force/ray.Length) self.newpoint = Vector.add(v1,ray) newedges.append(Part.Line(self.newpoint,v2).toShape()) else: center = edge.Curve.Center rad = edge.Curve.Radius - ang1 = fcvec.angle(v2.sub(center)) - ang2 = fcvec.angle(point.sub(center)) - self.newpoint=Vector.add(center,fcvec.rotate(Vector(rad,0,0),-ang2)) + ang1 = DraftVecUtils.angle(v2.sub(center)) + ang2 = DraftVecUtils.angle(point.sub(center)) + self.newpoint=Vector.add(center,DraftVecUtils.rotate(Vector(rad,0,0),-ang2)) self.ui.labelRadius.setText("Angle") dist = math.degrees(-ang2) # if ang1 > ang2: ang1,ang2 = ang2,ang1 @@ -2796,11 +2793,11 @@ class Trimex(Modifier): if real: if self.force: angle = math.radians(self.force) - newray = fcvec.rotate(Vector(rad,0,0),-angle) + newray = DraftVecUtils.rotate(Vector(rad,0,0),-angle) self.newpoint = Vector.add(center,newray) chord = self.newpoint.sub(v2) perp = chord.cross(Vector(0,0,1)) - scaledperp = fcvec.scaleTo(perp,rad) + scaledperp = DraftVecUtils.scaleTo(perp,rad) midpoint = Vector.add(center,scaledperp) newedges.append(Part.Arc(self.newpoint,midpoint,v2).toShape()) ghost.on() @@ -2815,8 +2812,8 @@ class Trimex(Modifier): ghost.p1(edge.Vertexes[0].Point) ghost.p2(edge.Vertexes[-1].Point) else: - ang1 = fcvec.angle(edge.Vertexes[0].Point.sub(center)) - ang2 = fcvec.angle(edge.Vertexes[-1].Point.sub(center)) + ang1 = DraftVecUtils.angle(edge.Vertexes[0].Point.sub(center)) + ang2 = DraftVecUtils.angle(edge.Vertexes[-1].Point.sub(center)) # if ang1 > ang2: ang1,ang2 = ang2,ang1 ghost.setEndAngle(-ang2) ghost.setStartAngle(-ang1) @@ -2961,7 +2958,7 @@ class Scale(Modifier): self.ghost.trans.scaleFactor.setValue([delta.x,delta.y,delta.z]) corr = Vector(self.node[0].x,self.node[0].y,self.node[0].z) corr.scale(delta.x,delta.y,delta.z) - corr = fcvec.neg(corr.sub(self.node[0])) + corr = DraftVecUtils.neg(corr.sub(self.node[0])) self.ghost.trans.translation.setValue([corr.x,corr.y,corr.z]) if self.extendedCopy: if not hasMod(arg,MODALT): self.finish() @@ -3166,9 +3163,9 @@ class Edit(Modifier): self.editpoints.append(self.obj.Shape.Vertexes[2].Point) v = self.obj.Shape.Vertexes self.bx = v[1].Point.sub(v[0].Point) - if self.obj.Length < 0: self.bx = fcvec.neg(self.bx) + if self.obj.Length < 0: self.bx = DraftVecUtils.neg(self.bx) self.by = v[2].Point.sub(v[1].Point) - if self.obj.Height < 0: self.by = fcvec.neg(self.by) + if self.obj.Height < 0: self.by = DraftVecUtils.neg(self.by) elif Draft.getType(self.obj) == "Polygon": self.editpoints.append(self.obj.Placement.Base) self.editpoints.append(self.obj.Shape.Vertexes[0].Point) @@ -3292,8 +3289,8 @@ class Edit(Modifier): self.obj.Placement = p elif self.editing == 1: diag = v.sub(self.obj.Placement.Base) - nx = fcvec.project(diag,self.bx) - ny = fcvec.project(diag,self.by) + nx = DraftVecUtils.project(diag,self.bx) + ny = DraftVecUtils.project(diag,self.by) ax = nx.Length ay = ny.Length if ax and ay: diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 3cc6519d1..5223ebf66 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -25,18 +25,16 @@ __title__="FreeCAD Draft Trackers" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -import FreeCAD,FreeCADGui,math,Draft +import FreeCAD,FreeCADGui,math,Draft, DraftVecUtils from FreeCAD import Vector -from draftlibs import fcvec from pivy import coin from DraftGui import todo class Tracker: "A generic Draft Tracker, to be used by other specific trackers" def __init__(self,dotted=False,scolor=None,swidth=None,children=[],ontop=False): - global Part, fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils self.ontop = ontop color = coin.SoBaseColor() color.rgb = scolor or FreeCADGui.draftToolBar.getDefaultColor("ui") @@ -161,8 +159,8 @@ class rectangleTracker(Tracker): def update(self,point): "sets the opposite (diagonal) point of the rectangle" diagonal = point.sub(self.origin) - inpoint1 = self.origin.add(fcvec.project(diagonal,self.v)) - inpoint2 = self.origin.add(fcvec.project(diagonal,self.u)) + inpoint1 = self.origin.add(DraftVecUtils.project(diagonal,self.v)) + inpoint2 = self.origin.add(DraftVecUtils.project(diagonal,self.u)) self.coords.point.set1Value(1,inpoint1.x,inpoint1.y,inpoint1.z) self.coords.point.set1Value(2,point.x,point.y,point.z) self.coords.point.set1Value(3,inpoint2.x,inpoint2.y,inpoint2.z) @@ -204,7 +202,7 @@ class rectangleTracker(Tracker): p1 = Vector(self.coords.point.getValues()[0].getValue()) p2 = Vector(self.coords.point.getValues()[2].getValue()) diag = p2.sub(p1) - return ((fcvec.project(diag,self.u)).Length,(fcvec.project(diag,self.v)).Length) + return ((DraftVecUtils.project(diag,self.u)).Length,(DraftVecUtils.project(diag,self.v)).Length) def getNormal(self): "returns the normal of the rectangle" @@ -233,23 +231,23 @@ class dimTracker(Tracker): def calc(self): import Part if (self.p1 != None) and (self.p2 != None): - points = [fcvec.tup(self.p1,True),fcvec.tup(self.p2,True),\ - fcvec.tup(self.p1,True),fcvec.tup(self.p2,True)] + points = [DraftVecUtils.tup(self.p1,True),DraftVecUtils.tup(self.p2,True),\ + DraftVecUtils.tup(self.p1,True),DraftVecUtils.tup(self.p2,True)] if self.p3 != None: p1 = self.p1 p4 = self.p2 - if fcvec.equals(p1,p4): + if DraftVecUtils.equals(p1,p4): proj = None else: base = Part.Line(p1,p4).toShape() - proj = fcgeo.findDistance(self.p3,base) + proj = DraftGeomUtils.findDistance(self.p3,base) if not proj: p2 = p1 p3 = p4 else: - p2 = p1.add(fcvec.neg(proj)) - p3 = p4.add(fcvec.neg(proj)) - points = [fcvec.tup(p1),fcvec.tup(p2),fcvec.tup(p3),fcvec.tup(p4)] + p2 = p1.add(DraftVecUtils.neg(proj)) + p3 = p4.add(DraftVecUtils.neg(proj)) + points = [DraftVecUtils.tup(p1),DraftVecUtils.tup(p2),DraftVecUtils.tup(p3),DraftVecUtils.tup(p4)] self.coords.point.setValues(0,4,points) class bsplineTracker(Tracker): @@ -340,7 +338,7 @@ class arcTracker(Tracker): center = Vector(c[0],c[1],c[2]) base = FreeCAD.DraftWorkingPlane.u rad = pt.sub(center) - return(fcvec.angle(rad,base,FreeCAD.DraftWorkingPlane.axis)) + return(DraftVecUtils.angle(rad,base,FreeCAD.DraftWorkingPlane.axis)) def getAngles(self): "returns the start and end angles" @@ -496,7 +494,7 @@ class wireTracker(Tracker): "A wire tracker" def __init__(self,wire): self.line = coin.SoLineSet() - self.closed = fcgeo.isReallyClosed(wire) + self.closed = DraftGeomUtils.isReallyClosed(wire) if self.closed: self.line.numVertices.setValue(len(wire.Vertexes)+1) else: @@ -626,11 +624,11 @@ class gridTracker(Tracker): "returns the closest node from the given point" # get the 2D coords. point = FreeCAD.DraftWorkingPlane.projectPoint(point) - u = fcvec.project(point,FreeCAD.DraftWorkingPlane.u) + u = DraftVecUtils.project(point,FreeCAD.DraftWorkingPlane.u) lu = u.Length if u.getAngle(FreeCAD.DraftWorkingPlane.u) > 1.5: lu = -lu - v = fcvec.project(point,FreeCAD.DraftWorkingPlane.v) + v = DraftVecUtils.project(point,FreeCAD.DraftWorkingPlane.v) lv = v.Length if v.getAngle(FreeCAD.DraftWorkingPlane.v) > 1.5: lv = -lv @@ -659,8 +657,7 @@ class boxTracker(Tracker): Tracker.__init__(self,children=[self.trans,m,self.cube]) def update(self,line=None,normal=None): - import WorkingPlane - from draftlibs import fcgeo + import WorkingPlane, DraftGeomUtils if not normal: normal = FreeCAD.DraftWorkingPlane.axis if line: @@ -668,10 +665,10 @@ class boxTracker(Tracker): bp = line[0] lvec = line[1].sub(line[0]) else: - lvec = fcgeo.vec(line.Shape.Edges[0]) + lvec = DraftGeomUtils.vec(line.Shape.Edges[0]) bp = line.Shape.Edges[0].Vertexes[0].Point elif self.baseline: - lvec = fcgeo.vec(self.baseline.Shape.Edges[0]) + lvec = DraftGeomUtils.vec(self.baseline.Shape.Edges[0]) bp = self.baseline.Shape.Edges[0].Vertexes[0].Point else: return @@ -679,12 +676,12 @@ class boxTracker(Tracker): self.cube.width.setValue(lvec.Length) p = WorkingPlane.getPlacementFromPoints([bp,bp.add(lvec),bp.add(right)]) self.trans.rotation.setValue(p.Rotation.Q) - bp = bp.add(fcvec.scale(lvec,0.5)) - bp = bp.add(fcvec.scaleTo(normal,self.cube.depth.getValue()/2)) + bp = bp.add(DraftVecUtils.scale(lvec,0.5)) + bp = bp.add(DraftVecUtils.scaleTo(normal,self.cube.depth.getValue()/2)) self.pos(bp) def pos(self,p): - self.trans.translation.setValue(fcvec.tup(p)) + self.trans.translation.setValue(DraftVecUtils.tup(p)) def width(self,w=None): if w: diff --git a/src/Mod/Draft/draftlibs/fcvec.py b/src/Mod/Draft/DraftVecUtils.py similarity index 100% rename from src/Mod/Draft/draftlibs/fcvec.py rename to src/Mod/Draft/DraftVecUtils.py diff --git a/src/Mod/Draft/Makefile.am b/src/Mod/Draft/Makefile.am index 2502ec4d2..f93f64cfe 100644 --- a/src/Mod/Draft/Makefile.am +++ b/src/Mod/Draft/Makefile.am @@ -13,6 +13,8 @@ data_DATA = \ DraftGui.py \ DraftSnap.py \ DraftTrackers.py \ + DraftVecUtils.py \ + DraftGeomUtils.py \ WorkingPlane.py \ importOCA.py \ importDXF.py \ @@ -28,8 +30,6 @@ nobase_data_DATA = \ draftlibs/dxfImportObjects.py \ draftlibs/dxfLibrary.py \ draftlibs/dxfReader.py \ - draftlibs/fcvec.py \ - draftlibs/fcgeo.py \ draftlibs/__init__.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Draft/WorkingPlane.py b/src/Mod/Draft/WorkingPlane.py index b722f22ff..e41eaabf7 100644 --- a/src/Mod/Draft/WorkingPlane.py +++ b/src/Mod/Draft/WorkingPlane.py @@ -22,9 +22,8 @@ #*************************************************************************** -import FreeCAD, FreeCADGui, math +import FreeCAD, FreeCADGui, math, DraftVecUtils from FreeCAD import Vector -from draftlibs import fcvec __title__="FreeCAD Working Plane utility" __author__ = "Ken Cline" @@ -51,7 +50,7 @@ class plane: self.stored = None def __repr__(self): - return "Workplane x="+str(fcvec.rounded(self.u))+" y="+str(fcvec.rounded(self.v))+" z="+str(fcvec.rounded(self.axis)) + return "Workplane x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis)) def offsetToPoint(self, p, direction=None): ''' @@ -96,10 +95,10 @@ class plane: self.doc = FreeCAD.ActiveDocument self.axis = axis; self.axis.normalize() - if (fcvec.equals(axis, Vector(1,0,0))): + if (DraftVecUtils.equals(axis, Vector(1,0,0))): self.u = Vector(0,1,0) self.v = Vector(0,0,1) - elif (fcvec.equals(axis, Vector(-1,0,0))): + elif (DraftVecUtils.equals(axis, Vector(-1,0,0))): self.u = Vector(0,-1,0) self.v = Vector(0,0,1) elif upvec: @@ -109,12 +108,12 @@ class plane: else: self.v = axis.cross(Vector(1,0,0)) self.v.normalize() - self.u = fcvec.rotate(self.v, -math.pi/2, self.axis) + self.u = DraftVecUtils.rotate(self.v, -math.pi/2, self.axis) offsetVector = Vector(axis); offsetVector.multiply(offset) self.position = point.add(offsetVector) self.weak = False # FreeCAD.Console.PrintMessage("(position = " + str(self.position) + ")\n") - # FreeCAD.Console.PrintMessage("Current workplane: x="+str(fcvec.rounded(self.u))+" y="+str(fcvec.rounded(self.v))+" z="+str(fcvec.rounded(self.axis))+"\n") + # FreeCAD.Console.PrintMessage("Current workplane: x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis))+"\n") def alignToCurve(self, shape, offset): if shape.ShapeType == 'Edge': @@ -162,7 +161,7 @@ class plane: def getRotation(self): "returns a placement describing the working plane orientation ONLY" - m = fcvec.getPlaneRotation(self.u,self.v,self.axis) + m = DraftVecUtils.getPlaneRotation(self.u,self.v,self.axis) return FreeCAD.Placement(m) def getPlacement(self): @@ -197,15 +196,15 @@ class plane: def getLocalCoords(self,point): "returns the coordinates of a given point on the working plane" - xv = fcvec.project(point,self.u) + xv = DraftVecUtils.project(point,self.u) x = xv.Length if xv.getAngle(self.u) > 1: x = -x - yv = fcvec.project(point,self.v) + yv = DraftVecUtils.project(point,self.v) y = yv.Length if yv.getAngle(self.v) > 1: y = -y - zv = fcvec.project(point,self.axis) + zv = DraftVecUtils.project(point,self.axis) z = zv.Length if zv.getAngle(self.axis) > 1: z = -z @@ -213,9 +212,9 @@ class plane: def getGlobalCoords(self,point): "returns the global coordinates of the given point, taken relatively to this working plane" - vx = fcvec.scale(self.u,point.x) - vy = fcvec.scale(self.v,point.y) - vz = fcvec.scale(self.axis,point.z) + vx = DraftVecUtils.scale(self.u,point.x) + vy = DraftVecUtils.scale(self.v,point.y) + vz = DraftVecUtils.scale(self.axis,point.z) return (vx.add(vy)).add(vz) def getClosestAxis(self,point): @@ -223,9 +222,9 @@ class plane: ax = point.getAngle(self.u) ay = point.getAngle(self.v) az = point.getAngle(self.axis) - bx = point.getAngle(fcvec.neg(self.u)) - by = point.getAngle(fcvec.neg(self.v)) - bz = point.getAngle(fcvec.neg(self.axis)) + bx = point.getAngle(DraftVecUtils.neg(self.u)) + by = point.getAngle(DraftVecUtils.neg(self.v)) + bz = point.getAngle(DraftVecUtils.neg(self.axis)) b = min(ax,ay,az,bx,by,bz) if b in [ax,bx]: return "x" diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 2c0474f8e..f71e10166 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -40,8 +40,8 @@ lines, polylines, lwpolylines, circles, arcs, texts, colors,layers (from groups) ''' -import FreeCAD, os, Part, math, re, string, Mesh, Draft -from draftlibs import fcvec, dxfColorMap, dxfLibrary, fcgeo +import FreeCAD, os, Part, math, re, string, Mesh, Draft, DraftVecUtils, DraftGeomUtils +from draftlibs import dxfColorMap, dxfLibrary from draftlibs.dxfReader import readDXF from Draft import _Dimension, _ViewProviderDimension from FreeCAD import Vector @@ -134,10 +134,10 @@ def calcBulge(v1,bulge,v2): ''' chord = v2.sub(v1) sagitta = (bulge * chord.Length)/2 - startpoint = v1.add(fcvec.scale(chord,0.5)) + startpoint = v1.add(DraftVecUtils.scale(chord,0.5)) perp = chord.cross(Vector(0,0,1)) - if not fcvec.isNull(perp): perp.normalize() - endpoint = fcvec.scale(perp,sagitta) + if not DraftVecUtils.isNull(perp): perp.normalize() + endpoint = DraftVecUtils.scale(perp,sagitta) return startpoint.add(endpoint) def getGroup(ob,exportList): @@ -218,7 +218,7 @@ class fcformat: v1 = FreeCAD.Vector(r1,g1,b1) v2 = FreeCAD.Vector(r2,g2,b2) v = v2.sub(v1) - v = fcvec.scale(v,0.5) + v = DraftVecUtils.scale(v,0.5) cv = v1.add(v) else: c1 = bparams.GetUnsigned("BackgroundColor") @@ -348,7 +348,7 @@ def drawLine(line,shapemode=False): if (len(line.points) > 1): v1=vec(line.points[0]) v2=vec(line.points[1]) - if not fcvec.equals(v1,v2): + if not DraftVecUtils.equals(v1,v2): try: if (fmt.paramstyle >= 4) and (not shapemode): return Draft.makeWire([v1,v2]) @@ -370,11 +370,11 @@ def drawPolyline(polyline,shapemode=False,num=None): v1 = vec(p1) v2 = vec(p2) verts.append(v1) - if not fcvec.equals(v1,v2): + if not DraftVecUtils.equals(v1,v2): if polyline.points[p].bulge: curves = True cv = calcBulge(v1,polyline.points[p].bulge,v2) - if fcvec.isColinear([v1,cv,v2]): + if DraftVecUtils.isColinear([v1,cv,v2]): try: edges.append(Part.Line(v1,v2).toShape()) except: warn(polyline,num) else: @@ -390,8 +390,8 @@ def drawPolyline(polyline,shapemode=False,num=None): v1 = vec(p1) v2 = vec(p2) cv = calcBulge(v1,polyline.points[-1].bulge,v2) - if not fcvec.equals(v1,v2): - if fcvec.isColinear([v1,cv,v2]): + if not DraftVecUtils.equals(v1,v2): + if DraftVecUtils.isColinear([v1,cv,v2]): try: edges.append(Part.Line(v1,v2).toShape()) except: @@ -722,11 +722,11 @@ def addText(text,attrib=False): rz = rawValue(text,31) if rx or ry or rz: xv = Vector(rx,ry,rz) - if not fcvec.isNull(xv): - ax = fcvec.neg(xv.cross(Vector(1,0,0))) - if fcvec.isNull(ax): + if not DraftVecUtils.isNull(xv): + ax = DraftVecUtils.neg(xv.cross(Vector(1,0,0))) + if DraftVecUtils.isNull(ax): ax = Vector(0,0,1) - ang = -math.degrees(fcvec.angle(xv,Vector(1,0,0),ax)) + ang = -math.degrees(DraftVecUtils.angle(xv,Vector(1,0,0),ax)) Draft.rotate(newob,ang,axis=ax) elif hasattr(text,"rotation"): if text.rotation: @@ -885,7 +885,7 @@ def processdxf(document,filename): edges = [] for s in shapes: edges.extend(s.Edges) - shapes = fcgeo.findWires(edges) + shapes = DraftGeomUtils.findWires(edges) for s in shapes: newob = addObject(s) @@ -1198,13 +1198,13 @@ def getArcData(edge): # check the midpoint seems more reliable ve1 = edge.Vertexes[0].Point ve2 = edge.Vertexes[-1].Point - ang1 = -math.degrees(fcvec.angle(ve1.sub(ce))) - ang2 = -math.degrees(fcvec.angle(ve2.sub(ce))) - ve3 = fcgeo.findMidpoint(edge) - ang3 = -math.degrees(fcvec.angle(ve3.sub(ce))) + ang1 = -math.degrees(DraftVecUtils.angle(ve1.sub(ce))) + ang2 = -math.degrees(DraftVecUtils.angle(ve2.sub(ce))) + ve3 = DraftGeomUtils.findMidpoint(edge) + ang3 = -math.degrees(DraftVecUtils.angle(ve3.sub(ce))) if (ang3 < ang1) and (ang2 < ang3): ang1, ang2 = ang2, ang1 - return fcvec.tup(ce), radius, ang1, ang2 + return DraftVecUtils.tup(ce), radius, ang1, ang2 def getSplineSegs(edge): "returns an array of vectors from a bSpline edge" @@ -1228,18 +1228,18 @@ def getSplineSegs(edge): def getWire(wire,nospline=False): "returns an array of dxf-ready points and bulges from a wire" - edges = fcgeo.sortEdges(wire.Edges) + edges = DraftGeomUtils.sortEdges(wire.Edges) points = [] for edge in edges: v1 = edge.Vertexes[0].Point if len(edge.Vertexes) < 2: points.append((v1.x,v1.y,v1.z,None,None,0.0)) elif (isinstance(edge.Curve,Part.Circle)): - mp = fcgeo.findMidpoint(edge) + mp = DraftGeomUtils.findMidpoint(edge) v2 = edge.Vertexes[-1].Point c = edge.Curve.Center - angle = abs(fcvec.angle(v1.sub(c),v2.sub(c))) - # if (fcvec.angle(v2.sub(c)) < fcvec.angle(v1.sub(c))): + angle = abs(DraftVecUtils.angle(v1.sub(c),v2.sub(c))) + # if (DraftVecUtils.angle(v2.sub(c)) < DraftVecUtils.angle(v1.sub(c))): # angle = -angle # polyline bulge -> negative makes the arc go clockwise bul = math.tan(angle/4) @@ -1259,9 +1259,9 @@ def getWire(wire,nospline=False): points.append((p.x,p.y,p.z,None,None,0.0)) else: points.append((v1.x,v1.y,v1.z,None,None,0.0)) - if not fcgeo.isReallyClosed(wire): + if not DraftGeomUtils.isReallyClosed(wire): v = edges[-1].Vertexes[-1].Point - points.append(fcvec.tup(v)) + points.append(DraftVecUtils.tup(v)) # print "wire verts: ",points return points @@ -1289,7 +1289,7 @@ def writeShape(ob,dxfobject,nospline=False): layer=getGroup(ob,exportList))) else: dxfobject.append(dxfLibrary.PolyLine(getWire(wire,nospline), [0.0,0.0,0.0], - int(fcgeo.isReallyClosed(wire)), color=getACI(ob), + int(DraftGeomUtils.isReallyClosed(wire)), color=getACI(ob), layer=getGroup(ob,exportList))) if len(processededges) < len(ob.Shape.Edges): # lone edges loneedges = [] @@ -1318,7 +1318,7 @@ def writeShape(ob,dxfobject,nospline=False): else: # anything else is treated as lines ve1=edge.Vertexes[0].Point ve2=edge.Vertexes[1].Point - dxfobject.append(dxfLibrary.Line([fcvec.tup(ve1), fcvec.tup(ve2)], + dxfobject.append(dxfLibrary.Line([DraftVecUtils.tup(ve1), DraftVecUtils.tup(ve2)], color=getACI(ob), layer=getGroup(ob,exportList))) @@ -1377,7 +1377,7 @@ def export(objectslist,filename,nospline=False): # temporary - as dxfLibrary doesn't support mtexts well, we use several single-line texts # well, anyway, at the moment, Draft only writes single-line texts, so... for text in ob.LabelText: - point = fcvec.tup(FreeCAD.Vector(ob.Position.x, + point = DraftVecUtils.tup(FreeCAD.Vector(ob.Position.x, ob.Position.y-ob.LabelText.index(text), ob.Position.z)) if gui: height = float(ob.ViewObject.FontSize) @@ -1388,14 +1388,14 @@ def export(objectslist,filename,nospline=False): layer=getGroup(ob,exportList))) elif 'Dimline' in ob.PropertiesList: - p1 = fcvec.tup(ob.Start) - p2 = fcvec.tup(ob.End) + p1 = DraftVecUtils.tup(ob.Start) + p2 = DraftVecUtils.tup(ob.End) base = Part.Line(ob.Start,ob.End).toShape() - proj = fcgeo.findDistance(ob.Dimline,base) + proj = DraftGeomUtils.findDistance(ob.Dimline,base) if not proj: - pbase = fcvec.tup(ob.End) + pbase = DraftVecUtils.tup(ob.End) else: - pbase = fcvec.tup(ob.End.add(fcvec.neg(proj))) + pbase = DraftVecUtils.tup(ob.End.add(DraftVecUtils.neg(proj))) dxf.append(dxfLibrary.Dimension(pbase,p1,p2,color=getACI(ob), layer=getGroup(ob,exportList))) diff --git a/src/Mod/Draft/importOCA.py b/src/Mod/Draft/importOCA.py index 58131d830..79e769aa2 100644 --- a/src/Mod/Draft/importOCA.py +++ b/src/Mod/Draft/importOCA.py @@ -29,8 +29,7 @@ __url__ = ["http://yorik.orgfree.com","http://free-cad.sourceforge.net"] This script imports OCA/gcad files into FreeCAD. ''' -import FreeCAD, os, Part, math -from draftlibs import fcvec, fcgeo +import FreeCAD, os, Part, math, DraftVecUtils, DraftGeomUtils from FreeCAD import Vector try: import FreeCADGui @@ -56,7 +55,7 @@ def getpoint(data): if (data[1][0] == "R"): return objects[data[0]].add(objects[data[1]]) elif (data[1][0] == "C"): - return fcgeo.findProjection(objects[data[0]],objects[data[1]]) + return DraftGeomUtils.findProjection(objects[data[0]],objects[data[1]]) elif (data[0][0] == "C"): if objects[data[0]]: p1 = objects[data[0]].Curve.Position @@ -65,7 +64,7 @@ def getpoint(data): else: if (data[1][0] == "L"): l = objects[data[1]] - return p1.add(fcgeo.vec(l)) + return p1.add(DraftGeomUtils.vec(l)) def getarea(data): "turns an OCA area definition into a FreeCAD Part Wire" @@ -111,7 +110,7 @@ def getarc(data): c = Part.Circle() c.Center = verts[0] if rad: c.Radius = rad - else: c.Radius = fcvec.new(verts[0],verts[1]).Length + else: c.Radius = DraftVecUtils.new(verts[0],verts[1]).Length elif (data[0][0] == "L"): # 2-lines circle lines = [] @@ -121,7 +120,7 @@ def getarc(data): rad = float(data[p+1]) elif (data[p][0] == "L"): lines.append(objects[data[p]]) - circles = fcgeo.circleFrom2LinesRadius(lines[0],lines[1],rad) + circles = DraftGeomUtils.circleFrom2LinesRadius(lines[0],lines[1],rad) if circles: c = circles[0] if c: return c.toShape() @@ -268,7 +267,7 @@ def export(exportList,filename): oca.write("C"+str(count)+"=ARC ") oca.write(writepoint(e.Vertexes[0].Point)) oca.write(" ") - oca.write(writepoint(fcgeo.findMidpoint(e))) + oca.write(writepoint(DraftGeomUtils.findMidpoint(e))) oca.write(" ") oca.write(writepoint(e.Vertexes[-1].Point)) else: diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index b49d4735c..099041d0a 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -38,9 +38,7 @@ currently unsupported: use, image # implement inherting fill style from group # handle relative units -import xml.sax, string, FreeCAD, os, math, re, Draft -from draftlibs import fcvec -from draftlibs import fcgeo +import xml.sax, string, FreeCAD, os, math, re, Draft, DraftVecUtils, DraftGeomUtils from FreeCAD import Vector try: import FreeCADGui @@ -271,7 +269,7 @@ def makewire(path,checkclosed=False,donttry=False): #ToDo Do not catch all exceptions if not donttry: try: - sh = Part.Wire(fcgeo.sortEdges(path)) + sh = Part.Wire(DraftGeomUtils.sortEdges(path)) #sh = Part.Wire(path) isok = (not checkclosed) or sh.isClosed() except:# BRep_API:command not done @@ -334,13 +332,13 @@ def arcend2center(lastvec,currentvec,rx,ry,xrotation=0.0,correction=False): m2=FreeCAD.Matrix() m2.rotateZ(xrotation) centeroff = currentvec.add(lastvec) - centeroff = fcvec.scale(centeroff,.5) + centeroff = DraftVecUtils.scale(centeroff,.5) vcenter = m2.multiply(vcx1).add(centeroff) # Step3 F.6.5.3 #angle1 = Vector(1,0,0).getAngle(Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0)) # F.6.5.5 #angledelta = Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0).getAngle(Vector((-v1.x-vcx1.x)/rx,(-v1.y-vcx1.y)/ry,0)) # F.6.5.6 #we need the right sign for the angle - angle1 = fcvec.angle(Vector(1,0,0),Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0)) # F.6.5.5 - angledelta = fcvec.angle(Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0),Vector((-v1.x-vcx1.x)/rx,(-v1.y-vcx1.y)/ry,0)) # F.6.5.6 + angle1 = DraftVecUtils.angle(Vector(1,0,0),Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0)) # F.6.5.5 + angledelta = DraftVecUtils.angle(Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0),Vector((-v1.x-vcx1.x)/rx,(-v1.y-vcx1.y)/ry,0)) # F.6.5.6 results.append((vcenter,angle1,angledelta)) return results,(rx,ry) @@ -558,7 +556,7 @@ class svgHandler(xml.sax.ContentHandler): currentvec = lastvec.add(Vector(x,-y,0)) else: currentvec = Vector(x,-y,0) - if not fcvec.equals(lastvec,currentvec): + if not DraftVecUtils.equals(lastvec,currentvec): seg = Part.Line(lastvec,currentvec).toShape() FreeCAD.Console.PrintMessage("line %s %s\n" %(lastvec,currentvec)) lastvec = currentvec @@ -599,15 +597,15 @@ class svgHandler(xml.sax.ContentHandler): # here is a better way to find the perpendicular if sweepflag == 1: # clockwise - perp = fcvec.rotate2D(chord,-math.pi/2) + perp = DraftVecUtils.rotate2D(chord,-math.pi/2) else: # anticlockwise - perp = fcvec.rotate2D(chord,math.pi/2) - chord = fcvec.scale(chord,.5) + perp = DraftVecUtils.rotate2D(chord,math.pi/2) + chord = DraftVecUtils.scale(chord,.5) if chord.Length > rx: a = 0 else: a = math.sqrt(rx**2-chord.Length**2) s = rx - a - perp = fcvec.scale(perp,s/perp.Length) + perp = DraftVecUtils.scale(perp,s/perp.Length) midpoint = lastvec.add(chord.add(perp)) seg = Part.Arc(lastvec,midpoint,currentvec).toShape() else:# big arc or elliptical arc @@ -676,7 +674,7 @@ class svgHandler(xml.sax.ContentHandler): currentvec = Vector(x,-y,0) pole2 = Vector(p2x,-p2y,0) - if not fcvec.equals(currentvec,lastvec): + if not DraftVecUtils.equals(currentvec,lastvec): mainv = currentvec.sub(lastvec) pole1v = lastvec.add(pole1) pole2v = currentvec.add(pole2) @@ -718,7 +716,7 @@ class svgHandler(xml.sax.ContentHandler): else: currentvec = Vector(x,-y,0) - if not fcvec.equals(currentvec,lastvec): + if not DraftVecUtils.equals(currentvec,lastvec): if True and \ pole.distanceToLine(lastvec,currentvec) < 20**(-1*(2+Draft.precision())): #print "straight segment" @@ -733,7 +731,7 @@ class svgHandler(xml.sax.ContentHandler): lastpole = ('quadratic',pole) path.append(seg) elif (d == "Z") or (d == "z"): - if not fcvec.equals(lastvec,firstvec): + if not DraftVecUtils.equals(lastvec,firstvec): seg = Part.Line(lastvec,firstvec).toShape() path.append(seg) if path: #the path should be closed by now @@ -821,7 +819,7 @@ class svgHandler(xml.sax.ContentHandler): esh.append(arc.toShape()) for esh1,esh2 in zip(esh[-1:]+esh[:-1],esh): p1,p2 = esh1.Vertexes[-1].Point,esh2.Vertexes[0].Point - if not fcvec.equals(p1,p2): + if not DraftVecUtils.equals(p1,p2): edges.append(Part.Line(esh1.Vertexes[-1].Point,esh2.Vertexes[0].Point).toShape()) #straight segments edges.append(esh2) # elliptical segments sh = Part.Wire(edges) @@ -859,7 +857,7 @@ class svgHandler(xml.sax.ContentHandler): points=points+points[:2] # emulate closepath for svgx,svgy in zip(points[2::2],points[3::2]): currentvec = Vector(svgx,-svgy,0) - if not fcvec.equals(lastvec,currentvec): + if not DraftVecUtils.equals(lastvec,currentvec): seg = Part.Line(lastvec,currentvec).toShape() #print "polyline seg ",lastvec,currentvec lastvec = currentvec diff --git a/src/WindowsInstaller/ModDraft.wxi b/src/WindowsInstaller/ModDraft.wxi index 13fcc92ff..720a39810 100644 --- a/src/WindowsInstaller/ModDraft.wxi +++ b/src/WindowsInstaller/ModDraft.wxi @@ -38,6 +38,8 @@ + + @@ -46,8 +48,6 @@ - - From 532d89ee3edc4162ea2367b0089df5fe2a99927a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 12:00:03 -0300 Subject: [PATCH 182/517] Further Draft lib name fixes --- src/Mod/Arch/ArchSectionPlane.py | 3 +- src/Mod/Draft/DraftGeomUtils.py | 170 +++++++++++++++---------------- 2 files changed, 87 insertions(+), 86 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 59c802382..e1230e59f 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,Drawing,math,Draft,ArchCommands, DraftVecUtils +import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,math,Draft,ArchCommands, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore from pivy import coin @@ -197,6 +197,7 @@ class _ArchDrawingView: else: # render using the Drawing module + import Drawing shapes = [] for o in objs: if o.isDerivedFrom("Part::Feature"): diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index ccacbf62c..16468ad0c 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -27,7 +27,7 @@ __url__ = ["http://free-cad.sourceforge.net"] "this file contains generic geometry functions for manipulating Part shapes" -import FreeCAD, Part, fcvec, math, cmath +import FreeCAD, Part, DraftVecUtils, math, cmath from FreeCAD import Vector NORM = Vector(0,0,1) # provisory normal direction for all geometry ops. @@ -51,7 +51,7 @@ def vec(edge): def edg(p1,p2): "edg(Vector,Vector) -- returns an edge from 2 vectors" if isinstance(p1,FreeCAD.Vector) and isinstance(p2,FreeCAD.Vector): - if fcvec.equals(p1,p2): return None + if DraftVecUtils.equals(p1,p2): return None else: return Part.Line(p1,p2).toShape() def getVerts(shape): @@ -85,7 +85,7 @@ def isPtOnEdge(pt,edge) : '''isPtOnEdge(Vector,edge) -- Tests if a point is on an edge''' if isinstance(edge.Curve,Part.Line) : orig = edge.Vertexes[0].Point - if fcvec.isNull(pt.sub(orig).cross(vec(edge))) : + if DraftVecUtils.isNull(pt.sub(orig).cross(vec(edge))) : return pt.sub(orig).Length <= vec(edge).Length and pt.sub(orig).dot(vec(edge)) >= 0 else : return False @@ -101,16 +101,16 @@ def isPtOnEdge(pt,edge) : else : begin = edge.Vertexes[0].Point end = edge.Vertexes[-1].Point - if fcvec.isNull(pt.sub(begin)) or fcvec.isNull(pt.sub(end)) : + if DraftVecUtils.isNull(pt.sub(begin)) or DraftVecUtils.isNull(pt.sub(end)) : return True else : # newArc = Part.Arc(begin,pt,end) - # return fcvec.isNull(newArc.Center.sub(center)) \ - # and fcvec.isNull(newArc.Axis-axis) \ + # return DraftVecUtils.isNull(newArc.Center.sub(center)) \ + # and DraftVecUtils.isNull(newArc.Axis-axis) \ # and round(newArc.Radius-radius,precision) == 0 - angle1 = fcvec.angle(begin.sub(center)) - angle2 = fcvec.angle(end.sub(center)) - anglept = fcvec.angle(pt.sub(center)) + angle1 = DraftVecUtils.angle(begin.sub(center)) + angle2 = DraftVecUtils.angle(end.sub(center)) + anglept = DraftVecUtils.angle(pt.sub(center)) if (angle1 < anglept) and (anglept < angle2): return True return False @@ -165,8 +165,8 @@ def findEdge(anEdge,aList): '''findEdge(anEdge,aList): returns True if anEdge is found in aList of edges''' for e in range(len(aList)): if str(anEdge.Curve) == str(aList[e].Curve): - if fcvec.equals(anEdge.Vertexes[0].Point,aList[e].Vertexes[0].Point): - if fcvec.equals(anEdge.Vertexes[-1].Point,aList[e].Vertexes[-1].Point): + if DraftVecUtils.equals(anEdge.Vertexes[0].Point,aList[e].Vertexes[0].Point): + if DraftVecUtils.equals(anEdge.Vertexes[-1].Point,aList[e].Vertexes[-1].Point): return(e) return None @@ -202,13 +202,13 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F return [pt2] #we have 2 straight lines - if fcvec.isNull(pt2.sub(pt1).cross(pt3.sub(pt1)).cross(pt2.sub(pt4).cross(pt3.sub(pt4)))): + if DraftVecUtils.isNull(pt2.sub(pt1).cross(pt3.sub(pt1)).cross(pt2.sub(pt4).cross(pt3.sub(pt4)))): vec1 = pt2.sub(pt1) ; vec2 = pt4.sub(pt3) - if fcvec.isNull(vec1) or fcvec.isNull(vec2): + if DraftVecUtils.isNull(vec1) or DraftVecUtils.isNull(vec2): return [] vec1.normalize() ; vec2.normalize() cross = vec1.cross(vec2) - if not fcvec.isNull(cross) : + if not DraftVecUtils.isNull(cross) : k = ((pt3.z-pt1.z)*(vec2.x-vec2.y)+(pt3.y-pt1.y)*(vec2.z-vec2.x)+ \ (pt3.x-pt1.x)*(vec2.y-vec2.z))/(cross.x+cross.y+cross.z) vec1.scale(k,k,k) @@ -251,7 +251,7 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F elif (pt2 in [pt3,pt4]): return [pt2] - if fcvec.isNull(pt1.sub(center).cross(pt2.sub(center)).cross(arc.Curve.Axis)) : + if DraftVecUtils.isNull(pt1.sub(center).cross(pt2.sub(center)).cross(arc.Curve.Axis)) : # Line and Arc are on same plane dOnLine = center.sub(pt1).dot(dirVec) @@ -303,18 +303,18 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F axis1, axis2 = edge1.Curve.Axis , edge2.Curve.Axis c2c = cent2.sub(cent1) - if fcvec.isNull(axis1.cross(axis2)) : + if DraftVecUtils.isNull(axis1.cross(axis2)) : if round(c2c.dot(axis1),precision) == 0 : # circles are on same plane dc2c = c2c.Length ; - if not fcvec.isNull(c2c): c2c.normalize() + if not DraftVecUtils.isNull(c2c): c2c.normalize() if round(rad1+rad2-dc2c,precision) < 0 \ or round(rad1-dc2c-rad2,precision) > 0 or round(rad2-dc2c-rad1,precision) > 0 : return [] else : norm = c2c.cross(axis1) - if not fcvec.isNull(norm): norm.normalize() - if fcvec.isNull(norm): x = 0 + if not DraftVecUtils.isNull(norm): norm.normalize() + if DraftVecUtils.isNull(norm): x = 0 else: x = (dc2c**2 + rad1**2 - rad2**2)/(2*dc2c) y = abs(rad1**2 - x**2)**(0.5) c2c.scale(x,x,x) @@ -369,8 +369,8 @@ def geom(edge): v2 = edge.Vertexes[-1].Point c = edge.Curve.Center cu = Part.Circle(edge.Curve.Center,edge.Curve.Axis,edge.Curve.Radius) - a1 = -fcvec.angle(v1.sub(c),ref,edge.Curve.Axis) - a2 = -fcvec.angle(v2.sub(c),ref,edge.Curve.Axis) + a1 = -DraftVecUtils.angle(v1.sub(c),ref,edge.Curve.Axis) + a2 = -DraftVecUtils.angle(v2.sub(c),ref,edge.Curve.Axis) print "creating sketch arc from ",cu, ", p1=",v1, " (",math.degrees(a1), "d) p2=",v2," (", math.degrees(a2),"d)" p= Part.ArcOfCircle(cu,a1,a2) return p @@ -382,7 +382,7 @@ def mirror (point, edge): normPoint = point.add(findDistance(point, edge, False)) if normPoint: normPoint_point = Vector.sub(point, normPoint) - normPoint_refl = fcvec.neg(normPoint_point) + normPoint_refl = DraftVecUtils.neg(normPoint_point) refl = Vector.add(normPoint, normPoint_refl) return refl else: @@ -547,13 +547,13 @@ def findWires(edgeslist): return False if len(e2.Vertexes) < 2: return False - if fcvec.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point): + if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point): return True - if fcvec.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point): + if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point): return True - if fcvec.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point): + if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point): return True - if fcvec.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point): + if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point): return True return False @@ -656,7 +656,7 @@ def findMidpoint(edge): if len(edge.Vertexes) == 1: # Circle dv = first.sub(center) - dv = fcvec.neg(dv) + dv = DraftVecUtils.neg(dv) return center.add(dv) axis = edge.Curve.Axis chord = last.sub(first) @@ -665,12 +665,12 @@ def findMidpoint(edge): ray = first.sub(center) apothem = ray.dot(perp) sagitta = radius - apothem - startpoint = Vector.add(first, fcvec.scale(chord,0.5)) - endpoint = fcvec.scaleTo(perp,sagitta) + startpoint = Vector.add(first, DraftVecUtils.scale(chord,0.5)) + endpoint = DraftVecUtils.scaleTo(perp,sagitta) return Vector.add(startpoint,endpoint) elif isinstance(edge.Curve,Part.Line): - halfedge = fcvec.scale(last.sub(first),.5) + halfedge = DraftVecUtils.scale(last.sub(first),.5) return Vector.add(first,halfedge) else: @@ -759,7 +759,7 @@ def isReallyClosed(wire): if len(wire.Edges) == len(wire.Vertexes): return True v1 = wire.Vertexes[0].Point v2 = wire.Vertexes[-1].Point - if fcvec.equals(v1,v2): return True + if DraftVecUtils.equals(v1,v2): return True return False def getNormal(shape): @@ -784,7 +784,7 @@ def getNormal(shape): if FreeCAD.GuiUp: import Draft vdir = Draft.get3DView().getViewDirection() - if n.getAngle(vdir) < 0.78: n = fcvec.neg(n) + if n.getAngle(vdir) < 0.78: n = DraftVecUtils.neg(n) return n def offsetWire(wire,dvec,bind=False,occ=False): @@ -815,8 +815,8 @@ def offsetWire(wire,dvec,bind=False,occ=False): curredge = edges[i] delta = dvec if i != 0: - angle = fcvec.angle(vec(edges[0]),vec(curredge),norm) - delta = fcvec.rotate(delta,angle,norm) + angle = DraftVecUtils.angle(vec(edges[0]),vec(curredge),norm) + delta = DraftVecUtils.rotate(delta,angle,norm) nedge = offset(curredge,delta) nedges.append(nedge) nedges = connect(nedges,closed) @@ -890,7 +890,7 @@ def findDistance(point,edge,strict=False): chord = edge.Vertexes[0].Point.sub(point) norm = segment.cross(chord) perp = segment.cross(norm) - dist = fcvec.project(chord,perp) + dist = DraftVecUtils.project(chord,perp) if not dist: return None newpoint = point.add(dist) if (dist.Length == 0): @@ -912,14 +912,14 @@ def findDistance(point,edge,strict=False): center = edge.Curve.Center segment = center.sub(point) ratio = (segment.Length - edge.Curve.Radius) / segment.Length - dist = fcvec.scale(segment,ratio) + dist = DraftVecUtils.scale(segment,ratio) newpoint = Vector.add(point, dist) if (dist.Length == 0): return None if strict and ve2: - ang1 = fcvec.angle(ve1.sub(center)) - ang2 = fcvec.angle(ve2.sub(center)) - angpt = fcvec.angle(newpoint.sub(center)) + ang1 = DraftVecUtils.angle(ve1.sub(center)) + ang2 = DraftVecUtils.angle(ve2.sub(center)) + angpt = DraftVecUtils.angle(newpoint.sub(center)) if ((angpt <= ang2 and angpt >= ang1) or (angpt <= ang1 and angpt >= ang2)): return dist else: @@ -954,15 +954,15 @@ def angleBisection(edge1, edge2): int = findIntersection(edge1, edge2, True, True) if int: line1Dir = p2.sub(p1) - angleDiff = fcvec.angle(line1Dir, p4.sub(p3)) + angleDiff = DraftVecUtils.angle(line1Dir, p4.sub(p3)) ang = angleDiff * 0.5 origin = int[0] line1Dir.normalize() - dir = fcvec.rotate(line1Dir, ang) + dir = DraftVecUtils.rotate(line1Dir, ang) return Part.Line(origin,origin.add(dir)).toShape() else: diff = p3.sub(p1) - origin = p1.add(fcvec.scale(diff, 0.5)) + origin = p1.add(DraftVecUtils.scale(diff, 0.5)) dir = p2.sub(p1); dir.normalize() return Part.Line(origin,origin.add(dir)).toShape() else: @@ -998,8 +998,8 @@ def isPlanar(shape): n = bt.normalAt(0,0) for p in shape.Vertexes[3:]: pv = p.Point.sub(pts[0]) - rv = fcvec.project(pv,n) - if not fcvec.isNull(rv): + rv = DraftVecUtils.project(pv,n) + if not DraftVecUtils.isNull(rv): return False return True @@ -1216,9 +1216,9 @@ def getCubicDimensions(shape): vx = vec(base.Edges[0]) vy = vec(base.Edges[1]) # getting rotations - rotZ = fcvec.angle(vx) - rotY = fcvec.angle(vx,FreeCAD.Vector(vx.x,vx.y,0)) - rotX = fcvec.angle(vy,FreeCAD.Vector(vy.x,vy.y,0)) + rotZ = DraftVecUtils.angle(vx) + rotY = DraftVecUtils.angle(vx,FreeCAD.Vector(vx.x,vx.y,0)) + rotX = DraftVecUtils.angle(vy,FreeCAD.Vector(vy.x,vy.y,0)) # getting height vz = None rpi = round(math.pi/2,precision) @@ -1687,22 +1687,22 @@ def circlefrom1Line2Points(edge, p1, p2): v2 = p2.sub(s) projectedDist = math.sqrt(abs(v1.dot(v2))) edgeDir = vec(edge); edgeDir.normalize() - projectedCen1 = Vector.add(s, fcvec.scale(edgeDir, projectedDist)) - projectedCen2 = Vector.add(s, fcvec.scale(edgeDir, -projectedDist)) + projectedCen1 = Vector.add(s, DraftVecUtils.scale(edgeDir, projectedDist)) + projectedCen2 = Vector.add(s, DraftVecUtils.scale(edgeDir, -projectedDist)) perpEdgeDir = edgeDir.cross(Vector(0,0,1)) perpCen1 = Vector.add(projectedCen1, perpEdgeDir) perpCen2 = Vector.add(projectedCen2, perpEdgeDir) mid = findMidpoint(p1_p2) - x = fcvec.crossproduct(vec(p1_p2)); x.normalize() + x = DraftVecUtils.crossproduct(vec(p1_p2)); x.normalize() perp_mid = Vector.add(mid, x) cen1 = findIntersection(edg(projectedCen1, perpCen1), edg(mid, perp_mid), True, True) cen2 = findIntersection(edg(projectedCen2, perpCen2), edg(mid, perp_mid), True, True) circles = [] if cen1: - radius = fcvec.dist(projectedCen1, cen1[0]) + radius = DraftVecUtils.dist(projectedCen1, cen1[0]) circles.append(Part.Circle(cen1[0], NORM, radius)) if cen2: - radius = fcvec.dist(projectedCen2, cen2[0]) + radius = DraftVecUtils.dist(projectedCen2, cen2[0]) circles.append(Part.Circle(cen2[0], NORM, radius)) if circles: return circles @@ -1714,26 +1714,26 @@ def circleFrom2LinesRadius (edge1, edge2, radius): if not int: return None int = int[0] bis12 = angleBisection(edge1,edge2) - bis21 = Part.Line(bis12.Vertexes[0].Point,fcvec.rotate(vec(bis12), math.pi/2.0)) - ang12 = abs(fcvec.angle(vec(edge1),vec(edge2))) + bis21 = Part.Line(bis12.Vertexes[0].Point,DraftVecUtils.rotate(vec(bis12), math.pi/2.0)) + ang12 = abs(DraftVecUtils.angle(vec(edge1),vec(edge2))) ang21 = math.pi - ang12 dist12 = radius / math.sin(ang12 * 0.5) dist21 = radius / math.sin(ang21 * 0.5) circles = [] - cen = Vector.add(int, fcvec.scale(vec(bis12), dist12)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis12), dist12)) circles.append(Part.Circle(cen, NORM, radius)) - cen = Vector.add(int, fcvec.scale(vec(bis12), -dist12)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis12), -dist12)) circles.append(Part.Circle(cen, NORM, radius)) - cen = Vector.add(int, fcvec.scale(vec(bis21), dist21)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis21), dist21)) circles.append(Part.Circle(cen, NORM, radius)) - cen = Vector.add(int, fcvec.scale(vec(bis21), -dist21)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis21), -dist21)) circles.append(Part.Circle(cen, NORM, radius)) return circles def circleFrom3LineTangents (edge1, edge2, edge3): "circleFrom3LineTangents(edge,edge,edge)" def rot(ed): - return Part.Line(v1(ed),v1(ed).add(fcvec.rotate(vec(ed),math.pi/2))).toShape() + return Part.Line(v1(ed),v1(ed).add(DraftVecUtils.rotate(vec(ed),math.pi/2))).toShape() bis12 = angleBisection(edge1,edge2) bis23 = angleBisection(edge2,edge3) bis31 = angleBisection(edge3,edge1) @@ -1766,7 +1766,7 @@ def circleFrom3LineTangents (edge1, edge2, edge3): for int in intersections: exists = False for cir in circles: - if fcvec.equals(cir.Center, int.Center): + if DraftVecUtils.equals(cir.Center, int.Center): exists = True break if not exists: @@ -1783,16 +1783,16 @@ def circleFromPointLineRadius (point, edge, radius): center2 = None if dist.Length == 0: segment = vec(edge) - perpVec = fcvec.crossproduct(segment); perpVec.normalize() - normPoint_c1 = fcvec.scale(perpVec, radius) - normPoint_c2 = fcvec.scale(perpVec, -radius) + perpVec = DraftVecUtils.crossproduct(segment); perpVec.normalize() + normPoint_c1 = DraftVecUtils.scale(perpVec, radius) + normPoint_c2 = DraftVecUtils.scale(perpVec, -radius) center1 = point.add(normPoint_c1) center2 = point.add(normPoint_c2) elif dist.Length > 2 * radius: return None elif dist.Length == 2 * radius: normPoint = point.add(findDistance(point, edge, False)) - dummy = fcvec.scale(normPoint.sub(point), 0.5) + dummy = DraftVecUtils.scale(normPoint.sub(point), 0.5) cen = point.add(dummy) circ = Part.Circle(cen, NORM, radius) if circ: @@ -1801,12 +1801,12 @@ def circleFromPointLineRadius (point, edge, radius): return None else: normPoint = point.add(findDistance(point, edge, False)) - normDist = fcvec.dist(normPoint, point) + normDist = DraftVecUtils.dist(normPoint, point) dist = math.sqrt(radius**2 - (radius - normDist)**2) - centerNormVec = fcvec.scaleTo(point.sub(normPoint), radius) + centerNormVec = DraftVecUtils.scaleTo(point.sub(normPoint), radius) edgeDir = edge.Vertexes[0].Point.sub(normPoint); edgeDir.normalize() - center1 = centerNormVec.add(normPoint.add(fcvec.scale(edgeDir, dist))) - center2 = centerNormVec.add(normPoint.add(fcvec.scale(edgeDir, -dist))) + center1 = centerNormVec.add(normPoint.add(DraftVecUtils.scale(edgeDir, dist))) + center2 = centerNormVec.add(normPoint.add(DraftVecUtils.scale(edgeDir, -dist))) circles = [] if center1: circ = Part.Circle(center1, NORM, radius) @@ -1824,10 +1824,10 @@ def circleFromPointLineRadius (point, edge, radius): def circleFrom2PointsRadius(p1, p2, radius): "circleFrom2PointsRadiust(Vector, Vector, radius)" - if fcvec.equals(p1, p2): return None + if DraftVecUtils.equals(p1, p2): return None p1_p2 = Part.Line(p1, p2).toShape() - dist_p1p2 = fcvec.dist(p1, p1) + dist_p1p2 = DraftVecUtils.dist(p1, p1) mid = findMidpoint(p1_p2) if dist_p1p2 == 2*radius: circle = Part.Circle(mid, norm, radius) @@ -1836,8 +1836,8 @@ def circleFrom2PointsRadius(p1, p2, radius): dir = vec(p1_p2); dir.normalize() perpDir = dir.cross(Vector(0,0,1)); perpDir.normailze() dist = math.sqrt(radius**2 - (dist_p1p2 / 2.0)**2) - cen1 = Vector.add(mid, fcvec.scale(perpDir, dist)) - cen2 = Vector.add(mid, fcvec.scale(perpDir, -dist)) + cen1 = Vector.add(mid, DraftVecUtils.scale(perpDir, dist)) + cen2 = Vector.add(mid, DraftVecUtils.scale(perpDir, -dist)) circles = [] if cen1: circles.append(Part.Circle(cen1, norm, radius)) if cen2: circles.append(Part.Circle(cen2, norm, radius)) @@ -2069,7 +2069,7 @@ def findHomotheticCenterOfCircles(circle1, circle2): ''' if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): - if fcvec.equals(circle1.Curve.Center, circle2.Curve.Center): + if DraftVecUtils.equals(circle1.Curve.Center, circle2.Curve.Center): return None cen1_cen2 = Part.Line(circle1.Curve.Center, circle2.Curve.Center).toShape() @@ -2079,21 +2079,21 @@ def findHomotheticCenterOfCircles(circle1, circle2): perpCenDir = cenDir.cross(Vector(0,0,1)); perpCenDir.normalize() # Get point on first circle - p1 = Vector.add(circle1.Curve.Center, fcvec.scale(perpCenDir, circle1.Curve.Radius)) + p1 = Vector.add(circle1.Curve.Center, DraftVecUtils.scale(perpCenDir, circle1.Curve.Radius)) centers = [] # Calculate inner homothetic center # Get point on second circle - p2_inner = Vector.add(circle1.Curve.Center, fcvec.scale(perpCenDir, -circle1.Curve.Radius)) - hCenterInner = fcvec.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_inner, True, True) + p2_inner = Vector.add(circle1.Curve.Center, DraftVecUtils.scale(perpCenDir, -circle1.Curve.Radius)) + hCenterInner = DraftVecUtils.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_inner, True, True) if hCenterInner: centers.append(hCenterInner) # Calculate outer homothetic center (only exists of the circles have different radii) if circle1.Curve.Radius != circle2.Curve.Radius: # Get point on second circle - p2_outer = Vector.add(circle1.Curve.Center, fcvec.scale(perpCenDir, circle1.Curve.Radius)) - hCenterOuter = fcvec.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_outer, True, True) + p2_outer = Vector.add(circle1.Curve.Center, DraftVecUtils.scale(perpCenDir, circle1.Curve.Radius)) + hCenterOuter = DraftVecUtils.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_outer, True, True) if hCenterOuter: centers.append(hCenterOuter) @@ -2121,13 +2121,13 @@ def findRadicalAxis(circle1, circle2): ''' if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): - if fcvec.equals(circle1.Curve.Center, circle2.Curve.Center): + if DraftVecUtils.equals(circle1.Curve.Center, circle2.Curve.Center): return None r1 = circle1.Curve.Radius r2 = circle1.Curve.Radius cen1 = circle1.Curve.Center # dist .. the distance from cen1 to cen2. - dist = fcvec.dist(cen1, circle2.Curve.Center) + dist = DraftVecUtils.dist(cen1, circle2.Curve.Center) cenDir = cen1.sub(circle2.Curve.Center); cenDir.normalize() # Get the perpedicular vector. @@ -2142,7 +2142,7 @@ def findRadicalAxis(circle1, circle2): k1 = (dist + (r1^2 - r2^2) / dist) / 2.0 #k2 = dist - k1 - K = Vector.add(cen1, fcvec.scale(cenDir, k1)) + K = Vector.add(cen1, DraftVecUtils.scale(cenDir, k1)) # K_ .. A point somewhere between K and J (actually with a distance of 1 unit from K). K_ = Vector,add(K, perpCenDir) @@ -2208,13 +2208,13 @@ def pointInversion(circle, point): cen = circle.Curve.Center rad = circle.Curve.Radius - if fcvec.equals(cen, point): + if DraftVecUtils.equals(cen, point): return None # Inverse the distance of the point # dist(cen -> P) = r^2 / dist(cen -> invP) - dist = fcvec.dist(point, cen) + dist = DraftVecUtils.dist(point, cen) invDist = rad**2 / d invPoint = Vector(0, 0, point.z) @@ -2260,7 +2260,7 @@ def circleInversion(circle, circle2): cen1 = circle.Curve.Center rad1 = circle.Curve.Radius - if fcvec.equals(cen1, point): + if DraftVecUtils.equals(cen1, point): return None invCen2 = Inversion(circle, circle2.Curve.Center) @@ -2268,7 +2268,7 @@ def circleInversion(circle, circle2): pointOnCircle2 = Vector.add(circle2.Curve.Center, Vector(circle2.Curve.Radius, 0, 0)) invPointOnCircle2 = Inversion(circle, pointOnCircle2) - return Part.Circle(invCen2, norm, fcvec.dist(invCen2, invPointOnCircle2)) + return Part.Circle(invCen2, norm, DraftVecUtils.dist(invCen2, invPointOnCircle2)) else: print "debug: circleInversion bad parameters!\n" From 5c696b181fdefc39896781ffaf0c74433594408c Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 17:09:06 -0300 Subject: [PATCH 183/517] Added 0000680 : DXF polylines with defined width --- src/Mod/Draft/Draft.py | 3 +- src/Mod/Draft/Draft_rc.py | 410 +++++++++--------- .../Draft/Resources/ui/userprefs-import.ui | 20 + src/Mod/Draft/importDXF.py | 17 +- 4 files changed, 246 insertions(+), 204 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 300bc8692..2e7cf692d 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -107,7 +107,8 @@ def getParamType(param): elif param in ["textheight","tolerance","gridSpacing"]: return "float" elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit","maxSnap", - "SvgLinesBlack","dxfStdSize","showSnapBar","hideSnapBar","alwaysShowGrid"]: + "SvgLinesBlack","dxfStdSize","showSnapBar","hideSnapBar","alwaysShowGrid", + "renderPolylineWidth"]: return "bool" elif param in ["color","constructioncolor","snapcolor"]: return "unsigned" diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index 7ef42e43f..e1f587ddd 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,8 +2,8 @@ # Resource object code # -# Created: Fri May 4 19:15:01 2012 -# by: The Resource Compiler for PyQt (Qt v4.7.4) +# Created: Tue May 22 16:46:43 2012 +# by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -26543,153 +26543,159 @@ qt_resource_data = "\ \x93\x83\x1e\x48\xef\x57\xc6\xa2\x49\xdb\x13\x44\xd4\xba\x3f\x06\ \x46\x3f\xfe\x6c\x03\x93\xf1\x73\xb1\x4b\x54\x79\xc9\xd8\x04\x84\ \x23\xc5\xbe\x37\x98\x7a\x44\xf4\xff\x03\x15\x2c\x14\x99\ -\x00\x00\x09\x10\ +\x00\x00\x09\x69\ \x00\ -\x00\x45\x1d\x78\x9c\xed\x5c\x6d\x73\xdb\x36\x12\xfe\xee\x5f\x81\ -\xd1\x87\xbb\xb4\xe3\x5a\x96\x5f\x93\x9c\xac\x4e\x62\xd7\x49\x6e\ -\x92\x6b\x7a\x72\xd3\xfb\xe6\x81\x48\x48\x44\x4d\x12\x2a\x00\x5a\ -\x52\x7f\xfd\xed\x02\xa0\xf8\x22\xea\xdd\x92\x1c\x8f\x66\x3c\x23\ -\x11\x00\x77\x17\x8b\x67\x17\x8b\xc5\x5a\xcd\x9f\x87\x51\x48\x1e\ -\x99\x54\x5c\xc4\x57\xb5\xc6\xd1\x71\x8d\xb0\xd8\x13\x3e\x8f\x7b\ -\x57\xb5\xdf\xef\x6e\x7f\x7a\x5d\xfb\xb9\x75\xd0\x4c\x78\x36\xe8\ -\x0c\x06\xb5\x0e\x48\xd3\x0b\xa9\x52\xad\x0f\x09\x7f\xfb\xf6\x86\ -\xd3\x50\xf4\xe0\x33\xec\xb5\x99\xd6\xf0\xb2\xba\x91\xb4\xab\x9b\ -\x75\x3b\x08\x46\x0f\xb8\xdf\x63\x9a\x98\xe7\xab\xda\x6f\x7f\x98\ -\xc7\x1a\x89\x69\xc4\xae\x6a\x33\x89\x20\x33\xd2\xec\x4b\xd1\x67\ -\x52\x8f\xdc\x1b\x3d\x26\x22\xa6\xe5\xc8\x74\x92\xa6\x64\x9e\x36\ -\xdf\x48\x73\xd8\x3a\x6e\xd6\x87\xee\x61\x84\x0f\x23\xf7\x00\x22\ -\xe8\xa0\x75\x7e\x79\xde\xac\xdb\xaf\xb6\x39\x60\xbc\x17\xe8\xd6\ -\xc5\xc9\x9b\x66\xdd\x7d\x37\x34\xeb\x29\xd1\x66\x3d\x65\x5e\x25\ -\xc9\x80\xc7\xbe\x18\xdc\x71\x1d\x32\x27\x8c\xd2\x12\x84\x6f\x7d\ -\x8a\xfa\x42\xea\xfa\x2f\x43\xfc\x68\xd6\x5d\xeb\x24\xbd\x90\x8e\ -\x44\x92\x69\xe6\xdb\x7b\x31\xfc\x6c\x9a\x1c\xb9\x12\x3f\xd5\xa7\ -\x1e\x10\xaa\x39\xe9\xe3\x24\xea\x30\xd9\xba\x68\xd6\xdd\x37\x2b\ -\x7b\x9e\xc3\x04\x89\x88\xca\x1e\x8f\x4b\x14\xde\xcc\xa4\xc0\x35\ -\x8b\x32\x35\xe6\x57\xf2\x83\x14\x49\x1f\x64\x1e\xaf\xa5\x7b\x6e\ -\x9c\x38\x06\x13\xec\x75\xa6\xab\x9c\xba\x6e\xfe\x77\x4b\xba\x42\ -\x46\x54\x13\xd1\xd7\x80\x34\x95\xd7\xd9\xa4\x48\xf3\x35\x37\x57\ -\x79\x53\xf5\x57\xc5\x6d\xb6\x16\xa7\x2a\xb2\x9a\x54\xa6\xce\x8a\ -\x79\x7c\x9c\x9c\xc7\x02\x33\x99\x31\x97\x2a\x11\xe6\xcf\x27\x23\ -\x78\xbc\x20\xc1\xc2\xac\x26\x91\xf2\x99\x76\x58\x98\xc2\x44\xb3\ -\xa1\x36\x0d\x8d\xfb\xd3\x3c\xcf\x49\xb4\xc0\xc0\xc2\x80\x92\x81\ -\x11\xa5\x47\x21\x2b\x61\x65\xaa\x8c\xc4\xd8\x3e\x48\x95\x9f\x4a\ -\x51\xee\x39\xd3\x30\xbe\xea\xab\x64\xdd\x6b\x11\x75\x44\x0e\xf8\ -\x3d\xec\xe8\x43\x87\x87\x1d\x1d\xe8\x98\x39\x2d\x21\xc2\x3b\xde\ -\xaf\x9e\xd9\x5d\xc0\x15\x81\x3f\x1d\x30\x02\x6e\x2e\x10\x3e\xf1\ -\x02\x21\x14\xf3\xd1\x44\x08\x37\x13\x87\x81\x04\x1e\xb4\xa4\xb1\ -\x0a\xa9\x79\x44\x1b\x12\x9d\x3f\xc1\x6f\x11\x4f\x84\x38\x32\xd6\ -\x82\xdc\x4a\xc6\xae\xdf\xdd\x1c\x91\x83\x4f\x5d\xd7\x1e\xd1\x7e\ -\x1f\x5f\x00\x1e\x8e\xf0\x21\x01\xc0\x91\x28\x51\xda\xb5\x10\x5a\ -\x1a\xdb\xe5\x21\x83\xa6\x58\x53\x1e\xe3\x33\xcd\x58\x8b\x98\x68\ -\xda\x81\x6e\x1d\x80\xf9\x0e\x78\x18\xe2\x40\xd8\x31\x9c\x1c\xca\ -\x0a\x12\xf2\x98\x19\xcf\xab\x8e\x0e\x16\x5e\xb0\x09\xcd\x79\x89\ -\x94\x2c\xd6\x9f\x62\x9f\x0d\x4b\xea\x9b\x8e\xd7\x45\x89\xe3\xfa\ -\xfd\x12\xe3\xc6\x02\xb8\xf2\x15\xd3\x57\xb5\xe3\x12\x13\xcf\x09\ -\xee\x0f\xbb\x0e\x7a\xde\xaa\x53\x41\x6e\x5f\xa9\x0e\xe6\x33\xfb\ -\x22\xfc\x7a\xba\xa5\x2e\xcc\xad\x04\xe4\x45\x6c\x6b\x0c\xc1\xff\ -\x88\x98\x91\x57\x5d\xaa\x34\x53\xfa\x87\xaa\xd5\x9a\xc6\xb5\x5e\ -\x66\xbb\x96\x1c\xbf\x03\x12\x7d\xd6\xa5\x49\x98\x62\x9a\xc6\x7e\ -\x86\xa4\xdd\x09\xf6\xab\xe4\xe0\x2e\x69\xf8\xbc\xa4\xba\x1e\x9b\ -\x2c\xf8\x8a\xbc\xc9\xed\x50\x24\xc9\xa8\x66\xa4\x4f\x25\xc5\x90\ -\x8d\x7b\xce\x45\x95\xf7\xf7\xed\x8b\xd4\x7e\x60\xda\x0b\xd8\x5a\ -\x82\xcc\xdd\x4f\x9a\x75\xbb\xbd\x67\xd1\x40\xbe\x7b\xe1\x48\xc0\ -\x4d\x2a\x10\x92\xff\x8d\x3e\x38\x9c\x8c\x10\x96\xd9\x7e\x43\x7c\ -\xb8\xbf\x5c\x71\xe7\xfd\x42\x87\xa4\xdd\x47\x6c\x91\x36\xeb\x45\ -\xe0\x8d\x77\xb0\xff\xb6\x61\x57\xaa\xda\x7e\x15\xb4\xc3\xee\x7b\ -\x7f\x32\x73\x72\x11\x1d\xf2\x28\x89\xda\xfc\x6f\x56\x9e\x23\x34\ -\x95\x60\x63\x8f\x0b\x17\xc7\x85\x83\xc3\xb8\xd7\x1d\x1a\x1a\x17\ -\x97\x97\x97\x27\x8d\xf3\xc2\x29\x22\x9b\x64\x99\xec\x62\x3b\xc4\ -\xcc\x30\xe1\x8f\x80\xc5\x84\x0d\xd3\x60\x40\x99\x15\x51\x68\xf6\ -\x10\x08\x1c\x62\xf4\x30\x22\x54\x32\xbb\x4f\x63\x6c\x0d\x3e\x81\ -\xc7\xa4\x2f\xc2\x91\x19\x79\x44\x4c\xa0\xf1\x48\xc3\x84\x8d\xc3\ -\x0d\xab\x17\x12\xb2\xb8\xa7\x03\x22\xba\x84\x51\xcf\x7c\x62\x6f\ -\xfa\x2a\x51\x76\xd9\x81\x04\xc4\x14\xc7\x86\x57\x6c\x46\x0c\x02\ -\x01\x71\x80\x15\xc5\xd0\x34\xa6\xe6\x13\xaa\x20\x60\x00\xb9\x29\ -\xaa\x26\x7d\xfd\x68\xf5\x28\xc0\x08\x5d\xbd\xfd\x9f\x6f\x65\xfb\ -\x07\x45\x39\x85\xa7\x16\xf0\x3c\xc3\x80\x1d\x3b\xa8\x42\x74\xbf\ -\xbc\x8b\x5a\xd1\x41\x5d\x4f\x44\xae\x3b\x70\x50\xb7\xc0\xf6\xda\ -\xc4\xd2\x72\xc2\x49\xa1\x48\x9e\xeb\x9b\xe9\xa6\x20\xd6\x5e\xd2\ -\x4d\x9d\x1e\xcf\xf6\x53\xc7\xdb\x73\x50\x77\x01\xab\x3a\x44\x74\ -\x4b\xc7\x16\x88\xa4\xa7\x9c\x13\x56\xf7\x0f\xcb\x05\xf2\x4e\x3c\ -\x0b\x94\xbd\x1d\x57\xd9\xf1\xe5\xe2\x76\x9c\x1d\x91\x03\xe6\x3d\ -\x54\x1e\x91\xb1\x63\xfe\x26\x3d\x13\x5c\x1c\xb7\x24\x7b\x4e\x4e\ -\x62\x43\x10\x4f\xb1\xe8\x13\x54\x3d\x32\x1f\x64\x20\xe2\x7f\x6a\ -\xd2\x61\xee\xc4\xcc\xfc\xd5\xf1\x34\x37\x0d\x61\x39\xe2\x31\xc0\ -\xe7\xb0\x1f\xa8\x8a\x0c\xd6\x92\x50\x5a\x1c\xbe\xc8\x7b\x8f\xdb\ -\x6a\xdc\x9e\x6c\x04\xb7\x73\x72\x56\x0b\xe2\x76\x8c\xda\x3e\x85\ -\xd7\x09\xe6\xf4\x58\x7a\x3a\xb2\x69\x94\x1c\x76\x21\xae\x13\x1b\ -\xc4\xaf\xd5\xec\xd6\x20\x6b\xd9\xed\x41\x5b\x0d\xda\xb3\x8d\x80\ -\x76\xce\x71\x6f\x16\x68\x0d\x71\x87\xdb\xae\x49\x15\x0e\x68\xac\ -\x4d\xc4\x1f\x8b\xf8\x27\xa4\xe0\x93\x4e\x28\xbc\x07\x45\x5e\x75\ -\x58\x8f\xc7\x26\x47\x38\xe0\x70\x86\xa0\xe4\xc7\x1f\xf0\x50\xb2\ -\x3d\x2c\xff\x68\x25\xd9\x16\x96\x95\xa6\x32\xe5\xb8\xc7\x73\x15\ -\x9e\x5f\x6f\x04\xcf\xe7\x4f\xeb\x84\x53\xc7\xdb\x95\x22\x32\xc8\ -\x56\x40\x07\xfd\x22\x93\x99\x37\xfe\x53\x40\x70\xea\xdb\x38\xd5\ -\x2c\x02\x79\x6f\x56\x1e\x22\x8f\x44\x1a\xcc\xe3\x9b\x3e\x87\xb3\ -\x21\x1d\x11\x93\x3f\x95\x87\xa4\x03\xea\x8a\xe8\x83\xeb\xc6\xd3\ -\xb5\x52\x70\xb0\x56\x3c\x1c\x11\xe6\x73\x93\x3c\xdf\x84\x3d\x98\ -\xcb\xb8\x74\x0a\x46\xe6\x2d\x5a\x46\x0f\x99\x7f\x36\xbc\xf7\x76\ -\x51\x6d\x17\xe7\x1b\xb1\x8b\x37\xab\xdb\x05\xde\x10\xa5\xf6\xd0\ -\x95\x8c\x79\xd4\xb7\xd0\x87\x15\x47\x1f\x8e\xf0\xc7\x44\x3c\x8f\ -\x3d\xee\x33\xf8\x9a\x1a\x8d\x01\xd7\x80\x4b\xcc\x2a\xbd\x67\x03\ -\x2a\xd9\xa1\xb5\x30\x8f\xe2\xe5\xd0\x03\xde\x27\x0d\x02\x38\x5f\ -\x1d\x1d\xad\x91\xf5\x99\x8e\xf4\x7f\x83\x48\x24\xad\x0a\xd8\x0a\ -\xbc\x51\x15\x19\xc3\x3d\xbe\xab\xf0\x7d\xb1\x09\x7c\xaf\x85\xee\ -\x09\xaf\x4f\x01\xdc\x29\x88\x73\xb7\x9b\x5d\x08\xc5\x33\xaf\x6f\ -\x93\xac\x36\x8d\x79\xea\x9b\x34\xa8\x19\xb0\x09\x24\xdb\x82\x11\ -\x72\x7a\x33\x16\x0b\x98\xa6\x1c\x49\xc4\xd4\x94\x1b\x8b\x8d\xe4\ -\x45\x80\xdb\x1e\xdb\xd5\xd8\x6e\x34\x36\xe2\xbc\x5f\x3f\x2d\xbc\ -\xb3\x88\xdb\x66\x44\x10\xd0\x28\x98\x89\x6f\x34\x8d\x7d\x2a\x7d\ -\x17\xc8\xe0\x08\x82\x59\x40\x78\x2b\x86\xb8\x05\x5c\xbf\x4b\xfb\ -\x63\xa3\xbd\x4e\x08\xe8\x23\xc3\x3b\x04\x6c\xc5\x6a\x03\x5f\x78\ -\xc9\x52\xf7\x3f\x4b\x18\x02\x5e\xfd\x8e\x45\xec\x82\xea\xad\x1c\ -\x26\x7b\x88\x93\xd9\x96\x11\xb4\xb5\x8f\xf9\xd7\xbd\x1d\x4c\xb1\ -\x83\xcd\x64\x58\x1a\xc7\x4f\x6b\x08\x01\x35\x77\xbd\x63\x97\xee\ -\x0a\x54\xd2\x58\x5e\x81\xa1\x84\xcc\x46\x30\x1b\x3c\x99\x1a\x29\ -\x48\x47\x24\x88\x6a\xce\x8c\x6f\x5f\x93\xe7\x12\x60\xb6\xce\xe0\ -\x66\xd8\xfd\x48\xdd\xc5\xf7\x4b\x84\x74\xb1\xb3\x40\x2b\x37\x6e\ -\xa5\x92\xc6\xfb\x25\x8b\x1a\xdb\xdf\x3e\x3c\x5d\x51\xa3\xe3\x94\ -\xcb\x3d\x7e\xef\xe5\x8d\xe9\x8c\x0a\xe9\xae\x97\x5b\xe8\x38\x27\ -\x5f\xb1\xf3\x42\x47\x93\x7f\x96\x13\x7e\xbe\x6d\x9a\x0b\xb1\xfc\ -\xa4\xf4\x30\x1a\xc2\x00\x53\x0b\x58\x9a\x04\x03\x95\xb6\x7e\xd3\ -\x6f\xdf\x7e\x1c\x53\x6c\xd6\x4d\xe3\xd2\x4e\x07\xf7\xff\x8f\xe0\ -\xae\xa7\x3b\x9d\xa9\xb7\xa2\x67\xb3\x2f\x45\x4f\xd6\xba\x15\x85\ -\x61\x46\x47\x4b\xe8\x7a\xd5\xa2\xd2\x75\x6e\x1e\x16\x2e\x2b\x45\ -\xb7\x35\xbd\x8e\xf4\xfb\x2f\xdd\x54\x8f\xbd\x7d\xe9\xe6\xbe\x74\ -\xf3\xa9\xa5\xda\x75\x24\xfe\x66\xf1\x40\xbc\xaa\x1a\x70\xce\x5d\ -\xfc\xbc\x84\x45\xfb\x99\xd4\xe1\x83\x71\xdf\xdb\x7c\xcd\xbd\x31\ -\xf2\xfb\xf5\xeb\xf1\xcd\xd4\xf0\x30\x6c\xe2\x39\x2c\x61\xc1\x64\ -\xa7\x04\x01\xc9\xa0\x58\x83\x47\x5d\x51\xe9\xcb\x70\x92\x05\x3d\ -\xbe\x4c\x67\x79\xe7\xea\x90\x60\x0f\x7c\x85\x9b\x60\x5f\x62\x82\ -\xfb\x1f\x34\xea\xff\x2b\xbd\xc5\xd9\xa1\x0b\xfd\x2f\x1d\x58\xb1\ -\xae\xdf\x7d\x59\x4b\x8c\x5d\xbb\xa6\xc2\x69\xfe\xe9\x92\x04\xb3\ -\x63\xd2\x65\x8a\x67\xd1\xb2\x1f\x39\x1b\xa8\x43\xbc\xa8\x63\x26\ -\x2d\x3c\x08\xd0\xc2\xcd\xd6\x20\xe4\x03\xc1\xa2\x7a\x8a\xb1\x10\ -\xe9\x84\xd4\x7b\x38\x34\x41\x53\x87\x69\x0d\x31\xb3\x64\xd4\xa7\ -\x1d\x1e\x72\x60\x4e\x7b\x14\xf3\x67\xee\xf5\x0e\x0c\xc5\x9b\xb0\ -\xd8\xdf\x48\x5e\x61\x8c\xdf\x9c\xb4\x6e\x5f\x33\xb7\x7d\xc0\x7d\ -\x0d\x57\x64\x93\x27\x25\xce\x1d\x50\x6b\x4b\xcb\x04\x3c\x82\xf9\ -\xba\x49\x27\xd4\x7e\xec\x7d\xc6\x1a\xdb\xf7\x76\x22\xcf\xd3\x03\ -\x3d\xdf\x74\xc5\xf8\xb0\xb0\x58\xba\xe2\xd7\xeb\x77\x4f\x9f\xae\ -\xc8\x6c\xf4\xa5\xa4\x2b\x0a\xa5\x90\xdf\x7d\xba\x62\x09\x77\x7b\ -\xb6\xba\xbb\x9d\x51\x40\x44\xc1\x79\x2a\xf2\xea\xf4\xc6\x5e\xba\ -\x55\xd5\x0a\x6d\xe4\xca\xd8\xa5\x55\x10\xf4\x46\x84\xad\xa4\x60\ -\x85\x47\x1d\xb3\xbd\x2f\x33\x6b\x91\xcf\x39\x61\x42\x9e\x7b\x69\ -\xc6\x69\x9a\xef\xaa\x4a\x35\x65\x59\xa6\x6f\x8e\x46\x21\xc7\x34\ -\xe9\xb7\x96\xc8\x2c\x15\x93\x4a\x2e\x9f\x74\x32\x91\x4f\x4a\x53\ -\x49\x67\x13\xa9\xa4\x42\x16\xa9\x2c\x4a\x21\x77\x94\x29\x29\xa7\ -\xc9\x9c\x1a\x9d\x73\x4a\x4f\xd5\xce\xd9\x5c\xd5\x2e\x6a\xc4\xba\ -\x89\xab\x5a\xa3\x51\xab\xe3\xc8\x3e\x1f\x46\xb4\xdf\x4d\x62\x0f\ -\x15\xd5\xfa\xeb\xab\x79\xbe\x95\x22\xfa\xc2\x23\xd6\x16\x89\xf4\ -\x60\x03\x2f\x8d\xc2\x9f\x75\x48\x94\x16\x91\xe5\xa8\x8c\x24\xf9\ -\x16\x2b\x65\xee\xa7\x1f\x72\xff\xe4\x90\xfd\xda\x03\xae\xc7\x50\ -\x33\x08\x79\x5a\xee\x97\x1e\x60\x35\x5c\xc3\x81\x55\x15\xf5\x61\ -\xca\x40\xa1\x8e\x04\xec\x4f\x3f\x1c\x05\xa8\x38\xd3\x61\x14\x50\ -\xe6\x3b\x5b\x90\xd2\x7f\x5c\x54\x0a\x33\x29\xf1\x34\xa9\x90\x9a\ -\x95\x5c\xad\x2f\x96\xfb\x4f\xb5\x6a\xfd\x8c\x3b\xb7\x22\x4a\xea\ -\xe3\xab\x65\xc9\x7a\xb7\x23\x8c\x3b\xb9\x4f\x11\x66\xdc\xbb\xbe\ -\x30\xc5\x06\xf3\x83\x24\x92\x29\x63\x03\xca\x58\x8b\x27\xe2\x98\ -\x19\x1b\xc0\xe7\x66\x3d\xe1\xad\x83\xff\x03\xad\x19\x30\x45\ +\x00\x48\x24\x78\x9c\xed\x5c\x5b\x73\xdb\xb6\x12\x7e\xf7\xaf\xc0\ +\xe8\xe1\x9c\xb4\xe3\x5a\x92\xaf\x49\x8e\xac\x4e\x62\xd7\x49\x3a\ +\xc9\x69\x5a\xb9\x49\xdf\x3c\x10\x09\x89\xa8\x49\x42\x05\x40\x4b\ +\xea\xaf\xef\x2e\x00\x8a\x14\x45\xdd\x2d\xc9\x71\x35\xe3\x19\x8b\ +\x00\x88\x5d\x2c\xbe\x5d\xec\x2e\x56\x6a\xfc\x38\x88\x42\xf2\xc0\ +\xa4\xe2\x22\xbe\xac\xd4\x8f\x6a\x15\xc2\x62\x4f\xf8\x3c\xee\x5e\ +\x56\x7e\xbf\xbd\xf9\xe1\x65\xe5\xc7\xe6\x41\x23\xe1\xd9\xa0\x53\ +\x18\xd4\x3c\x20\x0d\x2f\xa4\x4a\x35\xdf\x25\xfc\xf5\xeb\x6b\x4e\ +\x43\xd1\x85\xff\x61\xb7\xc5\xb4\x86\x97\xd5\xb5\xa4\x1d\xdd\xa8\ +\xda\x41\x30\xba\xcf\xfd\x2e\xd3\xc4\x3c\x5f\x56\x7e\xfd\x6a\x1e\ +\x2b\x24\xa6\x11\xbb\xac\xcc\x9c\x04\x89\x91\x46\x4f\x8a\x1e\x93\ +\x7a\xe8\xde\xe8\x32\x11\x31\x2d\x87\xa6\x93\x34\x24\xf3\xb4\xf9\ +\x44\x1a\x83\x66\xad\x51\x1d\xb8\x87\x21\x3e\x0c\xdd\x03\xb0\xa0\ +\x83\xe6\xd9\xc5\x59\xa3\x6a\x3f\xda\xe6\x80\xf1\x6e\xa0\x9b\xe7\ +\xc7\xaf\x1a\x55\xf7\xd9\xcc\x59\x4d\x27\x6d\x54\x53\xe2\x65\x9c\ +\xf4\x79\xec\x8b\xfe\x2d\xd7\x21\x73\xcc\x28\x2d\x81\xf9\xe6\x87\ +\xa8\x27\xa4\xae\xfe\x34\xc0\x7f\x8d\xaa\x6b\x9d\x9c\x2f\xa4\x43\ +\x91\x64\x92\xf9\xf2\x56\x0c\x3e\x9a\x26\x37\x5d\x81\x9e\xea\x51\ +\x0f\x26\xaa\x38\xee\xe3\x24\x6a\x33\xd9\x3c\x6f\x54\xdd\x27\xcb\ +\x7b\x9e\xc2\xc4\x14\x11\x95\x5d\x1e\x17\x66\x78\x35\x73\x06\xae\ +\x59\x94\x89\x31\xbf\x93\xef\xa4\x48\x7a\xc0\xf3\x68\x2f\xdd\x73\ +\xfd\xd8\x11\x98\x20\xaf\x33\x59\xe5\xc4\x75\xfd\xc7\x0d\xe9\x08\ +\x19\x51\x4d\x44\x4f\x03\xd2\x54\x5e\x66\x93\x2c\xcd\x97\xdc\x5c\ +\xe1\x4d\x95\x5f\x19\xb5\xd9\x52\x9c\x2a\xc8\xf2\xa9\x32\x71\x96\ +\xac\xe3\xfd\xe4\x3a\x16\x58\xc9\x8c\xb5\x94\xb1\x30\x7f\x3d\xd9\ +\x84\xb5\x05\x27\x1c\x5b\xd5\x24\x52\x3e\xd2\x36\x0b\x53\x98\x68\ +\x36\xd0\xa6\xa1\x7e\x77\x92\xa7\x39\x89\x16\x18\x38\x36\xa0\xa0\ +\x60\x44\xe9\x61\xc8\x0a\x58\x99\xca\x23\x31\xba\x0f\x5c\xe5\x97\ +\x32\xce\xf7\x9c\x65\x18\x5b\xf5\x59\xb2\xce\x95\x88\xda\x22\x07\ +\xfc\x2e\x76\xf4\xa0\xc3\xc3\x8e\x36\x74\xcc\x5c\x96\x10\xe1\x2d\ +\xef\x95\xaf\xec\x36\xe0\x8a\xc0\x9f\x0e\x18\x01\x33\x17\x08\x9f\ +\x78\x81\x10\x8a\xf9\xa8\x22\x84\x9b\x85\xc3\x40\x02\x0f\x5a\xd2\ +\x58\x85\xd4\x3c\xa2\x0e\x89\xf6\x9f\x60\xb7\x88\x27\x42\x1c\x19\ +\x6b\x41\x6e\x24\x63\x57\x6f\xae\x8f\xc8\xc1\x87\x8e\x6b\x8f\x68\ +\xaf\x87\x2f\x00\x0d\x37\xf1\x21\x01\xc0\x91\x28\x51\xda\xb5\x10\ +\x5a\x18\xdb\xe1\x21\x83\xa6\x58\x53\x1e\xe3\x33\xcd\x48\x8b\x98\ +\x68\xda\x86\x6e\x1d\x80\xfa\xf6\x79\x18\xe2\x40\x38\x31\x1c\x1f\ +\xca\x32\x12\xf2\x98\x19\xcb\xab\x8e\x0e\x16\xde\xb0\x09\xc9\x79\ +\x89\x94\x2c\xd6\x1f\x62\x9f\x0d\x0a\xe2\x9b\x8e\xd7\x45\x27\xc7\ +\xfd\xfb\x29\xc6\x83\x05\x70\xe5\x2b\xa6\x2f\x2b\xb5\x02\x11\xcf\ +\x31\xee\x0f\x3a\x0e\x7a\xde\xaa\x4b\x41\x6a\x9f\xa9\x0e\xe6\x13\ +\xfb\x24\xfc\x6a\x7a\xa4\x2e\x4c\xad\x00\xe4\x45\x74\x6b\x04\xc1\ +\xff\x8b\x98\x91\x17\x1d\xaa\x34\x53\xfa\xbb\xb2\xdd\x9a\x46\xb5\ +\x5a\x24\xbb\x16\x1f\xbf\x03\x12\x7d\xd6\xa1\x49\x98\x62\x9a\xc6\ +\x7e\x86\xa4\xdd\x31\xf6\x8b\xe4\x60\x2e\x69\xf8\xb4\xb8\xba\x1a\ +\xa9\x2c\xd8\x8a\xbc\xca\xed\x90\x25\xc9\xa8\x66\xa4\x47\x25\x45\ +\x97\x8d\x7b\xce\x44\x15\xcf\xf7\xed\xb3\xd4\xba\x67\xda\x0b\xd8\ +\x5a\x8c\xcc\x3d\x4f\x1a\x55\x7b\xbc\x67\xde\x40\xbe\x7b\x61\x4f\ +\xc0\x2d\x2a\x10\x92\xff\x8d\x36\x38\x9c\xf4\x10\x96\x39\x7e\x43\ +\x7c\xb8\xbb\x58\xf1\xe4\xfd\x44\x07\xa4\xd5\x43\x6c\x91\x16\xeb\ +\x46\x60\x8d\x77\x70\xfe\xb6\xe0\x54\x2a\x3b\x7e\x15\xb4\xc3\xe9\ +\x7b\x77\x3c\x73\x71\x11\x1d\xf0\x28\x89\x5a\xfc\x6f\x56\x5c\x23\ +\x34\x15\x60\x63\xc3\x85\xf3\xda\x58\xe0\x30\xea\x75\x41\x43\xfd\ +\xfc\xe2\xe2\xe2\xb8\x7e\x36\x16\x45\x64\x8b\x2c\x4e\xbb\xd8\x09\ +\x31\xd3\x4d\xf8\x1a\xb0\x98\xb0\x41\xea\x0c\x28\xb3\x23\x0a\xd5\ +\x1e\x1c\x81\x43\xf4\x1e\x86\x84\x4a\x66\xcf\x69\xf4\xad\xc1\x26\ +\xf0\x98\xf4\x44\x38\x34\x23\x8f\x88\x71\x34\x1e\x68\x98\xb0\x91\ +\xbb\x61\xe5\x42\x42\x16\x77\x75\x40\x44\x87\x30\xea\x99\xff\xd8\ +\x9b\xbe\x4a\x94\xdd\x76\x98\x02\x7c\x8a\x9a\xa1\x15\x9b\x11\xfd\ +\x40\x80\x1f\x60\x59\x31\x73\x1a\x55\xf3\x09\x55\xe0\x30\x00\xdf\ +\x14\x45\x93\xbe\x7e\xb4\xba\x17\x60\x98\x2e\x3f\xfe\xcf\xb6\x72\ +\xfc\x83\xa0\x9c\xc0\x53\x0d\x78\x9a\x6e\xc0\x8e\x0d\xd4\x98\x77\ +\xbf\xbc\x89\x5a\xd1\x40\x5d\x4d\x78\xae\x3b\x30\x50\x37\x40\xf6\ +\xca\xf8\xd2\x72\xc2\x48\x21\x4b\x9e\xeb\x9b\x69\xa6\xc0\xd7\x5e\ +\xd2\x4c\x9d\xd4\x66\xdb\xa9\xda\xf6\x0c\xd4\x6d\xc0\xca\x82\x88\ +\x4e\x21\x6c\x01\x4f\x7a\x4a\x9c\xb0\xba\x7d\x58\xce\x91\x77\xec\ +\x59\xa0\xec\xf5\xb8\x4c\x8f\x2f\x16\xd7\xe3\x2c\x44\x0e\x98\x77\ +\x5f\x1a\x22\x63\xc7\xfc\x43\x7a\x26\xb8\x38\x1e\x49\x36\x4e\x4e\ +\x62\x33\x21\x46\xb1\x68\x13\x54\x35\x32\xff\x48\x5f\xc4\xff\xd5\ +\xa4\xcd\x5c\xc4\xcc\xfc\xd5\xf1\x34\x37\x0d\x61\x29\x62\x18\xe0\ +\x73\x38\x0f\x54\x49\x06\x6b\x49\x28\x2d\x0e\x5f\xa4\xbd\xc7\x6d\ +\x39\x6e\x8f\x37\x82\xdb\x39\x39\xab\x05\x71\x3b\x42\x6d\x8f\xc2\ +\xeb\x04\x73\x7a\x2c\x8d\x8e\x6c\x1a\x25\x87\x5d\xf0\xeb\xc4\x06\ +\xf1\x6b\x25\xbb\x35\xc8\x5a\x72\x7b\xd0\x96\x83\xf6\x74\x23\xa0\ +\x9d\x13\xee\xcd\x02\xad\x99\xdc\xe1\xb6\x63\x52\x85\x7d\x1a\x6b\ +\xe3\xf1\xc7\x22\xfe\x01\x67\xf0\x49\x3b\x14\xde\xbd\x22\x2f\xda\ +\xac\xcb\x63\x93\x23\xec\x73\x88\x21\x28\xf9\xfe\x3b\x0c\x4a\xb6\ +\x87\xe5\xef\x2d\x27\xdb\xc2\xb2\xd2\x54\xa6\x14\xf7\x78\x2e\xc3\ +\xf3\xcb\x8d\xe0\xf9\xec\x71\x8d\x70\x6a\x78\x3b\x52\x44\x06\xd9\ +\x0a\xe6\x41\xbb\xc8\x64\x66\x8d\xff\x14\xe0\x9c\xfa\xd6\x4f\x35\ +\x9b\x40\xde\x9a\x9d\x07\xcf\x23\x91\x06\xf3\xf8\xa6\xcf\x21\x36\ +\xa4\x43\x62\xf2\xa7\xf2\x90\xb4\x41\x5c\x11\xbd\x77\xdd\x18\x5d\ +\x2b\x05\x81\xb5\xe2\xe1\x90\x30\x9f\x9b\xe4\xf9\x26\xf4\xc1\x5c\ +\xc6\xa5\x4b\x30\x3c\x6f\x51\x33\xba\x48\xfc\xa3\xa1\xbd\xd7\x8b\ +\x72\xbd\x38\xdb\x88\x5e\xbc\x5a\x5d\x2f\xf0\x86\x28\xd5\x87\x8e\ +\x64\xcc\xa3\xbe\x85\x3e\xec\x38\xda\x70\x84\x3f\x26\xe2\x79\xec\ +\x71\x9f\xc1\xc7\x54\x69\x0c\xb8\xfa\x5c\x62\x56\xe9\x2d\xeb\x53\ +\xc9\x0e\xad\x86\x79\x14\x2f\x87\xee\xf1\x3e\xa9\x1f\x40\x7c\x75\ +\x74\xb4\x46\xd6\x67\x3a\xd2\x7f\x06\x96\x48\x5a\x15\xb0\x15\x78\ +\xa3\x28\x32\x82\x7b\x7c\x97\xe1\xfb\x7c\x13\xf8\x5e\x0b\xdd\x13\ +\x56\x9f\x02\xb8\x53\x10\xe7\x6e\x37\x3b\xe0\x8a\x67\x56\xdf\x26\ +\x59\x6d\x1a\xf3\xc4\x37\x69\x50\x33\x60\x13\x48\xb6\x05\x23\xe4\ +\xe4\x7a\xc4\x16\x10\x4d\x29\x92\x88\xa9\x29\x37\x16\x1b\xc9\x8b\ +\x00\xb5\x3d\xb6\xcb\xb1\x5d\xaf\x6f\xc4\x78\xbf\x7c\x5c\x78\x67\ +\x1e\xb7\xcd\x88\x20\xa0\x91\x31\xe3\xdf\x68\x1a\xfb\x54\xfa\xce\ +\x91\xc1\x11\x04\xb3\x80\xf0\x56\x0c\x7e\x0b\x98\x7e\x97\xf6\xc7\ +\x46\x7b\x9d\x10\xd0\x07\x86\x77\x08\xd8\x8a\xd5\x06\xbe\xf0\x92\ +\xa5\xee\x7f\x96\x50\x04\xbc\xfa\x1d\xb1\xd8\x01\xd1\x5b\x3e\x4c\ +\xf6\x10\x17\xb3\x2d\x25\x68\x69\x1f\xf3\xaf\x7b\x3d\x98\xa2\x07\ +\x9b\xc9\xb0\xd4\x6b\x8f\xab\x08\x01\x35\x77\xbd\x23\x93\xee\x0a\ +\x54\x52\x5f\x5e\x81\xa2\x84\xcc\x7a\x30\x1b\x8c\x4c\x0d\x17\xa4\ +\x2d\x12\x44\x35\x67\xc6\xb6\xaf\x49\x73\x09\x30\x5b\x63\x70\x3d\ +\xe8\xbc\xa7\xee\xe2\x7b\x0f\xe9\x52\x48\x2f\x71\x69\xb5\x0c\xa4\ +\xeb\x8f\x0b\xe9\x3e\x5e\xba\x8e\x6e\x73\xad\x6d\x06\x2f\x1b\x6f\ +\x4e\xb0\x66\x06\x03\x55\x77\x0b\x9c\x82\x5e\xb2\xd8\x67\xd2\xfa\ +\x31\x5e\x68\x0a\xca\x0c\xfa\x6c\xa2\x46\x9b\xeb\x1a\x89\x75\xaf\ +\x64\x6a\xd1\xc8\xba\x8a\xf0\x9b\x61\x21\xc7\xb6\x21\xbd\x26\xb9\ +\x25\x74\xc0\x8a\xe0\xb3\x23\xff\xd5\xd2\x7d\x8e\x6a\x30\xde\x39\ +\x36\x57\x6e\xdc\x4a\x95\xbd\x77\x4b\xd6\xf6\xb6\xbe\xbc\x7b\xbc\ +\xda\x5e\x47\x29\x97\x82\xff\xd6\xab\x7c\xd3\x15\x8d\x65\x7d\x9f\ +\x6f\xbd\xef\x9c\xb4\xdd\xce\xeb\x7d\xcd\x35\x8c\x9c\x38\x1b\x5a\ +\xa6\x79\x2c\xa4\x9d\xe4\x1e\x46\x83\x37\x6c\x4a\x62\x0b\x8b\x60\ +\x20\xd2\xe6\xaf\xfa\xf5\xeb\xf7\xa3\x19\x1b\x55\xd3\xb8\xb4\xd1\ +\x41\x37\xf8\x3d\x78\x2d\xd3\x8d\xce\xd4\xe2\x80\xd3\xd9\xb5\x01\ +\xc7\x6b\x15\x07\xc0\x30\x23\xa3\x25\x64\xbd\x6a\x6d\xf5\x3a\x17\ +\x70\x0b\x57\x57\xa3\xd9\x9a\x5e\x4e\xfd\xed\x57\x30\xab\x87\xee\ +\xbe\x82\x79\xe3\xc5\xa6\xff\xba\x0a\xe6\x5d\x7b\xef\xaf\x16\x77\ +\xde\xcb\x8a\x62\xe7\x94\xa4\xcc\xcb\xdb\xb5\x9e\xc8\xd7\x51\x40\ +\xb9\xef\x6c\xda\xf2\xce\x28\xf9\xdd\xfa\x5f\x4b\x31\x4b\xc3\x9c\ +\x90\xf1\xe7\xb0\x92\x0b\x73\xfe\x12\x18\xb4\xa1\x48\x56\x8a\x4a\ +\x5d\x6d\xf5\xf3\x30\x92\x63\x72\x7c\x9e\xc6\xf2\xd6\x95\xe3\xc1\ +\x19\xf8\x02\x0f\xc1\x9e\xc4\x7b\x9e\xff\xd0\xa8\xf7\xbf\xf4\x32\ +\x73\x87\x26\xf4\x37\xda\xb7\x6c\x5d\xbd\xf9\xb4\x16\x1b\xbb\x36\ +\x4d\x63\x49\xad\xc7\x4b\x2c\xcc\xf6\x49\x97\xa9\x21\x47\xcd\x7e\ +\xe0\xac\xaf\x0e\xf1\xbe\x9a\x99\xdb\x91\x7e\x80\x1a\x6e\x8e\x06\ +\x21\xef\x09\x7e\xb7\x84\xa2\x2f\x44\xda\x21\xf5\xee\x0f\x8d\xd3\ +\xd4\x66\x5a\x83\xcf\x2c\x19\xf5\x69\x9b\x87\x1c\x88\xd3\x2e\xc5\ +\x34\xb2\x7b\xbd\x0d\x43\xf1\x42\x38\xf6\x37\x92\x5e\x1b\xe1\x37\ +\xc7\xad\x3b\xd7\xcc\xa5\x37\x50\x5f\xc3\x14\xd9\x84\x4b\x81\x72\ +\x1b\xc4\xda\xd4\x32\x01\x8b\x60\x3e\x6e\xd2\x08\xb5\x1e\xba\x1f\ +\x31\x59\xf2\xd6\x2e\xe4\x69\x5a\xa0\xa7\x9b\xae\x18\x05\x0b\x8b\ +\xa5\x2b\x7e\xb9\x7a\xf3\xf8\xe9\x8a\x4c\x47\x9f\x4b\xba\x62\xac\ +\x22\xf8\x9b\x4f\x57\x2c\x61\x6e\x4f\x57\x37\xb7\x33\xea\xe8\x28\ +\x18\x4f\x45\x5e\x9c\x5c\xdb\xbb\xe7\xb2\x92\xb9\x8d\x54\x4e\xb8\ +\xb4\x0a\x82\xde\xb0\xb0\x95\x2c\xac\xf0\xa8\x23\xb6\xb7\x65\x66\ +\x2f\xf2\x39\x27\xbc\x97\xe2\x5e\x9a\x71\x9a\x66\xbb\xca\x52\x4d\ +\x59\x96\xe9\x8b\x9b\x63\x2c\xc7\x34\x69\xb7\x96\xc8\x2c\x8d\x27\ +\x95\x5c\x3e\xe9\x78\x22\x9f\x94\xa6\x92\x4e\x27\x52\x49\x63\x59\ +\xa4\x22\x2b\x63\xb9\xa3\x4c\x48\x39\x49\xe6\xc4\xe8\x8c\x53\x1a\ +\x55\x3b\x63\x73\x59\x39\xaf\x10\x6b\x26\x2e\x2b\xf5\x7a\xa5\x8a\ +\x23\x7b\x7c\x10\xd1\x5e\x27\x89\x3d\x14\x54\xf3\xaf\xcf\xe6\xf9\ +\x46\x8a\xe8\x13\x8f\x58\x4b\x24\xd2\x83\x03\xbc\x30\x0a\x7f\xdd\ +\x24\x51\x5a\x44\x96\xa2\x32\x9c\xe4\x5b\x2c\x97\xb9\x5f\x40\xc9\ +\x7d\xd7\x27\xfb\xd1\x13\xdc\x8f\x81\x66\xe0\xf2\x34\xdd\x0f\x9e\ +\xc0\x6e\xb8\x86\x03\x2b\x2a\xea\xc3\x92\x61\x86\x2a\x4e\x60\x7f\ +\x01\xe5\x28\x40\xc1\x99\x0e\x23\x80\x22\xdd\xd9\x8c\x14\xbe\x78\ +\x54\xca\xcc\x24\xc7\xd3\xb8\xc2\xd9\x2c\xe7\x6a\x7d\xb6\xdc\x17\ +\x36\xcb\xe5\x33\xea\xdc\x0a\x2b\xa9\x8d\x2f\xe7\x25\xeb\xdd\x0e\ +\x33\x2e\x72\x9f\xc2\xcc\xa8\x77\x7d\x66\xc6\x1b\xcc\xef\xf2\x48\ +\xa6\x8c\x0e\x28\xa3\x2d\x9e\x88\x63\x66\x74\x00\x9f\x1b\xd5\x84\ +\x37\x0f\xfe\x01\xbd\x89\x17\xfc\ \x00\x00\x0f\x9f\ \x00\ \x00\xa2\x2c\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ @@ -37791,61 +37797,61 @@ qt_resource_struct = "\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x6b\xbd\ -\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xbd\x6a\ -\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x1f\x87\ -\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xde\x6f\ -\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x08\x51\ -\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x89\x07\ -\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe1\xa5\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb2\xd6\ -\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x59\x16\ -\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xfa\x7f\ -\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xd6\x8c\ -\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xe7\x69\ -\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x76\x71\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xdc\x0b\ -\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa1\xcc\ -\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xcc\x20\ -\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc0\xb5\ -\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x97\xb4\ -\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x23\x70\ -\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xac\xbf\ -\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xb7\x21\ -\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x11\x57\ -\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x8f\xfb\ -\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x08\x5d\ -\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x69\x5e\ -\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x34\xe0\ -\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x80\x11\ -\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xc9\x78\ -\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xf7\x73\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xe9\x09\ -\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x4c\x1f\ -\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\x9f\xbb\ -\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x06\x58\ -\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\x9d\x98\ -\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb4\xdb\ -\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x28\x30\ -\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xc9\x42\ -\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x5e\x5e\ -\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xbf\xc7\ -\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x44\x85\ -\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x06\xfe\x10\ -\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdb\x30\ -\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x2f\x61\ -\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x5f\x8b\ -\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x07\xfc\xeb\ -\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x0f\xb1\ -\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd3\xed\ -\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x92\xe8\ -\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xef\x2a\ -\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xed\x19\ -\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x3c\xc5\ -\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x98\x58\ -\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x2f\x81\ +\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x6c\x16\ +\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xbd\xc3\ +\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x1f\xe0\ +\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xde\xc8\ +\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x08\xaa\ +\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x89\x60\ +\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe1\xfe\ +\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb3\x2f\ +\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x59\x6f\ +\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xfa\xd8\ +\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xd6\xe5\ +\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xe7\xc2\ +\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x76\xca\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xdc\x64\ +\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa2\x25\ +\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xcc\x79\ +\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc1\x0e\ +\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x98\x0d\ +\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x23\xc9\ +\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xad\x18\ +\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xb7\x7a\ +\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x11\xb0\ +\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x90\x54\ +\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x08\xb6\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x69\xb7\ +\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x35\x39\ +\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x80\x6a\ +\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xc9\xd1\ +\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xf7\xcc\ +\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xe9\x62\ +\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x4c\x78\ +\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa0\x14\ +\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x06\xb1\ +\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\x9d\xf1\ +\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb5\x34\ +\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x28\x89\ +\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xc9\x9b\ +\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x5e\xb7\ +\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc0\x20\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x44\xde\ +\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x06\xfe\x69\ +\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdb\x89\ +\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x2f\xba\ +\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x5f\xe4\ +\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x07\xfd\x44\ +\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x10\x0a\ +\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd4\x46\ +\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x93\x41\ +\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xef\x83\ +\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xed\x72\ +\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x3d\x1e\ +\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x98\xb1\ +\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x2f\xda\ \x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x77\x44\ -\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x80\x58\ +\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x80\xb1\ " def qInitResources(): diff --git a/src/Mod/Draft/Resources/ui/userprefs-import.ui b/src/Mod/Draft/Resources/ui/userprefs-import.ui index 09d5ee1c2..a14084d3b 100755 --- a/src/Mod/Draft/Resources/ui/userprefs-import.ui +++ b/src/Mod/Draft/Resources/ui/userprefs-import.ui @@ -320,6 +320,26 @@ If color mapping is choosed, you must choose a color mapping file containing a t + + + + + + If this is checked, when polylines have a width defined, they will be rendered as closed wires with the correct width + + + Render polylines with width + + + renderPolylineWidth + + + Mod/Draft + + + + + diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index f71e10166..ba8fa2909 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -202,6 +202,7 @@ class fcformat: self.makeBlocks = params.GetBool("groupLayers") self.stdSize = params.GetBool("dxfStdSize") self.importDxfHatches = params.GetBool("importDxfHatches") + self.renderPolylineWidth = params.GetBool("renderPolylineWidth") bparams = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/View") if self.paramstyle > 1: @@ -403,7 +404,21 @@ def drawPolyline(polyline,shapemode=False,num=None): warn(polyline,num) if edges: try: - if (fmt.paramstyle >= 4) and (not curves) and (not shapemode): + width = rawValue(polyline,43) + if width and fmt.renderPolylineWidth: + w = Part.Wire(edges) + w1 = w.makeOffset(width/2) + if polyline.closed: + w2 = w.makeOffset(-width/2) + w1 = Part.Face(w1) + w2 = Part.Face(w2) + if w1.BoundBox.DiagonalLength > w2.BoundBox.DiagonalLength: + return w1.cut(w2) + else: + return w2.cut(w1) + else: + return Part.Face(w1) + elif (fmt.paramstyle >= 4) and (not curves) and (not shapemode): ob = Draft.makeWire(verts) ob.Closed = polyline.closed return ob From 84d8605b83b1f839590cb4c6c6842f7ff570219f Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 17:29:50 -0300 Subject: [PATCH 184/517] Fixed 0000701 : Draft Wire naming --- src/Mod/Draft/Draft.py | 2 +- src/Mod/Draft/DraftTools.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 2e7cf692d..7b1c5dc8f 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -528,7 +528,7 @@ def makeWire(pointslist,closed=False,placement=None,face=True,support=None): print closed if placement: typecheck([(placement,FreeCAD.Placement)], "makeWire") if len(pointslist) == 2: fname = "Line" - else: fname = "Wire" + else: fname = "DWire" obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython",fname) _Wire(obj) obj.Points = pointslist diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index bde2ad4a7..d137c5228 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -416,7 +416,7 @@ class Line(Creator): todo.delay(self.doc.removeObject,old) self.obj = None if (len(self.node) > 1): - self.commit(translate("draft","Create Wire"), + self.commit(translate("draft","Create DWire"), partial(Draft.makeWire,self.node,closed, face=self.ui.fillmode,support=self.support)) if self.ui: @@ -456,7 +456,7 @@ class Line(Creator): if ((point-self.node[0]).Length < Draft.tolerance()): self.undolast() self.finish(True,cont=True) - msg(translate("draft", "Wire has been closed\n")) + msg(translate("draft", "DWire has been closed\n")) def undolast(self): "undoes last line segment" @@ -523,10 +523,10 @@ class Wire(Line): def GetResources(self): return {'Pixmap' : 'Draft_Wire', 'Accel' : "W, I", - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Wire"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Creates a multiple-point wire. CTRL to snap, SHIFT to constrain")} + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "DWire"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Creates a multiple-point DraftWire (DWire). CTRL to snap, SHIFT to constrain")} def Activated(self): - Line.Activated(self,name=str(translate("draft","Wire"))) + Line.Activated(self,name=str(translate("draft","DWire"))) class BSpline(Line): From 4c0da720b024cb13e125db989eae5157cabfc977 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 11:48:43 +0200 Subject: [PATCH 185/517] 0000710: merge project annoyance --- src/Gui/CommandDoc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 02e043490..46c5f5681 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -281,7 +281,7 @@ void StdCmdMergeProjects::activated(int iMsg) { QString exe = QString::fromUtf8(App::GetApplication().getExecutableName()); QString project = QFileDialog::getOpenFileName(Gui::getMainWindow(), - QString::fromUtf8(QT_TR_NOOP("Merge project")), QString(), + QString::fromUtf8(QT_TR_NOOP("Merge project")), QDir::homePath(), QString::fromUtf8(QT_TR_NOOP("%1 document (*.fcstd)")).arg(exe)); if (!project.isEmpty()) { App::Document* doc = App::GetApplication().getActiveDocument(); From 27aef69cd95f5daacba2d964ab8d6bce2de309ac Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 12:07:04 +0200 Subject: [PATCH 186/517] 0000717: Version info causes crash --- src/App/ApplicationPy.cpp | 41 ++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/App/ApplicationPy.cpp b/src/App/ApplicationPy.cpp index d74b1b4a7..15781cc3d 100644 --- a/src/App/ApplicationPy.cpp +++ b/src/App/ApplicationPy.cpp @@ -383,23 +383,36 @@ PyObject* Application::sGetVersion(PyObject * /*self*/, PyObject *args,PyObject if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception - PyObject* pList = PyList_New(5); - PyObject *pItem; - pItem = PyString_FromString(Application::Config()["BuildVersionMajor"].c_str()); - PyList_SetItem(pList, 0, pItem); - pItem = PyString_FromString(Application::Config()["BuildVersionMinor"].c_str()); - PyList_SetItem(pList, 1, pItem); - pItem = PyString_FromString(Application::Config()["BuildRevision"].c_str()); - PyList_SetItem(pList, 2, pItem); - pItem = PyString_FromString(Application::Config()["BuildRepositoryURL"].c_str()); - PyList_SetItem(pList, 4, pItem); - pItem = PyString_FromString(Application::Config()["BuildCurrentDate"].c_str()); - PyList_SetItem(pList, 6, pItem); + Py::List list; + const std::map& cfg = Application::Config(); + std::map::const_iterator it; - return pList; + it = cfg.find("BuildVersionMajor"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildVersionMinor"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRevision"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRepositoryURL"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRevisionDate"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRevisionBranch"); + if (it != cfg.end()) + list.append(Py::String(it->second)); + + it = cfg.find("BuildRevisionHash"); + if (it != cfg.end()) + list.append(Py::String(it->second)); + + return Py::new_reference_to(list); } - PyObject* Application::sAddImportType(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { char *psKey,*psMod; From a077d4f1788d055cdf0c732e2190e13bc4f33cf1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 15:03:19 +0200 Subject: [PATCH 187/517] 0000716: src/Tools/PyTools.c: strange assignment and a memory leak --- src/Base/PyTools.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Base/PyTools.c b/src/Base/PyTools.c index 2346f80cc..d204ae72d 100644 --- a/src/Base/PyTools.c +++ b/src/Base/PyTools.c @@ -377,8 +377,10 @@ const char *PP_Init(const char *modname) { //#ifdef FC_OS_LINUX /* cannot convert `const char *' to `char *' in assignment */ if (modname!=NULL) return modname; { /* we assume here that the caller frees allocated memory */ - char* __main__=(char *)malloc(sizeof("__main__")); - return __main__="__main__"; + // #0000716: strange assignment and a memory leak + return "__main__"; + //char* __main__=(char *)malloc(sizeof("__main__")); + //return __main__="__main__"; } //#else // return modname == NULL ? "__main__" : modname; /* default to '__main__' */ From e499e3344419fb93d77a2f82460ccdf1bc6c3f78 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 15:03:48 +0200 Subject: [PATCH 188/517] Expose merge project function to python --- src/Gui/CommandDoc.cpp | 3 --- src/Gui/DocumentPy.xml | 5 +++++ src/Gui/DocumentPyImp.cpp | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 46c5f5681..b9d0ea68b 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -294,9 +294,6 @@ void StdCmdMergeProjects::activated(int iMsg) return; } - QString dir1 = proj.absoluteDir().filePath(proj.baseName()); - QString dir2 = info.absoluteDir().filePath(info.baseName()); - Base::FileInfo fi((const char*)project.toUtf8()); Base::ifstream str(fi, std::ios::in | std::ios::binary); MergeDocuments md(doc); diff --git a/src/Gui/DocumentPy.xml b/src/Gui/DocumentPy.xml index 75ac71a54..c76e101cf 100644 --- a/src/Gui/DocumentPy.xml +++ b/src/Gui/DocumentPy.xml @@ -77,6 +77,11 @@ Send a message to all views of the document + + + + Merges this document with another project file + diff --git a/src/Gui/DocumentPyImp.cpp b/src/Gui/DocumentPyImp.cpp index 4d30e7cc5..67b66f36a 100644 --- a/src/Gui/DocumentPyImp.cpp +++ b/src/Gui/DocumentPyImp.cpp @@ -32,6 +32,7 @@ #include #include "Document.h" +#include "MergeDocuments.h" #include "ViewProviderExtern.h" // inclusion of the generated files (generated out of DocumentPy.xml) @@ -234,6 +235,22 @@ PyObject* DocumentPy::sendMsgToViews(PyObject *args) } PY_CATCH; } +PyObject* DocumentPy::mergeProject(PyObject *args) +{ + char* filename; + if (!PyArg_ParseTuple(args, "s", &filename)) // convert args: Python->C + return NULL; // NULL triggers exception + + PY_TRY { + Base::FileInfo fi(filename); + Base::ifstream str(fi, std::ios::in | std::ios::binary); + App::Document* doc = getDocumentPtr()->getDocument(); + MergeDocuments md(doc); + md.importObjects(str); + Py_Return; + } PY_CATCH; +} + Py::Object DocumentPy::getActiveObject(void) const { App::DocumentObject *object = getDocumentPtr()->getDocument()->getActiveObject(); From c1f8018a1242ec5ab0fbe94334aca8a155d12119 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 16:57:36 +0200 Subject: [PATCH 189/517] Add method Document::findObject() --- src/App/Document.cpp | 15 +++++++++ src/App/Document.h | 1 + src/App/DocumentPyImp.cpp | 66 ++++++++++++++++++--------------------- 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 519f5d7e4..f130bb35a 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -63,6 +63,7 @@ recompute path. Also enables more complicated dependencies beyond trees. #include #include #include +#include #include "Document.h" @@ -1689,6 +1690,20 @@ std::vector Document::getObjectsOfType(const Base::Type& typeId return Objects; } +std::vector Document::findObjects(const Base::Type& typeId, const char* objname) const +{ + boost::regex rx(objname); + boost::cmatch what; + std::vector Objects; + for (std::vector::const_iterator it = d->objectArray.begin(); it != d->objectArray.end(); ++it) { + if ((*it)->getTypeId().isDerivedFrom(typeId)) { + if (boost::regex_match((*it)->getNameInDocument(), what, rx)) + Objects.push_back(*it); + } + } + return Objects; +} + int Document::countObjectsOfType(const Base::Type& typeId) const { int ct=0; diff --git a/src/App/Document.h b/src/App/Document.h index dcf56d670..d1675001e 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -161,6 +161,7 @@ public: /// Returns a list of all Objects std::vector getObjects() const; std::vector getObjectsOfType(const Base::Type& typeId) const; + std::vector findObjects(const Base::Type& typeId, const char* objname) const; /// Returns an array with the correct types already. template inline std::vector getObjectsOfType() const; int countObjectsOfType(const Base::Type& typeId) const; diff --git a/src/App/DocumentPyImp.cpp b/src/App/DocumentPyImp.cpp index 3b7fdd289..6bd02f51c 100644 --- a/src/App/DocumentPyImp.cpp +++ b/src/App/DocumentPyImp.cpp @@ -290,42 +290,36 @@ PyObject* DocumentPy::findObjects(PyObject *args) char *sType="App::DocumentObject", *sName=0; if (!PyArg_ParseTuple(args, "|ss",&sType, &sName)) // convert args: Python->C return NULL; // NULL triggers exception - - Base::Type type = Base::Type::fromName(sType); - if (type == Base::Type::badType()) { - PyErr_Format(PyExc_Exception, "'%s' is not a valid type", sType); - return NULL; - } - - if (!type.isDerivedFrom(App::DocumentObject::getClassTypeId())) { - PyErr_Format(PyExc_Exception, "Type '%s' does not inherit from 'App::DocumentObject'", sType); - return NULL; - } - - std::vector res; - std::vector objs = getDocumentPtr()->getObjectsOfType(type); - - if (sName) { - try { - boost::regex rx(sName); - boost::cmatch what; - for (std::vector::const_iterator It = objs.begin();It != objs.end();++It) { - if (boost::regex_match((*It)->getNameInDocument(), what, rx)) - res.push_back(*It); - } - } - catch (const boost::regex_error& e) { - PyErr_SetString(PyExc_RuntimeError, e.what()); - return 0; - } - } - else { - res = objs; - } - - Py_ssize_t index=0; - PyObject* list = PyList_New((Py_ssize_t)res.size()); - for (std::vector::const_iterator It = res.begin();It != res.end();++It, index++) + + Base::Type type = Base::Type::fromName(sType); + if (type == Base::Type::badType()) { + PyErr_Format(PyExc_Exception, "'%s' is not a valid type", sType); + return NULL; + } + + if (!type.isDerivedFrom(App::DocumentObject::getClassTypeId())) { + PyErr_Format(PyExc_Exception, "Type '%s' does not inherit from 'App::DocumentObject'", sType); + return NULL; + } + + std::vector res; + + if (sName) { + try { + res = getDocumentPtr()->findObjects(type, sName); + } + catch (const boost::regex_error& e) { + PyErr_SetString(PyExc_RuntimeError, e.what()); + return 0; + } + } + else { + res = getDocumentPtr()->getObjectsOfType(type); + } + + Py_ssize_t index=0; + PyObject* list = PyList_New((Py_ssize_t)res.size()); + for (std::vector::const_iterator It = res.begin();It != res.end();++It, index++) PyList_SetItem(list, index, (*It)->getPyObject()); return list; } From c7bffd2ce62d08efb10432d7bf61938772d834ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Wed, 23 May 2012 19:04:35 +0200 Subject: [PATCH 190/517] Added draft computation to GZ tool. --- src/Mod/Ship/tankGZ/TaskPanel.py | 47 ++++++++++++++++++++------------ src/Mod/Ship/tankGZ/TaskPanel.ui | 2 +- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 8a47e67ae..9864bfd10 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -30,12 +30,14 @@ from PyQt4 import QtGui,QtCore from Instance import * from TankInstance import * from shipUtils import Paths, Translator +from shipHydrostatics import Tools as Hydrostatics class TaskPanel: def __init__(self): self.ui = Paths.modulePath() + "/tankGZ/TaskPanel.ui" self.ship = None self.tanks = {} + self.trim = 0.0 def accept(self): if not self.ship: @@ -163,14 +165,18 @@ class TaskPanel: """ self.form.setWindowTitle(Translator.translate("GZ curve computation")) self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) + self.form.findChild(QtGui.QGroupBox, "AnglesGroup").setTitle(Translator.translate("Roll angles.")) def onTanksSelection(self): """ Called when tanks are selected or deselected. """ # Set displacement label disp = self.computeDisplacement() - self.form.disp.setText(Translator.translate("Displacement") + ' %g [kg]' % (disp[0])) - + self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) + # Set draft label + draft = self.computeDraft(disp[0]) + self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft)) + def getTanks(self): """ Get the selected tanks objects list. @return Selected tanks list. @@ -192,23 +198,9 @@ class TaskPanel: """ if not self.ship: return None - # Test if is a ship instance - obj = self.ship - props = obj.PropertiesList - try: - props.index("IsShip") - except ValueError: - return None - if not obj.IsShip: - return None - # Test if properties already exist - try: - props.index("WeightNames") - except: - return None # Get ship structure weights W = [0.0, 0.0, 0.0, 0.0] - sWeights = weights(obj) + sWeights = weights(self.ship) for w in sWeights: W[0] = W[0] + w[1] W[1] = W[1] + w[1]*w[2][0] @@ -224,6 +216,27 @@ class TaskPanel: W[3] = W[3] + w[0]*w[3] return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] + def computeDraft(self, disp): + """ Computes ship draft. + @param disp Ship displacement. + @return Ship draft. None if errors detected. + @note 0 trim will be assumed. + """ + if not self.ship: + return None + # Initial condition + trim = 0.0 + dens = 1025 + bbox = self.ship.Shape.BoundBox + draft = bbox.ZMin + dx = bbox.XMax - bbox.XMin + dy = bbox.YMax - bbox.YMin + w = 0.0 + while(abs(disp - w)/disp > 0.01): + draft = draft + (disp - w) / (dens*dx*dy) + w = 1000.0*Hydrostatics.Displacement(self.ship, draft, trim)[1] + return draft + def createTask(): panel = TaskPanel() Gui.Control.showDialog(panel) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index a1f16c39b..41823bf71 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -76,7 +76,7 @@ - + 0 From 555c7ca51689bfda84f74255e6489dfc22c73f58 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 23 May 2012 18:03:25 -0300 Subject: [PATCH 191/517] Small GUI adjustments in Draft --- src/Mod/Draft/DraftGui.py | 15 ++++++++++++++- src/Mod/Draft/DraftTools.py | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 752abb76b..13517f478 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -523,13 +523,24 @@ class DraftToolBar: self.xValue.setEnabled(True) self.yValue.setEnabled(True) self.isRelative.show() + self.undoButton.show() + self.continueCmd.show() + + def wireUi(self,title=None): + if title: + self.pointUi(title) + else: + self.pointUi(translate("draft", "DWire")) + self.xValue.setEnabled(True) + self.yValue.setEnabled(True) + self.isRelative.show() self.hasFill.show() self.finishButton.show() self.closeButton.show() self.wipeButton.show() self.undoButton.show() self.continueCmd.show() - + def circleUi(self): self.pointUi(translate("draft", "Circle")) self.continueCmd.show() @@ -935,6 +946,8 @@ class DraftToolBar: if self.finishButton.isVisible(): self.finish() spec = True + elif txt.endsWith("t"): + self.continueCmd.setChecked(not self.continueCmd.isChecked()) elif txt.endsWith("w"): self.wipeLine() elif txt.endsWith("s"): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index d137c5228..885e781c6 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -400,7 +400,10 @@ class Line(Creator): Creator.Activated(self,name) if self.doc: self.obj = None - self.ui.lineUi(name) + if self.isWire: + self.ui.wireUi(name) + else: + self.ui.lineUi(name) self.linetrack = lineTracker() self.constraintrack = lineTracker(dotted=True) self.obj=self.doc.addObject("Part::Feature",self.featureName) From f19a0d20dacfebb8587155de1935e6dd3941cc5f Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 25 May 2012 12:12:30 +0200 Subject: [PATCH 192/517] Add parameter to keep trailing digits in object name of copy, other little fix --- src/App/Document.cpp | 13 ++++++++----- src/App/Document.h | 4 ++-- src/App/DocumentPyImp.cpp | 6 +++--- src/Mod/Part/Gui/Command.cpp | 2 -- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index f130bb35a..61d1b7921 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1484,15 +1484,18 @@ void Document::breakDependency(DocumentObject* pcObject, bool clear) } DocumentObject* Document::_copyObject(DocumentObject* obj, std::map& copy_map, bool recursive) + DocumentObject*>& copy_map, bool recursive, + bool keepdigitsatend) { if (!obj) return 0; // remove number from end to avoid lengthy names std::string objname = obj->getNameInDocument(); + if (!keepdigitsatend) { size_t lastpos = objname.length()-1; while (objname[lastpos] >= 48 && objname[lastpos] <= 57) lastpos--; objname = objname.substr(0, lastpos+1); + } DocumentObject* copy = addObject(obj->getTypeId().getName(),objname.c_str()); if (!copy) return 0; copy->addDynamicProperties(obj); @@ -1512,7 +1515,7 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::map(it->second)->setValue(pt->second); } else if (recursive) { - DocumentObject* link_copy = _copyObject(link, copy_map, recursive); + DocumentObject* link_copy = _copyObject(link, copy_map, recursive, keepdigitsatend); copy_map[link] = link_copy; static_cast(it->second)->setValue(link_copy); } @@ -1531,7 +1534,7 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::mapsecond); } else { - links_copy.push_back(_copyObject(*jt, copy_map, recursive)); + links_copy.push_back(_copyObject(*jt, copy_map, recursive, keepdigitsatend)); copy_map[*jt] = links_copy.back(); } } @@ -1561,10 +1564,10 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::map copy_map; - DocumentObject* copy = _copyObject(obj, copy_map, recursive); + DocumentObject* copy = _copyObject(obj, copy_map, recursive, keepdigitsatend); return copy; } diff --git a/src/App/Document.h b/src/App/Document.h index d1675001e..38b247a20 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -140,7 +140,7 @@ public: * are copied as well. By default \a recursive is false. * Returns the copy of the object or 0 if the creation failed. */ - DocumentObject* copyObject(DocumentObject* obj, bool recursive=false); + DocumentObject* copyObject(DocumentObject* obj, bool recursive=false, bool keepdigitsatend=false); /** Move an object from another document to this document * If \a recursive is true then all objects this object depends on * are moved as well. By default \a recursive is false. @@ -261,7 +261,7 @@ protected: void _remObject(DocumentObject* pcObject); void _addObject(DocumentObject* pcObject, const char* pObjectName); DocumentObject* _copyObject(DocumentObject* obj, std::map&, bool recursive=false); + DocumentObject*>&, bool recursive=false, bool keepdigitsatend=false); /// checks if a valid transaction is open void _checkTransaction(void); void breakDependency(DocumentObject* pcObject, bool clear); diff --git a/src/App/DocumentPyImp.cpp b/src/App/DocumentPyImp.cpp index 6bd02f51c..64b04d8b9 100644 --- a/src/App/DocumentPyImp.cpp +++ b/src/App/DocumentPyImp.cpp @@ -163,12 +163,12 @@ PyObject* DocumentPy::removeObject(PyObject *args) PyObject* DocumentPy::copyObject(PyObject *args) { - PyObject *obj, *rec=0; - if (!PyArg_ParseTuple(args, "O!|O!",&(DocumentObjectPy::Type),&obj,&PyBool_Type,&rec)) + PyObject *obj, *rec=0, *keep=0; + if (!PyArg_ParseTuple(args, "O!|O!O!",&(DocumentObjectPy::Type),&obj,&PyBool_Type,&rec,&PyBool_Type,&keep)) return NULL; // NULL triggers exception DocumentObjectPy* docObj = static_cast(obj); - DocumentObject* copy = getDocumentPtr()->copyObject(docObj->getDocumentObjectPtr(), rec==Py_True); + DocumentObject* copy = getDocumentPtr()->copyObject(docObj->getDocumentObjectPtr(), rec==Py_True, keep==Py_True); if (copy) { return copy->getPyObject(); } diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 1b616525a..33cd008ee 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -511,7 +511,6 @@ void CmdPartExport::activated(int iMsg) if (!fn.isEmpty()) { App::Document* pDoc = getDocument(); if (!pDoc) return; // no document - openCommand("Import Part"); QString ext = QFileInfo(fn).suffix().toLower(); if (ext == QLatin1String("step") || ext == QLatin1String("stp") || @@ -522,7 +521,6 @@ void CmdPartExport::activated(int iMsg) else { Gui::Application::Instance->exportTo((const char*)fn.toUtf8(),pDoc->getName(),"Part"); } - commitCommand(); } } From 5833e85f00c8ae9fbd1a9816e3d32f5044fa8d71 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 14 May 2012 11:13:19 -0300 Subject: [PATCH 193/517] Fixed bug in Draft Clone --- src/Mod/Draft/Draft.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 6f8250a3d..0014a4513 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2853,8 +2853,9 @@ class _Clone: if o.isDerivedFrom("Part::Feature"): sh = o.Shape.copy() m = FreeCAD.Matrix() - m.scale(obj.Scale) - sh = sh.transformGeometry(m) + if hasattr(obj,"Scale") and not sh.isNull(): + m.scale(obj.Scale) + sh = sh.transformGeometry(m) shapes.append(sh) if shapes: obj.Shape = Part.makeCompound(shapes) From 0778aef53bf9c0d82f24d18384bdd11ee328f783 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 14 May 2012 19:15:11 +0200 Subject: [PATCH 194/517] Replace makeTube algorithm --- src/Mod/Part/App/AppPartPy.cpp | 29 +++++++++++++++++-- src/Mod/Part/App/TopoShape.cpp | 51 ++++++++++++++++++++++------------ src/Mod/Part/App/TopoShape.h | 3 +- 3 files changed, 60 insertions(+), 23 deletions(-) diff --git a/src/Mod/Part/App/AppPartPy.cpp b/src/Mod/Part/App/AppPartPy.cpp index 2662593c5..2132042df 100644 --- a/src/Mod/Part/App/AppPartPy.cpp +++ b/src/Mod/Part/App/AppPartPy.cpp @@ -1043,14 +1043,36 @@ static PyObject * makeTube(PyObject *self, PyObject *args) PyObject *pshape; double radius; double tolerance=0.001; + char* scont = "C0"; + int maxdegree = 3; + int maxsegment = 30; // Path + radius - if (!PyArg_ParseTuple(args, "O!d", &(TopoShapePy::Type), &pshape, &radius)) + if (!PyArg_ParseTuple(args, "O!d|sii", &(TopoShapePy::Type), &pshape, &radius, &scont, &maxdegree, &maxsegment)) return 0; + std::string str_cont = scont; + int cont; + if (str_cont == "C0") + cont = (int)GeomAbs_C0; + else if (str_cont == "C1") + cont = (int)GeomAbs_C1; + else if (str_cont == "C2") + cont = (int)GeomAbs_C2; + else if (str_cont == "C3") + cont = (int)GeomAbs_C3; + else if (str_cont == "CN") + cont = (int)GeomAbs_CN; + else if (str_cont == "G1") + cont = (int)GeomAbs_G1; + else if (str_cont == "G2") + cont = (int)GeomAbs_G2; + else + cont = (int)GeomAbs_C0; + try { const TopoDS_Shape& path_shape = static_cast(pshape)->getTopoShapePtr()->_Shape; TopoShape myShape(path_shape); - TopoDS_Shape face = myShape.makeTube(radius, tolerance); + TopoDS_Shape face = myShape.makeTube(radius, tolerance, cont, maxdegree, maxsegment); return new TopoShapeFacePy(new TopoShape(face)); } catch (Standard_Failure) { @@ -1465,7 +1487,8 @@ struct PyMethodDef Part_methods[] = { "these must have the same number of edges."}, {"makeTube" ,makeTube,METH_VARARGS, - "makeTube(edge,float) -- Create a tube."}, + "makeTube(edge,radius,[continuity,max degree,max segments]) -- Create a tube.\n" + "continuity is a string which must be 'C0','C1','C2','C3','CN','G1' or 'G1',"}, {"makeSweepSurface" ,makeSweepSurface,METH_VARARGS, "makeSweepSurface(edge(path),edge(profile),[float]) -- Create a profile along a path."}, diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index f78bc5026..22ccd16ad 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -32,7 +32,9 @@ # include # include # include +# include # include +# include # include # include # include @@ -1343,7 +1345,8 @@ TopoDS_Shape TopoShape::makePipeShell(const TopTools_ListOfShape& profiles, return mkPipeShell.Shape(); } -TopoDS_Shape TopoShape::makeTube(double radius, double tol) const +#if 0 +TopoDS_Shape TopoShape::makeTube() const { // http://opencascade.blogspot.com/2009/11/surface-modeling-part3.html if (this->_Shape.IsNull()) @@ -1378,43 +1381,54 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol) const ); return mkBuilder.Face(); } - -// for testing -static Handle(Law_Function) CreateBsFunction (const Standard_Real theFirst, const Standard_Real theLast) +#else +static Handle(Law_Function) CreateBsFunction (const Standard_Real theFirst, const Standard_Real theLast, const Standard_Real theRadius) { //Handle_Law_BSpline aBs; //Handle_Law_BSpFunc aFunc = new Law_BSpFunc (aBs, theFirst, theLast); Handle_Law_Linear aFunc = new Law_Linear(); - aFunc->Set(theFirst, 2.0, theLast, 3.0); + aFunc->Set(theFirst, theRadius, theLast, theRadius); return aFunc; } -// for testing -TopoDS_Shape TopoShape::makeTube() const +TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdegree, int maxsegm) const { // http://opencascade.blogspot.com/2009/11/surface-modeling-part3.html - Standard_Real theTol = 0.001; + Standard_Real theTol = tol; Standard_Boolean theIsPolynomial = Standard_True; Standard_Boolean myIsElem = Standard_True; - GeomAbs_Shape theContinuity = GeomAbs_G1; - Standard_Integer theMaxDegree = 3; - Standard_Integer theMaxSegment = 1000; + GeomAbs_Shape theContinuity = GeomAbs_Shape(cont); + Standard_Integer theMaxDegree = maxdegree; + Standard_Integer theMaxSegment = maxsegm; if (this->_Shape.IsNull()) Standard_Failure::Raise("Cannot sweep along empty spine"); - if (this->_Shape.ShapeType() != TopAbs_EDGE) - Standard_Failure::Raise("Spine shape is not an edge"); - const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); - BRepAdaptor_Curve path_adapt(path_edge); + Handle(Adaptor3d_HCurve) myPath; + if (this->_Shape.ShapeType() == TopAbs_EDGE) { + const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); + BRepAdaptor_Curve path_adapt(path_edge); + myPath = new BRepAdaptor_HCurve(path_adapt); + theContinuity = GeomAbs_C0; + } + //else if (this->_Shape.ShapeType() == TopAbs_WIRE) { + // const TopoDS_Wire& path_wire = TopoDS::Wire(this->_Shape); + // BRepAdaptor_CompCurve path_adapt(path_wire); + // myPath = new BRepAdaptor_HCompCurve(path_adapt); + //} + //else { + // Standard_Failure::Raise("Spine shape is neither an edge nor a wire"); + //} + else { + Standard_Failure::Raise("Spine shape is not an edge"); + } //circular profile - Handle(Geom_Circle) aCirc = new Geom_Circle (gp::XOY(), 1.0); + Handle(Geom_Circle) aCirc = new Geom_Circle (gp::XOY(), radius); aCirc->Rotate (gp::OZ(), Standard_PI/2.); //perpendicular section - Handle(BRepAdaptor_HCurve) myPath = new BRepAdaptor_HCurve(path_adapt); - Handle(Law_Function) myEvol = ::CreateBsFunction (myPath->FirstParameter(), myPath->LastParameter()); + Handle(Law_Function) myEvol = ::CreateBsFunction (myPath->FirstParameter(), myPath->LastParameter(), radius); Handle(GeomFill_SectionLaw) aSec = new GeomFill_EvolvedSection(aCirc, myEvol); Handle(GeomFill_LocationLaw) aLoc = new GeomFill_CurveAndTrihedron(new GeomFill_CorrectedFrenet); aLoc->SetCurve (myPath); @@ -1438,6 +1452,7 @@ TopoDS_Shape TopoShape::makeTube() const return TopoDS_Shape(); } +#endif TopoDS_Shape TopoShape::makeSweep(const TopoDS_Shape& profile, double tol, int fillMode) const { diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index 0cf1087f9..1de76b1ca 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -158,8 +158,7 @@ public: TopoDS_Shape makeThickSolid(const TopTools_ListOfShape& remFace, Standard_Real offset, Standard_Real tolerance) const; TopoDS_Shape makeSweep(const TopoDS_Shape& profile, double, int) const; - TopoDS_Shape makeTube(double radius, double tol) const; - TopoDS_Shape makeTube() const; + TopoDS_Shape makeTube(double radius, double tol, int cont, int maxdeg, int maxsegm) const; TopoDS_Shape makeHelix(Standard_Real pitch, Standard_Real height, Standard_Real radius, Standard_Real angle=0, Standard_Boolean left=Standard_False) const; TopoDS_Shape makeLoft(const TopTools_ListOfShape& profiles, Standard_Boolean isSolid, From 3b81c25665a3f04ee4481e1a5d104f1d5bb2750e Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Tue, 15 May 2012 18:01:15 +0200 Subject: [PATCH 195/517] add isNull() method to Rotation --- src/Base/RotationPy.xml | 8 ++++++++ src/Base/RotationPyImp.cpp | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/Base/RotationPy.xml b/src/Base/RotationPy.xml index 02dc34ee8..111cfb74c 100644 --- a/src/Base/RotationPy.xml +++ b/src/Base/RotationPy.xml @@ -48,6 +48,14 @@ + + + + isNull() -> Bool + returns True if the rotation equals the unity matrix + + + The rotation elements (as quaternion) diff --git a/src/Base/RotationPyImp.cpp b/src/Base/RotationPyImp.cpp index 7abede54c..159952c7e 100644 --- a/src/Base/RotationPyImp.cpp +++ b/src/Base/RotationPyImp.cpp @@ -144,6 +144,17 @@ PyObject* RotationPy::toEuler(PyObject * args) return Py::new_reference_to(tuple); } +PyObject* RotationPy::isNull(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + Base::Rotation rot = * getRotationPtr(); + Base::Rotation nullrot(0,0,0,1); + Base::Rotation nullrotinv(0,0,0,-1); + bool null = (rot == nullrot) | (rot == nullrotinv); + return Py_BuildValue("O", (null ? Py_True : Py_False)); +} + Py::Tuple RotationPy::getQ(void) const { double q0, q1, q2, q3; From b6003874f2a36314996cdd1890b944baf9c2779d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 16 May 2012 16:31:02 -0300 Subject: [PATCH 196/517] Added 0000145 : Drawing clip objects --- src/Mod/Drawing/App/AppDrawing.cpp | 2 + src/Mod/Drawing/App/CMakeLists.txt | 2 + src/Mod/Drawing/App/FeatureClip.cpp | 111 +++ src/Mod/Drawing/App/FeatureClip.h | 71 ++ src/Mod/Drawing/App/FeaturePage.cpp | 7 +- src/Mod/Drawing/App/Makefile.am | 2 + src/Mod/Drawing/Gui/Command.cpp | 47 +- src/Mod/Drawing/Gui/Resources/Drawing.qrc | 1 + src/Mod/Drawing/Gui/Resources/Makefile.am | 1 + .../Resources/icons/actions/drawing-clip.svg | 710 ++++++++++++++++++ src/Mod/Drawing/Gui/Workbench.cpp | 4 + 11 files changed, 955 insertions(+), 3 deletions(-) create mode 100644 src/Mod/Drawing/App/FeatureClip.cpp create mode 100644 src/Mod/Drawing/App/FeatureClip.h create mode 100644 src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg diff --git a/src/Mod/Drawing/App/AppDrawing.cpp b/src/Mod/Drawing/App/AppDrawing.cpp index a581668ba..016abf81b 100644 --- a/src/Mod/Drawing/App/AppDrawing.cpp +++ b/src/Mod/Drawing/App/AppDrawing.cpp @@ -22,6 +22,7 @@ #include "FeatureViewPart.h" #include "FeatureViewAnnotation.h" #include "FeatureProjection.h" +#include "FeatureClip.h" #include "PageGroup.h" extern struct PyMethodDef Drawing_methods[]; @@ -59,6 +60,7 @@ void DrawingExport initDrawing() Drawing::FeatureViewPartPython ::init(); Drawing::FeatureViewPython ::init(); Drawing::FeatureViewAnnotation ::init(); + Drawing::FeatureClip ::init(); } } // extern "C" diff --git a/src/Mod/Drawing/App/CMakeLists.txt b/src/Mod/Drawing/App/CMakeLists.txt index 98767a24a..00710b75e 100644 --- a/src/Mod/Drawing/App/CMakeLists.txt +++ b/src/Mod/Drawing/App/CMakeLists.txt @@ -29,6 +29,8 @@ SET(Features_SRCS FeatureViewPart.h FeatureViewAnnotation.cpp FeatureViewAnnotation.h + FeatureClip.cpp + FeatureClip.h PageGroup.cpp PageGroup.h ) diff --git a/src/Mod/Drawing/App/FeatureClip.cpp b/src/Mod/Drawing/App/FeatureClip.cpp new file mode 100644 index 000000000..c45229929 --- /dev/null +++ b/src/Mod/Drawing/App/FeatureClip.cpp @@ -0,0 +1,111 @@ +/*************************************************************************** + * Copyright (c) Yorik van Havre 2012 * + * * + * 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" + +#ifndef _PreComp_ +# include +#endif + + +#include +#include +#include +#include +#include +#include + +#include "FeatureClip.h" +#include "FeatureView.h" + +using namespace Drawing; +using namespace std; + + +//=========================================================================== +// FeaturePage +//=========================================================================== + +PROPERTY_SOURCE(Drawing::FeatureClip, App::DocumentObjectGroup) + +FeatureClip::FeatureClip(void) +{ + static const char *group = "Drawing view"; + App::PropertyType hidden = (App::PropertyType)(App::Prop_Hidden); + ADD_PROPERTY_TYPE(ViewResult ,(""),group,hidden,"Resulting SVG view of this clip"); + ADD_PROPERTY_TYPE(X ,(10),group,App::Prop_None ,"The left margin of the view area of this clip"); + ADD_PROPERTY_TYPE(Y ,(10),group,App::Prop_None ,"The top margin of the view area of this clip"); + ADD_PROPERTY_TYPE(Height ,(10),group,App::Prop_None ,"The height of the view area of this clip"); + ADD_PROPERTY_TYPE(Width ,(10),group,App::Prop_None ,"The width of the view area of this clip"); + ADD_PROPERTY_TYPE(ShowFrame ,(0),group,App::Prop_None,"Specifies if the clip frame appears on the page or not"); +} + +FeatureClip::~FeatureClip() +{ +} + +/// get called by the container when a Property was changed +void FeatureClip::onChanged(const App::Property* prop) +{ + App::DocumentObjectGroup::onChanged(prop); +} + +App::DocumentObjectExecReturn *FeatureClip::execute(void) +{ + ostringstream svg; + + // creating clip path + svg << "" + << "" << endl; + + // show clip frame on the page if needed + + if (ShowFrame.getValue()) { + svg << "" << endl; + } + + // create clipped group + svg << "" << endl; + + // get through the children and collect all the views + const std::vector &Grp = Group.getValues(); + for (std::vector::const_iterator It= Grp.begin();It!=Grp.end();++It) { + if ((*It)->getTypeId().isDerivedFrom(Drawing::FeatureView::getClassTypeId())) { + Drawing::FeatureView *View = dynamic_cast(*It); + svg << View->ViewResult.getValue() << endl; + } + } + + // closing clipped group + svg << "" << endl; + + ViewResult.setValue(svg.str().c_str()); + return App::DocumentObject::StdReturn; +} diff --git a/src/Mod/Drawing/App/FeatureClip.h b/src/Mod/Drawing/App/FeatureClip.h new file mode 100644 index 000000000..ae1e6c0fc --- /dev/null +++ b/src/Mod/Drawing/App/FeatureClip.h @@ -0,0 +1,71 @@ +/*************************************************************************** + * Copyright (c) Yorik van Havre 2012 * + * * + * 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 _FeatureClip_h_ +#define _FeatureClip_h_ + + +#include +#include + +namespace Drawing +{ + +/** Base class of all View Features in the drawing module + */ +class DrawingExport FeatureClip: public App::DocumentObjectGroup +{ + PROPERTY_HEADER(Drawing::FeatureClip); + +public: + /// Constructor + FeatureClip(void); + virtual ~FeatureClip(); + + App::PropertyFloat X; + App::PropertyFloat Y; + App::PropertyFloat Width; + App::PropertyFloat Height; + App::PropertyBool ShowFrame; + App::PropertyString ViewResult; + + /** @name methods overide Feature */ + //@{ + /// recalculate the Feature + virtual App::DocumentObjectExecReturn *execute(void); + //@} + + /// returns the type name of the ViewProvider + virtual const char* getViewProviderName(void) const { + return "DrawingGui::ViewProviderDrawingPage"; + } + +protected: + void onChanged(const App::Property* prop); +}; + + +} //namespace Drawing + + +#endif diff --git a/src/Mod/Drawing/App/FeaturePage.cpp b/src/Mod/Drawing/App/FeaturePage.cpp index 684fe28cf..c1730ebc4 100644 --- a/src/Mod/Drawing/App/FeaturePage.cpp +++ b/src/Mod/Drawing/App/FeaturePage.cpp @@ -37,6 +37,7 @@ #include "FeaturePage.h" #include "FeatureView.h" +#include "FeatureClip.h" using namespace Drawing; using namespace std; @@ -124,10 +125,14 @@ App::DocumentObjectExecReturn *FeaturePage::execute(void) // get through the children and collect all the views const std::vector &Grp = Group.getValues(); for (std::vector::const_iterator It= Grp.begin();It!=Grp.end();++It) { - if ((*It)->getTypeId().isDerivedFrom(Drawing::FeatureView::getClassTypeId())) { + if ( (*It)->getTypeId().isDerivedFrom(Drawing::FeatureView::getClassTypeId()) ) { Drawing::FeatureView *View = dynamic_cast(*It); ofile << View->ViewResult.getValue(); ofile << tempendl << tempendl << tempendl; + } else if ( (*It)->getTypeId().isDerivedFrom(Drawing::FeatureClip::getClassTypeId()) ) { + Drawing::FeatureClip *Clip = dynamic_cast(*It); + ofile << Clip->ViewResult.getValue(); + ofile << tempendl << tempendl << tempendl; } } } diff --git a/src/Mod/Drawing/App/Makefile.am b/src/Mod/Drawing/App/Makefile.am index 462017c0f..098b9b786 100644 --- a/src/Mod/Drawing/App/Makefile.am +++ b/src/Mod/Drawing/App/Makefile.am @@ -15,6 +15,8 @@ libDrawing_la_SOURCES=\ FeatureViewPart.h \ FeatureViewAnnotation.cpp \ FeatureViewAnnotation.h \ + FeatureClip.cpp \ + FeatureClip.h \ PageGroup.cpp \ PageGroup.h \ ProjectionAlgos.cpp \ diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index 2f9345b97..7ed5a4641 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -366,9 +366,9 @@ CmdDrawingAnnotation::CmdDrawingAnnotation() // seting the sGroup = QT_TR_NOOP("Drawing"); sMenuText = QT_TR_NOOP("&Annotation"); - sToolTipText = QT_TR_NOOP("Inserts an Annotation view in the active document"); + sToolTipText = QT_TR_NOOP("Inserts an Annotation view in the active drawing"); sWhatsThis = "Drawing_Annotation"; - sStatusTip = QT_TR_NOOP("Inserts an Annotation view in the active document"); + sStatusTip = QT_TR_NOOP("Inserts an Annotation view in the active drawing"); sPixmap = "actions/drawing-annotation"; } @@ -398,6 +398,48 @@ bool CmdDrawingAnnotation::isActive(void) return (getActiveGuiDocument() ? true : false); } + +//=========================================================================== +// Drawing_Clip +//=========================================================================== + +DEF_STD_CMD_A(CmdDrawingClip); + +CmdDrawingClip::CmdDrawingClip() + : Command("Drawing_Clip") +{ + // seting the + sGroup = QT_TR_NOOP("Drawing"); + sMenuText = QT_TR_NOOP("&Clip"); + sToolTipText = QT_TR_NOOP("Inserts a clip group in the active drawing"); + sWhatsThis = "Drawing_Annotation"; + sStatusTip = QT_TR_NOOP("Inserts a clip group in the active drawing"); + sPixmap = "actions/drawing-clip"; +} + +void CmdDrawingClip::activated(int iMsg) +{ + + std::vector pages = this->getDocument()->getObjectsOfType(Drawing::FeaturePage::getClassTypeId()); + if (pages.empty()){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page to insert"), + QObject::tr("Create a page to insert.")); + return; + } + std::string PageName = pages.front()->getNameInDocument(); + std::string FeatName = getUniqueObjectName("Clip"); + openCommand("Create Clip"); + doCommand(Doc,"App.activeDocument().addObject('Drawing::FeatureClip','%s')",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); + updateActive(); + commitCommand(); +} + +bool CmdDrawingClip::isActive(void) +{ + return (getActiveGuiDocument() ? true : false); +} + //=========================================================================== // Drawing_ExportPage //=========================================================================== @@ -495,6 +537,7 @@ void CreateDrawingCommands(void) rcCmdMgr.addCommand(new CmdDrawingOrthoViews()); rcCmdMgr.addCommand(new CmdDrawingOpenBrowserView()); rcCmdMgr.addCommand(new CmdDrawingAnnotation()); + rcCmdMgr.addCommand(new CmdDrawingClip()); rcCmdMgr.addCommand(new CmdDrawingExportPage()); rcCmdMgr.addCommand(new CmdDrawingProjectShape()); } diff --git a/src/Mod/Drawing/Gui/Resources/Drawing.qrc b/src/Mod/Drawing/Gui/Resources/Drawing.qrc index fad40eb81..bc0ae4cdf 100644 --- a/src/Mod/Drawing/Gui/Resources/Drawing.qrc +++ b/src/Mod/Drawing/Gui/Resources/Drawing.qrc @@ -17,6 +17,7 @@ icons/actions/drawing-orthoviews.svg icons/actions/drawing-openbrowser.svg icons/actions/drawing-annotation.svg + icons/actions/drawing-clip.svg translations/Drawing_af.qm translations/Drawing_de.qm translations/Drawing_es.qm diff --git a/src/Mod/Drawing/Gui/Resources/Makefile.am b/src/Mod/Drawing/Gui/Resources/Makefile.am index e42a14b03..69b335394 100644 --- a/src/Mod/Drawing/Gui/Resources/Makefile.am +++ b/src/Mod/Drawing/Gui/Resources/Makefile.am @@ -21,6 +21,7 @@ EXTRA_DIST = \ icons/actions/drawing-orthoviews.svg \ icons/actions/drawing-openbrowser.svg \ icons/actions/drawing-annotation.svg \ + icons/actions/drawing-clip.svg \ icons/Page.svg \ icons/Pages.svg \ icons/View.svg \ diff --git a/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg b/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg new file mode 100644 index 000000000..dd58ec78a --- /dev/null +++ b/src/Mod/Drawing/Gui/Resources/icons/actions/drawing-clip.svg @@ -0,0 +1,710 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/Mod/Drawing/Gui/Workbench.cpp b/src/Mod/Drawing/Gui/Workbench.cpp index b7bd8bbce..e74f510e6 100644 --- a/src/Mod/Drawing/Gui/Workbench.cpp +++ b/src/Mod/Drawing/Gui/Workbench.cpp @@ -63,6 +63,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *part << "Drawing_OrthoViews"; *part << "Drawing_OpenBrowserView"; *part << "Drawing_Annotation"; + *part << "Drawing_Clip"; *part << "Drawing_ExportPage"; return root; @@ -80,6 +81,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const *part << "Drawing_OrthoViews"; *part << "Drawing_OpenBrowserView"; *part << "Drawing_Annotation"; + *part << "Drawing_Clip"; *part << "Drawing_ExportPage"; return root; } @@ -97,6 +99,8 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const *img << "Drawing_NewPage"; *img << "Drawing_OrthoViews"; *img << "Drawing_OpenBrowserView"; + *img << "Drawing_Annotation"; + *img << "Drawing_Clip"; img = new Gui::ToolBarItem(root); img->setCommand("Views"); *img << "Drawing_NewView"; From abbb19987f7821991f4d97e63ea413afd74bf16b Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 00:12:30 +0200 Subject: [PATCH 197/517] fix in makeTube --- src/Mod/Part/App/TopoShape.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index 22ccd16ad..fd90af18f 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1409,7 +1409,6 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdeg const TopoDS_Edge& path_edge = TopoDS::Edge(this->_Shape); BRepAdaptor_Curve path_adapt(path_edge); myPath = new BRepAdaptor_HCurve(path_adapt); - theContinuity = GeomAbs_C0; } //else if (this->_Shape.ShapeType() == TopAbs_WIRE) { // const TopoDS_Wire& path_wire = TopoDS::Wire(this->_Shape); From d81094cd78398bdf7cd548bd4644404ee6bd1768 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 01:25:31 +0200 Subject: [PATCH 198/517] Mesh segmentation --- src/Mod/Mesh/App/CMakeLists.txt | 14 +- src/Mod/Mesh/App/Core/Algorithm.cpp | 37 ++-- src/Mod/Mesh/App/Core/Algorithm.h | 45 ++++- src/Mod/Mesh/App/Core/Approximation.cpp | 99 ++++----- src/Mod/Mesh/App/Core/Approximation.h | 203 +++++++++++-------- src/Mod/Mesh/App/Core/Curvature.cpp | 236 ++++++++++++++++++++++ src/Mod/Mesh/App/Core/Curvature.h | 75 +++++++ src/Mod/Mesh/App/Core/Segmentation.cpp | 228 +++++++++++++++++++++ src/Mod/Mesh/App/Core/Segmentation.h | 161 +++++++++++++++ src/Mod/Mesh/App/FeatureMeshCurvature.cpp | 50 ++--- src/Mod/Mesh/App/Makefile.am | 11 +- src/Mod/Mesh/App/Mesh.cpp | 12 +- src/Mod/Mesh/App/Mesh.h | 2 +- src/Mod/Mesh/App/MeshPy.xml | 17 +- src/Mod/Mesh/App/MeshPyImp.cpp | 51 ++++- 15 files changed, 1033 insertions(+), 208 deletions(-) create mode 100644 src/Mod/Mesh/App/Core/Curvature.cpp create mode 100644 src/Mod/Mesh/App/Core/Curvature.h create mode 100644 src/Mod/Mesh/App/Core/Segmentation.cpp create mode 100644 src/Mod/Mesh/App/Core/Segmentation.h diff --git a/src/Mod/Mesh/App/CMakeLists.txt b/src/Mod/Mesh/App/CMakeLists.txt index ee813be7b..97e285680 100644 --- a/src/Mod/Mesh/App/CMakeLists.txt +++ b/src/Mod/Mesh/App/CMakeLists.txt @@ -1,20 +1,26 @@ if(WIN32) - add_definitions(-DFCAppMesh -DWM4_FOUNDATION_DLL_EXPORT) + add_definitions(-DFCAppMesh -DWM4_FOUNDATION_DLL_EXPORT -DEIGEN2_SUPPORT) +else (Win32) + add_definitions(-DEIGEN2_SUPPORT) endif(WIN32) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/src/3rdParty ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_PATH} ${XERCESC_INCLUDE_DIR} + ${QT_QTCORE_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} - ${EIGEN2_INCLUDE_DIR} + ${EIGEN3_INCLUDE_DIR} ) set(Mesh_LIBS ${Boost_LIBRARIES} + ${QT_QTCORE_LIBRARY} + ${QT_QTCORE_LIBRARY_DEBUG} FreeCADBase FreeCADApp ) @@ -41,6 +47,8 @@ SET(Core_SRCS Core/Approximation.h Core/Builder.cpp Core/Builder.h + Core/Curvature.cpp + Core/Curvature.h Core/Definitions.cpp Core/Definitions.h Core/Degeneration.cpp @@ -61,6 +69,8 @@ SET(Core_SRCS Core/MeshKernel.h Core/Projection.cpp Core/Projection.h + Core/Segmentation.cpp + Core/Segmentation.h Core/SetOperations.cpp Core/SetOperations.h Core/Smoothing.cpp diff --git a/src/Mod/Mesh/App/Core/Algorithm.cpp b/src/Mod/Mesh/App/Core/Algorithm.cpp index 40d4907d4..281fba7f7 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.cpp +++ b/src/Mod/Mesh/App/Core/Algorithm.cpp @@ -1156,7 +1156,6 @@ void MeshAlgorithm::CheckFacets(const Base::ViewProjMethod* pclProj, const Base: { const MeshPointArray& p = _rclMesh.GetPoints(); const MeshFacetArray& f = _rclMesh.GetFacets(); - Base::SequencerLauncher seq("Check facets", f.size()); Base::Vector3f pt2d; unsigned long index=0; for (MeshFacetArray::_TConstIterator it = f.begin(); it != f.end(); ++it,++index) { @@ -1167,7 +1166,6 @@ void MeshAlgorithm::CheckFacets(const Base::ViewProjMethod* pclProj, const Base: break; } } - seq.next(); } } @@ -1743,47 +1741,38 @@ std::set MeshRefPointToFacets::NeighbourPoints(const std::vector< return nb; } -// ermittelt alle Nachbarn zum Facet deren Schwerpunkt unterhalb der mpx. Distanz befindet. -// Facet deren VISIT-Flag gesetzt ist werden nicht beruecksichtig. -/// @todo -void MeshRefPointToFacets::Neighbours (unsigned long ulFacetInd, float fMpxDist, std::vector &rclNb) +void MeshRefPointToFacets::Neighbours (unsigned long ulFacetInd, float fMaxDist, MeshCollector& collect) const { - rclNb.clear(); + std::set visited; Base::Vector3f clCenter = _rclMesh.GetFacet(ulFacetInd).GetGravityPoint(); const MeshFacetArray& rFacets = _rclMesh.GetFacets(); - SearchNeighbours(rFacets.begin() + ulFacetInd, clCenter, fMpxDist * fMpxDist, rclNb); - - for (std::vector::iterator i = rclNb.begin(); i != rclNb.end(); i++) - (*i)->ResetFlag(MeshFacet::VISIT); + SearchNeighbours(rFacets, ulFacetInd, clCenter, fMaxDist * fMaxDist, visited, collect); } -/// @todo -void MeshRefPointToFacets::SearchNeighbours(MeshFacetArray::_TConstIterator f_it, const Base::Vector3f &rclCenter, float fMpxDist, std::vector &rclNb) +void MeshRefPointToFacets::SearchNeighbours(const MeshFacetArray& rFacets, unsigned long index, const Base::Vector3f &rclCenter, + float fMaxDist2, std::set& visited, MeshCollector& collect) const { - if (f_it->IsFlag(MeshFacet::VISIT) == true) + if (visited.find(index) != visited.end()) return; - if (Base::DistanceP2(rclCenter, _rclMesh.GetFacet(*f_it).GetGravityPoint()) > fMpxDist) + const MeshFacet& face = rFacets[index]; + if (Base::DistanceP2(rclCenter, _rclMesh.GetFacet(face).GetGravityPoint()) > fMaxDist2) return; - rclNb.push_back(f_it); - f_it->SetFlag(MeshFacet::VISIT); - - MeshPointArray::_TConstIterator p_beg = _rclMesh.GetPoints().begin(); - MeshFacetArray::_TConstIterator f_beg = _rclMesh.GetFacets().begin(); - + visited.insert(index); + collect.Append(_rclMesh, index); for (int i = 0; i < 3; i++) { - const std::set &f = (*this)[f_it->_aulPoints[i]]; + const std::set &f = (*this)[face._aulPoints[i]]; for (std::set::const_iterator j = f.begin(); j != f.end(); ++j) { - SearchNeighbours(f_beg+*j, rclCenter, fMpxDist, rclNb); + SearchNeighbours(rFacets, *j, rclCenter, fMaxDist2, visited, collect); } } } MeshFacetArray::_TConstIterator -MeshRefPointToFacets::getFacet (unsigned long index) const +MeshRefPointToFacets::GetFacet (unsigned long index) const { return _rclMesh.GetFacets().begin() + index; } diff --git a/src/Mod/Mesh/App/Core/Algorithm.h b/src/Mod/Mesh/App/Core/Algorithm.h index 9baa667e2..78a4caf5b 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.h +++ b/src/Mod/Mesh/App/Core/Algorithm.h @@ -310,6 +310,43 @@ protected: const MeshKernel &_rclMesh; /**< The mesh kernel. */ }; +class MeshExport MeshCollector +{ +public: + MeshCollector(){} + virtual void Append(const MeshCore::MeshKernel&, unsigned long index) = 0; +}; + +class MeshExport PointCollector : public MeshCollector +{ +public: + PointCollector(std::vector& ind) : indices(ind){} + virtual void Append(const MeshCore::MeshKernel& kernel, unsigned long index) + { + unsigned long ulP1, ulP2, ulP3; + kernel.GetFacetPoints(index, ulP1, ulP2, ulP3); + indices.push_back(ulP1); + indices.push_back(ulP2); + indices.push_back(ulP3); + } + +private: + std::vector& indices; +}; + +class MeshExport FacetCollector : public MeshCollector +{ +public: + FacetCollector(std::vector& ind) : indices(ind){} + void Append(const MeshCore::MeshKernel&, unsigned long index) + { + indices.push_back(index); + } + +private: + std::vector& indices; +}; + /** * The MeshRefPointToFacets builds up a structure to have access to all facets indexing * a point. @@ -329,14 +366,14 @@ public: /// Rebuilds up data structure void Rebuild (void); const std::set& operator[] (unsigned long) const; - MeshFacetArray::_TConstIterator getFacet (unsigned long) const; + MeshFacetArray::_TConstIterator GetFacet (unsigned long) const; std::set NeighbourPoints(const std::vector& , int level) const; - void Neighbours (unsigned long ulFacetInd, float fMaxDist, std::vector &rclNb); + void Neighbours (unsigned long ulFacetInd, float fMaxDist, MeshCollector& collect) const; Base::Vector3f GetNormal(unsigned long) const; protected: - void SearchNeighbours(MeshFacetArray::_TConstIterator pFIter, const Base::Vector3f &rclCenter, - float fMaxDist, std::vector &rclNb); + void SearchNeighbours(const MeshFacetArray& rFacets, unsigned long index, const Base::Vector3f &rclCenter, + float fMaxDist, std::set &visit, MeshCollector& collect) const; protected: const MeshKernel &_rclMesh; /**< The mesh kernel. */ diff --git a/src/Mod/Mesh/App/Core/Approximation.cpp b/src/Mod/Mesh/App/Core/Approximation.cpp index ace1a796e..15b0c522f 100644 --- a/src/Mod/Mesh/App/Core/Approximation.cpp +++ b/src/Mod/Mesh/App/Core/Approximation.cpp @@ -37,6 +37,7 @@ #include //#define FC_USE_EIGEN +//#define FC_USE_BOOST #if defined(FC_USE_BOOST) #include #include @@ -54,25 +55,26 @@ extern "C" void LAPACK_DGESV (int const* n, int const* nrhs, #elif defined(FC_USE_EIGEN) # include #endif +# include using namespace MeshCore; -void Approximation::Convert( const Wm4::Vector3& Wm4, Base::Vector3f& pt) +void Approximation::Convert( const Wm4::Vector3& Wm4, Base::Vector3f& pt) { - pt.Set( Wm4.X(), Wm4.Y(), Wm4.Z() ); + pt.Set( (float)Wm4.X(), (float)Wm4.Y(), (float)Wm4.Z() ); } -void Approximation::Convert( const Base::Vector3f& pt, Wm4::Vector3& Wm4) +void Approximation::Convert( const Base::Vector3f& pt, Wm4::Vector3& Wm4) { Wm4.X() = pt.x; Wm4.Y() = pt.y; Wm4.Z() = pt.z; } -void Approximation::GetMgcVectorArray(std::vector< Wm4::Vector3 >& rcPts) const +void Approximation::GetMgcVectorArray(std::vector< Wm4::Vector3 >& rcPts) const { std::list< Base::Vector3f >::const_iterator It; for (It = _vPoints.begin(); It != _vPoints.end(); ++It) { - Wm4::Vector3 pt( (*It).x, (*It).y, (*It).z ); + Wm4::Vector3 pt( (*It).x, (*It).y, (*It).z ); rcPts.push_back( pt ); } } @@ -176,7 +178,7 @@ float PlaneFit::Fit() int r = lapack::syev('V','U',A,eigenval,lapack::optimal_workspace()); if (r) { } - float sigma; + float sigma = 0; #elif defined(FC_USE_EIGEN) Eigen::Matrix3d covMat = Eigen::Matrix3d::Zero(); covMat(0,0) = sxx; @@ -360,17 +362,15 @@ void PlaneFit::ProjectToPlane () // ------------------------------------------------------------------------------- -float FunctionContainer::dKoeff[]; // Koeffizienten der Quadrik - -bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance) +bool QuadraticFit::GetCurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance) { assert( _bIsFitted ); bool bResult = false; if (_bIsFitted) { - Wm4::Vector3 Dir0, Dir1; + Wm4::Vector3 Dir0, Dir1; FunctionContainer clFuncCont( _fCoeff ); bResult = clFuncCont.CurvatureInfo( x, y, z, rfCurv0, rfCurv1, Dir0, Dir1, dDistance ); @@ -382,7 +382,7 @@ bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, return bResult; } -bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1) +bool QuadraticFit::GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1) { bool bResult = false; @@ -394,12 +394,12 @@ bool QuadraticFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, f return bResult; } -const float& QuadraticFit::GetCoeffArray() const +const double& QuadraticFit::GetCoeffArray() const { return _fCoeff[0]; } -float QuadraticFit::GetCoeff(unsigned long ulIndex) const +double QuadraticFit::GetCoeff(unsigned long ulIndex) const { assert( ulIndex >= 0 && ulIndex < 10 ); @@ -414,9 +414,9 @@ float QuadraticFit::Fit() float fResult = FLOAT_MAX; if (CountPoints() > 0) { - std::vector< Wm4::Vector3 > cPts; + std::vector< Wm4::Vector3 > cPts; GetMgcVectorArray( cPts ); - fResult = Wm4::QuadraticFit3( CountPoints(), &(cPts[0]), _fCoeff ); + fResult = Wm4::QuadraticFit3( CountPoints(), &(cPts[0]), _fCoeff ); _fLastResult = fResult; _bIsFitted = true; @@ -425,7 +425,7 @@ float QuadraticFit::Fit() return fResult; } -void QuadraticFit::CalcEigenValues(float &dLambda1, float &dLambda2, float &dLambda3, +void QuadraticFit::CalcEigenValues(double &dLambda1, double &dLambda2, double &dLambda3, Base::Vector3f &clEV1, Base::Vector3f &clEV2, Base::Vector3f &clEV3) const { assert( _bIsFitted ); @@ -451,16 +451,16 @@ void QuadraticFit::CalcEigenValues(float &dLambda1, float &dLambda2, float &dLam * */ - Wm4::Matrix3 akMat(_fCoeff[4], _fCoeff[7]/2.0f, _fCoeff[8]/2.0f, + Wm4::Matrix3 akMat(_fCoeff[4], _fCoeff[7]/2.0f, _fCoeff[8]/2.0f, _fCoeff[7]/2.0f, _fCoeff[5], _fCoeff[9]/2.0f, _fCoeff[8]/2.0f, _fCoeff[9]/2.0f, _fCoeff[6] ); - Wm4::Matrix3 rkRot, rkDiag; + Wm4::Matrix3 rkRot, rkDiag; akMat.EigenDecomposition( rkRot, rkDiag ); - Wm4::Vector3 vEigenU = rkRot.GetColumn(0); - Wm4::Vector3 vEigenV = rkRot.GetColumn(1); - Wm4::Vector3 vEigenW = rkRot.GetColumn(2); + Wm4::Vector3 vEigenU = rkRot.GetColumn(0); + Wm4::Vector3 vEigenV = rkRot.GetColumn(1); + Wm4::Vector3 vEigenW = rkRot.GetColumn(2); Convert( vEigenU, clEV1 ); Convert( vEigenV, clEV2 ); @@ -471,11 +471,11 @@ void QuadraticFit::CalcEigenValues(float &dLambda1, float &dLambda2, float &dLam dLambda3 = rkDiag[2][2]; } -void QuadraticFit::CalcZValues( float x, float y, float &dZ1, float &dZ2 ) const +void QuadraticFit::CalcZValues( double x, double y, double &dZ1, double &dZ2 ) const { assert( _bIsFitted ); - float dDisk = _fCoeff[3]*_fCoeff[3]+2*_fCoeff[3]*_fCoeff[8]*x+2*_fCoeff[3]*_fCoeff[9]*y+ + double dDisk = _fCoeff[3]*_fCoeff[3]+2*_fCoeff[3]*_fCoeff[8]*x+2*_fCoeff[3]*_fCoeff[9]*y+ _fCoeff[8]*_fCoeff[8]*x*x+2*_fCoeff[8]*x*_fCoeff[9]*y+_fCoeff[9]*_fCoeff[9]*y*y- 4*_fCoeff[6]*_fCoeff[0]-4*_fCoeff[6]*_fCoeff[1]*x-4*_fCoeff[6]*_fCoeff[2]*y- 4*_fCoeff[6]*_fCoeff[7]*x*y-4*_fCoeff[6]*_fCoeff[4]*x*x-4*_fCoeff[6]*_fCoeff[5]*y*y; @@ -494,8 +494,8 @@ void QuadraticFit::CalcZValues( float x, float y, float &dZ1, float &dZ2 ) const else dDisk = sqrt( dDisk ); - dZ1 = 0.5f * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y + dDisk ) / _fCoeff[6] ); - dZ2 = 0.5f * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y - dDisk ) / _fCoeff[6] ); + dZ1 = 0.5 * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y + dDisk ) / _fCoeff[6] ); + dZ2 = 0.5 * ( ( -_fCoeff[3] - _fCoeff[8]*x - _fCoeff[9]*y - dDisk ) / _fCoeff[6] ); } // ------------------------------------------------------------------------------- @@ -529,13 +529,13 @@ float SurfaceFit::Fit() return fResult; } -bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance ) +bool SurfaceFit::GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance ) { bool bResult = false; if (_bIsFitted) { - Wm4::Vector3 Dir0, Dir1; + Wm4::Vector3 Dir0, Dir1; FunctionContainer clFuncCont( _fCoeff ); bResult = clFuncCont.CurvatureInfo( x, y, z, rfCurv0, rfCurv1, Dir0, Dir1, dDistance ); @@ -547,7 +547,7 @@ bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, flo return bResult; } -bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1) +bool SurfaceFit::GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1) { assert( _bIsFitted ); bool bResult = false; @@ -560,18 +560,17 @@ bool SurfaceFit::GetCurvatureInfo(float x, float y, float z, float &rfCurv0, flo return bResult; } -float SurfaceFit::PolynomFit() +double SurfaceFit::PolynomFit() { if (PlaneFit::Fit() == FLOAT_MAX) return FLOAT_MAX; -#if 0 -#if defined(FC_USE_BOOST) Base::Vector3d bs(this->_vBase.x,this->_vBase.y,this->_vBase.z); Base::Vector3d ex(this->_vDirU.x,this->_vDirU.y,this->_vDirU.z); Base::Vector3d ey(this->_vDirV.x,this->_vDirV.y,this->_vDirV.z); Base::Vector3d ez(this->_vDirW.x,this->_vDirW.y,this->_vDirW.z); +#if defined(FC_USE_BOOST) ublas::matrix A(6,6); ublas::vector b(6); for (int i=0; i<6; i++) { @@ -580,6 +579,11 @@ float SurfaceFit::PolynomFit() } b(i) = 0.0; } +#else + Eigen::Matrix A = Eigen::Matrix::Zero(); + Eigen::Matrix b = Eigen::Matrix::Zero(); + Eigen::Matrix x = Eigen::Matrix::Zero(); +#endif for (std::list::const_iterator it = _vPoints.begin(); it != _vPoints.end(); it++) { Base::Vector3d clPoint(it->x,it->y,it->z); @@ -648,29 +652,34 @@ float SurfaceFit::PolynomFit() A(5,4) = A(4,5); - +#if defined(FC_USE_BOOST) namespace lapack= boost::numeric::bindings::lapack; //std::clog << A << std::endl; //std::clog << b << std::endl; - lapack::gesv(A,b); + //lapack::gesv(A,b); + ublas::vector x(6); + x = b; //std::clog << b << std::endl; +#else + // A.llt().solve(b,&x); // not sure if always positive definite + A.qr().solve(b,&x); +#endif - _fCoeff[0] = (float)(-b(5)); - _fCoeff[1] = (float)(-b(3)); - _fCoeff[2] = (float)(-b(4)); + _fCoeff[0] = (float)(-x(5)); + _fCoeff[1] = (float)(-x(3)); + _fCoeff[2] = (float)(-x(4)); _fCoeff[3] = 1.0f; - _fCoeff[4] = (float)(-b(0)); - _fCoeff[5] = (float)(-b(1)); + _fCoeff[4] = (float)(-x(0)); + _fCoeff[5] = (float)(-x(1)); _fCoeff[6] = 0.0f; - _fCoeff[7] = (float)(-b(2)); + _fCoeff[7] = (float)(-x(2)); _fCoeff[8] = 0.0f; _fCoeff[9] = 0.0f; -#endif -#endif + return 0.0f; } -float SurfaceFit::Value(float x, float y) const +double SurfaceFit::Value(double x, double y) const { float z = 0.0f; if (_bIsFitted) { diff --git a/src/Mod/Mesh/App/Core/Approximation.h b/src/Mod/Mesh/App/Core/Approximation.h index 74124f35e..623a17dac 100644 --- a/src/Mod/Mesh/App/Core/Approximation.h +++ b/src/Mod/Mesh/App/Core/Approximation.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -34,8 +35,64 @@ #include #include -namespace MeshCore { +namespace Wm4 +{ +/** + * An implicit surface is defined by F(x,y,z) = 0. + * This polynomial surface is actually defined as z = f(x,y) = ax^2 + by^2 + cx + dy + exy + g. + * To use Wm3 routines for implicit surfaces we can write the surface also as F(x,y,z) = f(x,y) - z = 0. + * @author Werner Mayer + */ +template +class PolynomialSurface : public ImplicitSurface +{ +public: + PolynomialSurface (const Real afCoeff[6]) + { for (int i=0; i<6; i++) m_afCoeff[i] = afCoeff[i]; } + + virtual ~PolynomialSurface () {} + + // the function + virtual Real F (const Vector3& rkP) const + { + return ( m_afCoeff[0]*rkP.X()*rkP.X() + + m_afCoeff[1]*rkP.Y()*rkP.Y() + + m_afCoeff[2]*rkP.X() + + m_afCoeff[3]*rkP.Y() + + m_afCoeff[4]*rkP.X()*rkP.Y() + + m_afCoeff[5]-rkP.Z()) ; + } + + // first-order partial derivatives + virtual Real FX (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[0]*rkP.X() + m_afCoeff[2] + m_afCoeff[4]*rkP.Y()); } + virtual Real FY (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[1]*rkP.Y() + m_afCoeff[3] + m_afCoeff[4]*rkP.X()); } + virtual Real FZ (const Vector3& rkP) const + { return (Real)-1.0; } + + // second-order partial derivatives + virtual Real FXX (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[0]); } + virtual Real FXY (const Vector3& rkP) const + { return (Real)(m_afCoeff[4]); } + virtual Real FXZ (const Vector3& rkP) const + { return (Real)0.0; } + virtual Real FYY (const Vector3& rkP) const + { return (Real)(2.0*m_afCoeff[1]); } + virtual Real FYZ (const Vector3& rkP) const + { return (Real)0.0; } + virtual Real FZZ (const Vector3& rkP) const + { return (Real)0.0; } + +protected: + Real m_afCoeff[6]; +}; + +} + +namespace MeshCore { /** * Abstract base class for approximation of a geometry to a given set of points. @@ -104,15 +161,15 @@ protected: /** * Converts point from Wm4::Vector3 to Base::Vector3f. */ - static void Convert( const Wm4::Vector3&, Base::Vector3f&); + static void Convert( const Wm4::Vector3&, Base::Vector3f&); /** * Converts point from Base::Vector3f to Wm4::Vector3. */ - static void Convert( const Base::Vector3f&, Wm4::Vector3&); + static void Convert( const Base::Vector3f&, Wm4::Vector3&); /** * Creates a vector of Wm4::Vector3 elements. */ - void GetMgcVectorArray( std::vector< Wm4::Vector3 >& rcPts ) const; + void GetMgcVectorArray( std::vector< Wm4::Vector3 >& rcPts ) const; protected: std::list< Base::Vector3f > _vPoints; /**< Holds the points for the fit algorithm. */ @@ -201,22 +258,22 @@ public: /** * bertragen der Quadric-Koeffizienten * @param ulIndex Nummer des Koeffizienten (0..9) - * @return float Wert des Koeffizienten + * @return double Wert des Koeffizienten */ - float GetCoeff(unsigned long ulIndex) const; + double GetCoeff(unsigned long ulIndex) const; /** * bertragen der Koeffizientan als Referenz * auf das interne Array - * @return const float& Referenz auf das float-Array + * @return const double& Referenz auf das double-Array */ - const float& GetCoeffArray() const; + const double& GetCoeffArray() const; /** * Aufruf des Fit-Algorithmus * @return float Qualitt des Fits. */ float Fit(); - void CalcZValues(float x, float y, float &dZ1, float &dZ2) const; + void CalcZValues(double x, double y, double &dZ1, double &dZ2) const; /** * Berechnen der Krmmungswerte der Quadric in einem bestimmten Punkt. * @param x X-Koordinate @@ -229,12 +286,12 @@ public: * @param dDistance * @return bool Fehlerfreie Ausfrhung = true, ansonsten false */ - bool GetCurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance); + bool GetCurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance); - bool GetCurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfcurv1); + bool GetCurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfcurv1); /** * Aufstellen der Formanmatrix A und Berechnen der Eigenwerte. * @param dLambda1 Eigenwert 1 @@ -244,11 +301,11 @@ public: * @param clEV2 Eigenvektor 2 * @param clEV3 Eigenvektor 3 */ - void CalcEigenValues(float &dLambda1, float &dLambda2, float &dLambda3, + void CalcEigenValues(double &dLambda1, double &dLambda2, double &dLambda3, Base::Vector3f &clEV1, Base::Vector3f &clEV2, Base::Vector3f &clEV3) const; protected: - float _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ + double _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ }; // ------------------------------------------------------------------------------- @@ -275,15 +332,15 @@ public: */ virtual ~SurfaceFit(){}; - bool GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfCurv1, - Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, float &dDistance); - bool GetCurvatureInfo(float x, float y, float z, float &rfCurv0, float &rfcurv1); + bool GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfCurv1, + Base::Vector3f &rkDir0, Base::Vector3f &rkDir1, double &dDistance); + bool GetCurvatureInfo(double x, double y, double z, double &rfCurv0, double &rfcurv1); float Fit(); - float Value(float x, float y) const; + double Value(double x, double y) const; protected: - float PolynomFit(); - float _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ + double PolynomFit(); + double _fCoeff[ 10 ]; /**< Ziel der Koeffizienten aus dem Fit */ }; // ------------------------------------------------------------------------------- @@ -300,42 +357,24 @@ public: * Die MGC-Algorithmen arbeiten mit Funktionen dieses * Types */ - typedef float (*Function)(float,float,float); + typedef double (*Function)(double,double,double); /** * Der parametrisierte Konstruktor. Erwartet ein Array * mit den Quadric-Koeffizienten. * @param pKoef Zeiger auf die Quadric-Parameter - * (float [10]) + * (double [10]) */ - FunctionContainer(const float *pKoef) + FunctionContainer(const double *pKoef) { Assign( pKoef ); -/* - Function oF; - Function aoDF[3]; - Function aoD2F[6]; - - oF = &F; - aoDF[0] = &Fx; - aoDF[1] = &Fy; - aoDF[2] = &Fz; - aoD2F[0] = &Fxx; - aoD2F[1] = &Fxy; - aoD2F[2] = &Fxz; - aoD2F[3] = &Fyy; - aoD2F[4] = &Fyz; - aoD2F[5] = &Fzz; - - pImplSurf = new Wm4::QuadricSurface( oF, aoDF, aoD2F );*/ - - pImplSurf = new Wm4::QuadricSurface( dKoeff ); + pImplSurf = new Wm4::QuadricSurface( dKoeff ); } /** * bernehmen der Quadric-Parameter * @param pKoef Zeiger auf die Quadric-Parameter - * (doube [10]) + * (double [10]) */ - void Assign( const float *pKoef ) + void Assign( const double *pKoef ) { for (long ct=0; ct < 10; ct++) dKoeff[ ct ] = pKoef[ ct ]; @@ -344,13 +383,13 @@ public: * Destruktor. Lscht die ImpicitSurface Klasse * der MGC-Bibliothek wieder */ - virtual ~FunctionContainer(){ delete pImplSurf; } + ~FunctionContainer(){ delete pImplSurf; } /** * Zugriff auf die Koeffizienten der Quadric * @param idx Index des Parameters - * @return float& Der Koeffizient + * @return double& Der Koeffizient */ - float& operator[](int idx){ return dKoeff[ idx ]; } + double& operator[](int idx){ return dKoeff[ idx ]; } /** * Redirector auf eine Methode der MGC Bibliothek. Ermittelt * die Hauptkrmmungen und ihre Richtungen im angegebenen Punkt. @@ -364,22 +403,22 @@ public: * @param dDistance Ergebnis das die Entfernung des Punktes von der Quadrik angibt. * @return bool Fehlerfreie Ausfrhung = true, ansonsten false */ - bool CurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1, - Wm4::Vector3 &rkDir0, Wm4::Vector3 &rkDir1, float &dDistance) + bool CurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1, + Wm4::Vector3 &rkDir0, Wm4::Vector3 &rkDir1, double &dDistance) { - return pImplSurf->ComputePrincipalCurvatureInfo( Wm4::Vector3(x, y, z),rfCurv0, rfCurv1, rkDir0, rkDir1 ); + return pImplSurf->ComputePrincipalCurvatureInfo( Wm4::Vector3(x, y, z),rfCurv0, rfCurv1, rkDir0, rkDir1 ); } - Base::Vector3f GetGradient( float x, float y, float z ) const + Base::Vector3f GetGradient( double x, double y, double z ) const { - Wm4::Vector3 grad = pImplSurf->GetGradient( Wm4::Vector3(x, y, z) ); + Wm4::Vector3 grad = pImplSurf->GetGradient( Wm4::Vector3(x, y, z) ); return Base::Vector3f( grad.X(), grad.Y(), grad.Z() ); } - Base::Matrix4D GetHessian( float x, float y, float z ) const + Base::Matrix4D GetHessian( double x, double y, double z ) const { - Wm4::Matrix3 hess = pImplSurf->GetHessian( Wm4::Vector3(x, y, z) ); + Wm4::Matrix3 hess = pImplSurf->GetHessian( Wm4::Vector3(x, y, z) ); Base::Matrix4D cMat; cMat.setToUnity(); cMat[0][0] = hess[0][0]; cMat[0][1] = hess[0][1]; cMat[0][2] = hess[0][2]; cMat[1][0] = hess[1][0]; cMat[1][1] = hess[1][1]; cMat[1][2] = hess[1][2]; @@ -387,23 +426,23 @@ public: return cMat; } - bool CurvatureInfo(float x, float y, float z, - float &rfCurv0, float &rfCurv1) + bool CurvatureInfo(double x, double y, double z, + double &rfCurv0, double &rfCurv1) { - float dQuot = Fz(x,y,z); - float zx = - ( Fx(x,y,z) / dQuot ); - float zy = - ( Fy(x,y,z) / dQuot ); + double dQuot = Fz(x,y,z); + double zx = - ( Fx(x,y,z) / dQuot ); + double zy = - ( Fy(x,y,z) / dQuot ); - float zxx = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zx * zx + dKoeff[8] * zx ) ) / dQuot; - float zyy = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zy * zy + dKoeff[9] * zy ) ) / dQuot; - float zxy = - ( dKoeff[6] * zx * zy + dKoeff[7] + dKoeff[8] * zy + dKoeff[9] * zx ) / dQuot; + double zxx = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zx * zx + dKoeff[8] * zx ) ) / dQuot; + double zyy = - ( 2.0f * ( dKoeff[5] + dKoeff[6] * zy * zy + dKoeff[9] * zy ) ) / dQuot; + double zxy = - ( dKoeff[6] * zx * zy + dKoeff[7] + dKoeff[8] * zy + dKoeff[9] * zx ) / dQuot; - float dNen = 1 + zx*zx + zy*zy; - float dNenSqrt = (float)sqrt( dNen ); - float K = ( zxx * zyy - zxy * zxy ) / ( dNen * dNen ); - float H = 0.5f * ( ( 1.0f+zx*zx - 2*zx*zy*zxy + (1.0f+zy*zy)*zxx ) / ( dNenSqrt * dNenSqrt * dNenSqrt ) ) ; + double dNen = 1 + zx*zx + zy*zy; + double dNenSqrt = (double)sqrt( dNen ); + double K = ( zxx * zyy - zxy * zxy ) / ( dNen * dNen ); + double H = 0.5f * ( ( 1.0f+zx*zx - 2*zx*zy*zxy + (1.0f+zy*zy)*zxx ) / ( dNenSqrt * dNenSqrt * dNenSqrt ) ) ; - float dDiscr = (float)sqrt(fabs(H*H-K)); + double dDiscr = (double)sqrt(fabs(H*H-K)); rfCurv0 = H - dDiscr; rfCurv1 = H + dDiscr; @@ -411,7 +450,7 @@ public: } //+++++++++ Quadric +++++++++++++++++++++++++++++++++++++++ - static float F ( float x, float y, float z ) + double F ( double x, double y, double z ) { return (dKoeff[0] + dKoeff[1]*x + dKoeff[2]*y + dKoeff[3]*z + dKoeff[4]*x*x + dKoeff[5]*y*y + dKoeff[6]*z*z + @@ -419,48 +458,48 @@ public: } //+++++++++ 1. derivations ++++++++++++++++++++++++++++++++ - static float Fx ( float x, float y, float z ) + double Fx ( double x, double y, double z ) { return( dKoeff[1] + 2.0f*dKoeff[4]*x + dKoeff[7]*y + dKoeff[8]*z ); } - static float Fy ( float x, float y, float z ) + double Fy ( double x, double y, double z ) { return( dKoeff[2] + 2.0f*dKoeff[5]*y + dKoeff[7]*x + dKoeff[9]*z ); } - static float Fz ( float x, float y, float z ) + double Fz ( double x, double y, double z ) { return( dKoeff[3] + 2.0f*dKoeff[6]*z + dKoeff[8]*x + dKoeff[9]*y ); } //+++++++++ 2. derivations ++++++++++++++++++++++++++++++++ - static float Fxx( float x, float y, float z ) + double Fxx( double x, double y, double z ) { return( 2.0f*dKoeff[4] ); } - static float Fxy( float x, float y, float z ) + double Fxy( double x, double y, double z ) { return( dKoeff[7] ); } - static float Fxz( float x, float y, float z ) + double Fxz( double x, double y, double z ) { return( dKoeff[8] ); } - static float Fyy( float x, float y, float z ) + double Fyy( double x, double y, double z ) { return( 2.0f*dKoeff[5] ); } - static float Fyz( float x, float y, float z ) + double Fyz( double x, double y, double z ) { return( dKoeff[9] ); } - static float Fzz( float x, float y, float z ) + double Fzz( double x, double y, double z ) { return( 2.0f*dKoeff[6] ); } protected: - static float dKoeff[ 10 ]; /**< Koeffizienten der Quadric */ - Wm4::ImplicitSurface *pImplSurf; /**< Zugriff auf die MGC-Bibliothek */ + double dKoeff[ 10 ]; /**< Koeffizienten der Quadric */ + Wm4::ImplicitSurface *pImplSurf; /**< Zugriff auf die MGC-Bibliothek */ private: /** diff --git a/src/Mod/Mesh/App/Core/Curvature.cpp b/src/Mod/Mesh/App/Core/Curvature.cpp new file mode 100644 index 000000000..d0371da4b --- /dev/null +++ b/src/Mod/Mesh/App/Core/Curvature.cpp @@ -0,0 +1,236 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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" +#ifndef _PreComp_ +# include +#endif + +#include +#include +#include +#include + +#include +#include + +#include "Curvature.h" +#include "Algorithm.h" +#include "Approximation.h" +#include "MeshKernel.h" +#include "Iterator.h" +#include "Tools.h" +#include +#include + +using namespace MeshCore; + +MeshCurvature::MeshCurvature(const MeshKernel& kernel) + : myKernel(kernel), myMinPoints(20), myRadius(0.5f) +{ + mySegment.resize(kernel.CountFacets()); + std::generate(mySegment.begin(), mySegment.end(), Base::iotaGen(0)); +} + +MeshCurvature::MeshCurvature(const MeshKernel& kernel, const std::vector& segm) + : myKernel(kernel), myMinPoints(20), myRadius(0.5f), mySegment(segm) +{ +} + +void MeshCurvature::ComputePerFace(bool parallel) +{ + Base::Vector3f rkDir0, rkDir1, rkPnt; + Base::Vector3f rkNormal; + myCurvature.clear(); + MeshRefPointToFacets search(myKernel); + FacetCurvature face(myKernel, search, myRadius, myMinPoints); + + if (!parallel) { + Base::SequencerLauncher seq("Curvature estimation", mySegment.size()); + for (std::vector::iterator it = mySegment.begin(); it != mySegment.end(); ++it) { + CurvatureInfo info = face.Compute(*it); + myCurvature.push_back(info); + seq.next(); + } + } + else { + QFuture future = QtConcurrent::mapped + (mySegment, boost::bind(&FacetCurvature::Compute, &face, _1)); + QFutureWatcher watcher; + watcher.setFuture(future); + watcher.waitForFinished(); + for (QFuture::const_iterator it = future.begin(); it != future.end(); ++it) { + myCurvature.push_back(*it); + } + } +} + +void MeshCurvature::ComputePerVertex() +{ + myCurvature.clear(); + + // get all points + std::vector< Wm4::Vector3 > aPnts; + aPnts.reserve(myKernel.CountPoints()); + MeshPointIterator cPIt(myKernel); + for (cPIt.Init(); cPIt.More(); cPIt.Next()) { + Wm4::Vector3 cP(cPIt->x, cPIt->y, cPIt->z); + aPnts.push_back(cP); + } + + // get all point connections + std::vector aIdx; + aIdx.reserve(3*myKernel.CountFacets()); + const MeshFacetArray& raFts = myKernel.GetFacets(); + for (MeshFacetArray::const_iterator jt = raFts.begin(); jt != raFts.end(); ++jt) { + for (int i=0; i<3; i++) { + aIdx.push_back((int)jt->_aulPoints[i]); + } + } + + // compute vertex based curvatures + Wm4::MeshCurvature meshCurv(myKernel.CountPoints(), &(aPnts[0]), myKernel.CountFacets(), &(aIdx[0])); + + // get curvature information now + const Wm4::Vector3* aMaxCurvDir = meshCurv.GetMaxDirections(); + const Wm4::Vector3* aMinCurvDir = meshCurv.GetMinDirections(); + const double* aMaxCurv = meshCurv.GetMaxCurvatures(); + const double* aMinCurv = meshCurv.GetMinCurvatures(); + + myCurvature.reserve(myKernel.CountPoints()); + for (unsigned long i=0; i& ind) : indices(ind){} + virtual void Append(const MeshCore::MeshKernel& kernel, unsigned long index) + { + unsigned long ulP1, ulP2, ulP3; + kernel.GetFacetPoints(index, ulP1, ulP2, ulP3); + indices.insert(ulP1); + indices.insert(ulP2); + indices.insert(ulP3); + } + +private: + std::set& indices; +}; +} + +// -------------------------------------------------------- + +FacetCurvature::FacetCurvature(const MeshKernel& kernel, const MeshRefPointToFacets& search, float r, unsigned long pt) + : myKernel(kernel), mySearch(search), myRadius(r), myMinPoints(pt) +{ +} + +CurvatureInfo FacetCurvature::Compute(unsigned long index) const +{ + Base::Vector3f rkDir0, rkDir1, rkPnt; + Base::Vector3f rkNormal; + + MeshGeomFacet face = myKernel.GetFacet(index); + Base::Vector3f face_gravity = face.GetGravityPoint(); + Base::Vector3f face_normal = face.GetNormal(); + std::set point_indices; + FitPointCollector collect(point_indices); + + float searchDist = myRadius; + int attempts=0; + do { + mySearch.Neighbours(index, searchDist, collect); + if (point_indices.empty()) + break; + float min_points = myMinPoints; + float use_points = point_indices.size(); + searchDist = searchDist * sqrt(min_points/use_points); + } + while((point_indices.size() < myMinPoints) && (attempts++ < 3)); + + std::vector fitPoints; + const MeshPointArray& verts = myKernel.GetPoints(); + fitPoints.reserve(point_indices.size()); + for (std::set::iterator it = point_indices.begin(); it != point_indices.end(); ++it) { + fitPoints.push_back(verts[*it] - face_gravity); + } + + float fMin, fMax; + if (fitPoints.size() >= myMinPoints) { + SurfaceFit surf_fit; + surf_fit.AddPoints(fitPoints); + surf_fit.Fit(); + rkNormal = surf_fit.GetNormal(); + double dMin, dMax, dDistance; + if (surf_fit.GetCurvatureInfo(0.0, 0.0, 0.0, dMin, dMax, rkDir1, rkDir0, dDistance)) { + fMin = (float)dMin; + fMax = (float)dMax; + } + else { + fMin = FLT_MAX; + fMax = FLT_MAX; + } + } + else { + // too few points => cannot calc any properties + fMin = FLT_MAX; + fMax = FLT_MAX; + } + + CurvatureInfo info; + if (fMin < fMax) { + info.fMaxCurvature = fMax; + info.fMinCurvature = fMin; + info.cMaxCurvDir = rkDir1; + info.cMinCurvDir = rkDir0; + } + else { + info.fMaxCurvature = fMin; + info.fMinCurvature = fMax; + info.cMaxCurvDir = rkDir0; + info.cMinCurvDir = rkDir1; + } + + // Reverse the direction of the normal vector if required + // (Z component of "local" normal vectors should be opposite in sign to the "local" view vector) + if (rkNormal * face_normal < 0.0) { + // Note: Changing the normal directions is similar to flipping over the object. + // In this case we must adjust the curvature information as well. + std::swap(info.cMaxCurvDir,info.cMinCurvDir); + std::swap(info.fMaxCurvature,info.fMinCurvature); + info.fMaxCurvature *= (-1.0); + info.fMinCurvature *= (-1.0); + } + + return info; +} diff --git a/src/Mod/Mesh/App/Core/Curvature.h b/src/Mod/Mesh/App/Core/Curvature.h new file mode 100644 index 000000000..7c200946a --- /dev/null +++ b/src/Mod/Mesh/App/Core/Curvature.h @@ -0,0 +1,75 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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 MESHCORE_CURVATURE_H +#define MESHCORE_CURVATURE_H + +#include +#include + +namespace MeshCore { + +class MeshKernel; +class MeshRefPointToFacets; + +/** Curvature information. */ +struct MeshExport CurvatureInfo +{ + float fMaxCurvature, fMinCurvature; + Base::Vector3f cMaxCurvDir, cMinCurvDir; +}; + +class MeshExport FacetCurvature +{ +public: + FacetCurvature(const MeshKernel& kernel, const MeshRefPointToFacets& search, float, unsigned long); + CurvatureInfo Compute(unsigned long index) const; + +private: + const MeshKernel& myKernel; + const MeshRefPointToFacets& mySearch; + unsigned long myMinPoints; + float myRadius; +}; + +class MeshExport MeshCurvature +{ +public: + MeshCurvature(const MeshKernel& kernel); + MeshCurvature(const MeshKernel& kernel, const std::vector& segm); + float GetRadius() const { return myRadius; } + void SetRadius(float r) { myRadius = r; } + void ComputePerFace(bool parallel); + void ComputePerVertex(); + const std::vector& GetCurvature() const { return myCurvature; } + +private: + const MeshKernel& myKernel; + unsigned long myMinPoints; + float myRadius; + std::vector mySegment; + std::vector myCurvature; +}; + +} // MeshCore + +#endif // MESHCORE_CURVATURE_H diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp new file mode 100644 index 000000000..4326457e5 --- /dev/null +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -0,0 +1,228 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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" +#ifndef _PreComp_ +#include +#endif + +#include "Segmentation.h" +#include "Algorithm.h" +#include "Approximation.h" + +using namespace MeshCore; + +void MeshSurfaceSegment::PrepareFacet(unsigned long) +{ +} + +void MeshSurfaceSegment::AddSegment(const std::vector& segm) +{ + if (segm.size() >= minFacets) { + segments.push_back(segm); + } +} + +// -------------------------------------------------------- + +MeshDistancePlanarSegment::MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol) + : MeshDistanceSurfaceSegment(mesh, minFacets, tol), fitter(new PlaneFit) +{ +} + +MeshDistancePlanarSegment::~MeshDistancePlanarSegment() +{ + delete fitter; +} + +void MeshDistancePlanarSegment::PrepareFacet(unsigned long index) +{ + fitter->Clear(); + + MeshGeomFacet triangle = kernel.GetFacet(index); + basepoint = triangle.GetGravityPoint(); + normal = triangle.GetNormal(); + fitter->AddPoint(triangle._aclPoints[0]); + fitter->AddPoint(triangle._aclPoints[1]); + fitter->AddPoint(triangle._aclPoints[2]); +} + +bool MeshDistancePlanarSegment::TestFacet (const MeshFacet& face) const +{ + if (!fitter->Done()) + fitter->Fit(); + MeshGeomFacet triangle = kernel.GetFacet(face); + for (int i=0; i<3; i++) { + if (fabs(fitter->GetDistanceToPlane(triangle._aclPoints[i])) > tolerance) + return false; + } + + fitter->AddPoint(triangle.GetGravityPoint()); + return true; +} + +// -------------------------------------------------------- + +bool MeshCurvaturePlanarSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (fabs(ci.fMinCurvature) > tolerance) + return false; + if (fabs(ci.fMaxCurvature) > tolerance) + return false; + } + + return true; +} + +bool MeshCurvatureCylindricalSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (ci.fMaxCurvature > ci.fMinCurvature) { + // convexe + if (fabs(ci.fMinCurvature) > tolerance) + return false; + float diff = ci.fMaxCurvature - curvature; + if (fabs(diff) > tolerance) + return false; + } + else { + // concave + if (fabs(ci.fMaxCurvature) > tolerance) + return false; + float diff = ci.fMinCurvature + curvature; + if (fabs(diff) > tolerance) + return false; + } + } + + return true; +} + +bool MeshCurvatureSphericalSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (ci.fMaxCurvature * ci.fMinCurvature < 0) + return false; + float diff; + diff = fabs(ci.fMinCurvature) - curvature; + if (fabs(diff) > tolerance) + return false; + diff = fabs(ci.fMaxCurvature) - curvature; + if (fabs(diff) > tolerance) + return false; + } + + return true; +} + +bool MeshCurvatureFreeformSegment::TestFacet (const MeshFacet &rclFacet) const +{ + for (int i=0; i<3; i++) { + const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; + if (fabs(ci.fMinCurvature-c2) > tolerance) + return false; + if (fabs(ci.fMaxCurvature-c1) > tolerance) + return false; + } + + return true; +} + +// -------------------------------------------------------- + +MeshSurfaceVisitor::MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices) + : indices(indices), segm(segm) +{ +} + +MeshSurfaceVisitor::~MeshSurfaceVisitor () +{ +} + +bool MeshSurfaceVisitor::AllowVisit (const MeshFacet& face, const MeshFacet&, + unsigned long, unsigned long, unsigned short) +{ + return segm.TestFacet(face); +} + +bool MeshSurfaceVisitor::Visit (const MeshFacet & face, const MeshFacet &, + unsigned long ulFInd, unsigned long) +{ + indices.push_back(ulFInd); + return true; +} + +// -------------------------------------------------------- + +void MeshSegmentAlgorithm::FindSegments(std::vector& segm) +{ + // reset VISIT flags + unsigned long startFacet; + MeshCore::MeshAlgorithm cAlgo(myKernel); + cAlgo.ResetFacetFlag(MeshCore::MeshFacet::VISIT); + + const MeshCore::MeshFacetArray& rFAry = myKernel.GetFacets(); + MeshCore::MeshFacetArray::_TConstIterator iCur = rFAry.begin(); + MeshCore::MeshFacetArray::_TConstIterator iBeg = rFAry.begin(); + MeshCore::MeshFacetArray::_TConstIterator iEnd = rFAry.end(); + + // start from the first not visited facet + cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); + std::vector resetVisited; + + for (std::vector::iterator it = segm.begin(); it != segm.end(); ++it) { + cAlgo.ResetFacetsFlag(resetVisited, MeshCore::MeshFacet::VISIT); + resetVisited.clear(); + + iCur = std::find_if(iBeg, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), + MeshCore::MeshFacet::VISIT)); + startFacet = iCur - iBeg; + while (startFacet != ULONG_MAX) { + // collect all facets of the same geometry + std::vector indices; + indices.push_back(startFacet); + (*it)->PrepareFacet(startFacet); + MeshSurfaceVisitor pv(**it, indices); + myKernel.VisitNeighbourFacets(pv, startFacet); + + // add or discard the segment + if (indices.size() == 1) { + resetVisited.push_back(startFacet); + } + else { + (*it)->AddSegment(indices); + } + + // search for the next start facet + iCur = std::find_if(iCur, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), + MeshCore::MeshFacet::VISIT)); + if (iCur < iEnd) + startFacet = iCur - iBeg; + else + startFacet = ULONG_MAX; + } + } +} diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h new file mode 100644 index 000000000..e45ecff4c --- /dev/null +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -0,0 +1,161 @@ +/*************************************************************************** + * Copyright (c) 2012 Imetric 3D GmbH * + * * + * 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 MESHCORE_SEGMENTATION_H +#define MESHCORE_SEGMENTATION_H + +#include "MeshKernel.h" +#include "Curvature.h" +#include "Visitor.h" +#include + +namespace MeshCore { + +class PlaneFit; +class MeshFacet; +typedef std::vector MeshSegment; + +class MeshExport MeshSurfaceSegment +{ +public: + MeshSurfaceSegment(unsigned long minFacets) + : minFacets(minFacets) {} + virtual ~MeshSurfaceSegment() {} + virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; + virtual void PrepareFacet(unsigned long); + void AddSegment(const std::vector&); + const std::vector GetSegments() const { return segments; } + +protected: + std::vector segments; + unsigned long minFacets; +}; + +// -------------------------------------------------------- + +class MeshExport MeshDistanceSurfaceSegment : public MeshSurfaceSegment +{ +public: + MeshDistanceSurfaceSegment(const MeshKernel& mesh, unsigned long minFacets, float tol) + : MeshSurfaceSegment(minFacets), kernel(mesh), tolerance(tol) {} + +protected: + const MeshKernel& kernel; + float tolerance; +}; + +class MeshExport MeshDistancePlanarSegment : public MeshDistanceSurfaceSegment +{ +public: + MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); + virtual ~MeshDistancePlanarSegment(); + bool TestFacet (const MeshFacet &rclFacet) const; + void PrepareFacet(unsigned long); + +protected: + Base::Vector3f basepoint; + Base::Vector3f normal; + PlaneFit* fitter; +}; + +// -------------------------------------------------------- + +class MeshExport MeshCurvatureSurfaceSegment : public MeshSurfaceSegment +{ +public: + MeshCurvatureSurfaceSegment(const std::vector& ci, unsigned long minFacets, float tol) + : MeshSurfaceSegment(minFacets), info(ci), tolerance(tol) {} + +protected: + const std::vector& info; + float tolerance; +}; + +class MeshExport MeshCurvaturePlanarSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvaturePlanarSegment(const std::vector& ci, unsigned long minFacets, float tol) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol) {} + virtual bool TestFacet (const MeshFacet &rclFacet) const; +}; + +class MeshExport MeshCurvatureCylindricalSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvatureCylindricalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float curvature; +}; + +class MeshExport MeshCurvatureSphericalSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvatureSphericalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float curvature; +}; + +class MeshExport MeshCurvatureFreeformSegment : public MeshCurvatureSurfaceSegment +{ +public: + MeshCurvatureFreeformSegment(const std::vector& ci, unsigned long minFacets, float tol, float c1, float c2) + : MeshCurvatureSurfaceSegment(ci, minFacets, tol), c1(c1), c2(c2) {} + virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float c1, c2; +}; + +class MeshExport MeshSurfaceVisitor : public MeshFacetVisitor +{ +public: + MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices); + virtual ~MeshSurfaceVisitor (); + bool AllowVisit (const MeshFacet& face, const MeshFacet&, + unsigned long, unsigned long, unsigned short neighbourIndex); + bool Visit (const MeshFacet & face, const MeshFacet &, + unsigned long ulFInd, unsigned long); + +protected: + std::vector &indices; + const MeshSurfaceSegment& segm; +}; + +class MeshExport MeshSegmentAlgorithm +{ +public: + MeshSegmentAlgorithm(const MeshKernel& kernel) : myKernel(kernel) {} + void FindSegments(std::vector&); + +private: + const MeshKernel& myKernel; +}; + +} // MeshCore + +#endif // MESHCORE_SEGMENTATION_H diff --git a/src/Mod/Mesh/App/FeatureMeshCurvature.cpp b/src/Mod/Mesh/App/FeatureMeshCurvature.cpp index f618f2dea..f7bc01205 100644 --- a/src/Mod/Mesh/App/FeatureMeshCurvature.cpp +++ b/src/Mod/Mesh/App/FeatureMeshCurvature.cpp @@ -29,18 +29,16 @@ #include #include #include -#include -#include #include "FeatureMeshCurvature.h" #include "MeshFeature.h" +#include "Core/Curvature.h" #include "Core/Elements.h" #include "Core/Iterator.h" using namespace Mesh; -using namespace MeshCore; PROPERTY_SOURCE(Mesh::Curvature, App::DocumentObject) @@ -68,42 +66,20 @@ App::DocumentObjectExecReturn *Curvature::execute(void) } // get all points - const MeshKernel& rMesh = pcFeat->Mesh.getValue().getKernel(); - std::vector< Wm4::Vector3 > aPnts; - aPnts.reserve(rMesh.CountPoints()); - MeshPointIterator cPIt( rMesh ); - for (cPIt.Init(); cPIt.More(); cPIt.Next()) { - Wm4::Vector3 cP(cPIt->x, cPIt->y, cPIt->z); - aPnts.push_back(cP); - } + const MeshCore::MeshKernel& rMesh = pcFeat->Mesh.getValue().getKernel(); + MeshCore::MeshCurvature meshCurv(rMesh); + meshCurv.ComputePerVertex(); + const std::vector& curv = meshCurv.GetCurvature(); - // get all point connections - std::vector aIdx; - aIdx.reserve(3*rMesh.CountFacets()); - const std::vector& raFts = rMesh.GetFacets(); - for (std::vector::const_iterator jt = raFts.begin(); jt != raFts.end(); ++jt) { - for (int i=0; i<3; i++) { - aIdx.push_back((int)jt->_aulPoints[i]); - } - } - - // compute vertex based curvatures - Wm4::MeshCurvature meshCurv(rMesh.CountPoints(), &(aPnts[0]), rMesh.CountFacets(), &(aIdx[0])); - - // get curvature information now - const Wm4::Vector3* aMaxCurvDir = meshCurv.GetMaxDirections(); - const Wm4::Vector3* aMinCurvDir = meshCurv.GetMinDirections(); - const float* aMaxCurv = meshCurv.GetMaxCurvatures(); - const float* aMinCurv = meshCurv.GetMinCurvatures(); - - std::vector values(rMesh.CountPoints()); - for (unsigned long i=0; i values; + values.reserve(curv.size()); + for (std::vector::const_iterator it = curv.begin(); it != curv.end(); ++it) { CurvatureInfo ci; - ci.cMaxCurvDir = Base::Vector3f(aMaxCurvDir[i].X(), aMaxCurvDir[i].Y(), aMaxCurvDir[i].Z()); - ci.cMinCurvDir = Base::Vector3f(aMinCurvDir[i].X(), aMinCurvDir[i].Y(), aMinCurvDir[i].Z()); - ci.fMaxCurvature = aMaxCurv[i]; - ci.fMinCurvature = aMinCurv[i]; - values[i] = ci; + ci.cMaxCurvDir = it->cMaxCurvDir; + ci.cMinCurvDir = it->cMinCurvDir; + ci.fMaxCurvature = it->fMaxCurvature; + ci.fMinCurvature = it->fMinCurvature; + values.push_back(ci); } CurvInfo.setValues(values); diff --git a/src/Mod/Mesh/App/Makefile.am b/src/Mod/Mesh/App/Makefile.am index 6309f0d91..27537e060 100644 --- a/src/Mod/Mesh/App/Makefile.am +++ b/src/Mod/Mesh/App/Makefile.am @@ -22,6 +22,8 @@ libMesh_la_SOURCES=\ Core/Approximation.h \ Core/Builder.cpp \ Core/Builder.h \ + Core/Curvature.cpp \ + Core/Curvature.h \ Core/Definitions.cpp \ Core/Definitions.h \ Core/Degeneration.cpp \ @@ -42,6 +44,8 @@ libMesh_la_SOURCES=\ Core/MeshIO.h \ Core/Projection.cpp \ Core/Projection.h \ + Core/Segmentation.cpp \ + Core/Segmentation.h \ Core/SetOperations.cpp \ Core/SetOperations.h \ Core/Smoothing.cpp \ @@ -324,9 +328,9 @@ nobase_include_HEADERS = \ # the library search path. -libMesh_la_LDFLAGS = -L../../../Base -L../../../App $(all_libraries) $(GTS_LIBS) \ +libMesh_la_LDFLAGS = -L../../../Base -L../../../App $(QT4_CORE_LIBS) $(all_libraries) $(GTS_LIBS) \ -version-info @LIB_CURRENT@:@LIB_REVISION@:@LIB_AGE@ -libMesh_la_CPPFLAGS = -DMeshExport= +libMesh_la_CPPFLAGS = -DMeshExport= -DEIGEN2_SUPPORT libMesh_la_LIBADD = \ @BOOST_FILESYSTEM_LIB@ @BOOST_REGEX_LIB@ @BOOST_SYSTEM_LIB@ \ @@ -354,7 +358,8 @@ Mesh_la_DEPENDENCIES = libMesh.la #-------------------------------------------------------------------------------------- # set the include path found by configure -AM_CXXFLAGS = -I$(top_srcdir)/src/3rdParty -I$(top_srcdir)/src -I$(top_builddir)/src $(GTS_CFLAGS) $(all_includes) +AM_CXXFLAGS = -I$(top_srcdir)/src/3rdParty -I$(top_srcdir)/src -I$(top_builddir)/src $(GTS_CFLAGS) \ + $(all_includes) $(QT4_CORE_CXXFLAGS) includedir = @includedir@/Mod/Mesh/App libdir = $(prefix)/Mod/Mesh diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index bd7be06d0..89f85856a 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -1422,10 +1422,11 @@ MeshObject* MeshObject::meshFromSegment(const std::vector& indice return new MeshObject(kernel, _Mtrx); } -std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, const Segment& aSegment, float dev) const +std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, const Segment& aSegment, + float dev, unsigned long minFacets) const { std::vector segm; - unsigned long startFacet, visited; + unsigned long startFacet; if (this->_kernel.CountFacets() == 0) return segm; @@ -1445,7 +1446,7 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons MeshCore::MeshFacetArray::_TConstIterator iEnd = rFAry.end(); // start from the first not visited facet - visited = cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); + cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), MeshCore::MeshFacet::VISIT)); startFacet = iTri - iBeg; @@ -1455,7 +1456,7 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons std::vector indices; indices.push_back(startFacet); MeshCore::MeshPlaneVisitor pv(this->_kernel, startFacet, dev, indices); - visited += this->_kernel.VisitNeighbourFacets(pv, startFacet); + this->_kernel.VisitNeighbourFacets(pv, startFacet); iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), MeshCore::MeshFacet::VISIT)); @@ -1463,7 +1464,8 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons startFacet = iTri - iBeg; else startFacet = ULONG_MAX; - segm.push_back(Segment(const_cast(this), indices, false)); + if (indices.size() > minFacets) + segm.push_back(Segment(const_cast(this), indices, false)); } return segm; diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index dcd1ca19d..3d884517f 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -266,7 +266,7 @@ public: const Segment& getSegment(unsigned long) const; Segment& getSegment(unsigned long); MeshObject* meshFromSegment(const std::vector&) const; - std::vector getSegmentsFromType(Type, const Segment& aSegment, float dev) const; + std::vector getSegmentsFromType(Type, const Segment& aSegment, float dev, unsigned long minFacets) const; //@} /** @name Primitives */ diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index 6070d9fc1..f29a59730 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -370,13 +370,26 @@ an empty dictionary if there is no intersection. - + - Get all planes of the mesh as segment. + getPlanarSegments(dev,[min faces=0]) -> list +Get all planes of the mesh as segment. In the worst case each triangle can be regarded as single plane if none of its neighours is coplanar. + + + getSegmentsByCurvature(list) -> list +The argument list gives a list if tuples where it defines the preferred maximum curvature, +the preferred minumum curvature, the tolerance and the number of minimum faces for the segment. +Example: +c=(1.0, 0.0, 0.1, 500) # search for a cylinder with radius 1.0 +p=(0.0, 0.0, 0.1, 500) # search for a plane +mesh.getSegmentsByCurvature([c,p]) + + + A collection of the mesh points diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 143ff61f9..1e32bf2f3 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -41,6 +41,8 @@ #include "Core/Grid.h" #include "Core/MeshKernel.h" #include "Core/Triangulation.h" +#include "Core/Segmentation.h" +#include "Core/Curvature.h" using namespace Mesh; @@ -1356,15 +1358,16 @@ PyObject* MeshPy::nearestFacetOnRay(PyObject *args) } } -PyObject* MeshPy::getPlanes(PyObject *args) +PyObject* MeshPy::getPlanarSegments(PyObject *args) { float dev; - if (!PyArg_ParseTuple(args, "f",&dev)) + unsigned long minFacets=0; + if (!PyArg_ParseTuple(args, "f|k",&dev,&minFacets)) return NULL; Mesh::MeshObject* mesh = getMeshObjectPtr(); std::vector segments = mesh->getSegmentsFromType - (Mesh::MeshObject::PLANE, Mesh::Segment(mesh,false), dev); + (Mesh::MeshObject::PLANE, Mesh::Segment(mesh,false), dev, minFacets); Py::List s; for (std::vector::iterator it = segments.begin(); it != segments.end(); ++it) { @@ -1379,6 +1382,48 @@ PyObject* MeshPy::getPlanes(PyObject *args) return Py::new_reference_to(s); } +PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) +{ + PyObject* l; + if (!PyArg_ParseTuple(args, "O!",&PyList_Type,&l)) + return NULL; + + const MeshCore::MeshKernel& kernel = getMeshObjectPtr()->getKernel(); + MeshCore::MeshSegmentAlgorithm finder(kernel); + MeshCore::MeshCurvature meshCurv(kernel); + meshCurv.ComputePerVertex(); + + Py::List func(l); + std::vector segm; + //segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment(meshCurv.GetCurvature(), minFacets, dev, 4.75f)); + //segm.push_back(new MeshCore::MeshCurvaturePlanarSegment(meshCurv.GetCurvature(), minFacets, dev)); + for (Py::List::iterator it = func.begin(); it != func.end(); ++it) { + Py::Tuple t(*it); + float c1 = (float)Py::Float(t[0]); + float c2 = (float)Py::Float(t[1]); + float tol = (float)Py::Float(t[2]); + int num = (int)Py::Int(t[3]); + segm.push_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol, c1, c2)); + } + + finder.FindSegments(segm); + + Py::List list; + for (std::vector::iterator segmIt = segm.begin(); segmIt != segm.end(); ++segmIt) { + std::vector data = (*segmIt)->GetSegments(); + delete (*segmIt); + for (std::vector::iterator it = data.begin(); it != data.end(); ++it) { + Py::List ary; + for (MeshCore::MeshSegment::const_iterator jt = it->begin(); jt != it->end(); ++jt) { + ary.append(Py::Int((int)*jt)); + } + list.append(ary); + } + } + + return Py::new_reference_to(list); +} + Py::Int MeshPy::getCountPoints(void) const { return Py::Int((long)getMeshObjectPtr()->countPoints()); From 8c3b83a451d152547988c61c346ea999b01068ba Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 01:40:05 +0200 Subject: [PATCH 199/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.cpp | 6 +++--- src/Mod/Mesh/App/Core/Segmentation.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 4326457e5..450a7a067 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -31,7 +31,7 @@ using namespace MeshCore; -void MeshSurfaceSegment::PrepareFacet(unsigned long) +void MeshSurfaceSegment::Initialize(unsigned long) { } @@ -54,7 +54,7 @@ MeshDistancePlanarSegment::~MeshDistancePlanarSegment() delete fitter; } -void MeshDistancePlanarSegment::PrepareFacet(unsigned long index) +void MeshDistancePlanarSegment::Initialize(unsigned long index) { fitter->Clear(); @@ -204,7 +204,7 @@ void MeshSegmentAlgorithm::FindSegments(std::vector& segm) // collect all facets of the same geometry std::vector indices; indices.push_back(startFacet); - (*it)->PrepareFacet(startFacet); + (*it)->Initialize(startFacet); MeshSurfaceVisitor pv(**it, indices); myKernel.VisitNeighbourFacets(pv, startFacet); diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index e45ecff4c..07e9fa9ca 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -41,7 +41,7 @@ public: : minFacets(minFacets) {} virtual ~MeshSurfaceSegment() {} virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; - virtual void PrepareFacet(unsigned long); + virtual void Initialize(unsigned long); void AddSegment(const std::vector&); const std::vector GetSegments() const { return segments; } @@ -69,7 +69,7 @@ public: MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); virtual ~MeshDistancePlanarSegment(); bool TestFacet (const MeshFacet &rclFacet) const; - void PrepareFacet(unsigned long); + void Initialize(unsigned long); protected: Base::Vector3f basepoint; From 26a06cc91a737389ac2bad44a6dae12fabeee1d4 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 15:57:32 +0200 Subject: [PATCH 200/517] Mesh segmentation --- src/Mod/Complete/Gui/Workbench.cpp | 1 + src/Mod/Mesh/App/Core/Segmentation.h | 2 +- src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h | 6 +- src/Mod/Mesh/App/MeshPyImp.cpp | 8 +- src/Mod/Mesh/Gui/CMakeLists.txt | 4 + src/Mod/Mesh/Gui/Command.cpp | 35 +++ src/Mod/Mesh/Gui/Makefile.am | 2 + src/Mod/Mesh/Gui/Segmentation.cpp | 136 ++++++++++++ src/Mod/Mesh/Gui/Segmentation.h | 74 +++++++ src/Mod/Mesh/Gui/Segmentation.ui | 227 ++++++++++++++++++++ src/Mod/Mesh/Gui/Workbench.cpp | 3 +- 11 files changed, 488 insertions(+), 10 deletions(-) create mode 100644 src/Mod/Mesh/Gui/Segmentation.cpp create mode 100644 src/Mod/Mesh/Gui/Segmentation.h create mode 100644 src/Mod/Mesh/Gui/Segmentation.ui diff --git a/src/Mod/Complete/Gui/Workbench.cpp b/src/Mod/Complete/Gui/Workbench.cpp index d60424b2d..9b0b0fcf0 100644 --- a/src/Mod/Complete/Gui/Workbench.cpp +++ b/src/Mod/Complete/Gui/Workbench.cpp @@ -229,6 +229,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_ToolMesh" + << "Mesh_Segmentation" << "Mesh_VertexCurvature"; // Part **************************************************************************************************** diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 07e9fa9ca..021961001 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -43,7 +43,7 @@ public: virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; virtual void Initialize(unsigned long); void AddSegment(const std::vector&); - const std::vector GetSegments() const { return segments; } + const std::vector& GetSegments() const { return segments; } protected: std::vector segments; diff --git a/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h b/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h index 16f6e1a57..76c51c54b 100644 --- a/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h +++ b/src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h @@ -21,8 +21,8 @@ ***************************************************************************/ -#ifndef FEATURE_MESH_SEGMENT_H -#define FEATURE_MESH_SEGMENT_H +#ifndef FEATURE_MESH_SEGMENTBYMESH_H +#define FEATURE_MESH_SEGMENTBYMESH_H #include @@ -63,4 +63,4 @@ public: } -#endif // FEATURE_MESH_SEGMENT_H +#endif // FEATURE_MESH_SEGMENTBYMESH_H diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 1e32bf2f3..dd1f0e3e1 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -1395,8 +1395,6 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) Py::List func(l); std::vector segm; - //segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment(meshCurv.GetCurvature(), minFacets, dev, 4.75f)); - //segm.push_back(new MeshCore::MeshCurvaturePlanarSegment(meshCurv.GetCurvature(), minFacets, dev)); for (Py::List::iterator it = func.begin(); it != func.end(); ++it) { Py::Tuple t(*it); float c1 = (float)Py::Float(t[0]); @@ -1410,15 +1408,15 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) Py::List list; for (std::vector::iterator segmIt = segm.begin(); segmIt != segm.end(); ++segmIt) { - std::vector data = (*segmIt)->GetSegments(); - delete (*segmIt); - for (std::vector::iterator it = data.begin(); it != data.end(); ++it) { + const std::vector& data = (*segmIt)->GetSegments(); + for (std::vector::const_iterator it = data.begin(); it != data.end(); ++it) { Py::List ary; for (MeshCore::MeshSegment::const_iterator jt = it->begin(); jt != it->end(); ++jt) { ary.append(Py::Int((int)*jt)); } list.append(ary); } + delete (*segmIt); } return Py::new_reference_to(list); diff --git a/src/Mod/Mesh/Gui/CMakeLists.txt b/src/Mod/Mesh/Gui/CMakeLists.txt index 9941cac13..ae4701a0f 100644 --- a/src/Mod/Mesh/Gui/CMakeLists.txt +++ b/src/Mod/Mesh/Gui/CMakeLists.txt @@ -34,6 +34,7 @@ set(Dialogs_UIC_SRCS DlgSettingsMeshView.ui DlgSmoothing.ui RemoveComponents.ui + Segmentation.ui ) qt4_wrap_ui(Dialogs_UIC_HDRS ${Dialogs_UIC_SRCS}) SET(Dialogs_SRCS @@ -53,6 +54,9 @@ SET(Dialogs_SRCS RemoveComponents.ui RemoveComponents.cpp RemoveComponents.h + Segmentation.ui + Segmentation.cpp + Segmentation.h ) SOURCE_GROUP("Dialogs" FILES ${Dialogs_SRCS}) diff --git a/src/Mod/Mesh/Gui/Command.cpp b/src/Mod/Mesh/Gui/Command.cpp index 03d971474..cc83bdaa0 100644 --- a/src/Mod/Mesh/Gui/Command.cpp +++ b/src/Mod/Mesh/Gui/Command.cpp @@ -69,6 +69,7 @@ #include "ViewProviderMeshFaceSet.h" #include "ViewProviderCurvature.h" #include "MeshEditor.h" +#include "Segmentation.h" using namespace Mesh; @@ -1368,6 +1369,39 @@ bool CmdMeshFillInteractiveHole::isActive(void) return false; } +DEF_STD_CMD_A(CmdMeshSegmentation); + +CmdMeshSegmentation::CmdMeshSegmentation() + : Command("Mesh_Segmentation") +{ + sAppModule = "Mesh"; + sGroup = QT_TR_NOOP("Mesh"); + sMenuText = QT_TR_NOOP("Create mesh segments..."); + sToolTipText = QT_TR_NOOP("Create mesh segments"); + sWhatsThis = "Mesh_Segmentation"; + sStatusTip = QT_TR_NOOP("Create mesh segments"); +} + +void CmdMeshSegmentation::activated(int iMsg) +{ + std::vector objs = Gui::Selection().getObjectsOfType + (Mesh::Feature::getClassTypeId()); + Mesh::Feature* mesh = static_cast(objs.front()); + Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog(); + if (!dlg) { + dlg = new MeshGui::TaskSegmentation(mesh); + } + Gui::Control().showDialog(dlg); +} + +bool CmdMeshSegmentation::isActive(void) +{ + if (Gui::Control().activeDialog()) + return false; + return Gui::Selection().countObjectsOfType + (Mesh::Feature::getClassTypeId()) == 1; +} + void CreateMeshCommands(void) { Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); @@ -1400,4 +1434,5 @@ void CreateMeshCommands(void) rcCmdMgr.addCommand(new CmdMeshFillInteractiveHole()); rcCmdMgr.addCommand(new CmdMeshRemoveCompByHand()); rcCmdMgr.addCommand(new CmdMeshFromGeometry()); + rcCmdMgr.addCommand(new CmdMeshSegmentation()); } diff --git a/src/Mod/Mesh/Gui/Makefile.am b/src/Mod/Mesh/Gui/Makefile.am index 6b2066ff0..46158d1e1 100644 --- a/src/Mod/Mesh/Gui/Makefile.am +++ b/src/Mod/Mesh/Gui/Makefile.am @@ -7,6 +7,7 @@ BUILT_SOURCES=\ ui_DlgSettingsMeshView.h \ ui_DlgSmoothing.h \ ui_RemoveComponents.h \ + ui_Segmentation.h \ moc_DlgEvaluateMeshImp.cpp \ moc_DlgRegularSolidImp.cpp \ moc_DlgSettingsMeshView.cpp \ @@ -127,6 +128,7 @@ EXTRA_DIST = \ DlgSettingsMeshView.ui \ DlgSmoothing.ui \ RemoveComponents.ui \ + Segmentation.ui \ Resources/Mesh.qrc \ Resources/translations/Mesh_af.qm \ Resources/translations/Mesh_af.ts \ diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp new file mode 100644 index 000000000..962d65f2e --- /dev/null +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -0,0 +1,136 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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" + +#ifndef _PreComp_ +#endif + +#include "Segmentation.h" +#include "ui_Segmentation.h" +#include +#include + +#include +#include +#include +#include +#include + +using namespace MeshGui; + +Segmentation::Segmentation(Mesh::Feature* mesh, QWidget* parent, Qt::WFlags fl) + : QWidget(parent, fl), myMesh(mesh) +{ + ui = new Ui_Segmentation; + ui->setupUi(this); + ui->numPln->setRange(1, INT_MAX); + ui->numPln->setValue(100); + ui->numCyl->setRange(1, INT_MAX); + ui->numCyl->setValue(100); + ui->numSph->setRange(1, INT_MAX); + ui->numSph->setValue(100); +} + +Segmentation::~Segmentation() +{ + // no need to delete child widgets, Qt does it all for us + delete ui; +} + +void Segmentation::accept() +{ + const Mesh::MeshObject* mesh = myMesh->Mesh.getValuePtr(); + // make a copy because we might smooth the mesh before + MeshCore::MeshKernel kernel = mesh->getKernel(); + + if (ui->checkBoxSmooth->isChecked()) { + MeshCore::LaplaceSmoothing smoother(kernel); + smoother.Smooth(ui->smoothSteps->value()); + } + + MeshCore::MeshSegmentAlgorithm finder(kernel); + MeshCore::MeshCurvature meshCurv(kernel); + meshCurv.ComputePerVertex(); + + std::vector segm; + if (ui->groupBoxCyl->isChecked()) { + segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment + (meshCurv.GetCurvature(), ui->numCyl->value(), ui->tolCyl->value(), ui->radCyl->value())); + } + if (ui->groupBoxSph->isChecked()) { + segm.push_back(new MeshCore::MeshCurvatureSphericalSegment + (meshCurv.GetCurvature(), ui->numSph->value(), ui->tolSph->value(), ui->radSph->value())); + } + if (ui->groupBoxPln->isChecked()) { + segm.push_back(new MeshCore::MeshCurvaturePlanarSegment + (meshCurv.GetCurvature(), ui->numPln->value(), ui->tolPln->value())); + } + finder.FindSegments(segm); + + App::Document* document = App::GetApplication().getActiveDocument(); + for (std::vector::iterator it = segm.begin(); it != segm.end(); ++it) { + const std::vector& data = (*it)->GetSegments(); + for (std::vector::const_iterator jt = data.begin(); jt != data.end(); ++jt) { + Mesh::MeshObject* segment = mesh->meshFromSegment(*jt); + Mesh::Feature* feaSegm = static_cast(document->addObject("Mesh::Feature", "Segment")); + Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing(); + feaMesh->swap(*segment); + feaSegm->Mesh.finishEditing(); + delete segment; + } + delete (*it); + } +} + +void Segmentation::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + ui->retranslateUi(this); + } + QWidget::changeEvent(e); +} + +// --------------------------------------- + +/* TRANSLATOR MeshGui::TaskRemoveComponents */ + +TaskSegmentation::TaskSegmentation(Mesh::Feature* mesh) +{ + widget = new Segmentation(mesh); + taskbox = new Gui::TaskView::TaskBox( + QPixmap(), widget->windowTitle(), false, 0); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); +} + +TaskSegmentation::~TaskSegmentation() +{ + // automatically deleted in the sub-class +} + +bool TaskSegmentation::accept() +{ + widget->accept(); + return true; +} diff --git a/src/Mod/Mesh/Gui/Segmentation.h b/src/Mod/Mesh/Gui/Segmentation.h new file mode 100644 index 000000000..95d141163 --- /dev/null +++ b/src/Mod/Mesh/Gui/Segmentation.h @@ -0,0 +1,74 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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 MESHGUI_SEGMENTATION_H +#define MESHGUI_SEGMENTATION_H + +#include +#include +#include + +// forward declarations +namespace Mesh { class Feature; } + +namespace MeshGui { +class Ui_Segmentation; + +class MeshGuiExport Segmentation : public QWidget +{ +public: + Segmentation(Mesh::Feature* mesh, QWidget* parent = 0, Qt::WFlags fl = 0); + ~Segmentation(); + void accept(); + +protected: + void changeEvent(QEvent *e); + +private: + Ui_Segmentation* ui; + Mesh::Feature* myMesh; +}; + +/** + * Embed the panel into a task dialog. + */ +class TaskSegmentation : public Gui::TaskView::TaskDialog +{ +public: + TaskSegmentation(Mesh::Feature* mesh); + ~TaskSegmentation(); + +public: + bool accept(); + + virtual QDialogButtonBox::StandardButtons getStandardButtons() const + { return QDialogButtonBox::Ok | QDialogButtonBox::Cancel; } + +private: + Segmentation* widget; + Gui::TaskView::TaskBox* taskbox; +}; + +} + +#endif // MESHGUI_SEGMENTATION_H diff --git a/src/Mod/Mesh/Gui/Segmentation.ui b/src/Mod/Mesh/Gui/Segmentation.ui new file mode 100644 index 000000000..129c89873 --- /dev/null +++ b/src/Mod/Mesh/Gui/Segmentation.ui @@ -0,0 +1,227 @@ + + + MeshGui::Segmentation + + + + 0 + 0 + 289 + 379 + + + + Mesh segmentation + + + + + + Smooth mesh + + + true + + + + + + + 3 + + + + + + + Plane + + + true + + + + + + Tolerance + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Minumum number of faces + + + + + + + 100000 + + + 100 + + + + + + + + + + Cylinder + + + true + + + + + + Radius + + + + + + + 0.100000000000000 + + + 5.000000000000000 + + + + + + + Tolerance + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Minimum number of faces + + + + + + + 100000 + + + 100 + + + + + + + + + + Sphere + + + true + + + + + + Radius + + + + + + + 0.100000000000000 + + + 5.000000000000000 + + + + + + + Tolerance + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + + + + Minimum number of faces + + + + + + + 100000 + + + 100 + + + + + + + + + + + + checkBoxSmooth + toggled(bool) + smoothSteps + setEnabled(bool) + + + 75 + 24 + + + 188 + 19 + + + + + diff --git a/src/Mod/Mesh/Gui/Workbench.cpp b/src/Mod/Mesh/Gui/Workbench.cpp index a2a3fa087..25b9bd656 100644 --- a/src/Mod/Mesh/Gui/Workbench.cpp +++ b/src/Mod/Mesh/Gui/Workbench.cpp @@ -190,7 +190,8 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Mesh_FillupHoles" << "Mesh_FillInteractiveHole" << "Mesh_RemoveComponents" << "Mesh_RemoveCompByHand" << "Mesh_AddFacet" << "Mesh_Smoothing" << "Separator" << "Mesh_BuildRegularSolid" << boolean << "Separator" << "Mesh_PolySelect" << "Mesh_PolyCut" - << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_PolyTrim" << "Mesh_VertexCurvature"; + << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_PolyTrim" << "Mesh_Segmentation" + << "Mesh_VertexCurvature"; return root; } From 837ceccfc76cbe126713116e7e94c48c33b2685d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 12:57:48 -0300 Subject: [PATCH 201/517] Added 0000387 : Arch roof tool --- src/Mod/Arch/Arch.py | 1 + src/Mod/Arch/ArchRoof.py | 137 ++++ src/Mod/Arch/Arch_rc.py | 1014 +++++++++++++++++++----------- src/Mod/Arch/CMakeLists.txt | 1 + src/Mod/Arch/InitGui.py | 2 +- src/Mod/Arch/Makefile.am | 3 +- src/WindowsInstaller/ModArch.wxi | 1 + 7 files changed, 781 insertions(+), 378 deletions(-) create mode 100644 src/Mod/Arch/ArchRoof.py diff --git a/src/Mod/Arch/Arch.py b/src/Mod/Arch/Arch.py index 81bb29ffe..fc537d85a 100644 --- a/src/Mod/Arch/Arch.py +++ b/src/Mod/Arch/Arch.py @@ -39,3 +39,4 @@ from ArchCommands import * from ArchSectionPlane import * from ArchWindow import * from ArchAxis import * +from ArchRoof import * diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py new file mode 100644 index 000000000..62850f243 --- /dev/null +++ b/src/Mod/Arch/ArchRoof.py @@ -0,0 +1,137 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2012 * +#* Yorik van Havre * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import FreeCAD,FreeCADGui,Draft,ArchComponent +from draftlibs import fcvec +from FreeCAD import Vector +from PyQt4 import QtCore + +__title__="FreeCAD Roof" +__author__ = "Yorik van Havre" +__url__ = "http://free-cad.sourceforge.net" + +def makeRoof(baseobj,facenr=1,angle=45,name="Roof"): + '''makeRoof(baseobj,[facenr],[angle],[name]) : Makes a roof based on a + face from an existing object. You can provide the number of the face + to build the roof on (default = 1), the angle (default=45) and a name (default + = roof).''' + obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name) + _Roof(obj) + _ViewProviderRoof(obj.ViewObject) + obj.Base = baseobj + obj.Face = facenr + obj.Angle = angle + return obj + +class _CommandRoof: + "the Arch Roof command definition" + def GetResources(self): + return {'Pixmap' : 'Arch_Roof', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Roof","Roof"), + 'Accel': "R, F", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Roof","Creates a roof object from the selected face of an object")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False + + def Activated(self): + sel = FreeCADGui.Selection.getSelectionEx() + if sel: + sel = sel[0] + if sel.HasSubObjects: + if "Face" in sel.SubElementNames[0]: + obj = sel.Object + idx = int(sel.SubElementNames[0][4:]) + FreeCAD.ActiveDocument.openTransaction("Create Roof") + makeRoof(obj,idx) + FreeCAD.ActiveDocument.commitTransaction() + +class _Roof(ArchComponent.Component): + "The Roof object" + def __init__(self,obj): + ArchComponent.Component.__init__(self,obj) + obj.addProperty("App::PropertyAngle","Angle","Base", + "The angle of this roof") + obj.addProperty("App::PropertyInteger","Face","Base", + "The face number of the base object used to build this roof") + obj.addProperty("App::PropertyLink","Base","Base", + "The base object this roof is built on") + self.Type = "Structure" + + def execute(self,obj): + self.createGeometry(obj) + + def onChanged(self,obj,prop): + if prop in ["Base","Face","Angle","Additions","Subtractions"]: + self.createGeometry(obj) + + def createGeometry(self,obj): + import Part,math + from draftlibs import fcgeo + pl = obj.Placement + + if obj.Base and obj.Face and obj.Angle: + if len(obj.Base.Shape.Faces) >= obj.Face: + f = obj.Base.Shape.Faces[obj.Face-1] + if len(f.Wires) == 1: + if f.Wires[0].isClosed(): + c = round(math.tan(math.radians(obj.Angle)),Draft.precision()) + norm = f.normalAt(0,0) + d = f.BoundBox.DiagonalLength + edges = fcgeo.sortEdges(f.Edges) + l = len(edges) + edges.append(edges[0]) + shps = [] + for i in range(l): + v = fcgeo.vec(fcgeo.angleBisection(edges[i],edges[i+1])) + v.normalize() + bis = v.getAngle(fcgeo.vec(edges[i])) + delta = 1/math.cos(bis) + v.multiply(delta) + n = (FreeCAD.Vector(norm)).multiply(c) + dv = v.add(n) + dv.normalize() + dv.scale(d,d,d) + shps.append(f.extrude(dv)) + c = shps.pop() + for s in shps: + c = c.common(s) + c = c.removeSplitter() + if not c.isNull(): + obj.Shape = c + if not fcgeo.isNull(pl): + obj.Placement = pl + +class _ViewProviderRoof(ArchComponent.ViewProviderComponent): + "A View Provider for the Roof object" + + def __init__(self,vobj): + ArchComponent.ViewProviderComponent.__init__(self,vobj) + + def getIcon(self): + return ":/icons/Arch_Roof_Tree.svg" + +FreeCADGui.addCommand('Arch_Roof',_CommandRoof()) diff --git a/src/Mod/Arch/Arch_rc.py b/src/Mod/Arch/Arch_rc.py index cfb5796f4..6e7f3870a 100644 --- a/src/Mod/Arch/Arch_rc.py +++ b/src/Mod/Arch/Arch_rc.py @@ -2,8 +2,8 @@ # Resource object code # -# Created: Wed Apr 18 19:00:26 2012 -# by: The Resource Compiler for PyQt (Qt v4.7.4) +# Created: Sun May 13 20:45:11 2012 +# by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -6791,7 +6791,7 @@ qt_resource_data = "\ \x60\x24\x14\x71\x18\x20\xc8\x29\x21\x64\x0a\xba\x54\x4c\x69\x8a\ \x07\xa3\xfe\x50\x76\x18\x1a\x6f\x00\x69\x8d\xda\xda\x66\xb6\xba\ \xbe\xb8\xb2\x35\xc7\xf5\xc5\x7f\x01\x9a\x79\xce\xaf\ -\x00\x00\x12\x5a\ +\x00\x00\x12\x5c\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ @@ -6831,173 +6831,233 @@ qt_resource_data = "\ \x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\x39\x38\ \x35\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\ \x2e\x31\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x31\x20\ -\x72\x39\x37\x36\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\ -\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x41\x72\x63\x68\ -\x5f\x53\x69\x74\x65\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\ -\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\ -\x73\x32\x39\x38\x37\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\ -\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ -\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x22\x3e\x0a\x20\x20\x20\x20\ -\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ -\x6f\x72\x3a\x23\x66\x66\x62\x34\x30\x30\x3b\x73\x74\x6f\x70\x2d\ -\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ -\x70\x33\x37\x39\x36\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ -\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ -\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ -\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ -\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\ -\x37\x39\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ -\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ -\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ -\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\ -\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\ -\x38\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ -\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x62\x34\ -\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ -\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ -\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x36\x2d\x35\x22\ -\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ -\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x65\x61\ -\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ -\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ -\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x38\x2d\x38\x22\ -\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\ -\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ -\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\ -\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x36\ -\x32\x2e\x36\x35\x32\x33\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x79\x31\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x35\x2e\x31\x38\x34\ -\x39\x37\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ -\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ -\x61\x74\x72\x69\x78\x28\x31\x2e\x30\x32\x36\x35\x35\x36\x38\x2c\ -\x30\x2c\x30\x2c\x30\x2e\x39\x31\x34\x39\x30\x36\x32\x36\x2c\x2d\ -\x33\x2e\x32\x33\x36\x37\x30\x36\x2c\x2d\x31\x2e\x38\x30\x32\x37\ -\x30\x33\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ -\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ -\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ -\x64\x69\x65\x6e\x74\x33\x38\x38\x36\x22\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ -\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\ -\x34\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\ -\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ -\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ -\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\ -\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\x31\x22\x3e\x0a\x20\ -\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ -\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x62\x34\x30\x30\x3b\x73\x74\ -\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ -\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ -\x73\x74\x6f\x70\x33\x37\x39\x36\x2d\x32\x22\x20\x2f\x3e\x0a\x20\ -\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ -\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\x73\x74\ -\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ -\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ -\x73\x74\x6f\x70\x33\x37\x39\x38\x2d\x32\x22\x20\x2f\x3e\x0a\x20\ +\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\ +\x31\x20\x72\x39\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x41\x72\ +\x63\x68\x5f\x53\x69\x74\x65\x5f\x54\x72\x65\x65\x2e\x73\x76\x67\ +\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x64\x65\x66\x73\x32\x39\x38\x37\x22\x3e\x0a\x20\ +\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x62\x34\x30\ +\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x36\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\ +\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x38\x22\x20\x2f\x3e\x0a\x20\ \x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ \x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ \x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x79\x32\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x36\x32\x2e\x36\x35\x32\ -\x33\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x32\ -\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x78\x31\x3d\x22\x31\x35\x2e\x31\x38\x34\x39\x37\x31\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\ -\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ -\x28\x31\x2e\x30\x32\x36\x35\x35\x36\x38\x2c\x30\x2c\x30\x2c\x30\ -\x2e\x39\x31\x34\x39\x30\x36\x32\x36\x2c\x2d\x33\x2e\x32\x33\x36\ -\x37\x30\x36\x2c\x2d\x31\x2e\x38\x30\x32\x37\x30\x33\x32\x29\x22\ -\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ -\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\ -\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ -\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ -\x33\x38\x38\x36\x2d\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ -\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\ -\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\x31\ -\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ -\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ -\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\ -\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\ -\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\ -\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\ -\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\ -\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\ -\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x37\x39\x34\x2d\x38\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x66\x66\x62\x34\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x37\x39\x36\x2d\x35\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x66\x66\x65\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x37\x39\x38\x2d\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\ +\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x32\x3d\x22\x36\x32\x2e\x36\x35\x32\x33\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x32\x33\x2e\x38\x34\ +\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\ +\x22\x31\x35\x2e\x31\x38\x34\x39\x37\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2e\x30\ +\x32\x36\x35\x35\x36\x38\x2c\x30\x2c\x30\x2c\x30\x2e\x39\x31\x34\ +\x39\x30\x36\x32\x36\x2c\x2d\x33\x2e\x32\x33\x36\x37\x30\x36\x2c\ +\x2d\x31\x2e\x38\x30\x32\x37\x30\x33\x32\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x38\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x37\x39\x34\x2d\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x39\ +\x34\x2d\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\ +\x62\x34\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x36\x2d\ +\x32\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\ +\x65\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x39\x38\x2d\ +\x32\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\ +\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x32\x33\x2e\x38\x34\ +\x38\x36\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\ +\x22\x36\x32\x2e\x36\x35\x32\x33\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x31\x3d\x22\x32\x33\x2e\x38\x34\x38\x36\x38\x36\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x35\x2e\x31\ +\x38\x34\x39\x37\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2e\x30\x32\x36\x35\x35\x36\ +\x38\x2c\x30\x2c\x30\x2c\x30\x2e\x39\x31\x34\x39\x30\x36\x32\x36\ +\x2c\x2d\x33\x2e\x32\x33\x36\x37\x30\x36\x2c\x2d\x31\x2e\x38\x30\ +\x32\x37\x30\x33\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x38\x36\x2d\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x37\x39\x34\x2d\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\ +\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\ +\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\ +\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\ +\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\ +\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\ +\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\ +\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\ +\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x37\x2e\x37\x37\x38\x31\ +\x37\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x78\x3d\x22\x32\x36\x2e\x34\x33\x31\x33\x36\x37\ \x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\ -\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\ -\x6d\x3d\x22\x32\x2e\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ -\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x2d\x31\x32\x2e\x35\ -\x34\x31\x38\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x32\x33\x2e\x38\x34\x36\x36\ -\x39\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ -\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\ -\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\ -\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\ -\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\ -\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\ -\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\ -\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x30\x22\ -\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ -\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x35\ -\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ -\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\x20\x20\ +\x63\x79\x3d\x22\x33\x30\x2e\x38\x30\x36\x36\x30\x38\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\ +\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\x65\ +\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\ +\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\ +\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\ +\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\ +\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x35\x35\x22\x0a\x20\x20\ \x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\ -\x6f\x77\x2d\x79\x3d\x22\x31\x39\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\ -\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\ -\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x32\x39\x39\ -\x30\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\ -\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\ -\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\ -\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\ -\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\ -\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\ -\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ -\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\ -\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\ -\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\ -\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\ -\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\ -\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\ -\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\ -\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\ -\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\ -\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\ -\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\ -\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\ +\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\ +\x22\x32\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\ +\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\x65\ +\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6d\x65\x74\x61\x64\x61\x74\x61\x32\x39\x39\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\ +\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\ +\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\ +\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\ +\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\ +\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\ +\x3a\x74\x69\x74\x6c\x65\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\ +\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\ +\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\ +\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x62\x66\x62\x62\x62\x62\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\x65\x72\x6f\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\ +\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\ +\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\ +\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\ +\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\ +\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\ +\x20\x35\x2e\x32\x39\x30\x30\x39\x32\x2c\x34\x31\x2e\x35\x33\x32\ +\x31\x34\x36\x20\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\ +\x35\x35\x35\x35\x36\x39\x20\x32\x39\x2e\x36\x30\x35\x38\x30\x33\ +\x2c\x35\x37\x2e\x30\x37\x34\x30\x38\x31\x20\x35\x2e\x35\x32\x32\ +\x37\x37\x38\x33\x2c\x34\x36\x2e\x39\x33\x38\x30\x33\x37\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x39\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\ +\x23\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\ +\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\ +\x6e\x7a\x65\x72\x6f\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ +\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\ +\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\ +\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\ +\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\ +\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\ +\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\ +\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x64\x3d\x22\x4d\x20\x35\x39\x2e\x35\x30\x35\x39\x38\x35\x2c\ +\x31\x32\x2e\x33\x36\x32\x38\x36\x32\x20\x35\x39\x2e\x30\x34\x30\ +\x36\x31\x32\x2c\x33\x34\x2e\x34\x33\x36\x39\x31\x35\x20\x32\x39\ +\x2e\x36\x30\x35\x38\x30\x33\x2c\x35\x36\x2e\x39\x36\x31\x34\x35\ +\x39\x20\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\x35\x35\ +\x35\x35\x36\x39\x20\x34\x30\x2e\x37\x37\x34\x37\x34\x33\x2c\x31\ +\x33\x2e\x39\x33\x39\x35\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ \x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ -\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\x30\ -\x3b\x66\x69\x6c\x6c\x3a\x23\x62\x66\x62\x62\x62\x62\x3b\x66\x69\ -\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\ -\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\x65\x72\x6f\x3b\x73\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x39\x32\x62\x64\x38\x65\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\ \x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\ \x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\ @@ -7006,87 +7066,27 @@ qt_resource_data = "\ \x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ \x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ \x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ -\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\ -\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\ -\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\ -\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\ -\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\ -\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\ -\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\ -\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x35\ -\x2e\x32\x39\x30\x30\x39\x32\x2c\x34\x31\x2e\x35\x33\x32\x31\x34\ -\x36\x20\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\x35\x35\ -\x35\x35\x36\x39\x20\x32\x39\x2e\x36\x30\x35\x38\x30\x33\x2c\x35\ -\x37\x2e\x30\x37\x34\x30\x38\x31\x20\x35\x2e\x35\x32\x32\x37\x37\ -\x38\x33\x2c\x34\x36\x2e\x39\x33\x38\x30\x33\x37\x20\x7a\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ -\x39\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\ -\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\ -\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\ -\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\ -\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ -\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x6e\x6f\x6e\x7a\ -\x65\x72\x6f\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ -\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ -\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\ -\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ -\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ -\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ -\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ -\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ -\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ -\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\ -\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\ -\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\ -\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\ -\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\ -\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\ -\x6d\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\ -\x3d\x22\x4d\x20\x35\x39\x2e\x35\x30\x35\x39\x38\x35\x2c\x31\x32\ -\x2e\x33\x36\x32\x38\x36\x32\x20\x35\x39\x2e\x30\x34\x30\x36\x31\ -\x32\x2c\x33\x34\x2e\x34\x33\x36\x39\x31\x35\x20\x32\x39\x2e\x36\ -\x30\x35\x38\x30\x33\x2c\x35\x36\x2e\x39\x36\x31\x34\x35\x39\x20\ -\x32\x39\x2e\x34\x38\x39\x34\x36\x2c\x35\x31\x2e\x35\x35\x35\x35\ -\x36\x39\x20\x34\x30\x2e\x37\x37\x34\x37\x34\x33\x2c\x31\x33\x2e\ -\x39\x33\x39\x35\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x39\x22\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ -\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ -\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\ -\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ -\x22\x66\x69\x6c\x6c\x3a\x23\x35\x35\x39\x61\x35\x36\x3b\x66\x69\ -\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\ -\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\ -\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\x6f\x6b\ -\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\ -\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\ -\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ -\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\ -\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ -\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x33\x36\x2e\ -\x35\x30\x32\x38\x38\x37\x2c\x36\x2e\x34\x34\x36\x38\x36\x38\x20\ -\x2d\x31\x31\x2e\x30\x38\x39\x35\x37\x32\x2c\x38\x2e\x35\x36\x35\ -\x35\x37\x33\x20\x2d\x38\x2e\x39\x39\x39\x33\x39\x2c\x31\x36\x2e\ -\x30\x32\x39\x31\x34\x33\x20\x30\x2e\x31\x37\x34\x31\x38\x31\x2c\ -\x30\x2e\x30\x37\x35\x31\x34\x20\x4c\x20\x35\x2e\x32\x30\x38\x32\ -\x33\x31\x36\x2c\x34\x31\x2e\x37\x33\x36\x30\x32\x37\x20\x32\x39\ -\x2e\x35\x33\x35\x36\x31\x37\x2c\x35\x31\x2e\x36\x35\x34\x30\x35\ -\x39\x20\x34\x30\x2e\x34\x35\x31\x30\x30\x36\x2c\x34\x30\x2e\x36\ -\x38\x34\x31\x31\x35\x20\x34\x30\x2e\x38\x35\x37\x34\x33\x31\x2c\ -\x34\x30\x2e\x32\x38\x33\x33\x38\x36\x20\x34\x30\x2e\x36\x38\x33\ -\x32\x35\x2c\x34\x30\x2e\x32\x30\x38\x32\x34\x39\x20\x34\x39\x2e\ -\x34\x32\x31\x33\x36\x37\x2c\x32\x33\x2e\x35\x37\x38\x30\x31\x34\ -\x20\x35\x39\x2e\x35\x38\x31\x39\x36\x39\x2c\x31\x32\x2e\x34\x33\ -\x32\x37\x35\x31\x20\x33\x36\x2e\x35\x30\x32\x38\x38\x37\x2c\x36\ -\x2e\x34\x34\x36\x38\x36\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x36\x33\x22\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ -\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x67\ -\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x33\ +\x36\x2e\x35\x30\x32\x38\x38\x37\x2c\x36\x2e\x34\x34\x36\x38\x36\ +\x38\x20\x2d\x31\x31\x2e\x30\x38\x39\x35\x37\x32\x2c\x38\x2e\x35\ +\x36\x35\x35\x37\x33\x20\x2d\x38\x2e\x39\x39\x39\x33\x39\x2c\x31\ +\x36\x2e\x30\x32\x39\x31\x34\x33\x20\x30\x2e\x31\x37\x34\x31\x38\ +\x31\x2c\x30\x2e\x30\x37\x35\x31\x34\x20\x4c\x20\x35\x2e\x32\x30\ +\x38\x32\x33\x31\x36\x2c\x34\x31\x2e\x37\x33\x36\x30\x32\x37\x20\ +\x32\x39\x2e\x35\x33\x35\x36\x31\x37\x2c\x35\x31\x2e\x36\x35\x34\ +\x30\x35\x39\x20\x34\x30\x2e\x34\x35\x31\x30\x30\x36\x2c\x34\x30\ +\x2e\x36\x38\x34\x31\x31\x35\x20\x34\x30\x2e\x38\x35\x37\x34\x33\ +\x31\x2c\x34\x30\x2e\x32\x38\x33\x33\x38\x36\x20\x34\x30\x2e\x36\ +\x38\x33\x32\x35\x2c\x34\x30\x2e\x32\x30\x38\x32\x34\x39\x20\x34\ +\x39\x2e\x34\x32\x31\x33\x36\x37\x2c\x32\x33\x2e\x35\x37\x38\x30\ +\x31\x34\x20\x35\x39\x2e\x35\x38\x31\x39\x36\x39\x2c\x31\x32\x2e\ +\x34\x33\x32\x37\x35\x31\x20\x33\x36\x2e\x35\x30\x32\x38\x38\x37\ +\x2c\x36\x2e\x34\x34\x36\x38\x36\x38\x20\x7a\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x36\x33\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\ +\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\ +\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ \x00\x00\x0e\x6b\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -8358,6 +8358,133 @@ qt_resource_data = "\ \x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\ \x65\x73\x3d\x22\x63\x63\x63\x63\x63\x22\x20\x2f\x3e\x0a\x20\x20\ \x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x07\xc4\ +\x00\ +\x00\x37\x1e\x78\x9c\xed\x5b\x6d\x8f\x9b\x48\x12\xfe\x3e\xbf\x82\ +\x65\xbe\x24\x3a\x83\xfb\x9d\x6e\x32\x9e\xd5\xdd\x46\xbb\x5a\xe9\ +\x4e\x27\x5d\x12\xdd\xc7\x88\x81\xb6\xcd\x0e\x06\x0b\xf0\xd8\xce\ +\xaf\xdf\x6a\xcc\x9b\x6d\x3c\x2f\xd9\x91\x6e\x77\x38\x4b\xc9\x40\ +\x55\x75\x77\xd5\xd3\x55\xd5\xd5\xd0\xdc\xfc\xb8\x5b\x25\xd6\x83\ +\xce\x8b\x38\x4b\x67\x36\x76\x91\x6d\xe9\x34\xcc\xa2\x38\x5d\xcc\ +\xec\x2f\x9f\x7f\x76\xa4\x6d\x15\x65\x90\x46\x41\x92\xa5\x7a\x66\ +\xa7\x99\xfd\xe3\xed\xd5\xcd\x0f\x8e\x63\xfd\x94\xeb\xa0\xd4\x91\ +\xb5\x8d\xcb\xa5\xf5\x6b\x7a\x5f\x84\xc1\x5a\x5b\xef\x96\x65\xb9\ +\xf6\xa7\xd3\xed\x76\xeb\xc6\x35\xd1\xcd\xf2\xc5\xf4\xbd\xe5\x38\ +\xb7\x57\x57\x37\xc5\xc3\xe2\xca\xb2\x2c\x18\x37\x2d\xfc\x28\x9c\ +\xd9\x75\x83\xf5\x26\x4f\x2a\xc1\x28\x9c\xea\x44\xaf\x74\x5a\x16\ +\x53\xec\xe2\xa9\xdd\x89\x87\x9d\x78\x68\x46\x8f\x1f\x74\x98\xad\ +\x56\x59\x5a\x54\x2d\xd3\xe2\xba\x27\x9c\x47\xf3\x56\xda\x68\xb3\ +\xa5\x95\x10\x56\x4a\x4d\x11\x99\x12\xe2\x80\x84\x53\xec\xd3\x32\ +\xd8\x39\xc7\x4d\x41\xc7\xa1\xa6\x04\x21\x34\x05\x5e\x27\xf9\x3c\ +\x29\x7f\x97\x00\x14\x17\x95\xa9\xb8\xfd\xd1\x01\xfe\x35\xfc\x6b\ +\x1b\x34\x04\xb7\xc8\x36\x79\xa8\xe7\xd0\x52\xbb\xa9\x2e\xa7\x1f\ +\x3f\x7f\x6c\x99\x0e\x72\xa3\x32\xea\x75\xd3\xa0\x7f\x34\xee\xd1\ +\x94\xa4\xc1\x4a\x17\xeb\x20\xd4\xc5\xb4\xa1\x57\xed\xb7\x71\x54\ +\x2e\x67\xb6\x60\xeb\x5d\x75\xbf\xd4\xf1\x62\x59\xf6\x08\x71\x34\ +\xb3\xc1\x42\x22\xb1\xa8\xee\x7b\x0e\x84\x0f\x02\x75\x77\x7e\xcb\ +\x41\x2e\x93\x2e\x75\xb1\x95\x2b\x29\x0f\xad\x1a\xcd\xfd\x28\x0b\ +\x8d\x2a\x33\xfb\xef\x79\xb8\xfc\xfa\x8f\x4d\x9c\x18\xff\x73\x0d\ +\x86\xb7\x20\x78\x13\xe9\x79\x61\x1a\x1c\x06\x36\x77\x30\xb2\xac\ +\x78\xc0\x05\xf4\x74\x90\xff\x92\x07\x51\x0c\x3e\x73\x90\x3b\x48\ +\x1e\x73\xa8\x90\xb8\x6e\x03\xad\x8a\x32\x5b\x37\xb2\xb5\x41\x40\ +\xa1\x42\x79\x76\x47\xce\xe6\xf3\x42\x83\xe1\xa8\x47\x2b\xca\x7d\ +\xa2\x0f\xd2\x4e\x98\x25\x59\xee\x5f\xcf\xe7\x73\x8c\xd1\x87\x8a\ +\x94\x01\x9e\x71\xb9\xf7\xf1\x07\xdb\x9a\x5e\x18\x6d\xa0\x8b\x70\ +\xee\x21\x24\xcf\xba\x38\x57\x05\xdb\x43\x5a\x4b\xde\x8e\x76\x33\ +\x3d\x36\xbb\xa6\xb6\x33\xb2\x86\x19\x59\xeb\xd0\xc4\x4e\xd3\x53\ +\x3b\x11\xe5\xde\xb8\xcb\xb1\x28\x8d\xda\x11\xbb\x59\x5d\x7f\xdd\ +\x01\x2a\x96\x6f\x51\x02\xff\xe1\x41\x89\xfd\x41\x02\x43\x38\xc0\ +\x1f\x34\x28\xf3\xcd\x38\xd5\x23\xdd\xd4\x1a\x38\x59\x1e\x2f\x62\ +\xf0\xa2\x4a\x8e\x60\x97\x56\xbf\xe3\x36\x00\x46\xcf\x36\x22\x09\ +\xeb\x30\x79\xcc\xfa\x93\x86\x54\x10\xf2\xb4\x22\xc8\xe5\xc6\xa8\ +\x5a\x91\x53\x55\x8e\x2d\xc4\x95\x24\xff\x43\x40\xd5\x70\x9f\x76\ +\xf3\xd4\xcc\x7d\x2f\x00\x8e\x1a\x39\x04\x9c\x8e\x1c\x00\x8f\x8f\ +\x1c\x80\xde\x42\x30\x4a\x00\x3c\x32\xa0\xc3\xa8\x00\x60\x23\x5f\ +\x07\x3c\xc1\x46\x0e\x80\x1c\x79\x12\x94\x48\x8c\x1e\x00\x67\xe4\ +\x95\x80\xa4\x23\x0f\x02\x81\x47\x9e\x06\x01\x00\x47\x8e\x1c\x02\ +\x36\xf2\x2c\x00\x00\x8c\x3d\x11\x0a\x6f\xe4\xf5\x20\x00\xe0\x8c\ +\x7c\x2d\xf0\xd0\x33\x1e\x52\xbd\x71\x00\xc6\xbe\x16\x78\xec\x0d\ +\x16\xc5\xeb\xa0\x2c\x75\x9e\x36\xed\xea\xdb\xcf\x79\x90\x16\xf3\ +\x2c\x5f\xcd\xec\x55\x50\xe6\xf1\xee\x1d\x72\x05\x6c\x0b\xa9\x47\ +\xe4\xc4\x41\xae\xc4\x92\x28\xcc\xf9\x84\xb8\x8c\x7b\x92\x62\x36\ +\xc1\xae\x94\x8c\x71\xce\x26\x0e\x11\x40\x45\x02\x89\x09\x96\x2e\ +\x51\x4c\x31\xef\xfd\xf1\xe3\xda\xc3\x28\x9c\xd0\x4e\xe3\xea\x65\ +\x88\xbf\xcc\xf5\x7c\x66\x5f\x7f\x82\x31\xd7\x05\xfe\x8a\x9d\x81\ +\x12\x2c\xcc\x92\x04\xa6\x64\x66\x07\xc9\x36\xd8\x17\xdf\x35\x99\ +\x9c\x90\x37\x58\xdc\x9d\x4c\x66\x2b\x58\x94\x59\x78\x6f\x10\xa8\ +\x70\xd5\x85\x85\xfd\xe3\xe7\xe7\x43\x78\x3f\xe6\x0a\xc2\x03\x47\ +\x60\x74\xe2\x60\x17\x21\xc8\x0d\xb2\xf2\x04\x22\xb0\xf4\x24\x5c\ +\x51\x8c\x19\x67\x72\x42\x5d\xe6\x09\xa4\xa4\x07\x57\x9c\x32\x45\ +\x68\xe7\x07\xcd\xbb\xa5\x4e\x91\xfa\xed\x13\x39\xd5\xe0\x4b\x1a\ +\x97\xc5\xcc\xde\x14\x3a\xff\x64\x5e\x5a\xfd\x3b\xfd\x52\xe8\xa7\ +\xdd\xa2\x7d\x07\x93\x03\xb5\x91\x3e\x98\x6b\x28\x8c\x49\xda\xb3\ +\xb6\x53\x88\xf4\x68\xb5\x4a\xfd\x77\x2f\x30\x8f\x10\x00\xbc\x47\ +\xd9\x0d\xbe\x27\x9a\xc7\x49\xe2\xdf\x25\x41\x78\xff\xa1\x28\xf3\ +\xec\x5e\xfb\x69\x96\xea\xde\xdb\x9a\xda\xba\xef\xf3\xdd\xb7\xf8\ +\x9c\xfe\x05\xa9\xe8\xb9\xfe\xa7\x5c\x20\x51\x89\x27\xd2\x55\x42\ +\x11\x89\xd8\xc5\x44\xd4\xf3\x85\x0b\xa9\x68\x20\xfb\xbf\x56\x2a\ +\x7a\x8b\x25\xf6\x2b\x24\x23\x31\xaa\x64\x84\xfe\x34\xc9\xe8\x25\ +\x91\xc8\x31\xa5\x92\x54\xe0\x0b\x8a\x89\x52\x06\x7c\x0c\xc5\x02\ +\xa2\xe6\x8a\x41\xa1\xe0\xc1\xdc\x30\xe5\x7a\x82\x70\x61\xd8\x8a\ +\x33\x21\xd1\xa5\x9a\x40\x89\xe1\x40\xec\xc7\xea\x40\xb8\xbc\x4e\ +\x28\xca\x37\x58\xe3\xbe\x7e\x5e\x35\x15\x1e\xa5\x02\x44\x27\x18\ +\x8a\x41\xe9\x61\x75\xb9\xc2\xeb\x4d\xd6\xa5\x1a\xef\x45\xf3\xf9\ +\x1a\x45\x4e\x6f\xc0\x31\x64\x16\xd6\xcb\xa4\x7f\x9d\xdc\xc2\x00\ +\x7b\x26\xa5\x30\x1b\x0e\x41\x60\xb7\x21\x99\x82\x6d\x06\xe7\x90\ +\x5c\x84\x07\x57\x8c\x62\xaa\xc4\x84\x78\xae\x62\x92\x99\x3d\x08\ +\x75\x29\x12\x8c\x8b\x61\x67\xa4\x14\x3d\xe5\x8a\x03\x65\xd5\xab\ +\x24\x16\x4a\xfe\xbf\xc2\x77\xc8\x0c\xe1\x3d\x86\x38\xa4\x7f\x9a\ +\x28\x7c\x91\xef\x8a\x71\x3f\xfb\xe2\x54\xbe\xc1\xe0\x7d\x09\x00\ +\x0c\xbf\x41\x0f\xb8\x70\x7c\xf4\x52\x7c\x0f\x2e\x1c\x03\x07\x4d\ +\xfb\x18\x9e\xb1\xbb\xa3\x45\x3b\x3c\xb3\xa9\xe7\x4a\xe5\xf1\x6e\ +\x6d\xde\x03\x91\x41\x8e\x83\xb4\xa6\xba\x42\x74\x47\x80\x0a\xd5\ +\x35\xe2\x1e\xee\xb2\xc5\xde\x50\x91\x8b\x85\xe4\xaa\xdb\xba\x2e\ +\xea\xb1\x86\x93\xd8\xff\xd2\x76\xc5\xcf\x6d\x87\x15\xde\x3b\x36\ +\xde\x9c\x16\x66\x5e\xef\x85\x8b\x31\x5e\x10\x17\x31\xe9\x79\xea\ +\xc8\x78\x81\x5c\xa8\x2e\x31\xf6\x9e\x69\xfc\xa9\xd4\xd0\x4a\x43\ +\x18\x21\x1e\xc2\xea\x50\x72\x30\x8e\x3d\x45\x26\xd5\x2e\x47\x50\ +\x04\xa5\x06\x48\x10\x0f\x4a\x0c\xc2\x27\xdc\x15\x88\x29\xc4\xe5\ +\x84\x11\x17\x88\x98\xca\xf7\x35\xc0\x37\x53\x73\x54\xb9\xba\x6a\ +\xbd\xd1\x9c\x73\x8e\x1e\x62\xbd\xbd\x6a\x11\xba\x0b\x5a\xad\xd6\ +\xc1\x42\x57\x07\x82\x01\xd7\x79\xf5\xab\x19\x77\x59\x1e\xe9\xbc\ +\x61\x89\xea\x77\xc4\xaa\xcf\x0c\x1f\x8e\xf0\x5f\x9d\x44\x28\xf4\ +\xda\xf2\xd1\x30\xbf\x58\x06\x51\xb6\xed\x96\xa1\x96\xf9\x2d\xcb\ +\x00\x19\x0a\xd5\xbd\x02\x7f\x3c\x63\x87\x10\x7e\xb4\x2a\xc1\x30\ +\xf2\xce\x98\x46\x1f\xe6\xc2\xae\x40\x12\x7c\xc6\xdc\xe4\x39\xc0\ +\xef\x24\xc1\x5e\x83\x51\xd5\x9f\x46\xa8\x58\x66\xdb\x45\x6e\xc0\ +\x29\xf3\x8d\x3e\x6d\x19\x65\xe1\xc6\x7c\x1e\xe0\x6c\x0e\x13\x5c\ +\x1f\x4a\xef\x49\x98\xb6\xce\xdd\x5d\xb6\x1b\xee\xa0\x48\x83\xf5\ +\x23\x6c\xc3\x71\x60\x9d\x5c\x16\x8f\xf0\xd3\x2c\xd2\x17\xf8\x6d\ +\xf7\x8e\x8e\x16\xda\x59\xc5\xd1\x3a\x8b\xd3\xf2\x49\xe9\x27\x04\ +\xb3\xbb\xdf\x20\x18\x1f\x53\xac\x96\x78\x44\xb5\x6d\x9c\xc2\x34\ +\x3b\x4d\x81\x41\xe4\x99\x33\xd4\x12\x4d\x59\xe2\x71\x79\x41\xa2\ +\x57\x7f\x9c\xb2\xcc\xb4\xab\x0b\xbc\x55\xb0\x8b\x57\xf1\x37\x1d\ +\x99\xe6\x75\x9c\xac\x74\x19\x44\x41\x19\x74\x31\xd1\x50\x88\x71\ +\x9c\x3a\x59\xe5\xd1\xdc\xff\xcf\xc7\x9f\xdb\x02\x2b\x0c\xfd\xff\ +\x66\xf9\x7d\x57\x02\x19\x81\xe0\x2e\xdb\x80\xda\x6d\x19\x66\xbe\ +\x1e\x08\x7d\x13\xde\x41\x79\x1b\xaf\xc0\xd3\xcd\xa7\x19\x7f\xdb\ +\xad\x12\x88\xce\x96\x71\x24\x6c\x16\x8c\xae\xd3\x43\xb7\xb9\x3e\ +\x7c\x7a\x31\xf8\xb5\x4a\x14\xae\x62\xd3\x68\xfa\xa9\x84\xea\xeb\ +\x57\x33\x48\xef\xec\x7f\xdd\x69\x5c\x26\xfa\xb6\x1a\xf3\x70\xd9\ +\x58\x31\xad\xcd\x68\xea\xb3\x9e\x95\x37\xd3\x06\x86\xea\x6e\xd1\ +\xc1\x73\x14\x2c\x2d\xc2\x49\x70\xa7\x93\x99\xfd\x4f\xc3\xb4\xce\ +\xb8\x8b\x3c\xdb\xac\x57\xe0\x1a\x75\x73\xbb\xab\xde\x97\xed\xa2\ +\xd9\x2b\x22\xaf\x55\x20\x38\x62\x1f\xcc\x4d\xef\x93\x84\xba\xaa\ +\xbc\xa6\x1a\x9c\x47\xd4\xb7\x07\x87\xf2\x21\xf7\x40\xa8\x23\xc8\ +\x87\x0d\xdd\x64\x7f\x18\xdd\xbf\xdb\x94\x65\x9f\xf6\x1b\xf8\xb9\ +\x0f\x0a\xa5\x51\x43\x05\x08\x75\x9e\x80\x6b\x94\x3e\x6b\x68\xa7\ +\xa3\x3a\x51\x00\x79\x2a\xcf\x83\xfd\xa1\xaa\x6d\xd4\x06\x44\xfe\ +\x65\x11\x48\xcf\x54\x21\x4f\x4c\x18\x77\xb9\x14\x1e\x22\x16\xa4\ +\x64\x89\x14\x57\xb0\x4f\xa0\x2e\x26\x9c\x23\x6c\x31\x05\x9b\x43\ +\xe5\x61\x6f\xa2\x5c\x05\x49\x4d\x51\x8b\x40\x3e\xc7\xb0\xad\x24\ +\x13\x02\xe9\x9c\xc3\x6a\x44\xad\x6f\xa7\x5b\xc7\x25\x51\x68\xa0\ +\x02\x09\xb3\x14\x4c\x2c\xb3\xdc\x81\x84\xf6\x10\x94\x9b\x5c\xf7\ +\x0b\xf3\x2e\xf1\x03\xf2\xc6\x49\x20\x30\x43\xf3\x3b\xda\x3e\x0d\ +\x4e\x00\x78\xd8\xbb\xb3\xd5\x55\xf1\xf7\x7f\x99\x19\x19\x40\xda\ +\x2c\xe1\x04\x33\x4a\x27\x44\x98\xe7\x7f\xb0\xa4\x58\x94\x03\xcd\ +\x83\xd5\x7e\xc2\x61\xba\xcc\x4a\xfe\xdc\x09\x91\x6a\xf0\x59\xfc\ +\x1f\x9a\x90\x9b\xe9\xe2\xf6\xea\xc6\x24\x89\xdb\xab\xdf\x01\x64\ +\xd9\x31\x4e\ \x00\x00\x13\xbe\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -9360,118 +9487,118 @@ qt_resource_data = "\ \x36\x14\x14\xa2\xad\xa3\xa0\xac\xa6\x04\x91\x00\x07\x92\x33\x46\ \x6d\xa5\x0d\x85\xb6\x3c\x63\xeb\xf9\x5a\xeb\xd5\x95\xd6\xd4\x5b\ \xcd\x6f\xa6\xf6\x72\x72\x7e\xf3\x07\x32\x2c\xc5\xda\ -\x00\x00\x06\xd7\ +\x00\x00\x06\xd6\ \x00\ -\x00\x27\xd0\x78\x9c\xed\x59\xdd\x6f\xe3\xb8\x11\x7f\xcf\x5f\xa1\ -\x7a\x5f\xee\x50\x93\xe2\xa7\x48\x2a\xb6\xef\xa1\x8b\x03\x0e\x68\ -\x5f\xda\x2b\xfa\x58\xc8\x12\x6d\xeb\x22\x4b\x86\x24\xc7\xc9\xfe\ -\xf5\x1d\xca\x92\x2c\x7f\xc4\xc9\x6d\x76\x7b\xc0\x39\x5a\x38\x12\ -\x39\x33\xe4\x70\x7e\x33\xe4\x0c\x77\xf2\xd3\xd3\x3a\xf3\x1e\x6d\ -\x59\xa5\x45\x3e\x1d\x51\x4c\x46\x9e\xcd\xe3\x22\x49\xf3\xe5\x74\ -\xf4\xef\x5f\x7f\x46\x7a\xe4\x55\x75\x94\x27\x51\x56\xe4\x76\x3a\ -\xca\x8b\xd1\x4f\xb3\xbb\xc9\x5f\x10\xf2\xfe\x56\xda\xa8\xb6\x89\ -\xb7\x4b\xeb\x95\xf7\x4b\xfe\x50\xc5\xd1\xc6\x7a\x3f\xac\xea\x7a\ -\x13\xfa\xfe\x6e\xb7\xc3\x69\xdb\x89\x8b\x72\xe9\xff\xe8\x21\x34\ -\xbb\xbb\x9b\x54\x8f\xcb\x3b\xcf\xf3\x60\xde\xbc\x0a\x93\x78\x3a\ -\x6a\x05\x36\xdb\x32\x6b\x18\x93\xd8\xb7\x99\x5d\xdb\xbc\xae\x7c\ -\x8a\xa9\x3f\x3a\xb0\xc7\x07\xf6\xd8\xcd\x9e\x3e\xda\xb8\x58\xaf\ -\x8b\xbc\x6a\x24\xf3\xea\xd3\x80\xb9\x4c\x16\x3d\xb7\xd3\x66\xc7\ -\x1b\x26\x6a\x8c\xf1\x09\xf3\x19\x43\xc0\x81\xaa\xe7\xbc\x8e\x9e\ -\xd0\xb1\x28\xe8\x78\x49\x94\x11\x42\x7c\xa0\x1d\x38\xdf\xc6\x15\ -\x56\x60\xd0\x0d\xfc\x7a\xf6\xae\x03\x57\xc5\xb6\x8c\xed\x02\xe4\ -\x2c\xce\x6d\xed\x7f\xfe\xf5\x73\x4f\x44\x04\x27\x75\x32\x18\xa6\ -\xb3\xe7\xd1\xac\x47\x46\xce\xa3\xb5\xad\x36\x51\x6c\x2b\xbf\xeb\ -\x6f\xe4\x77\x69\x52\xaf\xa6\xa3\x40\x6c\x9e\x9a\xf6\xca\xa6\xcb\ -\x55\x3d\xe8\x48\x93\xe9\x08\x74\x66\x9a\x06\x4d\x7b\xe0\x12\x74\ -\xcf\xd0\x0e\x17\xf6\x14\x82\x85\xc6\xd4\x2b\x8d\x0a\x48\xc3\xd2\ -\xe9\x1d\x26\x45\xec\x14\x99\x8e\x36\xa5\x5d\xd8\x12\x1c\xca\x56\ -\x28\x2a\xe3\x15\x76\x66\x99\x01\xef\x24\xb1\x8b\xca\xc9\xec\x67\ -\x76\x2d\x98\x5a\x37\x34\xa0\xf6\x93\x6d\x60\xb2\x8d\x8d\x1d\xd0\ -\x7b\xee\xc1\x2c\xf5\xb3\xb3\xc4\x31\x2b\xdf\x9b\xcb\x3b\x52\x78\ -\xf3\xdf\x27\xd0\xd6\x0b\x3d\xce\xe0\x0f\xbd\xc8\xf1\xbc\xe7\xa0\ -\x80\x1d\xbc\xc8\x45\x9e\x2f\xce\x5e\x57\x86\x69\x35\x40\x45\x99\ -\x2e\x53\x30\x50\xc3\xc7\x28\xe6\xcd\x73\x2c\x03\x8b\x1e\xac\x8d\ -\x69\x26\x46\x9e\xff\x86\xd5\x9f\x08\xf2\x80\xb1\xd7\x15\x21\x58\ -\xba\x45\xb5\x8a\x9c\xaa\x72\xbc\x42\xda\x70\xca\x77\x19\xaa\x35\ -\xf7\xe9\x30\xaf\x21\xf7\xb5\x06\x40\xe6\xc6\x4d\x20\xf9\x8d\x1b\ -\x40\xc9\x1b\x37\x80\x51\xb7\x6d\x00\xc5\x2e\xe8\x70\x53\x06\x10\ -\x37\x7e\x0e\xa8\x40\xdc\xb8\x01\xf4\x8d\x6f\x82\x9a\x04\x37\x6f\ -\x00\x74\xe3\x99\x80\xe6\x7f\xb6\x20\x98\xf8\xae\x38\x6a\xbe\x7a\ -\x01\x57\x5c\x25\x8f\xa9\xdd\x1d\x2a\xa8\x79\x54\xd9\x76\xe4\x4d\ -\xb4\x84\xaa\x38\x2b\xca\xe9\xe8\xd3\xa2\x79\x5a\xc2\xbc\x28\x13\ -\x5b\x76\xa4\xa0\x79\x8e\x48\x05\x54\x8e\x69\xfd\xbc\xbf\x07\xb8\ -\x3b\x31\x22\x8c\xda\xd3\xc9\x65\x7a\xb5\x8a\x92\x62\x37\x1d\xb1\ -\x53\xe2\x97\xa2\x58\x3b\x29\x26\x38\x09\x94\x09\x4e\xe9\x31\x98\ -\x08\x71\x26\x30\x64\xf3\xca\x9c\x51\x61\x46\xc4\x24\xc7\x84\x52\ -\x2a\xcf\xa8\xdb\x12\x2a\xcc\x1a\x65\xd1\xb3\x85\x75\x35\xaf\xce\ -\xc8\xd5\xaa\xd8\x2d\x4b\x67\x9f\xba\xdc\xda\x53\x49\x28\x53\xb7\ -\xee\x9a\x01\x6d\xf3\xb4\x86\x52\xbe\x2d\x85\x07\x1c\x4e\x16\xcd\ -\xe7\xc5\xd3\xe5\x01\xaa\x3c\xda\x5c\x21\x3b\x0a\xda\x44\xf5\xaa\ -\xba\x42\xcf\x8b\xc4\xbe\x40\xef\x87\x47\x36\x59\x5a\xb4\x4e\x93\ -\x4d\x91\xe6\xf5\xab\xdc\xaf\x30\x16\xf3\xdf\x20\x5a\xae\x29\xd6\ -\x72\x5c\x51\x6d\x97\xe6\x80\x34\x6a\xaf\x15\x28\xd3\x67\xfe\xd0\ -\x72\x74\x17\x0d\x4a\xea\x17\x38\x5c\x74\xbc\x40\x72\x9e\x78\xe6\ -\x0d\x2d\x6d\x1d\x3d\xa5\xeb\xf4\x8b\x4d\x9c\x78\x1b\x2a\x6b\x5b\ -\x47\x49\x54\x47\x87\xb0\xe8\x7a\xa0\xc0\xa6\xdd\xe5\x42\x99\x2c\ -\xc2\x7f\x7e\xfe\x79\xd6\xc6\xe1\x24\x8e\xc3\xff\x14\xe5\x43\x17\ -\x96\x9e\xe7\x18\xa2\x79\xb1\x05\xb5\x47\xb3\xbe\x7b\x92\xc4\xe1\ -\xa2\x28\xd7\x51\x3d\x4b\xd7\xe0\xec\xee\x8a\xe7\xaf\x4f\xeb\x0c\ -\x02\xb4\x27\x1c\x31\xbb\xb0\x3e\x0c\xba\x1f\xb6\xb4\xfb\x0b\x9f\ -\x8b\xb7\x5e\x49\xbc\x4e\x9d\x90\xff\xaf\x3a\xcd\xb2\x5f\xdc\x24\ -\xfd\x2e\xd8\x0f\x9a\xd6\x99\x9d\x35\x73\xee\x3f\xbb\x55\xf8\xed\ -\x32\xda\x45\xfa\x83\x55\x4e\xfc\xce\x0c\x4d\x6b\x79\x30\xcf\x51\ -\xb0\xf4\x16\xce\xa2\xb9\xcd\xa6\xa3\xbf\x3b\xa2\x77\x46\x5d\x96\ -\xc5\x76\xb3\x06\xd7\x68\xc5\x7b\xb3\x82\xcb\xf4\x5b\x5b\xfd\x9c\ -\x01\xbd\xd9\x6a\xc2\x4f\xa4\x79\xee\x17\xb0\xa8\xf0\x53\x14\x09\ -\xd1\x36\x50\xbb\x9f\x84\x74\xdf\x2c\xb7\x99\x0d\xed\xa3\x05\xbf\ -\x4b\xee\xab\xba\x2c\x1e\x6c\x2f\xbc\x6f\xee\x1d\x2e\xe4\x58\x88\ -\x40\x30\x46\x68\xd7\x9f\xa5\xb9\x05\xed\xc2\xf9\xb6\xae\x87\x7d\ -\xbf\x41\x1c\x84\xa0\x70\xde\x0d\x08\xc1\x51\xdb\x32\x03\xd7\xa9\ -\x43\xd1\xf5\x1d\xf4\x68\x3b\x92\x08\xb6\xb2\xb2\x8c\x9e\xc3\xbc\ -\xc8\xed\xb0\xb7\x58\x2c\x2a\x5b\x87\xe4\x7e\x1d\x95\x0f\xb6\xdc\ -\xd3\x1f\xd3\x2a\x9d\xa7\x99\x1b\xa2\xf9\xcc\xec\x7d\x92\x56\x1b\ -\x30\x4f\x98\xe6\x4e\x8d\xfb\xe2\xd1\x96\x8b\xac\xd8\xf5\x74\x9b\ -\x47\xf0\x42\xf3\x28\x7e\x58\x36\xfa\x85\x51\x0c\xbb\xd1\x36\x8b\ -\x6a\x7b\x38\x44\x00\x22\x67\x56\xa6\x05\x41\x1c\x09\x44\x90\xee\ -\x89\x5d\xec\x49\x6c\x78\xc0\xd9\xe1\x0e\xa4\x0b\x39\xca\xb0\xd4\ -\x52\x90\x83\xc8\x93\xbb\x93\xc2\xc6\x28\x33\x48\x95\x20\xc8\xa4\ -\xc1\x01\xc4\xf0\xa1\x82\xa8\xcb\x28\xaf\x9c\x4f\x43\x04\x45\x75\ -\x99\x3e\xfd\x40\xb0\x92\x4a\x51\x21\xc7\x88\xe0\x40\x32\xa9\x03\ -\x6a\xc6\x64\x4c\xe1\x47\x7e\x3c\x1c\xd6\x6f\xf4\x82\xc5\x42\x2d\ -\x58\xf4\x5e\x2f\x20\x46\xc3\xca\x95\xfe\xf6\x88\x7f\x47\x74\xaf\ -\xb9\xec\xd0\xc3\x2e\x7a\xc1\x29\xfa\x70\x64\xf2\x80\x99\x40\x5d\ -\x42\x5f\x68\x26\x8d\x18\xa2\xcf\x30\x87\x23\x94\x99\x23\xf4\x99\ -\xc6\x5a\x6b\x00\xf7\x2a\xfc\x86\x2b\x2e\x29\x01\xcc\x31\x17\x9a\ -\x7f\xc0\xff\x47\xc0\x3f\xb8\xe9\xfc\x4a\x07\xd0\xd8\x04\x80\xe3\ -\x99\x03\x04\x01\xf8\xc0\x37\x70\x00\x97\x55\xbc\xc9\x01\x8c\x91\ -\xf2\x9d\x0e\xf0\x1e\xdc\xff\x40\x84\xaf\x1f\x2c\x3d\x06\x00\xfb\ -\x3f\x3c\x2a\x20\x67\xa6\x92\xa9\x31\x35\x98\x19\x41\x89\xf6\xb8\ -\xc2\x44\x69\xaa\xc7\x4c\x61\xf7\x66\xc6\x63\x12\x13\xc2\x8c\xe1\ -\x63\xae\x31\xd5\x34\x90\xca\x63\x98\x06\x01\xe7\x06\xf8\x60\x7b\ -\x37\x1c\x4e\x89\x8b\xc3\x7d\x79\xe9\xb8\x91\xee\x77\x5e\xad\xb8\ -\xac\xd0\x65\x29\x90\x19\xc6\xee\xf9\xc0\xfe\x3b\x61\xcf\x01\x22\ -\x40\x4b\x89\x31\x04\xa8\x90\x42\x31\xe5\x05\x0c\x93\x80\x68\x00\ -\x90\x07\xd8\x08\x26\x84\xf6\x84\xc1\x46\xcb\x40\x8c\x85\x82\xc8\ -\x84\x02\x2a\xf0\xc0\x33\xa8\xd0\x46\x2b\xe7\x0f\x90\x03\x48\x29\ -\x2f\x0e\x77\x0d\xfb\x77\x22\xbf\xc7\xfa\x08\xbb\x37\x40\xf9\x62\ -\x0e\xd7\x20\x7a\x0e\x65\xf7\x05\x39\x09\xe1\x44\x72\x97\x5b\xee\ -\x1f\x79\xcd\x17\x8e\xa1\x18\x9a\x7d\xed\xec\xe4\xb6\x39\xad\xc7\ -\x02\xca\x60\x30\x23\xe7\x1e\xe5\x98\x13\x45\x8d\x18\x23\x0a\xd9\ -\x0f\xa5\x46\x79\x02\x83\x81\xe1\xdf\x18\x09\x4c\xb8\x94\xc6\x78\ -\x88\x81\x1e\x5c\x1b\xc3\xc6\x48\xe1\x40\x18\xc2\xb8\x87\x34\x86\ -\xca\x16\x1a\x63\x00\x25\x30\x01\x40\x41\x9b\x6c\x4a\x48\x3d\x0e\ -\x5c\x90\xd2\x40\x9c\x20\xe1\xec\xc9\xb5\x30\xaf\x63\x10\x7f\x9c\ -\xbd\xff\xaf\xb3\x97\xbf\xf3\xec\xa5\x6e\xbb\xd6\x4a\x0f\x8f\x5e\ -\x70\x2c\x2d\x14\x1d\xfc\x07\xde\x77\xcf\xbd\xbe\x5f\x01\xf6\x67\ -\xc7\x1f\x89\x53\x0f\xf8\x9d\xc5\x57\x00\xec\x81\x36\xf2\x28\xfb\ -\x32\x00\xaa\x61\x8a\x5c\xcf\xbe\xbe\x69\xf5\xf5\xe1\x02\x5f\xef\ -\x02\xe8\xac\x06\xfb\x9d\x4e\x20\x21\x31\x13\xc2\x48\x3a\x74\x02\ -\x38\xd7\xe1\x38\x10\x83\xc2\xec\xeb\x9d\xe0\x23\x0d\xfb\xa6\x69\ -\x18\x64\x4b\x0a\xe0\x62\x63\xc8\x0b\x04\xd5\x8a\x79\x92\x62\x67\ -\x7b\xc5\xc6\x54\x63\x48\xbb\xa5\xe1\x7d\xd6\x20\x9b\xec\x0a\x52\ -\x6b\x46\x3d\x1a\xe0\x40\x09\xce\x99\xcb\xb6\x21\xd9\x56\x17\xc6\ -\x7a\x39\x03\x7b\x73\xfe\x35\xf1\x97\xb3\xbb\x89\xbb\x8e\x9c\xdd\ -\xfd\x0f\x63\x62\xcf\x20\ +\x00\x27\xf1\x78\x9c\xed\x59\xdd\x6f\xdb\x36\x10\x7f\xcf\x5f\xa1\ +\xa9\x2f\x1b\x66\x51\xfc\x14\x49\xc5\xce\x30\xac\x28\x30\x60\x7b\ +\xd9\x3a\xec\xb1\x90\x25\xda\xd6\x22\x4b\x86\x24\xc7\x4e\xff\xfa\ +\x1d\x65\x49\x96\x1d\xc7\xc9\x9a\x74\x03\xe6\xc8\x48\x6d\xf1\x3e\ +\x78\xbc\xfb\x1d\x79\xc7\x8e\x7f\xd8\x2e\x33\xe7\xce\x94\x55\x5a\ +\xe4\x13\x97\x20\xec\x3a\x26\x8f\x8b\x24\xcd\xe7\x13\xf7\x8f\x8f\ +\x1f\x3c\xe5\x3a\x55\x1d\xe5\x49\x94\x15\xb9\x99\xb8\x79\xe1\xfe\ +\x70\x73\x35\xfe\xc6\xf3\x9c\x9f\x4a\x13\xd5\x26\x71\x36\x69\xbd\ +\x70\x7e\xce\x6f\xab\x38\x5a\x19\xe7\xdb\x45\x5d\xaf\x42\xdf\xdf\ +\x6c\x36\x28\x6d\x07\x51\x51\xce\xfd\xef\x1c\xcf\xbb\xb9\xba\x1a\ +\x57\x77\xf3\x2b\xc7\x71\x60\xde\xbc\x0a\x93\x78\xe2\xb6\x02\xab\ +\x75\x99\x35\x8c\x49\xec\x9b\xcc\x2c\x4d\x5e\x57\x3e\x41\xc4\x77\ +\xf7\xec\xf1\x9e\x3d\xb6\xb3\xa7\x77\x26\x2e\x96\xcb\x22\xaf\x1a\ +\xc9\xbc\x7a\x37\x60\x2e\x93\x59\xcf\x6d\xad\xd9\xb0\x86\x89\x68\ +\xad\x7d\x4c\x7d\x4a\x3d\xe0\xf0\xaa\xfb\xbc\x8e\xb6\xde\xa1\x28\ +\xd8\x78\x4a\x94\x62\x8c\x7d\xa0\xed\x39\x9f\xc7\x15\x56\xe0\xd0\ +\x15\xfc\xf5\xec\xdd\x00\xaa\x8a\x75\x19\x9b\x19\xc8\x19\x94\x9b\ +\xda\x7f\xff\xf1\x7d\x4f\xf4\x30\x4a\xea\x64\xa0\xa6\xf3\xe7\xc1\ +\xac\x07\x4e\xce\xa3\xa5\xa9\x56\x51\x6c\x2a\xbf\x1b\x6f\xe4\x37\ +\x69\x52\x2f\x26\x6e\xc0\x57\xdb\xe6\x7d\x61\xd2\xf9\xa2\x1e\x0c\ +\xa4\xc9\xc4\x05\x9b\xa9\x22\x41\xf3\x3e\x80\x04\xd9\x31\xb4\xea\ +\xc2\x9e\x82\x11\x57\x88\x21\xe2\x94\x5a\xa9\x9d\x54\x67\x79\x98\ +\x14\xb1\x35\x65\xe2\xfe\x58\xc6\x8b\x4f\x7f\x46\x59\xf6\xe9\x63\ +\x69\x0c\xb2\x6e\xb9\x01\xce\x71\x62\x66\x95\x95\xd8\xcd\x6c\xdf\ +\x60\x6a\xd5\xd0\x80\xda\x4f\xb6\x82\xc9\x56\x26\xb6\x81\xde\x71\ +\x0f\xe6\xa8\xef\xad\x27\x0e\x59\xd9\xce\x5d\xce\x81\xc1\xab\x4f\ +\x5b\xb0\xd6\x09\x1d\x46\xe1\x1f\x72\x92\xe3\x7e\xc7\x41\x20\x76\ +\xf0\x85\x4f\xf2\x7c\xb6\xfe\x3a\xa3\xa6\xb5\xc0\x2b\xca\x74\x9e\ +\x82\x83\x1a\x3e\x4a\x10\x6b\x9e\x43\x19\x58\xf4\x60\x6d\x54\x51\ +\xee\x3a\xfe\x33\x56\x7f\x24\xc8\x02\x4a\x9f\x36\x04\x23\x61\x17\ +\xd5\x1a\x72\x6c\xca\xe1\x0a\x49\xc3\x29\x5e\xe4\xa8\xd6\xdd\xc7\ +\x6a\x9e\x8a\xdc\x97\x3a\xc0\xd3\x17\xee\x02\xc1\x2e\xdc\x01\x52\ +\x5c\xb8\x03\xb4\xbc\x6c\x07\x48\x7a\xc2\x86\x8b\x72\x00\xbf\xf0\ +\x73\x40\x06\xfc\xc2\x1d\xa0\x2e\x7c\x13\x54\x38\xb8\x78\x07\x78\ +\x17\x5e\x09\x28\xf6\x7f\x4b\x82\xb1\x6f\x9b\xa3\xe6\x57\x2f\x60\ +\x5b\xab\xe4\x2e\x35\x9b\x7d\x07\x35\x8d\x2a\xd3\x6a\x5e\x45\x73\ +\xe8\x8a\xb3\xa2\x9c\xb8\xef\x66\xcd\xd3\x12\xa6\x45\x99\x98\xb2\ +\x23\x05\xcd\x73\x40\x2a\xa0\x73\x4c\xeb\xfb\xdd\x3d\xc0\xd5\x91\ +\x13\x41\x6b\x4f\xc7\xa7\xe9\xd5\x22\x4a\x8a\xcd\xc4\xa5\xc7\xc4\ +\xcf\x45\xb1\x9c\xb8\x02\x09\x6c\x1f\x72\x4c\x8e\xc1\x43\x5c\x20\ +\x4c\x45\xc0\x1f\x12\x61\x3e\x2a\x91\x22\x1a\x93\xe0\x01\x71\x5d\ +\x96\x26\xaf\xbd\x2c\xba\x37\xb0\xa8\xe6\xab\xd3\x50\x2d\x8a\xcd\ +\xbc\xb4\xce\xa9\xcb\xb5\x39\x96\x84\x0e\x75\x6d\xef\x18\xbc\x75\ +\x9e\xd6\xd0\xc7\xb7\x7d\xf0\x80\xc3\xca\x7a\xd3\x69\xb1\x3d\xad\ +\xa0\xca\xa3\xd5\x19\xb2\xa5\x78\xab\xa8\x5e\x54\x67\xe8\x79\x91\ +\x98\x47\xe8\xbd\x7a\xcf\x24\x73\xe3\x2d\xd3\x64\x55\xa4\x79\xfd\ +\x24\xf7\x13\x8c\xc5\xf4\x2f\x48\x95\x73\x86\xb5\x1c\x67\x4c\xdb\ +\xa4\x39\x84\xd9\x6b\xef\x14\x08\x55\x0f\xc0\xd0\x72\x74\xb7\x0c\ +\x52\xa8\x47\x38\x6c\x6a\x3c\x42\xb2\x30\xd4\x8f\xd0\x96\xd1\x36\ +\x5d\xa6\x9f\x4d\x62\xc5\xdb\x3c\x59\x9a\x3a\x4a\xa2\x3a\xda\xe7\ +\x44\x37\x02\xdd\x35\xe9\x6e\x16\xca\x64\x16\xfe\xf6\xfe\xc3\x4d\ +\x9b\x84\xe3\x38\x0e\xff\x2c\xca\xdb\x2e\x27\x1d\xc7\x32\x44\xd3\ +\x62\x0d\x66\xbb\x37\xfd\xf0\x38\x89\xc3\x59\x51\x2e\xa3\xfa\x26\ +\x5d\x02\xd2\xed\xfd\xce\xf7\xdb\x65\x06\xd9\xd9\x13\x0e\x98\x6d\ +\x4e\xef\x95\xee\xd4\x96\x66\x77\xdb\x73\xf2\xca\x2b\x89\x97\xa9\ +\x15\xf2\x7f\xaf\xd3\x2c\xfb\xd9\x4e\xd2\x6f\x81\xbd\xd2\xb4\xce\ +\xcc\x7e\x70\xec\xb7\xd6\xb7\x6b\xf3\x07\x8b\x1b\xfb\xdd\xea\x9b\ +\xb7\xf9\xde\x2b\x07\x39\xd2\x3b\x36\x8b\xa6\x26\x9b\xb8\xbf\x58\ +\xa2\xf3\x80\x3a\x2f\x8b\xf5\x6a\x09\x88\x68\xc5\x7b\x6f\x02\x52\ +\xfa\xed\xac\xbe\xcf\x80\xde\x6c\x2f\xe1\xbb\x26\xd1\xf1\xf5\x0c\ +\xd6\x12\xbe\x8b\x22\xce\xdb\x17\xaf\xdd\x43\x42\xb2\x7b\x2d\xd7\ +\x99\x09\xcd\x9d\x01\xb8\x25\xd7\x55\x5d\x16\xb7\xa6\x17\xde\xbd\ +\xee\x70\x16\x32\xc4\x79\xc0\x29\xc5\xa4\x1b\xcf\xd2\xdc\x80\x75\ +\xe1\x74\x5d\xd7\xc3\xb1\xbf\x00\xfe\x21\x18\x9c\x77\x0a\x21\x27\ +\x6a\x53\x66\x80\x98\x3a\xe4\xdd\xd8\xde\x8e\x76\x20\x89\x60\xfb\ +\x2a\xcb\xe8\x3e\xcc\x8b\xdc\x0c\x47\x8b\xd9\xac\x32\x75\x88\xaf\ +\x97\x51\x79\x6b\xca\x1d\xfd\x2e\xad\xd2\x69\x9a\x59\x15\xcd\xcf\ +\xcc\x5c\x27\x69\xb5\x02\xf7\x84\x69\x6e\xcd\xb8\x2e\xee\x4c\x39\ +\xcb\x8a\x4d\x4f\x37\x79\x04\x5f\xde\x34\x8a\x6f\xe7\x8d\x7d\x61\ +\x14\xc3\x26\xb4\xce\xa2\xda\xec\x0f\x0e\x08\x91\x75\x2b\x55\x1c\ +\x7b\xcc\xe3\x1e\xf6\x54\x4f\xec\x52\x4e\x20\xcd\x02\x46\xf7\xf7\ +\x1e\x5d\xa6\x11\x8a\x84\x12\x1c\xef\x45\xb6\xf6\x1e\x0a\x69\x2d\ +\xf5\xa0\x3c\x82\xdc\x12\x1a\x05\x90\xba\xfb\xae\xa1\x2e\xa3\xbc\ +\xb2\x50\x86\xc4\x89\xea\x32\xdd\x7e\x8b\x91\x14\x52\x12\x2e\x46\ +\x1e\x46\x81\xa0\x42\x05\x44\x8f\xf0\x88\xc0\x1f\xfe\x6e\x7f\x40\ +\x3f\x13\x05\xbb\xb3\xe8\xa5\x28\xc0\x5a\xc1\xca\xa5\xd4\xed\xa3\ +\x5e\x3f\xf4\x5f\x31\xcc\xe7\xb0\x3b\x84\xda\x49\x38\x1c\xc3\x80\ +\x72\xc4\x02\xaa\x03\x79\x0a\x06\x5c\x51\xa1\xf9\x10\x06\x14\x31\ +\x42\x08\xf0\x0f\x61\x40\x15\x52\x4a\x41\x94\xcf\xe2\x40\x33\xc9\ +\x04\xc1\x10\x7c\xc4\xb8\x62\x6f\x38\xf8\x4f\x71\x30\xb8\xef\xfc\ +\x42\x24\x28\xa4\x03\x08\xe8\x03\x24\x04\x01\x80\xe1\x15\x90\x60\ +\xcb\x8b\x67\x20\x21\x96\xf6\xf3\x42\x24\xbc\x24\xee\xff\x61\x84\ +\xcf\x1f\x35\x7d\x0c\x20\xec\xbf\x3a\x84\x23\xca\x89\xa0\x72\x44\ +\x34\xa2\x9a\x13\xac\x1c\x26\x11\x96\x8a\xa8\x11\xd4\xc6\xf6\x9b\ +\x6a\x87\x42\x09\x8d\xa9\xd6\x6c\xc4\x14\x22\x8a\x04\x42\x3a\x14\ +\x91\x20\x60\x4c\x03\x1f\x6c\xf8\x9a\xc1\xb9\x71\x52\xdd\xe7\xc7\ +\x0e\x20\x61\xff\x1e\xf6\x2c\xb6\x3c\xb4\xe5\x0a\x94\x88\xb1\x7d\ +\xde\x62\xff\x95\x62\xcf\x20\x44\x10\x2d\xc9\x47\x90\xa0\x5c\x70\ +\x49\xa5\x13\x50\x84\x03\xac\x20\x80\x2c\x40\x9a\x53\xce\x95\xc3\ +\x35\xd2\x0a\xfa\xa7\x11\x97\x90\x99\x94\xca\xc0\x01\x64\x10\xae\ +\xb4\x92\x16\x0f\x50\x15\x08\x21\x4e\xaa\x3b\x17\xfb\x17\x46\x7e\ +\x17\xeb\x83\xd8\x3d\x23\x94\x8f\x56\x75\x4d\x44\x1f\x86\xb2\xfb\ +\x05\x55\x0a\x66\x58\x30\x5b\x6d\xee\x1e\x71\x0e\x0b\x87\xa1\x18\ +\xba\x7d\x69\xfd\x64\xb7\x39\xa5\x46\x1c\x9a\x61\x70\x23\x63\x0e\ +\x61\x88\x61\x49\x34\x1f\x79\x04\xea\x21\x42\xb4\x74\x38\x02\x07\ +\xc3\x67\xe4\x71\x84\x99\x10\x5a\x3b\x1e\x05\x3b\x98\xd2\x9a\x8e\ +\x3c\x89\x02\xae\x31\x65\x8e\xa7\x10\xa3\x50\xc0\xea\x11\x04\x25\ +\xd0\x01\x84\x82\x34\xf5\x15\x17\x6a\x14\xd8\x24\x25\x01\x3f\x8a\ +\x84\xf5\x27\x53\x5c\x3f\x1d\x83\xf8\xed\x10\xfe\xd7\x0f\x61\xf6\ +\xc2\x43\x98\xd8\x7d\x5b\x49\x35\x3c\x83\x01\x61\x8a\x4b\x32\xf8\ +\xff\xbc\xaf\x5e\x8d\xc9\xc8\x7e\x5e\xab\x37\xeb\xf2\x8e\x5f\x12\ +\x10\x3c\x7e\x0c\x85\x7f\xd8\xa0\x05\xc0\x1e\x28\x2d\x0e\xea\x31\ +\x0d\xd1\xd5\x54\xe2\xf3\xf5\xd8\xab\x76\x68\x6f\x58\x78\x05\x2c\ +\x78\x0f\xfa\xb4\x7f\x88\x06\x01\x35\x1b\xe7\x5a\x90\x21\x1a\xe0\ +\xc8\x87\x93\x82\x0f\x9a\xb7\x2f\x47\xc3\x5b\x85\xf6\xaa\x15\x1a\ +\x14\x52\x12\xc2\x45\x47\x50\x32\x70\xa2\x24\x75\x04\x41\xd6\xf7\ +\x92\x8e\x88\x42\x50\x91\x0b\xcd\xfa\x82\x42\x34\x85\x17\x54\xdd\ +\x94\x38\x24\x40\x81\xe4\x8c\x51\x5b\x88\x43\x1d\x2e\x4f\xe8\x7a\ +\xbc\x38\x7b\x76\x69\x36\xf6\xe7\x37\x57\x63\x7b\x65\x79\x73\xf5\ +\x37\x0f\x85\xd5\xfb\ \x00\x00\x11\xff\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ @@ -10066,6 +10193,130 @@ qt_resource_data = "\ \x9a\x32\x44\x99\x70\x39\x33\x94\xd2\xeb\xa7\x55\xab\x4f\x8c\xe1\ \x70\xaa\x5e\x6a\x8c\x9b\xd9\xea\xf6\xea\xc6\x24\x6c\xb7\x57\xff\ \x06\x6a\xf1\x08\x6d\ +\x00\x00\x07\x91\ +\x00\ +\x00\x36\x0d\x78\x9c\xed\x5b\xdd\x6f\xdb\x38\x12\x7f\xcf\x5f\xa1\ +\x53\x5e\x5a\x9c\x25\xf3\x4b\x14\xa9\xda\x59\x1c\xae\xd8\xc3\x02\ +\x77\x38\x60\xdb\xe2\x1e\x0b\x59\xa2\x6d\x6d\x64\xd1\x90\xe4\xd8\ +\xee\x5f\x7f\x43\x59\x5f\x76\xe4\xa4\xe9\xe6\xa1\x17\x9d\x83\x24\ +\xd2\xcc\x90\x1c\xfe\x66\x38\x33\x94\xe8\xd9\x2f\x87\x4d\x6a\x3d\ +\xa8\xbc\x48\x74\x36\xb7\xb1\x8b\x6c\x4b\x65\x91\x8e\x93\x6c\x35\ +\xb7\xbf\x7c\xfe\xd5\x11\xb6\x55\x94\x61\x16\x87\xa9\xce\xd4\xdc\ +\xce\xb4\xfd\xcb\xdd\xcd\xec\x2f\x8e\x63\xfd\x3d\x57\x61\xa9\x62\ +\x6b\x9f\x94\x6b\xeb\xb7\xec\xbe\x88\xc2\xad\xb2\xde\xad\xcb\x72\ +\x1b\x4c\xa7\xfb\xfd\xde\x4d\x6a\xa2\xab\xf3\xd5\xf4\xbd\xe5\x38\ +\x77\x37\x37\xb3\xe2\x61\x75\x63\x59\x16\x8c\x9b\x15\x41\x1c\xcd\ +\xed\xba\xc1\x76\x97\xa7\x95\x60\x1c\x4d\x55\xaa\x36\x2a\x2b\x8b\ +\x29\x76\xf1\xd4\xee\xc4\xa3\x4e\x3c\x32\xa3\x27\x0f\x2a\xd2\x9b\ +\x8d\xce\x8a\xaa\x65\x56\xdc\xf6\x84\xf3\x78\xd9\x4a\x1b\x6d\xf6\ +\xb4\x12\xc2\x52\xca\x29\x22\x53\x42\x1c\x90\x70\x8a\x63\x56\x86\ +\x07\xe7\xbc\x29\xe8\x38\xd4\x94\x20\x84\xa6\xc0\xeb\x24\xbf\x4f\ +\x2a\x38\xa4\x00\xc5\x55\x65\x2a\x6e\x7f\x74\x80\x7f\x0b\xbf\x6d\ +\x83\x86\xe0\x16\x7a\x97\x47\x6a\x09\x2d\x95\x9b\xa9\x72\xfa\xf1\ +\xf3\xc7\x96\xe9\x20\x37\x2e\xe3\x5e\x37\x0d\xfa\x67\xe3\x9e\x99\ +\x24\x0b\x37\xaa\xd8\x86\x91\x2a\xa6\x0d\xbd\x6a\xbf\x4f\xe2\x72\ +\x3d\xb7\x39\xdb\x1e\xaa\xfb\xb5\x4a\x56\xeb\xb2\x47\x48\xe2\xb9\ +\x0d\x33\x24\x02\xf3\xea\xbe\xe7\x40\xf8\x24\x50\x77\x17\xb4\x1c\ +\xe4\x32\xe1\x52\x17\x5b\xb9\x14\xe2\xd4\xaa\xd1\x3c\x88\x75\x64\ +\x54\x99\xdb\x7f\xcb\xa3\xf5\xd7\xdf\xb5\x5e\xba\x06\xbf\x3b\x10\ +\x9a\xc5\x6a\x59\x18\xe1\xd3\xa0\xe6\x0e\x46\x15\x15\x0f\xb8\x80\ +\x9c\x0a\xf3\x7f\xe4\x61\x9c\x80\xbf\x9c\xe4\x4e\x92\xe7\x1c\xca\ +\x05\xae\xdb\x40\xab\xa2\xd4\xdb\x46\xb6\x9e\x0c\x50\x28\x97\xbe\ +\xdd\x91\xf5\x72\x59\x28\x98\x34\xea\xd1\x8a\xf2\x98\xaa\x93\xb4\ +\x13\xe9\x54\xe7\xc1\xed\xb2\xfa\x7c\xa8\x48\x1a\xb0\x4c\xca\x63\ +\x80\x3f\xd8\xd6\xf4\xca\x68\x03\x5d\x88\x85\xf9\x79\xd4\xc5\x63\ +\x55\xb0\x3d\xa4\xb5\xf0\xda\xd1\x66\xd3\xf3\x69\xd7\xd4\xd6\x1a\ +\x5b\xb0\xc6\x56\x45\x66\xdd\x34\x3d\xb5\x46\x28\x8f\xc6\x55\xce\ +\x45\x69\xdc\x8e\xd8\x59\x74\xfb\xf5\x00\xa8\x58\x81\x45\x09\xfc\ +\xc1\x83\x12\xc7\x93\x04\x86\xa5\x00\xff\xd0\xa0\xcc\x37\xe3\x50\ +\x4f\x74\x53\x6b\xe0\xe8\x3c\x59\x25\xe0\x41\x95\x1c\xc1\x2e\xad\ +\x3e\xe7\x6d\x00\x8c\xde\xdc\x88\x20\xac\xc3\xe4\xa9\xd9\x5f\x34\ +\xa4\x9c\x90\xe7\x15\x41\xae\x67\x26\x55\x2b\x72\xa9\xca\xf9\x0c\ +\x71\x25\xe9\xfd\x29\xa0\x6a\xb8\x2f\xbb\x79\xce\x72\x3f\x0a\x80\ +\x23\x47\x0e\x81\x47\x47\x0e\x80\xef\x8d\x1c\x80\x5e\x22\x18\x25\ +\x00\x3e\x19\xd0\x61\x54\x00\xb0\x91\xe7\x01\x9f\xb3\x91\x03\x20\ +\x46\x1e\x04\x05\xe2\xa3\x07\xc0\x19\x79\x25\x20\xe8\xc8\x17\x01\ +\xc7\x23\x0f\x83\x00\x80\x23\x46\x0e\x01\x1b\x79\x14\x00\x00\xc6\ +\x1e\x08\xb9\x3f\xf2\x7a\x10\x00\x70\x46\x9e\x0b\x7c\xf4\x1d\x0f\ +\xa9\xde\x38\x00\x63\xcf\x05\x3e\x7b\x83\x45\xf1\x36\x2c\x4b\x95\ +\x67\x4d\xbb\xfa\xf6\x73\x1e\x66\xc5\x52\xe7\x9b\xb9\xbd\x09\xcb\ +\x3c\x39\xbc\x43\x2e\x87\x6d\x21\xf5\x89\x98\x38\xc8\x15\x58\x10\ +\x89\x3d\x6f\x42\x5c\xe6\xf9\x82\x62\x36\xc1\xae\x10\x8c\x79\x1e\ +\x9b\x38\x84\x03\x15\x71\xc4\x27\x58\xb8\x44\x32\xc9\xfc\xf7\xe7\ +\x8f\x6b\x4f\xa3\x78\x84\x76\x1a\x57\x2f\x42\x82\x75\xae\x96\x73\ +\xfb\xf6\x13\x8c\xb9\x2d\xf0\x57\xec\x0c\x94\x60\x91\x4e\x53\x30\ +\xc9\xdc\x0e\xd3\x7d\x78\x2c\x7e\xc8\x98\x1e\x21\x6f\xb0\xb8\xbb\ +\x30\x66\x2b\x58\x94\x3a\xba\x37\x08\x54\xb8\xaa\xc2\xc2\xc1\xf9\ +\xf3\xf3\x21\xbc\x9f\x72\x05\xee\x83\x23\x30\x3a\x71\xb0\x8b\x10\ +\xc4\x06\x51\x79\x02\xe1\x58\xf8\x02\xae\x28\xc6\xcc\x63\x62\x42\ +\x5d\xe6\x73\x24\x85\x0f\x57\x1e\x65\x92\xd0\xce\x0f\x9a\xf7\x4a\ +\x9d\x22\xf5\x9b\x27\x72\xa9\xc1\x97\x2c\x29\x8b\xb9\xbd\x2b\x54\ +\xfe\xc9\xbc\xb0\xfa\x77\xf6\xa5\x50\xcf\xbb\x45\xfb\x0e\x26\x07\ +\x6a\x23\x7d\x9a\xae\xa1\x30\x26\x68\x6f\xb6\x9d\x42\xa4\x47\xab\ +\x55\xea\xbf\x7b\x01\x3b\xc2\x02\xf0\x7a\x94\xc3\xe0\x7b\xa2\x65\ +\x92\xa6\xc1\x22\x0d\xa3\xfb\x0f\x45\x99\xeb\x7b\x15\x64\x3a\x53\ +\xbd\xb7\x35\xf5\xec\x7e\xcc\x77\xdf\xe2\x73\xfa\x17\x84\xa2\xef\ +\xf5\x3f\xe9\x02\x89\x0a\x3c\x11\xae\xe4\x92\x08\xc4\xae\x06\xa2\ +\x9e\x2f\x5c\x09\x45\x03\xd1\xff\xb5\x42\xd1\x5b\x2c\xb1\x5f\x21\ +\x18\xf1\x51\x05\x23\xf4\xd3\x04\xa3\x97\xac\x44\x0f\x53\x2a\x48\ +\x05\x3e\xa7\x98\x48\x69\xc0\xc7\x50\x2c\x20\x6a\xae\x18\x14\x0a\ +\x3e\xd8\x86\x49\xd7\xe7\xc4\xe3\x86\x2d\x3d\xc6\x05\xba\x56\x13\ +\x48\x3e\xbc\x10\xfb\x6b\x75\x60\xb9\xbc\xce\x52\x14\x6f\xb0\xc6\ +\x7d\xfd\xb8\x6a\x2a\x3c\x4a\x39\x88\x4e\x30\x14\x83\xc2\xc7\xf2\ +\x7a\x85\xd7\x33\xd6\xb5\x1a\xef\x45\xf6\x7c\x8d\x22\xa7\x37\xe0\ +\x18\x22\x0b\xeb\x45\xd2\xff\x9d\xd8\xc2\x00\x7b\x26\x04\x37\x1b\ +\x0e\x4e\x60\xb7\x21\x98\x84\x6d\x86\xe7\x41\x70\xe1\x3e\x5c\x31\ +\x8a\xa9\xe4\x13\xe2\xbb\x92\x09\x66\xf6\x20\xd4\xa5\x88\x33\x8f\ +\x0f\x3b\x23\xa5\xe8\x39\x57\x1c\x28\xab\x5e\x25\xb0\x50\xf2\xff\ +\x0c\xdf\x21\x33\x84\xf7\x18\xd6\x21\xfd\x69\x56\xe1\x8b\x7c\x97\ +\x8f\xfb\xd9\x97\x47\xc5\x1b\x5c\xbc\x2f\x01\x80\xe1\x37\xe8\x01\ +\x57\x8e\x8f\x5e\x5b\xdf\x83\x89\x63\xe0\xa0\x69\x1f\xc3\x4b\xb6\ +\xec\xd6\xf1\x01\xcf\x6d\xea\xbb\x42\x42\x96\xeb\x0e\x1c\x1d\x81\ +\xca\xcc\x69\x59\xe6\xf7\x5e\x3a\x1c\xc8\xdc\xe6\xc4\x45\x4c\xf8\ +\x7e\x17\x30\x8f\x86\x8a\x5c\xa8\xb0\x30\xee\x7a\x58\xd5\x83\x3d\ +\x1d\xc5\x1a\xa9\xa1\x68\x4b\x18\x21\x3e\xc2\xf2\x94\x76\x99\x87\ +\x7d\x49\x26\x55\xa5\xcf\x29\x82\x74\x0b\x12\xc4\x87\x34\x4b\xbc\ +\x89\xe7\x72\xc4\x24\xf2\xc4\x84\x11\x17\x88\x98\x8a\xf7\x35\xc0\ +\xb3\xa9\x39\xae\x5b\x5d\xb5\x16\x31\xe7\x7c\xe3\x87\x44\xed\x6f\ +\x5a\x84\x16\x61\xab\xd5\x36\x5c\xa9\xea\x50\x2c\xe0\x7a\x3a\x58\ +\x5b\x33\x16\x3a\x8f\x55\xde\xb0\x78\xf5\x39\x63\xd5\xe7\x66\x4f\ +\x47\xd8\x6f\x2e\xbc\x14\x7a\x6d\xf9\x68\x98\x5f\xac\xc3\x58\xef\ +\xbb\x50\xdc\x32\xbf\x69\x0d\xc8\x50\xa8\x70\x25\x12\xfe\x23\x76\ +\x04\x2e\xe8\x60\xd8\xcf\x10\xea\xfb\xec\x11\xd7\x28\xc4\x5c\x28\ +\x8d\x05\xc1\x8f\x98\xbb\x3c\x07\xfc\x9d\x34\x3c\x2a\x98\x55\xf5\ +\xaf\x11\x2a\xd6\x7a\xbf\xca\x0d\x3a\x65\xbe\x53\x97\x2d\x63\x1d\ +\xed\xcc\xf9\x78\x67\x77\xb2\x70\x7d\x2a\xbb\x27\x61\xda\x3a\x8b\ +\x85\x3e\x0c\x77\x50\x64\xe1\xf6\x09\xb6\xe1\x38\x90\x2c\xd6\xc5\ +\x13\xfc\x4c\xc7\xea\x0a\xbf\xed\xde\x51\xf1\x4a\x39\x9b\x24\xde\ +\xea\x24\x2b\x9f\x95\x7e\x46\x50\x2f\xfe\x80\xd5\xf8\x94\x62\xb5\ +\xc4\x13\xaa\xed\x93\x0c\xec\xec\x34\x59\x96\x88\x47\xde\x50\x4b\ +\x34\xb9\xd9\xf7\xc4\x15\x89\x5e\x12\xbe\x64\x19\xb3\xcb\x2b\xbc\ +\x4d\x78\x48\x36\xc9\x37\x15\x9b\xe6\xf5\x42\xd9\xa8\x32\x8c\xc3\ +\x32\xec\x16\x45\x43\x21\xc6\x71\xea\x68\x95\xc7\xcb\xe0\xf7\x8f\ +\xbf\xb6\x55\x46\x14\x05\xff\xd1\xf9\x7d\x57\x07\x18\x81\x70\xa1\ +\x77\xa0\x76\x5b\x8b\x98\x23\xf4\x51\x60\xd6\x77\x58\xde\x25\x1b\ +\x70\x75\xf3\xdd\x84\xbf\x1e\x36\x29\x2c\xcf\x96\x71\x26\x6c\xa2\ +\x66\xd7\xe9\xa9\xdb\x5c\x9d\xbe\x7b\x30\xf8\x75\x8d\x38\xda\x24\ +\xa6\xd1\xf4\x53\x09\x25\xc8\x6f\x66\x90\xde\x01\xf8\xba\xd3\xa4\ +\x4c\xd5\x5d\x35\xe6\xe9\xb2\x99\xc5\xb4\x9e\x46\x53\xa4\xf4\x66\ +\x39\x9b\x36\x30\x54\x77\xab\x0e\x9e\xb3\xc5\xd2\x22\x9c\x86\x0b\ +\x95\xce\xed\x7f\x1a\xa6\xf5\x88\xbb\xca\xf5\x6e\xbb\x01\xd7\xa8\ +\x9b\xdb\x5d\x09\xbb\x6e\x33\x47\xaf\x92\xba\xe5\x0b\xf3\xf3\xc1\ +\xdc\xf4\xce\xe5\xd7\xa5\xd5\x2d\xaa\x3e\xf5\xed\xc9\xa1\x02\xda\ +\xdc\x9a\xa8\x0f\x83\x06\x8b\x5d\x59\xf6\x69\x7f\x80\x7b\x07\xa0\ +\x47\x16\x37\x54\x40\x4e\xe5\x29\x78\x44\x19\xb0\x86\x76\x39\x98\ +\x13\x87\x10\x9f\xf2\x3c\x3c\x9e\x2a\xba\x46\x5b\x00\xe2\x5f\x16\ +\x81\xb0\x4c\x25\xf2\xf9\x84\x79\xae\x27\xb8\x8f\x88\x05\xa1\x58\ +\x20\xe9\x49\xa8\x91\xa9\x8b\x89\xe7\x21\x6c\x31\x09\x1b\x23\xe9\ +\x63\x7f\x22\x5d\x09\xc1\x4c\x52\x8b\x40\x1c\xc7\xb0\xa5\x22\x13\ +\x02\x61\xdc\x83\x2c\x44\xad\x6f\x97\xdb\xa6\x35\x91\x68\x20\xfb\ +\x46\x3a\x83\x29\x96\x3a\x77\x20\x8e\x3d\x84\xe5\x2e\x57\xfd\xa2\ +\xb4\x0b\xf8\x00\xb8\xf1\x0d\x58\x8f\x91\xf9\x9c\x6d\x1d\x06\x71\ +\x07\xc7\x7a\xf7\x28\xab\x4a\xef\xfd\xcf\x6e\x88\x01\x80\x4d\xc6\ +\x26\x98\x51\x3a\x21\xdc\x3c\xf2\x82\x0c\x62\x51\x0f\x68\x3e\x24\ +\xf7\x89\x07\x56\x32\x89\xfb\x7b\xed\x20\xe4\xe0\xe3\xe7\x3f\x65\ +\x87\xd9\x74\x75\x77\x33\x33\x21\xe1\xee\xe6\xbf\x41\x63\xea\xe4\ +\ \x00\x00\x06\xdd\ \x00\ \x00\x22\x8f\x78\x9c\xed\x59\xdb\x6e\xe3\x46\x12\x7d\xf7\x57\xf4\ @@ -10327,6 +10578,10 @@ qt_resource_name = "\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x70\x00\x6c\x00\x69\x00\x74\x00\x4d\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\ \x00\x67\ \x00\x0d\ +\x07\x4a\x92\xc7\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0d\ \x01\xb7\x92\xa7\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x69\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ @@ -10373,6 +10628,11 @@ qt_resource_name = "\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x46\x00\x6c\x00\x6f\x00\x6f\x00\x72\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\ \x00\x76\x00\x67\ +\x00\x12\ +\x08\x61\x2a\xa7\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\ +\x00\x67\ \x00\x14\ \x02\xc8\x0e\x47\ \x00\x41\ @@ -10382,8 +10642,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2d\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x15\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x15\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x04\ \x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x01\x60\x78\ \x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x20\ @@ -10402,29 +10662,31 @@ 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\x2c\x00\x01\x00\x00\x00\x01\x00\x02\x43\x52\ -\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x02\x05\x83\ -\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x11\ -\x00\x00\x05\xcc\x00\x01\x00\x00\x00\x01\x00\x02\x6e\xe4\ -\x00\x00\x04\xfe\x00\x01\x00\x00\x00\x01\x00\x02\x3c\x80\ -\x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc5\x80\ -\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\x07\ +\x00\x00\x05\x4c\x00\x01\x00\x00\x00\x01\x00\x02\x4b\x1c\ +\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x02\x0d\x4d\ +\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x13\ +\x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x42\ +\x00\x00\x05\x1e\x00\x01\x00\x00\x00\x01\x00\x02\x44\x4a\ +\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\x04\x78\x00\x00\x00\x00\x00\x01\x00\x02\x1f\x5d\ +\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x02\x27\x27\ +\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\ \x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x93\x78\ -\x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xce\xd8\ +\x00\x00\x05\xec\x00\x01\x00\x00\x00\x01\x00\x02\x76\xad\ +\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\xa8\x00\x01\x00\x00\x00\x01\x00\x02\x2e\xcb\ -\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x02\ -\x00\x00\x04\xd6\x00\x01\x00\x00\x00\x01\x00\x02\x34\x1b\ -\x00\x00\x05\x56\x00\x00\x00\x00\x00\x01\x00\x02\x4a\x2d\ -\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x1e\ -\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x66\x6a\ -\x00\x00\x05\x80\x00\x01\x00\x00\x00\x01\x00\x02\x5c\x30\ -\x00\x00\x04\x58\x00\x01\x00\x00\x00\x01\x00\x02\x19\x45\ +\x00\x00\x04\xc8\x00\x01\x00\x00\x00\x01\x00\x02\x36\x95\ +\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x04\ +\x00\x00\x04\xf6\x00\x01\x00\x00\x00\x01\x00\x02\x3b\xe5\ +\x00\x00\x05\x76\x00\x00\x00\x00\x00\x01\x00\x02\x51\xf6\ +\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x20\ +\x00\x00\x05\xc0\x00\x01\x00\x00\x00\x01\x00\x02\x6e\x33\ +\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x63\xf9\ +\x00\x00\x04\x78\x00\x01\x00\x00\x00\x01\x00\x02\x21\x0f\ \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\x06\ +\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\x01\xf2\x00\x01\x00\x00\x00\x01\x00\x01\x76\xac\ " diff --git a/src/Mod/Arch/CMakeLists.txt b/src/Mod/Arch/CMakeLists.txt index a7522a413..fcfd728bb 100644 --- a/src/Mod/Arch/CMakeLists.txt +++ b/src/Mod/Arch/CMakeLists.txt @@ -20,6 +20,7 @@ SET(Arch_SRCS ArchWindow.py ArchAxis.py ArchVRM.py + ArchRoof.py ) SOURCE_GROUP("" FILES ${Arch_SRCS}) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 066ee12b8..52bf67165 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -61,7 +61,7 @@ class ArchWorkbench(Workbench): self.archtools = ["Arch_Wall","Arch_Structure","Arch_Cell", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Axis", - "Arch_SectionPlane","Arch_Add","Arch_Remove"] + "Arch_SectionPlane","Arch_Roof","Arch_Add","Arch_Remove"] self.drafttools = ["Draft_Line","Draft_Wire","Draft_Rectangle", "Draft_Polygon","Draft_Arc", "Draft_Circle","Draft_Dimension", diff --git a/src/Mod/Arch/Makefile.am b/src/Mod/Arch/Makefile.am index 61917f8f7..e30ec2a6a 100644 --- a/src/Mod/Arch/Makefile.am +++ b/src/Mod/Arch/Makefile.am @@ -27,7 +27,8 @@ data_DATA = \ ArchWindow.py \ ArchCommands.py \ ArchAxis.py \ - ArchVRM.py + ArchVRM.py \ + ArchRoof.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/WindowsInstaller/ModArch.wxi b/src/WindowsInstaller/ModArch.wxi index 094c7c617..f8bdd05c8 100644 --- a/src/WindowsInstaller/ModArch.wxi +++ b/src/WindowsInstaller/ModArch.wxi @@ -45,6 +45,7 @@ + From 03fa473ac24ceaf2946e5530fcb2d2857a2a5a68 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 May 2012 19:07:27 +0200 Subject: [PATCH 202/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.cpp | 14 ++++++++++++-- src/Mod/Mesh/App/Core/Segmentation.h | 8 +++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 450a7a067..2e86fdb17 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -35,6 +35,10 @@ void MeshSurfaceSegment::Initialize(unsigned long) { } +void MeshSurfaceSegment::AddFacet(const MeshFacet&) +{ +} + void MeshSurfaceSegment::AddSegment(const std::vector& segm) { if (segm.size() >= minFacets) { @@ -76,10 +80,15 @@ bool MeshDistancePlanarSegment::TestFacet (const MeshFacet& face) const return false; } - fitter->AddPoint(triangle.GetGravityPoint()); return true; } +void MeshDistancePlanarSegment::AddFacet(const MeshFacet& face) +{ + MeshGeomFacet triangle = kernel.GetFacet(face); + fitter->AddPoint(triangle.GetGravityPoint()); +} + // -------------------------------------------------------- bool MeshCurvaturePlanarSegment::TestFacet (const MeshFacet &rclFacet) const @@ -153,7 +162,7 @@ bool MeshCurvatureFreeformSegment::TestFacet (const MeshFacet &rclFacet) const // -------------------------------------------------------- -MeshSurfaceVisitor::MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices) +MeshSurfaceVisitor::MeshSurfaceVisitor (MeshSurfaceSegment& segm, std::vector &indices) : indices(indices), segm(segm) { } @@ -172,6 +181,7 @@ bool MeshSurfaceVisitor::Visit (const MeshFacet & face, const MeshFacet &, unsigned long ulFInd, unsigned long) { indices.push_back(ulFInd); + segm.AddFacet(face); return true; } diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 021961001..561385c1c 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -42,6 +42,7 @@ public: virtual ~MeshSurfaceSegment() {} virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; virtual void Initialize(unsigned long); + virtual void AddFacet(const MeshFacet& rclFacet); void AddSegment(const std::vector&); const std::vector& GetSegments() const { return segments; } @@ -68,8 +69,9 @@ class MeshExport MeshDistancePlanarSegment : public MeshDistanceSurfaceSegment public: MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); virtual ~MeshDistancePlanarSegment(); - bool TestFacet (const MeshFacet &rclFacet) const; + bool TestFacet (const MeshFacet& rclFacet) const; void Initialize(unsigned long); + void AddFacet(const MeshFacet& rclFacet); protected: Base::Vector3f basepoint; @@ -134,7 +136,7 @@ private: class MeshExport MeshSurfaceVisitor : public MeshFacetVisitor { public: - MeshSurfaceVisitor (const MeshSurfaceSegment& segm, std::vector &indices); + MeshSurfaceVisitor (MeshSurfaceSegment& segm, std::vector &indices); virtual ~MeshSurfaceVisitor (); bool AllowVisit (const MeshFacet& face, const MeshFacet&, unsigned long, unsigned long, unsigned short neighbourIndex); @@ -143,7 +145,7 @@ public: protected: std::vector &indices; - const MeshSurfaceSegment& segm; + MeshSurfaceSegment& segm; }; class MeshExport MeshSegmentAlgorithm From 6d8de2f1ab8e179010d92083a5cbaa6af5555bc2 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 15:59:53 -0300 Subject: [PATCH 203/517] Cleaning in the Arch module --- src/Mod/Arch/ArchSectionPlane.py | 9 ++++++--- src/Mod/Arch/ArchWindow.py | 18 ++++++++++-------- src/Mod/Arch/InitGui.py | 16 +++++++++++----- src/Mod/Arch/importIFC.py | 4 ++-- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index d4ae54c21..886cbb348 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -34,7 +34,7 @@ class _CommandSectionPlane: return {'Pixmap' : 'Arch_SectionPlane', 'Accel': "S, P", 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SectionPlane","Section Plane"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SectionPlane","Adds a section plane object to the document")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SectionPlane","Creates a section plane object, including the selected objects")} def Activated(self): sel = FreeCADGui.Selection.getSelection() @@ -47,6 +47,8 @@ class _CommandSectionPlane: for o in sel: if o.isDerivedFrom("Part::Feature"): g.append(o) + elif o.isDerivedFrom("App::DocumentObjectGroup"): + g.append(o) obj.Objects = g page = FreeCAD.ActiveDocument.addObject("Drawing::FeaturePage","Page") template = Draft.getParam("template") @@ -179,6 +181,7 @@ class _ArchDrawingView: if hasattr(obj,"Source"): if obj.Source: if obj.Source.Objects: + objs = Draft.getGroupContents(obj.Sourc.Objects) svg = '' # generating SVG @@ -188,7 +191,7 @@ class _ArchDrawingView: import ArchVRM render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) - render.addObjects(obj.Source.Objects) + render.addObjects(objs) render.cut(obj.Source.Shape) svg += render.getViewSVG(linewidth=linewidth) svg += render.getSectionSVG(linewidth=linewidth*2) @@ -197,7 +200,7 @@ class _ArchDrawingView: else: # render using the Drawing module shapes = [] - for o in obj.Source.Objects: + for o in objs: if o.isDerivedFrom("Part::Feature"): shapes.append(o.Shape) if shapes: diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 382d9e3f9..2cdf513c9 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -78,17 +78,19 @@ class _CommandWindow: return {'Pixmap' : 'Arch_Window', 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Window"), 'Accel': "W, N", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Creates a window object from scratch or from a selected object (wire, rectangle or sketch)")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Creates a window object from a selected object (wire, rectangle or sketch)")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Window") - if sel: - for obj in sel: - makeWindow(obj) - else: - rect = Draft.makeRectangle(1,1) - makeWindow(rect) + FreeCAD.ActiveDocument.openTransaction("Create Window") + for obj in sel: + makeWindow(obj) FreeCAD.ActiveDocument.commitTransaction() class _Window(ArchComponent.Component): diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 52bf67165..1de87ed47 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -58,10 +58,10 @@ class ArchWorkbench(Workbench): def Initialize(self): import DraftTools,DraftGui,Arch_rc,Arch - self.archtools = ["Arch_Wall","Arch_Structure","Arch_Cell", + self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", - "Arch_Window","Arch_Axis", - "Arch_SectionPlane","Arch_Roof","Arch_Add","Arch_Remove"] + "Arch_Window","Arch_Roof","Arch_Axis", + "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.drafttools = ["Draft_Line","Draft_Wire","Draft_Rectangle", "Draft_Polygon","Draft_Arc", "Draft_Circle","Draft_Dimension", @@ -100,6 +100,12 @@ class ArchWorkbench(Workbench): FreeCADGui.addWorkbench(ArchWorkbench) FreeCAD.addImportType("Industry Foundation Classes (*.ifc)","importIFC") FreeCAD.addExportType("Wavefront OBJ - Arch module (*.obj)","importOBJ") -FreeCAD.addImportType("Collada (*.dae)","importDAE") -FreeCAD.addExportType("Collada (*.dae)","importDAE") +# check for pycollada +try: + import collada +except: + FreeCAD.Console.PrintError("pycollada not found, no collada support.\n") +else: + FreeCAD.addImportType("Collada (*.dae)","importDAE") + FreeCAD.addExportType("Collada (*.dae)","importDAE") diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index f4a8f8392..7a0cf8ae0 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -108,7 +108,7 @@ def getIfcOpenShell(): return True def read(filename): - "Parses an IFC file with IfcOpenShell" + "Parses an IFC file" # parsing the IFC file t1 = time.time() @@ -186,7 +186,7 @@ def read(filename): IfcImport.CleanUp() else: - # use the internal python parser + # use only the internal python parser # getting walls for w in ifc.getEnt("IfcWallStandardCase"): From 8b191077923aea4e5afc1025967d282c2f6b2c83 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 16:43:48 -0300 Subject: [PATCH 204/517] Fixed 0000708 - Draft DXF import --- src/Mod/Draft/importDXF.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index a03ec28aa..97e01db7f 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -1232,7 +1232,9 @@ def getWire(wire,nospline=False): points = [] for edge in edges: v1 = edge.Vertexes[0].Point - if (isinstance(edge.Curve,Part.Circle)): + if len(edge.Vertexes) < 2: + points.append((v1.x,v1.y,v1.z,None,None,0.0)) + elif (isinstance(edge.Curve,Part.Circle)): mp = fcgeo.findMidpoint(edge) v2 = edge.Vertexes[-1].Point c = edge.Curve.Center @@ -1251,14 +1253,12 @@ def getWire(wire,nospline=False): bul = -bul points.append((v1.x,v1.y,v1.z,None,None,bul)) elif (isinstance(edge.Curve,Part.BSplineCurve)) and (not nospline): - bul = 0.0 spline = getSplineSegs(edge) spline.pop() for p in spline: - points.append((p.x,p.y,p.z,None,None,bul)) + points.append((p.x,p.y,p.z,None,None,0.0)) else: - bul = 0.0 - points.append((v1.x,v1.y,v1.z,None,None,bul)) + points.append((v1.x,v1.y,v1.z,None,None,0.0)) if not fcgeo.isReallyClosed(wire): v = edges[-1].Vertexes[-1].Point points.append(fcvec.tup(v)) From d56e08e47fadd9006994988c69bcc7e1d05c816a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 17:43:57 -0300 Subject: [PATCH 205/517] Refining of Arch Roof tool --- src/Mod/Arch/ArchComponent.py | 2 -- src/Mod/Arch/ArchRoof.py | 21 ++++++++++++++++++--- src/Mod/Arch/ArchStructure.py | 2 ++ src/Mod/Arch/ArchWall.py | 2 ++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index b6065fa04..c9fa5a347 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -260,8 +260,6 @@ class Component: "Other shapes that are appended to this wall") obj.addProperty("App::PropertyLinkList","Subtractions","Base", "Other shapes that are subtracted from this wall") - obj.addProperty("App::PropertyVector","Normal","Base", - "The normal extrusion direction of this wall (keep (0,0,0) for automatic normal)") obj.Proxy = self self.Type = "Component" self.Subvolume = None diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 62850f243..37d06b58e 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -61,13 +61,30 @@ class _CommandRoof: sel = FreeCADGui.Selection.getSelectionEx() if sel: sel = sel[0] + obj = sel.Object if sel.HasSubObjects: if "Face" in sel.SubElementNames[0]: - obj = sel.Object idx = int(sel.SubElementNames[0][4:]) FreeCAD.ActiveDocument.openTransaction("Create Roof") makeRoof(obj,idx) FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + elif obj.isDerivedFrom("Part::Feature"): + if len(obj.Shape.Faces) == 1: + FreeCAD.ActiveDocument.openTransaction("Create Roof") + makeRoof(obj,1) + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + elif obj.isDerivedFrom("Part::Feature"): + if len(obj.Shape.Faces) == 1: + FreeCAD.ActiveDocument.openTransaction("Create Roof") + makeRoof(obj,1) + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + else: + FreeCAD.Console.PrintMessage("Unable to create a roof") + else: + FreeCAD.Console.PrintMessage("No object selected") class _Roof(ArchComponent.Component): "The Roof object" @@ -77,8 +94,6 @@ class _Roof(ArchComponent.Component): "The angle of this roof") obj.addProperty("App::PropertyInteger","Face","Base", "The face number of the base object used to build this roof") - obj.addProperty("App::PropertyLink","Base","Base", - "The base object this roof is built on") self.Type = "Structure" def execute(self,obj): diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 63d7b668c..cd87115eb 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -86,6 +86,8 @@ class _Structure(ArchComponent.Component): "The height or extrusion depth of this element. Keep 0 for automatic") obj.addProperty("App::PropertyLinkList","Axes","Base", "Axes systems this structure is built on") + obj.addProperty("App::PropertyVector","Normal","Base", + "The normal extrusion direction of this object (keep (0,0,0) for automatic normal)") self.Type = "Structure" def execute(self,obj): diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 108edabfc..36c33e7a8 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -251,6 +251,8 @@ class _Wall(ArchComponent.Component): "The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid") obj.addProperty("App::PropertyEnumeration","Align","Base", "The alignment of this wall on its base object, if applicable") + obj.addProperty("App::PropertyVector","Normal","Base", + "The normal extrusion direction of this object (keep (0,0,0) for automatic normal)") obj.Align = ['Left','Right','Center'] self.Type = "Wall" obj.Width = 0.1 From bd43641457770d651527dc8e11b99ec090381d85 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 18 May 2012 19:01:01 -0300 Subject: [PATCH 206/517] Bugfixes in Arch --- src/Mod/Arch/ArchSectionPlane.py | 2 +- src/Mod/Arch/ArchVRM.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 886cbb348..d1c1ada50 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -181,7 +181,7 @@ class _ArchDrawingView: if hasattr(obj,"Source"): if obj.Source: if obj.Source.Objects: - objs = Draft.getGroupContents(obj.Sourc.Objects) + objs = Draft.getGroupContents(obj.Source.Objects) svg = '' # generating SVG diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index c89776e62..f7e5988ab 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -177,7 +177,8 @@ class Renderer: v = self.wp.getLocalCoords(v) verts.append(v) verts.append(verts[0]) - wires.append(Part.makePolygon(verts)) + if len(verts) > 2: + wires.append(Part.makePolygon(verts)) try: sh = ArchCommands.makeFace(wires) except: From 75a9c444ede4202980eb2acfc109b5198abfc18b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 19 May 2012 18:07:09 -0300 Subject: [PATCH 207/517] Allowed to drag&drop items on python groups too in tree --- src/Gui/Tree.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index 03ca7cb2f..2c5f0ea15 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -440,20 +440,39 @@ void TreeWidget::dropEvent(QDropEvent *event) ::getGroupOfObject(obj); if (par) { // allow an object to be in one group only - QString cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").removeObject(" + QString cmd; + if (par->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + // if this is a python group, call the method of its Proxy + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.removeObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromAscii(doc->getName())) .arg(QString::fromAscii(par->getNameInDocument())) .arg(QString::fromAscii(obj->getNameInDocument())); + } else { + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").removeObject(" + "App.getDocument(\"%1\").getObject(\"%3\"))") + .arg(QString::fromAscii(doc->getName())) + .arg(QString::fromAscii(par->getNameInDocument())) + .arg(QString::fromAscii(obj->getNameInDocument())); + } Gui::Application::Instance->runPythonCode(cmd.toUtf8()); } // build Python command for execution - QString cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").addObject(" + QString cmd; + if (grp->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.addObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromAscii(doc->getName())) .arg(QString::fromAscii(grp->getNameInDocument())) .arg(QString::fromAscii(obj->getNameInDocument())); + } else { + cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").addObject(" + "App.getDocument(\"%1\").getObject(\"%3\"))") + .arg(QString::fromAscii(doc->getName())) + .arg(QString::fromAscii(grp->getNameInDocument())) + .arg(QString::fromAscii(obj->getNameInDocument())); + } Gui::Application::Instance->runPythonCode(cmd.toUtf8()); } gui->commitCommand(); From dcc7eea7149f385b9f801ae553ebbfbf980a652d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 19 May 2012 18:18:02 -0300 Subject: [PATCH 208/517] Made Arch groups able to receive drops from the tree --- src/Mod/Arch/ArchBuilding.py | 19 +++++++++++++++++-- src/Mod/Arch/ArchFloor.py | 16 +++++++++++++++- src/Mod/Arch/ArchSite.py | 19 +++++++++++++++++-- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchBuilding.py b/src/Mod/Arch/ArchBuilding.py index 6a2cb2c33..f8ed4e8ca 100644 --- a/src/Mod/Arch/ArchBuilding.py +++ b/src/Mod/Arch/ArchBuilding.py @@ -68,12 +68,27 @@ class _Building: def __init__(self,obj): self.Type = "Building" obj.Proxy = self - + self.Object = obj + def execute(self,obj): - pass + self.Object = obj def onChanged(self,obj,prop): pass + + def addObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if not child in g: + g.append(child) + self.Object.Group = g + + def removeObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if child in g: + g.remove(child) + self.Object.Group = g class _ViewProviderBuilding: "A View Provider for the Building object" diff --git a/src/Mod/Arch/ArchFloor.py b/src/Mod/Arch/ArchFloor.py index f5b9d435e..606395961 100644 --- a/src/Mod/Arch/ArchFloor.py +++ b/src/Mod/Arch/ArchFloor.py @@ -71,13 +71,27 @@ class _Floor: "The height of this floor") self.Type = "Floor" obj.Proxy = self + self.Object = obj def execute(self,obj): - pass + self.Object = obj def onChanged(self,obj,prop): pass + def addObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if not child in g: + g.append(child) + self.Object.Group = g + + def removeObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if child in g: + g.remove(child) + self.Object.Group = g class _ViewProviderFloor: "A View Provider for the Cell object" diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index 5da538e5a..300fd09ef 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -68,13 +68,28 @@ class _Site: def __init__(self,obj): self.Type = "Site" obj.Proxy = self + self.Object = obj def execute(self,obj): - pass - + self.Object = obj + def onChanged(self,obj,prop): pass + def addObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if not child in g: + g.append(child) + self.Object.Group = g + + def removeObject(self,child): + if hasattr(self,"Object"): + g = self.Object.Group + if child in g: + g.remove(child) + self.Object.Group = g + class _ViewProviderSite: "A View Provider for the Site object" def __init__(self,vobj): From cd1910a7056636959c625fc956f189e8c35ec57e Mon Sep 17 00:00:00 2001 From: msocorcim Date: Sun, 20 May 2012 23:00:23 -0400 Subject: [PATCH 209/517] Add new Mod/Mesh files to Makefile.am --- src/Mod/Mesh/Gui/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Mod/Mesh/Gui/Makefile.am b/src/Mod/Mesh/Gui/Makefile.am index 46158d1e1..dd4405cd7 100644 --- a/src/Mod/Mesh/Gui/Makefile.am +++ b/src/Mod/Mesh/Gui/Makefile.am @@ -35,6 +35,7 @@ libMeshGui_la_SOURCES=\ PropertyEditorMesh.cpp \ RemoveComponents.cpp \ RemoveComponents.h \ + Segmentation.cpp \ SoFCIndexedFaceSet.cpp \ SoFCMeshObject.cpp \ ViewProvider.cpp \ @@ -48,6 +49,7 @@ libMeshGui_la_SOURCES=\ include_HEADERS=\ PropertyEditorMesh.h \ + Segmentation.h \ SoFCIndexedFaceSet.h \ SoFCMeshObject.h \ ViewProvider.h \ From a94897b92e98e325220e75ffbda9238ed0f84f55 Mon Sep 17 00:00:00 2001 From: msocorcim Date: Sun, 20 May 2012 23:01:07 -0400 Subject: [PATCH 210/517] Replace Gui text View->Display mode with View->Document window --- src/Gui/CommandView.cpp | 2 +- src/Gui/DlgDisplayProperties.ui | 2 +- src/Gui/Language/FreeCAD.ts | 2 +- src/Gui/Language/FreeCAD_af.ts | 4 ++-- src/Gui/Language/FreeCAD_de.ts | 4 ++-- src/Gui/Language/FreeCAD_es.ts | 4 ++-- src/Gui/Language/FreeCAD_fi.ts | 4 ++-- src/Gui/Language/FreeCAD_fr.ts | 4 ++-- src/Gui/Language/FreeCAD_hr.ts | 4 ++-- src/Gui/Language/FreeCAD_hu.ts | 4 ++-- src/Gui/Language/FreeCAD_it.ts | 4 ++-- src/Gui/Language/FreeCAD_ja.ts | 4 ++-- src/Gui/Language/FreeCAD_nl.ts | 4 ++-- src/Gui/Language/FreeCAD_no.ts | 4 ++-- src/Gui/Language/FreeCAD_pl.ts | 4 ++-- src/Gui/Language/FreeCAD_pt.ts | 4 ++-- src/Gui/Language/FreeCAD_ru.ts | 4 ++-- src/Gui/Language/FreeCAD_se.ts | 4 ++-- src/Gui/Language/FreeCAD_uk.ts | 4 ++-- src/Gui/Language/FreeCAD_zh.ts | 4 ++-- src/Gui/TaskView/TaskAppearance.ui | 2 +- 21 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 1de74b6c3..712131d68 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -1172,7 +1172,7 @@ StdViewDockUndockFullscreen::StdViewDockUndockFullscreen() : Command("Std_ViewDockUndockFullscreen") { sGroup = QT_TR_NOOP("Standard-View"); - sMenuText = QT_TR_NOOP("Display mode"); + sMenuText = QT_TR_NOOP("Document window"); sToolTipText= QT_TR_NOOP("Display the active view either in fullscreen, in undocked or docked mode"); sWhatsThis = "Std_ViewDockUndockFullscreen"; sStatusTip = QT_TR_NOOP("Display the active view either in fullscreen, in undocked or docked mode"); diff --git a/src/Gui/DlgDisplayProperties.ui b/src/Gui/DlgDisplayProperties.ui index 5143bf2a8..58f4b6235 100644 --- a/src/Gui/DlgDisplayProperties.ui +++ b/src/Gui/DlgDisplayProperties.ui @@ -34,7 +34,7 @@ - Display mode: + Document window: diff --git a/src/Gui/Language/FreeCAD.ts b/src/Gui/Language/FreeCAD.ts index 3b452a860..024b5a7f1 100644 --- a/src/Gui/Language/FreeCAD.ts +++ b/src/Gui/Language/FreeCAD.ts @@ -5302,7 +5302,7 @@ You either have to finish or cancel the editing in the task panel. - Display mode + Document window diff --git a/src/Gui/Language/FreeCAD_af.ts b/src/Gui/Language/FreeCAD_af.ts index 052ea4d8c..4ba0e26ca 100644 --- a/src/Gui/Language/FreeCAD_af.ts +++ b/src/Gui/Language/FreeCAD_af.ts @@ -5317,8 +5317,8 @@ You either have to finish or cancel the editing in the task panel. Standaardaansig - Display mode - Vertoningsmodus + Document window + Dokument venster Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_de.ts b/src/Gui/Language/FreeCAD_de.ts index be807a1b7..79e5131c2 100644 --- a/src/Gui/Language/FreeCAD_de.ts +++ b/src/Gui/Language/FreeCAD_de.ts @@ -5325,8 +5325,8 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Standardansicht - Display mode - Anzeige-Modus + Document window + Dokumentfenster Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_es.ts b/src/Gui/Language/FreeCAD_es.ts index 173822aa0..089b96e95 100644 --- a/src/Gui/Language/FreeCAD_es.ts +++ b/src/Gui/Language/FreeCAD_es.ts @@ -5323,8 +5323,8 @@ Tienes que finzalizar o cancelar la edición en el panel de tareas.Vista estándar - Display mode - Modo de visualización + Document window + Ventana de documento Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_fi.ts b/src/Gui/Language/FreeCAD_fi.ts index dab907d81..ec9cde9a0 100644 --- a/src/Gui/Language/FreeCAD_fi.ts +++ b/src/Gui/Language/FreeCAD_fi.ts @@ -5314,8 +5314,8 @@ You either have to finish or cancel the editing in the task panel. Standardi-Näkymä - Display mode - Näyttötila + Document window + Asiakirjan ikkuna Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_fr.ts b/src/Gui/Language/FreeCAD_fr.ts index c65a10cdf..f665da6bd 100644 --- a/src/Gui/Language/FreeCAD_fr.ts +++ b/src/Gui/Language/FreeCAD_fr.ts @@ -5319,8 +5319,8 @@ You either have to finish or cancel the editing in the task panel. Vue standard - Display mode - Mode d'affichage + Document window + Fenêtre de document Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_hr.ts b/src/Gui/Language/FreeCAD_hr.ts index 790f20982..11e5c702b 100644 --- a/src/Gui/Language/FreeCAD_hr.ts +++ b/src/Gui/Language/FreeCAD_hr.ts @@ -5311,8 +5311,8 @@ You either have to finish or cancel the editing in the task panel. Standardni pogled - Display mode - Način prikaza + Document window + Dokument prozor Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_hu.ts b/src/Gui/Language/FreeCAD_hu.ts index cf6433c3a..74d0db3b5 100644 --- a/src/Gui/Language/FreeCAD_hu.ts +++ b/src/Gui/Language/FreeCAD_hu.ts @@ -5318,8 +5318,8 @@ You either have to finish or cancel the editing in the task panel. Standard-nézet - Display mode - Megjelenítési mód + Document window + Dokumentum ablak Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_it.ts b/src/Gui/Language/FreeCAD_it.ts index 64b5bd7c3..cb266b1d0 100644 --- a/src/Gui/Language/FreeCAD_it.ts +++ b/src/Gui/Language/FreeCAD_it.ts @@ -5325,8 +5325,8 @@ You either have to finish or cancel the editing in the task panel. Vista standard - Display mode - Modalità di visualizzazione + Document window + Finestra del documento Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_ja.ts b/src/Gui/Language/FreeCAD_ja.ts index 5773577fd..0406284a6 100644 --- a/src/Gui/Language/FreeCAD_ja.ts +++ b/src/Gui/Language/FreeCAD_ja.ts @@ -5319,8 +5319,8 @@ You either have to finish or cancel the editing in the task panel. 標準ビュー - Display mode - 表示モード + Document window + ドキュメントウィンドウ Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_nl.ts b/src/Gui/Language/FreeCAD_nl.ts index 0a57b99f5..ea7ae833c 100644 --- a/src/Gui/Language/FreeCAD_nl.ts +++ b/src/Gui/Language/FreeCAD_nl.ts @@ -5314,8 +5314,8 @@ You either have to finish or cancel the editing in the task panel. Standaard-aanzicht - Display mode - Weergavemodus + Document window + Documentvenster Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_no.ts b/src/Gui/Language/FreeCAD_no.ts index 948c209da..56087e8fa 100644 --- a/src/Gui/Language/FreeCAD_no.ts +++ b/src/Gui/Language/FreeCAD_no.ts @@ -5315,8 +5315,8 @@ You either have to finish or cancel the editing in the task panel. Standardvisning - Display mode - Visningsmodus + Document window + Dokument-vinduet Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_pl.ts b/src/Gui/Language/FreeCAD_pl.ts index 064d5e00e..0a428556b 100644 --- a/src/Gui/Language/FreeCAD_pl.ts +++ b/src/Gui/Language/FreeCAD_pl.ts @@ -5305,8 +5305,8 @@ You either have to finish or cancel the editing in the task panel. Normalny widok - Display mode - Tryb wyświetlania + Document window + Okno dokumentu Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_pt.ts b/src/Gui/Language/FreeCAD_pt.ts index 2ed9d6bf6..fd0cde922 100644 --- a/src/Gui/Language/FreeCAD_pt.ts +++ b/src/Gui/Language/FreeCAD_pt.ts @@ -5307,8 +5307,8 @@ You either have to finish or cancel the editing in the task panel. Vista padrão - Display mode - Modo de exibição + Document window + Janela do documento Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_ru.ts b/src/Gui/Language/FreeCAD_ru.ts index 40667e37a..b1e39e830 100644 --- a/src/Gui/Language/FreeCAD_ru.ts +++ b/src/Gui/Language/FreeCAD_ru.ts @@ -5310,8 +5310,8 @@ You either have to finish or cancel the editing in the task panel. Стандартный вид - Display mode - Режим отображения + Document window + окно документа Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_se.ts b/src/Gui/Language/FreeCAD_se.ts index 1f51d8242..9b777ffac 100644 --- a/src/Gui/Language/FreeCAD_se.ts +++ b/src/Gui/Language/FreeCAD_se.ts @@ -5324,8 +5324,8 @@ You either have to finish or cancel the editing in the task panel. Standardvy - Display mode - Visningsläge + Document window + Dokumentfönstret Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_uk.ts b/src/Gui/Language/FreeCAD_uk.ts index b9dbe9099..5e0b27cb6 100644 --- a/src/Gui/Language/FreeCAD_uk.ts +++ b/src/Gui/Language/FreeCAD_uk.ts @@ -5325,8 +5325,8 @@ You either have to finish or cancel the editing in the task panel. Стандартні вигляди - Display mode - Режим показу + Document window + вікно документа Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/Language/FreeCAD_zh.ts b/src/Gui/Language/FreeCAD_zh.ts index 18e102a1e..a63f7f181 100644 --- a/src/Gui/Language/FreeCAD_zh.ts +++ b/src/Gui/Language/FreeCAD_zh.ts @@ -5313,8 +5313,8 @@ You either have to finish or cancel the editing in the task panel. 标准视图 - Display mode - 显示模式 + Document window + 文档窗口 Display the active view either in fullscreen, in undocked or docked mode diff --git a/src/Gui/TaskView/TaskAppearance.ui b/src/Gui/TaskView/TaskAppearance.ui index 795549469..e775af457 100644 --- a/src/Gui/TaskView/TaskAppearance.ui +++ b/src/Gui/TaskView/TaskAppearance.ui @@ -33,7 +33,7 @@ - Display mode: + Document window: From a87f55812575975a9328c0abc29381b96c11cf3f Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 14:08:57 +0200 Subject: [PATCH 211/517] Workaround for linker error with MSVC --- src/Gui/Tree.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index 2c5f0ea15..ba3672d8c 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -431,6 +431,7 @@ void TreeWidget::dropEvent(QDropEvent *event) // Open command App::Document* doc = grp->getDocument(); Gui::Document* gui = Gui::Application::Instance->getDocument(doc); + Base::Type DOGPython = Base::Type::fromName("App::DocumentObjectGroupPython"); gui->openCommand("Move object"); for (QList::Iterator it = items.begin(); it != items.end(); ++it) { // get document object @@ -441,7 +442,7 @@ void TreeWidget::dropEvent(QDropEvent *event) if (par) { // allow an object to be in one group only QString cmd; - if (par->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + if (par->getTypeId().isDerivedFrom(DOGPython)) { // if this is a python group, call the method of its Proxy cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.removeObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") @@ -460,7 +461,7 @@ void TreeWidget::dropEvent(QDropEvent *event) // build Python command for execution QString cmd; - if (grp->getTypeId().isDerivedFrom(App::DocumentObjectGroupPython::getClassTypeId())) { + if (grp->getTypeId().isDerivedFrom(DOGPython)) { cmd = QString::fromAscii("App.getDocument(\"%1\").getObject(\"%2\").Proxy.addObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromAscii(doc->getName())) From d6b6f6b37956a6f9a4f98745c2715ea00c5aba0c Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 15:02:51 +0200 Subject: [PATCH 212/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.cpp | 26 +++++--------- src/Mod/Mesh/App/Core/Segmentation.h | 28 ++++++++++----- src/Mod/Mesh/App/Mesh.cpp | 50 +++++++------------------- src/Mod/Mesh/App/MeshPy.xml | 6 ++-- src/Mod/Mesh/App/MeshPyImp.cpp | 7 ++-- src/Mod/Mesh/Gui/Segmentation.cpp | 2 +- src/Mod/Mesh/Gui/Segmentation.ui | 23 ++++++++++-- 7 files changed, 67 insertions(+), 75 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 2e86fdb17..01d99fb11 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -108,22 +108,12 @@ bool MeshCurvatureCylindricalSegment::TestFacet (const MeshFacet &rclFacet) cons { for (int i=0; i<3; i++) { const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; - if (ci.fMaxCurvature > ci.fMinCurvature) { - // convexe - if (fabs(ci.fMinCurvature) > tolerance) - return false; - float diff = ci.fMaxCurvature - curvature; - if (fabs(diff) > tolerance) - return false; - } - else { - // concave - if (fabs(ci.fMaxCurvature) > tolerance) - return false; - float diff = ci.fMinCurvature + curvature; - if (fabs(diff) > tolerance) - return false; - } + float fMax = std::max(fabs(ci.fMaxCurvature), fabs(ci.fMinCurvature)); + float fMin = std::min(fabs(ci.fMaxCurvature), fabs(ci.fMinCurvature)); + if (fMin > toleranceMin) + return false; + if (fabs(fMax - curvature) > toleranceMax) + return false; } return true; @@ -151,9 +141,9 @@ bool MeshCurvatureFreeformSegment::TestFacet (const MeshFacet &rclFacet) const { for (int i=0; i<3; i++) { const CurvatureInfo& ci = info[rclFacet._aulPoints[i]]; - if (fabs(ci.fMinCurvature-c2) > tolerance) + if (fabs(ci.fMinCurvature-c2) > toleranceMin) return false; - if (fabs(ci.fMaxCurvature-c1) > tolerance) + if (fabs(ci.fMaxCurvature-c1) > toleranceMax) return false; } diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 561385c1c..c894147ad 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -84,53 +84,63 @@ protected: class MeshExport MeshCurvatureSurfaceSegment : public MeshSurfaceSegment { public: - MeshCurvatureSurfaceSegment(const std::vector& ci, unsigned long minFacets, float tol) - : MeshSurfaceSegment(minFacets), info(ci), tolerance(tol) {} + MeshCurvatureSurfaceSegment(const std::vector& ci, unsigned long minFacets) + : MeshSurfaceSegment(minFacets), info(ci) {} protected: const std::vector& info; - float tolerance; }; class MeshExport MeshCurvaturePlanarSegment : public MeshCurvatureSurfaceSegment { public: MeshCurvaturePlanarSegment(const std::vector& ci, unsigned long minFacets, float tol) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol) {} + : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; + +private: + float tolerance; }; class MeshExport MeshCurvatureCylindricalSegment : public MeshCurvatureSurfaceSegment { public: - MeshCurvatureCylindricalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + MeshCurvatureCylindricalSegment(const std::vector& ci, unsigned long minFacets, + float tolMin, float tolMax, float radius) + : MeshCurvatureSurfaceSegment(ci, minFacets), toleranceMin(tolMin), toleranceMax(tolMax) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; private: float curvature; + float toleranceMin; + float toleranceMax; }; class MeshExport MeshCurvatureSphericalSegment : public MeshCurvatureSurfaceSegment { public: MeshCurvatureSphericalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol) { curvature = 1/radius;} + : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; private: float curvature; + float tolerance; }; class MeshExport MeshCurvatureFreeformSegment : public MeshCurvatureSurfaceSegment { public: - MeshCurvatureFreeformSegment(const std::vector& ci, unsigned long minFacets, float tol, float c1, float c2) - : MeshCurvatureSurfaceSegment(ci, minFacets, tol), c1(c1), c2(c2) {} + MeshCurvatureFreeformSegment(const std::vector& ci, unsigned long minFacets, + float tolMin, float tolMax, float c1, float c2) + : MeshCurvatureSurfaceSegment(ci, minFacets), c1(c1), c2(c2), + toleranceMin(tolMin), toleranceMax(tolMax) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; private: float c1, c2; + float toleranceMin; + float toleranceMax; }; class MeshExport MeshSurfaceVisitor : public MeshFacetVisitor diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index 89f85856a..dec5da73b 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -44,6 +44,7 @@ #include "Core/TopoAlgorithm.h" #include "Core/Evaluation.h" #include "Core/Degeneration.h" +#include "Core/Segmentation.h" #include "Core/SetOperations.h" #include "Core/Visitor.h" @@ -1426,48 +1427,21 @@ std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, cons float dev, unsigned long minFacets) const { std::vector segm; - unsigned long startFacet; if (this->_kernel.CountFacets() == 0) return segm; - // reset VISIT flags - MeshCore::MeshAlgorithm cAlgo(this->_kernel); - if (aSegment.isEmpty()) { - cAlgo.ResetFacetFlag(MeshCore::MeshFacet::VISIT); + MeshCore::MeshSegmentAlgorithm finder(this->_kernel); + MeshCore::MeshDistanceSurfaceSegment* surf; + surf = new MeshCore::MeshDistancePlanarSegment(this->_kernel, minFacets, dev); + std::vector surfaces; + surfaces.push_back(surf); + finder.FindSegments(surfaces); + + const std::vector& data = surf->GetSegments(); + for (std::vector::const_iterator it = data.begin(); it != data.end(); ++it) { + segm.push_back(Segment(const_cast(this), *it, false)); } - else { - cAlgo.SetFacetFlag(MeshCore::MeshFacet::VISIT); - cAlgo.ResetFacetsFlag(aSegment.getIndices(), MeshCore::MeshFacet::VISIT); - } - - const MeshCore::MeshFacetArray& rFAry = this->_kernel.GetFacets(); - MeshCore::MeshFacetArray::_TConstIterator iTri = rFAry.begin(); - MeshCore::MeshFacetArray::_TConstIterator iBeg = rFAry.begin(); - MeshCore::MeshFacetArray::_TConstIterator iEnd = rFAry.end(); - - // start from the first not visited facet - cAlgo.CountFacetFlag(MeshCore::MeshFacet::VISIT); - iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), - MeshCore::MeshFacet::VISIT)); - startFacet = iTri - iBeg; - - while (startFacet != ULONG_MAX) { - // collect all facets of the same geometry - std::vector indices; - indices.push_back(startFacet); - MeshCore::MeshPlaneVisitor pv(this->_kernel, startFacet, dev, indices); - this->_kernel.VisitNeighbourFacets(pv, startFacet); - - iTri = std::find_if(iTri, iEnd, std::bind2nd(MeshCore::MeshIsNotFlag(), - MeshCore::MeshFacet::VISIT)); - if (iTri < iEnd) - startFacet = iTri - iBeg; - else - startFacet = ULONG_MAX; - if (indices.size() > minFacets) - segm.push_back(Segment(const_cast(this), indices, false)); - } - + delete surf; return segm; } diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index f29a59730..116979807 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -382,10 +382,10 @@ plane if none of its neighours is coplanar. getSegmentsByCurvature(list) -> list The argument list gives a list if tuples where it defines the preferred maximum curvature, -the preferred minumum curvature, the tolerance and the number of minimum faces for the segment. +the preferred minumum curvature, the tolerances and the number of minimum faces for the segment. Example: -c=(1.0, 0.0, 0.1, 500) # search for a cylinder with radius 1.0 -p=(0.0, 0.0, 0.1, 500) # search for a plane +c=(1.0, 0.0, 0.1, 0.1, 500) # search for a cylinder with radius 1.0 +p=(0.0, 0.0, 0.1, 0.1, 500) # search for a plane mesh.getSegmentsByCurvature([c,p]) diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index dd1f0e3e1..a2a1e6302 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -1399,9 +1399,10 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) Py::Tuple t(*it); float c1 = (float)Py::Float(t[0]); float c2 = (float)Py::Float(t[1]); - float tol = (float)Py::Float(t[2]); - int num = (int)Py::Int(t[3]); - segm.push_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol, c1, c2)); + float tol1 = (float)Py::Float(t[2]); + float tol2 = (float)Py::Float(t[3]); + int num = (int)Py::Int(t[4]); + segm.push_back(new MeshCore::MeshCurvatureFreeformSegment(meshCurv.GetCurvature(), num, tol1, tol2, c1, c2)); } finder.FindSegments(segm); diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp index 962d65f2e..223479c56 100644 --- a/src/Mod/Mesh/Gui/Segmentation.cpp +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -76,7 +76,7 @@ void Segmentation::accept() std::vector segm; if (ui->groupBoxCyl->isChecked()) { segm.push_back(new MeshCore::MeshCurvatureCylindricalSegment - (meshCurv.GetCurvature(), ui->numCyl->value(), ui->tolCyl->value(), ui->radCyl->value())); + (meshCurv.GetCurvature(), ui->numCyl->value(), ui->tol1Cyl->value(), ui->tol2Cyl->value(), ui->radCyl->value())); } if (ui->groupBoxSph->isChecked()) { segm.push_back(new MeshCore::MeshCurvatureSphericalSegment diff --git a/src/Mod/Mesh/Gui/Segmentation.ui b/src/Mod/Mesh/Gui/Segmentation.ui index 129c89873..b6ce13bd8 100644 --- a/src/Mod/Mesh/Gui/Segmentation.ui +++ b/src/Mod/Mesh/Gui/Segmentation.ui @@ -106,12 +106,12 @@ - Tolerance + Tolerance (Flat) - + 0.100000000000000 @@ -121,13 +121,30 @@ + + + Tolerance (Curved) + + + + + + + 0.100000000000000 + + + 0.100000000000000 + + + + Minimum number of faces - + 100000 From 87f1e93feaf208561e1bd190d7661e9791f1b9bd Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 15:53:46 +0200 Subject: [PATCH 213/517] Mesh segmentation --- src/Mod/Mesh/App/Core/Segmentation.h | 6 ++++++ src/Mod/Mesh/Gui/Segmentation.cpp | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index c894147ad..1b29f4bff 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -41,6 +41,7 @@ public: : minFacets(minFacets) {} virtual ~MeshSurfaceSegment() {} virtual bool TestFacet (const MeshFacet &rclFacet) const = 0; + virtual const char* GetType() const = 0; virtual void Initialize(unsigned long); virtual void AddFacet(const MeshFacet& rclFacet); void AddSegment(const std::vector&); @@ -70,6 +71,7 @@ public: MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol); virtual ~MeshDistancePlanarSegment(); bool TestFacet (const MeshFacet& rclFacet) const; + const char* GetType() const { return "Plane"; } void Initialize(unsigned long); void AddFacet(const MeshFacet& rclFacet); @@ -97,6 +99,7 @@ public: MeshCurvaturePlanarSegment(const std::vector& ci, unsigned long minFacets, float tol) : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Plane"; } private: float tolerance; @@ -109,6 +112,7 @@ public: float tolMin, float tolMax, float radius) : MeshCurvatureSurfaceSegment(ci, minFacets), toleranceMin(tolMin), toleranceMax(tolMax) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Cylinder"; } private: float curvature; @@ -122,6 +126,7 @@ public: MeshCurvatureSphericalSegment(const std::vector& ci, unsigned long minFacets, float tol, float radius) : MeshCurvatureSurfaceSegment(ci, minFacets), tolerance(tol) { curvature = 1/radius;} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Sphere"; } private: float curvature; @@ -136,6 +141,7 @@ public: : MeshCurvatureSurfaceSegment(ci, minFacets), c1(c1), c2(c2), toleranceMin(tolMin), toleranceMax(tolMax) {} virtual bool TestFacet (const MeshFacet &rclFacet) const; + virtual const char* GetType() const { return "Freeform"; } private: float c1, c2; diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp index 223479c56..de2b81d48 100644 --- a/src/Mod/Mesh/Gui/Segmentation.cpp +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -24,12 +24,14 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include #endif #include "Segmentation.h" #include "ui_Segmentation.h" #include #include +#include #include #include @@ -89,18 +91,32 @@ void Segmentation::accept() finder.FindSegments(segm); App::Document* document = App::GetApplication().getActiveDocument(); + document->openTransaction("Segmentation"); + + std::string internalname = "Segments_"; + internalname += myMesh->getNameInDocument(); + App::DocumentObjectGroup* group = static_cast(document->addObject + ("App::DocumentObjectGroup", internalname.c_str())); + std::string labelname = "Segments "; + labelname += myMesh->Label.getValue(); + group->Label.setValue(labelname); for (std::vector::iterator it = segm.begin(); it != segm.end(); ++it) { const std::vector& data = (*it)->GetSegments(); for (std::vector::const_iterator jt = data.begin(); jt != data.end(); ++jt) { Mesh::MeshObject* segment = mesh->meshFromSegment(*jt); - Mesh::Feature* feaSegm = static_cast(document->addObject("Mesh::Feature", "Segment")); + Mesh::Feature* feaSegm = static_cast(group->addObject("Mesh::Feature", "Segment")); Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing(); feaMesh->swap(*segment); feaSegm->Mesh.finishEditing(); delete segment; + + std::stringstream label; + label << feaSegm->Label.getValue() << " (" << (*it)->GetType() << ")"; + feaSegm->Label.setValue(label.str()); } delete (*it); } + document->commitTransaction(); } void Segmentation::changeEvent(QEvent *e) From 27de3f76f4c400ba00e1178b175b1173f07b0217 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 May 2012 18:27:30 +0200 Subject: [PATCH 214/517] 0000712: Cad Navigation Zoom with Ctrl + causes shapes to pan off screen --- src/Gui/CommandView.cpp | 16 +++------------- src/Gui/NavigationStyle.cpp | 10 ++++++++++ src/Gui/NavigationStyle.h | 2 ++ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 712131d68..33da94c7c 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -59,6 +59,7 @@ #include "DemoMode.h" #include "TextureMapping.h" #include "Utilities.h" +#include "NavigationStyle.h" #include #include @@ -1817,13 +1818,7 @@ void StdViewZoomIn::activated(int iMsg) View3DInventor* view = qobject_cast(getMainWindow()->activeWindow()); if ( view ) { View3DInventorViewer* viewer = view->getViewer(); - - // send an event to the GL widget to use the internal View3DInventorViewer::zoom() method - // do only one step to zoom in - SoMouseButtonEvent e; - e.setButton(SoMouseButtonEvent::BUTTON5); - e.setState(SoMouseButtonEvent::DOWN); - viewer->sendSoEvent(&e); + viewer->navigationStyle()->zoomIn(); } } @@ -1857,12 +1852,7 @@ void StdViewZoomOut::activated(int iMsg) View3DInventor* view = qobject_cast(getMainWindow()->activeWindow()); if (view) { View3DInventorViewer* viewer = view->getViewer(); - // send an event to the GL widget to use the internal View3DInventorViewer::zoom() method - // do only one step to zoom out - SoMouseButtonEvent e; - e.setButton(SoMouseButtonEvent::BUTTON4); - e.setState(SoMouseButtonEvent::DOWN); - viewer->sendSoEvent(&e); + viewer->navigationStyle()->zoomOut(); } } diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index 192cb7ae5..30f5ecf40 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -721,6 +721,16 @@ void NavigationStyle::zoomByCursor(const SbVec2f & thispos, const SbVec2f & prev zoom(viewer->getCamera(), (thispos[1] - prevpos[1]) * 10.0f/*20.0f*/); } +void NavigationStyle::zoomIn() +{ + zoom(viewer->getCamera(), -this->zoomStep); +} + +void NavigationStyle::zoomOut() +{ + zoom(viewer->getCamera(), this->zoomStep); +} + void NavigationStyle::doZoom(SoCamera* camera, SbBool forward, const SbVec2f& pos) { SbBool zoomAtCur = this->zoomAtCursor; diff --git a/src/Gui/NavigationStyle.h b/src/Gui/NavigationStyle.h index 7644a7340..b6d4e20e6 100644 --- a/src/Gui/NavigationStyle.h +++ b/src/Gui/NavigationStyle.h @@ -115,6 +115,8 @@ public: void setZoomStep(float); void setZoomAtCursor(SbBool); SbBool isZoomAtCursor() const; + void zoomIn(); + void zoomOut(); void updateAnimation(); void redraw(); From d3fecc2b5e3f3ae1a1994d5e24f9e3d94d24dab8 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 21 May 2012 22:35:18 -0300 Subject: [PATCH 215/517] unified yorik's email --- src/Mod/Draft/DraftGui.py | 2 +- src/Mod/Draft/Init.py | 2 +- src/Mod/Draft/InitGui.py | 2 +- src/Mod/Draft/draftlibs/fcgeo.py | 2 +- src/Mod/Draft/draftlibs/fcvec.py | 2 +- src/Mod/Draft/importDXF.py | 4 ++-- src/Mod/Draft/importOCA.py | 4 ++-- src/Mod/Draft/importSVG.py | 2 +- src/Mod/Draft/macros.py | 2 +- src/Tools/offlinedoc/buildpdf.py | 2 +- src/Tools/offlinedoc/buildqhelp.py | 2 +- src/Tools/offlinedoc/buildwikiindex.py | 2 +- src/Tools/offlinedoc/downloadwiki.py | 2 +- src/Tools/updateTranslations.py | 2 +- src/Tools/wiki2qhelp.py | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 02c6c57d4..752abb76b 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/Init.py b/src/Mod/Draft/Init.py index 5069e5fd6..47fd3dc98 100644 --- a/src/Mod/Draft/Init.py +++ b/src/Mod/Draft/Init.py @@ -1,6 +1,6 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 1bcbadbc8..84d0b9b86 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -1,6 +1,6 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/draftlibs/fcgeo.py b/src/Mod/Draft/draftlibs/fcgeo.py index bf9f53e18..ccacbf62c 100755 --- a/src/Mod/Draft/draftlibs/fcgeo.py +++ b/src/Mod/Draft/draftlibs/fcgeo.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * #* Copyright (c) 2009, 2010 * -#* Yorik van Havre , Ken Cline * +#* Yorik van Havre , Ken Cline * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/draftlibs/fcvec.py b/src/Mod/Draft/draftlibs/fcvec.py index 0f3358cfc..1f10a2c7e 100644 --- a/src/Mod/Draft/draftlibs/fcvec.py +++ b/src/Mod/Draft/draftlibs/fcvec.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * #* Copyright (c) 2009, 2010 * -#* Yorik van Havre , Ken Cline * +#* Yorik van Havre , Ken Cline * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 97e01db7f..2c0474f8e 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -3,7 +3,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (GPL) * @@ -24,7 +24,7 @@ #*************************************************************************** __title__="FreeCAD Draft Workbench - DXF importer/exporter" -__author__ = "Yorik van Havre " +__author__ = "Yorik van Havre " __url__ = ["http://yorik.orgfree.com","http://free-cad.sourceforge.net"] ''' diff --git a/src/Mod/Draft/importOCA.py b/src/Mod/Draft/importOCA.py index 6324ce710..58131d830 100644 --- a/src/Mod/Draft/importOCA.py +++ b/src/Mod/Draft/importOCA.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU General Public License (GPL) * @@ -22,7 +22,7 @@ #*************************************************************************** __title__="FreeCAD Draft Workbench - OCA importer/exporter" -__author__ = "Yorik van Havre " +__author__ = "Yorik van Havre " __url__ = ["http://yorik.orgfree.com","http://free-cad.sourceforge.net"] ''' diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index 5de678d51..b49d4735c 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -1,7 +1,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Mod/Draft/macros.py b/src/Mod/Draft/macros.py index a2668dad8..2b106d19f 100644 --- a/src/Mod/Draft/macros.py +++ b/src/Mod/Draft/macros.py @@ -1,6 +1,6 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/buildpdf.py b/src/Tools/offlinedoc/buildpdf.py index ff9f53a15..c6dbf246f 100755 --- a/src/Tools/offlinedoc/buildpdf.py +++ b/src/Tools/offlinedoc/buildpdf.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/buildqhelp.py b/src/Tools/offlinedoc/buildqhelp.py index 4325ed915..77fa1bcae 100755 --- a/src/Tools/offlinedoc/buildqhelp.py +++ b/src/Tools/offlinedoc/buildqhelp.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/buildwikiindex.py b/src/Tools/offlinedoc/buildwikiindex.py index f7cee86c8..e685aed48 100755 --- a/src/Tools/offlinedoc/buildwikiindex.py +++ b/src/Tools/offlinedoc/buildwikiindex.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/offlinedoc/downloadwiki.py b/src/Tools/offlinedoc/downloadwiki.py index 50f88a2eb..4fc0bdadf 100755 --- a/src/Tools/offlinedoc/downloadwiki.py +++ b/src/Tools/offlinedoc/downloadwiki.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * diff --git a/src/Tools/updateTranslations.py b/src/Tools/updateTranslations.py index 5e3e991be..695a2f633 100755 --- a/src/Tools/updateTranslations.py +++ b/src/Tools/updateTranslations.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Library General Public License (LGPL) * diff --git a/src/Tools/wiki2qhelp.py b/src/Tools/wiki2qhelp.py index 09c47139a..dc52f3815 100755 --- a/src/Tools/wiki2qhelp.py +++ b/src/Tools/wiki2qhelp.py @@ -2,7 +2,7 @@ #*************************************************************************** #* * -#* Copyright (c) 2009 Yorik van Havre * +#* Copyright (c) 2009 Yorik van Havre * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Library General Public License (LGPL) * From 335d6cdfdb673ff48525c97b363dae0d0f54b26b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 11:45:40 -0300 Subject: [PATCH 216/517] Renamed Draft fcvec and fcgeo modules Draft/draftlibs/fcvec becomes Draft/DraftVecUtils Draft/draftlibs/fcgeo becomes Draft/DraftGeomUtils --- src/Doc/sphinx/Draft.rst | 13 +- src/Mod/Arch/ArchAxis.py | 4 +- src/Mod/Arch/ArchCommands.py | 16 +- src/Mod/Arch/ArchRoof.py | 14 +- src/Mod/Arch/ArchSectionPlane.py | 8 +- src/Mod/Arch/ArchStructure.py | 12 +- src/Mod/Arch/ArchVRM.py | 29 +- src/Mod/Arch/ArchWall.py | 42 ++- src/Mod/Arch/ArchWindow.py | 12 +- src/Mod/Arch/importIFC.py | 5 +- src/Mod/Arch/importOBJ.py | 5 +- src/Mod/Draft/CMakeLists.txt | 4 +- src/Mod/Draft/Draft.py | 202 +++++++------- .../{draftlibs/fcgeo.py => DraftGeomUtils.py} | 0 src/Mod/Draft/DraftSnap.py | 42 ++- src/Mod/Draft/DraftTools.py | 251 +++++++++--------- src/Mod/Draft/DraftTrackers.py | 49 ++-- .../{draftlibs/fcvec.py => DraftVecUtils.py} | 0 src/Mod/Draft/Makefile.am | 4 +- src/Mod/Draft/WorkingPlane.py | 33 ++- src/Mod/Draft/importDXF.py | 70 ++--- src/Mod/Draft/importOCA.py | 13 +- src/Mod/Draft/importSVG.py | 32 ++- src/WindowsInstaller/ModDraft.wxi | 4 +- 24 files changed, 413 insertions(+), 451 deletions(-) rename src/Mod/Draft/{draftlibs/fcgeo.py => DraftGeomUtils.py} (100%) rename src/Mod/Draft/{draftlibs/fcvec.py => DraftVecUtils.py} (100%) diff --git a/src/Doc/sphinx/Draft.rst b/src/Doc/sphinx/Draft.rst index 2b4101780..4479028b1 100644 --- a/src/Doc/sphinx/Draft.rst +++ b/src/Doc/sphinx/Draft.rst @@ -12,10 +12,15 @@ The Draft module offer several convenient functions to work with simple objects. .. automodule:: DraftSnap :members: -The draftlibs contain two submodules, widely used throughout the Draft module: fcvec, which contains useful methods for dealing with vectors, and fcgeo, which offers many tools for working with Part shape objects. +The Draft module also contains two submodules, widely used throughout the Draft and Arch modules: DraftVecUtils, which contains useful methods for dealing with vectors, and DraftGeomUtils, which offers many tools for working with OpenCascade geometry. -.. automodule:: draftlibs.fcvec +.. automodule:: DraftVecUtils :members: -.. automodule:: draftlibs.fcgeo - :members: \ No newline at end of file +.. automodule:: DraftGeomUtils + :members: + +The Draft module also features a module that contains trackers, special objects made to display 3D temporary geometry in the 3D scene, that have no real existence in the FreeCAD document. + +.. automodule:: DraftTrackers + :members: diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index a56a50ff2..37cdf9f54 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -21,9 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,math - -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,math,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore, QtGui from pivy import coin diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 5802e5e0a..2ebfad0d0 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -170,7 +169,7 @@ def makeFace(wires,method=2,cleanup=False): # cleaning up rubbish in wires if cleanup: for i in range(len(wires)): - wires[i] = fcgeo.removeInterVertices(wires[i]) + wires[i] = DraftGeomUtils.removeInterVertices(wires[i]) print "garbage removed" for w in wires: # we assume that the exterior boundary is that one with @@ -210,8 +209,7 @@ def meshToShape(obj,mark=True): mark is True (default), non-solid objects will be marked in red''' name = obj.Name - import Part,MeshPart - from draftlibs import fcgeo + import Part, MeshPart, DraftGeomUtils if "Mesh" in obj.PropertiesList: faces = [] mesh = obj.Mesh @@ -249,12 +247,12 @@ def meshToShape(obj,mark=True): def removeShape(objs,mark=True): '''takes an arch object (wall or structure) built on a cubic shape, and removes the inner shape, keeping its length, width and height as parameters.''' - from draftlibs import fcgeo + import DraftGeomUtils if not isinstance(objs,list): objs = [objs] for obj in objs: - if fcgeo.isCubic(obj.Shape): - dims = fcgeo.getCubicDimensions(obj.Shape) + if DraftGeomUtils.isCubic(obj.Shape): + dims = DraftGeomUtils.getCubicDimensions(obj.Shape) if dims: name = obj.Name tp = Draft.getType(obj) @@ -270,7 +268,7 @@ def removeShape(objs,mark=True): length = dims[1] width = dims[2] v1 = Vector(length/2,0,0) - v2 = fcvec.neg(v1) + v2 = DraftVecUtils.neg(v1) v1 = dims[0].multVec(v1) v2 = dims[0].multVec(v2) line = Draft.makeLine(v1,v2) diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 37d06b58e..31515afbc 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -104,8 +103,7 @@ class _Roof(ArchComponent.Component): self.createGeometry(obj) def createGeometry(self,obj): - import Part,math - from draftlibs import fcgeo + import Part, math, DraftGeomUtils pl = obj.Placement if obj.Base and obj.Face and obj.Angle: @@ -116,14 +114,14 @@ class _Roof(ArchComponent.Component): c = round(math.tan(math.radians(obj.Angle)),Draft.precision()) norm = f.normalAt(0,0) d = f.BoundBox.DiagonalLength - edges = fcgeo.sortEdges(f.Edges) + edges = DraftGeomUtils.sortEdges(f.Edges) l = len(edges) edges.append(edges[0]) shps = [] for i in range(l): - v = fcgeo.vec(fcgeo.angleBisection(edges[i],edges[i+1])) + v = DraftGeomUtils.vec(DraftGeomUtils.angleBisection(edges[i],edges[i+1])) v.normalize() - bis = v.getAngle(fcgeo.vec(edges[i])) + bis = v.getAngle(DraftGeomUtils.vec(edges[i])) delta = 1/math.cos(bis) v.multiply(delta) n = (FreeCAD.Vector(norm)).multiply(c) @@ -137,7 +135,7 @@ class _Roof(ArchComponent.Component): c = c.removeSplitter() if not c.isNull(): obj.Shape = c - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderRoof(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index d1c1ada50..59c802382 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -21,11 +21,10 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,Drawing,math,Draft,ArchCommands +import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,Drawing,math,Draft,ArchCommands, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore from pivy import coin -from draftlibs import fcvec class _CommandSectionPlane: @@ -176,8 +175,7 @@ class _ArchDrawingView: def updateSVG(self, obj,join=False): "encapsulates a svg fragment into a transformation node" - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils if hasattr(obj,"Source"): if obj.Source: if obj.Source.Objects: @@ -207,7 +205,7 @@ class _ArchDrawingView: base = shape.pop() for sh in shapes: base = base.fuse(sh) - svgf = Drawing.projectToSVG(base,fcvec.neg(direction)) + svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction)) if svgf: svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') svg += svgf diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index cd87115eb..2327ad7ca 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -99,7 +98,7 @@ class _Structure(ArchComponent.Component): def getAxisPoints(self,obj): "returns the gridpoints of linked axes" - from draftlibs import fcgeo + import DraftGeomUtils pts = [] if len(obj.Axes) == 1: for e in obj.Axes[0].Shape.Edges: @@ -109,12 +108,11 @@ class _Structure(ArchComponent.Component): set2 = obj.Axes[1].Shape.Edges for e1 in set1: for e2 in set2: - pts.extend(fcgeo.findIntersection(e1,e2)) + pts.extend(DraftGeomUtils.findIntersection(e1,e2)) return pts def createGeometry(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils # getting default values height = normal = None if obj.Length: @@ -187,7 +185,7 @@ class _Structure(ArchComponent.Component): obj.Shape = Part.makeCompound(fsh) else: obj.Shape = base - if not fcgeo.isNull(pl): obj.Placement = pl + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderStructure(ArchComponent.ViewProviderComponent): "A View Provider for the Structure object" diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index f7e5988ab..2de8ad0b3 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -23,8 +23,7 @@ "The FreeCAD Arch Vector Rendering Module" -import FreeCAD,math,Part,ArchCommands -from draftlibs import fcvec,fcgeo +import FreeCAD,math,Part,ArchCommands,DraftVecUtils,DraftGeomUtils DEBUG = True # if we want debug messages MAXLOOP = 10 # the max number of loop before abort @@ -171,7 +170,7 @@ class Renderer: norm = face[0].normalAt(0,0) for w in face[0].Wires: verts = [] - edges = fcgeo.sortEdges(w.Edges) + edges = DraftGeomUtils.sortEdges(w.Edges) for e in edges: v = e.Vertexes[0].Point v = self.wp.getLocalCoords(v) @@ -196,7 +195,7 @@ class Renderer: wires = [] for w in face[0].Wires: verts = [] - edges = fcgeo.sortEdges(w.Edges) + edges = DraftGeomUtils.sortEdges(w.Edges) for e in edges: v = e.Vertexes[0].Point verts.append(FreeCAD.Vector(v.x,v.y,0)) @@ -239,11 +238,11 @@ class Renderer: FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)] for c in corners: dv = c.sub(placement.Base) - um1 = fcvec.project(dv,self.wp.u).Length + um1 = DraftVecUtils.project(dv,self.wp.u).Length um = max(um,um1) - vm1 = fcvec.project(dv,self.wp.v).Length + vm1 = DraftVecUtils.project(dv,self.wp.v).Length vm = max(vm,vm1) - wm1 = fcvec.project(dv,self.wp.axis).Length + wm1 = DraftVecUtils.project(dv,self.wp.axis).Length wm = max(wm,wm1) p1 = FreeCAD.Vector(-um,vm,0) p2 = FreeCAD.Vector(um,vm,0) @@ -252,7 +251,7 @@ class Renderer: cutface = Part.makePolygon([p1,p2,p3,p4,p1]) cutface = Part.Face(cutface) cutface.Placement = placement - cutnormal = fcvec.scaleTo(self.wp.axis,wm) + cutnormal = DraftVecUtils.scaleTo(self.wp.axis,wm) cutvolume = cutface.extrude(cutnormal) shapes = [] faces = [] @@ -265,7 +264,7 @@ class Renderer: faces.append([f]+sh[1:]) sec = sol.section(cutface) if sec.Edges: - wires = fcgeo.findWires(sec.Edges) + wires = DraftGeomUtils.findWires(sec.Edges) for w in wires: sec = Part.Face(w) sections.append([sec,fill]) @@ -313,7 +312,7 @@ class Renderer: # even so, faces can still overlap if their edges cross each other for e1 in face1[0].Edges: for e2 in face2[0].Edges: - if fcgeo.findIntersection(e1,e2): + if DraftGeomUtils.findIntersection(e1,e2): return True return False @@ -354,8 +353,8 @@ class Renderer: front = 0 for v in face1[0].Vertexes: dv = v.Point.sub(face2[0].Vertexes[0].Point) - dv = fcvec.project(dv,norm) - if fcvec.isNull(dv): + dv = DraftVecUtils.project(dv,norm) + if DraftVecUtils.isNull(dv): behind += 1 front += 1 else: @@ -377,8 +376,8 @@ class Renderer: front = 0 for v in face2[0].Vertexes: dv = v.Point.sub(face1[0].Vertexes[0].Point) - dv = fcvec.project(dv,norm) - if fcvec.isNull(dv): + dv = DraftVecUtils.project(dv,norm) + if DraftVecUtils.isNull(dv): behind += 1 front += 1 else: @@ -545,7 +544,7 @@ class Renderer: def getPathData(self,w): "Returns a SVG path data string from a 2D wire" - edges = fcgeo.sortEdges(w.Edges) + edges = DraftGeomUtils.sortEdges(w.Edges) v = edges[0].Vertexes[0].Point svg = 'M '+ str(v.x) +' '+ str(v.y) + ' ' for e in edges: diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 36c33e7a8..c26125136 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore @@ -180,13 +179,13 @@ class _CommandWall: n = FreeCAD.DraftWorkingPlane.axis bv = point.sub(b) dv = bv.cross(n) - dv = fcvec.scaleTo(dv,self.Width/2) + dv = DraftVecUtils.scaleTo(dv,self.Width/2) if self.Align == "Center": self.tracker.update([b,point]) elif self.Align == "Left": self.tracker.update([b.add(dv),point.add(dv)]) else: - dv = fcvec.neg(dv) + dv = DraftVecUtils.neg(dv) self.tracker.update([b.add(dv),point.add(dv)]) def taskbox(self): @@ -275,10 +274,10 @@ class _Wall(ArchComponent.Component): f = w f = Part.Face(f) n = f.normalAt(0,0) - v1 = fcvec.scaleTo(n,width) + v1 = DraftVecUtils.scaleTo(n,width) f.translate(v1) - v2 = fcvec.neg(v1) - v2 = fcvec.scale(v1,-2) + v2 = DraftVecUtils.neg(v1) + v2 = DraftVecUtils.scale(v1,-2) f = f.extrude(v2) if delta: f.translate(delta) @@ -290,8 +289,7 @@ class _Wall(ArchComponent.Component): if not obj.Base: return - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils flat = False if hasattr(obj.ViewObject,"DisplayMode"): @@ -304,25 +302,25 @@ class _Wall(ArchComponent.Component): def getbase(wire): "returns a full shape from a base wire" - dvec = fcgeo.vec(wire.Edges[0]).cross(normal) + dvec = DraftGeomUtils.vec(wire.Edges[0]).cross(normal) dvec.normalize() if obj.Align == "Left": dvec = dvec.multiply(width) - w2 = fcgeo.offsetWire(wire,dvec) - w1 = Part.Wire(fcgeo.sortEdges(wire.Edges)) - sh = fcgeo.bind(w1,w2) + w2 = DraftGeomUtils.offsetWire(wire,dvec) + w1 = Part.Wire(DraftGeomUtils.sortEdges(wire.Edges)) + sh = DraftGeomUtils.bind(w1,w2) elif obj.Align == "Right": dvec = dvec.multiply(width) - dvec = fcvec.neg(dvec) - w2 = fcgeo.offsetWire(wire,dvec) - w1 = Part.Wire(fcgeo.sortEdges(wire.Edges)) - sh = fcgeo.bind(w1,w2) + dvec = DraftVecUtils.neg(dvec) + w2 = DraftGeomUtils.offsetWire(wire,dvec) + w1 = Part.Wire(DraftGeomUtils.sortEdges(wire.Edges)) + sh = DraftGeomUtils.bind(w1,w2) elif obj.Align == "Center": dvec = dvec.multiply(width/2) - w1 = fcgeo.offsetWire(wire,dvec) - dvec = fcvec.neg(dvec) - w2 = fcgeo.offsetWire(wire,dvec) - sh = fcgeo.bind(w1,w2) + w1 = DraftGeomUtils.offsetWire(wire,dvec) + dvec = DraftVecUtils.neg(dvec) + w2 = DraftGeomUtils.offsetWire(wire,dvec) + sh = DraftGeomUtils.bind(w1,w2) # fixing self-intersections sh.fix(0.1,0,1) if height and (not flat): @@ -388,7 +386,7 @@ class _Wall(ArchComponent.Component): if base: obj.Shape = base - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderWall(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 2cdf513c9..35813ddfc 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchComponent -from draftlibs import fcvec +import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore,QtGui @@ -109,8 +108,7 @@ class _Window(ArchComponent.Component): self.createGeometry(obj) def createGeometry(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils pl = obj.Placement if obj.Base: if obj.Base.isDerivedFrom("Part::Feature"): @@ -135,7 +133,7 @@ class _Window(ArchComponent.Component): norm = shape.normalAt(0,0) thk = float(obj.WindowParts[(i*5)+3]) if thk: - exv = fcvec.scaleTo(norm,thk) + exv = DraftVecUtils.scaleTo(norm,thk) shape = shape.extrude(exv) for w in wires: f = Part.Face(w) @@ -144,12 +142,12 @@ class _Window(ArchComponent.Component): if obj.WindowParts[(i*5)+4]: zof = float(obj.WindowParts[(i*5)+4]) if zof: - zov = fcvec.scaleTo(norm,zof) + zov = DraftVecUtils.scaleTo(norm,zof) shape.translate(zov) print shape shapes.append(shape) obj.Shape = Part.makeCompound(shapes) - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderWindow(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 7a0cf8ae0..17dc3d166 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import ifcReader, FreeCAD, Arch, Draft, os, sys, time, Part -from draftlibs import fcvec +import ifcReader, FreeCAD, Arch, Draft, os, sys, time, Part, DraftVecUtils __title__="FreeCAD IFC importer" __author__ = "Yorik van Havre" @@ -448,7 +447,7 @@ def getPlacement(entity): z = getVector(entity.Axis) y = z.cross(x) loc = getVector(entity.Location) - m = fcvec.getPlaneRotation(x,y,z) + m = DraftVecUtils.getPlaneRotation(x,y,z) pl = FreeCAD.Placement(m) pl.move(loc) elif entity.type == "IFCLOCALPLACEMENT": diff --git a/src/Mod/Arch/importOBJ.py b/src/Mod/Arch/importOBJ.py index e5ddca434..4622e1adf 100644 --- a/src/Mod/Arch/importOBJ.py +++ b/src/Mod/Arch/importOBJ.py @@ -21,8 +21,7 @@ #* * #*************************************************************************** -import FreeCAD -from draftlibs import fcgeo +import FreeCAD, DraftGeomUtils if open.__module__ == '__builtin__': pythonopen = open @@ -42,7 +41,7 @@ def getIndices(shape,offset): for f in shape.Faces: fi = "" # OCC vertices are unsorted. We need to sort in the right order... - edges = fcgeo.sortEdges(f.Wire.Edges) + edges = DraftGeomUtils.sortEdges(f.Wire.Edges) print edges for e in edges: print e.Vertexes[0].Point,e.Vertexes[1].Point diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index 99e27d0f9..3d1288561 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -7,6 +7,8 @@ SET(Draft_SRCS DraftGui.py DraftSnap.py DraftTrackers.py + DraftVecUtils.py + DraftGeomUtils.py WorkingPlane.py importDXF.py importOCA.py @@ -22,8 +24,6 @@ SET(DraftLibs_SRCS draftlibs/dxfImportObjects.py draftlibs/dxfLibrary.py draftlibs/dxfReader.py - draftlibs/fcgeo.py - draftlibs/fcvec.py draftlibs/__init__.py ) SOURCE_GROUP("draftlibs" FILES ${DraftLibs_SRCS}) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 0014a4513..300bc8692 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -54,9 +54,9 @@ How it works / how to extend: - DraftTools.py: Contains the user tools of the Draft module (the commands from the Draft menu), and a couple of helpers such as the "Trackers" (temporary geometry used while drawing) - - draftlibs/fcvec.py: a vector math library, contains functions that are not + - DraftVecUtils.py: a vector math library, contains functions that are not implemented in the standard FreeCAD vector - - draftlibs/fcgeo.py: a library of misc functions to manipulate shapes. + - DraftGeomUtils.py: a library of misc functions to manipulate shapes. The Draft.py contains everything to create geometry in the scene. You should start there if you intend to modify something. Then, the DraftTools @@ -72,9 +72,8 @@ How it works / how to extend: ''' # import FreeCAD modules -import FreeCAD, math, sys, os +import FreeCAD, math, sys, os, DraftVecUtils from FreeCAD import Vector -from draftlibs import fcvec from pivy import coin if FreeCAD.GuiUp: @@ -395,8 +394,8 @@ def makeCircle(radius, placement=None, face=True, startangle=None, endangle=None ref = placement.multVec(FreeCAD.Vector(1,0,0)) v1 = (edge.Vertexes[0].Point).sub(edge.Curve.Center) v2 = (edge.Vertexes[-1].Point).sub(edge.Curve.Center) - a1 = -math.degrees(fcvec.angle(v1,ref)) - a2 = -math.degrees(fcvec.angle(v2,ref)) + a1 = -math.degrees(DraftVecUtils.angle(v1,ref)) + a2 = -math.degrees(DraftVecUtils.angle(v2,ref)) obj.FirstAngle = a1 obj.LastAngle = a2 else: @@ -514,15 +513,14 @@ def makeWire(pointslist,closed=False,placement=None,face=True,support=None): and last points are identical, the wire is closed. If face is true (and wire is closed), the wire will appear filled. Instead of a pointslist, you can also pass a Part Wire.''' - from draftlibs import fcgeo - import Part + import DraftGeomUtils, Part if not isinstance(pointslist,list): e = pointslist.Wires[0].Edges - pointslist = Part.Wire(fcgeo.sortEdges(e)) + pointslist = Part.Wire(DraftGeomUtils.sortEdges(e)) nlist = [] for v in pointslist.Vertexes: nlist.append(v.Point) - if fcgeo.isReallyClosed(pointslist): + if DraftGeomUtils.isReallyClosed(pointslist): closed = True pointslist = nlist print pointslist @@ -774,8 +772,7 @@ def fuse(object1,object2): the union of the 2 given objects. If the objects are coplanar, a special Draft Wire is used, otherwise we use a standard Part fuse.''' - from draftlibs import fcgeo - import Part + import DraftGeomUtils, Part # testing if we have holes: holes = False fshape = object1.Shape.fuse(object2.Shape) @@ -783,7 +780,7 @@ def fuse(object1,object2): for f in fshape.Faces: if len(f.Wires) > 1: holes = True - if fcgeo.isCoplanar(object1.Shape.fuse(object2.Shape).Faces) and not holes: + if DraftGeomUtils.isCoplanar(object1.Shape.fuse(object2.Shape).Faces) and not holes: obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython","Fusion") _Wire(obj) if gui: @@ -879,12 +876,12 @@ def array(objectslist,arg1,arg2,arg3,arg4=None): typecheck([(xvector,Vector), (yvector,Vector), (xnum,int), (ynum,int)], "rectArray") if not isinstance(objectslist,list): objectslist = [objectslist] for xcount in range(xnum): - currentxvector=fcvec.scale(xvector,xcount) + currentxvector=DraftVecUtils.scale(xvector,xcount) if not xcount==0: move(objectslist,currentxvector,True) for ycount in range(ynum): currentxvector=FreeCAD.Base.Vector(currentxvector) - currentyvector=currentxvector.add(fcvec.scale(yvector,ycount)) + currentyvector=currentxvector.add(DraftVecUtils.scale(yvector,ycount)) if not ycount==0: move(objectslist,currentyvector,True) def polarArray(objectslist,center,angle,num): @@ -918,7 +915,7 @@ def rotate(objectslist,angle,center=Vector(0,0,0),axis=Vector(0,0,1),copy=False) newobj = obj if (obj.isDerivedFrom("Part::Feature")): shape = obj.Shape.copy() - shape.rotate(fcvec.tup(center), fcvec.tup(axis), angle) + shape.rotate(DraftVecUtils.tup(center), DraftVecUtils.tup(axis), angle) newobj.Shape = shape elif (obj.isDerivedFrom("App::Annotation")): if axis.normalize() == Vector(1,0,0): @@ -939,7 +936,7 @@ def rotate(objectslist,angle,center=Vector(0,0,0),axis=Vector(0,0,1),copy=False) elif hasattr(obj,"Placement"): shape = Part.Shape() shape.Placement = obj.Placement - shape.rotate(fcvec.tup(center), fcvec.tup(axis), angle) + shape.rotate(DraftVecUtils.tup(center), DraftVecUtils.tup(axis), angle) newobj.Placement = shape.Placement if copy: formatObject(newobj,obj) @@ -972,7 +969,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy sh = sh.transformGeometry(m) corr = Vector(center.x,center.y,center.z) corr.scale(delta.x,delta.y,delta.z) - corr = fcvec.neg(corr.sub(center)) + corr = DraftVecUtils.neg(corr.sub(center)) sh.translate(corr) if getType(obj) == "Rectangle": p = [] @@ -982,8 +979,8 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy diag = p[2].sub(p[0]) bb = p[1].sub(p[0]) bh = p[3].sub(p[0]) - nb = fcvec.project(diag,bb) - nh = fcvec.project(diag,bh) + nb = DraftVecUtils.project(diag,bb) + nh = DraftVecUtils.project(diag,bh) if obj.Length < 0: l = -nb.Length else: l = nb.Length if obj.Height < 0: h = -nh.Length @@ -1016,7 +1013,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy obj.Scale = delta corr = Vector(center.x,center.y,center.z) corr.scale(delta.x,delta.y,delta.z) - corr = fcvec.neg(corr.sub(center)) + corr = DraftVecUtils.neg(corr.sub(center)) p = obj.Placement p.move(corr) obj.Placement = p @@ -1037,8 +1034,7 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): and the offsetted wires will be bound by their endpoints, forming a face if sym is True, bind must be true too, and the offset is made on both sides, the total width being the given delta length.''' - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils def getRect(p,obj): "returns length,heigh,placement" @@ -1047,8 +1043,8 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): diag = p[2].sub(p[0]) bb = p[1].sub(p[0]) bh = p[3].sub(p[0]) - nb = fcvec.project(diag,bb) - nh = fcvec.project(diag,bh) + nb = DraftVecUtils.project(diag,bb) + nh = DraftVecUtils.project(diag,bh) if obj.Length < 0: l = -nb.Length else: l = nb.Length if obj.Height < 0: h = -nh.Length @@ -1058,7 +1054,7 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): def getRadius(obj,delta): "returns a new radius for a regular polygon" an = math.pi/obj.FacesNumber - nr = fcvec.rotate(delta,-an) + nr = DraftVecUtils.rotate(delta,-an) nr.multiply(1/math.cos(an)) nr = obj.Shape.Vertexes[0].Point.add(nr) nr = nr.sub(obj.Placement.Base) @@ -1075,18 +1071,18 @@ def offset(obj,delta,copy=False,bind=False,sym=False,occ=False): else: if sym: d1 = delta.multiply(0.5) - d2 = fcvec.neg(d1) - n1 = fcgeo.offsetWire(obj.Shape,d1) - n2 = fcgeo.offsetWire(obj.Shape,d2) + d2 = DraftVecUtils.neg(d1) + n1 = DraftGeomUtils.offsetWire(obj.Shape,d1) + n2 = DraftGeomUtils.offsetWire(obj.Shape,d2) else: - newwire = fcgeo.offsetWire(obj.Shape,delta) - p = fcgeo.getVerts(newwire) + newwire = DraftGeomUtils.offsetWire(obj.Shape,delta) + p = DraftGeomUtils.getVerts(newwire) if occ: newobj = FreeCAD.ActiveDocument.addObject("Part::Feature","Offset") - newobj.Shape = fcgeo.offsetWire(obj.Shape,delta,occ=True) + newobj.Shape = DraftGeomUtils.offsetWire(obj.Shape,delta,occ=True) formatObject(newobj,obj) elif bind: - if not fcgeo.isReallyClosed(obj.Shape): + if not DraftGeomUtils.isReallyClosed(obj.Shape): if sym: s1 = n1 s2 = n2 @@ -1161,8 +1157,7 @@ def draftify(objectslist,makeblock=False): '''draftify(objectslist,[makeblock]): turns each object of the given list (objectslist can also be a single object) into a Draft parametric wire. If makeblock is True, multiple objects will be grouped in a block''' - from draftlibs import fcgeo - import Part + import DraftGeomUtils, Part if not isinstance(objectslist,list): objectslist = [objectslist] @@ -1170,7 +1165,7 @@ def draftify(objectslist,makeblock=False): for obj in objectslist: if obj.isDerivedFrom('Part::Feature'): for w in obj.Shape.Wires: - if fcgeo.hasCurves(w): + if DraftGeomUtils.hasCurves(w): if (len(w.Edges) == 1) and isinstance(w.Edges[0].Curve,Part.Circle): nobj = makeCircle(w.Edges[0]) else: @@ -1199,8 +1194,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct with the given linewidth and fontsize (used if the given object contains any text). You can also supply an arbitrary projection vector. the scale parameter allows to scale linewidths down, so they are resolution-independant.''' - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils svg = "" linewidth = linewidth/scale fontsize = (fontsize/scale)/2 @@ -1209,7 +1203,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct if isinstance(direction,FreeCAD.Vector): if direction != Vector(0,0,0): plane = WorkingPlane.plane() - plane.alignToPointAndAxis(Vector(0,0,0),fcvec.neg(direction),0) + plane.alignToPointAndAxis(Vector(0,0,0),DraftVecUtils.neg(direction),0) elif isinstance(direction,WorkingPlane.plane): plane = direction @@ -1240,10 +1234,10 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct def getProj(vec): if not plane: return vec - nx = fcvec.project(vec,plane.u) + nx = DraftVecUtils.project(vec,plane.u) lx = nx.Length if abs(nx.getAngle(plane.u)) > 0.1: lx = -lx - ny = fcvec.project(vec,plane.v) + ny = DraftVecUtils.project(vec,plane.v) ly = ny.Length if abs(ny.getAngle(plane.v)) > 0.1: ly = -ly return Vector(lx,ly,0) @@ -1255,7 +1249,7 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct def getPath(edges): svg =' dmax): - p1 = p2.add(fcvec.scaleTo(proj,dmax)) - p4 = p3.add(fcvec.scaleTo(proj,dmax)) - midpoint = p2.add(fcvec.scale(p3.sub(p2),0.5)) + p1 = p2.add(DraftVecUtils.scaleTo(proj,dmax)) + p4 = p3.add(DraftVecUtils.scaleTo(proj,dmax)) + midpoint = p2.add(DraftVecUtils.scale(p3.sub(p2),0.5)) if not proj: - ed = fcgeo.vec(base) + ed = DraftGeomUtils.vec(base) proj = ed.cross(Vector(0,0,1)) if not proj: norm = Vector(0,0,1) - else: norm = fcvec.neg(p3.sub(p2).cross(proj)) - if not fcvec.isNull(norm): + else: norm = DraftVecUtils.neg(p3.sub(p2).cross(proj)) + if not DraftVecUtils.isNull(norm): norm.normalize() va = get3DView().getViewDirection() if va.getAngle(norm) < math.pi/2: - norm = fcvec.neg(norm) + norm = DraftVecUtils.neg(norm) u = p3.sub(p2) u.normalize() c = get3DView().getCameraNode() r = c.orientation.getValue() ru = Vector(r.multVec(coin.SbVec3f(1,0,0)).getValue()) - if ru.getAngle(u) > math.pi/2: u = fcvec.neg(u) + if ru.getAngle(u) > math.pi/2: u = DraftVecUtils.neg(u) v = norm.cross(u) - offset = fcvec.scaleTo(v,obj.ViewObject.FontSize*.2) + offset = DraftVecUtils.scaleTo(v,obj.ViewObject.FontSize*.2) if obj.ViewObject: if hasattr(obj.ViewObject,"DisplayMode"): if obj.ViewObject.DisplayMode == "3D": - offset = fcvec.neg(offset) + offset = DraftVecUtils.neg(offset) if hasattr(obj.ViewObject,"TextPosition"): if obj.ViewObject.TextPosition == Vector(0,0,0): tbase = midpoint.add(offset) @@ -1839,7 +1831,7 @@ class _ViewProviderDimension: tbase = obj.ViewObject.TextPosition else: tbase = midpoint.add(offset) - rot = FreeCAD.Placement(fcvec.getPlaneRotation(u,v,norm)).Rotation.Q + rot = FreeCAD.Placement(DraftVecUtils.getPlaneRotation(u,v,norm)).Rotation.Q return p1,p2,p3,p4,tbase,norm,rot def attach(self, obj): @@ -1858,7 +1850,7 @@ class _ViewProviderDimension: self.text.string = self.text3d.string = '' self.textpos = coin.SoTransform() self.textpos.translation.setValue([tbase.x,tbase.y,tbase.z]) - tm = fcvec.getPlaneRotation(p3.sub(p2),norm) + tm = DraftVecUtils.getPlaneRotation(p3.sub(p2),norm) rm = coin.SbRotation() self.textpos.rotation = rm label = coin.SoSeparator() @@ -1917,11 +1909,11 @@ class _ViewProviderDimension: # arc linked dimension e = obj.Base.Shape.Edges[obj.LinkedVertices[0]] c = e.Curve.Center - bray = fcvec.scaleTo(obj.Dimline.sub(c),e.Curve.Radius) + bray = DraftVecUtils.scaleTo(obj.Dimline.sub(c),e.Curve.Radius) if obj.LinkedVertices[1] == 1: v1 = c else: - v1 = c.add(fcvec.neg(bray)) + v1 = c.add(DraftVecUtils.neg(bray)) v2 = c.add(bray) else: # linear linked dimension @@ -1952,8 +1944,8 @@ class _ViewProviderDimension: else: ts = (len(text)*obj.ViewObject.FontSize)/4 rm = ((p3.sub(p2)).Length/2)-ts - p2a = p2.add(fcvec.scaleTo(p3.sub(p2),rm)) - p2b = p3.add(fcvec.scaleTo(p2.sub(p3),rm)) + p2a = p2.add(DraftVecUtils.scaleTo(p3.sub(p2),rm)) + p2b = p3.add(DraftVecUtils.scaleTo(p2.sub(p3),rm)) self.coords.point.setValues([[p1.x,p1.y,p1.z], [p2.x,p2.y,p2.z], [p2a.x,p2a.y,p2a.z], @@ -2149,15 +2141,14 @@ class _ViewProviderAngularDimension: self.onChanged(vobj,"FontName") def calcGeom(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils rad = (obj.Dimline.sub(obj.Center)).Length cir = Part.makeCircle(rad,obj.Center,Vector(0,0,1),obj.FirstAngle,obj.LastAngle) - cp = fcgeo.findMidpoint(cir.Edges[0]) + cp = DraftGeomUtils.findMidpoint(cir.Edges[0]) rv = cp.sub(obj.Center) - rv = fcvec.scaleTo(rv,rv.Length + obj.ViewObject.FontSize*.2) + rv = DraftVecUtils.scaleTo(rv,rv.Length + obj.ViewObject.FontSize*.2) tbase = obj.Center.add(rv) - trot = fcvec.angle(rv)-math.pi/2 + trot = DraftVecUtils.angle(rv)-math.pi/2 if (trot > math.pi/2) or (trot < -math.pi/2): trot = trot + math.pi s = getParam("dimorientation") @@ -2276,8 +2267,7 @@ class _Rectangle: self.createGeometry(fp) def createGeometry(self,fp): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils plm = fp.Placement p1 = Vector(0,0,0) p2 = Vector(p1.x+fp.Length,p1.y,p1.z) @@ -2286,7 +2276,7 @@ class _Rectangle: shape = Part.makePolygon([p1,p2,p3,p4,p1]) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w shape = Part.Face(shape) @@ -2399,8 +2389,7 @@ class _Wire: fp.Points = pts def createGeometry(self,fp): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils plm = fp.Placement if fp.Base and (not fp.Tool): if fp.Base.isDerivedFrom("Sketcher::SketchObject"): @@ -2416,8 +2405,8 @@ class _Wire: sh1 = fp.Base.Shape.copy() sh2 = fp.Tool.Shape.copy() shape = sh1.fuse(sh2) - if fcgeo.isCoplanar(shape.Faces): - shape = fcgeo.concatenate(shape) + if DraftGeomUtils.isCoplanar(shape.Faces): + shape = DraftGeomUtils.concatenate(shape) fp.Shape = shape p = [] for v in shape.Vertexes: p.append(v.Point) @@ -2430,7 +2419,7 @@ class _Wire: shape = Part.makePolygon(fp.Points+[fp.Points[0]]) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w shape = Part.Face(shape) @@ -2444,7 +2433,7 @@ class _Wire: shape = Part.Wire(edges) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w fp.Shape = shape @@ -2510,8 +2499,7 @@ class _Polygon: self.createGeometry(fp) def createGeometry(self,fp): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils plm = fp.Placement angle = (math.pi*2)/fp.FacesNumber if fp.DrawMode == 'inscribed': @@ -2526,7 +2514,7 @@ class _Polygon: shape = Part.makePolygon(pts) if "FilletRadius" in fp.PropertiesList: if fp.FilletRadius != 0: - w = fcgeo.filletWire(shape,fp.FilletRadius) + w = DraftGeomUtils.filletWire(shape,fp.FilletRadius) if w: shape = w shape = Part.Face(shape) @@ -2690,16 +2678,15 @@ class _Shape2DView: self.createGeometry(obj) def createGeometry(self,obj): - import Drawing - from draftlibs import fcgeo + import Drawing, DraftGeomUtils pl = obj.Placement if obj.Base: if obj.Base.isDerivedFrom("Part::Feature"): - if not fcvec.isNull(obj.Projection): + if not DraftVecUtils.isNull(obj.Projection): [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(obj.Base.Shape,obj.Projection) if visibleG0: obj.Shape = visibleG0 - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _Array: @@ -2745,7 +2732,7 @@ class _Array: self.createGeometry(obj) def createGeometry(self,obj): - from draftlibs import fcgeo + import DraftGeomUtils if obj.Base: pl = obj.Placement if obj.ArrayType == "ortho": @@ -2753,21 +2740,21 @@ class _Array: else: sh = self.polarArray(obj.Base.Shape,obj.Center,obj.Angle,obj.NumberPolar,obj.Axis) obj.Shape = sh - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl def rectArray(self,shape,xvector,yvector,xnum,ynum): import Part base = [shape.copy()] for xcount in range(xnum): - currentxvector=fcvec.scale(xvector,xcount) + currentxvector=DraftVecUtils.scale(xvector,xcount) if not xcount==0: nshape = shape.copy() nshape.translate(currentxvector) base.append(nshape) for ycount in range(ynum): currentxvector=FreeCAD.Vector(currentxvector) - currentyvector=currentxvector.add(fcvec.scale(yvector,ycount)) + currentyvector=currentxvector.add(DraftVecUtils.scale(yvector,ycount)) if not ycount==0: nshape = shape.copy() nshape.translate(currentyvector) @@ -2781,7 +2768,7 @@ class _Array: for i in range(num): currangle = fraction + (i*fraction) nshape = shape.copy() - nshape.rotate(fcvec.tup(center), fcvec.tup(axis), currangle) + nshape.rotate(DraftVecUtils.tup(center), DraftVecUtils.tup(axis), currangle) base.append(nshape) return Part.makeCompound(base) @@ -2845,8 +2832,7 @@ class _Clone: self.createGeometry(obj) def createGeometry(self,obj): - import Part - from draftlibs import fcgeo + import Part, DraftGeomUtils pl = obj.Placement shapes = [] for o in obj.Objects: @@ -2859,7 +2845,7 @@ class _Clone: shapes.append(sh) if shapes: obj.Shape = Part.makeCompound(shapes) - if not fcgeo.isNull(pl): + if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderDraftPart(_ViewProviderDraft): diff --git a/src/Mod/Draft/draftlibs/fcgeo.py b/src/Mod/Draft/DraftGeomUtils.py similarity index 100% rename from src/Mod/Draft/draftlibs/fcgeo.py rename to src/Mod/Draft/DraftGeomUtils.py diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 50a0b19ba..1479a6568 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -26,9 +26,8 @@ __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers +import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers, DraftVecUtils from DraftGui import todo,getMainWindow -from draftlibs import fcvec from FreeCAD import Vector from pivy import coin from PyQt4 import QtCore,QtGui @@ -110,9 +109,8 @@ class Snapper: be True to constrain the point against the closest working plane axis. Screenpos can be a list, a tuple or a coin.SbVec2s object.""" - global Part,fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils if not hasattr(self,"toolbar"): self.makeSnapToolBar() @@ -355,7 +353,7 @@ class Snapper: for e in edges: if isinstance(e.Curve,Part.Line): np = self.getPerpendicular(e,point) - if not fcgeo.isPtOnEdge(np,e): + if not DraftGeomUtils.isPtOnEdge(np,e): if (np.sub(point)).Length < self.radius: if self.isEnabled('extension'): if np != e.Vertexes[0].Point: @@ -372,7 +370,7 @@ class Snapper: else: if self.isEnabled('parallel'): if last: - de = Part.Line(last,last.add(fcgeo.vec(e))).toShape() + de = Part.Line(last,last.add(DraftGeomUtils.vec(e))).toShape() np = self.getPerpendicular(de,point) if (np.sub(point)).Length < self.radius: if self.tracker: @@ -398,13 +396,13 @@ class Snapper: FreeCAD.Vector(0,0,1)] for a in self.polarAngles: if a == 90: - vecs.extend([ax[0],fcvec.neg(ax[0])]) - vecs.extend([ax[1],fcvec.neg(ax[1])]) + vecs.extend([ax[0],DraftVecUtils.neg(ax[0])]) + vecs.extend([ax[1],DraftVecUtils.neg(ax[1])]) else: - v = fcvec.rotate(ax[0],math.radians(a),ax[2]) - vecs.extend([v,fcvec.neg(v)]) - v = fcvec.rotate(ax[1],math.radians(a),ax[2]) - vecs.extend([v,fcvec.neg(v)]) + v = DraftVecUtils.rotate(ax[0],math.radians(a),ax[2]) + vecs.extend([v,DraftVecUtils.neg(v)]) + v = DraftVecUtils.rotate(ax[1],math.radians(a),ax[2]) + vecs.extend([v,DraftVecUtils.neg(v)]) for v in vecs: de = Part.Line(last,last.add(v)).toShape() np = self.getPerpendicular(de,point) @@ -457,7 +455,7 @@ class Snapper: snaps = [] if self.isEnabled("midpoint"): if isinstance(shape,Part.Edge): - mp = fcgeo.findMidpoint(shape) + mp = DraftGeomUtils.findMidpoint(shape) if mp: snaps.append([mp,'midpoint',mp]) return snaps @@ -472,7 +470,7 @@ class Snapper: np = self.getPerpendicular(shape,last) elif isinstance(shape.Curve,Part.Circle): dv = last.sub(shape.Curve.Center) - dv = fcvec.scaleTo(dv,shape.Curve.Radius) + dv = DraftVecUtils.scaleTo(dv,shape.Curve.Radius) np = (shape.Curve.Center).add(dv) elif isinstance(shape.Curve,Part.BSplineCurve): pr = shape.Curve.parameter(last) @@ -493,7 +491,7 @@ class Snapper: if self.constraintAxis: tmpEdge = Part.Line(last,last.add(self.constraintAxis)).toShape() # get the intersection points - pt = fcgeo.findIntersection(tmpEdge,shape,True,True) + pt = DraftGeomUtils.findIntersection(tmpEdge,shape,True,True) if pt: for p in pt: snaps.append([p,'ortho',p]) @@ -506,14 +504,14 @@ class Snapper: tmpEdge1 = Part.Line(last,last.add(self.constraintAxis)).toShape() tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() # get the intersection points - pt = fcgeo.findIntersection(tmpEdge1,tmpEdge2,True,True) + pt = DraftGeomUtils.findIntersection(tmpEdge1,tmpEdge2,True,True) if pt: return [pt[0],'ortho',pt[0]] if eline: try: tmpEdge2 = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() # get the intersection points - pt = fcgeo.findIntersection(eline,tmpEdge2,True,True) + pt = DraftGeomUtils.findIntersection(eline,tmpEdge2,True,True) if pt: return [pt[0],'ortho',pt[0]] except: @@ -526,7 +524,7 @@ class Snapper: if self.isEnabled("intersection") and self.isEnabled("extension"): if e1 and e2: # get the intersection points - pts = fcgeo.findIntersection(e1,e2,True,True) + pts = DraftGeomUtils.findIntersection(e1,e2,True,True) if pts: for p in pts: snaps.append([p,'intersection',p]) @@ -569,7 +567,7 @@ class Snapper: if (not self.maxEdges) or (len(obj.Shape.Edges) <= self.maxEdges): for e in obj.Shape.Edges: # get the intersection points - pt = fcgeo.findIntersection(e,shape) + pt = DraftGeomUtils.findIntersection(e,shape) if pt: for p in pt: snaps.append([p,'intersection',p]) @@ -597,7 +595,7 @@ class Snapper: def getPerpendicular(self,edge,pt): "returns a point on an edge, perpendicular to the given point" dv = pt.sub(edge.Vertexes[0].Point) - nv = fcvec.project(dv,fcgeo.vec(edge)) + nv = DraftVecUtils.project(dv,DraftGeomUtils.vec(edge)) np = (edge.Vertexes[0].Point).add(nv) return np @@ -690,7 +688,7 @@ class Snapper: self.constraintAxis = FreeCAD.DraftWorkingPlane.axis # calculating constrained point - cdelta = fcvec.project(delta,self.constraintAxis) + cdelta = DraftVecUtils.project(delta,self.constraintAxis) npoint = self.basepoint.add(cdelta) # setting constrain line diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index ad61cf65d..bde2ad4a7 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -29,9 +29,8 @@ __url__ = "http://free-cad.sourceforge.net" # Generic stuff #--------------------------------------------------------------------------- -import os, FreeCAD, FreeCADGui, WorkingPlane, math, re, importSVG, Draft, Draft_rc +import os, FreeCAD, FreeCADGui, WorkingPlane, math, re, importSVG, Draft, Draft_rc, DraftVecUtils from functools import partial -from draftlibs import fcvec from FreeCAD import Vector from DraftGui import todo,QtCore,QtGui from DraftSnap import * @@ -283,7 +282,7 @@ class SelectPlane: self.display('side') self.finish() elif arg == "currentView": - viewDirection = fcvec.neg(self.view.getViewDirection()) + viewDirection = DraftVecUtils.neg(self.view.getViewDirection()) plane.alignToPointAndAxis(Vector(0,0,0), viewDirection, self.offset) self.display(viewDirection) self.finish() @@ -327,9 +326,8 @@ class Creator: def Activated(self,name="None"): if FreeCAD.activeDraftCommand: FreeCAD.activeDraftCommand.finish() - global Part, fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils self.ui = None self.call = None self.doc = None @@ -348,7 +346,7 @@ class Creator: self.ui.show() rot = self.view.getCameraNode().getField("orientation").getValue() upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(fcvec.neg(self.view.getViewDirection()), Vector(0,0,0), upv) + plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) self.node = [] self.pos = [] self.constrain = None @@ -721,12 +719,12 @@ class Rectangle(Creator): p1 = self.node[0] p3 = self.node[-1] diagonal = p3.sub(p1) - p2 = p1.add(fcvec.project(diagonal, plane.v)) - p4 = p1.add(fcvec.project(diagonal, plane.u)) + p2 = p1.add(DraftVecUtils.project(diagonal, plane.v)) + p4 = p1.add(DraftVecUtils.project(diagonal, plane.u)) length = p4.sub(p1).Length - if abs(fcvec.angle(p4.sub(p1),plane.u,plane.axis)) > 1: length = -length + if abs(DraftVecUtils.angle(p4.sub(p1),plane.u,plane.axis)) > 1: length = -length height = p2.sub(p1).Length - if abs(fcvec.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height + if abs(DraftVecUtils.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height p = plane.getRotation() p.move(p1) try: @@ -847,10 +845,10 @@ class Arc(Creator): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen self.ui.cross(True) - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center if hasMod(arg,MODALT): if not self.altdown: @@ -864,12 +862,12 @@ class Arc(Creator): self.ui.switchUi(False) elif (self.step == 1): # choose radius if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) if hasMod(arg,MODALT): if not self.altdown: @@ -880,20 +878,20 @@ class Arc(Creator): num = int(info['Component'].lstrip('Edge'))-1 ed = ob.Shape.Edges[num] if len(self.tangents) == 2: - cir = fcgeo.circleFrom3tan(self.tangents[0], self.tangents[1], ed) - cl = fcgeo.findClosestCircle(point,cir) + cir = DraftGeomUtils.circleFrom3tan(self.tangents[0], self.tangents[1], ed) + cl = DraftGeomUtils.findClosestCircle(point,cir) self.center = cl.Center self.rad = cl.Radius self.arctrack.setCenter(self.center) else: - self.rad = self.center.add(fcgeo.findDistance(self.center,ed).sub(self.center)).Length + self.rad = self.center.add(DraftGeomUtils.findDistance(self.center,ed).sub(self.center)).Length else: - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) else: if self.altdown: self.ui.cross(True) self.altdown = False - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) self.ui.setRadiusValue(self.rad) self.arctrack.setRadius(self.rad) # Draw constraint tracker line. @@ -907,11 +905,11 @@ class Arc(Creator): self.linetrack.p2(point) self.linetrack.on() elif (self.step == 2): # choose first angle - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if currentrad != 0: - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 - self.linetrack.p2(fcvec.scaleTo(point.sub(self.center),self.rad).add(self.center)) + self.linetrack.p2(DraftVecUtils.scaleTo(point.sub(self.center),self.rad).add(self.center)) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): self.constraintrack.p1(point) @@ -922,11 +920,11 @@ class Arc(Creator): self.ui.setRadiusValue(math.degrees(angle)) self.firstangle = angle else: # choose second angle - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if currentrad != 0: - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 - self.linetrack.p2(fcvec.scaleTo(point.sub(self.center),self.rad).add(self.center)) + self.linetrack.p2(DraftVecUtils.scaleTo(point.sub(self.center),self.rad).add(self.center)) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): self.constraintrack.p1(point) @@ -942,10 +940,10 @@ class Arc(Creator): if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center self.support = getSupport(arg) if hasMod(arg,MODALT): @@ -990,7 +988,7 @@ class Arc(Creator): self.ui.labelRadius.setText("Aperture") self.step = 3 # scale center->point vector for proper display - u = fcvec.scaleTo(point.sub(self.center), self.rad) + u = DraftVecUtils.scaleTo(point.sub(self.center), self.rad) self.arctrack.setStartAngle(self.firstangle) msg(translate("draft", "Pick aperture:\n")) else: # choose second angle @@ -1036,15 +1034,15 @@ class Arc(Creator): if (self.step == 1): self.rad = rad if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) + cir = DraftGeomUtils.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) + cir = DraftGeomUtils.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center if self.closedCircle: @@ -1061,9 +1059,9 @@ class Arc(Creator): elif (self.step == 2): self.ui.labelRadius.setText(str(translate("draft", "Aperture"))) self.firstangle = math.radians(rad) - if fcvec.equals(plane.axis, Vector(1,0,0)): u = Vector(0,self.rad,0) - else: u = fcvec.scaleTo(Vector(1,0,0).cross(plane.axis), self.rad) - urotated = fcvec.rotate(u, math.radians(rad), plane.axis) + if DraftVecUtils.equals(plane.axis, Vector(1,0,0)): u = Vector(0,self.rad,0) + else: u = DraftVecUtils.scaleTo(Vector(1,0,0).cross(plane.axis), self.rad) + urotated = DraftVecUtils.rotate(u, math.radians(rad), plane.axis) self.arctrack.setStartAngle(self.firstangle) self.step = 3 self.ui.radiusValue.setText("") @@ -1139,10 +1137,10 @@ class Polygon(Creator): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen self.ui.cross(True) - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center if hasMod(arg,MODALT): if not self.altdown: @@ -1156,12 +1154,12 @@ class Polygon(Creator): self.ui.switchUi(False) else: # choose radius if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom2tan1pt(self.tangents[0], self.tangents[1], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) - self.center = fcgeo.findClosestCircle(point,cir).Center + cir = DraftGeomUtils.circleFrom1tan2pt(self.tangents[0], self.tanpoints[0], point) + self.center = DraftGeomUtils.findClosestCircle(point,cir).Center self.arctrack.setCenter(self.center) if hasMod(arg,MODALT): if not self.altdown: @@ -1173,20 +1171,20 @@ class Polygon(Creator): num = int(snapped['Component'].lstrip('Edge'))-1 ed = ob.Shape.Edges[num] if len(self.tangents) == 2: - cir = fcgeo.circleFrom3tan(self.tangents[0], self.tangents[1], ed) - cl = fcgeo.findClosestCircle(point,cir) + cir = DraftGeomUtils.circleFrom3tan(self.tangents[0], self.tangents[1], ed) + cl = DraftGeomUtils.findClosestCircle(point,cir) self.center = cl.Center self.rad = cl.Radius self.arctrack.setCenter(self.center) else: - self.rad = self.center.add(fcgeo.findDistance(self.center,ed).sub(self.center)).Length + self.rad = self.center.add(DraftGeomUtils.findDistance(self.center,ed).sub(self.center)).Length else: - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) else: if self.altdown: self.ui.cross(True) self.altdown = False - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) self.ui.setRadiusValue(self.rad) self.arctrack.setRadius(self.rad) # Draw constraint tracker line. @@ -1203,10 +1201,10 @@ class Polygon(Creator): if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) # this is to make sure radius is what you see on screen - if self.center and fcvec.dist(point,self.center) > 0: - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center) > 0: + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center if not self.node: self.support = getSupport(arg) if hasMod(arg,MODALT): @@ -1265,15 +1263,15 @@ class Polygon(Creator): "this function gets called by the toolbar when valid radius have been entered there" self.rad = rad if len(self.tangents) == 2: - cir = fcgeo.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) + cir = DraftGeomUtils.circleFrom2tan1rad(self.tangents[0], self.tangents[1], rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center elif self.tangents and self.tanpoints: - cir = fcgeo.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) + cir = DraftGeomUtils.circleFrom1tan1pt1rad(self.tangents[0],self.tanpoints[0],rad) if self.center: - self.center = fcgeo.findClosestCircle(self.center,cir).Center + self.center = DraftGeomUtils.findClosestCircle(self.center,cir).Center else: self.center = cir[-1].Center self.drawPolygon() @@ -1485,7 +1483,7 @@ class Dimension(Creator): r = point.sub(self.center) self.arctrack.setRadius(r.Length) a = self.arctrack.getAngle(point) - pair = fcgeo.getBoundaryAngles(a,self.pts) + pair = DraftGeomUtils.getBoundaryAngles(a,self.pts) if not (pair[0] < a < pair[1]): self.angledata = [4*math.pi-pair[0],2*math.pi-pair[1]] else: @@ -1496,14 +1494,14 @@ class Dimension(Creator): self.altdown = False self.ui.switchUi(False) if self.dir: - point = self.node[0].add(fcvec.project(point.sub(self.node[0]),self.dir)) + point = self.node[0].add(DraftVecUtils.project(point.sub(self.node[0]),self.dir)) if len(self.node) == 2: if self.arcmode and self.edges: cen = self.edges[0].Curve.Center rad = self.edges[0].Curve.Radius baseray = point.sub(cen) - v2 = fcvec.scaleTo(baseray,rad) - v1 = fcvec.neg(v2) + v2 = DraftVecUtils.scaleTo(baseray,rad) + v1 = DraftVecUtils.neg(v2) if shift: self.node = [cen,cen.add(v2)] self.arcmode = "radius" @@ -1574,7 +1572,7 @@ class Dimension(Creator): # there is already a snapped edge, so we start angular dimension self.edges.append(ed) self.node.extend([v1,v2]) # self.node now has the 4 endpoints - c = fcgeo.findIntersection(self.node[0], + c = DraftGeomUtils.findIntersection(self.node[0], self.node[1], self.node[2], self.node[3], @@ -1593,7 +1591,7 @@ class Dimension(Creator): self.dimtrack.on() else: if self.dir: - point = self.node[0].add(fcvec.project(point.sub(self.node[0]),self.dir)) + point = self.node[0].add(DraftVecUtils.project(point.sub(self.node[0]),self.dir)) self.node.append(point) print "node",self.node self.dimtrack.update(self.node) @@ -1610,7 +1608,7 @@ class Dimension(Creator): # for unlinked arc mode: # if self.arcmode: # v = self.node[1].sub(self.node[0]) - # v = fcvec.scale(v,0.5) + # v = DraftVecUtils.scale(v,0.5) # cen = self.node[0].add(v) # self.node = [self.node[0],self.node[1],cen] self.createObject() @@ -1651,9 +1649,8 @@ class Modifier: def Activated(self,name="None"): if FreeCAD.activeDraftCommand: FreeCAD.activeDraftCommand.finish() - global Part, fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils self.ui = None self.call = None self.commitList = [] @@ -1667,7 +1664,7 @@ class Modifier: FreeCADGui.draftToolBar.show() rot = self.view.getCameraNode().getField("orientation").getValue() upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(fcvec.neg(self.view.getViewDirection()), Vector(0,0,0), upv) + plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) self.node = [] self.ui.sourceCmd = self self.constrain = None @@ -1931,10 +1928,10 @@ class Rotate(Modifier): point,ctrlPoint,info = getPoint(self,arg) self.ui.cross(True) # this is to make sure radius is what you see on screen - if self.center and fcvec.dist(point,self.center): - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): - point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center): + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): + point = point.add(DraftVecUtils.neg(viewdelta)) if self.extendedCopy: if not hasMod(arg,MODALT): self.step = 3 @@ -1942,9 +1939,9 @@ class Rotate(Modifier): if (self.step == 0): pass elif (self.step == 1): - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if (currentrad != 0): - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 self.linetrack.p2(point) # Draw constraint tracker line. @@ -1959,16 +1956,16 @@ class Rotate(Modifier): self.ui.radiusValue.setFocus() self.ui.radiusValue.selectAll() elif (self.step == 2): - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) if (currentrad != 0): - angle = fcvec.angle(plane.u, point.sub(self.center), plane.axis) + angle = DraftVecUtils.angle(plane.u, point.sub(self.center), plane.axis) else: angle = 0 if (angle < self.firstangle): sweep = (2*math.pi-self.firstangle)+angle else: sweep = angle - self.firstangle self.arctrack.setApertureAngle(sweep) - self.ghost.trans.rotation.setValue(coin.SbVec3f(fcvec.tup(plane.axis)),sweep) + self.ghost.trans.rotation.setValue(coin.SbVec3f(DraftVecUtils.tup(plane.axis)),sweep) self.linetrack.p2(point) # Draw constraint tracker line. if hasMod(arg,MODCONSTRAIN): @@ -1984,9 +1981,9 @@ class Rotate(Modifier): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) - if self.center and fcvec.dist(point,self.center): - viewdelta = fcvec.project(point.sub(self.center), plane.axis) - if not fcvec.isNull(viewdelta): point = point.add(fcvec.neg(viewdelta)) + if self.center and DraftVecUtils.dist(point,self.center): + viewdelta = DraftVecUtils.project(point.sub(self.center), plane.axis) + if not DraftVecUtils.isNull(viewdelta): point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): self.center = point self.node = [point] @@ -2002,16 +1999,16 @@ class Rotate(Modifier): self.planetrack.set(point) elif (self.step == 1): self.ui.labelRadius.setText("Rotation") - self.rad = fcvec.dist(point,self.center) + self.rad = DraftVecUtils.dist(point,self.center) self.arctrack.on() self.arctrack.setStartPoint(point) self.ghost.on() self.step = 2 msg(translate("draft", "Pick rotation angle:\n")) else: - currentrad = fcvec.dist(point,self.center) + currentrad = DraftVecUtils.dist(point,self.center) angle = point.sub(self.center).getAngle(plane.u) - if fcvec.project(point.sub(self.center), plane.v).getAngle(plane.v) > 1: + if DraftVecUtils.project(point.sub(self.center), plane.v).getAngle(plane.v) > 1: angle = -angle if (angle < self.firstangle): sweep = (2*math.pi-self.firstangle)+angle @@ -2127,33 +2124,33 @@ class Offset(Modifier): self.ui.cross(True) point,ctrlPoint,info = getPoint(self,arg) if hasMod(arg,MODCONSTRAIN) and self.constrainSeg: - dist = fcgeo.findPerpendicular(point,self.shape,self.constrainSeg[1]) + dist = DraftGeomUtils.findPerpendicular(point,self.shape,self.constrainSeg[1]) e = self.shape.Edges[self.constrainSeg[1]] self.constraintrack.p1(e.Vertexes[0].Point) self.constraintrack.p2(point.add(dist[0])) self.constraintrack.on() else: - dist = fcgeo.findPerpendicular(point,self.shape.Edges) + dist = DraftGeomUtils.findPerpendicular(point,self.shape.Edges) self.constraintrack.off() if dist: self.ghost.on() if self.mode == "Wire": - d = fcvec.neg(dist[0]) - v1 = fcgeo.getTangent(self.shape.Edges[0],point) - v2 = fcgeo.getTangent(self.shape.Edges[dist[1]],point) - a = -fcvec.angle(v1,v2) - self.dvec = fcvec.rotate(d,a,plane.axis) + d = DraftVecUtils.neg(dist[0]) + v1 = DraftGeomUtils.getTangent(self.shape.Edges[0],point) + v2 = DraftGeomUtils.getTangent(self.shape.Edges[dist[1]],point) + a = -DraftVecUtils.angle(v1,v2) + self.dvec = DraftVecUtils.rotate(d,a,plane.axis) occmode = self.ui.occOffset.isChecked() - self.ghost.update(fcgeo.offsetWire(self.shape,self.dvec,occ=occmode),forceclosed=occmode) + self.ghost.update(DraftGeomUtils.offsetWire(self.shape,self.dvec,occ=occmode),forceclosed=occmode) elif self.mode == "BSpline": - d = fcvec.neg(dist[0]) + d = DraftVecUtils.neg(dist[0]) e = self.shape.Edges[0] - basetan = fcgeo.getTangent(e,point) + basetan = DraftGeomUtils.getTangent(e,point) self.npts = [] for p in self.sel.Points: - currtan = fcgeo.getTangent(e,p) - a = -fcvec.angle(currtan,basetan) - self.dvec = fcvec.rotate(d,a,plane.axis) + currtan = DraftGeomUtils.getTangent(e,p) + a = -DraftVecUtils.angle(currtan,basetan) + self.dvec = DraftVecUtils.rotate(d,a,plane.axis) self.npts.append(p.add(self.dvec)) self.ghost.update(self.npts) elif self.mode == "Circle": @@ -2329,12 +2326,12 @@ class Upgrade(Modifier): u = faces.pop(0) for f in faces: u = u.fuse(f) - if fcgeo.isCoplanar(faces): + if DraftGeomUtils.isCoplanar(faces): if self.sel[0].ViewObject.DisplayMode == "Wireframe": f = False else: f = True - u = fcgeo.concatenate(u) + u = DraftGeomUtils.concatenate(u) if not curves: # several coplanar and non-curved faces: they can becoem a Draft wire msg(translate("draft", "Found several objects or faces: making a parametric face\n")) @@ -2384,7 +2381,7 @@ class Upgrade(Modifier): else: # only closed wires for w in wires: - if fcgeo.isPlanar(w): + if DraftGeomUtils.isPlanar(w): f = Part.Face(w) faces.append(f) else: @@ -2405,7 +2402,7 @@ class Upgrade(Modifier): edges = openwires[0].Edges if len(edges) > 1: edges.append(Part.Line(p1,p0).toShape()) - w = Part.Wire(fcgeo.sortEdges(edges)) + w = Part.Wire(DraftGeomUtils.sortEdges(edges)) if len(edges) == 1: if len(w.Vertexes) == 2: msg(translate("draft", "Found 1 open edge: making a line\n")) @@ -2433,7 +2430,7 @@ class Upgrade(Modifier): for e in ob.Shape.Edges: edges.append(e) newob = None - nedges = fcgeo.sortEdges(edges[:]) + nedges = DraftGeomUtils.sortEdges(edges[:]) # for e in nedges: print "debug: ",e.Curve,e.Vertexes[0].Point,e.Vertexes[-1].Point w = Part.Wire(nedges) if len(w.Edges) == len(edges): @@ -2643,7 +2640,7 @@ class Trimex(Modifier): self.extrudeMode = False if self.obj.Shape.Wires: self.edges = self.obj.Shape.Wires[0].Edges - self.edges = fcgeo.sortEdges(self.edges) + self.edges = DraftGeomUtils.sortEdges(self.edges) else: self.edges = self.obj.Shape.Edges self.ghost = [] @@ -2707,7 +2704,7 @@ class Trimex(Modifier): "redraws the ghost in extrude mode" self.newpoint = self.obj.Shape.Faces[0].CenterOfMass dvec = self.point.sub(self.newpoint) - if not shift: delta = fcvec.project(dvec,self.normal) + if not shift: delta = DraftVecUtils.project(dvec,self.normal) else: delta = dvec if self.force: ratio = self.force/delta.Length @@ -2733,7 +2730,7 @@ class Trimex(Modifier): for e in self.edges: vlist.append(e.Vertexes[0].Point) vlist.append(self.edges[-1].Vertexes[-1].Point) if shift: npoint = self.activePoint - else: npoint = fcgeo.findClosest(point,vlist) + else: npoint = DraftGeomUtils.findClosest(point,vlist) if npoint > len(self.edges)/2: reverse = True if alt: reverse = not reverse self.activePoint = npoint @@ -2758,16 +2755,16 @@ class Trimex(Modifier): snapped = self.doc.getObject(snapped['Object']) pts = [] for e in snapped.Shape.Edges: - int = fcgeo.findIntersection(edge,e,True,True) + int = DraftGeomUtils.findIntersection(edge,e,True,True) if int: pts.extend(int) if pts: - point = pts[fcgeo.findClosest(point,pts)] + point = pts[DraftGeomUtils.findClosest(point,pts)] # modifying active edge if isinstance(edge.Curve,Part.Line): - perp = fcgeo.vec(edge).cross(Vector(0,0,1)) + perp = DraftGeomUtils.vec(edge).cross(Vector(0,0,1)) chord = v1.sub(point) - proj = fcvec.project(chord,perp) + proj = DraftVecUtils.project(chord,perp) self.newpoint = Vector.add(point,proj) dist = v1.sub(self.newpoint).Length ghost.p1(self.newpoint) @@ -2776,15 +2773,15 @@ class Trimex(Modifier): if real: if self.force: ray = self.newpoint.sub(v1) - ray = fcvec.scale(ray,self.force/ray.Length) + ray = DraftVecUtils.scale(ray,self.force/ray.Length) self.newpoint = Vector.add(v1,ray) newedges.append(Part.Line(self.newpoint,v2).toShape()) else: center = edge.Curve.Center rad = edge.Curve.Radius - ang1 = fcvec.angle(v2.sub(center)) - ang2 = fcvec.angle(point.sub(center)) - self.newpoint=Vector.add(center,fcvec.rotate(Vector(rad,0,0),-ang2)) + ang1 = DraftVecUtils.angle(v2.sub(center)) + ang2 = DraftVecUtils.angle(point.sub(center)) + self.newpoint=Vector.add(center,DraftVecUtils.rotate(Vector(rad,0,0),-ang2)) self.ui.labelRadius.setText("Angle") dist = math.degrees(-ang2) # if ang1 > ang2: ang1,ang2 = ang2,ang1 @@ -2796,11 +2793,11 @@ class Trimex(Modifier): if real: if self.force: angle = math.radians(self.force) - newray = fcvec.rotate(Vector(rad,0,0),-angle) + newray = DraftVecUtils.rotate(Vector(rad,0,0),-angle) self.newpoint = Vector.add(center,newray) chord = self.newpoint.sub(v2) perp = chord.cross(Vector(0,0,1)) - scaledperp = fcvec.scaleTo(perp,rad) + scaledperp = DraftVecUtils.scaleTo(perp,rad) midpoint = Vector.add(center,scaledperp) newedges.append(Part.Arc(self.newpoint,midpoint,v2).toShape()) ghost.on() @@ -2815,8 +2812,8 @@ class Trimex(Modifier): ghost.p1(edge.Vertexes[0].Point) ghost.p2(edge.Vertexes[-1].Point) else: - ang1 = fcvec.angle(edge.Vertexes[0].Point.sub(center)) - ang2 = fcvec.angle(edge.Vertexes[-1].Point.sub(center)) + ang1 = DraftVecUtils.angle(edge.Vertexes[0].Point.sub(center)) + ang2 = DraftVecUtils.angle(edge.Vertexes[-1].Point.sub(center)) # if ang1 > ang2: ang1,ang2 = ang2,ang1 ghost.setEndAngle(-ang2) ghost.setStartAngle(-ang1) @@ -2961,7 +2958,7 @@ class Scale(Modifier): self.ghost.trans.scaleFactor.setValue([delta.x,delta.y,delta.z]) corr = Vector(self.node[0].x,self.node[0].y,self.node[0].z) corr.scale(delta.x,delta.y,delta.z) - corr = fcvec.neg(corr.sub(self.node[0])) + corr = DraftVecUtils.neg(corr.sub(self.node[0])) self.ghost.trans.translation.setValue([corr.x,corr.y,corr.z]) if self.extendedCopy: if not hasMod(arg,MODALT): self.finish() @@ -3166,9 +3163,9 @@ class Edit(Modifier): self.editpoints.append(self.obj.Shape.Vertexes[2].Point) v = self.obj.Shape.Vertexes self.bx = v[1].Point.sub(v[0].Point) - if self.obj.Length < 0: self.bx = fcvec.neg(self.bx) + if self.obj.Length < 0: self.bx = DraftVecUtils.neg(self.bx) self.by = v[2].Point.sub(v[1].Point) - if self.obj.Height < 0: self.by = fcvec.neg(self.by) + if self.obj.Height < 0: self.by = DraftVecUtils.neg(self.by) elif Draft.getType(self.obj) == "Polygon": self.editpoints.append(self.obj.Placement.Base) self.editpoints.append(self.obj.Shape.Vertexes[0].Point) @@ -3292,8 +3289,8 @@ class Edit(Modifier): self.obj.Placement = p elif self.editing == 1: diag = v.sub(self.obj.Placement.Base) - nx = fcvec.project(diag,self.bx) - ny = fcvec.project(diag,self.by) + nx = DraftVecUtils.project(diag,self.bx) + ny = DraftVecUtils.project(diag,self.by) ax = nx.Length ay = ny.Length if ax and ay: diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 3cc6519d1..5223ebf66 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -25,18 +25,16 @@ __title__="FreeCAD Draft Trackers" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -import FreeCAD,FreeCADGui,math,Draft +import FreeCAD,FreeCADGui,math,Draft, DraftVecUtils from FreeCAD import Vector -from draftlibs import fcvec from pivy import coin from DraftGui import todo class Tracker: "A generic Draft Tracker, to be used by other specific trackers" def __init__(self,dotted=False,scolor=None,swidth=None,children=[],ontop=False): - global Part, fcgeo - import Part - from draftlibs import fcgeo + global Part, DraftGeomUtils + import Part, DraftGeomUtils self.ontop = ontop color = coin.SoBaseColor() color.rgb = scolor or FreeCADGui.draftToolBar.getDefaultColor("ui") @@ -161,8 +159,8 @@ class rectangleTracker(Tracker): def update(self,point): "sets the opposite (diagonal) point of the rectangle" diagonal = point.sub(self.origin) - inpoint1 = self.origin.add(fcvec.project(diagonal,self.v)) - inpoint2 = self.origin.add(fcvec.project(diagonal,self.u)) + inpoint1 = self.origin.add(DraftVecUtils.project(diagonal,self.v)) + inpoint2 = self.origin.add(DraftVecUtils.project(diagonal,self.u)) self.coords.point.set1Value(1,inpoint1.x,inpoint1.y,inpoint1.z) self.coords.point.set1Value(2,point.x,point.y,point.z) self.coords.point.set1Value(3,inpoint2.x,inpoint2.y,inpoint2.z) @@ -204,7 +202,7 @@ class rectangleTracker(Tracker): p1 = Vector(self.coords.point.getValues()[0].getValue()) p2 = Vector(self.coords.point.getValues()[2].getValue()) diag = p2.sub(p1) - return ((fcvec.project(diag,self.u)).Length,(fcvec.project(diag,self.v)).Length) + return ((DraftVecUtils.project(diag,self.u)).Length,(DraftVecUtils.project(diag,self.v)).Length) def getNormal(self): "returns the normal of the rectangle" @@ -233,23 +231,23 @@ class dimTracker(Tracker): def calc(self): import Part if (self.p1 != None) and (self.p2 != None): - points = [fcvec.tup(self.p1,True),fcvec.tup(self.p2,True),\ - fcvec.tup(self.p1,True),fcvec.tup(self.p2,True)] + points = [DraftVecUtils.tup(self.p1,True),DraftVecUtils.tup(self.p2,True),\ + DraftVecUtils.tup(self.p1,True),DraftVecUtils.tup(self.p2,True)] if self.p3 != None: p1 = self.p1 p4 = self.p2 - if fcvec.equals(p1,p4): + if DraftVecUtils.equals(p1,p4): proj = None else: base = Part.Line(p1,p4).toShape() - proj = fcgeo.findDistance(self.p3,base) + proj = DraftGeomUtils.findDistance(self.p3,base) if not proj: p2 = p1 p3 = p4 else: - p2 = p1.add(fcvec.neg(proj)) - p3 = p4.add(fcvec.neg(proj)) - points = [fcvec.tup(p1),fcvec.tup(p2),fcvec.tup(p3),fcvec.tup(p4)] + p2 = p1.add(DraftVecUtils.neg(proj)) + p3 = p4.add(DraftVecUtils.neg(proj)) + points = [DraftVecUtils.tup(p1),DraftVecUtils.tup(p2),DraftVecUtils.tup(p3),DraftVecUtils.tup(p4)] self.coords.point.setValues(0,4,points) class bsplineTracker(Tracker): @@ -340,7 +338,7 @@ class arcTracker(Tracker): center = Vector(c[0],c[1],c[2]) base = FreeCAD.DraftWorkingPlane.u rad = pt.sub(center) - return(fcvec.angle(rad,base,FreeCAD.DraftWorkingPlane.axis)) + return(DraftVecUtils.angle(rad,base,FreeCAD.DraftWorkingPlane.axis)) def getAngles(self): "returns the start and end angles" @@ -496,7 +494,7 @@ class wireTracker(Tracker): "A wire tracker" def __init__(self,wire): self.line = coin.SoLineSet() - self.closed = fcgeo.isReallyClosed(wire) + self.closed = DraftGeomUtils.isReallyClosed(wire) if self.closed: self.line.numVertices.setValue(len(wire.Vertexes)+1) else: @@ -626,11 +624,11 @@ class gridTracker(Tracker): "returns the closest node from the given point" # get the 2D coords. point = FreeCAD.DraftWorkingPlane.projectPoint(point) - u = fcvec.project(point,FreeCAD.DraftWorkingPlane.u) + u = DraftVecUtils.project(point,FreeCAD.DraftWorkingPlane.u) lu = u.Length if u.getAngle(FreeCAD.DraftWorkingPlane.u) > 1.5: lu = -lu - v = fcvec.project(point,FreeCAD.DraftWorkingPlane.v) + v = DraftVecUtils.project(point,FreeCAD.DraftWorkingPlane.v) lv = v.Length if v.getAngle(FreeCAD.DraftWorkingPlane.v) > 1.5: lv = -lv @@ -659,8 +657,7 @@ class boxTracker(Tracker): Tracker.__init__(self,children=[self.trans,m,self.cube]) def update(self,line=None,normal=None): - import WorkingPlane - from draftlibs import fcgeo + import WorkingPlane, DraftGeomUtils if not normal: normal = FreeCAD.DraftWorkingPlane.axis if line: @@ -668,10 +665,10 @@ class boxTracker(Tracker): bp = line[0] lvec = line[1].sub(line[0]) else: - lvec = fcgeo.vec(line.Shape.Edges[0]) + lvec = DraftGeomUtils.vec(line.Shape.Edges[0]) bp = line.Shape.Edges[0].Vertexes[0].Point elif self.baseline: - lvec = fcgeo.vec(self.baseline.Shape.Edges[0]) + lvec = DraftGeomUtils.vec(self.baseline.Shape.Edges[0]) bp = self.baseline.Shape.Edges[0].Vertexes[0].Point else: return @@ -679,12 +676,12 @@ class boxTracker(Tracker): self.cube.width.setValue(lvec.Length) p = WorkingPlane.getPlacementFromPoints([bp,bp.add(lvec),bp.add(right)]) self.trans.rotation.setValue(p.Rotation.Q) - bp = bp.add(fcvec.scale(lvec,0.5)) - bp = bp.add(fcvec.scaleTo(normal,self.cube.depth.getValue()/2)) + bp = bp.add(DraftVecUtils.scale(lvec,0.5)) + bp = bp.add(DraftVecUtils.scaleTo(normal,self.cube.depth.getValue()/2)) self.pos(bp) def pos(self,p): - self.trans.translation.setValue(fcvec.tup(p)) + self.trans.translation.setValue(DraftVecUtils.tup(p)) def width(self,w=None): if w: diff --git a/src/Mod/Draft/draftlibs/fcvec.py b/src/Mod/Draft/DraftVecUtils.py similarity index 100% rename from src/Mod/Draft/draftlibs/fcvec.py rename to src/Mod/Draft/DraftVecUtils.py diff --git a/src/Mod/Draft/Makefile.am b/src/Mod/Draft/Makefile.am index 2502ec4d2..f93f64cfe 100644 --- a/src/Mod/Draft/Makefile.am +++ b/src/Mod/Draft/Makefile.am @@ -13,6 +13,8 @@ data_DATA = \ DraftGui.py \ DraftSnap.py \ DraftTrackers.py \ + DraftVecUtils.py \ + DraftGeomUtils.py \ WorkingPlane.py \ importOCA.py \ importDXF.py \ @@ -28,8 +30,6 @@ nobase_data_DATA = \ draftlibs/dxfImportObjects.py \ draftlibs/dxfLibrary.py \ draftlibs/dxfReader.py \ - draftlibs/fcvec.py \ - draftlibs/fcgeo.py \ draftlibs/__init__.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Draft/WorkingPlane.py b/src/Mod/Draft/WorkingPlane.py index b722f22ff..e41eaabf7 100644 --- a/src/Mod/Draft/WorkingPlane.py +++ b/src/Mod/Draft/WorkingPlane.py @@ -22,9 +22,8 @@ #*************************************************************************** -import FreeCAD, FreeCADGui, math +import FreeCAD, FreeCADGui, math, DraftVecUtils from FreeCAD import Vector -from draftlibs import fcvec __title__="FreeCAD Working Plane utility" __author__ = "Ken Cline" @@ -51,7 +50,7 @@ class plane: self.stored = None def __repr__(self): - return "Workplane x="+str(fcvec.rounded(self.u))+" y="+str(fcvec.rounded(self.v))+" z="+str(fcvec.rounded(self.axis)) + return "Workplane x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis)) def offsetToPoint(self, p, direction=None): ''' @@ -96,10 +95,10 @@ class plane: self.doc = FreeCAD.ActiveDocument self.axis = axis; self.axis.normalize() - if (fcvec.equals(axis, Vector(1,0,0))): + if (DraftVecUtils.equals(axis, Vector(1,0,0))): self.u = Vector(0,1,0) self.v = Vector(0,0,1) - elif (fcvec.equals(axis, Vector(-1,0,0))): + elif (DraftVecUtils.equals(axis, Vector(-1,0,0))): self.u = Vector(0,-1,0) self.v = Vector(0,0,1) elif upvec: @@ -109,12 +108,12 @@ class plane: else: self.v = axis.cross(Vector(1,0,0)) self.v.normalize() - self.u = fcvec.rotate(self.v, -math.pi/2, self.axis) + self.u = DraftVecUtils.rotate(self.v, -math.pi/2, self.axis) offsetVector = Vector(axis); offsetVector.multiply(offset) self.position = point.add(offsetVector) self.weak = False # FreeCAD.Console.PrintMessage("(position = " + str(self.position) + ")\n") - # FreeCAD.Console.PrintMessage("Current workplane: x="+str(fcvec.rounded(self.u))+" y="+str(fcvec.rounded(self.v))+" z="+str(fcvec.rounded(self.axis))+"\n") + # FreeCAD.Console.PrintMessage("Current workplane: x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis))+"\n") def alignToCurve(self, shape, offset): if shape.ShapeType == 'Edge': @@ -162,7 +161,7 @@ class plane: def getRotation(self): "returns a placement describing the working plane orientation ONLY" - m = fcvec.getPlaneRotation(self.u,self.v,self.axis) + m = DraftVecUtils.getPlaneRotation(self.u,self.v,self.axis) return FreeCAD.Placement(m) def getPlacement(self): @@ -197,15 +196,15 @@ class plane: def getLocalCoords(self,point): "returns the coordinates of a given point on the working plane" - xv = fcvec.project(point,self.u) + xv = DraftVecUtils.project(point,self.u) x = xv.Length if xv.getAngle(self.u) > 1: x = -x - yv = fcvec.project(point,self.v) + yv = DraftVecUtils.project(point,self.v) y = yv.Length if yv.getAngle(self.v) > 1: y = -y - zv = fcvec.project(point,self.axis) + zv = DraftVecUtils.project(point,self.axis) z = zv.Length if zv.getAngle(self.axis) > 1: z = -z @@ -213,9 +212,9 @@ class plane: def getGlobalCoords(self,point): "returns the global coordinates of the given point, taken relatively to this working plane" - vx = fcvec.scale(self.u,point.x) - vy = fcvec.scale(self.v,point.y) - vz = fcvec.scale(self.axis,point.z) + vx = DraftVecUtils.scale(self.u,point.x) + vy = DraftVecUtils.scale(self.v,point.y) + vz = DraftVecUtils.scale(self.axis,point.z) return (vx.add(vy)).add(vz) def getClosestAxis(self,point): @@ -223,9 +222,9 @@ class plane: ax = point.getAngle(self.u) ay = point.getAngle(self.v) az = point.getAngle(self.axis) - bx = point.getAngle(fcvec.neg(self.u)) - by = point.getAngle(fcvec.neg(self.v)) - bz = point.getAngle(fcvec.neg(self.axis)) + bx = point.getAngle(DraftVecUtils.neg(self.u)) + by = point.getAngle(DraftVecUtils.neg(self.v)) + bz = point.getAngle(DraftVecUtils.neg(self.axis)) b = min(ax,ay,az,bx,by,bz) if b in [ax,bx]: return "x" diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 2c0474f8e..f71e10166 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -40,8 +40,8 @@ lines, polylines, lwpolylines, circles, arcs, texts, colors,layers (from groups) ''' -import FreeCAD, os, Part, math, re, string, Mesh, Draft -from draftlibs import fcvec, dxfColorMap, dxfLibrary, fcgeo +import FreeCAD, os, Part, math, re, string, Mesh, Draft, DraftVecUtils, DraftGeomUtils +from draftlibs import dxfColorMap, dxfLibrary from draftlibs.dxfReader import readDXF from Draft import _Dimension, _ViewProviderDimension from FreeCAD import Vector @@ -134,10 +134,10 @@ def calcBulge(v1,bulge,v2): ''' chord = v2.sub(v1) sagitta = (bulge * chord.Length)/2 - startpoint = v1.add(fcvec.scale(chord,0.5)) + startpoint = v1.add(DraftVecUtils.scale(chord,0.5)) perp = chord.cross(Vector(0,0,1)) - if not fcvec.isNull(perp): perp.normalize() - endpoint = fcvec.scale(perp,sagitta) + if not DraftVecUtils.isNull(perp): perp.normalize() + endpoint = DraftVecUtils.scale(perp,sagitta) return startpoint.add(endpoint) def getGroup(ob,exportList): @@ -218,7 +218,7 @@ class fcformat: v1 = FreeCAD.Vector(r1,g1,b1) v2 = FreeCAD.Vector(r2,g2,b2) v = v2.sub(v1) - v = fcvec.scale(v,0.5) + v = DraftVecUtils.scale(v,0.5) cv = v1.add(v) else: c1 = bparams.GetUnsigned("BackgroundColor") @@ -348,7 +348,7 @@ def drawLine(line,shapemode=False): if (len(line.points) > 1): v1=vec(line.points[0]) v2=vec(line.points[1]) - if not fcvec.equals(v1,v2): + if not DraftVecUtils.equals(v1,v2): try: if (fmt.paramstyle >= 4) and (not shapemode): return Draft.makeWire([v1,v2]) @@ -370,11 +370,11 @@ def drawPolyline(polyline,shapemode=False,num=None): v1 = vec(p1) v2 = vec(p2) verts.append(v1) - if not fcvec.equals(v1,v2): + if not DraftVecUtils.equals(v1,v2): if polyline.points[p].bulge: curves = True cv = calcBulge(v1,polyline.points[p].bulge,v2) - if fcvec.isColinear([v1,cv,v2]): + if DraftVecUtils.isColinear([v1,cv,v2]): try: edges.append(Part.Line(v1,v2).toShape()) except: warn(polyline,num) else: @@ -390,8 +390,8 @@ def drawPolyline(polyline,shapemode=False,num=None): v1 = vec(p1) v2 = vec(p2) cv = calcBulge(v1,polyline.points[-1].bulge,v2) - if not fcvec.equals(v1,v2): - if fcvec.isColinear([v1,cv,v2]): + if not DraftVecUtils.equals(v1,v2): + if DraftVecUtils.isColinear([v1,cv,v2]): try: edges.append(Part.Line(v1,v2).toShape()) except: @@ -722,11 +722,11 @@ def addText(text,attrib=False): rz = rawValue(text,31) if rx or ry or rz: xv = Vector(rx,ry,rz) - if not fcvec.isNull(xv): - ax = fcvec.neg(xv.cross(Vector(1,0,0))) - if fcvec.isNull(ax): + if not DraftVecUtils.isNull(xv): + ax = DraftVecUtils.neg(xv.cross(Vector(1,0,0))) + if DraftVecUtils.isNull(ax): ax = Vector(0,0,1) - ang = -math.degrees(fcvec.angle(xv,Vector(1,0,0),ax)) + ang = -math.degrees(DraftVecUtils.angle(xv,Vector(1,0,0),ax)) Draft.rotate(newob,ang,axis=ax) elif hasattr(text,"rotation"): if text.rotation: @@ -885,7 +885,7 @@ def processdxf(document,filename): edges = [] for s in shapes: edges.extend(s.Edges) - shapes = fcgeo.findWires(edges) + shapes = DraftGeomUtils.findWires(edges) for s in shapes: newob = addObject(s) @@ -1198,13 +1198,13 @@ def getArcData(edge): # check the midpoint seems more reliable ve1 = edge.Vertexes[0].Point ve2 = edge.Vertexes[-1].Point - ang1 = -math.degrees(fcvec.angle(ve1.sub(ce))) - ang2 = -math.degrees(fcvec.angle(ve2.sub(ce))) - ve3 = fcgeo.findMidpoint(edge) - ang3 = -math.degrees(fcvec.angle(ve3.sub(ce))) + ang1 = -math.degrees(DraftVecUtils.angle(ve1.sub(ce))) + ang2 = -math.degrees(DraftVecUtils.angle(ve2.sub(ce))) + ve3 = DraftGeomUtils.findMidpoint(edge) + ang3 = -math.degrees(DraftVecUtils.angle(ve3.sub(ce))) if (ang3 < ang1) and (ang2 < ang3): ang1, ang2 = ang2, ang1 - return fcvec.tup(ce), radius, ang1, ang2 + return DraftVecUtils.tup(ce), radius, ang1, ang2 def getSplineSegs(edge): "returns an array of vectors from a bSpline edge" @@ -1228,18 +1228,18 @@ def getSplineSegs(edge): def getWire(wire,nospline=False): "returns an array of dxf-ready points and bulges from a wire" - edges = fcgeo.sortEdges(wire.Edges) + edges = DraftGeomUtils.sortEdges(wire.Edges) points = [] for edge in edges: v1 = edge.Vertexes[0].Point if len(edge.Vertexes) < 2: points.append((v1.x,v1.y,v1.z,None,None,0.0)) elif (isinstance(edge.Curve,Part.Circle)): - mp = fcgeo.findMidpoint(edge) + mp = DraftGeomUtils.findMidpoint(edge) v2 = edge.Vertexes[-1].Point c = edge.Curve.Center - angle = abs(fcvec.angle(v1.sub(c),v2.sub(c))) - # if (fcvec.angle(v2.sub(c)) < fcvec.angle(v1.sub(c))): + angle = abs(DraftVecUtils.angle(v1.sub(c),v2.sub(c))) + # if (DraftVecUtils.angle(v2.sub(c)) < DraftVecUtils.angle(v1.sub(c))): # angle = -angle # polyline bulge -> negative makes the arc go clockwise bul = math.tan(angle/4) @@ -1259,9 +1259,9 @@ def getWire(wire,nospline=False): points.append((p.x,p.y,p.z,None,None,0.0)) else: points.append((v1.x,v1.y,v1.z,None,None,0.0)) - if not fcgeo.isReallyClosed(wire): + if not DraftGeomUtils.isReallyClosed(wire): v = edges[-1].Vertexes[-1].Point - points.append(fcvec.tup(v)) + points.append(DraftVecUtils.tup(v)) # print "wire verts: ",points return points @@ -1289,7 +1289,7 @@ def writeShape(ob,dxfobject,nospline=False): layer=getGroup(ob,exportList))) else: dxfobject.append(dxfLibrary.PolyLine(getWire(wire,nospline), [0.0,0.0,0.0], - int(fcgeo.isReallyClosed(wire)), color=getACI(ob), + int(DraftGeomUtils.isReallyClosed(wire)), color=getACI(ob), layer=getGroup(ob,exportList))) if len(processededges) < len(ob.Shape.Edges): # lone edges loneedges = [] @@ -1318,7 +1318,7 @@ def writeShape(ob,dxfobject,nospline=False): else: # anything else is treated as lines ve1=edge.Vertexes[0].Point ve2=edge.Vertexes[1].Point - dxfobject.append(dxfLibrary.Line([fcvec.tup(ve1), fcvec.tup(ve2)], + dxfobject.append(dxfLibrary.Line([DraftVecUtils.tup(ve1), DraftVecUtils.tup(ve2)], color=getACI(ob), layer=getGroup(ob,exportList))) @@ -1377,7 +1377,7 @@ def export(objectslist,filename,nospline=False): # temporary - as dxfLibrary doesn't support mtexts well, we use several single-line texts # well, anyway, at the moment, Draft only writes single-line texts, so... for text in ob.LabelText: - point = fcvec.tup(FreeCAD.Vector(ob.Position.x, + point = DraftVecUtils.tup(FreeCAD.Vector(ob.Position.x, ob.Position.y-ob.LabelText.index(text), ob.Position.z)) if gui: height = float(ob.ViewObject.FontSize) @@ -1388,14 +1388,14 @@ def export(objectslist,filename,nospline=False): layer=getGroup(ob,exportList))) elif 'Dimline' in ob.PropertiesList: - p1 = fcvec.tup(ob.Start) - p2 = fcvec.tup(ob.End) + p1 = DraftVecUtils.tup(ob.Start) + p2 = DraftVecUtils.tup(ob.End) base = Part.Line(ob.Start,ob.End).toShape() - proj = fcgeo.findDistance(ob.Dimline,base) + proj = DraftGeomUtils.findDistance(ob.Dimline,base) if not proj: - pbase = fcvec.tup(ob.End) + pbase = DraftVecUtils.tup(ob.End) else: - pbase = fcvec.tup(ob.End.add(fcvec.neg(proj))) + pbase = DraftVecUtils.tup(ob.End.add(DraftVecUtils.neg(proj))) dxf.append(dxfLibrary.Dimension(pbase,p1,p2,color=getACI(ob), layer=getGroup(ob,exportList))) diff --git a/src/Mod/Draft/importOCA.py b/src/Mod/Draft/importOCA.py index 58131d830..79e769aa2 100644 --- a/src/Mod/Draft/importOCA.py +++ b/src/Mod/Draft/importOCA.py @@ -29,8 +29,7 @@ __url__ = ["http://yorik.orgfree.com","http://free-cad.sourceforge.net"] This script imports OCA/gcad files into FreeCAD. ''' -import FreeCAD, os, Part, math -from draftlibs import fcvec, fcgeo +import FreeCAD, os, Part, math, DraftVecUtils, DraftGeomUtils from FreeCAD import Vector try: import FreeCADGui @@ -56,7 +55,7 @@ def getpoint(data): if (data[1][0] == "R"): return objects[data[0]].add(objects[data[1]]) elif (data[1][0] == "C"): - return fcgeo.findProjection(objects[data[0]],objects[data[1]]) + return DraftGeomUtils.findProjection(objects[data[0]],objects[data[1]]) elif (data[0][0] == "C"): if objects[data[0]]: p1 = objects[data[0]].Curve.Position @@ -65,7 +64,7 @@ def getpoint(data): else: if (data[1][0] == "L"): l = objects[data[1]] - return p1.add(fcgeo.vec(l)) + return p1.add(DraftGeomUtils.vec(l)) def getarea(data): "turns an OCA area definition into a FreeCAD Part Wire" @@ -111,7 +110,7 @@ def getarc(data): c = Part.Circle() c.Center = verts[0] if rad: c.Radius = rad - else: c.Radius = fcvec.new(verts[0],verts[1]).Length + else: c.Radius = DraftVecUtils.new(verts[0],verts[1]).Length elif (data[0][0] == "L"): # 2-lines circle lines = [] @@ -121,7 +120,7 @@ def getarc(data): rad = float(data[p+1]) elif (data[p][0] == "L"): lines.append(objects[data[p]]) - circles = fcgeo.circleFrom2LinesRadius(lines[0],lines[1],rad) + circles = DraftGeomUtils.circleFrom2LinesRadius(lines[0],lines[1],rad) if circles: c = circles[0] if c: return c.toShape() @@ -268,7 +267,7 @@ def export(exportList,filename): oca.write("C"+str(count)+"=ARC ") oca.write(writepoint(e.Vertexes[0].Point)) oca.write(" ") - oca.write(writepoint(fcgeo.findMidpoint(e))) + oca.write(writepoint(DraftGeomUtils.findMidpoint(e))) oca.write(" ") oca.write(writepoint(e.Vertexes[-1].Point)) else: diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index b49d4735c..099041d0a 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -38,9 +38,7 @@ currently unsupported: use, image # implement inherting fill style from group # handle relative units -import xml.sax, string, FreeCAD, os, math, re, Draft -from draftlibs import fcvec -from draftlibs import fcgeo +import xml.sax, string, FreeCAD, os, math, re, Draft, DraftVecUtils, DraftGeomUtils from FreeCAD import Vector try: import FreeCADGui @@ -271,7 +269,7 @@ def makewire(path,checkclosed=False,donttry=False): #ToDo Do not catch all exceptions if not donttry: try: - sh = Part.Wire(fcgeo.sortEdges(path)) + sh = Part.Wire(DraftGeomUtils.sortEdges(path)) #sh = Part.Wire(path) isok = (not checkclosed) or sh.isClosed() except:# BRep_API:command not done @@ -334,13 +332,13 @@ def arcend2center(lastvec,currentvec,rx,ry,xrotation=0.0,correction=False): m2=FreeCAD.Matrix() m2.rotateZ(xrotation) centeroff = currentvec.add(lastvec) - centeroff = fcvec.scale(centeroff,.5) + centeroff = DraftVecUtils.scale(centeroff,.5) vcenter = m2.multiply(vcx1).add(centeroff) # Step3 F.6.5.3 #angle1 = Vector(1,0,0).getAngle(Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0)) # F.6.5.5 #angledelta = Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0).getAngle(Vector((-v1.x-vcx1.x)/rx,(-v1.y-vcx1.y)/ry,0)) # F.6.5.6 #we need the right sign for the angle - angle1 = fcvec.angle(Vector(1,0,0),Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0)) # F.6.5.5 - angledelta = fcvec.angle(Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0),Vector((-v1.x-vcx1.x)/rx,(-v1.y-vcx1.y)/ry,0)) # F.6.5.6 + angle1 = DraftVecUtils.angle(Vector(1,0,0),Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0)) # F.6.5.5 + angledelta = DraftVecUtils.angle(Vector((v1.x-vcx1.x)/rx,(v1.y-vcx1.y)/ry,0),Vector((-v1.x-vcx1.x)/rx,(-v1.y-vcx1.y)/ry,0)) # F.6.5.6 results.append((vcenter,angle1,angledelta)) return results,(rx,ry) @@ -558,7 +556,7 @@ class svgHandler(xml.sax.ContentHandler): currentvec = lastvec.add(Vector(x,-y,0)) else: currentvec = Vector(x,-y,0) - if not fcvec.equals(lastvec,currentvec): + if not DraftVecUtils.equals(lastvec,currentvec): seg = Part.Line(lastvec,currentvec).toShape() FreeCAD.Console.PrintMessage("line %s %s\n" %(lastvec,currentvec)) lastvec = currentvec @@ -599,15 +597,15 @@ class svgHandler(xml.sax.ContentHandler): # here is a better way to find the perpendicular if sweepflag == 1: # clockwise - perp = fcvec.rotate2D(chord,-math.pi/2) + perp = DraftVecUtils.rotate2D(chord,-math.pi/2) else: # anticlockwise - perp = fcvec.rotate2D(chord,math.pi/2) - chord = fcvec.scale(chord,.5) + perp = DraftVecUtils.rotate2D(chord,math.pi/2) + chord = DraftVecUtils.scale(chord,.5) if chord.Length > rx: a = 0 else: a = math.sqrt(rx**2-chord.Length**2) s = rx - a - perp = fcvec.scale(perp,s/perp.Length) + perp = DraftVecUtils.scale(perp,s/perp.Length) midpoint = lastvec.add(chord.add(perp)) seg = Part.Arc(lastvec,midpoint,currentvec).toShape() else:# big arc or elliptical arc @@ -676,7 +674,7 @@ class svgHandler(xml.sax.ContentHandler): currentvec = Vector(x,-y,0) pole2 = Vector(p2x,-p2y,0) - if not fcvec.equals(currentvec,lastvec): + if not DraftVecUtils.equals(currentvec,lastvec): mainv = currentvec.sub(lastvec) pole1v = lastvec.add(pole1) pole2v = currentvec.add(pole2) @@ -718,7 +716,7 @@ class svgHandler(xml.sax.ContentHandler): else: currentvec = Vector(x,-y,0) - if not fcvec.equals(currentvec,lastvec): + if not DraftVecUtils.equals(currentvec,lastvec): if True and \ pole.distanceToLine(lastvec,currentvec) < 20**(-1*(2+Draft.precision())): #print "straight segment" @@ -733,7 +731,7 @@ class svgHandler(xml.sax.ContentHandler): lastpole = ('quadratic',pole) path.append(seg) elif (d == "Z") or (d == "z"): - if not fcvec.equals(lastvec,firstvec): + if not DraftVecUtils.equals(lastvec,firstvec): seg = Part.Line(lastvec,firstvec).toShape() path.append(seg) if path: #the path should be closed by now @@ -821,7 +819,7 @@ class svgHandler(xml.sax.ContentHandler): esh.append(arc.toShape()) for esh1,esh2 in zip(esh[-1:]+esh[:-1],esh): p1,p2 = esh1.Vertexes[-1].Point,esh2.Vertexes[0].Point - if not fcvec.equals(p1,p2): + if not DraftVecUtils.equals(p1,p2): edges.append(Part.Line(esh1.Vertexes[-1].Point,esh2.Vertexes[0].Point).toShape()) #straight segments edges.append(esh2) # elliptical segments sh = Part.Wire(edges) @@ -859,7 +857,7 @@ class svgHandler(xml.sax.ContentHandler): points=points+points[:2] # emulate closepath for svgx,svgy in zip(points[2::2],points[3::2]): currentvec = Vector(svgx,-svgy,0) - if not fcvec.equals(lastvec,currentvec): + if not DraftVecUtils.equals(lastvec,currentvec): seg = Part.Line(lastvec,currentvec).toShape() #print "polyline seg ",lastvec,currentvec lastvec = currentvec diff --git a/src/WindowsInstaller/ModDraft.wxi b/src/WindowsInstaller/ModDraft.wxi index 13fcc92ff..720a39810 100644 --- a/src/WindowsInstaller/ModDraft.wxi +++ b/src/WindowsInstaller/ModDraft.wxi @@ -38,6 +38,8 @@ + + @@ -46,8 +48,6 @@ - - From b1de8d217e20ce36cca92b42e3c667db6fef7bfc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 12:00:03 -0300 Subject: [PATCH 217/517] Further Draft lib name fixes --- src/Mod/Arch/ArchSectionPlane.py | 3 +- src/Mod/Draft/DraftGeomUtils.py | 170 +++++++++++++++---------------- 2 files changed, 87 insertions(+), 86 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 59c802382..e1230e59f 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,Drawing,math,Draft,ArchCommands, DraftVecUtils +import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,math,Draft,ArchCommands, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore from pivy import coin @@ -197,6 +197,7 @@ class _ArchDrawingView: else: # render using the Drawing module + import Drawing shapes = [] for o in objs: if o.isDerivedFrom("Part::Feature"): diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index ccacbf62c..16468ad0c 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -27,7 +27,7 @@ __url__ = ["http://free-cad.sourceforge.net"] "this file contains generic geometry functions for manipulating Part shapes" -import FreeCAD, Part, fcvec, math, cmath +import FreeCAD, Part, DraftVecUtils, math, cmath from FreeCAD import Vector NORM = Vector(0,0,1) # provisory normal direction for all geometry ops. @@ -51,7 +51,7 @@ def vec(edge): def edg(p1,p2): "edg(Vector,Vector) -- returns an edge from 2 vectors" if isinstance(p1,FreeCAD.Vector) and isinstance(p2,FreeCAD.Vector): - if fcvec.equals(p1,p2): return None + if DraftVecUtils.equals(p1,p2): return None else: return Part.Line(p1,p2).toShape() def getVerts(shape): @@ -85,7 +85,7 @@ def isPtOnEdge(pt,edge) : '''isPtOnEdge(Vector,edge) -- Tests if a point is on an edge''' if isinstance(edge.Curve,Part.Line) : orig = edge.Vertexes[0].Point - if fcvec.isNull(pt.sub(orig).cross(vec(edge))) : + if DraftVecUtils.isNull(pt.sub(orig).cross(vec(edge))) : return pt.sub(orig).Length <= vec(edge).Length and pt.sub(orig).dot(vec(edge)) >= 0 else : return False @@ -101,16 +101,16 @@ def isPtOnEdge(pt,edge) : else : begin = edge.Vertexes[0].Point end = edge.Vertexes[-1].Point - if fcvec.isNull(pt.sub(begin)) or fcvec.isNull(pt.sub(end)) : + if DraftVecUtils.isNull(pt.sub(begin)) or DraftVecUtils.isNull(pt.sub(end)) : return True else : # newArc = Part.Arc(begin,pt,end) - # return fcvec.isNull(newArc.Center.sub(center)) \ - # and fcvec.isNull(newArc.Axis-axis) \ + # return DraftVecUtils.isNull(newArc.Center.sub(center)) \ + # and DraftVecUtils.isNull(newArc.Axis-axis) \ # and round(newArc.Radius-radius,precision) == 0 - angle1 = fcvec.angle(begin.sub(center)) - angle2 = fcvec.angle(end.sub(center)) - anglept = fcvec.angle(pt.sub(center)) + angle1 = DraftVecUtils.angle(begin.sub(center)) + angle2 = DraftVecUtils.angle(end.sub(center)) + anglept = DraftVecUtils.angle(pt.sub(center)) if (angle1 < anglept) and (anglept < angle2): return True return False @@ -165,8 +165,8 @@ def findEdge(anEdge,aList): '''findEdge(anEdge,aList): returns True if anEdge is found in aList of edges''' for e in range(len(aList)): if str(anEdge.Curve) == str(aList[e].Curve): - if fcvec.equals(anEdge.Vertexes[0].Point,aList[e].Vertexes[0].Point): - if fcvec.equals(anEdge.Vertexes[-1].Point,aList[e].Vertexes[-1].Point): + if DraftVecUtils.equals(anEdge.Vertexes[0].Point,aList[e].Vertexes[0].Point): + if DraftVecUtils.equals(anEdge.Vertexes[-1].Point,aList[e].Vertexes[-1].Point): return(e) return None @@ -202,13 +202,13 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F return [pt2] #we have 2 straight lines - if fcvec.isNull(pt2.sub(pt1).cross(pt3.sub(pt1)).cross(pt2.sub(pt4).cross(pt3.sub(pt4)))): + if DraftVecUtils.isNull(pt2.sub(pt1).cross(pt3.sub(pt1)).cross(pt2.sub(pt4).cross(pt3.sub(pt4)))): vec1 = pt2.sub(pt1) ; vec2 = pt4.sub(pt3) - if fcvec.isNull(vec1) or fcvec.isNull(vec2): + if DraftVecUtils.isNull(vec1) or DraftVecUtils.isNull(vec2): return [] vec1.normalize() ; vec2.normalize() cross = vec1.cross(vec2) - if not fcvec.isNull(cross) : + if not DraftVecUtils.isNull(cross) : k = ((pt3.z-pt1.z)*(vec2.x-vec2.y)+(pt3.y-pt1.y)*(vec2.z-vec2.x)+ \ (pt3.x-pt1.x)*(vec2.y-vec2.z))/(cross.x+cross.y+cross.z) vec1.scale(k,k,k) @@ -251,7 +251,7 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F elif (pt2 in [pt3,pt4]): return [pt2] - if fcvec.isNull(pt1.sub(center).cross(pt2.sub(center)).cross(arc.Curve.Axis)) : + if DraftVecUtils.isNull(pt1.sub(center).cross(pt2.sub(center)).cross(arc.Curve.Axis)) : # Line and Arc are on same plane dOnLine = center.sub(pt1).dot(dirVec) @@ -303,18 +303,18 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F axis1, axis2 = edge1.Curve.Axis , edge2.Curve.Axis c2c = cent2.sub(cent1) - if fcvec.isNull(axis1.cross(axis2)) : + if DraftVecUtils.isNull(axis1.cross(axis2)) : if round(c2c.dot(axis1),precision) == 0 : # circles are on same plane dc2c = c2c.Length ; - if not fcvec.isNull(c2c): c2c.normalize() + if not DraftVecUtils.isNull(c2c): c2c.normalize() if round(rad1+rad2-dc2c,precision) < 0 \ or round(rad1-dc2c-rad2,precision) > 0 or round(rad2-dc2c-rad1,precision) > 0 : return [] else : norm = c2c.cross(axis1) - if not fcvec.isNull(norm): norm.normalize() - if fcvec.isNull(norm): x = 0 + if not DraftVecUtils.isNull(norm): norm.normalize() + if DraftVecUtils.isNull(norm): x = 0 else: x = (dc2c**2 + rad1**2 - rad2**2)/(2*dc2c) y = abs(rad1**2 - x**2)**(0.5) c2c.scale(x,x,x) @@ -369,8 +369,8 @@ def geom(edge): v2 = edge.Vertexes[-1].Point c = edge.Curve.Center cu = Part.Circle(edge.Curve.Center,edge.Curve.Axis,edge.Curve.Radius) - a1 = -fcvec.angle(v1.sub(c),ref,edge.Curve.Axis) - a2 = -fcvec.angle(v2.sub(c),ref,edge.Curve.Axis) + a1 = -DraftVecUtils.angle(v1.sub(c),ref,edge.Curve.Axis) + a2 = -DraftVecUtils.angle(v2.sub(c),ref,edge.Curve.Axis) print "creating sketch arc from ",cu, ", p1=",v1, " (",math.degrees(a1), "d) p2=",v2," (", math.degrees(a2),"d)" p= Part.ArcOfCircle(cu,a1,a2) return p @@ -382,7 +382,7 @@ def mirror (point, edge): normPoint = point.add(findDistance(point, edge, False)) if normPoint: normPoint_point = Vector.sub(point, normPoint) - normPoint_refl = fcvec.neg(normPoint_point) + normPoint_refl = DraftVecUtils.neg(normPoint_point) refl = Vector.add(normPoint, normPoint_refl) return refl else: @@ -547,13 +547,13 @@ def findWires(edgeslist): return False if len(e2.Vertexes) < 2: return False - if fcvec.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point): + if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point): return True - if fcvec.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point): + if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point): return True - if fcvec.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point): + if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point): return True - if fcvec.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point): + if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point): return True return False @@ -656,7 +656,7 @@ def findMidpoint(edge): if len(edge.Vertexes) == 1: # Circle dv = first.sub(center) - dv = fcvec.neg(dv) + dv = DraftVecUtils.neg(dv) return center.add(dv) axis = edge.Curve.Axis chord = last.sub(first) @@ -665,12 +665,12 @@ def findMidpoint(edge): ray = first.sub(center) apothem = ray.dot(perp) sagitta = radius - apothem - startpoint = Vector.add(first, fcvec.scale(chord,0.5)) - endpoint = fcvec.scaleTo(perp,sagitta) + startpoint = Vector.add(first, DraftVecUtils.scale(chord,0.5)) + endpoint = DraftVecUtils.scaleTo(perp,sagitta) return Vector.add(startpoint,endpoint) elif isinstance(edge.Curve,Part.Line): - halfedge = fcvec.scale(last.sub(first),.5) + halfedge = DraftVecUtils.scale(last.sub(first),.5) return Vector.add(first,halfedge) else: @@ -759,7 +759,7 @@ def isReallyClosed(wire): if len(wire.Edges) == len(wire.Vertexes): return True v1 = wire.Vertexes[0].Point v2 = wire.Vertexes[-1].Point - if fcvec.equals(v1,v2): return True + if DraftVecUtils.equals(v1,v2): return True return False def getNormal(shape): @@ -784,7 +784,7 @@ def getNormal(shape): if FreeCAD.GuiUp: import Draft vdir = Draft.get3DView().getViewDirection() - if n.getAngle(vdir) < 0.78: n = fcvec.neg(n) + if n.getAngle(vdir) < 0.78: n = DraftVecUtils.neg(n) return n def offsetWire(wire,dvec,bind=False,occ=False): @@ -815,8 +815,8 @@ def offsetWire(wire,dvec,bind=False,occ=False): curredge = edges[i] delta = dvec if i != 0: - angle = fcvec.angle(vec(edges[0]),vec(curredge),norm) - delta = fcvec.rotate(delta,angle,norm) + angle = DraftVecUtils.angle(vec(edges[0]),vec(curredge),norm) + delta = DraftVecUtils.rotate(delta,angle,norm) nedge = offset(curredge,delta) nedges.append(nedge) nedges = connect(nedges,closed) @@ -890,7 +890,7 @@ def findDistance(point,edge,strict=False): chord = edge.Vertexes[0].Point.sub(point) norm = segment.cross(chord) perp = segment.cross(norm) - dist = fcvec.project(chord,perp) + dist = DraftVecUtils.project(chord,perp) if not dist: return None newpoint = point.add(dist) if (dist.Length == 0): @@ -912,14 +912,14 @@ def findDistance(point,edge,strict=False): center = edge.Curve.Center segment = center.sub(point) ratio = (segment.Length - edge.Curve.Radius) / segment.Length - dist = fcvec.scale(segment,ratio) + dist = DraftVecUtils.scale(segment,ratio) newpoint = Vector.add(point, dist) if (dist.Length == 0): return None if strict and ve2: - ang1 = fcvec.angle(ve1.sub(center)) - ang2 = fcvec.angle(ve2.sub(center)) - angpt = fcvec.angle(newpoint.sub(center)) + ang1 = DraftVecUtils.angle(ve1.sub(center)) + ang2 = DraftVecUtils.angle(ve2.sub(center)) + angpt = DraftVecUtils.angle(newpoint.sub(center)) if ((angpt <= ang2 and angpt >= ang1) or (angpt <= ang1 and angpt >= ang2)): return dist else: @@ -954,15 +954,15 @@ def angleBisection(edge1, edge2): int = findIntersection(edge1, edge2, True, True) if int: line1Dir = p2.sub(p1) - angleDiff = fcvec.angle(line1Dir, p4.sub(p3)) + angleDiff = DraftVecUtils.angle(line1Dir, p4.sub(p3)) ang = angleDiff * 0.5 origin = int[0] line1Dir.normalize() - dir = fcvec.rotate(line1Dir, ang) + dir = DraftVecUtils.rotate(line1Dir, ang) return Part.Line(origin,origin.add(dir)).toShape() else: diff = p3.sub(p1) - origin = p1.add(fcvec.scale(diff, 0.5)) + origin = p1.add(DraftVecUtils.scale(diff, 0.5)) dir = p2.sub(p1); dir.normalize() return Part.Line(origin,origin.add(dir)).toShape() else: @@ -998,8 +998,8 @@ def isPlanar(shape): n = bt.normalAt(0,0) for p in shape.Vertexes[3:]: pv = p.Point.sub(pts[0]) - rv = fcvec.project(pv,n) - if not fcvec.isNull(rv): + rv = DraftVecUtils.project(pv,n) + if not DraftVecUtils.isNull(rv): return False return True @@ -1216,9 +1216,9 @@ def getCubicDimensions(shape): vx = vec(base.Edges[0]) vy = vec(base.Edges[1]) # getting rotations - rotZ = fcvec.angle(vx) - rotY = fcvec.angle(vx,FreeCAD.Vector(vx.x,vx.y,0)) - rotX = fcvec.angle(vy,FreeCAD.Vector(vy.x,vy.y,0)) + rotZ = DraftVecUtils.angle(vx) + rotY = DraftVecUtils.angle(vx,FreeCAD.Vector(vx.x,vx.y,0)) + rotX = DraftVecUtils.angle(vy,FreeCAD.Vector(vy.x,vy.y,0)) # getting height vz = None rpi = round(math.pi/2,precision) @@ -1687,22 +1687,22 @@ def circlefrom1Line2Points(edge, p1, p2): v2 = p2.sub(s) projectedDist = math.sqrt(abs(v1.dot(v2))) edgeDir = vec(edge); edgeDir.normalize() - projectedCen1 = Vector.add(s, fcvec.scale(edgeDir, projectedDist)) - projectedCen2 = Vector.add(s, fcvec.scale(edgeDir, -projectedDist)) + projectedCen1 = Vector.add(s, DraftVecUtils.scale(edgeDir, projectedDist)) + projectedCen2 = Vector.add(s, DraftVecUtils.scale(edgeDir, -projectedDist)) perpEdgeDir = edgeDir.cross(Vector(0,0,1)) perpCen1 = Vector.add(projectedCen1, perpEdgeDir) perpCen2 = Vector.add(projectedCen2, perpEdgeDir) mid = findMidpoint(p1_p2) - x = fcvec.crossproduct(vec(p1_p2)); x.normalize() + x = DraftVecUtils.crossproduct(vec(p1_p2)); x.normalize() perp_mid = Vector.add(mid, x) cen1 = findIntersection(edg(projectedCen1, perpCen1), edg(mid, perp_mid), True, True) cen2 = findIntersection(edg(projectedCen2, perpCen2), edg(mid, perp_mid), True, True) circles = [] if cen1: - radius = fcvec.dist(projectedCen1, cen1[0]) + radius = DraftVecUtils.dist(projectedCen1, cen1[0]) circles.append(Part.Circle(cen1[0], NORM, radius)) if cen2: - radius = fcvec.dist(projectedCen2, cen2[0]) + radius = DraftVecUtils.dist(projectedCen2, cen2[0]) circles.append(Part.Circle(cen2[0], NORM, radius)) if circles: return circles @@ -1714,26 +1714,26 @@ def circleFrom2LinesRadius (edge1, edge2, radius): if not int: return None int = int[0] bis12 = angleBisection(edge1,edge2) - bis21 = Part.Line(bis12.Vertexes[0].Point,fcvec.rotate(vec(bis12), math.pi/2.0)) - ang12 = abs(fcvec.angle(vec(edge1),vec(edge2))) + bis21 = Part.Line(bis12.Vertexes[0].Point,DraftVecUtils.rotate(vec(bis12), math.pi/2.0)) + ang12 = abs(DraftVecUtils.angle(vec(edge1),vec(edge2))) ang21 = math.pi - ang12 dist12 = radius / math.sin(ang12 * 0.5) dist21 = radius / math.sin(ang21 * 0.5) circles = [] - cen = Vector.add(int, fcvec.scale(vec(bis12), dist12)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis12), dist12)) circles.append(Part.Circle(cen, NORM, radius)) - cen = Vector.add(int, fcvec.scale(vec(bis12), -dist12)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis12), -dist12)) circles.append(Part.Circle(cen, NORM, radius)) - cen = Vector.add(int, fcvec.scale(vec(bis21), dist21)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis21), dist21)) circles.append(Part.Circle(cen, NORM, radius)) - cen = Vector.add(int, fcvec.scale(vec(bis21), -dist21)) + cen = Vector.add(int, DraftVecUtils.scale(vec(bis21), -dist21)) circles.append(Part.Circle(cen, NORM, radius)) return circles def circleFrom3LineTangents (edge1, edge2, edge3): "circleFrom3LineTangents(edge,edge,edge)" def rot(ed): - return Part.Line(v1(ed),v1(ed).add(fcvec.rotate(vec(ed),math.pi/2))).toShape() + return Part.Line(v1(ed),v1(ed).add(DraftVecUtils.rotate(vec(ed),math.pi/2))).toShape() bis12 = angleBisection(edge1,edge2) bis23 = angleBisection(edge2,edge3) bis31 = angleBisection(edge3,edge1) @@ -1766,7 +1766,7 @@ def circleFrom3LineTangents (edge1, edge2, edge3): for int in intersections: exists = False for cir in circles: - if fcvec.equals(cir.Center, int.Center): + if DraftVecUtils.equals(cir.Center, int.Center): exists = True break if not exists: @@ -1783,16 +1783,16 @@ def circleFromPointLineRadius (point, edge, radius): center2 = None if dist.Length == 0: segment = vec(edge) - perpVec = fcvec.crossproduct(segment); perpVec.normalize() - normPoint_c1 = fcvec.scale(perpVec, radius) - normPoint_c2 = fcvec.scale(perpVec, -radius) + perpVec = DraftVecUtils.crossproduct(segment); perpVec.normalize() + normPoint_c1 = DraftVecUtils.scale(perpVec, radius) + normPoint_c2 = DraftVecUtils.scale(perpVec, -radius) center1 = point.add(normPoint_c1) center2 = point.add(normPoint_c2) elif dist.Length > 2 * radius: return None elif dist.Length == 2 * radius: normPoint = point.add(findDistance(point, edge, False)) - dummy = fcvec.scale(normPoint.sub(point), 0.5) + dummy = DraftVecUtils.scale(normPoint.sub(point), 0.5) cen = point.add(dummy) circ = Part.Circle(cen, NORM, radius) if circ: @@ -1801,12 +1801,12 @@ def circleFromPointLineRadius (point, edge, radius): return None else: normPoint = point.add(findDistance(point, edge, False)) - normDist = fcvec.dist(normPoint, point) + normDist = DraftVecUtils.dist(normPoint, point) dist = math.sqrt(radius**2 - (radius - normDist)**2) - centerNormVec = fcvec.scaleTo(point.sub(normPoint), radius) + centerNormVec = DraftVecUtils.scaleTo(point.sub(normPoint), radius) edgeDir = edge.Vertexes[0].Point.sub(normPoint); edgeDir.normalize() - center1 = centerNormVec.add(normPoint.add(fcvec.scale(edgeDir, dist))) - center2 = centerNormVec.add(normPoint.add(fcvec.scale(edgeDir, -dist))) + center1 = centerNormVec.add(normPoint.add(DraftVecUtils.scale(edgeDir, dist))) + center2 = centerNormVec.add(normPoint.add(DraftVecUtils.scale(edgeDir, -dist))) circles = [] if center1: circ = Part.Circle(center1, NORM, radius) @@ -1824,10 +1824,10 @@ def circleFromPointLineRadius (point, edge, radius): def circleFrom2PointsRadius(p1, p2, radius): "circleFrom2PointsRadiust(Vector, Vector, radius)" - if fcvec.equals(p1, p2): return None + if DraftVecUtils.equals(p1, p2): return None p1_p2 = Part.Line(p1, p2).toShape() - dist_p1p2 = fcvec.dist(p1, p1) + dist_p1p2 = DraftVecUtils.dist(p1, p1) mid = findMidpoint(p1_p2) if dist_p1p2 == 2*radius: circle = Part.Circle(mid, norm, radius) @@ -1836,8 +1836,8 @@ def circleFrom2PointsRadius(p1, p2, radius): dir = vec(p1_p2); dir.normalize() perpDir = dir.cross(Vector(0,0,1)); perpDir.normailze() dist = math.sqrt(radius**2 - (dist_p1p2 / 2.0)**2) - cen1 = Vector.add(mid, fcvec.scale(perpDir, dist)) - cen2 = Vector.add(mid, fcvec.scale(perpDir, -dist)) + cen1 = Vector.add(mid, DraftVecUtils.scale(perpDir, dist)) + cen2 = Vector.add(mid, DraftVecUtils.scale(perpDir, -dist)) circles = [] if cen1: circles.append(Part.Circle(cen1, norm, radius)) if cen2: circles.append(Part.Circle(cen2, norm, radius)) @@ -2069,7 +2069,7 @@ def findHomotheticCenterOfCircles(circle1, circle2): ''' if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): - if fcvec.equals(circle1.Curve.Center, circle2.Curve.Center): + if DraftVecUtils.equals(circle1.Curve.Center, circle2.Curve.Center): return None cen1_cen2 = Part.Line(circle1.Curve.Center, circle2.Curve.Center).toShape() @@ -2079,21 +2079,21 @@ def findHomotheticCenterOfCircles(circle1, circle2): perpCenDir = cenDir.cross(Vector(0,0,1)); perpCenDir.normalize() # Get point on first circle - p1 = Vector.add(circle1.Curve.Center, fcvec.scale(perpCenDir, circle1.Curve.Radius)) + p1 = Vector.add(circle1.Curve.Center, DraftVecUtils.scale(perpCenDir, circle1.Curve.Radius)) centers = [] # Calculate inner homothetic center # Get point on second circle - p2_inner = Vector.add(circle1.Curve.Center, fcvec.scale(perpCenDir, -circle1.Curve.Radius)) - hCenterInner = fcvec.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_inner, True, True) + p2_inner = Vector.add(circle1.Curve.Center, DraftVecUtils.scale(perpCenDir, -circle1.Curve.Radius)) + hCenterInner = DraftVecUtils.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_inner, True, True) if hCenterInner: centers.append(hCenterInner) # Calculate outer homothetic center (only exists of the circles have different radii) if circle1.Curve.Radius != circle2.Curve.Radius: # Get point on second circle - p2_outer = Vector.add(circle1.Curve.Center, fcvec.scale(perpCenDir, circle1.Curve.Radius)) - hCenterOuter = fcvec.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_outer, True, True) + p2_outer = Vector.add(circle1.Curve.Center, DraftVecUtils.scale(perpCenDir, circle1.Curve.Radius)) + hCenterOuter = DraftVecUtils.intersect(circle1.Curve.Center, circle2.Curve.Center, p1, p2_outer, True, True) if hCenterOuter: centers.append(hCenterOuter) @@ -2121,13 +2121,13 @@ def findRadicalAxis(circle1, circle2): ''' if isinstance(circle1.Curve, Part.Circle) and isinstance(circle2.Curve, Part.Circle): - if fcvec.equals(circle1.Curve.Center, circle2.Curve.Center): + if DraftVecUtils.equals(circle1.Curve.Center, circle2.Curve.Center): return None r1 = circle1.Curve.Radius r2 = circle1.Curve.Radius cen1 = circle1.Curve.Center # dist .. the distance from cen1 to cen2. - dist = fcvec.dist(cen1, circle2.Curve.Center) + dist = DraftVecUtils.dist(cen1, circle2.Curve.Center) cenDir = cen1.sub(circle2.Curve.Center); cenDir.normalize() # Get the perpedicular vector. @@ -2142,7 +2142,7 @@ def findRadicalAxis(circle1, circle2): k1 = (dist + (r1^2 - r2^2) / dist) / 2.0 #k2 = dist - k1 - K = Vector.add(cen1, fcvec.scale(cenDir, k1)) + K = Vector.add(cen1, DraftVecUtils.scale(cenDir, k1)) # K_ .. A point somewhere between K and J (actually with a distance of 1 unit from K). K_ = Vector,add(K, perpCenDir) @@ -2208,13 +2208,13 @@ def pointInversion(circle, point): cen = circle.Curve.Center rad = circle.Curve.Radius - if fcvec.equals(cen, point): + if DraftVecUtils.equals(cen, point): return None # Inverse the distance of the point # dist(cen -> P) = r^2 / dist(cen -> invP) - dist = fcvec.dist(point, cen) + dist = DraftVecUtils.dist(point, cen) invDist = rad**2 / d invPoint = Vector(0, 0, point.z) @@ -2260,7 +2260,7 @@ def circleInversion(circle, circle2): cen1 = circle.Curve.Center rad1 = circle.Curve.Radius - if fcvec.equals(cen1, point): + if DraftVecUtils.equals(cen1, point): return None invCen2 = Inversion(circle, circle2.Curve.Center) @@ -2268,7 +2268,7 @@ def circleInversion(circle, circle2): pointOnCircle2 = Vector.add(circle2.Curve.Center, Vector(circle2.Curve.Radius, 0, 0)) invPointOnCircle2 = Inversion(circle, pointOnCircle2) - return Part.Circle(invCen2, norm, fcvec.dist(invCen2, invPointOnCircle2)) + return Part.Circle(invCen2, norm, DraftVecUtils.dist(invCen2, invPointOnCircle2)) else: print "debug: circleInversion bad parameters!\n" From 3b67a56b1ee3cff12b78040c03688d4cb862f22a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 17:09:06 -0300 Subject: [PATCH 218/517] Added 0000680 : DXF polylines with defined width --- src/Mod/Draft/Draft.py | 3 +- src/Mod/Draft/Draft_rc.py | 410 +++++++++--------- .../Draft/Resources/ui/userprefs-import.ui | 20 + src/Mod/Draft/importDXF.py | 17 +- 4 files changed, 246 insertions(+), 204 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 300bc8692..2e7cf692d 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -107,7 +107,8 @@ def getParamType(param): elif param in ["textheight","tolerance","gridSpacing"]: return "float" elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit","maxSnap", - "SvgLinesBlack","dxfStdSize","showSnapBar","hideSnapBar","alwaysShowGrid"]: + "SvgLinesBlack","dxfStdSize","showSnapBar","hideSnapBar","alwaysShowGrid", + "renderPolylineWidth"]: return "bool" elif param in ["color","constructioncolor","snapcolor"]: return "unsigned" diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index 7ef42e43f..e1f587ddd 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,8 +2,8 @@ # Resource object code # -# Created: Fri May 4 19:15:01 2012 -# by: The Resource Compiler for PyQt (Qt v4.7.4) +# Created: Tue May 22 16:46:43 2012 +# by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -26543,153 +26543,159 @@ qt_resource_data = "\ \x93\x83\x1e\x48\xef\x57\xc6\xa2\x49\xdb\x13\x44\xd4\xba\x3f\x06\ \x46\x3f\xfe\x6c\x03\x93\xf1\x73\xb1\x4b\x54\x79\xc9\xd8\x04\x84\ \x23\xc5\xbe\x37\x98\x7a\x44\xf4\xff\x03\x15\x2c\x14\x99\ -\x00\x00\x09\x10\ +\x00\x00\x09\x69\ \x00\ -\x00\x45\x1d\x78\x9c\xed\x5c\x6d\x73\xdb\x36\x12\xfe\xee\x5f\x81\ -\xd1\x87\xbb\xb4\xe3\x5a\x96\x5f\x93\x9c\xac\x4e\x62\xd7\x49\x6e\ -\x92\x6b\x7a\x72\xd3\xfb\xe6\x81\x48\x48\x44\x4d\x12\x2a\x00\x5a\ -\x52\x7f\xfd\xed\x02\xa0\xf8\x22\xea\xdd\x92\x1c\x8f\x66\x3c\x23\ -\x11\x00\x77\x17\x8b\x67\x17\x8b\xc5\x5a\xcd\x9f\x87\x51\x48\x1e\ -\x99\x54\x5c\xc4\x57\xb5\xc6\xd1\x71\x8d\xb0\xd8\x13\x3e\x8f\x7b\ -\x57\xb5\xdf\xef\x6e\x7f\x7a\x5d\xfb\xb9\x75\xd0\x4c\x78\x36\xe8\ -\x0c\x06\xb5\x0e\x48\xd3\x0b\xa9\x52\xad\x0f\x09\x7f\xfb\xf6\x86\ -\xd3\x50\xf4\xe0\x33\xec\xb5\x99\xd6\xf0\xb2\xba\x91\xb4\xab\x9b\ -\x75\x3b\x08\x46\x0f\xb8\xdf\x63\x9a\x98\xe7\xab\xda\x6f\x7f\x98\ -\xc7\x1a\x89\x69\xc4\xae\x6a\x33\x89\x20\x33\xd2\xec\x4b\xd1\x67\ -\x52\x8f\xdc\x1b\x3d\x26\x22\xa6\xe5\xc8\x74\x92\xa6\x64\x9e\x36\ -\xdf\x48\x73\xd8\x3a\x6e\xd6\x87\xee\x61\x84\x0f\x23\xf7\x00\x22\ -\xe8\xa0\x75\x7e\x79\xde\xac\xdb\xaf\xb6\x39\x60\xbc\x17\xe8\xd6\ -\xc5\xc9\x9b\x66\xdd\x7d\x37\x34\xeb\x29\xd1\x66\x3d\x65\x5e\x25\ -\xc9\x80\xc7\xbe\x18\xdc\x71\x1d\x32\x27\x8c\xd2\x12\x84\x6f\x7d\ -\x8a\xfa\x42\xea\xfa\x2f\x43\xfc\x68\xd6\x5d\xeb\x24\xbd\x90\x8e\ -\x44\x92\x69\xe6\xdb\x7b\x31\xfc\x6c\x9a\x1c\xb9\x12\x3f\xd5\xa7\ -\x1e\x10\xaa\x39\xe9\xe3\x24\xea\x30\xd9\xba\x68\xd6\xdd\x37\x2b\ -\x7b\x9e\xc3\x04\x89\x88\xca\x1e\x8f\x4b\x14\xde\xcc\xa4\xc0\x35\ -\x8b\x32\x35\xe6\x57\xf2\x83\x14\x49\x1f\x64\x1e\xaf\xa5\x7b\x6e\ -\x9c\x38\x06\x13\xec\x75\xa6\xab\x9c\xba\x6e\xfe\x77\x4b\xba\x42\ -\x46\x54\x13\xd1\xd7\x80\x34\x95\xd7\xd9\xa4\x48\xf3\x35\x37\x57\ -\x79\x53\xf5\x57\xc5\x6d\xb6\x16\xa7\x2a\xb2\x9a\x54\xa6\xce\x8a\ -\x79\x7c\x9c\x9c\xc7\x02\x33\x99\x31\x97\x2a\x11\xe6\xcf\x27\x23\ -\x78\xbc\x20\xc1\xc2\xac\x26\x91\xf2\x99\x76\x58\x98\xc2\x44\xb3\ -\xa1\x36\x0d\x8d\xfb\xd3\x3c\xcf\x49\xb4\xc0\xc0\xc2\x80\x92\x81\ -\x11\xa5\x47\x21\x2b\x61\x65\xaa\x8c\xc4\xd8\x3e\x48\x95\x9f\x4a\ -\x51\xee\x39\xd3\x30\xbe\xea\xab\x64\xdd\x6b\x11\x75\x44\x0e\xf8\ -\x3d\xec\xe8\x43\x87\x87\x1d\x1d\xe8\x98\x39\x2d\x21\xc2\x3b\xde\ -\xaf\x9e\xd9\x5d\xc0\x15\x81\x3f\x1d\x30\x02\x6e\x2e\x10\x3e\xf1\ -\x02\x21\x14\xf3\xd1\x44\x08\x37\x13\x87\x81\x04\x1e\xb4\xa4\xb1\ -\x0a\xa9\x79\x44\x1b\x12\x9d\x3f\xc1\x6f\x11\x4f\x84\x38\x32\xd6\ -\x82\xdc\x4a\xc6\xae\xdf\xdd\x1c\x91\x83\x4f\x5d\xd7\x1e\xd1\x7e\ -\x1f\x5f\x00\x1e\x8e\xf0\x21\x01\xc0\x91\x28\x51\xda\xb5\x10\x5a\ -\x1a\xdb\xe5\x21\x83\xa6\x58\x53\x1e\xe3\x33\xcd\x58\x8b\x98\x68\ -\xda\x81\x6e\x1d\x80\xf9\x0e\x78\x18\xe2\x40\xd8\x31\x9c\x1c\xca\ -\x0a\x12\xf2\x98\x19\xcf\xab\x8e\x0e\x16\x5e\xb0\x09\xcd\x79\x89\ -\x94\x2c\xd6\x9f\x62\x9f\x0d\x4b\xea\x9b\x8e\xd7\x45\x89\xe3\xfa\ -\xfd\x12\xe3\xc6\x02\xb8\xf2\x15\xd3\x57\xb5\xe3\x12\x13\xcf\x09\ -\xee\x0f\xbb\x0e\x7a\xde\xaa\x53\x41\x6e\x5f\xa9\x0e\xe6\x33\xfb\ -\x22\xfc\x7a\xba\xa5\x2e\xcc\xad\x04\xe4\x45\x6c\x6b\x0c\xc1\xff\ -\x88\x98\x91\x57\x5d\xaa\x34\x53\xfa\x87\xaa\xd5\x9a\xc6\xb5\x5e\ -\x66\xbb\x96\x1c\xbf\x03\x12\x7d\xd6\xa5\x49\x98\x62\x9a\xc6\x7e\ -\x86\xa4\xdd\x09\xf6\xab\xe4\xe0\x2e\x69\xf8\xbc\xa4\xba\x1e\x9b\ -\x2c\xf8\x8a\xbc\xc9\xed\x50\x24\xc9\xa8\x66\xa4\x4f\x25\xc5\x90\ -\x8d\x7b\xce\x45\x95\xf7\xf7\xed\x8b\xd4\x7e\x60\xda\x0b\xd8\x5a\ -\x82\xcc\xdd\x4f\x9a\x75\xbb\xbd\x67\xd1\x40\xbe\x7b\xe1\x48\xc0\ -\x4d\x2a\x10\x92\xff\x8d\x3e\x38\x9c\x8c\x10\x96\xd9\x7e\x43\x7c\ -\xb8\xbf\x5c\x71\xe7\xfd\x42\x87\xa4\xdd\x47\x6c\x91\x36\xeb\x45\ -\xe0\x8d\x77\xb0\xff\xb6\x61\x57\xaa\xda\x7e\x15\xb4\xc3\xee\x7b\ -\x7f\x32\x73\x72\x11\x1d\xf2\x28\x89\xda\xfc\x6f\x56\x9e\x23\x34\ -\x95\x60\x63\x8f\x0b\x17\xc7\x85\x83\xc3\xb8\xd7\x1d\x1a\x1a\x17\ -\x97\x97\x97\x27\x8d\xf3\xc2\x29\x22\x9b\x64\x99\xec\x62\x3b\xc4\ -\xcc\x30\xe1\x8f\x80\xc5\x84\x0d\xd3\x60\x40\x99\x15\x51\x68\xf6\ -\x10\x08\x1c\x62\xf4\x30\x22\x54\x32\xbb\x4f\x63\x6c\x0d\x3e\x81\ -\xc7\xa4\x2f\xc2\x91\x19\x79\x44\x4c\xa0\xf1\x48\xc3\x84\x8d\xc3\ -\x0d\xab\x17\x12\xb2\xb8\xa7\x03\x22\xba\x84\x51\xcf\x7c\x62\x6f\ -\xfa\x2a\x51\x76\xd9\x81\x04\xc4\x14\xc7\x86\x57\x6c\x46\x0c\x02\ -\x01\x71\x80\x15\xc5\xd0\x34\xa6\xe6\x13\xaa\x20\x60\x00\xb9\x29\ -\xaa\x26\x7d\xfd\x68\xf5\x28\xc0\x08\x5d\xbd\xfd\x9f\x6f\x65\xfb\ -\x07\x45\x39\x85\xa7\x16\xf0\x3c\xc3\x80\x1d\x3b\xa8\x42\x74\xbf\ -\xbc\x8b\x5a\xd1\x41\x5d\x4f\x44\xae\x3b\x70\x50\xb7\xc0\xf6\xda\ -\xc4\xd2\x72\xc2\x49\xa1\x48\x9e\xeb\x9b\xe9\xa6\x20\xd6\x5e\xd2\ -\x4d\x9d\x1e\xcf\xf6\x53\xc7\xdb\x73\x50\x77\x01\xab\x3a\x44\x74\ -\x4b\xc7\x16\x88\xa4\xa7\x9c\x13\x56\xf7\x0f\xcb\x05\xf2\x4e\x3c\ -\x0b\x94\xbd\x1d\x57\xd9\xf1\xe5\xe2\x76\x9c\x1d\x91\x03\xe6\x3d\ -\x54\x1e\x91\xb1\x63\xfe\x26\x3d\x13\x5c\x1c\xb7\x24\x7b\x4e\x4e\ -\x62\x43\x10\x4f\xb1\xe8\x13\x54\x3d\x32\x1f\x64\x20\xe2\x7f\x6a\ -\xd2\x61\xee\xc4\xcc\xfc\xd5\xf1\x34\x37\x0d\x61\x39\xe2\x31\xc0\ -\xe7\xb0\x1f\xa8\x8a\x0c\xd6\x92\x50\x5a\x1c\xbe\xc8\x7b\x8f\xdb\ -\x6a\xdc\x9e\x6c\x04\xb7\x73\x72\x56\x0b\xe2\x76\x8c\xda\x3e\x85\ -\xd7\x09\xe6\xf4\x58\x7a\x3a\xb2\x69\x94\x1c\x76\x21\xae\x13\x1b\ -\xc4\xaf\xd5\xec\xd6\x20\x6b\xd9\xed\x41\x5b\x0d\xda\xb3\x8d\x80\ -\x76\xce\x71\x6f\x16\x68\x0d\x71\x87\xdb\xae\x49\x15\x0e\x68\xac\ -\x4d\xc4\x1f\x8b\xf8\x27\xa4\xe0\x93\x4e\x28\xbc\x07\x45\x5e\x75\ -\x58\x8f\xc7\x26\x47\x38\xe0\x70\x86\xa0\xe4\xc7\x1f\xf0\x50\xb2\ -\x3d\x2c\xff\x68\x25\xd9\x16\x96\x95\xa6\x32\xe5\xb8\xc7\x73\x15\ -\x9e\x5f\x6f\x04\xcf\xe7\x4f\xeb\x84\x53\xc7\xdb\x95\x22\x32\xc8\ -\x56\x40\x07\xfd\x22\x93\x99\x37\xfe\x53\x40\x70\xea\xdb\x38\xd5\ -\x2c\x02\x79\x6f\x56\x1e\x22\x8f\x44\x1a\xcc\xe3\x9b\x3e\x87\xb3\ -\x21\x1d\x11\x93\x3f\x95\x87\xa4\x03\xea\x8a\xe8\x83\xeb\xc6\xd3\ -\xb5\x52\x70\xb0\x56\x3c\x1c\x11\xe6\x73\x93\x3c\xdf\x84\x3d\x98\ -\xcb\xb8\x74\x0a\x46\xe6\x2d\x5a\x46\x0f\x99\x7f\x36\xbc\xf7\x76\ -\x51\x6d\x17\xe7\x1b\xb1\x8b\x37\xab\xdb\x05\xde\x10\xa5\xf6\xd0\ -\x95\x8c\x79\xd4\xb7\xd0\x87\x15\x47\x1f\x8e\xf0\xc7\x44\x3c\x8f\ -\x3d\xee\x33\xf8\x9a\x1a\x8d\x01\xd7\x80\x4b\xcc\x2a\xbd\x67\x03\ -\x2a\xd9\xa1\xb5\x30\x8f\xe2\xe5\xd0\x03\xde\x27\x0d\x02\x38\x5f\ -\x1d\x1d\xad\x91\xf5\x99\x8e\xf4\x7f\x83\x48\x24\xad\x0a\xd8\x0a\ -\xbc\x51\x15\x19\xc3\x3d\xbe\xab\xf0\x7d\xb1\x09\x7c\xaf\x85\xee\ -\x09\xaf\x4f\x01\xdc\x29\x88\x73\xb7\x9b\x5d\x08\xc5\x33\xaf\x6f\ -\x93\xac\x36\x8d\x79\xea\x9b\x34\xa8\x19\xb0\x09\x24\xdb\x82\x11\ -\x72\x7a\x33\x16\x0b\x98\xa6\x1c\x49\xc4\xd4\x94\x1b\x8b\x8d\xe4\ -\x45\x80\xdb\x1e\xdb\xd5\xd8\x6e\x34\x36\xe2\xbc\x5f\x3f\x2d\xbc\ -\xb3\x88\xdb\x66\x44\x10\xd0\x28\x98\x89\x6f\x34\x8d\x7d\x2a\x7d\ -\x17\xc8\xe0\x08\x82\x59\x40\x78\x2b\x86\xb8\x05\x5c\xbf\x4b\xfb\ -\x63\xa3\xbd\x4e\x08\xe8\x23\xc3\x3b\x04\x6c\xc5\x6a\x03\x5f\x78\ -\xc9\x52\xf7\x3f\x4b\x18\x02\x5e\xfd\x8e\x45\xec\x82\xea\xad\x1c\ -\x26\x7b\x88\x93\xd9\x96\x11\xb4\xb5\x8f\xf9\xd7\xbd\x1d\x4c\xb1\ -\x83\xcd\x64\x58\x1a\xc7\x4f\x6b\x08\x01\x35\x77\xbd\x63\x97\xee\ -\x0a\x54\xd2\x58\x5e\x81\xa1\x84\xcc\x46\x30\x1b\x3c\x99\x1a\x29\ -\x48\x47\x24\x88\x6a\xce\x8c\x6f\x5f\x93\xe7\x12\x60\xb6\xce\xe0\ -\x66\xd8\xfd\x48\xdd\xc5\xf7\x4b\x84\x74\xb1\xb3\x40\x2b\x37\x6e\ -\xa5\x92\xc6\xfb\x25\x8b\x1a\xdb\xdf\x3e\x3c\x5d\x51\xa3\xe3\x94\ -\xcb\x3d\x7e\xef\xe5\x8d\xe9\x8c\x0a\xe9\xae\x97\x5b\xe8\x38\x27\ -\x5f\xb1\xf3\x42\x47\x93\x7f\x96\x13\x7e\xbe\x6d\x9a\x0b\xb1\xfc\ -\xa4\xf4\x30\x1a\xc2\x00\x53\x0b\x58\x9a\x04\x03\x95\xb6\x7e\xd3\ -\x6f\xdf\x7e\x1c\x53\x6c\xd6\x4d\xe3\xd2\x4e\x07\xf7\xff\x8f\xe0\ -\xae\xa7\x3b\x9d\xa9\xb7\xa2\x67\xb3\x2f\x45\x4f\xd6\xba\x15\x85\ -\x61\x46\x47\x4b\xe8\x7a\xd5\xa2\xd2\x75\x6e\x1e\x16\x2e\x2b\x45\ -\xb7\x35\xbd\x8e\xf4\xfb\x2f\xdd\x54\x8f\xbd\x7d\xe9\xe6\xbe\x74\ -\xf3\xa9\xa5\xda\x75\x24\xfe\x66\xf1\x40\xbc\xaa\x1a\x70\xce\x5d\ -\xfc\xbc\x84\x45\xfb\x99\xd4\xe1\x83\x71\xdf\xdb\x7c\xcd\xbd\x31\ -\xf2\xfb\xf5\xeb\xf1\xcd\xd4\xf0\x30\x6c\xe2\x39\x2c\x61\xc1\x64\ -\xa7\x04\x01\xc9\xa0\x58\x83\x47\x5d\x51\xe9\xcb\x70\x92\x05\x3d\ -\xbe\x4c\x67\x79\xe7\xea\x90\x60\x0f\x7c\x85\x9b\x60\x5f\x62\x82\ -\xfb\x1f\x34\xea\xff\x2b\xbd\xc5\xd9\xa1\x0b\xfd\x2f\x1d\x58\xb1\ -\xae\xdf\x7d\x59\x4b\x8c\x5d\xbb\xa6\xc2\x69\xfe\xe9\x92\x04\xb3\ -\x63\xd2\x65\x8a\x67\xd1\xb2\x1f\x39\x1b\xa8\x43\xbc\xa8\x63\x26\ -\x2d\x3c\x08\xd0\xc2\xcd\xd6\x20\xe4\x03\xc1\xa2\x7a\x8a\xb1\x10\ -\xe9\x84\xd4\x7b\x38\x34\x41\x53\x87\x69\x0d\x31\xb3\x64\xd4\xa7\ -\x1d\x1e\x72\x60\x4e\x7b\x14\xf3\x67\xee\xf5\x0e\x0c\xc5\x9b\xb0\ -\xd8\xdf\x48\x5e\x61\x8c\xdf\x9c\xb4\x6e\x5f\x33\xb7\x7d\xc0\x7d\ -\x0d\x57\x64\x93\x27\x25\xce\x1d\x50\x6b\x4b\xcb\x04\x3c\x82\xf9\ -\xba\x49\x27\xd4\x7e\xec\x7d\xc6\x1a\xdb\xf7\x76\x22\xcf\xd3\x03\ -\x3d\xdf\x74\xc5\xf8\xb0\xb0\x58\xba\xe2\xd7\xeb\x77\x4f\x9f\xae\ -\xc8\x6c\xf4\xa5\xa4\x2b\x0a\xa5\x90\xdf\x7d\xba\x62\x09\x77\x7b\ -\xb6\xba\xbb\x9d\x51\x40\x44\xc1\x79\x2a\xf2\xea\xf4\xc6\x5e\xba\ -\x55\xd5\x0a\x6d\xe4\xca\xd8\xa5\x55\x10\xf4\x46\x84\xad\xa4\x60\ -\x85\x47\x1d\xb3\xbd\x2f\x33\x6b\x91\xcf\x39\x61\x42\x9e\x7b\x69\ -\xc6\x69\x9a\xef\xaa\x4a\x35\x65\x59\xa6\x6f\x8e\x46\x21\xc7\x34\ -\xe9\xb7\x96\xc8\x2c\x15\x93\x4a\x2e\x9f\x74\x32\x91\x4f\x4a\x53\ -\x49\x67\x13\xa9\xa4\x42\x16\xa9\x2c\x4a\x21\x77\x94\x29\x29\xa7\ -\xc9\x9c\x1a\x9d\x73\x4a\x4f\xd5\xce\xd9\x5c\xd5\x2e\x6a\xc4\xba\ -\x89\xab\x5a\xa3\x51\xab\xe3\xc8\x3e\x1f\x46\xb4\xdf\x4d\x62\x0f\ -\x15\xd5\xfa\xeb\xab\x79\xbe\x95\x22\xfa\xc2\x23\xd6\x16\x89\xf4\ -\x60\x03\x2f\x8d\xc2\x9f\x75\x48\x94\x16\x91\xe5\xa8\x8c\x24\xf9\ -\x16\x2b\x65\xee\xa7\x1f\x72\xff\xe4\x90\xfd\xda\x03\xae\xc7\x50\ -\x33\x08\x79\x5a\xee\x97\x1e\x60\x35\x5c\xc3\x81\x55\x15\xf5\x61\ -\xca\x40\xa1\x8e\x04\xec\x4f\x3f\x1c\x05\xa8\x38\xd3\x61\x14\x50\ -\xe6\x3b\x5b\x90\xd2\x7f\x5c\x54\x0a\x33\x29\xf1\x34\xa9\x90\x9a\ -\x95\x5c\xad\x2f\x96\xfb\x4f\xb5\x6a\xfd\x8c\x3b\xb7\x22\x4a\xea\ -\xe3\xab\x65\xc9\x7a\xb7\x23\x8c\x3b\xb9\x4f\x11\x66\xdc\xbb\xbe\ -\x30\xc5\x06\xf3\x83\x24\x92\x29\x63\x03\xca\x58\x8b\x27\xe2\x98\ -\x19\x1b\xc0\xe7\x66\x3d\xe1\xad\x83\xff\x03\xad\x19\x30\x45\ +\x00\x48\x24\x78\x9c\xed\x5c\x5b\x73\xdb\xb6\x12\x7e\xf7\xaf\xc0\ +\xe8\xe1\x9c\xb4\xe3\x5a\x92\xaf\x49\x8e\xac\x4e\x62\xd7\x49\x3a\ +\xc9\x69\x5a\xb9\x49\xdf\x3c\x10\x09\x89\xa8\x49\x42\x05\x40\x4b\ +\xea\xaf\xef\x2e\x00\x8a\x14\x45\xdd\x2d\xc9\x71\x35\xe3\x19\x8b\ +\x00\x88\x5d\x2c\xbe\x5d\xec\x2e\x56\x6a\xfc\x38\x88\x42\xf2\xc0\ +\xa4\xe2\x22\xbe\xac\xd4\x8f\x6a\x15\xc2\x62\x4f\xf8\x3c\xee\x5e\ +\x56\x7e\xbf\xbd\xf9\xe1\x65\xe5\xc7\xe6\x41\x23\xe1\xd9\xa0\x53\ +\x18\xd4\x3c\x20\x0d\x2f\xa4\x4a\x35\xdf\x25\xfc\xf5\xeb\x6b\x4e\ +\x43\xd1\x85\xff\x61\xb7\xc5\xb4\x86\x97\xd5\xb5\xa4\x1d\xdd\xa8\ +\xda\x41\x30\xba\xcf\xfd\x2e\xd3\xc4\x3c\x5f\x56\x7e\xfd\x6a\x1e\ +\x2b\x24\xa6\x11\xbb\xac\xcc\x9c\x04\x89\x91\x46\x4f\x8a\x1e\x93\ +\x7a\xe8\xde\xe8\x32\x11\x31\x2d\x87\xa6\x93\x34\x24\xf3\xb4\xf9\ +\x44\x1a\x83\x66\xad\x51\x1d\xb8\x87\x21\x3e\x0c\xdd\x03\xb0\xa0\ +\x83\xe6\xd9\xc5\x59\xa3\x6a\x3f\xda\xe6\x80\xf1\x6e\xa0\x9b\xe7\ +\xc7\xaf\x1a\x55\xf7\xd9\xcc\x59\x4d\x27\x6d\x54\x53\xe2\x65\x9c\ +\xf4\x79\xec\x8b\xfe\x2d\xd7\x21\x73\xcc\x28\x2d\x81\xf9\xe6\x87\ +\xa8\x27\xa4\xae\xfe\x34\xc0\x7f\x8d\xaa\x6b\x9d\x9c\x2f\xa4\x43\ +\x91\x64\x92\xf9\xf2\x56\x0c\x3e\x9a\x26\x37\x5d\x81\x9e\xea\x51\ +\x0f\x26\xaa\x38\xee\xe3\x24\x6a\x33\xd9\x3c\x6f\x54\xdd\x27\xcb\ +\x7b\x9e\xc2\xc4\x14\x11\x95\x5d\x1e\x17\x66\x78\x35\x73\x06\xae\ +\x59\x94\x89\x31\xbf\x93\xef\xa4\x48\x7a\xc0\xf3\x68\x2f\xdd\x73\ +\xfd\xd8\x11\x98\x20\xaf\x33\x59\xe5\xc4\x75\xfd\xc7\x0d\xe9\x08\ +\x19\x51\x4d\x44\x4f\x03\xd2\x54\x5e\x66\x93\x2c\xcd\x97\xdc\x5c\ +\xe1\x4d\x95\x5f\x19\xb5\xd9\x52\x9c\x2a\xc8\xf2\xa9\x32\x71\x96\ +\xac\xe3\xfd\xe4\x3a\x16\x58\xc9\x8c\xb5\x94\xb1\x30\x7f\x3d\xd9\ +\x84\xb5\x05\x27\x1c\x5b\xd5\x24\x52\x3e\xd2\x36\x0b\x53\x98\x68\ +\x36\xd0\xa6\xa1\x7e\x77\x92\xa7\x39\x89\x16\x18\x38\x36\xa0\xa0\ +\x60\x44\xe9\x61\xc8\x0a\x58\x99\xca\x23\x31\xba\x0f\x5c\xe5\x97\ +\x32\xce\xf7\x9c\x65\x18\x5b\xf5\x59\xb2\xce\x95\x88\xda\x22\x07\ +\xfc\x2e\x76\xf4\xa0\xc3\xc3\x8e\x36\x74\xcc\x5c\x96\x10\xe1\x2d\ +\xef\x95\xaf\xec\x36\xe0\x8a\xc0\x9f\x0e\x18\x01\x33\x17\x08\x9f\ +\x78\x81\x10\x8a\xf9\xa8\x22\x84\x9b\x85\xc3\x40\x02\x0f\x5a\xd2\ +\x58\x85\xd4\x3c\xa2\x0e\x89\xf6\x9f\x60\xb7\x88\x27\x42\x1c\x19\ +\x6b\x41\x6e\x24\x63\x57\x6f\xae\x8f\xc8\xc1\x87\x8e\x6b\x8f\x68\ +\xaf\x87\x2f\x00\x0d\x37\xf1\x21\x01\xc0\x91\x28\x51\xda\xb5\x10\ +\x5a\x18\xdb\xe1\x21\x83\xa6\x58\x53\x1e\xe3\x33\xcd\x48\x8b\x98\ +\x68\xda\x86\x6e\x1d\x80\xfa\xf6\x79\x18\xe2\x40\x38\x31\x1c\x1f\ +\xca\x32\x12\xf2\x98\x19\xcb\xab\x8e\x0e\x16\xde\xb0\x09\xc9\x79\ +\x89\x94\x2c\xd6\x1f\x62\x9f\x0d\x0a\xe2\x9b\x8e\xd7\x45\x27\xc7\ +\xfd\xfb\x29\xc6\x83\x05\x70\xe5\x2b\xa6\x2f\x2b\xb5\x02\x11\xcf\ +\x31\xee\x0f\x3a\x0e\x7a\xde\xaa\x4b\x41\x6a\x9f\xa9\x0e\xe6\x13\ +\xfb\x24\xfc\x6a\x7a\xa4\x2e\x4c\xad\x00\xe4\x45\x74\x6b\x04\xc1\ +\xff\x8b\x98\x91\x17\x1d\xaa\x34\x53\xfa\xbb\xb2\xdd\x9a\x46\xb5\ +\x5a\x24\xbb\x16\x1f\xbf\x03\x12\x7d\xd6\xa1\x49\x98\x62\x9a\xc6\ +\x7e\x86\xa4\xdd\x31\xf6\x8b\xe4\x60\x2e\x69\xf8\xb4\xb8\xba\x1a\ +\xa9\x2c\xd8\x8a\xbc\xca\xed\x90\x25\xc9\xa8\x66\xa4\x47\x25\x45\ +\x97\x8d\x7b\xce\x44\x15\xcf\xf7\xed\xb3\xd4\xba\x67\xda\x0b\xd8\ +\x5a\x8c\xcc\x3d\x4f\x1a\x55\x7b\xbc\x67\xde\x40\xbe\x7b\x61\x4f\ +\xc0\x2d\x2a\x10\x92\xff\x8d\x36\x38\x9c\xf4\x10\x96\x39\x7e\x43\ +\x7c\xb8\xbb\x58\xf1\xe4\xfd\x44\x07\xa4\xd5\x43\x6c\x91\x16\xeb\ +\x46\x60\x8d\x77\x70\xfe\xb6\xe0\x54\x2a\x3b\x7e\x15\xb4\xc3\xe9\ +\x7b\x77\x3c\x73\x71\x11\x1d\xf0\x28\x89\x5a\xfc\x6f\x56\x5c\x23\ +\x34\x15\x60\x63\xc3\x85\xf3\xda\x58\xe0\x30\xea\x75\x41\x43\xfd\ +\xfc\xe2\xe2\xe2\xb8\x7e\x36\x16\x45\x64\x8b\x2c\x4e\xbb\xd8\x09\ +\x31\xd3\x4d\xf8\x1a\xb0\x98\xb0\x41\xea\x0c\x28\xb3\x23\x0a\xd5\ +\x1e\x1c\x81\x43\xf4\x1e\x86\x84\x4a\x66\xcf\x69\xf4\xad\xc1\x26\ +\xf0\x98\xf4\x44\x38\x34\x23\x8f\x88\x71\x34\x1e\x68\x98\xb0\x91\ +\xbb\x61\xe5\x42\x42\x16\x77\x75\x40\x44\x87\x30\xea\x99\xff\xd8\ +\x9b\xbe\x4a\x94\xdd\x76\x98\x02\x7c\x8a\x9a\xa1\x15\x9b\x11\xfd\ +\x40\x80\x1f\x60\x59\x31\x73\x1a\x55\xf3\x09\x55\xe0\x30\x00\xdf\ +\x14\x45\x93\xbe\x7e\xb4\xba\x17\x60\x98\x2e\x3f\xfe\xcf\xb6\x72\ +\xfc\x83\xa0\x9c\xc0\x53\x0d\x78\x9a\x6e\xc0\x8e\x0d\xd4\x98\x77\ +\xbf\xbc\x89\x5a\xd1\x40\x5d\x4d\x78\xae\x3b\x30\x50\x37\x40\xf6\ +\xca\xf8\xd2\x72\xc2\x48\x21\x4b\x9e\xeb\x9b\x69\xa6\xc0\xd7\x5e\ +\xd2\x4c\x9d\xd4\x66\xdb\xa9\xda\xf6\x0c\xd4\x6d\xc0\xca\x82\x88\ +\x4e\x21\x6c\x01\x4f\x7a\x4a\x9c\xb0\xba\x7d\x58\xce\x91\x77\xec\ +\x59\xa0\xec\xf5\xb8\x4c\x8f\x2f\x16\xd7\xe3\x2c\x44\x0e\x98\x77\ +\x5f\x1a\x22\x63\xc7\xfc\x43\x7a\x26\xb8\x38\x1e\x49\x36\x4e\x4e\ +\x62\x33\x21\x46\xb1\x68\x13\x54\x35\x32\xff\x48\x5f\xc4\xff\xd5\ +\xa4\xcd\x5c\xc4\xcc\xfc\xd5\xf1\x34\x37\x0d\x61\x29\x62\x18\xe0\ +\x73\x38\x0f\x54\x49\x06\x6b\x49\x28\x2d\x0e\x5f\xa4\xbd\xc7\x6d\ +\x39\x6e\x8f\x37\x82\xdb\x39\x39\xab\x05\x71\x3b\x42\x6d\x8f\xc2\ +\xeb\x04\x73\x7a\x2c\x8d\x8e\x6c\x1a\x25\x87\x5d\xf0\xeb\xc4\x06\ +\xf1\x6b\x25\xbb\x35\xc8\x5a\x72\x7b\xd0\x96\x83\xf6\x74\x23\xa0\ +\x9d\x13\xee\xcd\x02\xad\x99\xdc\xe1\xb6\x63\x52\x85\x7d\x1a\x6b\ +\xe3\xf1\xc7\x22\xfe\x01\x67\xf0\x49\x3b\x14\xde\xbd\x22\x2f\xda\ +\xac\xcb\x63\x93\x23\xec\x73\x88\x21\x28\xf9\xfe\x3b\x0c\x4a\xb6\ +\x87\xe5\xef\x2d\x27\xdb\xc2\xb2\xd2\x54\xa6\x14\xf7\x78\x2e\xc3\ +\xf3\xcb\x8d\xe0\xf9\xec\x71\x8d\x70\x6a\x78\x3b\x52\x44\x06\xd9\ +\x0a\xe6\x41\xbb\xc8\x64\x66\x8d\xff\x14\xe0\x9c\xfa\xd6\x4f\x35\ +\x9b\x40\xde\x9a\x9d\x07\xcf\x23\x91\x06\xf3\xf8\xa6\xcf\x21\x36\ +\xa4\x43\x62\xf2\xa7\xf2\x90\xb4\x41\x5c\x11\xbd\x77\xdd\x18\x5d\ +\x2b\x05\x81\xb5\xe2\xe1\x90\x30\x9f\x9b\xe4\xf9\x26\xf4\xc1\x5c\ +\xc6\xa5\x4b\x30\x3c\x6f\x51\x33\xba\x48\xfc\xa3\xa1\xbd\xd7\x8b\ +\x72\xbd\x38\xdb\x88\x5e\xbc\x5a\x5d\x2f\xf0\x86\x28\xd5\x87\x8e\ +\x64\xcc\xa3\xbe\x85\x3e\xec\x38\xda\x70\x84\x3f\x26\xe2\x79\xec\ +\x71\x9f\xc1\xc7\x54\x69\x0c\xb8\xfa\x5c\x62\x56\xe9\x2d\xeb\x53\ +\xc9\x0e\xad\x86\x79\x14\x2f\x87\xee\xf1\x3e\xa9\x1f\x40\x7c\x75\ +\x74\xb4\x46\xd6\x67\x3a\xd2\x7f\x06\x96\x48\x5a\x15\xb0\x15\x78\ +\xa3\x28\x32\x82\x7b\x7c\x97\xe1\xfb\x7c\x13\xf8\x5e\x0b\xdd\x13\ +\x56\x9f\x02\xb8\x53\x10\xe7\x6e\x37\x3b\xe0\x8a\x67\x56\xdf\x26\ +\x59\x6d\x1a\xf3\xc4\x37\x69\x50\x33\x60\x13\x48\xb6\x05\x23\xe4\ +\xe4\x7a\xc4\x16\x10\x4d\x29\x92\x88\xa9\x29\x37\x16\x1b\xc9\x8b\ +\x00\xb5\x3d\xb6\xcb\xb1\x5d\xaf\x6f\xc4\x78\xbf\x7c\x5c\x78\x67\ +\x1e\xb7\xcd\x88\x20\xa0\x91\x31\xe3\xdf\x68\x1a\xfb\x54\xfa\xce\ +\x91\xc1\x11\x04\xb3\x80\xf0\x56\x0c\x7e\x0b\x98\x7e\x97\xf6\xc7\ +\x46\x7b\x9d\x10\xd0\x07\x86\x77\x08\xd8\x8a\xd5\x06\xbe\xf0\x92\ +\xa5\xee\x7f\x96\x50\x04\xbc\xfa\x1d\xb1\xd8\x01\xd1\x5b\x3e\x4c\ +\xf6\x10\x17\xb3\x2d\x25\x68\x69\x1f\xf3\xaf\x7b\x3d\x98\xa2\x07\ +\x9b\xc9\xb0\xd4\x6b\x8f\xab\x08\x01\x35\x77\xbd\x23\x93\xee\x0a\ +\x54\x52\x5f\x5e\x81\xa2\x84\xcc\x7a\x30\x1b\x8c\x4c\x0d\x17\xa4\ +\x2d\x12\x44\x35\x67\xc6\xb6\xaf\x49\x73\x09\x30\x5b\x63\x70\x3d\ +\xe8\xbc\xa7\xee\xe2\x7b\x0f\xe9\x52\x48\x2f\x71\x69\xb5\x0c\xa4\ +\xeb\x8f\x0b\xe9\x3e\x5e\xba\x8e\x6e\x73\xad\x6d\x06\x2f\x1b\x6f\ +\x4e\xb0\x66\x06\x03\x55\x77\x0b\x9c\x82\x5e\xb2\xd8\x67\xd2\xfa\ +\x31\x5e\x68\x0a\xca\x0c\xfa\x6c\xa2\x46\x9b\xeb\x1a\x89\x75\xaf\ +\x64\x6a\xd1\xc8\xba\x8a\xf0\x9b\x61\x21\xc7\xb6\x21\xbd\x26\xb9\ +\x25\x74\xc0\x8a\xe0\xb3\x23\xff\xd5\xd2\x7d\x8e\x6a\x30\xde\x39\ +\x36\x57\x6e\xdc\x4a\x95\xbd\x77\x4b\xd6\xf6\xb6\xbe\xbc\x7b\xbc\ +\xda\x5e\x47\x29\x97\x82\xff\xd6\xab\x7c\xd3\x15\x8d\x65\x7d\x9f\ +\x6f\xbd\xef\x9c\xb4\xdd\xce\xeb\x7d\xcd\x35\x8c\x9c\x38\x1b\x5a\ +\xa6\x79\x2c\xa4\x9d\xe4\x1e\x46\x83\x37\x6c\x4a\x62\x0b\x8b\x60\ +\x20\xd2\xe6\xaf\xfa\xf5\xeb\xf7\xa3\x19\x1b\x55\xd3\xb8\xb4\xd1\ +\x41\x37\xf8\x3d\x78\x2d\xd3\x8d\xce\xd4\xe2\x80\xd3\xd9\xb5\x01\ +\xc7\x6b\x15\x07\xc0\x30\x23\xa3\x25\x64\xbd\x6a\x6d\xf5\x3a\x17\ +\x70\x0b\x57\x57\xa3\xd9\x9a\x5e\x4e\xfd\xed\x57\x30\xab\x87\xee\ +\xbe\x82\x79\xe3\xc5\xa6\xff\xba\x0a\xe6\x5d\x7b\xef\xaf\x16\x77\ +\xde\xcb\x8a\x62\xe7\x94\xa4\xcc\xcb\xdb\xb5\x9e\xc8\xd7\x51\x40\ +\xb9\xef\x6c\xda\xf2\xce\x28\xf9\xdd\xfa\x5f\x4b\x31\x4b\xc3\x9c\ +\x90\xf1\xe7\xb0\x92\x0b\x73\xfe\x12\x18\xb4\xa1\x48\x56\x8a\x4a\ +\x5d\x6d\xf5\xf3\x30\x92\x63\x72\x7c\x9e\xc6\xf2\xd6\x95\xe3\xc1\ +\x19\xf8\x02\x0f\xc1\x9e\xc4\x7b\x9e\xff\xd0\xa8\xf7\xbf\xf4\x32\ +\x73\x87\x26\xf4\x37\xda\xb7\x6c\x5d\xbd\xf9\xb4\x16\x1b\xbb\x36\ +\x4d\x63\x49\xad\xc7\x4b\x2c\xcc\xf6\x49\x97\xa9\x21\x47\xcd\x7e\ +\xe0\xac\xaf\x0e\xf1\xbe\x9a\x99\xdb\x91\x7e\x80\x1a\x6e\x8e\x06\ +\x21\xef\x09\x7e\xb7\x84\xa2\x2f\x44\xda\x21\xf5\xee\x0f\x8d\xd3\ +\xd4\x66\x5a\x83\xcf\x2c\x19\xf5\x69\x9b\x87\x1c\x88\xd3\x2e\xc5\ +\x34\xb2\x7b\xbd\x0d\x43\xf1\x42\x38\xf6\x37\x92\x5e\x1b\xe1\x37\ +\xc7\xad\x3b\xd7\xcc\xa5\x37\x50\x5f\xc3\x14\xd9\x84\x4b\x81\x72\ +\x1b\xc4\xda\xd4\x32\x01\x8b\x60\x3e\x6e\xd2\x08\xb5\x1e\xba\x1f\ +\x31\x59\xf2\xd6\x2e\xe4\x69\x5a\xa0\xa7\x9b\xae\x18\x05\x0b\x8b\ +\xa5\x2b\x7e\xb9\x7a\xf3\xf8\xe9\x8a\x4c\x47\x9f\x4b\xba\x62\xac\ +\x22\xf8\x9b\x4f\x57\x2c\x61\x6e\x4f\x57\x37\xb7\x33\xea\xe8\x28\ +\x18\x4f\x45\x5e\x9c\x5c\xdb\xbb\xe7\xb2\x92\xb9\x8d\x54\x4e\xb8\ +\xb4\x0a\x82\xde\xb0\xb0\x95\x2c\xac\xf0\xa8\x23\xb6\xb7\x65\x66\ +\x2f\xf2\x39\x27\xbc\x97\xe2\x5e\x9a\x71\x9a\x66\xbb\xca\x52\x4d\ +\x59\x96\xe9\x8b\x9b\x63\x2c\xc7\x34\x69\xb7\x96\xc8\x2c\x8d\x27\ +\x95\x5c\x3e\xe9\x78\x22\x9f\x94\xa6\x92\x4e\x27\x52\x49\x63\x59\ +\xa4\x22\x2b\x63\xb9\xa3\x4c\x48\x39\x49\xe6\xc4\xe8\x8c\x53\x1a\ +\x55\x3b\x63\x73\x59\x39\xaf\x10\x6b\x26\x2e\x2b\xf5\x7a\xa5\x8a\ +\x23\x7b\x7c\x10\xd1\x5e\x27\x89\x3d\x14\x54\xf3\xaf\xcf\xe6\xf9\ +\x46\x8a\xe8\x13\x8f\x58\x4b\x24\xd2\x83\x03\xbc\x30\x0a\x7f\xdd\ +\x24\x51\x5a\x44\x96\xa2\x32\x9c\xe4\x5b\x2c\x97\xb9\x5f\x40\xc9\ +\x7d\xd7\x27\xfb\xd1\x13\xdc\x8f\x81\x66\xe0\xf2\x34\xdd\x0f\x9e\ +\xc0\x6e\xb8\x86\x03\x2b\x2a\xea\xc3\x92\x61\x86\x2a\x4e\x60\x7f\ +\x01\xe5\x28\x40\xc1\x99\x0e\x23\x80\x22\xdd\xd9\x8c\x14\xbe\x78\ +\x54\xca\xcc\x24\xc7\xd3\xb8\xc2\xd9\x2c\xe7\x6a\x7d\xb6\xdc\x17\ +\x36\xcb\xe5\x33\xea\xdc\x0a\x2b\xa9\x8d\x2f\xe7\x25\xeb\xdd\x0e\ +\x33\x2e\x72\x9f\xc2\xcc\xa8\x77\x7d\x66\xc6\x1b\xcc\xef\xf2\x48\ +\xa6\x8c\x0e\x28\xa3\x2d\x9e\x88\x63\x66\x74\x00\x9f\x1b\xd5\x84\ +\x37\x0f\xfe\x01\xbd\x89\x17\xfc\ \x00\x00\x0f\x9f\ \x00\ \x00\xa2\x2c\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ @@ -37791,61 +37797,61 @@ qt_resource_struct = "\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x6b\xbd\ -\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xbd\x6a\ -\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x1f\x87\ -\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xde\x6f\ -\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x08\x51\ -\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x89\x07\ -\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe1\xa5\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb2\xd6\ -\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x59\x16\ -\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xfa\x7f\ -\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xd6\x8c\ -\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xe7\x69\ -\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x76\x71\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xdc\x0b\ -\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa1\xcc\ -\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xcc\x20\ -\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc0\xb5\ -\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x97\xb4\ -\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x23\x70\ -\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xac\xbf\ -\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xb7\x21\ -\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x11\x57\ -\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x8f\xfb\ -\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x08\x5d\ -\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x69\x5e\ -\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x34\xe0\ -\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x80\x11\ -\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xc9\x78\ -\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xf7\x73\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xe9\x09\ -\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x4c\x1f\ -\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\x9f\xbb\ -\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x06\x58\ -\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\x9d\x98\ -\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb4\xdb\ -\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x28\x30\ -\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xc9\x42\ -\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x5e\x5e\ -\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xbf\xc7\ -\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x44\x85\ -\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x06\xfe\x10\ -\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdb\x30\ -\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x2f\x61\ -\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x5f\x8b\ -\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x07\xfc\xeb\ -\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x0f\xb1\ -\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd3\xed\ -\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x92\xe8\ -\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xef\x2a\ -\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xed\x19\ -\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x3c\xc5\ -\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x98\x58\ -\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x2f\x81\ +\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x6c\x16\ +\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xbd\xc3\ +\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x1f\xe0\ +\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xde\xc8\ +\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x08\xaa\ +\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x89\x60\ +\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe1\xfe\ +\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb3\x2f\ +\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x59\x6f\ +\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xfa\xd8\ +\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xd6\xe5\ +\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xe7\xc2\ +\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x76\xca\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xdc\x64\ +\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa2\x25\ +\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xcc\x79\ +\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc1\x0e\ +\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x98\x0d\ +\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x23\xc9\ +\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xad\x18\ +\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xb7\x7a\ +\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x11\xb0\ +\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x90\x54\ +\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x08\xb6\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x69\xb7\ +\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x35\x39\ +\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x80\x6a\ +\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xc9\xd1\ +\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xf7\xcc\ +\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xe9\x62\ +\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x4c\x78\ +\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa0\x14\ +\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x06\xb1\ +\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\x9d\xf1\ +\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb5\x34\ +\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x28\x89\ +\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xc9\x9b\ +\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x5e\xb7\ +\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc0\x20\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x44\xde\ +\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x06\xfe\x69\ +\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdb\x89\ +\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x2f\xba\ +\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x5f\xe4\ +\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x07\xfd\x44\ +\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x10\x0a\ +\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd4\x46\ +\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x93\x41\ +\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xef\x83\ +\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xed\x72\ +\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x3d\x1e\ +\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x98\xb1\ +\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x2f\xda\ \x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x77\x44\ -\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x80\x58\ +\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x80\xb1\ " def qInitResources(): diff --git a/src/Mod/Draft/Resources/ui/userprefs-import.ui b/src/Mod/Draft/Resources/ui/userprefs-import.ui index 09d5ee1c2..a14084d3b 100755 --- a/src/Mod/Draft/Resources/ui/userprefs-import.ui +++ b/src/Mod/Draft/Resources/ui/userprefs-import.ui @@ -320,6 +320,26 @@ If color mapping is choosed, you must choose a color mapping file containing a t + + + + + + If this is checked, when polylines have a width defined, they will be rendered as closed wires with the correct width + + + Render polylines with width + + + renderPolylineWidth + + + Mod/Draft + + + + + diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index f71e10166..ba8fa2909 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -202,6 +202,7 @@ class fcformat: self.makeBlocks = params.GetBool("groupLayers") self.stdSize = params.GetBool("dxfStdSize") self.importDxfHatches = params.GetBool("importDxfHatches") + self.renderPolylineWidth = params.GetBool("renderPolylineWidth") bparams = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/View") if self.paramstyle > 1: @@ -403,7 +404,21 @@ def drawPolyline(polyline,shapemode=False,num=None): warn(polyline,num) if edges: try: - if (fmt.paramstyle >= 4) and (not curves) and (not shapemode): + width = rawValue(polyline,43) + if width and fmt.renderPolylineWidth: + w = Part.Wire(edges) + w1 = w.makeOffset(width/2) + if polyline.closed: + w2 = w.makeOffset(-width/2) + w1 = Part.Face(w1) + w2 = Part.Face(w2) + if w1.BoundBox.DiagonalLength > w2.BoundBox.DiagonalLength: + return w1.cut(w2) + else: + return w2.cut(w1) + else: + return Part.Face(w1) + elif (fmt.paramstyle >= 4) and (not curves) and (not shapemode): ob = Draft.makeWire(verts) ob.Closed = polyline.closed return ob From 7e028e94704da6a216f8e328a1b432430e46ec84 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 22 May 2012 17:29:50 -0300 Subject: [PATCH 219/517] Fixed 0000701 : Draft Wire naming --- src/Mod/Draft/Draft.py | 2 +- src/Mod/Draft/DraftTools.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 2e7cf692d..7b1c5dc8f 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -528,7 +528,7 @@ def makeWire(pointslist,closed=False,placement=None,face=True,support=None): print closed if placement: typecheck([(placement,FreeCAD.Placement)], "makeWire") if len(pointslist) == 2: fname = "Line" - else: fname = "Wire" + else: fname = "DWire" obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython",fname) _Wire(obj) obj.Points = pointslist diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index bde2ad4a7..d137c5228 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -416,7 +416,7 @@ class Line(Creator): todo.delay(self.doc.removeObject,old) self.obj = None if (len(self.node) > 1): - self.commit(translate("draft","Create Wire"), + self.commit(translate("draft","Create DWire"), partial(Draft.makeWire,self.node,closed, face=self.ui.fillmode,support=self.support)) if self.ui: @@ -456,7 +456,7 @@ class Line(Creator): if ((point-self.node[0]).Length < Draft.tolerance()): self.undolast() self.finish(True,cont=True) - msg(translate("draft", "Wire has been closed\n")) + msg(translate("draft", "DWire has been closed\n")) def undolast(self): "undoes last line segment" @@ -523,10 +523,10 @@ class Wire(Line): def GetResources(self): return {'Pixmap' : 'Draft_Wire', 'Accel' : "W, I", - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Wire"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Creates a multiple-point wire. CTRL to snap, SHIFT to constrain")} + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "DWire"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Wire", "Creates a multiple-point DraftWire (DWire). CTRL to snap, SHIFT to constrain")} def Activated(self): - Line.Activated(self,name=str(translate("draft","Wire"))) + Line.Activated(self,name=str(translate("draft","DWire"))) class BSpline(Line): From 260d12bc9f47b047f71ddf7c03ce2cd22bd1d1d9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 11:48:43 +0200 Subject: [PATCH 220/517] 0000710: merge project annoyance --- src/Gui/CommandDoc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 02e043490..46c5f5681 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -281,7 +281,7 @@ void StdCmdMergeProjects::activated(int iMsg) { QString exe = QString::fromUtf8(App::GetApplication().getExecutableName()); QString project = QFileDialog::getOpenFileName(Gui::getMainWindow(), - QString::fromUtf8(QT_TR_NOOP("Merge project")), QString(), + QString::fromUtf8(QT_TR_NOOP("Merge project")), QDir::homePath(), QString::fromUtf8(QT_TR_NOOP("%1 document (*.fcstd)")).arg(exe)); if (!project.isEmpty()) { App::Document* doc = App::GetApplication().getActiveDocument(); From c156fc6e9c6c9b2b682393b7cd7212164720b61f Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 12:07:04 +0200 Subject: [PATCH 221/517] 0000717: Version info causes crash --- src/App/ApplicationPy.cpp | 41 ++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/App/ApplicationPy.cpp b/src/App/ApplicationPy.cpp index d74b1b4a7..15781cc3d 100644 --- a/src/App/ApplicationPy.cpp +++ b/src/App/ApplicationPy.cpp @@ -383,23 +383,36 @@ PyObject* Application::sGetVersion(PyObject * /*self*/, PyObject *args,PyObject if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception - PyObject* pList = PyList_New(5); - PyObject *pItem; - pItem = PyString_FromString(Application::Config()["BuildVersionMajor"].c_str()); - PyList_SetItem(pList, 0, pItem); - pItem = PyString_FromString(Application::Config()["BuildVersionMinor"].c_str()); - PyList_SetItem(pList, 1, pItem); - pItem = PyString_FromString(Application::Config()["BuildRevision"].c_str()); - PyList_SetItem(pList, 2, pItem); - pItem = PyString_FromString(Application::Config()["BuildRepositoryURL"].c_str()); - PyList_SetItem(pList, 4, pItem); - pItem = PyString_FromString(Application::Config()["BuildCurrentDate"].c_str()); - PyList_SetItem(pList, 6, pItem); + Py::List list; + const std::map& cfg = Application::Config(); + std::map::const_iterator it; - return pList; + it = cfg.find("BuildVersionMajor"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildVersionMinor"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRevision"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRepositoryURL"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRevisionDate"); + list.append(Py::String(it != cfg.end() ? it->second : "")); + + it = cfg.find("BuildRevisionBranch"); + if (it != cfg.end()) + list.append(Py::String(it->second)); + + it = cfg.find("BuildRevisionHash"); + if (it != cfg.end()) + list.append(Py::String(it->second)); + + return Py::new_reference_to(list); } - PyObject* Application::sAddImportType(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { char *psKey,*psMod; From 6774f160beb26022f7940b2e585bddfe4bb7dacb Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 15:03:19 +0200 Subject: [PATCH 222/517] 0000716: src/Tools/PyTools.c: strange assignment and a memory leak --- src/Base/PyTools.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Base/PyTools.c b/src/Base/PyTools.c index 2346f80cc..d204ae72d 100644 --- a/src/Base/PyTools.c +++ b/src/Base/PyTools.c @@ -377,8 +377,10 @@ const char *PP_Init(const char *modname) { //#ifdef FC_OS_LINUX /* cannot convert `const char *' to `char *' in assignment */ if (modname!=NULL) return modname; { /* we assume here that the caller frees allocated memory */ - char* __main__=(char *)malloc(sizeof("__main__")); - return __main__="__main__"; + // #0000716: strange assignment and a memory leak + return "__main__"; + //char* __main__=(char *)malloc(sizeof("__main__")); + //return __main__="__main__"; } //#else // return modname == NULL ? "__main__" : modname; /* default to '__main__' */ From 432a460fda32347b3884135f9ba5904e44e375d9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 15:03:48 +0200 Subject: [PATCH 223/517] Expose merge project function to python --- src/Gui/CommandDoc.cpp | 3 --- src/Gui/DocumentPy.xml | 5 +++++ src/Gui/DocumentPyImp.cpp | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 46c5f5681..b9d0ea68b 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -294,9 +294,6 @@ void StdCmdMergeProjects::activated(int iMsg) return; } - QString dir1 = proj.absoluteDir().filePath(proj.baseName()); - QString dir2 = info.absoluteDir().filePath(info.baseName()); - Base::FileInfo fi((const char*)project.toUtf8()); Base::ifstream str(fi, std::ios::in | std::ios::binary); MergeDocuments md(doc); diff --git a/src/Gui/DocumentPy.xml b/src/Gui/DocumentPy.xml index 75ac71a54..c76e101cf 100644 --- a/src/Gui/DocumentPy.xml +++ b/src/Gui/DocumentPy.xml @@ -77,6 +77,11 @@ Send a message to all views of the document + + + + Merges this document with another project file + diff --git a/src/Gui/DocumentPyImp.cpp b/src/Gui/DocumentPyImp.cpp index 4d30e7cc5..67b66f36a 100644 --- a/src/Gui/DocumentPyImp.cpp +++ b/src/Gui/DocumentPyImp.cpp @@ -32,6 +32,7 @@ #include #include "Document.h" +#include "MergeDocuments.h" #include "ViewProviderExtern.h" // inclusion of the generated files (generated out of DocumentPy.xml) @@ -234,6 +235,22 @@ PyObject* DocumentPy::sendMsgToViews(PyObject *args) } PY_CATCH; } +PyObject* DocumentPy::mergeProject(PyObject *args) +{ + char* filename; + if (!PyArg_ParseTuple(args, "s", &filename)) // convert args: Python->C + return NULL; // NULL triggers exception + + PY_TRY { + Base::FileInfo fi(filename); + Base::ifstream str(fi, std::ios::in | std::ios::binary); + App::Document* doc = getDocumentPtr()->getDocument(); + MergeDocuments md(doc); + md.importObjects(str); + Py_Return; + } PY_CATCH; +} + Py::Object DocumentPy::getActiveObject(void) const { App::DocumentObject *object = getDocumentPtr()->getDocument()->getActiveObject(); From 6a264ac2a5b6bed5269477c8de3769bdc0893358 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 23 May 2012 16:57:36 +0200 Subject: [PATCH 224/517] Add method Document::findObject() --- src/App/Document.cpp | 15 +++++++++ src/App/Document.h | 1 + src/App/DocumentPyImp.cpp | 66 ++++++++++++++++++--------------------- 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 519f5d7e4..f130bb35a 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -63,6 +63,7 @@ recompute path. Also enables more complicated dependencies beyond trees. #include #include #include +#include #include "Document.h" @@ -1689,6 +1690,20 @@ std::vector Document::getObjectsOfType(const Base::Type& typeId return Objects; } +std::vector Document::findObjects(const Base::Type& typeId, const char* objname) const +{ + boost::regex rx(objname); + boost::cmatch what; + std::vector Objects; + for (std::vector::const_iterator it = d->objectArray.begin(); it != d->objectArray.end(); ++it) { + if ((*it)->getTypeId().isDerivedFrom(typeId)) { + if (boost::regex_match((*it)->getNameInDocument(), what, rx)) + Objects.push_back(*it); + } + } + return Objects; +} + int Document::countObjectsOfType(const Base::Type& typeId) const { int ct=0; diff --git a/src/App/Document.h b/src/App/Document.h index dcf56d670..d1675001e 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -161,6 +161,7 @@ public: /// Returns a list of all Objects std::vector getObjects() const; std::vector getObjectsOfType(const Base::Type& typeId) const; + std::vector findObjects(const Base::Type& typeId, const char* objname) const; /// Returns an array with the correct types already. template inline std::vector getObjectsOfType() const; int countObjectsOfType(const Base::Type& typeId) const; diff --git a/src/App/DocumentPyImp.cpp b/src/App/DocumentPyImp.cpp index 3b7fdd289..6bd02f51c 100644 --- a/src/App/DocumentPyImp.cpp +++ b/src/App/DocumentPyImp.cpp @@ -290,42 +290,36 @@ PyObject* DocumentPy::findObjects(PyObject *args) char *sType="App::DocumentObject", *sName=0; if (!PyArg_ParseTuple(args, "|ss",&sType, &sName)) // convert args: Python->C return NULL; // NULL triggers exception - - Base::Type type = Base::Type::fromName(sType); - if (type == Base::Type::badType()) { - PyErr_Format(PyExc_Exception, "'%s' is not a valid type", sType); - return NULL; - } - - if (!type.isDerivedFrom(App::DocumentObject::getClassTypeId())) { - PyErr_Format(PyExc_Exception, "Type '%s' does not inherit from 'App::DocumentObject'", sType); - return NULL; - } - - std::vector res; - std::vector objs = getDocumentPtr()->getObjectsOfType(type); - - if (sName) { - try { - boost::regex rx(sName); - boost::cmatch what; - for (std::vector::const_iterator It = objs.begin();It != objs.end();++It) { - if (boost::regex_match((*It)->getNameInDocument(), what, rx)) - res.push_back(*It); - } - } - catch (const boost::regex_error& e) { - PyErr_SetString(PyExc_RuntimeError, e.what()); - return 0; - } - } - else { - res = objs; - } - - Py_ssize_t index=0; - PyObject* list = PyList_New((Py_ssize_t)res.size()); - for (std::vector::const_iterator It = res.begin();It != res.end();++It, index++) + + Base::Type type = Base::Type::fromName(sType); + if (type == Base::Type::badType()) { + PyErr_Format(PyExc_Exception, "'%s' is not a valid type", sType); + return NULL; + } + + if (!type.isDerivedFrom(App::DocumentObject::getClassTypeId())) { + PyErr_Format(PyExc_Exception, "Type '%s' does not inherit from 'App::DocumentObject'", sType); + return NULL; + } + + std::vector res; + + if (sName) { + try { + res = getDocumentPtr()->findObjects(type, sName); + } + catch (const boost::regex_error& e) { + PyErr_SetString(PyExc_RuntimeError, e.what()); + return 0; + } + } + else { + res = getDocumentPtr()->getObjectsOfType(type); + } + + Py_ssize_t index=0; + PyObject* list = PyList_New((Py_ssize_t)res.size()); + for (std::vector::const_iterator It = res.begin();It != res.end();++It, index++) PyList_SetItem(list, index, (*It)->getPyObject()); return list; } From c7c874a705e4b69b045befeb1c222aeb32368280 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 23 May 2012 18:03:25 -0300 Subject: [PATCH 225/517] Small GUI adjustments in Draft --- src/Mod/Draft/DraftGui.py | 15 ++++++++++++++- src/Mod/Draft/DraftTools.py | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 752abb76b..13517f478 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -523,13 +523,24 @@ class DraftToolBar: self.xValue.setEnabled(True) self.yValue.setEnabled(True) self.isRelative.show() + self.undoButton.show() + self.continueCmd.show() + + def wireUi(self,title=None): + if title: + self.pointUi(title) + else: + self.pointUi(translate("draft", "DWire")) + self.xValue.setEnabled(True) + self.yValue.setEnabled(True) + self.isRelative.show() self.hasFill.show() self.finishButton.show() self.closeButton.show() self.wipeButton.show() self.undoButton.show() self.continueCmd.show() - + def circleUi(self): self.pointUi(translate("draft", "Circle")) self.continueCmd.show() @@ -935,6 +946,8 @@ class DraftToolBar: if self.finishButton.isVisible(): self.finish() spec = True + elif txt.endsWith("t"): + self.continueCmd.setChecked(not self.continueCmd.isChecked()) elif txt.endsWith("w"): self.wipeLine() elif txt.endsWith("s"): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index d137c5228..885e781c6 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -400,7 +400,10 @@ class Line(Creator): Creator.Activated(self,name) if self.doc: self.obj = None - self.ui.lineUi(name) + if self.isWire: + self.ui.wireUi(name) + else: + self.ui.lineUi(name) self.linetrack = lineTracker() self.constraintrack = lineTracker(dotted=True) self.obj=self.doc.addObject("Part::Feature",self.featureName) From 50bbf527dd79d15d8b1596ab1678bfe40eb1aece Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 25 May 2012 12:12:30 +0200 Subject: [PATCH 226/517] Add parameter to keep trailing digits in object name of copy, other little fix --- src/App/Document.cpp | 13 ++++++++----- src/App/Document.h | 4 ++-- src/App/DocumentPyImp.cpp | 6 +++--- src/Mod/Part/Gui/Command.cpp | 2 -- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index f130bb35a..61d1b7921 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1484,15 +1484,18 @@ void Document::breakDependency(DocumentObject* pcObject, bool clear) } DocumentObject* Document::_copyObject(DocumentObject* obj, std::map& copy_map, bool recursive) + DocumentObject*>& copy_map, bool recursive, + bool keepdigitsatend) { if (!obj) return 0; // remove number from end to avoid lengthy names std::string objname = obj->getNameInDocument(); + if (!keepdigitsatend) { size_t lastpos = objname.length()-1; while (objname[lastpos] >= 48 && objname[lastpos] <= 57) lastpos--; objname = objname.substr(0, lastpos+1); + } DocumentObject* copy = addObject(obj->getTypeId().getName(),objname.c_str()); if (!copy) return 0; copy->addDynamicProperties(obj); @@ -1512,7 +1515,7 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::map(it->second)->setValue(pt->second); } else if (recursive) { - DocumentObject* link_copy = _copyObject(link, copy_map, recursive); + DocumentObject* link_copy = _copyObject(link, copy_map, recursive, keepdigitsatend); copy_map[link] = link_copy; static_cast(it->second)->setValue(link_copy); } @@ -1531,7 +1534,7 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::mapsecond); } else { - links_copy.push_back(_copyObject(*jt, copy_map, recursive)); + links_copy.push_back(_copyObject(*jt, copy_map, recursive, keepdigitsatend)); copy_map[*jt] = links_copy.back(); } } @@ -1561,10 +1564,10 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::map copy_map; - DocumentObject* copy = _copyObject(obj, copy_map, recursive); + DocumentObject* copy = _copyObject(obj, copy_map, recursive, keepdigitsatend); return copy; } diff --git a/src/App/Document.h b/src/App/Document.h index d1675001e..38b247a20 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -140,7 +140,7 @@ public: * are copied as well. By default \a recursive is false. * Returns the copy of the object or 0 if the creation failed. */ - DocumentObject* copyObject(DocumentObject* obj, bool recursive=false); + DocumentObject* copyObject(DocumentObject* obj, bool recursive=false, bool keepdigitsatend=false); /** Move an object from another document to this document * If \a recursive is true then all objects this object depends on * are moved as well. By default \a recursive is false. @@ -261,7 +261,7 @@ protected: void _remObject(DocumentObject* pcObject); void _addObject(DocumentObject* pcObject, const char* pObjectName); DocumentObject* _copyObject(DocumentObject* obj, std::map&, bool recursive=false); + DocumentObject*>&, bool recursive=false, bool keepdigitsatend=false); /// checks if a valid transaction is open void _checkTransaction(void); void breakDependency(DocumentObject* pcObject, bool clear); diff --git a/src/App/DocumentPyImp.cpp b/src/App/DocumentPyImp.cpp index 6bd02f51c..64b04d8b9 100644 --- a/src/App/DocumentPyImp.cpp +++ b/src/App/DocumentPyImp.cpp @@ -163,12 +163,12 @@ PyObject* DocumentPy::removeObject(PyObject *args) PyObject* DocumentPy::copyObject(PyObject *args) { - PyObject *obj, *rec=0; - if (!PyArg_ParseTuple(args, "O!|O!",&(DocumentObjectPy::Type),&obj,&PyBool_Type,&rec)) + PyObject *obj, *rec=0, *keep=0; + if (!PyArg_ParseTuple(args, "O!|O!O!",&(DocumentObjectPy::Type),&obj,&PyBool_Type,&rec,&PyBool_Type,&keep)) return NULL; // NULL triggers exception DocumentObjectPy* docObj = static_cast(obj); - DocumentObject* copy = getDocumentPtr()->copyObject(docObj->getDocumentObjectPtr(), rec==Py_True); + DocumentObject* copy = getDocumentPtr()->copyObject(docObj->getDocumentObjectPtr(), rec==Py_True, keep==Py_True); if (copy) { return copy->getPyObject(); } diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 1b616525a..33cd008ee 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -511,7 +511,6 @@ void CmdPartExport::activated(int iMsg) if (!fn.isEmpty()) { App::Document* pDoc = getDocument(); if (!pDoc) return; // no document - openCommand("Import Part"); QString ext = QFileInfo(fn).suffix().toLower(); if (ext == QLatin1String("step") || ext == QLatin1String("stp") || @@ -522,7 +521,6 @@ void CmdPartExport::activated(int iMsg) else { Gui::Application::Instance->exportTo((const char*)fn.toUtf8(),pDoc->getName(),"Part"); } - commitCommand(); } } From b7965052a3535ecc25c70c84c805f8754675f258 Mon Sep 17 00:00:00 2001 From: logari81 Date: Fri, 25 May 2012 18:04:29 +0200 Subject: [PATCH 227/517] Sketcher: skip the latest added one of the detected redundant constraints --- src/Mod/Sketcher/App/freegcs/GCS.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/App/freegcs/GCS.cpp b/src/Mod/Sketcher/App/freegcs/GCS.cpp index aa850c9a2..7b9455ddc 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/freegcs/GCS.cpp @@ -1397,7 +1397,9 @@ int System::diagnose() Constraint *mostPopular = NULL; for (std::map< Constraint *, SET_I >::const_iterator it=conflictingMap.begin(); it != conflictingMap.end(); it++) { - if (it->second.size() >= maxPopularity) { + if (it->second.size() > maxPopularity || + (it->second.size() == maxPopularity && mostPopular && + it->first->getTag() > mostPopular->getTag())) { mostPopular = it->first; maxPopularity = it->second.size(); } From 7cbb16f2e840eac3e65a696d3a2a6e121c07df9e Mon Sep 17 00:00:00 2001 From: logari81 Date: Fri, 25 May 2012 18:18:51 +0200 Subject: [PATCH 228/517] Sketcher: include coincident constraints in the sketch diagnosis --- src/Mod/Sketcher/App/Sketch.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index 59b6410a7..1898955f3 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -743,10 +743,7 @@ int Sketch::addPointCoincidentConstraint(int geoId1, PointPos pos1, int geoId2, GCS::Point &p1 = Points[pointId1]; GCS::Point &p2 = Points[pointId2]; int tag = ++ConstraintsCounter; - // trick: we do not tag coincidence constraints in order to exclude - // them from the diagnosing of conflicts - //GCSsys.addConstraintP2PCoincident(p1, p2, tag); - GCSsys.addConstraintP2PCoincident(p1, p2); + GCSsys.addConstraintP2PCoincident(p1, p2, tag); return ConstraintsCounter; } return -1; From 8078b7e0a7a810a44ff2d273b7e020e65452bf63 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 26 May 2012 00:29:29 +0200 Subject: [PATCH 229/517] Handle OCC exception in exportStl --- src/Mod/Part/App/TopoShapePyImp.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp index 3aef9eab9..8f641a2f7 100644 --- a/src/Mod/Part/App/TopoShapePyImp.cpp +++ b/src/Mod/Part/App/TopoShapePyImp.cpp @@ -347,7 +347,12 @@ PyObject* TopoShapePy::exportStl(PyObject *args) } catch (const Base::Exception& e) { PyErr_SetString(PyExc_Exception,e.what()); - return NULL; + return 0; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; } Py_Return; From b7d19df3ab939e0a76d7fcc8a05434ffac8ec2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 26 May 2012 15:33:29 +0200 Subject: [PATCH 230/517] Added trim option to GZ curves tool --- src/Mod/Ship/shipHydrostatics/Tools.py | 6 +- src/Mod/Ship/tankGZ/TaskPanel.py | 106 ++++++++++++++++++++----- src/Mod/Ship/tankGZ/TaskPanel.ui | 84 +++++++++++++++++--- 3 files changed, 163 insertions(+), 33 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 3db003957..2c0e5aa36 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -439,9 +439,9 @@ def KBT(ship, draft, trim, roll=0.0): @param draft Draft. @param trim Trim in degrees. @param roll Roll angle in degrees. - @return [KBTx, KBTy]: \n - KBTy : TRansversal KB y coordinate \n - KBTz : TRansversal KB z coordinate + @return [KBTy, KBTz]: \n + KBTy : Transversal KB y coordinate \n + KBTz : Transversal KB z coordinate """ angle = math.radians(trim) rAngle = math.radians(roll) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 9864bfd10..48a23242b 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -21,6 +21,7 @@ #* * #*************************************************************************** +import math # FreeCAD modules import FreeCAD as App import FreeCADGui as Gui @@ -37,7 +38,6 @@ class TaskPanel: self.ui = Paths.modulePath() + "/tankGZ/TaskPanel.ui" self.ship = None self.tanks = {} - self.trim = 0.0 def accept(self): if not self.ship: @@ -71,11 +71,13 @@ class TaskPanel: pass def setupUi(self): - mw = self.getMainWindow() - form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.tanks = form.findChild(QtGui.QListWidget, "Tanks") - form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") - form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.tanks = form.findChild(QtGui.QListWidget, "Tanks") + form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") + form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + form.trim = form.findChild(QtGui.QDoubleSpinBox, "Trim") + form.autoTrim = form.findChild(QtGui.QPushButton, "TrimAutoCompute") self.form = form # Initial values if self.initValues(): @@ -84,6 +86,8 @@ class TaskPanel: self.onTanksSelection() # Connect Signals and Slots QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) + QtCore.QObject.connect(form.trim,QtCore.SIGNAL("valueChanged(double)"),self.onTrim) + QtCore.QObject.connect(form.autoTrim,QtCore.SIGNAL("pressed()"),self.onAutoTrim) return False def getMainWindow(self): @@ -166,6 +170,10 @@ class TaskPanel: self.form.setWindowTitle(Translator.translate("GZ curve computation")) self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) self.form.findChild(QtGui.QGroupBox, "AnglesGroup").setTitle(Translator.translate("Roll angles.")) + self.form.findChild(QtGui.QLabel, "TrimLabel").setText(Translator.translate("Trim") + " [deg]") + self.form.findChild(QtGui.QLabel, "StartAngleLabel").setText(Translator.translate("Start") + " [deg]") + self.form.findChild(QtGui.QLabel, "EndAngleLabel").setText(Translator.translate("Start") + " [deg]") + self.form.findChild(QtGui.QLabel, "NAngleLabel").setText(Translator.translate("Number of points")) def onTanksSelection(self): """ Called when tanks are selected or deselected. @@ -174,8 +182,59 @@ class TaskPanel: disp = self.computeDisplacement() self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) # Set draft label - draft = self.computeDraft(disp[0]) - self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft)) + draft = self.computeDraft(disp[0], self.form.trim.value()) + self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft[0])) + + def onTrim(self, trim): + """ Called when trim angle value is changed. + @param trim Selected trim angle. + """ + self.onTanksSelection() + + def onAutoTrim(self): + """ Called when trim angle must be auto computed. + """ + # Start at null trim angle + trim = 0.0 + # Get center of gravity + disp = self.computeDisplacement(trim) + G = [disp[1], disp[2], disp[3]] + disp = disp[0] + # Get bouyancy center + draft = self.computeDraft(disp) + xcb = draft[1] + draft = draft[0] + KBT = Hydrostatics.KBT(self.ship, draft, trim) + B = [xcb, KBT[0], KBT[1]] + # Get stability initial condition + BG = [G[0]-B[0], G[1]-B[1], G[2]-B[2]] + x = BG[0]*math.cos(math.radians(trim)) - BG[2]*math.sin(math.radians(trim)) + y = BG[1] + z = BG[0]*math.sin(math.radians(trim)) + BG[2]*math.cos(math.radians(trim)) + var = math.degrees(math.atan2(x,z)) + # Iterate looking stability point + dVar = math.copysign(0.0033, var) + while True: + if (dVar*math.copysign(dVar, var) < 0.0): + break + trim = trim - math.copysign(dVar, var) + # Get center of gravity + disp = self.computeDisplacement(trim) + G = [disp[1], disp[2], disp[3]] + disp = disp[0] + # Get bouyancy center + draft = self.computeDraft(disp, trim) + xcb = draft[1] + draft = draft[0] + KBT = Hydrostatics.KBT(self.ship, draft, trim) + B = [xcb, KBT[0], KBT[1]] + # Get stability initial condition + BG = [G[0]-B[0], G[1]-B[1], G[2]-B[2]] + x = BG[0]*math.cos(math.radians(trim)) - BG[2]*math.sin(math.radians(trim)) + y = BG[1] + z = BG[0]*math.sin(math.radians(trim)) + BG[2]*math.cos(math.radians(trim)) + var = math.degrees(math.atan2(x,z)) + self.form.trim.setValue(trim) def getTanks(self): """ Get the selected tanks objects list. @@ -186,14 +245,15 @@ class TaskPanel: for item in items: tag = str(item.text()) name = self.tanks[tag] - t = App.ActiveDocument.getObject('Tank') + t = App.ActiveDocument.getObject(name) if not t: continue tanks.append(t) return tanks - def computeDisplacement(self): + def computeDisplacement(self, trim=0.0): """ Computes ship displacement. + @param trim Trim angle [degrees]. @return Ship displacement and center of gravity. None if errors detected. """ if not self.ship: @@ -209,33 +269,39 @@ class TaskPanel: # Get selected tanks weights tanks = self.getTanks() for t in tanks: - w = tankWeight(t) + w = tankWeight(t, App.Base.Vector(0.0,-trim,0.0)) + # Unrotate center of gravity + x = w[1]*math.cos(math.radians(-trim)) - w[3]*math.sin(math.radians(-trim)) + y = w[2] + z = w[1]*math.sin(math.radians(-trim)) + w[3]*math.cos(math.radians(-trim)) W[0] = W[0] + w[0] - W[1] = W[1] + w[0]*w[1] - W[2] = W[2] + w[0]*w[2] - W[3] = W[3] + w[0]*w[3] + W[1] = W[1] + w[0]*x + W[2] = W[2] + w[0]*y + W[3] = W[3] + w[0]*z return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] - def computeDraft(self, disp): + def computeDraft(self, disp, trim=0.0): """ Computes ship draft. @param disp Ship displacement. - @return Ship draft. None if errors detected. - @note 0 trim will be assumed. + @param trim Trim angle [degrees]. + @return Ship draft, and longitudinal bouyance center position. None if errors detected. """ if not self.ship: return None # Initial condition - trim = 0.0 dens = 1025 bbox = self.ship.Shape.BoundBox draft = bbox.ZMin dx = bbox.XMax - bbox.XMin dy = bbox.YMax - bbox.YMin w = 0.0 + xcb = 0.0 while(abs(disp - w)/disp > 0.01): draft = draft + (disp - w) / (dens*dx*dy) - w = 1000.0*Hydrostatics.Displacement(self.ship, draft, trim)[1] - return draft + ww = Hydrostatics.Displacement(self.ship, draft, trim) + w = 1000.0*ww[1] + xcb = ww[2] + return [draft,xcb] def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index 41823bf71..3742ecb82 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -7,13 +7,13 @@ 0 0 256 - 368 + 408 256 - 368 + 408 @@ -25,7 +25,7 @@ 0 - 0 + 6 @@ -43,7 +43,7 @@ 0 20 231 - 151 + 231 @@ -71,6 +71,55 @@ + + + + + + + 3 + 0 + + + + Trim [deg] + + + + + + + + 3 + 0 + + + + -45.000000000000000 + + + 45.000000000000000 + + + 0.100000000000000 + + + + + + + + 1 + 0 + + + + Auto + + + + + @@ -78,9 +127,9 @@ - + 0 - 0 + 3 @@ -92,7 +141,7 @@ 0 20 231 - 141 + 101 @@ -121,13 +170,28 @@ - + + + 0.000000000000000 + + + 90.000000000000000 + + - + + + 90.000000000000000 + + - + + + 10000 + + From 1e60d45dd4740707ca2d3ed60d5e51fd7d161faf Mon Sep 17 00:00:00 2001 From: logari81 Date: Sat, 26 May 2012 19:23:38 +0200 Subject: [PATCH 231/517] Sketcher: fix minor issue in sketch diagnostics --- src/Mod/Sketcher/App/freegcs/GCS.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/App/freegcs/GCS.cpp b/src/Mod/Sketcher/App/freegcs/GCS.cpp index 7b9455ddc..ffab4c579 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/freegcs/GCS.cpp @@ -1425,7 +1425,8 @@ int System::diagnose() subSysTmp->applySolution(); for (std::set::const_iterator constr=skipped.begin(); constr != skipped.end(); constr++) { - if ((*constr)->error() < XconvergenceFine) + double err = (*constr)->error(); + if (err * err < XconvergenceFine) redundant.insert(*constr); } resetToReference(); From d92f627a8d206fbf76aaf948e97293346333b012 Mon Sep 17 00:00:00 2001 From: logari81 Date: Sat, 26 May 2012 20:02:57 +0200 Subject: [PATCH 232/517] Sketcher: simplify sketch solver messages --- src/Mod/Sketcher/App/SketchObject.cpp | 14 ++++-- src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp | 44 +++-------------- src/Mod/Sketcher/Gui/TaskSketcherMessages.h | 4 +- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 48 ++++++++++--------- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 4 +- 5 files changed, 46 insertions(+), 68 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 8d75c5f24..c09cd6963 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -1393,10 +1393,14 @@ void SketchObject::appendConflictMsg(const std::vector &conflicting, std::s if (msg.length() > 0) ss << msg; if (conflicting.size() > 0) { - ss << "Please remove at least one of the constraints (" << conflicting[0]; + if (conflicting.size() == 1) + ss << "Please remove the following constraint:\n"; + else + ss << "Please remove at least one of the following constraints:\n"; + ss << conflicting[0]; for (unsigned int i=1; i < conflicting.size(); i++) ss << ", " << conflicting[i]; - ss << ")\n"; + ss << "\n"; } msg = ss.str(); } @@ -1407,7 +1411,11 @@ void SketchObject::appendRedundantMsg(const std::vector &redundant, std::st if (msg.length() > 0) ss << msg; if (redundant.size() > 0) { - ss << "The following constraints were identified as redundant and should be removed:\n" << redundant[0]; + if (redundant.size() == 1) + ss << "Please remove the following redundant constraint:\n"; + else + ss << "Please remove the following redundant constraints:\n"; + ss << redundant[0]; for (unsigned int i=1; i < redundant.size(); i++) ss << ", " << redundant[i]; ss << "\n"; diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp index 5ef6c65fb..dc006117a 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp @@ -54,8 +54,8 @@ TaskSketcherMessages::TaskSketcherMessages(ViewProviderSketch *sketchView) this->groupLayout()->addWidget(proxy); - connectionSetUp = sketchView->signalSetUp.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSetUp, this,_1,_2,_3)); - connectionSolved = sketchView->signalSolved.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSolved, this,_1,_2)); + connectionSetUp = sketchView->signalSetUp.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSetUp, this,_1)); + connectionSolved = sketchView->signalSolved.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSolved, this,_1)); } TaskSketcherMessages::~TaskSketcherMessages() @@ -65,46 +65,14 @@ TaskSketcherMessages::~TaskSketcherMessages() delete ui; } -void TaskSketcherMessages::slotSetUp(int type, int dofs, const std::string &msg) +void TaskSketcherMessages::slotSetUp(QString msg) { - switch(type){ - case -1: - ui->labelConstrainStatus->setText(QString::fromLatin1("Empty sketch")); - break; - case 0: - ui->labelConstrainStatus->setText(QString::fromLatin1("Fully constrained sketch ")); - break; - case 1: - if (dofs==1) - ui->labelConstrainStatus->setText(QString::fromLatin1("Under-constrained sketch with 1 degree of freedom")); - else - ui->labelConstrainStatus->setText(QString::fromLatin1("Under-constrained sketch with %1 degrees of freedom").arg(dofs)); - break; - case 2: - ui->labelConstrainStatus->setText(QString::fromLatin1("Sketch contains conflicting constraints
%1
").arg(QString::fromStdString(msg))); - break; - case 3: - ui->labelConstrainStatus->setText(QString::fromLatin1("Over-constrained sketch
%1
").arg(QString::fromStdString(msg))); - break; - case 4: - ui->labelConstrainStatus->setText(QString::fromLatin1("Sketch contains redundant constraints
%1").arg(QString::fromStdString(msg))); - break; - } + ui->labelConstrainStatus->setText(msg); } -void TaskSketcherMessages::slotSolved(int type, float time) +void TaskSketcherMessages::slotSolved(QString msg) { - switch(type){ - case -1: - ui->labelSolverStatus->setText(QString()); - break; - case 0: - ui->labelSolverStatus->setText(QString::fromLatin1("Solved in %1 sec").arg(time)); - break; - case 1: - ui->labelSolverStatus->setText(QString::fromLatin1("Unsolved (%1)").arg(time)); - break; - } + ui->labelSolverStatus->setText(msg); } #include "moc_TaskSketcherMessages.cpp" diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.h b/src/Mod/Sketcher/Gui/TaskSketcherMessages.h index 7cdc104a7..cdf5f907b 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.h @@ -47,8 +47,8 @@ public: TaskSketcherMessages(ViewProviderSketch *sketchView); ~TaskSketcherMessages(); - void slotSetUp(int type, int dofs, const std::string &msg); - void slotSolved(int type, float time); + void slotSetUp(QString msg); + void slotSolved(QString msg); private Q_SLOTS: diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 2239f7445..4b6cc1988 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -822,9 +822,9 @@ bool ViewProviderSketch::mouseMove(const SbVec3f &point, const SbVec3f &normal, if (edit->ActSketch.movePoint(GeoId, PosId, vec, relative) == 0) { setPositionText(Base::Vector2D(x,y)); draw(true); - signalSolved(0, edit->ActSketch.SolveTime); + signalSolved(QString::fromLatin1("Solved in %1 sec").arg(edit->ActSketch.SolveTime)); } else { - signalSolved(1, edit->ActSketch.SolveTime); + signalSolved(QString::fromLatin1("Unsolved (%1 sec)").arg(edit->ActSketch.SolveTime)); //Base::Console().Log("Error solving:%d\n",ret); } } @@ -835,9 +835,9 @@ bool ViewProviderSketch::mouseMove(const SbVec3f &point, const SbVec3f &normal, if (edit->ActSketch.movePoint(edit->DragCurve, Sketcher::none, vec, relative) == 0) { setPositionText(Base::Vector2D(x,y)); draw(true); - signalSolved(0, edit->ActSketch.SolveTime); + signalSolved(QString::fromLatin1("Solved in %1 sec").arg(edit->ActSketch.SolveTime)); } else { - signalSolved(1, edit->ActSketch.SolveTime); + signalSolved(QString::fromLatin1("Unsolved (%1 sec)").arg(edit->ActSketch.SolveTime)); } } return true; @@ -2808,46 +2808,48 @@ void ViewProviderSketch::solveSketch(void) int dofs = edit->ActSketch.setUpSketch(getSketchObject()->getCompleteGeometry(), getSketchObject()->Constraints.getValues(), getSketchObject()->getExternalGeometryCount()); - std::string msg; if (getSketchObject()->Geometry.getSize() == 0) { - signalSetUp(-1, 0, msg); - signalSolved(-1, 0); + signalSetUp(QString::fromLatin1("Empty sketch")); + signalSolved(QString()); } else if (dofs < 0) { // over-constrained sketch + std::string msg; SketchObject::appendConflictMsg(edit->ActSketch.getConflicting(), msg); - //Base::Console().Warning("Over-constrained sketch\n%s",msg.c_str()); - signalSetUp(3, 0, msg); - signalSolved(-1, 0); + signalSetUp(QString::fromLatin1("Over-constrained sketch
%1
") + .arg(QString::fromStdString(msg))); + signalSolved(QString()); } else if (edit->ActSketch.hasConflicts()) { // conflicting constraints + std::string msg; SketchObject::appendConflictMsg(edit->ActSketch.getConflicting(), msg); - //Base::Console().Warning("Sketch with conflicting constraints\n%s",msg.c_str()); - signalSetUp(2, dofs, msg); - signalSolved(-1, 0); + signalSetUp(QString::fromLatin1("Sketch contains conflicting constraints
%1
") + .arg(QString::fromStdString(msg))); + signalSolved(QString()); } else { if (edit->ActSketch.hasRedundancies()) { // redundant constraints + std::string msg; SketchObject::appendRedundantMsg(edit->ActSketch.getRedundant(), msg); - //Base::Console().Warning("Sketch with redundant constraints\n%s",msg.c_str()); - signalSetUp(4, dofs, msg); + signalSetUp(QString::fromLatin1("Sketch contains redundant constraints
%1
") + .arg(QString::fromStdString(msg))); } if (edit->ActSketch.solve() == 0) { // solving the sketch if (dofs == 0) { // color the sketch as fully constrained edit->FullyConstrained = true; - if (!edit->ActSketch.hasRedundancies()) { - //Base::Console().Message("Fully constrained sketch\n"); - signalSetUp(0, 0, msg); - } + if (!edit->ActSketch.hasRedundancies()) + signalSetUp(QString::fromLatin1("Fully constrained sketch ")); } else if (!edit->ActSketch.hasRedundancies()) { - //Base::Console().Message("Under-constrained sketch with %d degrees of freedom\n", dofs); - signalSetUp(1, dofs, msg); + if (dofs == 1) + signalSetUp(QString::fromLatin1("Under-constrained sketch with 1 degree of freedom")); + else + signalSetUp(QString::fromLatin1("Under-constrained sketch with %1 degrees of freedom").arg(dofs)); } - signalSolved(0, edit->ActSketch.SolveTime); + signalSolved(QString::fromLatin1("Solved in %1 sec").arg(edit->ActSketch.SolveTime)); } else { - signalSolved(1, edit->ActSketch.SolveTime); + signalSolved(QString::fromLatin1("Unsolved (%1 sec)").arg(edit->ActSketch.SolveTime)); } } } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 234ede976..2c98d71eb 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -174,9 +174,9 @@ public: /// signals if the constraints list has changed boost::signal signalConstraintsChanged; /// signals if the sketch has been set up - boost::signal signalSetUp; + boost::signal signalSetUp; /// signals if the sketch has been solved - boost::signal signalSolved; + boost::signal signalSolved; protected: virtual bool setEdit(int ModNum); From 455f5a67c30d5381dc6446c86e78d42d3c827f5e Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 26 May 2012 00:29:29 +0200 Subject: [PATCH 233/517] Handle OCC exception in exportStl --- src/Mod/Part/App/TopoShapePyImp.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp index 3aef9eab9..8f641a2f7 100644 --- a/src/Mod/Part/App/TopoShapePyImp.cpp +++ b/src/Mod/Part/App/TopoShapePyImp.cpp @@ -347,7 +347,12 @@ PyObject* TopoShapePy::exportStl(PyObject *args) } catch (const Base::Exception& e) { PyErr_SetString(PyExc_Exception,e.what()); - return NULL; + return 0; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; } Py_Return; From bfd64a98e87d46224804748be8a0080cb86a67ee Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 27 May 2012 13:01:13 +0200 Subject: [PATCH 234/517] Add new Qt options --- src/App/Application.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index a622eecf2..30033380a 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1450,6 +1450,9 @@ void Application::ParseOptions(int ac, char ** av) ("hidden", "don't show the main window") // this are to ignore for the window system (QApplication) ("style", boost::program_options::value< string >(), "set the application GUI style") + ("stylesheet", boost::program_options::value< string >(), "set the application stylesheet") + ("session", boost::program_options::value< string >(), "restore the application from an earlier session") + ("reverse", "set the application's layout direction from right to left") ("display", boost::program_options::value< string >(), "set the X-Server") ("geometry ", boost::program_options::value< string >(), "set the X-Window geometry") ("font", boost::program_options::value< string >(), "set the X-Window font") From a158a8608f181dce4f652ec6c63c0550ab3739a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 27 May 2012 14:31:10 +0200 Subject: [PATCH 235/517] Added roll angles options controller at GZ curves tool --- src/Mod/Ship/tankGZ/TaskPanel.py | 20 +++++++++++++++++++- src/Mod/Ship/tankGZ/TaskPanel.ui | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 48a23242b..a577ee53c 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -78,6 +78,9 @@ class TaskPanel: form.draft = form.findChild(QtGui.QLabel, "DraftLabel") form.trim = form.findChild(QtGui.QDoubleSpinBox, "Trim") form.autoTrim = form.findChild(QtGui.QPushButton, "TrimAutoCompute") + form.roll0 = form.findChild(QtGui.QDoubleSpinBox, "StartAngle") + form.roll1 = form.findChild(QtGui.QDoubleSpinBox, "EndAngle") + form.nRoll = form.findChild(QtGui.QSpinBox, "NAngle") self.form = form # Initial values if self.initValues(): @@ -88,6 +91,9 @@ class TaskPanel: QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) QtCore.QObject.connect(form.trim,QtCore.SIGNAL("valueChanged(double)"),self.onTrim) QtCore.QObject.connect(form.autoTrim,QtCore.SIGNAL("pressed()"),self.onAutoTrim) + QtCore.QObject.connect(form.roll0,QtCore.SIGNAL("valueChanged(double)"),self.onRoll) + QtCore.QObject.connect(form.roll1,QtCore.SIGNAL("valueChanged(double)"),self.onRoll) + QtCore.QObject.connect(form.nRoll,QtCore.SIGNAL("valueChanged(int)"),self.onRoll) return False def getMainWindow(self): @@ -236,6 +242,15 @@ class TaskPanel: var = math.degrees(math.atan2(x,z)) self.form.trim.setValue(trim) + def onRoll(self, value): + """ Called when roll angles options are modified. + @param value Dummy changed value. + """ + roll0 = self.form.roll0.value() + self.form.roll1.setMinimum(roll0) + roll1 = self.form.roll1.value() + self.form.roll0.setMaximum(roll1) + def getTanks(self): """ Get the selected tanks objects list. @return Selected tanks list. @@ -254,7 +269,10 @@ class TaskPanel: def computeDisplacement(self, trim=0.0): """ Computes ship displacement. @param trim Trim angle [degrees]. - @return Ship displacement and center of gravity. None if errors detected. + @return Ship displacement and center of gravity. None if errors + detected. + @note Returned center of gravity is refered to ship attached + axis coordinates. """ if not self.ship: return None diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index 3742ecb82..c1cad3e01 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -184,13 +184,22 @@ 90.000000000000000 + + 90.000000000000000 + + + 2 + 10000 + + 90 + From 74df8eff2c0e6b98f12afb8a93355a2e9653bb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 27 May 2012 15:41:57 +0200 Subject: [PATCH 236/517] Added GZ computation capabilities. --- src/Mod/Ship/tankGZ/TaskPanel.py | 47 ++++++++++++++++++++++++++++---- src/Mod/Ship/tankGZ/TaskPanel.ui | 6 ++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index a577ee53c..72a7ef057 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -42,6 +42,20 @@ class TaskPanel: def accept(self): if not self.ship: return False + # Get general data + disp = self.computeDisplacement() + draft = self.computeDraft(disp[0], self.form.trim.value()) + trim = self.form.trim.value() + # Get roll angles + roll0 = self.form.roll0.value() + roll1 = self.form.roll1.value() + nRoll = self.form.nRoll.value() + dRoll = (roll1 - roll0) / (nRoll - 1) + roll = [] + GZ = [] + for i in range(0, nRoll): + roll.append(i*dRoll) + GZ.append(self.computeGZ(draft[0], trim, roll[-1])) return True def reject(self): @@ -266,7 +280,7 @@ class TaskPanel: tanks.append(t) return tanks - def computeDisplacement(self, trim=0.0): + def computeDisplacement(self, trim=0.0, roll=0.0): """ Computes ship displacement. @param trim Trim angle [degrees]. @return Ship displacement and center of gravity. None if errors @@ -287,15 +301,18 @@ class TaskPanel: # Get selected tanks weights tanks = self.getTanks() for t in tanks: - w = tankWeight(t, App.Base.Vector(0.0,-trim,0.0)) + w = tankWeight(t, App.Base.Vector(roll,-trim,0.0)) # Unrotate center of gravity x = w[1]*math.cos(math.radians(-trim)) - w[3]*math.sin(math.radians(-trim)) y = w[2] z = w[1]*math.sin(math.radians(-trim)) + w[3]*math.cos(math.radians(-trim)) + w[1] = x + w[2] = y*math.cos(math.radians(-roll)) - z*math.sin(math.radians(-roll)) + w[3] = y*math.sin(math.radians(-roll)) + z*math.cos(math.radians(-roll)) W[0] = W[0] + w[0] - W[1] = W[1] + w[0]*x - W[2] = W[2] + w[0]*y - W[3] = W[3] + w[0]*z + W[1] = W[1] + w[0]*w[1] + W[2] = W[2] + w[0]*w[2] + W[3] = W[3] + w[0]*w[3] return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] def computeDraft(self, disp, trim=0.0): @@ -321,6 +338,26 @@ class TaskPanel: xcb = ww[2] return [draft,xcb] + def computeGZ(self, draft, trim, roll): + """ Compute GZ value. + @param draft Ship draft. + @param trim Ship trim angle [degrees]. + @param roll Ship roll angle [degrees]. + @return GZ value [m]. + """ + # Get center of gravity (x coordinate not relevant) + disp = self.computeDisplacement(trim, roll) + G = [disp[2], disp[3]] + disp = disp[0] + # Get bouyancy center (x coordinate not relevant) + KBT = Hydrostatics.KBT(self.ship, draft, trim, roll) + B = [KBT[0], KBT[1]] + # GZ computation + BG = [G[0] - B[0], G[1] - B[1]] + y = BG[0]*math.cos(math.radians(-roll)) - BG[1]*math.sin(math.radians(-roll)) + z = BG[0]*math.sin(math.radians(-roll)) + BG[1]*math.cos(math.radians(-roll)) + return -y + def createTask(): panel = TaskPanel() Gui.Control.showDialog(panel) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index c1cad3e01..ce59e5d2b 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -182,10 +182,10 @@ - 90.000000000000000 + 89.000000000000000 - 90.000000000000000 + 45.000000000000000 @@ -198,7 +198,7 @@ 10000 - 90 + 46 From aae0c84259c64cc83237d72ef7b624cc4b598632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 27 May 2012 16:39:30 +0200 Subject: [PATCH 237/517] GZ curve plotting --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 1 + src/Mod/Ship/tankGZ/Plot.py | 186 +++++++++++++++++++++++++++++++ src/Mod/Ship/tankGZ/TaskPanel.py | 2 + 4 files changed, 190 insertions(+) create mode 100644 src/Mod/Ship/tankGZ/Plot.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 3106dbc47..7944e4c38 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -116,6 +116,7 @@ SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) SET(ShipGZ_SRCS tankGZ/__init__.py + tankGZ/Plot.py tankGZ/TaskPanel.py tankGZ/TaskPanel.ui ) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 54b7ecf6a..a6d38f500 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -77,6 +77,7 @@ nobase_data_DATA = \ tankCreateTank/TaskPanel.py \ tankCreateTank/TaskPanel.ui \ tankGZ/__init__.py \ + tankGZ/Plot.py \ tankGZ/TaskPanel.py \ tankGZ/TaskPanel.ui diff --git a/src/Mod/Ship/tankGZ/Plot.py b/src/Mod/Ship/tankGZ/Plot.py new file mode 100644 index 000000000..1ce11d344 --- /dev/null +++ b/src/Mod/Ship/tankGZ/Plot.py @@ -0,0 +1,186 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import os +# FreeCAD modules +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base +from FreeCAD import Image, ImageGui +# FreeCADShip modules +from shipUtils import Paths, Translator + +header = """ ################################################################# + + ##### #### ### #### ##### # # ### #### + # # # # # # # # # # # # + # ## #### #### # # # # # # # # # # # + #### # # # # # # # ##### # # ## ## ##### # #### + # # #### #### # # # # # # # # # # + # # # # # # # # # # # # # # + # # #### #### ### # # #### ##### # # ### # + + ################################################################# +""" + +class Plot(object): + def __init__(self, x, y, disp, draft, trim): + """ Constructor. performs plot and show it (Using pyxplot). + @param x Roll angles [deg]. + @param y GZ value [m]. + @param disp Ship displacement [tons]. + @param draft Ship draft [m]. + @param trim Ship trim angle [deg]. + """ + if self.createDirectory(): + return + if self.saveData(x,y): + return + if self.saveLayout(x,y, disp, draft, trim): + return + if self.execute(): + return + ImageGui.open(self.path + 'gz.png') + + def createDirectory(self): + """ Create needed folder to write data and scripts. + @return True if error happens. + """ + self.path = FreeCAD.ConfigGet("UserAppData") + "ShipOutput/" + if not os.path.exists(self.path): + os.makedirs(self.path) + if not os.path.exists(self.path): + msg = Translator.translate("Can't create '" + self.path + "' folder.\n") + FreeCAD.Console.PrintError(msg) + return False + + def saveData(self,x,y): + """ Write data file. + @param x Roll angles. + @param y GZ value. + @return True if error happens. + """ + # Open the file + filename = self.path + 'gz.dat' + try: + Output = open(filename, "w") + except IOError: + msg = Translator.translate("Can't write '" + filename + "' file.\n") + FreeCAD.Console.PrintError(msg) + return True + # Print header + Output.write(header) + Output.write(" #\n") + Output.write(" # File automatically exported by FreeCAD-Ship\n") + Output.write(" # This file contains transversal GZ stability parameter, filled with following columns:\n") + Output.write(" # 1: Roll angles [deg]\n") + Output.write(" # 2: GZ [m]\n") + Output.write(" #\n") + Output.write(" #################################################################\n") + # Print data + if len(x) < 2: + msg = Translator.translate("Not enough data to plot.\n") + FreeCAD.Console.PrintError(msg) + return True + for i in range(0, len(x)): + string = "%f %f\n" % (x[i], y[i]) + Output.write(string) + # Close file + Output.close() + self.dataFile = filename + msg = Translator.translate("Data saved at '" + self.dataFile + "'.\n") + FreeCAD.Console.PrintMessage(msg) + return False + + def saveLayout(self, x, y, disp, draft, trim): + """ Prints the data output. + @param x Roll angles. + @param y GZ value. + @param disp Ship displacement. + @param draft Ship draft. + @param trim Ship trim angle. + @return True if error happens. + """ + filename = self.path + 'gz.pyxplot' + # Open the file + try: + Output = open(filename, "w") + except IOError: + msg = Translator.translate("Can't write '" + filename + "' file.\n") + FreeCAD.Console.PrintError(msg) + return True + # Write header + Output.write(header) + Output.write(" #\n") + Output.write(" # File automatically exported by FreeCAD-Ship\n") + Output.write(" # This file contains a script to plot transversal GZ stability parameter.\n") + Output.write(" # To use it execute:\n") + Output.write(" #\n") + Output.write(" # pyxplot %s\n" % (filename)) + Output.write(" #\n") + Output.write(" #################################################################\n") + # Write general options for hydrostatics + Output.write("set numeric display latex\n") + Output.write("set output '%s'\n" % (self.path + 'gz.eps')) + Output.write("set nokey\n") + Output.write("set grid\n") + Output.write("# X axis\n") + Output.write("set xlabel '$roll$ / degrees'\n") + Output.write("set xtic\n") + Output.write("# Y axis\n") + Output.write("set ylabel '$GZ$ / m'\n") + Output.write("set ytic\n") + Output.write("# Line styles\n") + Output.write("set style 1 line linetype 1 linewidth 2 colour rgb (0):(0):(0)\n") + # Additional data + Output.write("# Additional data\n") + Output.write("set label (1) '$\\Delta = %g \\mathrm{tons}$' %f,%f\n" % (disp, x[0] + 0.65*(x[-1] - x[0]), min(y) + 0.95*(max(y)-min(y)))) + Output.write("set label (2) '$T = %g \\mathrm{m}$' %f,%f\n" % (draft, x[0] + 0.65*(x[-1] - x[0]), min(y) + 0.85*(max(y)-min(y)))) + Output.write("set label (3) '$Trim = %g^\\circ$' %f,%f\n" % (trim, x[0] + 0.65*(x[-1] - x[0]), min(y) + 0.75*(max(y)-min(y)))) + # Write plot call + Output.write("# Plot\n") + Output.write("plot '%s' using 1:2 title 'GZ' axes x1y1 with lines style 1\n" % (self.dataFile)) + # Close file + self.layoutFile = filename + Output.close() + return False + + def execute(self): + """ Calls pyxplot in order to plot an save an image. + @return True if error happens. + """ + filename = self.path + 'gz' + comm = "pyxplot %s" % (self.layoutFile) + if os.system(comm): + msg = Translator.translate("Can't execute pyxplot. Maybe is not installed?\n") + FreeCAD.Console.PrintError(msg) + msg = Translator.translate("Plot will not generated\n") + FreeCAD.Console.PrintError(msg) + return True + comm = "gs -r300 -dEPSCrop -dTextAlphaBits=4 -sDEVICE=png16m -sOutputFile=%s.png -dBATCH -dNOPAUSE %s.eps" % (filename,filename) + if os.system(comm): + msg = Translator.translate("Can't execute ghostscript. Maybe is not installed?\n") + FreeCAD.Console.PrintError(msg) + msg = Translator.translate("Generated image will not converted to png\n") + FreeCAD.Console.PrintError(msg) + return True + return False diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 72a7ef057..5fefccafb 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -28,6 +28,7 @@ import FreeCADGui as Gui # Qt library from PyQt4 import QtGui,QtCore # Module +from Plot import * from Instance import * from TankInstance import * from shipUtils import Paths, Translator @@ -56,6 +57,7 @@ class TaskPanel: for i in range(0, nRoll): roll.append(i*dRoll) GZ.append(self.computeGZ(draft[0], trim, roll[-1])) + Plot(roll, GZ, disp[0]/1000.0, draft[0], trim) return True def reject(self): From ffb5cba1e3b20aa76fc8df8f9626faa80c889894 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 27 May 2012 23:04:04 +0200 Subject: [PATCH 238/517] 0000723: improper handling of qt specific comand line arguments --- src/App/Application.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 30033380a..17b99601f 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1475,6 +1475,28 @@ void Application::ParseOptions(int ac, char ** av) //x11.add_options() // ("display", boost::program_options::value< string >(), "set the X-Server") // ; + //0000723: improper handling of qt specific comand line arguments + std::vector args; + bool merge=false; + for (int i=1; i args; copy(tok.begin(), tok.end(), back_inserter(args)); // Parse the file and store the options - store( boost::program_options::command_line_parser(ac, av). + store( boost::program_options::command_line_parser(args). options(cmdline_options).positional(p).extra_parser(customSyntax).run(), vm); } From cb9ddda7c8ad5f78468f8c58a6d37efd32f58a5b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 28 May 2012 16:02:26 -0300 Subject: [PATCH 239/517] Added FreeCADGui.doCommand() python command --- src/Gui/Application.h | 2 ++ src/Gui/ApplicationPy.cpp | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/Gui/Application.h b/src/Gui/Application.h index 74b3dbb64..44a73d0c6 100644 --- a/src/Gui/Application.h +++ b/src/Gui/Application.h @@ -231,6 +231,8 @@ public: PYFUNCDEF_S(sActiveDocument); PYFUNCDEF_S(sGetDocument); + PYFUNCDEF_S(sDoCommand); + static PyMethodDef Methods[]; private: diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index 9ca9ee3af..9a2a51af4 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -128,6 +128,9 @@ PyMethodDef Application::Methods[] = { {"getDocument", (PyCFunction) Application::sGetDocument, 1, "getDocument(string) -> object\n\n" "Get a document by its name"}, + {"doCommand", (PyCFunction) Application::sDoCommand, 1, + "doCommand(string) -> None\n\n" + "Prints the given string in the python console and runs it"}, {NULL, NULL} /* Sentinel */ }; @@ -765,3 +768,12 @@ PyObject* Application::sRunCommand(PyObject * /*self*/, PyObject *args,PyObject return 0; } } + +PyObject* Application::sDoCommand(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) +{ + char *pstr=0; + if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C + return NULL; // NULL triggers exception + Command::doCommand(Command::Doc,pstr); + return Py_None; +} From 486efd665c3b71f9d5200365c62a6795dbbf8a6f Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 28 May 2012 16:02:56 -0300 Subject: [PATCH 240/517] Testing python Gui.doCommand with the Draft Line tool --- src/Mod/Draft/DraftGui.py | 6 +++++- src/Mod/Draft/DraftTools.py | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 13517f478..7e651a698 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -78,7 +78,11 @@ class todo: try: name = str(name) FreeCAD.ActiveDocument.openTransaction(name) - func() + if isinstance(func,list): + for l in func: + FreeCADGui.doCommand(l) + else: + func() FreeCAD.ActiveDocument.commitTransaction() except: wrn = "[Draft.todo.commit] Unexpected error:", sys.exc_info()[0], "in ", f, "(", arg, ")" diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 885e781c6..81d1bc05d 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -415,13 +415,26 @@ class Line(Creator): def finish(self,closed=False,cont=False): "terminates the operation and closes the poly if asked" if self.obj: + # remove temporary object, if any old = self.obj.Name todo.delay(self.doc.removeObject,old) self.obj = None if (len(self.node) > 1): + # building command string + if self.support: + sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' + else: + sup = 'None' + points='[' + for n in self.node: + if len(points) > 1: + points += ',' + points += 'FreeCAD.Vector('+str(n.x) + ',' + str(n.y) + ',' + str(n.z) + ')' + points += ']' self.commit(translate("draft","Create DWire"), - partial(Draft.makeWire,self.node,closed, - face=self.ui.fillmode,support=self.support)) + ['import Draft', + 'points='+points, + 'Draft.makeWire(points,closed='+str(closed)+',face='+str(bool(self.ui.fillmode))+',support='+sup+')']) if self.ui: self.linetrack.finalize() self.constraintrack.finalize() From dcffcbe1687da2b0636d445e80e52b3e971a73e9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 28 May 2012 23:39:36 +0200 Subject: [PATCH 241/517] 0000726: Fails to compile GIT --- src/Mod/Mesh/App/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Mesh/App/Makefile.am b/src/Mod/Mesh/App/Makefile.am index 27537e060..5ba606444 100644 --- a/src/Mod/Mesh/App/Makefile.am +++ b/src/Mod/Mesh/App/Makefile.am @@ -359,7 +359,7 @@ Mesh_la_DEPENDENCIES = libMesh.la # set the include path found by configure AM_CXXFLAGS = -I$(top_srcdir)/src/3rdParty -I$(top_srcdir)/src -I$(top_builddir)/src $(GTS_CFLAGS) \ - $(all_includes) $(QT4_CORE_CXXFLAGS) + $(all_includes) -I$(EIGEN3_INC) $(QT4_CORE_CXXFLAGS) includedir = @includedir@/Mod/Mesh/App libdir = $(prefix)/Mod/Mesh From 141cd5029a74d5a2136a9e238a9ec22017a69c0e Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 29 May 2012 11:40:51 +0200 Subject: [PATCH 242/517] 0000714: Merge project does not include DiffuseColor --- src/Gui/Document.cpp | 2 +- src/Gui/MergeDocuments.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 4a0880ffa..0192d3e86 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -748,7 +748,7 @@ void Document::exportObjects(const std::vector& obj, Base: << views.size() <<"\">" << std::endl; bool xml = writer.isForceXML(); - writer.setForceXML(true); + //writer.setForceXML(true); writer.incInd(); // indention for 'ViewProvider name' std::map::const_iterator jt; for (jt = views.begin(); jt != views.end(); ++jt) { diff --git a/src/Gui/MergeDocuments.cpp b/src/Gui/MergeDocuments.cpp index a1fc7172a..7addd29be 100644 --- a/src/Gui/MergeDocuments.cpp +++ b/src/Gui/MergeDocuments.cpp @@ -235,4 +235,8 @@ void MergeDocuments::RestoreDocFile(Base::Reader & reader) } xmlReader.readEndElement("Document"); + + // In the file GuiDocument.xml new data files might be added + if (!xmlReader.getFilenames().empty()) + xmlReader.readFiles(static_cast(reader)); } From 96f6c42b40ac08bb2c09cbca7bcae8b21c1d2aa7 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 29 May 2012 22:17:12 -0300 Subject: [PATCH 243/517] Used Gui.doCommand() in all Draft commands --- src/Mod/Draft/DraftTools.py | 186 +++++++++++++++++++++++---------- src/Mod/Draft/DraftVecUtils.py | 4 + 2 files changed, 136 insertions(+), 54 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 81d1bc05d..93fb74fcc 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -380,8 +380,38 @@ class Creator: todo.delayCommit(self.commitList) self.commitList = [] + def getStrings(self): + "returns a couple of useful strings fro building python commands" + + # current plane rotation + p = plane.getRotation() + qr = p.Rotation.Q + qr = '('+str(qr[0])+','+str(qr[1])+','+str(qr[2])+','+str(qr[3])+')' + + # support object + if self.support: + sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' + else: + sup = 'None' + + # contents of self.node + points='[' + for n in self.node: + if len(points) > 1: + points += ',' + points += DraftVecUtils.toString(n) + points += ']' + + # fill mode + if self.ui: + fil = str(bool(self.ui.fillmode)) + else: + fil = "True" + + return qr,sup,points,fil + def commit(self,name,func): - "stores partial actions to be committed to the FreeCAD document" + "stores actions to be committed to the FreeCAD document" self.commitList.append((name,func)) class Line(Creator): @@ -421,20 +451,11 @@ class Line(Creator): self.obj = None if (len(self.node) > 1): # building command string - if self.support: - sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' - else: - sup = 'None' - points='[' - for n in self.node: - if len(points) > 1: - points += ',' - points += 'FreeCAD.Vector('+str(n.x) + ',' + str(n.y) + ',' + str(n.z) + ')' - points += ']' + rot,sup,pts,fil = self.getStrings() self.commit(translate("draft","Create DWire"), ['import Draft', - 'points='+points, - 'Draft.makeWire(points,closed='+str(closed)+',face='+str(bool(self.ui.fillmode))+',support='+sup+')']) + 'points='+pts, + 'Draft.makeWire(points,closed='+str(closed)+',face='+fil+',support='+sup+')']) if self.ui: self.linetrack.finalize() self.constraintrack.finalize() @@ -628,9 +649,12 @@ class BSpline(Line): old = self.obj.Name self.doc.removeObject(old) try: + # building command string + rot,sup,pts,fil = self.getStrings() self.commit(translate("draft","Create BSpline"), - partial(Draft.makeBSpline,self.node,closed, - face=self.ui.fillmode,support=self.support)) + ['import Draft', + 'points='+pts, + 'Draft.makeBSpline(points,closed='+str(closed)+',face='+fil+',support='+sup+')']) except: print "Draft: error delaying commit" if self.ui: @@ -741,12 +765,15 @@ class Rectangle(Creator): if abs(DraftVecUtils.angle(p4.sub(p1),plane.u,plane.axis)) > 1: length = -length height = p2.sub(p1).Length if abs(DraftVecUtils.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height - p = plane.getRotation() - p.move(p1) try: + # building command string + rot,sup,pts,fil = self.getStrings() self.commit(translate("draft","Create Rectangle"), - partial(Draft.makeRectangle,length,height, - p,self.ui.fillmode,support=self.support)) + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(p1), + 'Draft.makeRectangle(length='+str(length)+',height='+str(height)+',placement=pl,face='+fil+',support='+sup+')']) except: print "Draft: error delaying commit" self.finish(cont=True) @@ -1013,23 +1040,30 @@ class Arc(Creator): def drawArc(self): "actually draws the FreeCAD object" - p = plane.getRotation() - p.move(self.center) + rot,sup,pts,fil = self.getStrings() if self.closedCircle: try: - self.commit(translate("draft","Create Circle"), - partial(Draft.makeCircle,self.rad,p, - self.ui.fillmode,support=self.support)) + # building command string + self.commit(translate("draft","Create Circle"), + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',support='+sup+')']) except: - print "Draft: error delaying commit" + print "Draft: error delaying commit" else: sta = math.degrees(self.firstangle) end = math.degrees(self.firstangle+self.angle) if end < sta: sta,end = end,sta try: - self.commit(translate("draft","Create Arc"), - partial(Draft.makeCircle,self.rad,p,self.ui.fillmode, - sta,end,support=self.support)) + # building command string + self.commit(translate("draft","Create Arc"), + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',startangle='+str(sta)+',endangle='+str(end)+',support='+sup+')']) except: print "Draft: error delaying commit" self.finish(cont=True) @@ -1257,11 +1291,14 @@ class Polygon(Creator): def drawPolygon(self): "actually draws the FreeCAD object" - p = plane.getRotation() - p.move(self.center) + rot,sup,pts,fil = self.getStrings() + # building command string self.commit(translate("draft","Create Polygon"), - partial(Draft.makePolygon,self.ui.numFaces.value(),self.rad, - True,p,face=self.ui.fillmode,support=self.support)) + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makePolygon('+str(self.ui.numFaces.value())+',radius='+str(self.rad)+',inscribed=True,placement=pl,face='+fil+',support='+sup+')']) self.finish(cont=True) def numericInput(self,numx,numy,numz): @@ -1326,8 +1363,16 @@ class Text(Creator): def createObject(self): "creates an object in the current doc" - self.commit(translate("draft","Create Text"), - partial(Draft.makeText,self.text,self.node[0])) + tx = '' + for l in self.text: + if tx: + tx += ',' + tx += '"'+l+'"' +# self.commit(translate("draft","Create Text"), +# ['import Draft', +# 'Draft.makeText(['+tx+'],'+DraftVecUtils.toString(self.node[0])+')']) + self.commit(translate("draft","Create Text"),partial(Draft.makeText,self.text,self.node[0])) + self.finish(cont=True) def action(self,arg): @@ -1429,9 +1474,9 @@ class Dimension(Creator): pt = o.ViewObject.RootNode.getChildren()[1].getChildren()[0].getChildren()[0].getChildren()[3] p3 = Vector(pt.point.getValues()[2].getValue()) self.commit(translate("draft","Create Dimension"), - partial(Draft.makeDimension,p1,p2,p3)) - self.commit(translate("draft","Delete Measurement"), - partial(FreeCAD.ActiveDocument.removeObject,o.Name)) + ['import Draft', + 'Draft.makeDimension('+DraftVecUtils.toString(p1)+','+DraftVecUtils.toString(p2)+','+DraftVecUtils.toString(p3)+')', + 'FreeCAD.ActiveDocument.removeObject("'+o.Name+'")']) def createObject(self): "creates an object in the current doc" @@ -1449,8 +1494,8 @@ class Dimension(Creator): self.arcmode,self.node[2])) else: self.commit(translate("draft","Create Dimension"), - partial(Draft.makeDimension,self.node[0],self.node[1], - self.node[2])) + ['import Draft', + 'Draft.makeDimension('+DraftVecUtils.toString(self.node[0])+','+DraftVecUtils.toString(self.node[1])+','+DraftVecUtils.toString(self.node[2])+')']) if self.ui.continueMode: self.cont = self.node[2] if not self.dir: @@ -1712,7 +1757,7 @@ class Modifier: self.commitList = [] def commit(self,name,func): - "stores partial actions to be committed to the FreeCAD document" + "stores actions to be committed to the FreeCAD document" # print "committing" self.commitList.append((name,func)) @@ -1768,10 +1813,20 @@ class Move(Modifier): def move(self,delta,copy=False): "moving the real shapes" + sel = '[' + for o in self.sel: + if len(sel) > 1: + sel += ',' + sel += 'FreeCAD.ActiveDocument.'+o.Name + sel += ']' if copy: - self.commit(translate("draft","Copy"),partial(Draft.move,self.sel,delta,copy)) + self.commit(translate("draft","Copy"), + ['import Draft', + 'Draft.move('+sel+','+DraftVecUtils.toString(delta)+',copy='+str(copy)+')']) else: - self.commit(translate("draft","Move"),partial(Draft.move,self.sel,delta,copy)) + self.commit(translate("draft","Move"), + ['import Draft', + 'Draft.move('+sel+','+DraftVecUtils.toString(delta)+',copy='+str(copy)+')']) self.doc.recompute() def action(self,arg): @@ -1926,14 +1981,20 @@ class Rotate(Modifier): def rot (self,angle,copy=False): "rotating the real shapes" + sel = '[' + for o in self.sel: + if len(sel) > 1: + sel += ',' + sel += 'FreeCAD.ActiveDocument.'+o.Name + sel += ']' if copy: self.commit(translate("draft","Copy"), - partial(Draft.rotate,self.sel, - math.degrees(angle),self.center,plane.axis,copy)) + ['import Draft', + 'Draft.rotate('+sel+','+str(math.degrees(angle))+','+DraftVecUtils.toString(self.center)+',axis='+DraftVecUtils.toString(plane.axis)+',copy='+str(copy)+')']) else: self.commit(translate("draft","Rotate"), - partial(Draft.rotate,self.sel, - math.degrees(angle),self.center,plane.axis,copy)) + ['import Draft', + 'Draft.rotate('+sel+','+str(math.degrees(angle))+','+DraftVecUtils.toString(self.center)+',axis='+DraftVecUtils.toString(plane.axis)+',copy='+str(copy)+')']) def action(self,arg): "scene event handler" @@ -2194,13 +2255,18 @@ class Offset(Modifier): occmode = self.ui.occOffset.isChecked() if hasMod(arg,MODALT) or self.ui.isCopy.isChecked(): copymode = True if self.npts: + print "offset:npts=",self.npts self.commit(translate("draft","Offset"), - partial(Draft.offset,self.sel, - self.npts,copymode,occ=False)) + ['import Draft', + 'Draft.offset(FreeCAD.ActiveDocument.'+self.sel.Name+','+DraftVecUtils.toString(self.ntps)+',copy='+str(copymode)+')']) elif self.dvec: + if isinstance(self.dvec,float): + d = str(self.dvec) + else: + d = DraftVecUtils.toString(self.dvec) self.commit(translate("draft","Offset"), - partial(Draft.offset,self.sel, - self.dvec,copymode,occ=occmode)) + ['import Draft', + 'Draft.offset(FreeCAD.ActiveDocument.'+self.sel.Name+','+d+',copy='+str(copymode)+',occ='+str(occmode)+')']) if hasMod(arg,MODALT): self.extendedCopy = True else: @@ -2222,9 +2288,13 @@ class Offset(Modifier): copymode = False occmode = self.ui.occOffset.isChecked() if self.ui.isCopy.isChecked(): copymode = True + if isinstance(self.dvec,float): + d = str(self.dvec) + else: + d = DraftVecUtils.toString(self.dvec) self.commit(translate("draft","Offset"), - partial(Draft.offset,self.sel, - self.dvec,copymode,occ=occmode)) + ['import Draft', + 'Draft.offset(FreeCAD.ActiveDocument.'+self.sel.Name+','+d+',copy='+str(copymode)+',occ='+str(occmode)+')']) self.finish() @@ -2946,12 +3016,20 @@ class Scale(Modifier): def scale(self,delta,copy=False): "moving the real shapes" + sel = '[' + for o in self.sel: + if len(sel) > 1: + sel += ',' + sel += 'FreeCAD.ActiveDocument.'+o.Name + sel += ']' if copy: self.commit(translate("draft","Copy"), - partial(Draft.scale,self.sel,delta,self.node[0],copy)) + ['import Draft', + 'Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+')']) else: self.commit(translate("draft","Scale"), - partial(Draft.scale,self.sel,delta,self.node[0],copy)) + ['import Draft', + 'Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+')']) def action(self,arg): "scene event handler" diff --git a/src/Mod/Draft/DraftVecUtils.py b/src/Mod/Draft/DraftVecUtils.py index 1f10a2c7e..678965e85 100644 --- a/src/Mod/Draft/DraftVecUtils.py +++ b/src/Mod/Draft/DraftVecUtils.py @@ -40,6 +40,10 @@ def typecheck (args_and_types, name="?"): FreeCAD.Console.PrintWarning("typecheck[" + str(name) + "]: " + str(v) + " is not " + str(t) + "\n") raise TypeError("fcvec." + str(name)) +def toString(u): + "returns a string containing a python command to recreate this vector" + return "FreeCAD.Vector("+str(u.x)+","+str(u.y)+","+str(u.z)+")" + def tup(u,array=False): "returns a tuple (x,y,z) with the vector coords, or an array if array=true" typecheck ([(u,Vector)], "tup"); From 54d4e2cab9b0b6080e2e79d06a3a7f7ff9d54211 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 29 May 2012 22:25:01 -0300 Subject: [PATCH 244/517] Draft: Small fix in Offset tool --- src/Mod/Draft/DraftGeomUtils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index 16468ad0c..7ce4a57f0 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -765,7 +765,7 @@ def isReallyClosed(wire): def getNormal(shape): "finds the normal of a shape, if possible" n = Vector(0,0,1) - if shape.ShapeType == "Face": + if (shape.ShapeType == "Face") and hasattr(shape,"normalAt"): n = shape.normalAt(0.5,0.5) elif shape.ShapeType == "Edge": if isinstance(shape.Curve,Part.Circle): From 93e0c6688d1473ab771dc2040d03f73464d2582a Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 30 May 2012 15:55:06 +0200 Subject: [PATCH 245/517] Handle expections in PointsPy class --- src/Mod/Points/App/PointsPyImp.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Mod/Points/App/PointsPyImp.cpp b/src/Mod/Points/App/PointsPyImp.cpp index 75df742c8..b0b2819ac 100644 --- a/src/Mod/Points/App/PointsPyImp.cpp +++ b/src/Mod/Points/App/PointsPyImp.cpp @@ -59,14 +59,20 @@ int PointsPy::PyInit(PyObject* args, PyObject* /*kwd*/) *getPointKernelPtr() = *(static_cast(pcObj)->getPointKernelPtr()); } else if (PyList_Check(pcObj)) { - addPoints(args); + if (!addPoints(args)) + return -1; } else if (PyTuple_Check(pcObj)) { - addPoints(args); + if (!addPoints(args)) + return -1; } else if (PyString_Check(pcObj)) { getPointKernelPtr()->load(PyString_AsString(pcObj)); } + else { + PyErr_SetString(PyExc_TypeError, "optional argument must be list, tuple or string"); + return -1; + } return 0; } From 1cc99939547cf6f45e745ae10d58e9ebf3ad3f4e Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 30 May 2012 17:32:55 +0200 Subject: [PATCH 246/517] Add method to find segment of a facet index --- src/Mod/Mesh/App/Core/Segmentation.cpp | 10 ++++++++++ src/Mod/Mesh/App/Core/Segmentation.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/Mod/Mesh/App/Core/Segmentation.cpp b/src/Mod/Mesh/App/Core/Segmentation.cpp index 01d99fb11..9d0d69f32 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.cpp +++ b/src/Mod/Mesh/App/Core/Segmentation.cpp @@ -46,6 +46,16 @@ void MeshSurfaceSegment::AddSegment(const std::vector& segm) } } +MeshSegment MeshSurfaceSegment::FindSegment(unsigned long index) const +{ + for (std::vector::const_iterator it = segments.begin(); it != segments.end(); ++it) { + if (std::find(it->begin(), it->end(), index) != it->end()) + return *it; + } + + return MeshSegment(); +} + // -------------------------------------------------------- MeshDistancePlanarSegment::MeshDistancePlanarSegment(const MeshKernel& mesh, unsigned long minFacets, float tol) diff --git a/src/Mod/Mesh/App/Core/Segmentation.h b/src/Mod/Mesh/App/Core/Segmentation.h index 1b29f4bff..9416028b6 100644 --- a/src/Mod/Mesh/App/Core/Segmentation.h +++ b/src/Mod/Mesh/App/Core/Segmentation.h @@ -46,6 +46,7 @@ public: virtual void AddFacet(const MeshFacet& rclFacet); void AddSegment(const std::vector&); const std::vector& GetSegments() const { return segments; } + MeshSegment FindSegment(unsigned long) const; protected: std::vector segments; From fc4d253e3d7537d1711fe6b9237bb7bf9dc724d3 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 30 May 2012 12:58:08 -0300 Subject: [PATCH 247/517] Draft: fixes in commands --- src/Mod/Draft/DraftTools.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 93fb74fcc..9135588a7 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -1363,15 +1363,15 @@ class Text(Creator): def createObject(self): "creates an object in the current doc" - tx = '' + tx = '[' for l in self.text: - if tx: + if len(tx) > 1: tx += ',' - tx += '"'+l+'"' -# self.commit(translate("draft","Create Text"), -# ['import Draft', -# 'Draft.makeText(['+tx+'],'+DraftVecUtils.toString(self.node[0])+')']) - self.commit(translate("draft","Create Text"),partial(Draft.makeText,self.text,self.node[0])) + tx += '"'+str(l)+'"' + tx += ']' + self.commit(translate("draft","Create Text"), + ['import Draft', + 'Draft.makeText('+tx+',point='+DraftVecUtils.toString(self.node[0])+')']) self.finish(cont=True) @@ -1911,19 +1911,21 @@ class ApplyStyle(Modifier): if self.ui: self.sel = Draft.getSelection() if (len(self.sel)>0): + c = ['import Draft'] for ob in self.sel: if (ob.Type == "App::DocumentObjectGroup"): - self.formatGroup(ob) + c.extend(self.formatGroup(ob)) else: - self.commit(translate("draft","Change Style"),partial(Draft.formatObject,ob)) + c.append('Draft.formatObject(FreeCAD.ActiveDocument.'+ob.Name+')') + self.commit(translate("draft","Change Style"),c) def formatGroup(self,grpob): + c=[] for ob in grpob.Group: if (ob.Type == "App::DocumentObjectGroup"): - self.formatGroup(ob) + c.extend(self.formatGroup(ob)) else: - self.commit(translate("draft","Change Style"),partial(Draft.formatObject,ob)) - + c.append('Draft.formatObject(FreeCAD.ActiveDocument.'+ob.Name+')') class Rotate(Modifier): "The Draft_Rotate FreeCAD command definition" From f0b234f9e0bdcf05774813e77dfb11d2b18ab58d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 1 May 2012 14:39:19 +0200 Subject: [PATCH 248/517] Removed faces as class stored variable (PropertyPythonObject::fromString warning). --- src/Mod/Ship/Instance.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 64eecd5cc..104d2f24e 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -39,7 +39,6 @@ class Ship: """ Creates a new ship on active document. @param faces Ship faces (Part::Shape entities). """ - self.faces = faces # Add uniqueness property to identify Ship instances obj.addProperty("App::PropertyBool","IsShip","Ship", str(Translator.translate("True if is a valid ship instance"))).IsShip=True # Add main dimensions @@ -47,7 +46,7 @@ class Ship: obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes - obj.addProperty("Part::PropertyPartShape","Shape","Ship", str(Translator.translate("Ship surfaces"))).Shape = Part.makeShell(self.faces) + obj.addProperty("Part::PropertyPartShape","Shape","Ship", str(Translator.translate("Ship surfaces"))).Shape = Part.makeShell(faces) obj.Proxy = self self.obj = obj @@ -55,12 +54,12 @@ class Ship: ''' Print the name of the property that has changed ''' # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") if prop == "Length" or prop == "Beam" or prop == "Draft": - fp.Shape = Part.makeShell(self.faces) + fp.Shape = Part.makeShell(obj.Shape.Faces) def execute(self, obj): ''' Print a short message when doing a recomputation, this method is mandatory ''' # FreeCAD.Console.PrintMessage("Recompute Ship\n") - obj.Shape = Part.makeShell(self.faces) + obj.Shape = Part.makeShell(obj.Shape.Faces) def lineFaceSection(self,line,surface): """ Returns the point of section of a line with a face @@ -147,7 +146,7 @@ class Ship: wire = wires[j].Edges for k in range(0,len(wire)): edges.append(wire[k]) - # Slice curves to get points (Length based) + # Slice curves to get points points = [] for k in range(0,nP): planePoints = [] From c5739c8829f3b7c25d1342f6590eee5dbf46f725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 1 May 2012 17:08:07 +0200 Subject: [PATCH 249/517] Removed shape duplicities. --- src/Mod/Ship/Instance.py | 4 ++-- src/Mod/Ship/shipCreateShip/TaskPanel.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 104d2f24e..16d77f868 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -46,7 +46,7 @@ class Ship: obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes - obj.addProperty("Part::PropertyPartShape","Shape","Ship", str(Translator.translate("Ship surfaces"))).Shape = Part.makeShell(faces) + obj.Shape = Part.makeShell(faces) obj.Proxy = self self.obj = obj @@ -54,7 +54,7 @@ class Ship: ''' Print the name of the property that has changed ''' # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") if prop == "Length" or prop == "Beam" or prop == "Draft": - fp.Shape = Part.makeShell(obj.Shape.Faces) + pass def execute(self, obj): ''' Print a short message when doing a recomputation, this method is mandatory ''' diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.py b/src/Mod/Ship/shipCreateShip/TaskPanel.py index bec74302a..cbb5319c8 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.py +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.py @@ -49,6 +49,7 @@ class TaskPanel: obj.Draft = self.form.draft.value() # Discretize it ship.discretize(self.form.nSections.value(), self.form.nPoints.value()) + App.ActiveDocument.recompute() return True def reject(self): From f46c60679a3f11afbdc58126e64856f72036ffe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 1 May 2012 17:13:44 +0200 Subject: [PATCH 250/517] Added tank creator. --- src/Mod/Ship/CMakeLists.txt | 20 +- src/Mod/Ship/Icons/Tank.png | Bin 0 -> 10163 bytes src/Mod/Ship/Icons/Tank.xcf | Bin 0 -> 74661 bytes src/Mod/Ship/Icons/Tank.xpm | 1736 +++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 + src/Mod/Ship/Makefile.am | 11 +- src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/TankInstance.py | 1886 +++++++++++++++++++++ src/Mod/Ship/shipLoadExample/TaskPanel.ui | 4 +- src/Mod/Ship/tankCreateTank/TaskPanel.py | 167 ++ src/Mod/Ship/tankCreateTank/TaskPanel.ui | 141 ++ src/Mod/Ship/tankCreateTank/__init__.py | 36 + 12 files changed, 4013 insertions(+), 5 deletions(-) create mode 100644 src/Mod/Ship/Icons/Tank.png create mode 100644 src/Mod/Ship/Icons/Tank.xcf create mode 100644 src/Mod/Ship/Icons/Tank.xpm create mode 100644 src/Mod/Ship/TankInstance.py create mode 100644 src/Mod/Ship/tankCreateTank/TaskPanel.py create mode 100644 src/Mod/Ship/tankCreateTank/TaskPanel.ui create mode 100644 src/Mod/Ship/tankCreateTank/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 058b9aec1..a362a0c6a 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -2,6 +2,7 @@ SET(ShipMain_SRCS InitGui.py ShipGui.py Instance.py + TankInstance.py ) SOURCE_GROUP("" FILES ${ShipMain_SRCS}) @@ -32,6 +33,9 @@ SET(ShipIcons_SRCS Icons/ReparametrizeIco.xpm Icons/Ship.xcf Icons/Ship.xpm + Icons/Tank.png + Icons/Tank.xcf + Icons/Tank.xpm ) SOURCE_GROUP("shipicons" FILES ${ShipIcons_SRCS}) @@ -92,7 +96,14 @@ SET(ShipUtils_SRCS ) SOURCE_GROUP("shiputils" FILES ${ShipUtils_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS}) +SET(ShipCreateTank_SRCS + tankCreateTank/__init__.py + tankCreateTank/TaskPanel.py + tankCreateTank/TaskPanel.ui +) +SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipCreateTank_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -148,6 +159,12 @@ INSTALL( DESTINATION Mod/Ship/shipUtils ) +INSTALL( + FILES + ${ShipCreateTank_SRCS} + DESTINATION + Mod/Ship/tankCreateTank +) INSTALL( FILES ${ShipMain_SRCS} @@ -155,3 +172,4 @@ INSTALL( Mod/Ship ) + diff --git a/src/Mod/Ship/Icons/Tank.png b/src/Mod/Ship/Icons/Tank.png new file mode 100644 index 0000000000000000000000000000000000000000..d8efae6a5662cb8dc6f4e26e5f27df74bd1ea3fe GIT binary patch literal 10163 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 literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/Tank.xcf b/src/Mod/Ship/Icons/Tank.xcf new file mode 100644 index 0000000000000000000000000000000000000000..bd306edc19a166e351a2da2d58cb4ac9ecb9fbc5 GIT binary patch literal 74661 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≤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 c #D6D6D6", +", c #D7D7D7", +"' c #CDCECE", +") c #CFCECE", +"! c #D0CFCF", +"~ c #D3D3D2", +"{ c #D3D3D4", +"] c #D5D4D5", +"^ c #D6D7D6", +"/ c #D8D8D8", +"( c #D8D8D9", +"_ c #D9D9DA", +": c #CCCCCB", +"< c #CCCCCC", +"[ c #CECECD", +"} c #CECECE", +"| c #CFCFCF", +"1 c #D1D2D2", +"2 c #D5D4D4", +"3 c #D8D9D9", +"4 c #DAD9DA", +"5 c #DADBDB", +"6 c #DBDCDB", +"7 c #CACACA", +"8 c #CACBCB", +"9 c #CBCBCB", +"0 c #CCCDCD", +"a c #CECDCD", +"b c #D2D2D1", +"c c #D2D3D3", +"d c #D4D3D3", +"e c #D9D9D8", +"f c #D9D9D9", +"g c #DADBDA", +"h c #DBDCDC", +"i c #DCDCDC", +"j c #DDDDDD", +"k c #DEDEDE", +"l c #C7C8C8", +"m c #C9C9C9", +"n c #CAC9CA", +"o c #CBCBCC", +"p c #CCCDCC", +"q c #CDCDCD", +"r c #D0D1D1", +"s c #D1D2D1", +"t c #D3D2D2", +"u c #D4D4D5", +"v c #D5D5D6", +"w c #D6D7D7", +"x c #D8D7D8", +"y c #D9D8D9", +"z c #DADAD9", +"A c #DBDADA", +"B c #DBDBDC", +"C c #DDDCDD", +"D c #DDDEDE", +"E c #DEDFDE", +"F c #DFE0E0", +"G c #E0E0E1", +"H c #C6C6C6", +"I c #C7C7C7", +"J c #C8C8C7", +"K c #C9C9C8", +"L c #CACAC9", +"M c #CBCACB", +"N c #D0CFD0", +"O c #D1D0D1", +"P c #D1D1D2", +"Q c #D4D4D4", +"R c #D6D5D6", +"S c #D7D6D7", +"T c #D7D8D8", +"U c #DAD9D9", +"V c #DADADA", +"W c #DBDBDB", +"X c #DCDBDC", +"Y c #DDDDDC", +"Z c #DFDEDF", +"` c #E0DFDF", +" . c #E0E0E0", +".. c #E1E1E1", +"+. c #E2E2E2", +"@. c #C5C4C4", +"#. c #C5C5C5", +"$. c #C8C8C8", +"%. c #C9C8C8", +"&. c #D5D5D4", +"*. c #D8D7D7", +"=. c #D9D8D8", +"-. c #DCDDDD", +";. c #DEDDDD", +">. c #E3E4E3", +",. c #E5E4E4", +"'. c #C4C4C4", +"). c #C6C7C6", +"!. c #C7C8C7", +"~. c #C8C8C9", +"{. c #CACACB", +"]. c #CCCBCB", +"^. c #D0D0D1", +"/. c #D5D6D6", +"(. c #D7D7D6", +"_. c #DFDFDF", +":. c #E1E2E2", +"<. c #E3E3E3", +"[. c #E4E3E4", +"}. c #E6E5E5", +"|. c #E6E6E6", +"1. c #E6E7E7", +"2. c #C4C5C5", +"3. c #C6C6C7", +"4. c #CFD0D0", +"5. c #D1D0D0", +"6. c #D6D5D5", +"7. c #DADADB", +"8. c #DCDDDC", +"9. c #DDDDDE", +"0. c #DEDFDF", +"a. c #E1E1E2", +"b. c #E3E2E2", +"c. c #E4E4E4", +"d. c #E5E5E5", +"e. c #E8E8E7", +"f. c #E9E8E9", +"g. c #EAE9EA", +"h. c #C5C5C4", +"i. c #C6C6C5", +"j. c #C7C7C6", +"k. c #CBCACA", +"l. c #CDCDCC", +"m. c #CECFCF", +"n. c #DBDADB", +"o. c #E0E0DF", +"p. c #E1E1E0", +"q. c #E1E2E1", +"r. c #E3E3E4", +"s. c #E4E5E5", +"t. c #E7E6E7", +"u. c #E7E7E8", +"v. c #E9E9E8", +"w. c #E9EAE9", +"x. c #EAEAEA", +"y. c #EBEBEA", +"z. c #C4C5C4", +"A. c #C6C5C5", +"B. c #C6C7C7", +"C. c #CCCCCD", +"D. c #CECECF", +"E. c #D9DAD9", +"F. c #DBDBDA", +"G. c #DEDEDD", +"H. c #E0DFE0", +"I. c #E0E1E0", +"J. c #E6E5E6", +"K. c #E7E7E6", +"L. c #E7E8E7", +"M. c #E8E8E9", +"N. c #E9E9E9", +"O. c #ECECEC", +"P. c #ECEDED", +"Q. c #EDEDEE", +"R. c #010101", +"S. c #C5C4C5", +"T. c #CBCCCB", +"U. c #CDCCCC", +"V. c #CECFCE", +"W. c #CFCFCE", +"X. c #CFCFD0", +"Y. c #D7D8D7", +"Z. c #DEDDDE", +"`. c #E1E0E0", +" + c #E5E6E6", +".+ c #EBEBEB", +"++ c #ECEBEC", +"@+ c #EDEDED", +"#+ c #EEEEEE", +"$+ c #EFEFEF", +"%+ c #F0F0F0", +"&+ c #C4C4C5", +"*+ c #CFCECF", +"=+ c #D2D1D1", +"-+ c #D6D6D5", +";+ c #D8D9D8", +">+ c #DDDEDD", +",+ c #DFDEDE", +"'+ c #E2E3E3", +")+ c #E7E7E7", +"!+ c #E8E8E8", +"~+ c #EBECEC", +"{+ c #ECEDEC", +"]+ c #EFEFF0", +"^+ c #F1F0F1", +"/+ c #F1F1F1", +"(+ c #C7C6C6", +"_+ c #C9C8C9", +":+ c #C9CAC9", +"<+ c #CACBCA", +"[+ c #D2D2D3", +"}+ c #D4D5D5", +"|+ c #DCDCDB", +"1+ c #E3E3E2", +"2+ c #E4E3E3", +"3+ c #E4E4E5", +"4+ c #E5E5E6", +"5+ c #EAEAE9", +"6+ c #ECEBEB", +"7+ c #F0F0EF", +"8+ c #F0F0F1", +"9+ c #C8C7C8", +"0+ c #C8C9C9", +"a+ c #CBCBCA", +"b+ c #CCCBCC", +"c+ c #D7D6D6", +"d+ c #DDDCDC", +"e+ c #E2E2E1", +"f+ c #E2E3E2", +"g+ c #E3E4E4", +"h+ c #E8E7E8", +"i+ c #E9E8E8", +"j+ c #EAE9E9", +"k+ c #EDECEC", +"l+ c #EEEEED", +"m+ c #EFEEEF", +"n+ c #EFF0F0", +"o+ c #F1F0F0", +"p+ c #C5C6C6", +"q+ c #C7C6C7", +"r+ c #D0D0CF", +"s+ c #D4D5D4", +"t+ c #E1E0E1", +"u+ c #E8E9E9", +"v+ c #EDECED", +"w+ c #EEEDED", +"x+ c #EEEFEF", +"y+ c #F0EFF0", +"z+ c #F0F1F0", +"A+ c #D7D7D8", +"B+ c #C8C7C7", +"C+ c #C9C9CA", +"D+ c #D2D1D2", +"E+ c #D9DADA", +"F+ c #E2E1E1", +"G+ c #E9E9EA", +"H+ c #EAEBEB", +"I+ c #D8D8D7", +"J+ c #CBCCCC", +"K+ c #CDCCCD", +"L+ c #D6D6D7", +"M+ c #E6E6E5", +"N+ c #E7E6E6", +"O+ c #E8E7E7", +"P+ c #EFEEEE", +"Q+ c #CDCECD", +"R+ c #D1D1D0", +"S+ c #D2D3D2", +"T+ c #DFE0DF", +"U+ c #E3E2E3", +"V+ c #E4E5E4", +"W+ c #E5E6E5", +"X+ c #ECECED", +"Y+ c #D4D3D4", +"Z+ c #CECDCE", +"`+ c #E6E6E7", +" @ c #EBEAEB", +".@ c #ECECEB", +"+@ c #F0F1F1", +"@@ c #DCDCDD", +"#@ c #EBEAEA", +"$@ c #F0EFEF", +"%@ c #D3D4D3", +"&@ c #E6E7E6", +"*@ c #EEEDEE", +"=@ c #ADADAD", +"-@ c #565656", +";@ c #DCDBDB", +">@ c #DFDFE0", +",@ c #E7E8E8", +"'@ c #E8E9E8", +")@ c #EDEDEC", +"!@ c #EBEBEC", +"~@ c #EEEFEE", +"{@ c #B7B6B7", +"]@ c #E5E4E5", +"^@ c #EDEEED", +"/@ c #B6B6B6", +"(@ c #B6B7B7", +"_@ c #B7B7B6", +":@ c #B7B6B6", +"<@ c #E5E5E4", +"[@ c #B5B6B5", +"}@ c #B5B6B6", +"|@ c #B5B5B5", +"1@ c #B6B5B5", +"2@ c #B6B5B6", +"3@ c #E2E1E2", +"4@ c #E4E4E3", +"5@ c #B4B4B4", +"6@ c #B4B5B5", +"7@ c #B5B5B4", +"8@ c #B6B6B5", +"9@ c #E2E2E3", +"0@ c #B3B4B4", +"a@ c #B4B4B5", +"b@ c #B4B5B4", +"c@ c #B5B4B4", +"d@ c #B3B3B3", +"e@ c #B3B3B4", +"f@ c #B4B3B3", +"g@ c #B4B4B3", +"h@ c #B5B4B5", +"i@ c #D0D1D0", +"j@ c #B3B3B2", +"k@ c #B3B2B3", +"l@ c #B4B3B4", +"m@ c #90B9D9", +"n@ c #91BAD9", +"o@ c #C6C5C6", +"p@ c #B1B2B2", +"q@ c #B2B2B2", +"r@ c #B2B3B2", +"s@ c #B2B3B3", +"t@ c #8FB7D8", +"u@ c #8EB7D7", +"v@ c #8FB8D8", +"w@ c #90B8D8", +"x@ c #91BBD9", +"y@ c #91BCDA", +"z@ c #C2C2C2", +"A@ c #C3C4C3", +"B@ c #C3C4C4", +"C@ c #C8C9C8", +"D@ c #CDCDCE", +"E@ c #B1B1B1", +"F@ c #B1B2B1", +"G@ c #B2B1B2", +"H@ c #B2B2B3", +"I@ c #B3B2B2", +"J@ c #8CB4D6", +"K@ c #8DB4D6", +"L@ c #8DB5D7", +"M@ c #8EB6D7", +"N@ c #8EB7D8", +"O@ c #8FB7D7", +"P@ c #90B9D8", +"Q@ c #91BBDA", +"R@ c #92BCD9", +"S@ c #92BCDA", +"T@ c #C1C1C0", +"U@ c #C1C1C1", +"V@ c #C2C2C1", +"W@ c #C3C3C2", +"X@ c #C3C3C3", +"Y@ c #C3C3C4", +"Z@ c #CAC9C9", +"`@ c #B1B0B0", +" # c #B2B2B1", +".# c #8BB2D5", +"+# c #8BB2D6", +"@# c #8CB3D6", +"## c #8CB3D7", +"$# c #8DB5D6", +"%# c #8EB5D7", +"&# c #8FB8D7", +"*# c #92BBD9", +"=# c #92BBDA", +"-# c #BFC0C0", +";# c #C0C1C0", +"># c #C2C1C1", +",# c #C3C2C2", +"'# c #C4C4C3", +")# c #C5C6C5", +"!# c #C5C5C6", +"~# c #B0B0B0", +"{# c #B0B1B0", +"]# c #B1B1B2", +"^# c #B2B1B1", +"/# c #0E3459", +"(# c #0E355A", +"_# c #0F355A", +":# c #0F365A", +"<# c #8AB2D5", +"[# c #8CB3D5", +"}# c #8BB3D6", +"|# c #8FB6D7", +"1# c #8FB9D7", +"2# c #90B9D7", +"3# c #90BAD8", +"4# c #90BBD9", +"5# c #92BDDA", +"6# c #93BEDA", +"7# c #BEBEBE", +"8# c #BEBFBE", +"9# c #BFBFBE", +"0# c #BFBFC0", +"a# c #C0C0BF", +"b# c #C2C3C2", +"c# c #C4C3C3", +"d# c #AFB0B0", +"e# c #AFAFB0", +"f# c #B0AFB0", +"g# c #B0B1B1", +"h# c #B0B0B1", +"i# c #B1B0B1", +"j# c #7A9EC5", +"k# c #799FC5", +"l# c #7A9FC5", +"m# c #7AA0C6", +"n# c #0E345A", +"o# c #0F3559", +"p# c #8BB1D5", +"q# c #8CB4D5", +"r# c #8FB9D8", +"s# c #90BAD7", +"t# c #91BBD8", +"u# c #91BCD9", +"v# c #91BDD9", +"w# c #92BEDA", +"x# c #93BFDA", +"y# c #BDBDBD", +"z# c #BDBEBD", +"A# c #BEBEBD", +"B# c #BEBEBF", +"C# c #BEBFBF", +"D# c #BFBFBF", +"E# c #C0C0C0", +"F# c #C1C0C0", +"G# c #C0C1C1", +"H# c #C3C2C3", +"I# c #C4C3C4", +"J# c #AFAEAF", +"K# c #AFAFAF", +"L# c #B0AFAF", +"M# c #789DC5", +"N# c #789EC5", +"O# c #799EC5", +"P# c #7AA1C5", +"Q# c #7BA1C5", +"R# c #0F3659", +"S# c #10375A", +"T# c #8DB6D6", +"U# c #8EB8D7", +"V# c #92BDD9", +"W# c #143F5B", +"X# c #174A6A", +"Y# c #84B0CB", +"Z# c #85B0CC", +"`# c #BCBCBC", +" $ c #BDBCBC", +".$ c #C0C0C1", +"+$ c #C1C2C1", +"@$ c #C2C3C3", +"#$ c #AEAEAE", +"$$ c #AEAFAF", +"%$ c #AFAFAE", +"&$ c #779BC4", +"*$ c #779CC4", +"=$ c #789CC4", +"-$ c #789DC4", +";$ c #789EC4", +">$ c #799FC4", +",$ c #7AA0C5", +"'$ c #10385A", +")$ c #8DB7D7", +"!$ c #8EB7D6", +"~$ c #90BBD8", +"{$ c #133E5B", +"]$ c #83AEC9", +"^$ c #84AFCA", +"/$ c #85B1CB", +"($ c #85B2CB", +"_$ c #BDBCBD", +":$ c #BEBDBD", +"<$ c #C0BFBF", +"[$ c #C1C1C2", +"}$ c #C9CACA", +"|$ c #AEAEAD", +"1$ c #AEAFAE", +"2$ c #AEAEAF", +"3$ c #7599C3", +"4$ c #7699C3", +"5$ c #7699C2", +"6$ c #769AC3", +"7$ c #779BC3", +"8$ c #789BC4", +"9$ c #799EC4", +"0$ c #79A0C4", +"a$ c #8CB5D5", +"b$ c #8CB5D6", +"c$ c #8DB7D6", +"d$ c #426D8A", +"e$ c #16486A", +"f$ c #7AA5C1", +"g$ c #83ADC9", +"h$ c #84B1CB", +"i$ c #85B1CC", +"j$ c #BCBDBD", +"k$ c #BDBDBC", +"l$ c #BFBEBF", +"m$ c #BFC0BF", +"n$ c #ADADAC", +"o$ c #AEADAD", +"p$ c #ADAEAD", +"q$ c #ADAEAE", +"r$ c #7496C2", +"s$ c #7597C2", +"t$ c #7598C2", +"u$ c #769BC2", +"v$ c #779BC2", +"w$ c #779CC3", +"x$ c #789DC3", +"y$ c #7AA0C4", +"z$ c #7AA1C4", +"A$ c #7AA2C5", +"B$ c #7BA2C5", +"C$ c #10395A", +"D$ c #8EB6D6", +"E$ c #8EB8D6", +"F$ c #133D5A", +"G$ c #81ABC8", +"H$ c #82ACC9", +"I$ c #82ADC9", +"J$ c #82AEC9", +"K$ c #83AFC9", +"L$ c #83B0CA", +"M$ c #BDBEBE", +"N$ c #C1C0C1", +"O$ c #C7C7C8", +"P$ c #ADACAC", +"Q$ c #AFAEAE", +"R$ c #7395C1", +"S$ c #7395C2", +"T$ c #7496C1", +"U$ c #7599C2", +"V$ c #769BC3", +"W$ c #779DC3", +"X$ c #789EC3", +"Y$ c #7AA2C4", +"Z$ c #7BA3C4", +"`$ c #7BA3C5", +" % c #11395A", +".% c #113A5A", +"+% c #123C5A", +"@% c #164A6E", +"#% c #4C7694", +"$% c #80AAC7", +"%% c #80ABC8", +"&% c #81ACC9", +"*% c #81ACC8", +"=% c #81ADC9", +"-% c #83AFCA", +";% c #84B0CA", +">% c #84B1CA", +",% c #86B3CB", +"'% c #87B4CC", +")% c #BFBEBE", +"!% c #ACACAC", +"~% c #ABACAC", +"{% c #ACACAD", +"]% c #7294C0", +"^% c #7194C0", +"/% c #7294C1", +"(% c #7394C1", +"_% c #7396C1", +":% c #7497C2", +"<% c #7498C2", +"[% c #799FC3", +"}% c #7CA3C5", +"|% c #123B5A", +"1% c #88B1D0", +"2% c #7EA8C6", +"3% c #7FA9C6", +"4% c #7FAAC7", +"5% c #81ADC8", +"6% c #85B1CA", +"7% c #86B2CB", +"8% c #86B4CB", +"9% c #87B5CB", +"0% c #BCBCBD", +"a% c #C0BFC0", +"b% c #ABABAB", +"c% c #ACABAC", +"d% c #ABABAC", +"e% c #ACADAC", +"f% c #ACADAD", +"g% c #7193C0", +"h% c #7293C0", +"i% c #7193C1", +"j% c #7293C1", +"k% c #7498C1", +"l% c #789FC4", +"m% c #79A1C3", +"n% c #79A1C4", +"o% c #7BA2C4", +"p% c #7CA4C5", +"q% c #7CA4C4", +"r% c #16496F", +"s% c #7DA7C5", +"t% c #7FAAC6", +"u% c #80ABC7", +"v% c #80ACC7", +"w% c #82AFC9", +"x% c #84B1C9", +"y% c #85B2CA", +"z% c #87B5CC", +"A% c #88B6CC", +"B% c #BDBDBE", +"C% c #C1C2C2", +"D% c #AAABAB", +"E% c #AAAAAA", +"F% c #ABAAAB", +"G% c #ABACAB", +"H% c #ACACAB", +"I% c #7192C0", +"J% c #7292C0", +"K% c #7598C1", +"L% c #7599C1", +"M% c #759AC1", +"N% c #769AC2", +"O% c #779CC2", +"P% c #779DC2", +"Q% c #789DC2", +"R% c #78A0C3", +"S% c #7CA3C4", +"T% c #7AA2C2", +"U% c #7CA5C4", +"V% c #7DA5C4", +"W% c #7DA6C5", +"X% c #7EA8C5", +"Y% c #82ADC8", +"Z% c #83B0C9", +"`% c #85B3CA", +" & c #86B5CB", +".& c #87B6CC", +"+& c #BCBDBC", +"@& c #C2C1C2", +"#& c #C2C2C3", +"$& c #AAA9AA", +"%& c #AAABAA", +"&& c #ABAAAA", +"*& c #7091BF", +"=& c #7092BF", +"-& c #7191C0", +";& c #7192BF", +">& c #7092C0", +",& c #7295C0", +"'& c #7497C1", +")& c #759AC2", +"!& c #769CC2", +"~& c #789FC3", +"{& c #79A0C3", +"]& c #79A2C4", +"^& c #7AA4C3", +"/& c #7BA4C4", +"(& c #7DA8C5", +"_& c #7EA9C6", +":& c #80AAC6", +"<& c #81ADC7", +"[& c #82ADC7", +"}& c #82AEC8", +"|& c #88B7CC", +"1& c #A9A9A9", +"2& c #A9AAAA", +"3& c #A9A9AA", +"4& c #A9AAA9", +"5& c #7090BE", +"6& c #7091BE", +"7& c #7092BE", +"8& c #7191BF", +"9& c #7397C1", +"0& c #7499C1", +"a& c #7AA1C3", +"b& c #7AA2C3", +"c& c #79A2C2", +"d& c #7AA3C3", +"e& c #7BA5C4", +"f& c #80ABC6", +"g& c #81ACC7", +"h& c #81AEC8", +"i& c #82AFC8", +"j& c #83B1CA", +"k& c #85B3CB", +"l& c #85B4CA", +"m& c #87B6CB", +"n& c #88B8CC", +"o& c #A8A8A8", +"p& c #6F90BE", +"q& c #6F91BE", +"r& c #7192BE", +"s& c #7193BF", +"t& c #769BC1", +"u& c #779EC3", +"v& c #789FC2", +"w& c #79A1C2", +"x& c #7AA3C2", +"y& c #7BA4C3", +"z& c #7CA6C5", +"A& c #7DA7C4", +"B& c #7EA7C5", +"C& c #7EA9C5", +"D& c #7EAAC6", +"E& c #7FACC6", +"F& c #81AEC7", +"G& c #82AFC7", +"H& c #83B1C9", +"I& c #84B2C9", +"J& c #84B3C9", +"K& c #86B4CA", +"L& c #89B7CC", +"M& c #89B8CD", +"N& c #A8A8A7", +"O& c #6F90BD", +"P& c #6E90BD", +"Q& c #6E90BE", +"R& c #7293BF", +"S& c #7396C0", +"T& c #7397C0", +"U& c #7498C0", +"V& c #759BC1", +"W& c #769CC1", +"X& c #779EC2", +"Y& c #789EC2", +"Z& c #78A0C1", +"`& c #78A1C2", +" * c #7BA6C3", +".* c #7BA6C4", +"+* c #7CA6C4", +"@* c #7FABC6", +"#* c #82AEC7", +"$* c #83AFC8", +"%* c #83B0C8", +"&* c #88B7CB", +"** c #89B9CC", +"=* c #89BACD", +"-* c #6E8FBD", +";* c #6F91BD", +">* c #7093BF", +",* c #7194BF", +"'* c #7294BF", +")* c #7395C0", +"!* c #7398C0", +"~* c #779FC1", +"{* c #77A0C1", +"]* c #78A1C1", +"^* c #7AA4C2", +"/* c #7CA7C4", +"(* c #7DA8C4", +"_* c #7DA9C5", +":* c #7FAAC5", +"<* c #80ACC6", +"[* c #80ADC7", +"}* c #84B1C8", +"|* c #88B8CB", +"1* c #89BACC", +"2* c #BEBDBE", +"3* c #12285A", +"4* c #768CBE", +"5* c #768DBE", +"6* c #6E91BD", +"7* c #7193BE", +"8* c #7295BF", +"9* c #7396BF", +"0* c #7398BF", +"a* c #7499C0", +"b* c #749AC1", +"c* c #779DC1", +"d* c #789FC1", +"e* c #779EC0", +"f* c #769EC0", +"g* c #769FC0", +"h* c #77A0C0", +"i* c #79A2C1", +"j* c #79A3C2", +"k* c #7BA4C2", +"l* c #7CA7C3", +"m* c #7EAAC5", +"n* c #80ADC6", +"o* c #82B0C7", +"p* c #85B2C9", +"q* c #85B3C9", +"r* c #85B4C9", +"s* c #86B5CA", +"t* c #87B6CA", +"u* c #88B9CC", +"v* c #8AB9CC", +"w* c #8ABACC", +"x* c #8BBBCC", +"y* c #758BBE", +"z* c #758CBE", +"A* c #768CBF", +"B* c #6E91BE", +"C* c #7093BE", +"D* c #7397BF", +"E* c #7497BF", +"F* c #749AC0", +"G* c #759AC0", +"H* c #769BC0", +"I* c #769CC0", +"J* c #779EC1", +"K* c #769DC0", +"L* c #759DBF", +"M* c #769DBE", +"N* c #77A1C0", +"O* c #7AA5C2", +"P* c #7DA7C3", +"Q* c #7EA9C4", +"R* c #7EAAC4", +"S* c #7FABC5", +"T* c #81ADC6", +"U* c #81AFC7", +"V* c #82B0C8", +"W* c #83B1C8", +"X* c #84B2C8", +"Y* c #86B6CB", +"Z* c #87B7CA", +"`* c #87B7CB", +" = c #84AFCB", +".= c #143F5A", +"+= c #12275A", +"@= c #758BBD", +"#= c #768BBE", +"$= c #6E8FBC", +"%= c #6E8EBD", +"&= c #7296BF", +"*= c #7297BF", +"== c #779CC1", +"-= c #749BBE", +";= c #749CBF", +">= c #759EBE", +",= c #769FBF", +"'= c #76A0C0", +")= c #779FC0", +"!= c #7BA5C3", +"~= c #7CA6C3", +"{= c #7CA8C4", +"]= c #7DA9C3", +"^= c #7FAAC4", +"/= c #81AFC6", +"(= c #82B1C7", +"_= c #85B5C9", +":= c #86B6CA", +"<= c #82AECA", +"[= c #758ABD", +"}= c #748ABD", +"|= c #758CBD", +"1= c #6D8FBC", +"2= c #759CC1", +"3= c #769DC1", +"4= c #759BBF", +"5= c #739ABE", +"6= c #759DBE", +"7= c #769EBE", +"8= c #769EBF", +"9= c #779FBF", +"0= c #78A1C0", +"a= c #78A2C1", +"b= c #79A2C0", +"c= c #7AA3C1", +"d= c #7CA8C3", +"e= c #7DA9C4", +"f= c #82B0C6", +"g= c #83B2C8", +"h= c #84B3C8", +"i= c #143E5B", +"j= c #11265A", +"k= c #7489BC", +"l= c #748ABC", +"m= c #758ABC", +"n= c #6D8EBC", +"o= c #6E8EBC", +"p= c #6D8FBD", +"q= c #6F8FBD", +"r= c #7092BD", +"s= c #7294BE", +"t= c #7194BE", +"u= c #7295BE", +"v= c #7196BF", +"w= c #759BC0", +"x= c #749ABE", +"y= c #7399BC", +"z= c #729ABD", +"A= c #739ABD", +"B= c #749CBD", +"C= c #769DBF", +"D= c #779EBF", +"E= c #78A2C0", +"F= c #79A3C1", +"G= c #7AA4C1", +"H= c #7BA6C2", +"I= c #7CA9C4", +"J= c #7EABC4", +"K= c #7FACC4", +"L= c #80ADC5", +"M= c #80AEC6", +"N= c #81AEC6", +"O= c #83B1C7", +"P= c #7EA9C7", +"Q= c #7FAAC8", +"R= c #80AAC8", +"S= c #7388BC", +"T= c #7488BC", +"U= c #7389BC", +"V= c #7489BD", +"W= c #6E8EBB", +"X= c #6D8EBD", +"Y= c #7195BE", +"Z= c #7499BF", +"`= c #749ABF", +" - c #749BC0", +".- c #7198BB", +"+- c #7298BC", +"@- c #7299BC", +"#- c #729ABC", +"$- c #739BBD", +"%- c #749BBD", +"&- c #749DBE", +"*- c #76A0BF", +"=- c #77A2C0", +"-- c #78A3C1", +";- c #79A4C1", +">- c #7CA8C2", +",- c #7DAAC4", +"'- c #7FACC5", +")- c #7DA7C6", +"!- c #7FA9C7", +"~- c #133E5A", +"{- c #7387BC", +"]- c #6F92BD", +"^- c #7094BE", +"/- c #7296BE", +"(- c #7399BD", +"_- c #0E3559", +":- c #7096BB", +"<- c #7197BB", +"[- c #7199BB", +"}- c #739BBC", +"|- c #749CBE", +"1- c #749EBE", +"2- c #769FBE", +"3- c #77A0BF", +"4- c #77A1BF", +"5- c #78A3C0", +"6- c #79A4C0", +"7- c #7AA6C2", +"8- c #7BA7C2", +"9- c #7DA8C3", +"0- c #7EACC5", +"a- c #7CA5C5", +"b- c #10255A", +"c- c #7286BB", +"d- c #7287BC", +"e- c #6D8EBB", +"f- c #7093BD", +"g- c #7094BD", +"h- c #7195BF", +"i- c #7399BF", +"j- c #739ABF", +"k- c #7398BE", +"l- c #6F95BA", +"m- c #7096BA", +"n- c #7097BB", +"o- c #739ABC", +"p- c #739CBD", +"q- c #759EBF", +"r- c #78A2BF", +"s- c #7CA7C2", +"t- c #10245A", +"u- c #7185BB", +"v- c #7286BC", +"w- c #7387BB", +"x- c #7487BC", +"y- c #6E90BC", +"z- c #6F93BE", +"A- c #7196BE", +"B- c #7297BE", +"C- c #7298BF", +"D- c #7297BD", +"E- c #6E94BA", +"F- c #6F95B9", +"G- c #6F96BA", +"H- c #7097BA", +"I- c #729ABB", +"J- c #749DBD", +"K- c #77A0BE", +"L- c #78A4C0", +"M- c #7AA5C0", +"N- c #7CA7C5", +"O- c #7185BA", +"P- c #7286BA", +"Q- c #7285BB", +"R- c #7386BB", +"S- c #7288BC", +"T- c #7589BD", +"U- c #6E91BC", +"V- c #6F91BC", +"W- c #6E92BC", +"X- c #6F93BD", +"Y- c #7194BD", +"Z- c #7195BD", +"`- c #7298BE", +" ; c #7297BC", +".; c #6D93B8", +"+; c #6E94B8", +"@; c #6E95B9", +"#; c #7096B9", +"$; c #739CBC", +"%; c #76A0BE", +"&; c #78A1BF", +"*; c #79A1C1", +"=; c #79A4C2", +"-; c #7BA3C3", +";; c #7084BA", +">; c #7184BB", +",; c #7085BB", +"'; c #7186BB", +"); c #7287BB", +"!; c #7388BB", +"~; c #6C8EBB", +"{; c #6D8FBB", +"]; c #6F92BC", +"^; c #7095BD", +"/; c #7196BD", +"(; c #7195BC", +"_; c #0E3359", +":; c #6C92B7", +"<; c #6D94B8", +"[; c #6F96B9", +"}; c #6F97BA", +"|; c #7299BB", +"1; c #729BBB", +"2; c #749DBC", +"3; c #759EBD", +"4; c #759FBE", +"5; c #10235A", +"6; c #7083BA", +"7; c #7084BB", +"8; c #7085BA", +"9; c #7093BC", +"0; c #7095BC", +"a; c #6C91B7", +"b; c #6E95B8", +"c; c #7198BA", +"d; c #739BBB", +"e; c #78A2C2", +"f; c #0F225A", +"g; c #6F82B9", +"h; c #7083B9", +"i; c #6F83B9", +"j; c #6F83BA", +"k; c #7184BA", +"l; c #6C8DBB", +"m; c #6C8FBB", +"n; c #6D90BB", +"o; c #6E91BB", +"p; c #6F93BC", +"q; c #7094BC", +"r; c #6F94BB", +"s; c #0D3259", +"t; c #6A8FB6", +"u; c #6B91B7", +"v; c #6E93B8", +"w; c #7098BA", +"x; c #7099BA", +"y; c #7199BA", +"z; c #729BBC", +"A; c #6E81B9", +"B; c #6E82B9", +"C; c #6E90BB", +"D; c #6E93BA", +"E; c #698EB6", +"F; c #6A8EB6", +"G; c #6A90B6", +"H; c #6B90B6", +"I; c #6B92B7", +"J; c #6D93B7", +"K; c #6E96B8", +"L; c #6F97B9", +"M; c #7098BB", +"N; c #78A0C0", +"O; c #6E80B8", +"P; c #6E81B8", +"Q; c #6F81B8", +"R; c #6F81B9", +"S; c #6F82B8", +"T; c #6F92BB", +"U; c #6E92BA", +"V; c #0D3159", +"W; c #688DB4", +"X; c #698EB5", +"Y; c #698FB5", +"Z; c #6A90B7", +"`; c #6C93B7", +" > c #518FC8", +".> c #6F96B8", +"+> c #123A5A", +"@> c #0F215A", +"#> c #6D80B8", +"$> c #6D81B8", +"%> c #6C8FBA", +"&> c #6E90BA", +"*> c #6E92BB", +"=> c #6E93BC", +"-> c #0C3159", +";> c #678CB4", +">> c #678DB4", +",> c #688EB4", +"'> c #698EB4", +")> c #6A90B5", +"!> c #6B91B6", +"~> c #6D94B7", +"{> c #6D95B8", +"]> c #6E96B9", +"^> c #0E2159", +"/> c #6C7FB8", +"(> c #6D7FB7", +"_> c #6D7FB8", +":> c #507FC9", +"<> c #6D8FBA", +"[> c #6D91BB", +"}> c #6D91B9", +"|> c #0C3059", +"1> c #678AB3", +"2> c #678BB3", +"3> c #678DB3", +"4> c #6B91B5", +"5> c #6B92B5", +"6> c #6C92B6", +"7> c #6B92B6", +"8> c #6C93B6", +"9> c #0E2059", +"0> c #6C7EB7", +"a> c #6D7EB7", +"b> c #6E80B7", +"c> c #6E82B8", +"d> c #7084B9", +"e> c #6F84BA", +"f> c #6C90B9", +"g> c #668AB2", +"h> c #698FB4", +"i> c #6A90B4", +"j> c #719ABB", +"k> c #749BBC", +"l> c #6B7EB7", +"m> c #6B7DB6", +"n> c #6C7DB7", +"o> c #6C7FB7", +"p> c #6D80B7", +"q> c #6F84B9", +"r> c #7186BA", +"s> c #6C8EB9", +"t> c #6589B1", +"u> c #678CB2", +"v> c #678DB2", +"w> c #688EB3", +"x> c #6A8FB5", +"y> c #6A91B5", +"z> c #6C92B5", +"A> c #6C94B7", +"B> c #6D95B7", +"C> c #759DBD", +"D> c #0E1F5A", +"E> c #6A7CB6", +"F> c #6A7DB6", +"G> c #6C7EB6", +"H> c #7082B9", +"I> c #7285BA", +"J> c #7085B9", +"K> c #0E335A", +"L> c #658BB1", +"M> c #668BB1", +"N> c #668CB1", +"O> c #678CB1", +"P> c #688DB3", +"Q> c #688FB3", +"R> c #698FB3", +"S> c #6990B4", +"T> c #7097B9", +"U> c #7197BA", +"V> c #739CBE", +"W> c #0E1F59", +"X> c #6A7BB6", +"Y> c #6B7CB6", +"Z> c #6C7DB6", +"`> c #6B7DB7", +" , c #6F82B6", +"., c #648AB0", +"+, c #658AB1", +"@, c #658BB0", +"#, c #668CB2", +"$, c #688FB4", +"%, c #6B90B5", +"&, c #0D1E59", +"*, c #697BB5", +"=, c #6A7CB7", +"-, c #6B7EB6", +";, c #6C7EB8", +">, c #6E82B7", +",, c #6389B0", +"', c #6489B0", +"), c #658AB0", +"!, c #668AB1", +"~, c #688DB2", +"{, c #6990B5", +"], c #697AB5", +"^, c #697BB6", +"/, c #6A7BB5", +"(, c #6D7EB8", +"_, c #6D81B6", +":, c #6388AE", +"<, c #6388AF", +"[, c #6389AF", +"}, c #6489AF", +"|, c #668BB0", +"1, c #6979B4", +"2, c #6879B5", +"3, c #6879B4", +"4, c #6979B5", +"5, c #6A7AB5", +"6, c #6B7CB7", +"7, c #6D80B5", +"8, c #6287AE", +"9, c #6288AE", +"0, c #0D1D59", +"a, c #6878B4", +"b, c #6778B4", +"c, c #6C7EB5", +"d, c #6186AC", +"e, c #6186AD", +"f, c #6286AE", +"g, c #668DB1", +"h, c #678EB3", +"i, c #0D1C59", +"j, c #6777B3", +"k, c #6777B4", +"l, c #697AB4", +"m, c #6A7CB5", +"n, c #6E81B7", +"o, c #6084AC", +"p, c #6185AC", +"q, c #6086AD", +"r, c #6187AE", +"s, c #6387AE", +"t, c #0C1C59", +"u, c #6676B3", +"v, c #6776B3", +"w, c #6877B4", +"x, c #687AB5", +"y, c #697CB6", +"z, c #6A7DB7", +"A, c #6B7DB5", +"B, c #5F83AC", +"C, c #6083AC", +"D, c #6185AD", +"E, c #6288AD", +"F, c #668BB2", +"G, c #6A91B4", +"H, c #6675B3", +"I, c #6575B3", +"J, c #6677B3", +"K, c #6677B4", +"L, c #6A7DB4", +"M, c #5E82AB", +"N, c #5F83AB", +"O, c #5F84AC", +"P, c #6085AD", +"Q, c #6085AC", +"R, c #10365A", +"S, c #0C1B59", +"T, c #6575B2", +"U, c #6675B2", +"V, c #6676B2", +"W, c #6676B4", +"X, c #6776B4", +"Y, c #687AB4", +"Z, c #5D81AA", +"`, c #5D81AB", +" ' c #5D82AA", +".' c #5E83AB", +"+' c #6083AB", +"@' c #6286AD", +"#' c #648AB1", +"$' c #6473B3", +"%' c #6474B2", +"&' c #697CB3", +"*' c #5D80A9", +"=' c #5E82AA", +"-' c #5F84AB", +";' c #6287AD", +">' c #6389AE", +",' c #0B1A59", +"'' c #6473B2", +")' c #6574B2", +"!' c #6574B3", +"~' c #6778B3", +"{' c #6779B4", +"]' c #687BB2", +"^' c #5B7FA9", +"/' c #5B80A9", +"(' c #5C80A9", +"_' c #5D81A9", +":' c #5E81AA", +"<' c #6184AC", +"[' c #638AB0", +"}' c #678DB1", +"|' c #0B1A58", +"1' c #6372B1", +"2' c #6472B2", +"3' c #6472B1", +"4' c #6473B1", +"5' c #6573B2", +"6' c #6576B3", +"7' c #6878B3", +"8' c #687AB3", +"9' c #5B7EA7", +"0' c #5B7FA8", +"a' c #5B80A8", +"b' c #5C81AA", +"c' c #5F82AB", +"d' c #668DB2", +"e' c #11268E", +"f' c #11268D", +"g' c #0B1958", +"h' c #6373B2", +"i' c #6877B3", +"j' c #6879B2", +"k' c #0C2F59", +"l' c #5A7DA7", +"m' c #5A7EA7", +"n' c #5B7FA7", +"o' c #5B7EA8", +"p' c #5C7FA8", +"q' c #5F83AA", +"r' c #6084AB", +"s' c #6589B0", +"t' c #0C196C", +"u' c #152064", +"v' c #11258D", +"w' c #6371B1", +"x' c #6271B1", +"y' c #6372B2", +"z' c #6778B1", +"A' c #0C2E59", +"B' c #597CA6", +"C' c #5A7CA6", +"D' c #597DA6", +"E' c #5D80AA", +"F' c #5E83AA", +"G' c #0E355B", +"H' c #0C1A6F", +"I' c #131E62", +"J' c #414C90", +"K' c #10258E", +"L' c #6271B0", +"M' c #6272B1", +"N' c #6373B1", +"O' c #6677B1", +"P' c #0B2E59", +"Q' c #577BA5", +"R' c #587BA6", +"S' c #587CA6", +"T' c #5A7EA8", +"U' c #5D82AB", +"V' c #6289AE", +"W' c #1A5FA3", +"X' c #0D1C75", +"Y' c #131E61", +"Z' c #404B8E", +"`' c #475296", +" ) c #10258D", +".) c #6270B0", +"+) c #6272B0", +"@) c #6576B2", +"#) c #6576B1", +"$) c #577AA4", +"%) c #577BA4", +"&) c #587BA5", +"*) c #5C81A9", +"=) c #648AAF", +"-) c #0E345B", +";) c #0D1D79", +">) c #101B5F", +",) c #3C478B", +"') c #11258E", +")) c #6371B0", +"!) c #6575B1", +"~) c #0B2E58", +"{) c #5679A3", +"]) c #5779A4", +"^) c #567AA4", +"/) c #577AA5", +"() c #577BA6", +"_) c #597BA6", +":) c #175797", +"<) c #0E1F82", +"[) c #101B5E", +"}) c #384487", +"|) c #0B1858", +"1) c #6170B0", +"2) c #6575B0", +"3) c #5578A2", +"4) c #5678A3", +"5) c #5679A4", +"6) c #5A7DA6", +"7) c #102394", +"8) c #111C60", +"9) c #141F63", +"0) c #293578", +"a) c #0A1859", +"b) c #616FAF", +"c) c #616FB0", +"d) c #6270AF", +"e) c #6372B0", +"f) c #6474AF", +"g) c #0B2D58", +"h) c #5576A2", +"i) c #5577A2", +"j) c #5577A3", +"k) c #5578A4", +"l) c #5578A3", +"m) c #587CA5", +"n) c #597DA7", +"o) c #5D82A9", +"p) c #6187AD", +"q) c #154F8D", +"r) c #1227A5", +"s) c #0D185C", +"t) c #1B266A", +"u) c #313C80", +"v) c #445093", +"w) c #10248D", +"x) c #6170AF", +"y) c #6474B1", +"z) c #6373AF", +"A) c #5375A1", +"B) c #5476A2", +"C) c #587AA4", +"D) c #5C7FA9", +"E) c #6084AD", +"F) c #102393", +"G) c #0C196A", +"H) c #0E1A5D", +"I) c #242F73", +"J) c #3A4589", +"K) c #626FAF", +"L) c #626FB0", +"M) c #6475B2", +"N) c #6272AE", +"O) c #0A2C59", +"P) c #5275A1", +"Q) c #5376A2", +"R) c #5477A2", +"S) c #144A84", +"T) c #0E1E7F", +"U) c #121D61", +"V) c #2B3679", +"W) c #0A1858", +"X) c #6370B0", +"Y) c #6271AF", +"Z) c #0A2C58", +"`) c #5173A0", +" ! c #5274A1", +".! c #5274A0", +"+! c #0D1B74", +"@! c #10248E", +"#! c #6171AE", +"$! c #51729F", +"%! c #51739F", +"&! c #5273A0", +"*! c #5476A1", +"=! c #5576A3", +"-! c #114379", +";! c #102291", +">! c #0C196B", +",! c #1F2A6E", +"'! c #364185", +")! c #465195", +"!! c #10238D", +"~! c #616EAF", +"{! c #616FAD", +"]! c #0A2B59", +"^! c #50729E", +"/! c #50729F", +"(! c #5375A0", +"_! c #134C8D", +":! c #0E1E81", +"~ c #323D81", +",~ c #0A2D5D", +"'~ c #1354AE", +")~ c #10228F", +"!~ c #212C70", +"~~ c #374286", +"{~ c #0F228B", +"]~ c #1251A7", +"^~ c #283377", +"/~ c #3E4A8D", +"(~ c #0F4085", +"_~ c #0B2F62", +":~ c #1328A8", +"<~ c #0D1C77", +"[~ c #303B7F", +"}~ c #104289", +"|~ c #0B3063", +"1~ c #112497", +"2~ c #1C276A", +"3~ c #0C175B", +"4~ c #0F438A", +"5~ c #0B3266", +"6~ c #0F2088", +"7~ c #0C3367", +"8~ c #365885", +"9~ c #0B3369", +"0~ c #0E1D7C", +"a~ c #0B2F60", +"b~ c #0C366E", +" ", +" ", +" ", +" ", +" ", +" . . ", +" . . . . . . . ", +" . . . . + @ # $ % . . . . ", +" . . . . & * + @ = - % ; > , . . . . ", +" . . . . ' ) ! * + @ ~ { ] % ^ , / ( _ . . . ", +" . . . . : < [ } | * + 1 = $ 2 ; > , / 3 4 5 6 . . . . ", +" . . . . 7 8 9 0 a } | * + b c d 2 % > , / e f g h i j k . . . . ", +" . . . . l m n 9 o p q } | * r s t # u % v w x y z A B i C D E F G . . . ", +" . . . . H I J K L M 9 < q ' | N O P t # Q % R S T / U V W X Y D Z ` ...+.. . . . ", +" . . . . @.#.H I $.%.L M 9 < q } } N r + @ # Q &.R S *.=.f V W X -.;.k ` ...+.+.>.,.. . . . ", +" . . . . '.'.'.#.H ).!.~.n {.].< 0 ' } | ^.b @ # Q ] /.(., / f 4 5 B i D k _. ...:.<.[.,.}.|.1.. . . . ", +" . . . . '.'.'.'.'.2.H 3.J %.m 7 9 < p } ) 4.5.+ @ ~ Q Q 6.> , / 3 4 7.X 8.9.k 0. ...a.b.<.c.d.|.1.e.f.g.. . . ", +" . . . . . '.'.'.'.'.'.'.h.i.j.$.$.m 7 k.< l.a m.| * + @ c Q Q % > , / f f n.B i j k _.o.p.q.+.r.c.s.|.t.u.v.w.x.y.. . . . ", +" . . . . . '.'.'.'.'.'.'.'.z.A.B.I $.m 7 9 ].C.q D.| * + P t # Q 6.> (.T f E.F.6 i j G.0.H.I...+.<.c.d.J.K.L.M.N.x.y.O.P.Q.. . . . ", +" R.. . '.'.'.'.'.'.'.'.'.'.'.S.A.3.I $.m n k.T.U.q V.W.X.+ + t # Q % /.S Y./ z F.W i -.Z.k _.`.a.+.<.r.s. +|.L.M.N.g..+++O.@+#+$+%+. . . ", +" . . . . . '.'.'.'.'.'.'.'.'.&+i.H I $.K n 8 < < q } *+* ^.=+@ { Q ] -+, , ;+_ V W B 8.>+,+_.G ..+.'+c.d.d.t.)+!+M.x.x.~+{+Q.#+$+]+^+/+. . . . ", +" . . =.f . . . . . '.'.'.'.'.'.2.A.H (+$._+:+<+].< q } | N ^.s [+# Q }+6.> *./ f V 5 |+C D 0._. ...q.1+2+3+4+|.1.!+N.5+y.6+O.Q.#+$+7+8+/+/+/+/+. . . . ", +" . . / / y e . . . . . '.'.'.'.&+#.H I 9+0+m a+9 b+l.} m.X.5.+ @ = $ % > c+Y./ f U W X d+k k _. ...e+f+g+c.d.J.)+h+i+j+x.6+k+@+l+m+n+o+/+/+/+/+/+/+/+. . . . ", +" . . S , *.x T / / 3 . . . . . '.'.#.p+q+!.~.m 7 9 < 0 ' } r+* P @ # { s+% w , / e V 5 B -.j k _. .t+e+1+2+3+d.|.K.u.u+N.x..+O.v+w+x+y+z+/+/+/+/+/+/+/+/+/+/+. . . ", +" . . ; > > ^ , A+/ / e y ( . . . . . i.).B+$.C+7 9 : l.a } | * + D+t d Q % > , / f E+5 6 d+j k _.o.p.F+<.r.c.d.J.)+h+!+G+x.H+O.@+@+$+y+%+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", +" . . 2 % % /.-+> ^ S , Y.I+/ =.e . . . . . I $.C+L 9 J+K+a } & 4.+ P c d Q v L+S / f f g |+i j k ,+H.t+:.+.<.c.s.M+N+O+i+N.x..+~+@+#+P+]+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", +" . . # $ Q 2 s+6./.> > , , , , / / ;+y . . . . . 7 a+< U.Q+} | N R+P S+# u % > , / ( f V W i -.Z._.T+I...+.U+c.V+W+t.O+!+N.x.y.++X+@+#+$+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", +" . . @ t # Y+Y+Q Q &.% v v > c+c+S , , / =.( f . . . . . < q Z+) X.^.D+c Q Q % /., Y./ 4 V W i d+k Z T+`.q.+.<.r.d.}.`+)+!+N.x. @.+k+@+#+x+%+z+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . f f . ", +" . . + D+@ c # # $ Q Q Q }+% % /./.S S , *.T / ;+;+f . . . . . m.4.5.b @ # Q % R > , e f V W i 8.j k _.G ..+.'+<.c.4+`+)+h+v.w.y..@O.@+#+x+n++@/+/+/+/+/+/+/+/+/+/+/+. . . . f f f f f . ", +" . . . ^.+ + P b @ c t # - - u u &.% /.R c+c+S , A+/ / y f . . . . . 5.+ @ # Q ] /.L+A+=.f V W |+@@9.k _. .t++.b.g+c.W+|.1.!+u+j+#@~+O.@+l+#+$@8+/+/+/+/+/+/+/+/+/+. . . . f f f f f f f f . ", +" . . | N * * + + =+=+D+@ S+# %@%@- Q 2 % 6.v /.> , , , / T y f f . . . . . # Q % % > , / f E+V B -.9.k _.o.p.F+f+r.c.d.|.&@O+u+N.x..+++@+*@#+]+%+/+/+/+/+/+/+/+. . . =@f f f f f f f f f f -@. ", +" . . . W.D.| | 4.* 5.r + P b @ S+# # Y+- Q Q }+% ; -+> w w S , I+/ / 3 f . . . . . ; > , A+f V g ;@i j k _.>@`...+.r.c.d.|.&@,@'@G+x..+O.)@@+x+$+z+/+/+/+/+/+. . . T / ( y f f f f f f f f f f . . ", +" . . . a } V.} W.| r+4.* ^.* + D+@ @ @ # # - Q Q ] 2 ; /.-+> w (., A+Y./ f f . . . . . , / / U V X @@j k Z .t+a.+.<.c.d.|.K.O+!+G+x.y.!@P.Q.~@$+8+/+/+/+. . . ; > w ^ , T / 3 f f f f f f f f f . . ", +" . {@. . . . Z+} ) D.m.| r+* * 5.r + D+@ S+c # # - Q Q s+% % -+> c+(., , / / / / f . . . . . f g B i j k _._.`.q.+.<.c.]@ +1.O+!+N.x..+!@)@^@#+$+%+%+. . . # - Q % % % > L+w Y./ / / f f f f f f f . . ", +" . /@(@_@:@. . . . [ } } W.| N ! * * R++ + @ @ c c # # # Q u 2 % % ; > L+, , *./ / =.;+f . . . . . i j 9.E >@G ..+.'+c.<@4+&@)+!+N.G+.+O.O.l+#+@+. . . O s @ c c $ Q Q 2 % % > c+, I+x ;+f f f f f f . ", +" . [@/@}@/@/@/@. . . . q } } W.V.! ! N * + O + b b [+t c # $ Q u 2 ] % v R > > ^ *.A+I+/ e f f . . . . 9.E _. ...+.'+[.V+}.|.)+!+v.x..+6+{+.+. . . *+X.r+* r + s @ S+c { - Q s+% > > (., *./ f f f f f . ", +" . |@|@|@1@}@2@/@}@/@. . . . Q+[ } W.| N & * * R++ D+=+@ S+~ # # %@Q Q ] % R -+> ^ , w , , / =.;+f . . . . . ...3@<.4@3+}.|.)+!+u+w.x.)+. . . 0 q } [ V.| & 4.+ R++ b @ # # Q Q &.% 6.> > , A+x ( f f . ", +" . 5@5@6@|@7@|@|@8@}@}@2@/@. . . . ' } ) | | X.| * * ^.+ P 1 @ @ ~ # d Y+Q Q % % v > v w , , *.T / =.f f . . . . . 9@2+,.d.|.t.!+!+b.. . . <+9 o b+p 0 q Z+} ) | N * O + s @ t = d - Q % % -+> ^ , *./ . ", +" . 0@5@a@a@b@c@6@7@|@|@[@8@|@8@. . . . . } ) W.W.N & r+* * r + s 1 @ # # # { - Q u % % ; ; > c+, , , I+/ ( f f . . . . . d.M+t.j . . . $.0+m :+7 M 9 9 < U.q Z+} ) *+& 4.* O + @ @ c # { - }+% % R ^ , . ", +" . d@e@f@f@g@5@5@h@b@5@h@|@b@|@|@|@|@. . . . Z+} } | | & X.r+5.i@+ s D+@ [+t # # Q Q 2 &.% % /.R > c+, , T T / y f . . . . . . . . H 3.I !.$.%.~.C+7 {.a+T.: C.< q q } D.| r+* ^.+ =+1 @ c # - Q s+% v . ", +" . j@k@d@d@d@d@g@f@e@d@l@5@5@a@b@6@c@6@|@|@. . . . [ } } m.| | r+* * + + =+D+@ ~ ~ # m@n@n@Q &.% % v > c+(., , Y./ / =.f . . . '.h.#.#.o@H I I J $.K m C+7 M M ].< U.p q ' D.m.| ! * O + @ @ c @ d d 2 . ", +" . p@q@q@r@r@r@j@s@d@d@f@e@5@l@0@5@5@b@b@c@7@7@7@. . . . } V.V.) | & * * * + s t@u@v@v@w@m@n@x@y@u % v % > > (., , *.x / Y.. . z@A@B@'.2.#.#.p+j.I !.$.C@_+:+C+<+8 9 o < U.0 D@} W.m.| r+* O + s @ t # . ", +" . E@E@F@F@G@q@q@H@H@I@d@H@d@d@d@d@5@f@5@5@5@5@5@c@h@. . . . [ Z+) ) m.| 4.J@K@L@M@N@O@v@w@m@P@x@Q@R@S@] % 6.6.> > w , , . . T@U@V@W@X@Y@X@h.2.#.#.H B.I !.$.$._+Z@7 7 9 T.o < l.q q } } | | X.^.r D+=+. ", +" . `@E@E@E@E@F@G@ #p@q@q@q@q@d@k@d@H@d@d@g@f@g@d@5@0@5@5@6@. . . . Z+} .#+#@###$#L@%#M@O@O@&#P@P@n@n@*#=#S@&.}+% 6.-+> > . . -#T@;#U@>#z@,#X@Y@'#@.#.)#!#H I I I $.K m 7 7 7 9 9 T.< q q } } D.r+4.* 5.. ", +" . ~#~#~#{#~#E@E@E@]#G@^#^# #p@q@q@q@j@k@j@k@d@d@d@d@0@0@e@l@0@5@/#(#_#:#<#.#[#}#K@K@L@M@|#O@#2#3#4#4#x@R@5#6#% }+v . . 7#8#9#0#a#U@T@U@U@,#b#X@c#'.#.#.)#H 3.I l $.$.m m 7 7 M 9 9 < 0 q D@} *+| | . ", +" . d#e#f#~#~#~#g#h#{#{#E@i#E@E@q@F@p@]#q@q@q@q@q@j@d@k@d@d@d@j#k#l#m#n#o#:#:#p#+#}#q#$#$#$#M@M@u@v@1#r#s#3#t#u#v#5#w#x#. . y#z#A#B#C#D#a#E#F#G#V@z@H#X@I#'.@.#.#.H H B.I $.$.0+K :+7 M M : : < q q ' } . ", +" . J#K#K#K#K#L#~#~#~#~#~#~#{#{#i#E@E@^#]#G@]#q@q@^#q@I@H@M#M#N#O#k#k#l#P#Q#_#R#:#S#[#[#J@$#$#T#T#u@U#1#1#P@3#t#t#u#V#W#X#Y#Z#`# $y#z#7#7#D#D#-#.$U@U@+$z@@$H#'#'.2.2.#.p+j.I I l $.%.m m 7 7 9 ].< C.q . ", +" . #$J#K#$$$$%$K#K#L#K#L#f#~#f#~#~#`@`@E@E@E@E@E@E@q@&$*$=$=$-$-$;$O#>$>$,$,$Q#:#:#S#S#'$q#J@$#$#T#)$!$U#1#1#s#~$t#t#{$W#]$^$^$/$($`#_$y#:$7#9#D#<$a#E#U@+$[$b#X@X@A@'.2.#.p+H H B.!.!.~._+m }$7 a+9 ].. ", +" . =@|$#$#$#$1$2$K##$%$K#K#L#e#f#e#~#L#~#~#~#{#3$4$5$6$7$7$8$&$*$-$-$9$9$>$0$0$P#P#Q#S#S#'$'$'$a$b$T#c$!$!$#2#3#d$e$f$g$]$^$^$h$/$i$`#j$k$y#7#7#l$<$m$E#;#U@+$z@z@H#'.'.@.#.#.i.H q+I J $.K K :+C+7 . ", +" . n$o$p$=@o$q$#$q$#$#$#$J##$$$%$$$K#K#e#e#r$s$s$t$4$5$5$u$v$7$w$w$w$-$x$9$>$>$0$y$P#z$A$B$'$'$'$C$b$T#D$D$!$E$#F$F$G$H$I$J$K$^$L$Y#h$($($`#`#y#y#M$7#C#D#E#E#N$U@>#z@b#X@'#'.z.#.#.p+H j.!.O$K 0+m . ", +" . P$P$n$=@=@=@=@p$p$o$#$#$#$#$#$Q$K#Q$R$R$S$T$r$s$t$t$U$5$6$V$6$w$w$W$x$-$X$;$>$0$y$y$z$z$Y$Z$`$'$ % %.%T#T#!$u@+%@%#%$%%%&%*%=%J$K$-%;%>%>%($,%'%`#`#y#z#7#)%D#0#E#;#N$U@z@,#@$X@Y@'.S.#.o@H I j.I J . ", +" . !%!%~%P${%!%n$!%=@=@=@=@=@p$#$]%^%/%/%/%(%S$T$_%:%s$<%t$5$5$5$6$u$7$w$w$-$X$X$>$[%>$y$y$Y$Y$A$`$}%C$ %.%.%|%1%+%+%2%3%4%$%%%*%5%I$J$K$^$;%>%6%7%,%8%9%0%k$:$7#8#8#D#a%E#.$U@[$z@z@X@Y@Y@S.@.#.A.H q+. ", +" . b%b%c%b%d%d%!%!%!%e%f%e%n$g%g%g%^%h%h%i%j%/%R$R$T$_%:%s$k%U$U$4$6$u$V$w$7$w$x$X$X$l%l%0$m%n%z$A$o%`$p%q%.%.%|%r%+%s%2%2%3%t%u%v%*%5%J$]$w%L$x%y%6%7%,%'%z%A%`#y#B%7#l$l$D#E#E#T@[$C%z@H#X@A@I#z.#.A.. ", +" . D%E%F%F%b%b%G%b%~%~%H%I%I%I%J%J%J%g%I%I%g%]%(%R$_%R$T$T$K%k%K%U$L%M%N%u$w$O%P%Q%X$X$X$[%R%0$n%n%z$Y$Z$Z$S%q%T%|%U%V%W%s%X%3%t%4%u%v%*%Y%J$J$Z%;%;%y%y%`%8% &9%.&`#+&y#7#7#B#D#0#E#E#U@U@@&#&W@X@B@&+. ", +" . $&E%E%E%%&E%&&b%b%*&=&-&;&I%;&I%>&I%I%I%I%g%h%]%/%,&_%_%'&'&k%k%L%U$M%)&N%u$!&O%x$x$W$X$~&~&{&{&0$]&z$Y$Z$Z$T%.%^&/&U%W%s%(&2%_&3%:&u%v%<&[&}&K$K$;%>%y%y%,%8%9%9%z%|&`#y#:$7#7#C#m$E#E#.$U@U@z@@$X@. ", +" . 1&$&E%2&3&4&5&6&6&*&7&6&=&=&*&=&>&-&8&-&I%I%J%g%h%]%,&(%R$_%9&9&'&k%0&L%)&)&u$v$O%!&W$P%W$X$~&~&[%a&z$Y$b&o%c&.%d&d&e&/&U%W%s%X%2%3%t%f&f&g&<&<&h&i&Z%Z%j&y%y%k&l& &m&.&|&n&0%y#z#A#)%D#<$E#;#T@>#@&. ", +" . o&1&1&1&p&p&q&q&p&6&6&6&6&6&*&*&r&8&7&=&8&8&I%;&s&g%]%]%]%,&,&_%9&'&:%K%L%L%U$t&)&!&!&!&W$P%u&v&~&[%{&{&a&Y$w& %T%T%x&y&y&U%z&A&A&B&C&D&D&E&v%v%v%F&G&i&Z%H&x%I&J&K&8%9%m&.&|&L&M& $y#M$7#8#D#m$a%U@. ", +" . N&o&O&O&P&Q&q&q&p&6&q&q&6&6&5&6&6&6&6&=&7&*&*&=&;&;&g%R&^%^%,&,&S&T&T&U&U&k%L%L%M%N%V&W&O%!&X&u&v&Y&v&{&m%m%Z&C$Z&`&c&x&x&y&y& *.*+*s%2%C&D&t%@*f&v%<&#*G&$*%*H&x%y%`%l&8%9%m&A%&*n&**=*y#y#7#7#9#m$. ", +" . -*-*P&O&P&P&P&P&O&p&;*Q&p&p&p&q&q&5&6&q&6&6&6&6&*&=&=&>*s&s&,*'*,&)*S&T&T&!*k%k%L%M%M%V&t&!&O%P%P%X&Y&v&v&{&~*'$~*{*]*]*c&x&x&^*^& *+*/*(*_*D&t%:*E&<*[*F&#*G&$*%*}*I&I&`%K& &9%m&&*|*n&**1* $y#2*2*. ", +" 3*4*5*-*-*-*-*O&-*P&O&P&6*P&P&Q&p&p&q&p&6&5&q&6&6&6&q&6&*&7*7*>*s&,*8*8*9*S&T&U&0*U&a*b*M%M%V&W&W&c*c*X&X&Y&d*e*'$f*g*h*{*]*i*j*x&x&k* * *l*(*(*_*C&m*@*f&n*[*F&#*G&o*%*}*p*q*r*K&s*t*m&&*|*u*v*w*x*k$. ", +" 3*y*z*4*4*A*-*-*-*-*-*-*P&P&P&O&P&p&p&P&P&;*B*p&p&q&q&q&6&6&7&=&C*7*,*8*8*8*9*T&D*E*!*a*a*F*G*H*V&I*W&W&c*J*~*K*'$L*M*f*g*h*N*]*i*c&x&^*y&O* *l*P*(*Q*R*m*S*E&<*T*F&U*G&V*W*X*X*q*r*l&s*Y*Z*`*|***** =.= ", +" +=y*@=@=#=4*4*4*5*$=%=-*-*-*-*O&O&P&-*P&P&Q&Q&P&q&p&;*q&q&q&7&q&7&C*s&,*,*'*8*9*&=*=D*!*U&a*F*G*M%V&t&W&W&==c*I*S#-=;=L*>=,='=)=h*]*i*j*j*^*O*!=~=/*{=]=Q*^=S*S*<*<*T*F&/=o*(=W*X*X*J&r*_=s*:=`*I$<=-%.= ", +" +=[=}=}=[=y*@=y*z*|=z*4*1=1=-*$=-*%=-*-*-*P&P&-*P&P&P&Q&p&q&q&p&q&7&7&C*7*,*,*8*8*D*&=D*!*!*a*a*a*F*G*V&2=W&3=4=:#5=-=-=6=7=>=8=9=h*0=a=b=c=^*O*O*!=l*d={=e=R*R*R*S*E&n*F&U*U*f=o*W*g=X*h=r*G$G$&%H$I$i= ", +" j=k=l=m=l=}=}=}=}=[=@=#=@=4*#=n=1=$=o=-*1=p=-*-*P&q=-*q=-*P&O&O&;*q&6&r=C*7*7*s=t=u=&=v=9*D*0*0*a*a*F*w=w=w=2=x=:#y=z=A=B=B=6=8=C=D='=h*N*E=F=F=G=^*H=H=l*d={=I=e=R*J=K=L=L=M=N=U*o*O=P=4%Q=R=R=G$*%H${$ ", +" j=S=T=k=U=k=V=k=k=}=m=[=[=@=@=y*y*@=n=W=1=X=X=$=-*-*p=-*-*-*q=-*-*O&;*;*7&7&7&C*t=t=Y=v=&=&=*=D*D*0*a*Z=G*`= -5=_#.-+-@-#-$-%-B=&-6=7=,=*-N*=-E=----;-O*O* *l*>-d=]=,-J='-'-L=n*N=)-B&X%X%_&_&!-Q=R=R=~- ", +" j={-S={-S=S=T=S=T=k=k=V=k=V=l=[=[=[=y*y*y*n=n=o=o=n=$=p=1=%=%=$=-*-*P&O&;*;*]-r=r&C*^-t=t=/-&=/-0*0*0*0*Z=`=F*(-_-:-<-.-[-#-A=}-$-|-&-1-2-*-3-4-0=E=5-6-;-f$7-8-l*d=9-]=,-J=0-U%a-z&W%W%s%2%2%2%_&3%4%F$ ", +" b-c-c-c-d-{-d-{-S=S=S=S=T=T=k=k=V=k=V=}=[=[=y*@=n=o=e-n=1=o=1=$=p=%=-*-*P&O&;*r=]-7&f-g-t=t=Y=h-&=D**=0*0*i-j-k-(#l-m-n-.-[-@-#-o-$-p-B=&-q-2-2-3-4-r-E=5-;-G=f$H=s-8-d=x&x&y&y&q%U%U%z&W%s%s%X%2%_&2%F$ ", +" t-c-u-c-c-c-v-d-{-w-{-w-S=x-S=S=S=U=k=l=k=k=V=}=}=[=e-e-e-W=e-e-o=o=n=$=$=-*y-O&;*]-]-z-C*g-^-Y=Y=A-&=B-B-C-i-D-n#E-F-l-G-H-.-.-@-I-}-}-B=J-1->=2-3-K-4-r-5-L-6-M-f$]*]*i*c&j*x&^*^*y&e&q%z&z&N-A&s%B&+% ", +" t-O-u-u-u-u-P-Q-c-c-c-v-c-R-{-S-{-S=S=T=S=k=S=k=k=T-}=m=}=e-e-e-e-e-n=1=n=$=$=y-U-6*V-W-X-f-f-g-Y-Z-A-/-B-B-`- ;/#.;+;@;l-#;H-H-.-[-I-I-}-$;p-J->=>=2-%;4-&;r-,=3-,={*Z&]**;a=i*c&=;x&-;y&!=/&U%a-+*s%+% ", +" t-;;>;,;;;O-u-u-';Q-u-Q-Q-P-c-d-);d-);w-!;S=S=U=T=T=k=T=k=V=}=l=e-~;e-e-e-n=$={;y-$=y-U-V-];]-f-f-Y-^;Z-/;/;/;(;_;:;.;.;<;@;l-[;};n-.-|;I-1;}-$;2;J-3;4;%;6=6=6=8=8=,=3-3-h*]*a=a=i*c&j*x&x&^&!=y&U%+*+% ", +" 5;6;;;;;;;;;;;7;8;O-u-O-O-';';';';Q-c-c-);{-);w-{-{-S=k=S=U=T=k=V=k=m=e-e-~;e-e-{;1={;U-U-];V-];9;9;g-Y-^;^;/;0;_;a;a;:;.;.;b;@;[;G-H-c;[-|;I-d;$;$;J-o-}-B=B=|-&-6=8=8=,=9=3-h*0=]*`&e;a=c&x&d&^&^&y&|% ", +" f;g;g;h;h;i;j;j;;;;;8;>;k;O-u-u-O-c-u-u-';c-c-c-);c-d-w-w-S=S=S=S=T=U=k=k=V=l;l;~;m;e-1=n;o;V-U-];p;9;g-q;g-0;r;s;t;u;u;:;:;.;v;+;b;[;};w;w;x;y;[-|;|;I-o-z;}-$-%-B=&-6=6=8=8=,=*-h*h*0=]*]*i*j*j*j*x&|% ", +" f;A;B;g;g;g;g;g;h;j;6;6;;;k;;;;;O-;;O-k;u-u-c-Q-';';';c-v-);c-w-);d-S=S=U=S=S=T=S=l;~;m;{;{;C;y-y-V-];9;p;p;g-D;s;E;F;G;H;I;:;:;J;<;<;K;[;L;L;H-H-M;y;[-|;I-I-}-}-$-%-p-B=6=6=C=7=8=,=)=h*N;0=]*]*i*c&|% ", +" f;O;P;Q;R;P;Q;S;g;g;g;g;g;i;j;j;;;;;;;;;7;k;O-O-u-u-u-P-';P-u-c-c-);d-w-S={-S=!;S=S=U=k=~;{;{;n;y-o;U-T;p;p;p;U;V;W;X;Y;Y;G;Z;u;:;`;J; >b;b;.>[;};H-n-n-c;[-[-I-#-#-o-$-$-p-|-&-6=6=q-8=8=9=9=h*h*0=]*+> ", +" @>O;#>O;$>#>O;P;P;P;P;S;g;g;g;g;i;h;j;6;6;6;;;;;;;,;>;k;u-u-u-u-';u-';c-c-c-);{-);{-{-S-S=S=U=%>{;&>&>o;*>W-=>U;->;>>>,>'>Y;)>)>!>`;J;~>~>{>{>K;@;]>[;G-H-M;w;y;|;[-@-I-d;z;$-p-B=B=|-6=6=M*8=9=9=h*h*.% ", +" ^>/>(>_>(>_>_>O;O;O;$>O;A;A;P;P;S;R;g;g;i;i;i;6;6;;;;;;;;;k;k;u-O-u-O-u-Q-u-c-c-';c-c-);w-d-S=S-S-:><>n;[>[>o;}>|>1>2>3>W;'>'>)>4>5>6>7>8>J;~>~>{>{>b;K;[;[;H-H-.-c;y;[-[-#-#-}-}-p-$-B=|-&-6=>=8=,=,=.% ", +" 9>0>0>0>a>a>(>/>_>_>#>b>O;O;P;$>P;P;P;Q;g;S;c>g;g;h;i;d>j;6;e>;;;;;;k;u-;;O-u-O-Q-Q-';c-';c-);););{-S-S=n;n;[>f>|>g>g>2>'>h>h>h>h>i>)>!>7>7>8>`;`;~>~>b;b;K;.>[;[;m-w;w;c;.-[-j>I-#-z;}-k>B=B=B=&->=>=.% ", +" 9>l>m>n>0>0>0>0>a>o>(>(>_>_>p>#>p>O;O;P;P;Q;P;Q;g;g;g;g;i;g;i;h;e>j;q>;;;;;;8;7;8;>;u-O-u-u-O-';r>c-c-););w-);s>|>t>u>v>3>w>,>,>'>h>x>)>i>y>5>z>7>`;`;A>~>B>{>K;b;[;L;};H-<-w;c;[-|;#-I-#-}-}-$-B=B=C> % ", +" D>E>F>m>m>m>G>0>0>n>0>0>0>o>_>o>(>_>_>#>#>#>O;#>P;P;P;A;P;B;g;B;g;i;H>i;i;6;;;h;;;;;8;7;O-O-O-u-u-Q-I>';Q-c-c-J>K>L>M>N>O>u>v>w>P>w>Q>R>S>h>)>)>4>!>7>6>`;`;J;~>b;{>b;.>K;[;T>H-U>c;c;[-|;@-#-#-$-}-V> % ", +" W>X>E>E>m>Y>m>Y>Z>`>n>0>0>0>l>0>0>0>(>0>(>/>(>_>_>#>#>O;P;P;P;P;A;B;A;R;g;g;g;j;i;i;i;;;;;;;;;;;8;k;8;O-u-O-u- ,K>.,+,@,M>M>#,u>v>3>P>,>Q>$,$,h>)>i>%,4>6>7>6>`;J;~>~>+;b;]>]>[;L;H-w;w;y;.-[-|;#-#-o-'$ ", +" &,X>X>*,X>X>X>X>E>E>=,m>`>m>`>l>-,l>n>0>0>0>;,;,a>o>(>_>_>O;P;#>#>P;O;P;c>B;P;c>B;g;i;i;i;6;;;e>6;;;7;;;,;O-O->,_;,,',.,),!,L>N>N>#,v>v>~,w>w>w>h>h>{,i>y>4>4>7>6>:;`;J;~>{>{>b;]>.>[;L;w;w;c;[-.-[-#-'$ ", +" &,],],],],^,*,],/,X>X>E>E>E>Y>m>m>m>`>n>`>l>G>l>0>0>0>(,;,o>(>_>(>#>O;p>#>#>P;P;P;c>A;S;g;g;g;g;i;j;i;;;;;6;;;_,s;:,<,[,},.,),+,|,L>M>N>#,v>v>P>w>w>$,h>h>S>)>)>4>7>7>6>`;A>~>{>b;b;b;]>.>[;L;w;H-c;[-'$ ", +" &,1,2,3,4,2,],],],5,^,^,X>X>E>E>E>F>6,E>Y>`>`>l>`>`>`>n>l>0>o>a>_>(>_>_>_>#>p>O;O;P;$>P;P;P;g;c>g;c>g;g;i;q>i;7,s;8,8,9,:,[,[,',),.,),M>N>N>N>v>v>v>w>w>,>Q>$,Y;i>)>y>!>5>6>:;`;`;~>{>{>b;K;[;[;};H-U>'$ ", +" 0,a,a,b,a,3,3,2,3,4,],],],*,^,],^,X>X>E>E>E>E>E>6,`>m>m>`>Z>G>`>l>0>0>0>a>_>(>p>(>#>#>#>$>P;#>P;P;P;P;P;B;g;i;c,s;d,e,f,8,:,<,:,[,[,',',),@,M>N>M>#,g,v>h,P>w>'>$,h>S>)>y>y>4>6>7>`;`;~>B>b;b;b;]>[;L;S# ", +" i,j,k,k,b,j,b,a,3,3,3,2,l,3,],l,],],*,/,/,X>m,E>X>Y>Y>=,F>F>F>m>-,-,l>n>`>0>0>0>o>o>o>p>(>#>p>#>#>b>O;P;n,P;c>c,V;o,p,q,e,r,r,s,9,9,<,,,},.,.,+,L>M>M>N>O>v>v>3>w>Q>'>h>h>{,)>y>4>4>6>6>`;`;~>~>b;b;b;S# ", +" t,u,u,j,v,k,k,j,k,a,w,a,b,a,a,3,1,4,x,],l,],],/,X>X>^,y,E>Y>=,=,m>z,`>`>m>l>n>n>l>0>G>0>0>o>(>/>_>#>#>#>O;$>$>A,V;B,C,o,p,D,e,e,r,8,E,9,<,[,},',.,.,!,M>M>F,O>O>~,3>P>w>$,Q>h>S>Y;G,y>4>7>6>8>`;J;~>~>:# ", +" t,H,I,u,u,J,u,j,j,K,k,j,j,k,k,b,b,a,a,3,1,4,4,],4,],],/,/,^,X>/,*,E>E>E>E>`>m>`>`>`>`>m>0>-,0>0>0>0>(>/>_>/>p>L,|>M,N,N,C,O,P,Q,D,e,f,e,8,9,9,<,[,',.,),),|,M>N>N>u>u>v>P>w>w>,>$,h>S>)>y>4>4>7>:;8>`;R, ", +" S,T,H,H,I,U,V,V,u,v,W,u,X,j,k,k,b,b,b,b,a,a,a,3,3,3,Y,x,x,],],],],],X>X>E>E>E>E>=,F>`>`>z,`>m>`>0>G>l>0>0>0>0>L,|>Z,`, '.'N,N,+'o,P,P,e,e,@'8,9,8,:,<,[,,,#'),),M>M>F,N>u>v>3>w>,>,>h>h>h>S>i>y>4>4>6>:# ", +" S,$'%'%'T,T,I,U,I,V,U,H,u,u,J,J,u,v,v,j,j,k,b,b,a,a,b,3,3,1,l,3,],l,x,*,],*,*,/,m,X>m,E>F>Y>`>z,m>m>`>`>m>-,G>&'|>*'Z,Z,Z,=' 'M,N,B,-'o,o,d,D,e,;'8,8,9,>'[,,,',),),+,M>M>N>N>v>v>h,w>$,h>h>h>{,)>)>%,:# ", +" ,''''''''')')')'!')'I,T,T,I,H,u,u,u,u,v,W,v,j,j,j,j,k,~'~'{'a,3,3,3,2,x,4,],],],],/,*,y,/,X>m,E>z,E>F>F>Y>`>`>]'|>^'/'('*'Z,_':'M,M,M,N,o,o,<'P,D,D,e,8,s,9,:,<,[,['.,.,),M>@,M>#,O>}'v>3>w>w>h>h>h>S>_# ", +" |'1'2'3'4'''''''5'''%'T,)'T,T,I,H,u,I,6'u,u,u,v,u,u,X,v,j,j,j,7'b,a,a,b,3,3,3,Y,l,],Y,],*,*,*,*,*,X>X>E>E>E>Y>8'|>9'9'0'a'('('b'*'Z,='M,N,c'B,o,o,Q,P,Q,q,e,8,8,9,<,<,[,.,.,),),M>M>F,N>d'u>h,w>w>,>$,o# ", +" e'f'g'1'1'1'2'h'4'''4'''''''%'%'%'I,T,T,I,T,u,6'u,u,u,u,J,v,j,J,j,k,k,j,i'b,a,a,3,3,2,],4,x,],],],],^,/,/,*,X>j'k'l'l'm'n'o'p'/'('('*'_'Z,='M,q'.'-'r'o,Q,D,e,e,8,8,8,9,<,[,',',s'),L>M>M>N>O>v>3>3>w>/# ", +" t'u'v'v'e'w'x'w'1'y'1'3'3'4'4'''''5'%''')')'T,T,T,T,I,u,u,u,u,u,v,J,K,j,v,k,k,b,b,a,a,b,3,3,3,3,1,l,l,],*,*,],z'A'B'C'D'l'l'9'n'0'^'('('E'*'_'='='='F'N,O,o,P,P,P,D,e,f,8,9,:,[,[,,,.,),L>@,M>N>O>u>u>G' ", +" H'I'J'K'K'v'g'L'L'w'w'M'1'1'y'''3'N'2'''%'%'%')'%'T,T,T,T,I,T,I,u,H,u,u,u,u,j,j,k,~'b,b,~'7'3,7'3,3,3,2,1,Y,O'P'Q'R'S'B'B'l'l'o'o'T'0'p'('*'E'_' 'U'='.'N,N,O,o,D,e,D,e,f,8,8,:,V'[,[,.,',),@,|,M>/#W' ", +" X'Y'Z'`'`' ) ) )g'L'.)L'+)1'w'1'1'3'1'2'''''''''%'%'%'!')'T,)'I,T,H,@)u,H,u,u,u,J,j,j,j,k,k,b,b,a,a,b,a,3,#)P'$)%)&)R'R'S'B'D'l'l'9'9'0'0'p'('*)Z,Z, 'U'='.'N,N,r'P,D,P,D,@'e,8,s,9,<,[,=)',),@,-) ", +" ;)>),)`'`'`'`'') )g'.).).)L'))w'w'))w'1'1'4'1'3'4'N'''''%'%')'%'T,T,T,T,I,T,V,H,u,u,u,u,K,v,J,J,k,~'b,~'!)~){)])^)/)/)()R'_)S'B'l'l'm'9'n'0'('('('b'Z,Z,=' 'M,N,N,C,o,o,p,e,e,e,8,8,9,:,<,[,_;:) ", +" <)[)})`'`'`'`'`' ) ) )|)1).).)L'L'L'L'L'w'))1'1'1'3'2'3'h'h'''%'%')')'T,!'T,T,T,T,6'u,u,H,u,u,u,j,J,j,2)P'3)4){)5)5)$)$)Q'Q'S'S'B'D'6)l'T'o'o'0'0'('('*)Z,Z,M,M,.'N,-'o,o,o,P,d,e,;'8,8,:,K> ", +" 7)8)9)0)J'`'`'`'`'`' ) )a)b)c)d).).)d).)L'.)e)1'))x'1'1'1'4'''''''''%'%')'%'!')')'I,I,U,U,V,u,I,u,u,f)g)h)i)j)4)k)l)5)])$)&)&)m)S'B'D'n)6)l'9'n'o'0'p'('E'_'o)Z,M,.'F'N,r'o,P,o,e,D,p)s;q) ", +" r)X's)t)u)v)`'`'`'`'K'w)K'a)b)b)x)1).).).).).)L'w'))))1'1'1'3'1'N'1'4'''y)''%')')'T,T,T,T,6'I,V,z)g)A)A)B)h)i)i)l){){)$)$)/)C)()R'S'B'B'C'l'm'9'o'0'a'D)('_'Z,_'M,='F'N,N,r'o,P,E)s; ", +" F)G)H)I)J)`'`'`'`'`'w) )w)b)b)b)c)K)L)d).).)d).)L'))))w'e)e)1'1'y'2'''4'4'%''')'%'M)T,T,T,N)O)P)A)A)Q)B)B)R)j)j){)5)5)5)$)$)Q'&)S'S'B'D'l'l'9'0'0'p'p'('('*'Z,:'M,F'M,N,-'V;S) ", +" T)U)I'V)J'`'`'`'`'w)w)w)W)c)c)b)c)c)c)L)b)d).).).)X)L'+)w'e)e)1'1'1'h'2'4'''''%')'%'Y)Z)`) !.!P)A)A)A)B)i)j)4)4)4)4)5)$)$)/)Q'&)S'S'B'D'l'm'9'0'0'p'a'('*'_'Z,Z,:'M,V; ", +" r)+!s)t)u)v)`'`'`'`'w)w)@!W)b)b)b)c)b)c)b)L)K).).)d)d)L'L'L'w'w'1'e)1'1'1'3'4'''#!Z)$!$!%!&!.! ! !P)A)*!B)=!i)l)l)4)5)5)$)$)Q'R'S'S'B'6)l'l'l'9'n'0'D)('*)E'_'|>-! ", +" ;!>!s),!'!)!`'`'`'`'!!w)W)b)~!b)b)b)c)b)b)b)c)b)K).).)L'.).)L'))))e)+)1'1'{!]!^!/!$!$!%!%!&!.! !P)(!Q)B)B)h)j)l){)5)^)$)$)Q'&)R'S'S'B'D'6)m'm'9'9'p'|>|>_! ", +" :!)[!}!`'`'`'`'!!!!!!|!~!~!~!c)b)b)c)c)b)b)c)K)x)L).)1).)X)L'L'))1!2!3!3!4!^!/!/!$!%!5!&!.!.! !A)A)B)h)i)i)l)4)5)5)$)$)%)R'&)R'S'B'n)l'k'6!7! ", +" 8!9![)0!a!b!`'`'`'`'!!!!!!|!~!~!b)~!c)c)b)b)b)c)b)c)c)L)d).).).)c!2!d!e!3!f!4!4!g!/!%!`)`)&!.!.!P)A)h!B)B)i)i!4)4){)5)])$)$)%)&)S'k'j!k! ", +" l!H's)m!n!o!`'`'`'`'!!!!|!~!~!~!~!p!b)b)c)c)b)b)b)b)b)b)K)q!2!r!r!s!e!e!3!3!4!4!/!/!`)%!`)`).!P)t!A)Q)B)u!i)j)l)l)4)5)5)P'v! ", +" w!x![)y!z!`'`'`'`'!!!!!!A!~!~!~!~!~!p!~!b)b)c)b)b)c)q!2!B!B!B!B!r!C!e!e!3!f!D!4!/!$!%!`)E!.!.!P)A)F!B)B)G!R)P'P'H! ", +" I!>)J!K!L!`'`'`'`'!!!!|!~!~!~!~!~!~!~!b)~!b)c)M!2!B!B!B!B!B!r!r!N!C!e!3!O!3!4!^!/!/!%!P!`).!.!t!(!Q!g)R! ", +" S!T!s)U!V!o!`'`'`'!!!!!!|!W!~!~!W!~!~!~!~!X!2!B!B!B!B!B!B!B!r!B!r!Y!e!Z!e!`!D!4!^!$!$!%!5!Z)O) ~ ", +" .~+~@~I)#~`'`'`'`'!!!!A!|!W!~!W!W!W!X!2!B!B!B!B!B!B!B!B!B!B!r!r!r!r!e!Z!3!D!D!g!Z)O)$~ ", +" %~8)u'&~L!`'`'`'`'!!!!|!W!~!W!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!r!r!d!3!2!*~=~ ", +" -~T!s);~>~v)`'`'`'!!!!!!A!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~'~ ", +" )~t)s)!~~~)!`'`'`'!!{~2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~]~ ", +" :!U)U)^~/~`'`'`'(~2!B!B!B!B!B!B!B!B!B!B!B!2!_~ ", +" :~<~@~+~[~b!`'}~2!B!B!B!B!B!B!B!B!2!|~ ", +" 1~2~3~,!'!4~2!B!B!B!B!B!2!5~ ", +" 6~x!@~7~2!B!8~2!9~ ", +" 0~a~2!b~ ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index b20c552af..05dbfecb5 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -34,9 +34,13 @@ class ShipWorkbench ( Workbench ): # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) + list = ["Ship_CreateTank"] + self.appendToolbar("Loading",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) + list = ["Ship_CreateTank"] + self.appendToolbar("Loading",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 380d8aed8..0251da41d 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -4,7 +4,8 @@ datadir = $(prefix)/Mod/Ship data_DATA = \ InitGui.py \ ShipGui.py \ - Instance.py + Instance.py \ + TankInstance.py nobase_data_DATA = \ Icons/AreaCurveIco.png \ @@ -33,6 +34,9 @@ nobase_data_DATA = \ Icons/ReparametrizeIco.xpm \ Icons/Ship.xcf \ Icons/Ship.xpm \ + Icons/Tank.png \ + Icons/Tank.xcf \ + Icons/Tank.xpm \ Examples/s60.fcstd \ Examples/barehull5415.fcstd \ Examples/s60_katamaran.fcstd \ @@ -61,7 +65,10 @@ nobase_data_DATA = \ shipUtils/__init__.py \ shipUtils/Math.py \ shipUtils/Paths.py \ - shipUtils/Translator.py + shipUtils/Translator.py \ + tankCreateTank/__init__.py \ + tankCreateTank/TaskPanel.py \ + tankCreateTank/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 8f50b4be0..f62bebfb4 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -84,8 +84,21 @@ class Hydrostatics: ToolTip = str(Translator.translate('Plot ship hydrostatics')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class CreateTank: + def Activated(self): + import tankCreateTank + tankCreateTank.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Tank.png" + MenuText = str(Translator.translate('Create a new tank')) + ToolTip = str(Translator.translate('Create a new ship tank')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) +FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py new file mode 100644 index 000000000..584aa0f97 --- /dev/null +++ b/src/Mod/Ship/TankInstance.py @@ -0,0 +1,1886 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time + +# COIN +from pivy.coin import * +from pivy import coin + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base, Vector + +# Ship design module +from shipUtils import Paths, Translator, Math + +class ShipTank: + def __init__(self, obj, solid, level=0, density=998.0): + """ Creates a new tank on active document. + @param obj Created Part::FeaturePython object. + @param solid Solid shape that represent the tank. + @param level Tank filling level. + @param density Fluid density. + """ + # Add uniqueness property to identify Tank instances + obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", str(Translator.translate("True if is a valid ship tank instance"))).IsShipTank=True + # Add general options + obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Filling level"))).Level=level + obj.addProperty("App::PropertyFloat","Density","ShipTank", str(Translator.translate("Inside fluid density"))).Density=density + # Add shapes + shape = self.computeShape(solid) + if not shape: + obj.IsShipTank=False + return + # obj.addProperty("Part::PropertyPartShape","Shape","ShipTank", str(Translator.translate("Tank solid"))).Shape = shape + obj.Shape = shape + obj.Proxy = self + self.obj = obj + + def onChanged(self, fp, prop): + """ Property changed, tank must be recomputed """ + if prop == "IsShipTank": + FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") + elif prop == "Level": + if fp.Level > 100.0: + fp.Level = 100.0 + elif fp.Level < 0.0: + fp.Level = 0.0 + + def execute(self, obj): + """ Shape recomputation called """ + obj.Shape = self.computeShape(obj.Shape) + + def computeShape(self, solid): + """ Create faces shape. This method also calls to generate boxes. + @param solid Solid shape that represent the tank. + @return Computed solid shape. None if can't build it. + """ + # Study input to try to build a solid + if solid.isDerivedFrom('Part::Feature'): + # Get shape + shape = solid.Shape + if not shape: + return None + solid = shape + if not solid.isDerivedFrom('Part::TopoShape'): + return None + # Get shells + shells = solid.Shells + if not shells: + return None + # Build solids + solids = [] + for s in shells: + solid = Part.Solid(s) + if solid.Volume < 0.0: + solid.reverse() + solids.append(solid) + # Create compound + shape = Part.CompSolid(solids) + return shape + +class ViewProviderShipTank: + def __init__(self, obj): + """ Set this object to the proxy object of the actual view provider """ + obj.Proxy = self + + def attach(self, obj): + """ Setup the scene sub-graph of the view provider, this method is mandatory """ + return + + def updateData(self, fp, prop): + """ If a property of the handled feature has changed we have the chance to handle this here """ + return + + def getDisplayModes(self,obj): + ''' Return a list of display modes. ''' + modes=[] + return modes + + def getDefaultDisplayMode(self): + ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' + return "Shaded" + + def setDisplayMode(self,mode): + ''' Map the display mode defined in attach with those defined in getDisplayModes. + Since they have the same names nothing needs to be done. This method is optinal. + ''' + return mode + + def onChanged(self, vp, prop): + ''' Print the name of the property that has changed ''' + # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") + + def __getstate__(self): + ''' When saving the document this object gets stored using Python's cPickle module. + Since we have some un-pickable here -- the Coin stuff -- we must define this method + to return a tuple of all pickable objects or None. + ''' + return None + + def __setstate__(self,state): + ''' When restoring the pickled object from document we have the chance to set some + internals here. Since no data were pickled nothing needs to be done here. + ''' + return None + + def getIcon(self): + return """ + /* XPM */ + static char * Tank_xpm[] = { + "128 128 1605 2", + " c None", + ". c #000000", + "+ c #D1D1D1", + "@ c #D2D2D2", + "# c #D3D3D3", + "$ c #D3D4D4", + "% c #D5D5D5", + "& c #CFD0CF", + "* c #D0D0D0", + "= c #D3D2D3", + "- c #D4D4D3", + "; c #D5D6D5", + "> c #D6D6D6", + ", c #D7D7D7", + "' c #CDCECE", + ") c #CFCECE", + "! c #D0CFCF", + "~ c #D3D3D2", + "{ c #D3D3D4", + "] c #D5D4D5", + "^ c #D6D7D6", + "/ c #D8D8D8", + "( c #D8D8D9", + "_ c #D9D9DA", + ": c #CCCCCB", + "< c #CCCCCC", + "[ c #CECECD", + "} c #CECECE", + "| c #CFCFCF", + "1 c #D1D2D2", + "2 c #D5D4D4", + "3 c #D8D9D9", + "4 c #DAD9DA", + "5 c #DADBDB", + "6 c #DBDCDB", + "7 c #CACACA", + "8 c #CACBCB", + "9 c #CBCBCB", + "0 c #CCCDCD", + "a c #CECDCD", + "b c #D2D2D1", + "c c #D2D3D3", + "d c #D4D3D3", + "e c #D9D9D8", + "f c #D9D9D9", + "g c #DADBDA", + "h c #DBDCDC", + "i c #DCDCDC", + "j c #DDDDDD", + "k c #DEDEDE", + "l c #C7C8C8", + "m c #C9C9C9", + "n c #CAC9CA", + "o c #CBCBCC", + "p c #CCCDCC", + "q c #CDCDCD", + "r c #D0D1D1", + "s c #D1D2D1", + "t c #D3D2D2", + "u c #D4D4D5", + "v c #D5D5D6", + "w c #D6D7D7", + "x c #D8D7D8", + "y c #D9D8D9", + "z c #DADAD9", + "A c #DBDADA", + "B c #DBDBDC", + "C c #DDDCDD", + "D c #DDDEDE", + "E c #DEDFDE", + "F c #DFE0E0", + "G c #E0E0E1", + "H c #C6C6C6", + "I c #C7C7C7", + "J c #C8C8C7", + "K c #C9C9C8", + "L c #CACAC9", + "M c #CBCACB", + "N c #D0CFD0", + "O c #D1D0D1", + "P c #D1D1D2", + "Q c #D4D4D4", + "R c #D6D5D6", + "S c #D7D6D7", + "T c #D7D8D8", + "U c #DAD9D9", + "V c #DADADA", + "W c #DBDBDB", + "X c #DCDBDC", + "Y c #DDDDDC", + "Z c #DFDEDF", + "` c #E0DFDF", + " . c #E0E0E0", + ".. c #E1E1E1", + "+. c #E2E2E2", + "@. c #C5C4C4", + "#. c #C5C5C5", + "$. c #C8C8C8", + "%. c #C9C8C8", + "&. c #D5D5D4", + "*. c #D8D7D7", + "=. c #D9D8D8", + "-. c #DCDDDD", + ";. c #DEDDDD", + ">. c #E3E4E3", + ",. c #E5E4E4", + "'. c #C4C4C4", + "). c #C6C7C6", + "!. c #C7C8C7", + "~. c #C8C8C9", + "{. c #CACACB", + "]. c #CCCBCB", + "^. c #D0D0D1", + "/. c #D5D6D6", + "(. c #D7D7D6", + "_. c #DFDFDF", + ":. c #E1E2E2", + "<. c #E3E3E3", + "[. c #E4E3E4", + "}. c #E6E5E5", + "|. c #E6E6E6", + "1. c #E6E7E7", + "2. c #C4C5C5", + "3. c #C6C6C7", + "4. c #CFD0D0", + "5. c #D1D0D0", + "6. c #D6D5D5", + "7. c #DADADB", + "8. c #DCDDDC", + "9. c #DDDDDE", + "0. c #DEDFDF", + "a. c #E1E1E2", + "b. c #E3E2E2", + "c. c #E4E4E4", + "d. c #E5E5E5", + "e. c #E8E8E7", + "f. c #E9E8E9", + "g. c #EAE9EA", + "h. c #C5C5C4", + "i. c #C6C6C5", + "j. c #C7C7C6", + "k. c #CBCACA", + "l. c #CDCDCC", + "m. c #CECFCF", + "n. c #DBDADB", + "o. c #E0E0DF", + "p. c #E1E1E0", + "q. c #E1E2E1", + "r. c #E3E3E4", + "s. c #E4E5E5", + "t. c #E7E6E7", + "u. c #E7E7E8", + "v. c #E9E9E8", + "w. c #E9EAE9", + "x. c #EAEAEA", + "y. c #EBEBEA", + "z. c #C4C5C4", + "A. c #C6C5C5", + "B. c #C6C7C7", + "C. c #CCCCCD", + "D. c #CECECF", + "E. c #D9DAD9", + "F. c #DBDBDA", + "G. c #DEDEDD", + "H. c #E0DFE0", + "I. c #E0E1E0", + "J. c #E6E5E6", + "K. c #E7E7E6", + "L. c #E7E8E7", + "M. c #E8E8E9", + "N. c #E9E9E9", + "O. c #ECECEC", + "P. c #ECEDED", + "Q. c #EDEDEE", + "R. c #010101", + "S. c #C5C4C5", + "T. c #CBCCCB", + "U. c #CDCCCC", + "V. c #CECFCE", + "W. c #CFCFCE", + "X. c #CFCFD0", + "Y. c #D7D8D7", + "Z. c #DEDDDE", + "`. c #E1E0E0", + " + c #E5E6E6", + ".+ c #EBEBEB", + "++ c #ECEBEC", + "@+ c #EDEDED", + "#+ c #EEEEEE", + "$+ c #EFEFEF", + "%+ c #F0F0F0", + "&+ c #C4C4C5", + "*+ c #CFCECF", + "=+ c #D2D1D1", + "-+ c #D6D6D5", + ";+ c #D8D9D8", + ">+ c #DDDEDD", + ",+ c #DFDEDE", + "'+ c #E2E3E3", + ")+ c #E7E7E7", + "!+ c #E8E8E8", + "~+ c #EBECEC", + "{+ c #ECEDEC", + "]+ c #EFEFF0", + "^+ c #F1F0F1", + "/+ c #F1F1F1", + "(+ c #C7C6C6", + "_+ c #C9C8C9", + ":+ c #C9CAC9", + "<+ c #CACBCA", + "[+ c #D2D2D3", + "}+ c #D4D5D5", + "|+ c #DCDCDB", + "1+ c #E3E3E2", + "2+ c #E4E3E3", + "3+ c #E4E4E5", + "4+ c #E5E5E6", + "5+ c #EAEAE9", + "6+ c #ECEBEB", + "7+ c #F0F0EF", + "8+ c #F0F0F1", + "9+ c #C8C7C8", + "0+ c #C8C9C9", + "a+ c #CBCBCA", + "b+ c #CCCBCC", + "c+ c #D7D6D6", + "d+ c #DDDCDC", + "e+ c #E2E2E1", + "f+ c #E2E3E2", + "g+ c #E3E4E4", + "h+ c #E8E7E8", + "i+ c #E9E8E8", + "j+ c #EAE9E9", + "k+ c #EDECEC", + "l+ c #EEEEED", + "m+ c #EFEEEF", + "n+ c #EFF0F0", + "o+ c #F1F0F0", + "p+ c #C5C6C6", + "q+ c #C7C6C7", + "r+ c #D0D0CF", + "s+ c #D4D5D4", + "t+ c #E1E0E1", + "u+ c #E8E9E9", + "v+ c #EDECED", + "w+ c #EEEDED", + "x+ c #EEEFEF", + "y+ c #F0EFF0", + "z+ c #F0F1F0", + "A+ c #D7D7D8", + "B+ c #C8C7C7", + "C+ c #C9C9CA", + "D+ c #D2D1D2", + "E+ c #D9DADA", + "F+ c #E2E1E1", + "G+ c #E9E9EA", + "H+ c #EAEBEB", + "I+ c #D8D8D7", + "J+ c #CBCCCC", + "K+ c #CDCCCD", + "L+ c #D6D6D7", + "M+ c #E6E6E5", + "N+ c #E7E6E6", + "O+ c #E8E7E7", + "P+ c #EFEEEE", + "Q+ c #CDCECD", + "R+ c #D1D1D0", + "S+ c #D2D3D2", + "T+ c #DFE0DF", + "U+ c #E3E2E3", + "V+ c #E4E5E4", + "W+ c #E5E6E5", + "X+ c #ECECED", + "Y+ c #D4D3D4", + "Z+ c #CECDCE", + "`+ c #E6E6E7", + " @ c #EBEAEB", + ".@ c #ECECEB", + "+@ c #F0F1F1", + "@@ c #DCDCDD", + "#@ c #EBEAEA", + "$@ c #F0EFEF", + "%@ c #D3D4D3", + "&@ c #E6E7E6", + "*@ c #EEEDEE", + "=@ c #ADADAD", + "-@ c #565656", + ";@ c #DCDBDB", + ">@ c #DFDFE0", + ",@ c #E7E8E8", + "'@ c #E8E9E8", + ")@ c #EDEDEC", + "!@ c #EBEBEC", + "~@ c #EEEFEE", + "{@ c #B7B6B7", + "]@ c #E5E4E5", + "^@ c #EDEEED", + "/@ c #B6B6B6", + "(@ c #B6B7B7", + "_@ c #B7B7B6", + ":@ c #B7B6B6", + "<@ c #E5E5E4", + "[@ c #B5B6B5", + "}@ c #B5B6B6", + "|@ c #B5B5B5", + "1@ c #B6B5B5", + "2@ c #B6B5B6", + "3@ c #E2E1E2", + "4@ c #E4E4E3", + "5@ c #B4B4B4", + "6@ c #B4B5B5", + "7@ c #B5B5B4", + "8@ c #B6B6B5", + "9@ c #E2E2E3", + "0@ c #B3B4B4", + "a@ c #B4B4B5", + "b@ c #B4B5B4", + "c@ c #B5B4B4", + "d@ c #B3B3B3", + "e@ c #B3B3B4", + "f@ c #B4B3B3", + "g@ c #B4B4B3", + "h@ c #B5B4B5", + "i@ c #D0D1D0", + "j@ c #B3B3B2", + "k@ c #B3B2B3", + "l@ c #B4B3B4", + "m@ c #90B9D9", + "n@ c #91BAD9", + "o@ c #C6C5C6", + "p@ c #B1B2B2", + "q@ c #B2B2B2", + "r@ c #B2B3B2", + "s@ c #B2B3B3", + "t@ c #8FB7D8", + "u@ c #8EB7D7", + "v@ c #8FB8D8", + "w@ c #90B8D8", + "x@ c #91BBD9", + "y@ c #91BCDA", + "z@ c #C2C2C2", + "A@ c #C3C4C3", + "B@ c #C3C4C4", + "C@ c #C8C9C8", + "D@ c #CDCDCE", + "E@ c #B1B1B1", + "F@ c #B1B2B1", + "G@ c #B2B1B2", + "H@ c #B2B2B3", + "I@ c #B3B2B2", + "J@ c #8CB4D6", + "K@ c #8DB4D6", + "L@ c #8DB5D7", + "M@ c #8EB6D7", + "N@ c #8EB7D8", + "O@ c #8FB7D7", + "P@ c #90B9D8", + "Q@ c #91BBDA", + "R@ c #92BCD9", + "S@ c #92BCDA", + "T@ c #C1C1C0", + "U@ c #C1C1C1", + "V@ c #C2C2C1", + "W@ c #C3C3C2", + "X@ c #C3C3C3", + "Y@ c #C3C3C4", + "Z@ c #CAC9C9", + "`@ c #B1B0B0", + " # c #B2B2B1", + ".# c #8BB2D5", + "+# c #8BB2D6", + "@# c #8CB3D6", + "## c #8CB3D7", + "$# c #8DB5D6", + "%# c #8EB5D7", + "&# c #8FB8D7", + "*# c #92BBD9", + "=# c #92BBDA", + "-# c #BFC0C0", + ";# c #C0C1C0", + "># c #C2C1C1", + ",# c #C3C2C2", + "'# c #C4C4C3", + ")# c #C5C6C5", + "!# c #C5C5C6", + "~# c #B0B0B0", + "{# c #B0B1B0", + "]# c #B1B1B2", + "^# c #B2B1B1", + "/# c #0E3459", + "(# c #0E355A", + "_# c #0F355A", + ":# c #0F365A", + "<# c #8AB2D5", + "[# c #8CB3D5", + "}# c #8BB3D6", + "|# c #8FB6D7", + "1# c #8FB9D7", + "2# c #90B9D7", + "3# c #90BAD8", + "4# c #90BBD9", + "5# c #92BDDA", + "6# c #93BEDA", + "7# c #BEBEBE", + "8# c #BEBFBE", + "9# c #BFBFBE", + "0# c #BFBFC0", + "a# c #C0C0BF", + "b# c #C2C3C2", + "c# c #C4C3C3", + "d# c #AFB0B0", + "e# c #AFAFB0", + "f# c #B0AFB0", + "g# c #B0B1B1", + "h# c #B0B0B1", + "i# c #B1B0B1", + "j# c #7A9EC5", + "k# c #799FC5", + "l# c #7A9FC5", + "m# c #7AA0C6", + "n# c #0E345A", + "o# c #0F3559", + "p# c #8BB1D5", + "q# c #8CB4D5", + "r# c #8FB9D8", + "s# c #90BAD7", + "t# c #91BBD8", + "u# c #91BCD9", + "v# c #91BDD9", + "w# c #92BEDA", + "x# c #93BFDA", + "y# c #BDBDBD", + "z# c #BDBEBD", + "A# c #BEBEBD", + "B# c #BEBEBF", + "C# c #BEBFBF", + "D# c #BFBFBF", + "E# c #C0C0C0", + "F# c #C1C0C0", + "G# c #C0C1C1", + "H# c #C3C2C3", + "I# c #C4C3C4", + "J# c #AFAEAF", + "K# c #AFAFAF", + "L# c #B0AFAF", + "M# c #789DC5", + "N# c #789EC5", + "O# c #799EC5", + "P# c #7AA1C5", + "Q# c #7BA1C5", + "R# c #0F3659", + "S# c #10375A", + "T# c #8DB6D6", + "U# c #8EB8D7", + "V# c #92BDD9", + "W# c #143F5B", + "X# c #174A6A", + "Y# c #84B0CB", + "Z# c #85B0CC", + "`# c #BCBCBC", + " $ c #BDBCBC", + ".$ c #C0C0C1", + "+$ c #C1C2C1", + "@$ c #C2C3C3", + "#$ c #AEAEAE", + "$$ c #AEAFAF", + "%$ c #AFAFAE", + "&$ c #779BC4", + "*$ c #779CC4", + "=$ c #789CC4", + "-$ c #789DC4", + ";$ c #789EC4", + ">$ c #799FC4", + ",$ c #7AA0C5", + "'$ c #10385A", + ")$ c #8DB7D7", + "!$ c #8EB7D6", + "~$ c #90BBD8", + "{$ c #133E5B", + "]$ c #83AEC9", + "^$ c #84AFCA", + "/$ c #85B1CB", + "($ c #85B2CB", + "_$ c #BDBCBD", + ":$ c #BEBDBD", + "<$ c #C0BFBF", + "[$ c #C1C1C2", + "}$ c #C9CACA", + "|$ c #AEAEAD", + "1$ c #AEAFAE", + "2$ c #AEAEAF", + "3$ c #7599C3", + "4$ c #7699C3", + "5$ c #7699C2", + "6$ c #769AC3", + "7$ c #779BC3", + "8$ c #789BC4", + "9$ c #799EC4", + "0$ c #79A0C4", + "a$ c #8CB5D5", + "b$ c #8CB5D6", + "c$ c #8DB7D6", + "d$ c #426D8A", + "e$ c #16486A", + "f$ c #7AA5C1", + "g$ c #83ADC9", + "h$ c #84B1CB", + "i$ c #85B1CC", + "j$ c #BCBDBD", + "k$ c #BDBDBC", + "l$ c #BFBEBF", + "m$ c #BFC0BF", + "n$ c #ADADAC", + "o$ c #AEADAD", + "p$ c #ADAEAD", + "q$ c #ADAEAE", + "r$ c #7496C2", + "s$ c #7597C2", + "t$ c #7598C2", + "u$ c #769BC2", + "v$ c #779BC2", + "w$ c #779CC3", + "x$ c #789DC3", + "y$ c #7AA0C4", + "z$ c #7AA1C4", + "A$ c #7AA2C5", + "B$ c #7BA2C5", + "C$ c #10395A", + "D$ c #8EB6D6", + "E$ c #8EB8D6", + "F$ c #133D5A", + "G$ c #81ABC8", + "H$ c #82ACC9", + "I$ c #82ADC9", + "J$ c #82AEC9", + "K$ c #83AFC9", + "L$ c #83B0CA", + "M$ c #BDBEBE", + "N$ c #C1C0C1", + "O$ c #C7C7C8", + "P$ c #ADACAC", + "Q$ c #AFAEAE", + "R$ c #7395C1", + "S$ c #7395C2", + "T$ c #7496C1", + "U$ c #7599C2", + "V$ c #769BC3", + "W$ c #779DC3", + "X$ c #789EC3", + "Y$ c #7AA2C4", + "Z$ c #7BA3C4", + "`$ c #7BA3C5", + " % c #11395A", + ".% c #113A5A", + "+% c #123C5A", + "@% c #164A6E", + "#% c #4C7694", + "$% c #80AAC7", + "%% c #80ABC8", + "&% c #81ACC9", + "*% c #81ACC8", + "=% c #81ADC9", + "-% c #83AFCA", + ";% c #84B0CA", + ">% c #84B1CA", + ",% c #86B3CB", + "'% c #87B4CC", + ")% c #BFBEBE", + "!% c #ACACAC", + "~% c #ABACAC", + "{% c #ACACAD", + "]% c #7294C0", + "^% c #7194C0", + "/% c #7294C1", + "(% c #7394C1", + "_% c #7396C1", + ":% c #7497C2", + "<% c #7498C2", + "[% c #799FC3", + "}% c #7CA3C5", + "|% c #123B5A", + "1% c #88B1D0", + "2% c #7EA8C6", + "3% c #7FA9C6", + "4% c #7FAAC7", + "5% c #81ADC8", + "6% c #85B1CA", + "7% c #86B2CB", + "8% c #86B4CB", + "9% c #87B5CB", + "0% c #BCBCBD", + "a% c #C0BFC0", + "b% c #ABABAB", + "c% c #ACABAC", + "d% c #ABABAC", + "e% c #ACADAC", + "f% c #ACADAD", + "g% c #7193C0", + "h% c #7293C0", + "i% c #7193C1", + "j% c #7293C1", + "k% c #7498C1", + "l% c #789FC4", + "m% c #79A1C3", + "n% c #79A1C4", + "o% c #7BA2C4", + "p% c #7CA4C5", + "q% c #7CA4C4", + "r% c #16496F", + "s% c #7DA7C5", + "t% c #7FAAC6", + "u% c #80ABC7", + "v% c #80ACC7", + "w% c #82AFC9", + "x% c #84B1C9", + "y% c #85B2CA", + "z% c #87B5CC", + "A% c #88B6CC", + "B% c #BDBDBE", + "C% c #C1C2C2", + "D% c #AAABAB", + "E% c #AAAAAA", + "F% c #ABAAAB", + "G% c #ABACAB", + "H% c #ACACAB", + "I% c #7192C0", + "J% c #7292C0", + "K% c #7598C1", + "L% c #7599C1", + "M% c #759AC1", + "N% c #769AC2", + "O% c #779CC2", + "P% c #779DC2", + "Q% c #789DC2", + "R% c #78A0C3", + "S% c #7CA3C4", + "T% c #7AA2C2", + "U% c #7CA5C4", + "V% c #7DA5C4", + "W% c #7DA6C5", + "X% c #7EA8C5", + "Y% c #82ADC8", + "Z% c #83B0C9", + "`% c #85B3CA", + " & c #86B5CB", + ".& c #87B6CC", + "+& c #BCBDBC", + "@& c #C2C1C2", + "#& c #C2C2C3", + "$& c #AAA9AA", + "%& c #AAABAA", + "&& c #ABAAAA", + "*& c #7091BF", + "=& c #7092BF", + "-& c #7191C0", + ";& c #7192BF", + ">& c #7092C0", + ",& c #7295C0", + "'& c #7497C1", + ")& c #759AC2", + "!& c #769CC2", + "~& c #789FC3", + "{& c #79A0C3", + "]& c #79A2C4", + "^& c #7AA4C3", + "/& c #7BA4C4", + "(& c #7DA8C5", + "_& c #7EA9C6", + ":& c #80AAC6", + "<& c #81ADC7", + "[& c #82ADC7", + "}& c #82AEC8", + "|& c #88B7CC", + "1& c #A9A9A9", + "2& c #A9AAAA", + "3& c #A9A9AA", + "4& c #A9AAA9", + "5& c #7090BE", + "6& c #7091BE", + "7& c #7092BE", + "8& c #7191BF", + "9& c #7397C1", + "0& c #7499C1", + "a& c #7AA1C3", + "b& c #7AA2C3", + "c& c #79A2C2", + "d& c #7AA3C3", + "e& c #7BA5C4", + "f& c #80ABC6", + "g& c #81ACC7", + "h& c #81AEC8", + "i& c #82AFC8", + "j& c #83B1CA", + "k& c #85B3CB", + "l& c #85B4CA", + "m& c #87B6CB", + "n& c #88B8CC", + "o& c #A8A8A8", + "p& c #6F90BE", + "q& c #6F91BE", + "r& c #7192BE", + "s& c #7193BF", + "t& c #769BC1", + "u& c #779EC3", + "v& c #789FC2", + "w& c #79A1C2", + "x& c #7AA3C2", + "y& c #7BA4C3", + "z& c #7CA6C5", + "A& c #7DA7C4", + "B& c #7EA7C5", + "C& c #7EA9C5", + "D& c #7EAAC6", + "E& c #7FACC6", + "F& c #81AEC7", + "G& c #82AFC7", + "H& c #83B1C9", + "I& c #84B2C9", + "J& c #84B3C9", + "K& c #86B4CA", + "L& c #89B7CC", + "M& c #89B8CD", + "N& c #A8A8A7", + "O& c #6F90BD", + "P& c #6E90BD", + "Q& c #6E90BE", + "R& c #7293BF", + "S& c #7396C0", + "T& c #7397C0", + "U& c #7498C0", + "V& c #759BC1", + "W& c #769CC1", + "X& c #779EC2", + "Y& c #789EC2", + "Z& c #78A0C1", + "`& c #78A1C2", + " * c #7BA6C3", + ".* c #7BA6C4", + "+* c #7CA6C4", + "@* c #7FABC6", + "#* c #82AEC7", + "$* c #83AFC8", + "%* c #83B0C8", + "&* c #88B7CB", + "** c #89B9CC", + "=* c #89BACD", + "-* c #6E8FBD", + ";* c #6F91BD", + ">* c #7093BF", + ",* c #7194BF", + "'* c #7294BF", + ")* c #7395C0", + "!* c #7398C0", + "~* c #779FC1", + "{* c #77A0C1", + "]* c #78A1C1", + "^* c #7AA4C2", + "/* c #7CA7C4", + "(* c #7DA8C4", + "_* c #7DA9C5", + ":* c #7FAAC5", + "<* c #80ACC6", + "[* c #80ADC7", + "}* c #84B1C8", + "|* c #88B8CB", + "1* c #89BACC", + "2* c #BEBDBE", + "3* c #12285A", + "4* c #768CBE", + "5* c #768DBE", + "6* c #6E91BD", + "7* c #7193BE", + "8* c #7295BF", + "9* c #7396BF", + "0* c #7398BF", + "a* c #7499C0", + "b* c #749AC1", + "c* c #779DC1", + "d* c #789FC1", + "e* c #779EC0", + "f* c #769EC0", + "g* c #769FC0", + "h* c #77A0C0", + "i* c #79A2C1", + "j* c #79A3C2", + "k* c #7BA4C2", + "l* c #7CA7C3", + "m* c #7EAAC5", + "n* c #80ADC6", + "o* c #82B0C7", + "p* c #85B2C9", + "q* c #85B3C9", + "r* c #85B4C9", + "s* c #86B5CA", + "t* c #87B6CA", + "u* c #88B9CC", + "v* c #8AB9CC", + "w* c #8ABACC", + "x* c #8BBBCC", + "y* c #758BBE", + "z* c #758CBE", + "A* c #768CBF", + "B* c #6E91BE", + "C* c #7093BE", + "D* c #7397BF", + "E* c #7497BF", + "F* c #749AC0", + "G* c #759AC0", + "H* c #769BC0", + "I* c #769CC0", + "J* c #779EC1", + "K* c #769DC0", + "L* c #759DBF", + "M* c #769DBE", + "N* c #77A1C0", + "O* c #7AA5C2", + "P* c #7DA7C3", + "Q* c #7EA9C4", + "R* c #7EAAC4", + "S* c #7FABC5", + "T* c #81ADC6", + "U* c #81AFC7", + "V* c #82B0C8", + "W* c #83B1C8", + "X* c #84B2C8", + "Y* c #86B6CB", + "Z* c #87B7CA", + "`* c #87B7CB", + " = c #84AFCB", + ".= c #143F5A", + "+= c #12275A", + "@= c #758BBD", + "#= c #768BBE", + "$= c #6E8FBC", + "%= c #6E8EBD", + "&= c #7296BF", + "*= c #7297BF", + "== c #779CC1", + "-= c #749BBE", + ";= c #749CBF", + ">= c #759EBE", + ",= c #769FBF", + "'= c #76A0C0", + ")= c #779FC0", + "!= c #7BA5C3", + "~= c #7CA6C3", + "{= c #7CA8C4", + "]= c #7DA9C3", + "^= c #7FAAC4", + "/= c #81AFC6", + "(= c #82B1C7", + "_= c #85B5C9", + ":= c #86B6CA", + "<= c #82AECA", + "[= c #758ABD", + "}= c #748ABD", + "|= c #758CBD", + "1= c #6D8FBC", + "2= c #759CC1", + "3= c #769DC1", + "4= c #759BBF", + "5= c #739ABE", + "6= c #759DBE", + "7= c #769EBE", + "8= c #769EBF", + "9= c #779FBF", + "0= c #78A1C0", + "a= c #78A2C1", + "b= c #79A2C0", + "c= c #7AA3C1", + "d= c #7CA8C3", + "e= c #7DA9C4", + "f= c #82B0C6", + "g= c #83B2C8", + "h= c #84B3C8", + "i= c #143E5B", + "j= c #11265A", + "k= c #7489BC", + "l= c #748ABC", + "m= c #758ABC", + "n= c #6D8EBC", + "o= c #6E8EBC", + "p= c #6D8FBD", + "q= c #6F8FBD", + "r= c #7092BD", + "s= c #7294BE", + "t= c #7194BE", + "u= c #7295BE", + "v= c #7196BF", + "w= c #759BC0", + "x= c #749ABE", + "y= c #7399BC", + "z= c #729ABD", + "A= c #739ABD", + "B= c #749CBD", + "C= c #769DBF", + "D= c #779EBF", + "E= c #78A2C0", + "F= c #79A3C1", + "G= c #7AA4C1", + "H= c #7BA6C2", + "I= c #7CA9C4", + "J= c #7EABC4", + "K= c #7FACC4", + "L= c #80ADC5", + "M= c #80AEC6", + "N= c #81AEC6", + "O= c #83B1C7", + "P= c #7EA9C7", + "Q= c #7FAAC8", + "R= c #80AAC8", + "S= c #7388BC", + "T= c #7488BC", + "U= c #7389BC", + "V= c #7489BD", + "W= c #6E8EBB", + "X= c #6D8EBD", + "Y= c #7195BE", + "Z= c #7499BF", + "`= c #749ABF", + " - c #749BC0", + ".- c #7198BB", + "+- c #7298BC", + "@- c #7299BC", + "#- c #729ABC", + "$- c #739BBD", + "%- c #749BBD", + "&- c #749DBE", + "*- c #76A0BF", + "=- c #77A2C0", + "-- c #78A3C1", + ";- c #79A4C1", + ">- c #7CA8C2", + ",- c #7DAAC4", + "'- c #7FACC5", + ")- c #7DA7C6", + "!- c #7FA9C7", + "~- c #133E5A", + "{- c #7387BC", + "]- c #6F92BD", + "^- c #7094BE", + "/- c #7296BE", + "(- c #7399BD", + "_- c #0E3559", + ":- c #7096BB", + "<- c #7197BB", + "[- c #7199BB", + "}- c #739BBC", + "|- c #749CBE", + "1- c #749EBE", + "2- c #769FBE", + "3- c #77A0BF", + "4- c #77A1BF", + "5- c #78A3C0", + "6- c #79A4C0", + "7- c #7AA6C2", + "8- c #7BA7C2", + "9- c #7DA8C3", + "0- c #7EACC5", + "a- c #7CA5C5", + "b- c #10255A", + "c- c #7286BB", + "d- c #7287BC", + "e- c #6D8EBB", + "f- c #7093BD", + "g- c #7094BD", + "h- c #7195BF", + "i- c #7399BF", + "j- c #739ABF", + "k- c #7398BE", + "l- c #6F95BA", + "m- c #7096BA", + "n- c #7097BB", + "o- c #739ABC", + "p- c #739CBD", + "q- c #759EBF", + "r- c #78A2BF", + "s- c #7CA7C2", + "t- c #10245A", + "u- c #7185BB", + "v- c #7286BC", + "w- c #7387BB", + "x- c #7487BC", + "y- c #6E90BC", + "z- c #6F93BE", + "A- c #7196BE", + "B- c #7297BE", + "C- c #7298BF", + "D- c #7297BD", + "E- c #6E94BA", + "F- c #6F95B9", + "G- c #6F96BA", + "H- c #7097BA", + "I- c #729ABB", + "J- c #749DBD", + "K- c #77A0BE", + "L- c #78A4C0", + "M- c #7AA5C0", + "N- c #7CA7C5", + "O- c #7185BA", + "P- c #7286BA", + "Q- c #7285BB", + "R- c #7386BB", + "S- c #7288BC", + "T- c #7589BD", + "U- c #6E91BC", + "V- c #6F91BC", + "W- c #6E92BC", + "X- c #6F93BD", + "Y- c #7194BD", + "Z- c #7195BD", + "`- c #7298BE", + " ; c #7297BC", + ".; c #6D93B8", + "+; c #6E94B8", + "@; c #6E95B9", + "#; c #7096B9", + "$; c #739CBC", + "%; c #76A0BE", + "&; c #78A1BF", + "*; c #79A1C1", + "=; c #79A4C2", + "-; c #7BA3C3", + ";; c #7084BA", + ">; c #7184BB", + ",; c #7085BB", + "'; c #7186BB", + "); c #7287BB", + "!; c #7388BB", + "~; c #6C8EBB", + "{; c #6D8FBB", + "]; c #6F92BC", + "^; c #7095BD", + "/; c #7196BD", + "(; c #7195BC", + "_; c #0E3359", + ":; c #6C92B7", + "<; c #6D94B8", + "[; c #6F96B9", + "}; c #6F97BA", + "|; c #7299BB", + "1; c #729BBB", + "2; c #749DBC", + "3; c #759EBD", + "4; c #759FBE", + "5; c #10235A", + "6; c #7083BA", + "7; c #7084BB", + "8; c #7085BA", + "9; c #7093BC", + "0; c #7095BC", + "a; c #6C91B7", + "b; c #6E95B8", + "c; c #7198BA", + "d; c #739BBB", + "e; c #78A2C2", + "f; c #0F225A", + "g; c #6F82B9", + "h; c #7083B9", + "i; c #6F83B9", + "j; c #6F83BA", + "k; c #7184BA", + "l; c #6C8DBB", + "m; c #6C8FBB", + "n; c #6D90BB", + "o; c #6E91BB", + "p; c #6F93BC", + "q; c #7094BC", + "r; c #6F94BB", + "s; c #0D3259", + "t; c #6A8FB6", + "u; c #6B91B7", + "v; c #6E93B8", + "w; c #7098BA", + "x; c #7099BA", + "y; c #7199BA", + "z; c #729BBC", + "A; c #6E81B9", + "B; c #6E82B9", + "C; c #6E90BB", + "D; c #6E93BA", + "E; c #698EB6", + "F; c #6A8EB6", + "G; c #6A90B6", + "H; c #6B90B6", + "I; c #6B92B7", + "J; c #6D93B7", + "K; c #6E96B8", + "L; c #6F97B9", + "M; c #7098BB", + "N; c #78A0C0", + "O; c #6E80B8", + "P; c #6E81B8", + "Q; c #6F81B8", + "R; c #6F81B9", + "S; c #6F82B8", + "T; c #6F92BB", + "U; c #6E92BA", + "V; c #0D3159", + "W; c #688DB4", + "X; c #698EB5", + "Y; c #698FB5", + "Z; c #6A90B7", + "`; c #6C93B7", + " > c #518FC8", + ".> c #6F96B8", + "+> c #123A5A", + "@> c #0F215A", + "#> c #6D80B8", + "$> c #6D81B8", + "%> c #6C8FBA", + "&> c #6E90BA", + "*> c #6E92BB", + "=> c #6E93BC", + "-> c #0C3159", + ";> c #678CB4", + ">> c #678DB4", + ",> c #688EB4", + "'> c #698EB4", + ")> c #6A90B5", + "!> c #6B91B6", + "~> c #6D94B7", + "{> c #6D95B8", + "]> c #6E96B9", + "^> c #0E2159", + "/> c #6C7FB8", + "(> c #6D7FB7", + "_> c #6D7FB8", + ":> c #507FC9", + "<> c #6D8FBA", + "[> c #6D91BB", + "}> c #6D91B9", + "|> c #0C3059", + "1> c #678AB3", + "2> c #678BB3", + "3> c #678DB3", + "4> c #6B91B5", + "5> c #6B92B5", + "6> c #6C92B6", + "7> c #6B92B6", + "8> c #6C93B6", + "9> c #0E2059", + "0> c #6C7EB7", + "a> c #6D7EB7", + "b> c #6E80B7", + "c> c #6E82B8", + "d> c #7084B9", + "e> c #6F84BA", + "f> c #6C90B9", + "g> c #668AB2", + "h> c #698FB4", + "i> c #6A90B4", + "j> c #719ABB", + "k> c #749BBC", + "l> c #6B7EB7", + "m> c #6B7DB6", + "n> c #6C7DB7", + "o> c #6C7FB7", + "p> c #6D80B7", + "q> c #6F84B9", + "r> c #7186BA", + "s> c #6C8EB9", + "t> c #6589B1", + "u> c #678CB2", + "v> c #678DB2", + "w> c #688EB3", + "x> c #6A8FB5", + "y> c #6A91B5", + "z> c #6C92B5", + "A> c #6C94B7", + "B> c #6D95B7", + "C> c #759DBD", + "D> c #0E1F5A", + "E> c #6A7CB6", + "F> c #6A7DB6", + "G> c #6C7EB6", + "H> c #7082B9", + "I> c #7285BA", + "J> c #7085B9", + "K> c #0E335A", + "L> c #658BB1", + "M> c #668BB1", + "N> c #668CB1", + "O> c #678CB1", + "P> c #688DB3", + "Q> c #688FB3", + "R> c #698FB3", + "S> c #6990B4", + "T> c #7097B9", + "U> c #7197BA", + "V> c #739CBE", + "W> c #0E1F59", + "X> c #6A7BB6", + "Y> c #6B7CB6", + "Z> c #6C7DB6", + "`> c #6B7DB7", + " , c #6F82B6", + "., c #648AB0", + "+, c #658AB1", + "@, c #658BB0", + "#, c #668CB2", + "$, c #688FB4", + "%, c #6B90B5", + "&, c #0D1E59", + "*, c #697BB5", + "=, c #6A7CB7", + "-, c #6B7EB6", + ";, c #6C7EB8", + ">, c #6E82B7", + ",, c #6389B0", + "', c #6489B0", + "), c #658AB0", + "!, c #668AB1", + "~, c #688DB2", + "{, c #6990B5", + "], c #697AB5", + "^, c #697BB6", + "/, c #6A7BB5", + "(, c #6D7EB8", + "_, c #6D81B6", + ":, c #6388AE", + "<, c #6388AF", + "[, c #6389AF", + "}, c #6489AF", + "|, c #668BB0", + "1, c #6979B4", + "2, c #6879B5", + "3, c #6879B4", + "4, c #6979B5", + "5, c #6A7AB5", + "6, c #6B7CB7", + "7, c #6D80B5", + "8, c #6287AE", + "9, c #6288AE", + "0, c #0D1D59", + "a, c #6878B4", + "b, c #6778B4", + "c, c #6C7EB5", + "d, c #6186AC", + "e, c #6186AD", + "f, c #6286AE", + "g, c #668DB1", + "h, c #678EB3", + "i, c #0D1C59", + "j, c #6777B3", + "k, c #6777B4", + "l, c #697AB4", + "m, c #6A7CB5", + "n, c #6E81B7", + "o, c #6084AC", + "p, c #6185AC", + "q, c #6086AD", + "r, c #6187AE", + "s, c #6387AE", + "t, c #0C1C59", + "u, c #6676B3", + "v, c #6776B3", + "w, c #6877B4", + "x, c #687AB5", + "y, c #697CB6", + "z, c #6A7DB7", + "A, c #6B7DB5", + "B, c #5F83AC", + "C, c #6083AC", + "D, c #6185AD", + "E, c #6288AD", + "F, c #668BB2", + "G, c #6A91B4", + "H, c #6675B3", + "I, c #6575B3", + "J, c #6677B3", + "K, c #6677B4", + "L, c #6A7DB4", + "M, c #5E82AB", + "N, c #5F83AB", + "O, c #5F84AC", + "P, c #6085AD", + "Q, c #6085AC", + "R, c #10365A", + "S, c #0C1B59", + "T, c #6575B2", + "U, c #6675B2", + "V, c #6676B2", + "W, c #6676B4", + "X, c #6776B4", + "Y, c #687AB4", + "Z, c #5D81AA", + "`, c #5D81AB", + " ' c #5D82AA", + ".' c #5E83AB", + "+' c #6083AB", + "@' c #6286AD", + "#' c #648AB1", + "$' c #6473B3", + "%' c #6474B2", + "&' c #697CB3", + "*' c #5D80A9", + "=' c #5E82AA", + "-' c #5F84AB", + ";' c #6287AD", + ">' c #6389AE", + ",' c #0B1A59", + "'' c #6473B2", + ")' c #6574B2", + "!' c #6574B3", + "~' c #6778B3", + "{' c #6779B4", + "]' c #687BB2", + "^' c #5B7FA9", + "/' c #5B80A9", + "(' c #5C80A9", + "_' c #5D81A9", + ":' c #5E81AA", + "<' c #6184AC", + "[' c #638AB0", + "}' c #678DB1", + "|' c #0B1A58", + "1' c #6372B1", + "2' c #6472B2", + "3' c #6472B1", + "4' c #6473B1", + "5' c #6573B2", + "6' c #6576B3", + "7' c #6878B3", + "8' c #687AB3", + "9' c #5B7EA7", + "0' c #5B7FA8", + "a' c #5B80A8", + "b' c #5C81AA", + "c' c #5F82AB", + "d' c #668DB2", + "e' c #11268E", + "f' c #11268D", + "g' c #0B1958", + "h' c #6373B2", + "i' c #6877B3", + "j' c #6879B2", + "k' c #0C2F59", + "l' c #5A7DA7", + "m' c #5A7EA7", + "n' c #5B7FA7", + "o' c #5B7EA8", + "p' c #5C7FA8", + "q' c #5F83AA", + "r' c #6084AB", + "s' c #6589B0", + "t' c #0C196C", + "u' c #152064", + "v' c #11258D", + "w' c #6371B1", + "x' c #6271B1", + "y' c #6372B2", + "z' c #6778B1", + "A' c #0C2E59", + "B' c #597CA6", + "C' c #5A7CA6", + "D' c #597DA6", + "E' c #5D80AA", + "F' c #5E83AA", + "G' c #0E355B", + "H' c #0C1A6F", + "I' c #131E62", + "J' c #414C90", + "K' c #10258E", + "L' c #6271B0", + "M' c #6272B1", + "N' c #6373B1", + "O' c #6677B1", + "P' c #0B2E59", + "Q' c #577BA5", + "R' c #587BA6", + "S' c #587CA6", + "T' c #5A7EA8", + "U' c #5D82AB", + "V' c #6289AE", + "W' c #1A5FA3", + "X' c #0D1C75", + "Y' c #131E61", + "Z' c #404B8E", + "`' c #475296", + " ) c #10258D", + ".) c #6270B0", + "+) c #6272B0", + "@) c #6576B2", + "#) c #6576B1", + "$) c #577AA4", + "%) c #577BA4", + "&) c #587BA5", + "*) c #5C81A9", + "=) c #648AAF", + "-) c #0E345B", + ";) c #0D1D79", + ">) c #101B5F", + ",) c #3C478B", + "') c #11258E", + ")) c #6371B0", + "!) c #6575B1", + "~) c #0B2E58", + "{) c #5679A3", + "]) c #5779A4", + "^) c #567AA4", + "/) c #577AA5", + "() c #577BA6", + "_) c #597BA6", + ":) c #175797", + "<) c #0E1F82", + "[) c #101B5E", + "}) c #384487", + "|) c #0B1858", + "1) c #6170B0", + "2) c #6575B0", + "3) c #5578A2", + "4) c #5678A3", + "5) c #5679A4", + "6) c #5A7DA6", + "7) c #102394", + "8) c #111C60", + "9) c #141F63", + "0) c #293578", + "a) c #0A1859", + "b) c #616FAF", + "c) c #616FB0", + "d) c #6270AF", + "e) c #6372B0", + "f) c #6474AF", + "g) c #0B2D58", + "h) c #5576A2", + "i) c #5577A2", + "j) c #5577A3", + "k) c #5578A4", + "l) c #5578A3", + "m) c #587CA5", + "n) c #597DA7", + "o) c #5D82A9", + "p) c #6187AD", + "q) c #154F8D", + "r) c #1227A5", + "s) c #0D185C", + "t) c #1B266A", + "u) c #313C80", + "v) c #445093", + "w) c #10248D", + "x) c #6170AF", + "y) c #6474B1", + "z) c #6373AF", + "A) c #5375A1", + "B) c #5476A2", + "C) c #587AA4", + "D) c #5C7FA9", + "E) c #6084AD", + "F) c #102393", + "G) c #0C196A", + "H) c #0E1A5D", + "I) c #242F73", + "J) c #3A4589", + "K) c #626FAF", + "L) c #626FB0", + "M) c #6475B2", + "N) c #6272AE", + "O) c #0A2C59", + "P) c #5275A1", + "Q) c #5376A2", + "R) c #5477A2", + "S) c #144A84", + "T) c #0E1E7F", + "U) c #121D61", + "V) c #2B3679", + "W) c #0A1858", + "X) c #6370B0", + "Y) c #6271AF", + "Z) c #0A2C58", + "`) c #5173A0", + " ! c #5274A1", + ".! c #5274A0", + "+! c #0D1B74", + "@! c #10248E", + "#! c #6171AE", + "$! c #51729F", + "%! c #51739F", + "&! c #5273A0", + "*! c #5476A1", + "=! c #5576A3", + "-! c #114379", + ";! c #102291", + ">! c #0C196B", + ",! c #1F2A6E", + "'! c #364185", + ")! c #465195", + "!! c #10238D", + "~! c #616EAF", + "{! c #616FAD", + "]! c #0A2B59", + "^! c #50729E", + "/! c #50729F", + "(! c #5375A0", + "_! c #134C8D", + ":! c #0E1E81", + "~ c #323D81", + ",~ c #0A2D5D", + "'~ c #1354AE", + ")~ c #10228F", + "!~ c #212C70", + "~~ c #374286", + "{~ c #0F228B", + "]~ c #1251A7", + "^~ c #283377", + "/~ c #3E4A8D", + "(~ c #0F4085", + "_~ c #0B2F62", + ":~ c #1328A8", + "<~ c #0D1C77", + "[~ c #303B7F", + "}~ c #104289", + "|~ c #0B3063", + "1~ c #112497", + "2~ c #1C276A", + "3~ c #0C175B", + "4~ c #0F438A", + "5~ c #0B3266", + "6~ c #0F2088", + "7~ c #0C3367", + "8~ c #365885", + "9~ c #0B3369", + "0~ c #0E1D7C", + "a~ c #0B2F60", + "b~ c #0C366E", + " ", + " ", + " ", + " ", + " ", + " . . ", + " . . . . . . . ", + " . . . . + @ # $ % . . . . ", + " . . . . & * + @ = - % ; > , . . . . ", + " . . . . ' ) ! * + @ ~ { ] % ^ , / ( _ . . . ", + " . . . . : < [ } | * + 1 = $ 2 ; > , / 3 4 5 6 . . . . ", + " . . . . 7 8 9 0 a } | * + b c d 2 % > , / e f g h i j k . . . . ", + " . . . . l m n 9 o p q } | * r s t # u % v w x y z A B i C D E F G . . . ", + " . . . . H I J K L M 9 < q ' | N O P t # Q % R S T / U V W X Y D Z ` ...+.. . . . ", + " . . . . @.#.H I $.%.L M 9 < q } } N r + @ # Q &.R S *.=.f V W X -.;.k ` ...+.+.>.,.. . . . ", + " . . . . '.'.'.#.H ).!.~.n {.].< 0 ' } | ^.b @ # Q ] /.(., / f 4 5 B i D k _. ...:.<.[.,.}.|.1.. . . . ", + " . . . . '.'.'.'.'.2.H 3.J %.m 7 9 < p } ) 4.5.+ @ ~ Q Q 6.> , / 3 4 7.X 8.9.k 0. ...a.b.<.c.d.|.1.e.f.g.. . . ", + " . . . . . '.'.'.'.'.'.'.h.i.j.$.$.m 7 k.< l.a m.| * + @ c Q Q % > , / f f n.B i j k _.o.p.q.+.r.c.s.|.t.u.v.w.x.y.. . . . ", + " . . . . . '.'.'.'.'.'.'.'.z.A.B.I $.m 7 9 ].C.q D.| * + P t # Q 6.> (.T f E.F.6 i j G.0.H.I...+.<.c.d.J.K.L.M.N.x.y.O.P.Q.. . . . ", + " R.. . '.'.'.'.'.'.'.'.'.'.'.S.A.3.I $.m n k.T.U.q V.W.X.+ + t # Q % /.S Y./ z F.W i -.Z.k _.`.a.+.<.r.s. +|.L.M.N.g..+++O.@+#+$+%+. . . ", + " . . . . . '.'.'.'.'.'.'.'.'.&+i.H I $.K n 8 < < q } *+* ^.=+@ { Q ] -+, , ;+_ V W B 8.>+,+_.G ..+.'+c.d.d.t.)+!+M.x.x.~+{+Q.#+$+]+^+/+. . . . ", + " . . =.f . . . . . '.'.'.'.'.'.2.A.H (+$._+:+<+].< q } | N ^.s [+# Q }+6.> *./ f V 5 |+C D 0._. ...q.1+2+3+4+|.1.!+N.5+y.6+O.Q.#+$+7+8+/+/+/+/+. . . . ", + " . . / / y e . . . . . '.'.'.'.&+#.H I 9+0+m a+9 b+l.} m.X.5.+ @ = $ % > c+Y./ f U W X d+k k _. ...e+f+g+c.d.J.)+h+i+j+x.6+k+@+l+m+n+o+/+/+/+/+/+/+/+. . . . ", + " . . S , *.x T / / 3 . . . . . '.'.#.p+q+!.~.m 7 9 < 0 ' } r+* P @ # { s+% w , / e V 5 B -.j k _. .t+e+1+2+3+d.|.K.u.u+N.x..+O.v+w+x+y+z+/+/+/+/+/+/+/+/+/+/+. . . ", + " . . ; > > ^ , A+/ / e y ( . . . . . i.).B+$.C+7 9 : l.a } | * + D+t d Q % > , / f E+5 6 d+j k _.o.p.F+<.r.c.d.J.)+h+!+G+x.H+O.@+@+$+y+%+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", + " . . 2 % % /.-+> ^ S , Y.I+/ =.e . . . . . I $.C+L 9 J+K+a } & 4.+ P c d Q v L+S / f f g |+i j k ,+H.t+:.+.<.c.s.M+N+O+i+N.x..+~+@+#+P+]+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", + " . . # $ Q 2 s+6./.> > , , , , / / ;+y . . . . . 7 a+< U.Q+} | N R+P S+# u % > , / ( f V W i -.Z._.T+I...+.U+c.V+W+t.O+!+N.x.y.++X+@+#+$+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", + " . . @ t # Y+Y+Q Q &.% v v > c+c+S , , / =.( f . . . . . < q Z+) X.^.D+c Q Q % /., Y./ 4 V W i d+k Z T+`.q.+.<.r.d.}.`+)+!+N.x. @.+k+@+#+x+%+z+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . f f . ", + " . . + D+@ c # # $ Q Q Q }+% % /./.S S , *.T / ;+;+f . . . . . m.4.5.b @ # Q % R > , e f V W i 8.j k _.G ..+.'+<.c.4+`+)+h+v.w.y..@O.@+#+x+n++@/+/+/+/+/+/+/+/+/+/+/+. . . . f f f f f . ", + " . . . ^.+ + P b @ c t # - - u u &.% /.R c+c+S , A+/ / y f . . . . . 5.+ @ # Q ] /.L+A+=.f V W |+@@9.k _. .t++.b.g+c.W+|.1.!+u+j+#@~+O.@+l+#+$@8+/+/+/+/+/+/+/+/+/+. . . . f f f f f f f f . ", + " . . | N * * + + =+=+D+@ S+# %@%@- Q 2 % 6.v /.> , , , / T y f f . . . . . # Q % % > , / f E+V B -.9.k _.o.p.F+f+r.c.d.|.&@O+u+N.x..+++@+*@#+]+%+/+/+/+/+/+/+/+. . . =@f f f f f f f f f f -@. ", + " . . . W.D.| | 4.* 5.r + P b @ S+# # Y+- Q Q }+% ; -+> w w S , I+/ / 3 f . . . . . ; > , A+f V g ;@i j k _.>@`...+.r.c.d.|.&@,@'@G+x..+O.)@@+x+$+z+/+/+/+/+/+. . . T / ( y f f f f f f f f f f . . ", + " . . . a } V.} W.| r+4.* ^.* + D+@ @ @ # # - Q Q ] 2 ; /.-+> w (., A+Y./ f f . . . . . , / / U V X @@j k Z .t+a.+.<.c.d.|.K.O+!+G+x.y.!@P.Q.~@$+8+/+/+/+. . . ; > w ^ , T / 3 f f f f f f f f f . . ", + " . {@. . . . Z+} ) D.m.| r+* * 5.r + D+@ S+c # # - Q Q s+% % -+> c+(., , / / / / f . . . . . f g B i j k _._.`.q.+.<.c.]@ +1.O+!+N.x..+!@)@^@#+$+%+%+. . . # - Q % % % > L+w Y./ / / f f f f f f f . . ", + " . /@(@_@:@. . . . [ } } W.| N ! * * R++ + @ @ c c # # # Q u 2 % % ; > L+, , *./ / =.;+f . . . . . i j 9.E >@G ..+.'+c.<@4+&@)+!+N.G+.+O.O.l+#+@+. . . O s @ c c $ Q Q 2 % % > c+, I+x ;+f f f f f f . ", + " . [@/@}@/@/@/@. . . . q } } W.V.! ! N * + O + b b [+t c # $ Q u 2 ] % v R > > ^ *.A+I+/ e f f . . . . 9.E _. ...+.'+[.V+}.|.)+!+v.x..+6+{+.+. . . *+X.r+* r + s @ S+c { - Q s+% > > (., *./ f f f f f . ", + " . |@|@|@1@}@2@/@}@/@. . . . Q+[ } W.| N & * * R++ D+=+@ S+~ # # %@Q Q ] % R -+> ^ , w , , / =.;+f . . . . . ...3@<.4@3+}.|.)+!+u+w.x.)+. . . 0 q } [ V.| & 4.+ R++ b @ # # Q Q &.% 6.> > , A+x ( f f . ", + " . 5@5@6@|@7@|@|@8@}@}@2@/@. . . . ' } ) | | X.| * * ^.+ P 1 @ @ ~ # d Y+Q Q % % v > v w , , *.T / =.f f . . . . . 9@2+,.d.|.t.!+!+b.. . . <+9 o b+p 0 q Z+} ) | N * O + s @ t = d - Q % % -+> ^ , *./ . ", + " . 0@5@a@a@b@c@6@7@|@|@[@8@|@8@. . . . . } ) W.W.N & r+* * r + s 1 @ # # # { - Q u % % ; ; > c+, , , I+/ ( f f . . . . . d.M+t.j . . . $.0+m :+7 M 9 9 < U.q Z+} ) *+& 4.* O + @ @ c # { - }+% % R ^ , . ", + " . d@e@f@f@g@5@5@h@b@5@h@|@b@|@|@|@|@. . . . Z+} } | | & X.r+5.i@+ s D+@ [+t # # Q Q 2 &.% % /.R > c+, , T T / y f . . . . . . . . H 3.I !.$.%.~.C+7 {.a+T.: C.< q q } D.| r+* ^.+ =+1 @ c # - Q s+% v . ", + " . j@k@d@d@d@d@g@f@e@d@l@5@5@a@b@6@c@6@|@|@. . . . [ } } m.| | r+* * + + =+D+@ ~ ~ # m@n@n@Q &.% % v > c+(., , Y./ / =.f . . . '.h.#.#.o@H I I J $.K m C+7 M M ].< U.p q ' D.m.| ! * O + @ @ c @ d d 2 . ", + " . p@q@q@r@r@r@j@s@d@d@f@e@5@l@0@5@5@b@b@c@7@7@7@. . . . } V.V.) | & * * * + s t@u@v@v@w@m@n@x@y@u % v % > > (., , *.x / Y.. . z@A@B@'.2.#.#.p+j.I !.$.C@_+:+C+<+8 9 o < U.0 D@} W.m.| r+* O + s @ t # . ", + " . E@E@F@F@G@q@q@H@H@I@d@H@d@d@d@d@5@f@5@5@5@5@5@c@h@. . . . [ Z+) ) m.| 4.J@K@L@M@N@O@v@w@m@P@x@Q@R@S@] % 6.6.> > w , , . . T@U@V@W@X@Y@X@h.2.#.#.H B.I !.$.$._+Z@7 7 9 T.o < l.q q } } | | X.^.r D+=+. ", + " . `@E@E@E@E@F@G@ #p@q@q@q@q@d@k@d@H@d@d@g@f@g@d@5@0@5@5@6@. . . . Z+} .#+#@###$#L@%#M@O@O@&#P@P@n@n@*#=#S@&.}+% 6.-+> > . . -#T@;#U@>#z@,#X@Y@'#@.#.)#!#H I I I $.K m 7 7 7 9 9 T.< q q } } D.r+4.* 5.. ", + " . ~#~#~#{#~#E@E@E@]#G@^#^# #p@q@q@q@j@k@j@k@d@d@d@d@0@0@e@l@0@5@/#(#_#:#<#.#[#}#K@K@L@M@|#O@#2#3#4#4#x@R@5#6#% }+v . . 7#8#9#0#a#U@T@U@U@,#b#X@c#'.#.#.)#H 3.I l $.$.m m 7 7 M 9 9 < 0 q D@} *+| | . ", + " . d#e#f#~#~#~#g#h#{#{#E@i#E@E@q@F@p@]#q@q@q@q@q@j@d@k@d@d@d@j#k#l#m#n#o#:#:#p#+#}#q#$#$#$#M@M@u@v@1#r#s#3#t#u#v#5#w#x#. . y#z#A#B#C#D#a#E#F#G#V@z@H#X@I#'.@.#.#.H H B.I $.$.0+K :+7 M M : : < q q ' } . ", + " . J#K#K#K#K#L#~#~#~#~#~#~#{#{#i#E@E@^#]#G@]#q@q@^#q@I@H@M#M#N#O#k#k#l#P#Q#_#R#:#S#[#[#J@$#$#T#T#u@U#1#1#P@3#t#t#u#V#W#X#Y#Z#`# $y#z#7#7#D#D#-#.$U@U@+$z@@$H#'#'.2.2.#.p+j.I I l $.%.m m 7 7 9 ].< C.q . ", + " . #$J#K#$$$$%$K#K#L#K#L#f#~#f#~#~#`@`@E@E@E@E@E@E@q@&$*$=$=$-$-$;$O#>$>$,$,$Q#:#:#S#S#'$q#J@$#$#T#)$!$U#1#1#s#~$t#t#{$W#]$^$^$/$($`#_$y#:$7#9#D#<$a#E#U@+$[$b#X@X@A@'.2.#.p+H H B.!.!.~._+m }$7 a+9 ].. ", + " . =@|$#$#$#$1$2$K##$%$K#K#L#e#f#e#~#L#~#~#~#{#3$4$5$6$7$7$8$&$*$-$-$9$9$>$0$0$P#P#Q#S#S#'$'$'$a$b$T#c$!$!$#2#3#d$e$f$g$]$^$^$h$/$i$`#j$k$y#7#7#l$<$m$E#;#U@+$z@z@H#'.'.@.#.#.i.H q+I J $.K K :+C+7 . ", + " . n$o$p$=@o$q$#$q$#$#$#$J##$$$%$$$K#K#e#e#r$s$s$t$4$5$5$u$v$7$w$w$w$-$x$9$>$>$0$y$P#z$A$B$'$'$'$C$b$T#D$D$!$E$#F$F$G$H$I$J$K$^$L$Y#h$($($`#`#y#y#M$7#C#D#E#E#N$U@>#z@b#X@'#'.z.#.#.p+H j.!.O$K 0+m . ", + " . P$P$n$=@=@=@=@p$p$o$#$#$#$#$#$Q$K#Q$R$R$S$T$r$s$t$t$U$5$6$V$6$w$w$W$x$-$X$;$>$0$y$y$z$z$Y$Z$`$'$ % %.%T#T#!$u@+%@%#%$%%%&%*%=%J$K$-%;%>%>%($,%'%`#`#y#z#7#)%D#0#E#;#N$U@z@,#@$X@Y@'.S.#.o@H I j.I J . ", + " . !%!%~%P${%!%n$!%=@=@=@=@=@p$#$]%^%/%/%/%(%S$T$_%:%s$<%t$5$5$5$6$u$7$w$w$-$X$X$>$[%>$y$y$Y$Y$A$`$}%C$ %.%.%|%1%+%+%2%3%4%$%%%*%5%I$J$K$^$;%>%6%7%,%8%9%0%k$:$7#8#8#D#a%E#.$U@[$z@z@X@Y@Y@S.@.#.A.H q+. ", + " . b%b%c%b%d%d%!%!%!%e%f%e%n$g%g%g%^%h%h%i%j%/%R$R$T$_%:%s$k%U$U$4$6$u$V$w$7$w$x$X$X$l%l%0$m%n%z$A$o%`$p%q%.%.%|%r%+%s%2%2%3%t%u%v%*%5%J$]$w%L$x%y%6%7%,%'%z%A%`#y#B%7#l$l$D#E#E#T@[$C%z@H#X@A@I#z.#.A.. ", + " . D%E%F%F%b%b%G%b%~%~%H%I%I%I%J%J%J%g%I%I%g%]%(%R$_%R$T$T$K%k%K%U$L%M%N%u$w$O%P%Q%X$X$X$[%R%0$n%n%z$Y$Z$Z$S%q%T%|%U%V%W%s%X%3%t%4%u%v%*%Y%J$J$Z%;%;%y%y%`%8% &9%.&`#+&y#7#7#B#D#0#E#E#U@U@@&#&W@X@B@&+. ", + " . $&E%E%E%%&E%&&b%b%*&=&-&;&I%;&I%>&I%I%I%I%g%h%]%/%,&_%_%'&'&k%k%L%U$M%)&N%u$!&O%x$x$W$X$~&~&{&{&0$]&z$Y$Z$Z$T%.%^&/&U%W%s%(&2%_&3%:&u%v%<&[&}&K$K$;%>%y%y%,%8%9%9%z%|&`#y#:$7#7#C#m$E#E#.$U@U@z@@$X@. ", + " . 1&$&E%2&3&4&5&6&6&*&7&6&=&=&*&=&>&-&8&-&I%I%J%g%h%]%,&(%R$_%9&9&'&k%0&L%)&)&u$v$O%!&W$P%W$X$~&~&[%a&z$Y$b&o%c&.%d&d&e&/&U%W%s%X%2%3%t%f&f&g&<&<&h&i&Z%Z%j&y%y%k&l& &m&.&|&n&0%y#z#A#)%D#<$E#;#T@>#@&. ", + " . o&1&1&1&p&p&q&q&p&6&6&6&6&6&*&*&r&8&7&=&8&8&I%;&s&g%]%]%]%,&,&_%9&'&:%K%L%L%U$t&)&!&!&!&W$P%u&v&~&[%{&{&a&Y$w& %T%T%x&y&y&U%z&A&A&B&C&D&D&E&v%v%v%F&G&i&Z%H&x%I&J&K&8%9%m&.&|&L&M& $y#M$7#8#D#m$a%U@. ", + " . N&o&O&O&P&Q&q&q&p&6&q&q&6&6&5&6&6&6&6&=&7&*&*&=&;&;&g%R&^%^%,&,&S&T&T&U&U&k%L%L%M%N%V&W&O%!&X&u&v&Y&v&{&m%m%Z&C$Z&`&c&x&x&y&y& *.*+*s%2%C&D&t%@*f&v%<&#*G&$*%*H&x%y%`%l&8%9%m&A%&*n&**=*y#y#7#7#9#m$. ", + " . -*-*P&O&P&P&P&P&O&p&;*Q&p&p&p&q&q&5&6&q&6&6&6&6&*&=&=&>*s&s&,*'*,&)*S&T&T&!*k%k%L%M%M%V&t&!&O%P%P%X&Y&v&v&{&~*'$~*{*]*]*c&x&x&^*^& *+*/*(*_*D&t%:*E&<*[*F&#*G&$*%*}*I&I&`%K& &9%m&&*|*n&**1* $y#2*2*. ", + " 3*4*5*-*-*-*-*O&-*P&O&P&6*P&P&Q&p&p&q&p&6&5&q&6&6&6&q&6&*&7*7*>*s&,*8*8*9*S&T&U&0*U&a*b*M%M%V&W&W&c*c*X&X&Y&d*e*'$f*g*h*{*]*i*j*x&x&k* * *l*(*(*_*C&m*@*f&n*[*F&#*G&o*%*}*p*q*r*K&s*t*m&&*|*u*v*w*x*k$. ", + " 3*y*z*4*4*A*-*-*-*-*-*-*P&P&P&O&P&p&p&P&P&;*B*p&p&q&q&q&6&6&7&=&C*7*,*8*8*8*9*T&D*E*!*a*a*F*G*H*V&I*W&W&c*J*~*K*'$L*M*f*g*h*N*]*i*c&x&^*y&O* *l*P*(*Q*R*m*S*E&<*T*F&U*G&V*W*X*X*q*r*l&s*Y*Z*`*|***** =.= ", + " +=y*@=@=#=4*4*4*5*$=%=-*-*-*-*O&O&P&-*P&P&Q&Q&P&q&p&;*q&q&q&7&q&7&C*s&,*,*'*8*9*&=*=D*!*U&a*F*G*M%V&t&W&W&==c*I*S#-=;=L*>=,='=)=h*]*i*j*j*^*O*!=~=/*{=]=Q*^=S*S*<*<*T*F&/=o*(=W*X*X*J&r*_=s*:=`*I$<=-%.= ", + " +=[=}=}=[=y*@=y*z*|=z*4*1=1=-*$=-*%=-*-*-*P&P&-*P&P&P&Q&p&q&q&p&q&7&7&C*7*,*,*8*8*D*&=D*!*!*a*a*a*F*G*V&2=W&3=4=:#5=-=-=6=7=>=8=9=h*0=a=b=c=^*O*O*!=l*d={=e=R*R*R*S*E&n*F&U*U*f=o*W*g=X*h=r*G$G$&%H$I$i= ", + " j=k=l=m=l=}=}=}=}=[=@=#=@=4*#=n=1=$=o=-*1=p=-*-*P&q=-*q=-*P&O&O&;*q&6&r=C*7*7*s=t=u=&=v=9*D*0*0*a*a*F*w=w=w=2=x=:#y=z=A=B=B=6=8=C=D='=h*N*E=F=F=G=^*H=H=l*d={=I=e=R*J=K=L=L=M=N=U*o*O=P=4%Q=R=R=G$*%H${$ ", + " j=S=T=k=U=k=V=k=k=}=m=[=[=@=@=y*y*@=n=W=1=X=X=$=-*-*p=-*-*-*q=-*-*O&;*;*7&7&7&C*t=t=Y=v=&=&=*=D*D*0*a*Z=G*`= -5=_#.-+-@-#-$-%-B=&-6=7=,=*-N*=-E=----;-O*O* *l*>-d=]=,-J='-'-L=n*N=)-B&X%X%_&_&!-Q=R=R=~- ", + " j={-S={-S=S=T=S=T=k=k=V=k=V=l=[=[=[=y*y*y*n=n=o=o=n=$=p=1=%=%=$=-*-*P&O&;*;*]-r=r&C*^-t=t=/-&=/-0*0*0*0*Z=`=F*(-_-:-<-.-[-#-A=}-$-|-&-1-2-*-3-4-0=E=5-6-;-f$7-8-l*d=9-]=,-J=0-U%a-z&W%W%s%2%2%2%_&3%4%F$ ", + " b-c-c-c-d-{-d-{-S=S=S=S=T=T=k=k=V=k=V=}=[=[=y*@=n=o=e-n=1=o=1=$=p=%=-*-*P&O&;*r=]-7&f-g-t=t=Y=h-&=D**=0*0*i-j-k-(#l-m-n-.-[-@-#-o-$-p-B=&-q-2-2-3-4-r-E=5-;-G=f$H=s-8-d=x&x&y&y&q%U%U%z&W%s%s%X%2%_&2%F$ ", + " t-c-u-c-c-c-v-d-{-w-{-w-S=x-S=S=S=U=k=l=k=k=V=}=}=[=e-e-e-W=e-e-o=o=n=$=$=-*y-O&;*]-]-z-C*g-^-Y=Y=A-&=B-B-C-i-D-n#E-F-l-G-H-.-.-@-I-}-}-B=J-1->=2-3-K-4-r-5-L-6-M-f$]*]*i*c&j*x&^*^*y&e&q%z&z&N-A&s%B&+% ", + " t-O-u-u-u-u-P-Q-c-c-c-v-c-R-{-S-{-S=S=T=S=k=S=k=k=T-}=m=}=e-e-e-e-e-n=1=n=$=$=y-U-6*V-W-X-f-f-g-Y-Z-A-/-B-B-`- ;/#.;+;@;l-#;H-H-.-[-I-I-}-$;p-J->=>=2-%;4-&;r-,=3-,={*Z&]**;a=i*c&=;x&-;y&!=/&U%a-+*s%+% ", + " t-;;>;,;;;O-u-u-';Q-u-Q-Q-P-c-d-);d-);w-!;S=S=U=T=T=k=T=k=V=}=l=e-~;e-e-e-n=$={;y-$=y-U-V-];]-f-f-Y-^;Z-/;/;/;(;_;:;.;.;<;@;l-[;};n-.-|;I-1;}-$;2;J-3;4;%;6=6=6=8=8=,=3-3-h*]*a=a=i*c&j*x&x&^&!=y&U%+*+% ", + " 5;6;;;;;;;;;;;7;8;O-u-O-O-';';';';Q-c-c-);{-);w-{-{-S=k=S=U=T=k=V=k=m=e-e-~;e-e-{;1={;U-U-];V-];9;9;g-Y-^;^;/;0;_;a;a;:;.;.;b;@;[;G-H-c;[-|;I-d;$;$;J-o-}-B=B=|-&-6=8=8=,=9=3-h*0=]*`&e;a=c&x&d&^&^&y&|% ", + " f;g;g;h;h;i;j;j;;;;;8;>;k;O-u-u-O-c-u-u-';c-c-c-);c-d-w-w-S=S=S=S=T=U=k=k=V=l;l;~;m;e-1=n;o;V-U-];p;9;g-q;g-0;r;s;t;u;u;:;:;.;v;+;b;[;};w;w;x;y;[-|;|;I-o-z;}-$-%-B=&-6=6=8=8=,=*-h*h*0=]*]*i*j*j*j*x&|% ", + " f;A;B;g;g;g;g;g;h;j;6;6;;;k;;;;;O-;;O-k;u-u-c-Q-';';';c-v-);c-w-);d-S=S=U=S=S=T=S=l;~;m;{;{;C;y-y-V-];9;p;p;g-D;s;E;F;G;H;I;:;:;J;<;<;K;[;L;L;H-H-M;y;[-|;I-I-}-}-$-%-p-B=6=6=C=7=8=,=)=h*N;0=]*]*i*c&|% ", + " f;O;P;Q;R;P;Q;S;g;g;g;g;g;i;j;j;;;;;;;;;7;k;O-O-u-u-u-P-';P-u-c-c-);d-w-S={-S=!;S=S=U=k=~;{;{;n;y-o;U-T;p;p;p;U;V;W;X;Y;Y;G;Z;u;:;`;J; >b;b;.>[;};H-n-n-c;[-[-I-#-#-o-$-$-p-|-&-6=6=q-8=8=9=9=h*h*0=]*+> ", + " @>O;#>O;$>#>O;P;P;P;P;S;g;g;g;g;i;h;j;6;6;6;;;;;;;,;>;k;u-u-u-u-';u-';c-c-c-);{-);{-{-S-S=S=U=%>{;&>&>o;*>W-=>U;->;>>>,>'>Y;)>)>!>`;J;~>~>{>{>K;@;]>[;G-H-M;w;y;|;[-@-I-d;z;$-p-B=B=|-6=6=M*8=9=9=h*h*.% ", + " ^>/>(>_>(>_>_>O;O;O;$>O;A;A;P;P;S;R;g;g;i;i;i;6;6;;;;;;;;;k;k;u-O-u-O-u-Q-u-c-c-';c-c-);w-d-S=S-S-:><>n;[>[>o;}>|>1>2>3>W;'>'>)>4>5>6>7>8>J;~>~>{>{>b;K;[;[;H-H-.-c;y;[-[-#-#-}-}-p-$-B=|-&-6=>=8=,=,=.% ", + " 9>0>0>0>a>a>(>/>_>_>#>b>O;O;P;$>P;P;P;Q;g;S;c>g;g;h;i;d>j;6;e>;;;;;;k;u-;;O-u-O-Q-Q-';c-';c-);););{-S-S=n;n;[>f>|>g>g>2>'>h>h>h>h>i>)>!>7>7>8>`;`;~>~>b;b;K;.>[;[;m-w;w;c;.-[-j>I-#-z;}-k>B=B=B=&->=>=.% ", + " 9>l>m>n>0>0>0>0>a>o>(>(>_>_>p>#>p>O;O;P;P;Q;P;Q;g;g;g;g;i;g;i;h;e>j;q>;;;;;;8;7;8;>;u-O-u-u-O-';r>c-c-););w-);s>|>t>u>v>3>w>,>,>'>h>x>)>i>y>5>z>7>`;`;A>~>B>{>K;b;[;L;};H-<-w;c;[-|;#-I-#-}-}-$-B=B=C> % ", + " D>E>F>m>m>m>G>0>0>n>0>0>0>o>_>o>(>_>_>#>#>#>O;#>P;P;P;A;P;B;g;B;g;i;H>i;i;6;;;h;;;;;8;7;O-O-O-u-u-Q-I>';Q-c-c-J>K>L>M>N>O>u>v>w>P>w>Q>R>S>h>)>)>4>!>7>6>`;`;J;~>b;{>b;.>K;[;T>H-U>c;c;[-|;@-#-#-$-}-V> % ", + " W>X>E>E>m>Y>m>Y>Z>`>n>0>0>0>l>0>0>0>(>0>(>/>(>_>_>#>#>O;P;P;P;P;A;B;A;R;g;g;g;j;i;i;i;;;;;;;;;;;8;k;8;O-u-O-u- ,K>.,+,@,M>M>#,u>v>3>P>,>Q>$,$,h>)>i>%,4>6>7>6>`;J;~>~>+;b;]>]>[;L;H-w;w;y;.-[-|;#-#-o-'$ ", + " &,X>X>*,X>X>X>X>E>E>=,m>`>m>`>l>-,l>n>0>0>0>;,;,a>o>(>_>_>O;P;#>#>P;O;P;c>B;P;c>B;g;i;i;i;6;;;e>6;;;7;;;,;O-O->,_;,,',.,),!,L>N>N>#,v>v>~,w>w>w>h>h>{,i>y>4>4>7>6>:;`;J;~>{>{>b;]>.>[;L;w;w;c;[-.-[-#-'$ ", + " &,],],],],^,*,],/,X>X>E>E>E>Y>m>m>m>`>n>`>l>G>l>0>0>0>(,;,o>(>_>(>#>O;p>#>#>P;P;P;c>A;S;g;g;g;g;i;j;i;;;;;6;;;_,s;:,<,[,},.,),+,|,L>M>N>#,v>v>P>w>w>$,h>h>S>)>)>4>7>7>6>`;A>~>{>b;b;b;]>.>[;L;w;H-c;[-'$ ", + " &,1,2,3,4,2,],],],5,^,^,X>X>E>E>E>F>6,E>Y>`>`>l>`>`>`>n>l>0>o>a>_>(>_>_>_>#>p>O;O;P;$>P;P;P;g;c>g;c>g;g;i;q>i;7,s;8,8,9,:,[,[,',),.,),M>N>N>N>v>v>v>w>w>,>Q>$,Y;i>)>y>!>5>6>:;`;`;~>{>{>b;K;[;[;};H-U>'$ ", + " 0,a,a,b,a,3,3,2,3,4,],],],*,^,],^,X>X>E>E>E>E>E>6,`>m>m>`>Z>G>`>l>0>0>0>a>_>(>p>(>#>#>#>$>P;#>P;P;P;P;P;B;g;i;c,s;d,e,f,8,:,<,:,[,[,',',),@,M>N>M>#,g,v>h,P>w>'>$,h>S>)>y>y>4>6>7>`;`;~>B>b;b;b;]>[;L;S# ", + " i,j,k,k,b,j,b,a,3,3,3,2,l,3,],l,],],*,/,/,X>m,E>X>Y>Y>=,F>F>F>m>-,-,l>n>`>0>0>0>o>o>o>p>(>#>p>#>#>b>O;P;n,P;c>c,V;o,p,q,e,r,r,s,9,9,<,,,},.,.,+,L>M>M>N>O>v>v>3>w>Q>'>h>h>{,)>y>4>4>6>6>`;`;~>~>b;b;b;S# ", + " t,u,u,j,v,k,k,j,k,a,w,a,b,a,a,3,1,4,x,],l,],],/,X>X>^,y,E>Y>=,=,m>z,`>`>m>l>n>n>l>0>G>0>0>o>(>/>_>#>#>#>O;$>$>A,V;B,C,o,p,D,e,e,r,8,E,9,<,[,},',.,.,!,M>M>F,O>O>~,3>P>w>$,Q>h>S>Y;G,y>4>7>6>8>`;J;~>~>:# ", + " t,H,I,u,u,J,u,j,j,K,k,j,j,k,k,b,b,a,a,3,1,4,4,],4,],],/,/,^,X>/,*,E>E>E>E>`>m>`>`>`>`>m>0>-,0>0>0>0>(>/>_>/>p>L,|>M,N,N,C,O,P,Q,D,e,f,e,8,9,9,<,[,',.,),),|,M>N>N>u>u>v>P>w>w>,>$,h>S>)>y>4>4>7>:;8>`;R, ", + " S,T,H,H,I,U,V,V,u,v,W,u,X,j,k,k,b,b,b,b,a,a,a,3,3,3,Y,x,x,],],],],],X>X>E>E>E>E>=,F>`>`>z,`>m>`>0>G>l>0>0>0>0>L,|>Z,`, '.'N,N,+'o,P,P,e,e,@'8,9,8,:,<,[,,,#'),),M>M>F,N>u>v>3>w>,>,>h>h>h>S>i>y>4>4>6>:# ", + " S,$'%'%'T,T,I,U,I,V,U,H,u,u,J,J,u,v,v,j,j,k,b,b,a,a,b,3,3,1,l,3,],l,x,*,],*,*,/,m,X>m,E>F>Y>`>z,m>m>`>`>m>-,G>&'|>*'Z,Z,Z,=' 'M,N,B,-'o,o,d,D,e,;'8,8,9,>'[,,,',),),+,M>M>N>N>v>v>h,w>$,h>h>h>{,)>)>%,:# ", + " ,''''''''')')')'!')'I,T,T,I,H,u,u,u,u,v,W,v,j,j,j,j,k,~'~'{'a,3,3,3,2,x,4,],],],],/,*,y,/,X>m,E>z,E>F>F>Y>`>`>]'|>^'/'('*'Z,_':'M,M,M,N,o,o,<'P,D,D,e,8,s,9,:,<,[,['.,.,),M>@,M>#,O>}'v>3>w>w>h>h>h>S>_# ", + " |'1'2'3'4'''''''5'''%'T,)'T,T,I,H,u,I,6'u,u,u,v,u,u,X,v,j,j,j,7'b,a,a,b,3,3,3,Y,l,],Y,],*,*,*,*,*,X>X>E>E>E>Y>8'|>9'9'0'a'('('b'*'Z,='M,N,c'B,o,o,Q,P,Q,q,e,8,8,9,<,<,[,.,.,),),M>M>F,N>d'u>h,w>w>,>$,o# ", + " e'f'g'1'1'1'2'h'4'''4'''''''%'%'%'I,T,T,I,T,u,6'u,u,u,u,J,v,j,J,j,k,k,j,i'b,a,a,3,3,2,],4,x,],],],],^,/,/,*,X>j'k'l'l'm'n'o'p'/'('('*'_'Z,='M,q'.'-'r'o,Q,D,e,e,8,8,8,9,<,[,',',s'),L>M>M>N>O>v>3>3>w>/# ", + " t'u'v'v'e'w'x'w'1'y'1'3'3'4'4'''''5'%''')')'T,T,T,T,I,u,u,u,u,u,v,J,K,j,v,k,k,b,b,a,a,b,3,3,3,3,1,l,l,],*,*,],z'A'B'C'D'l'l'9'n'0'^'('('E'*'_'='='='F'N,O,o,P,P,P,D,e,f,8,9,:,[,[,,,.,),L>@,M>N>O>u>u>G' ", + " H'I'J'K'K'v'g'L'L'w'w'M'1'1'y'''3'N'2'''%'%'%')'%'T,T,T,T,I,T,I,u,H,u,u,u,u,j,j,k,~'b,b,~'7'3,7'3,3,3,2,1,Y,O'P'Q'R'S'B'B'l'l'o'o'T'0'p'('*'E'_' 'U'='.'N,N,O,o,D,e,D,e,f,8,8,:,V'[,[,.,',),@,|,M>/#W' ", + " X'Y'Z'`'`' ) ) )g'L'.)L'+)1'w'1'1'3'1'2'''''''''%'%'%'!')'T,)'I,T,H,@)u,H,u,u,u,J,j,j,j,k,k,b,b,a,a,b,a,3,#)P'$)%)&)R'R'S'B'D'l'l'9'9'0'0'p'('*)Z,Z, 'U'='.'N,N,r'P,D,P,D,@'e,8,s,9,<,[,=)',),@,-) ", + " ;)>),)`'`'`'`'') )g'.).).)L'))w'w'))w'1'1'4'1'3'4'N'''''%'%')'%'T,T,T,T,I,T,V,H,u,u,u,u,K,v,J,J,k,~'b,~'!)~){)])^)/)/)()R'_)S'B'l'l'm'9'n'0'('('('b'Z,Z,=' 'M,N,N,C,o,o,p,e,e,e,8,8,9,:,<,[,_;:) ", + " <)[)})`'`'`'`'`' ) ) )|)1).).)L'L'L'L'L'w'))1'1'1'3'2'3'h'h'''%'%')')'T,!'T,T,T,T,6'u,u,H,u,u,u,j,J,j,2)P'3)4){)5)5)$)$)Q'Q'S'S'B'D'6)l'T'o'o'0'0'('('*)Z,Z,M,M,.'N,-'o,o,o,P,d,e,;'8,8,:,K> ", + " 7)8)9)0)J'`'`'`'`'`' ) )a)b)c)d).).)d).)L'.)e)1'))x'1'1'1'4'''''''''%'%')'%'!')')'I,I,U,U,V,u,I,u,u,f)g)h)i)j)4)k)l)5)])$)&)&)m)S'B'D'n)6)l'9'n'o'0'p'('E'_'o)Z,M,.'F'N,r'o,P,o,e,D,p)s;q) ", + " r)X's)t)u)v)`'`'`'`'K'w)K'a)b)b)x)1).).).).).)L'w'))))1'1'1'3'1'N'1'4'''y)''%')')'T,T,T,T,6'I,V,z)g)A)A)B)h)i)i)l){){)$)$)/)C)()R'S'B'B'C'l'm'9'o'0'a'D)('_'Z,_'M,='F'N,N,r'o,P,E)s; ", + " F)G)H)I)J)`'`'`'`'`'w) )w)b)b)b)c)K)L)d).).)d).)L'))))w'e)e)1'1'y'2'''4'4'%''')'%'M)T,T,T,N)O)P)A)A)Q)B)B)R)j)j){)5)5)5)$)$)Q'&)S'S'B'D'l'l'9'0'0'p'p'('('*'Z,:'M,F'M,N,-'V;S) ", + " T)U)I'V)J'`'`'`'`'w)w)w)W)c)c)b)c)c)c)L)b)d).).).)X)L'+)w'e)e)1'1'1'h'2'4'''''%')'%'Y)Z)`) !.!P)A)A)A)B)i)j)4)4)4)4)5)$)$)/)Q'&)S'S'B'D'l'm'9'0'0'p'a'('*'_'Z,Z,:'M,V; ", + " r)+!s)t)u)v)`'`'`'`'w)w)@!W)b)b)b)c)b)c)b)L)K).).)d)d)L'L'L'w'w'1'e)1'1'1'3'4'''#!Z)$!$!%!&!.! ! !P)A)*!B)=!i)l)l)4)5)5)$)$)Q'R'S'S'B'6)l'l'l'9'n'0'D)('*)E'_'|>-! ", + " ;!>!s),!'!)!`'`'`'`'!!w)W)b)~!b)b)b)c)b)b)b)c)b)K).).)L'.).)L'))))e)+)1'1'{!]!^!/!$!$!%!%!&!.! !P)(!Q)B)B)h)j)l){)5)^)$)$)Q'&)R'S'S'B'D'6)m'm'9'9'p'|>|>_! ", + " :!)[!}!`'`'`'`'!!!!!!|!~!~!~!c)b)b)c)c)b)b)c)K)x)L).)1).)X)L'L'))1!2!3!3!4!^!/!/!$!%!5!&!.!.! !A)A)B)h)i)i)l)4)5)5)$)$)%)R'&)R'S'B'n)l'k'6!7! ", + " 8!9![)0!a!b!`'`'`'`'!!!!!!|!~!~!b)~!c)c)b)b)b)c)b)c)c)L)d).).).)c!2!d!e!3!f!4!4!g!/!%!`)`)&!.!.!P)A)h!B)B)i)i!4)4){)5)])$)$)%)&)S'k'j!k! ", + " l!H's)m!n!o!`'`'`'`'!!!!|!~!~!~!~!p!b)b)c)c)b)b)b)b)b)b)K)q!2!r!r!s!e!e!3!3!4!4!/!/!`)%!`)`).!P)t!A)Q)B)u!i)j)l)l)4)5)5)P'v! ", + " w!x![)y!z!`'`'`'`'!!!!!!A!~!~!~!~!~!p!~!b)b)c)b)b)c)q!2!B!B!B!B!r!C!e!e!3!f!D!4!/!$!%!`)E!.!.!P)A)F!B)B)G!R)P'P'H! ", + " I!>)J!K!L!`'`'`'`'!!!!|!~!~!~!~!~!~!~!b)~!b)c)M!2!B!B!B!B!B!r!r!N!C!e!3!O!3!4!^!/!/!%!P!`).!.!t!(!Q!g)R! ", + " S!T!s)U!V!o!`'`'`'!!!!!!|!W!~!~!W!~!~!~!~!X!2!B!B!B!B!B!B!B!r!B!r!Y!e!Z!e!`!D!4!^!$!$!%!5!Z)O) ~ ", + " .~+~@~I)#~`'`'`'`'!!!!A!|!W!~!W!W!W!X!2!B!B!B!B!B!B!B!B!B!B!r!r!r!r!e!Z!3!D!D!g!Z)O)$~ ", + " %~8)u'&~L!`'`'`'`'!!!!|!W!~!W!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!r!r!d!3!2!*~=~ ", + " -~T!s);~>~v)`'`'`'!!!!!!A!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~'~ ", + " )~t)s)!~~~)!`'`'`'!!{~2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~]~ ", + " :!U)U)^~/~`'`'`'(~2!B!B!B!B!B!B!B!B!B!B!B!2!_~ ", + " :~<~@~+~[~b!`'}~2!B!B!B!B!B!B!B!B!2!|~ ", + " 1~2~3~,!'!4~2!B!B!B!B!B!2!5~ ", + " 6~x!@~7~2!B!8~2!9~ ", + " 0~a~2!b~ ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " "}; + """ diff --git a/src/Mod/Ship/shipLoadExample/TaskPanel.ui b/src/Mod/Ship/shipLoadExample/TaskPanel.ui index 77d744189..3c875d905 100644 --- a/src/Mod/Ship/shipLoadExample/TaskPanel.ui +++ b/src/Mod/Ship/shipLoadExample/TaskPanel.ui @@ -76,7 +76,7 @@ - Serie 60 from Iowa University + Series 60 from Iowa University @@ -86,7 +86,7 @@ - Serie 60 (Katamaran) + Series 60 (Katamaran) diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py new file mode 100644 index 000000000..ec6394638 --- /dev/null +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py @@ -0,0 +1,167 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +from TankInstance import * +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/tankCreateTank/TaskPanel.ui" + + def accept(self): + # Create new ship instance + obj = App.ActiveDocument.addObject("Part::FeaturePython","Tank") + ShipTank(obj, self.solid, self.form.level.value(), self.form.dens.value()) + if not obj.IsShipTank: + msg = Translator.translate("Tank has not been created.\n") + App.Console.PrintError(msg) + ViewProviderShipTank(obj.ViewObject) + App.ActiveDocument.recompute() + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.level = form.findChild(QtGui.QDoubleSpinBox, "Level") + form.dens = form.findChild(QtGui.QDoubleSpinBox, "Density") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.level, QtCore.SIGNAL("valueChanged(double)"), self.onLevel) + QtCore.QObject.connect(form.dens , QtCore.SIGNAL("valueChanged(double)"), self.onDens) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Get selected geometry. + @return False if sucessfully find valid geometry. + """ + self.solid = None + solids = [] + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Tank objects can only be created on top of structure geometry (no object selected).\n") + App.Console.PrintError(msg) + msg = Translator.translate("Please create a tank geometry before using this tool.\n") + App.Console.PrintError(msg) + return True + for i in range(0, len(selObjs)): + solid = selObjs[i] + if solid.isDerivedFrom('Part::Feature'): + # Get shape + shape = solid.Shape + if not shape: + continue + solid = shape + if not solid.isDerivedFrom('Part::TopoShape'): + return None + # Get shells + shells = solid.Shells + if not shells: + continue + # Build solids + for s in shells: + solids.append(Part.Solid(s)) + if not solids: + msg = Translator.translate("Ship objects can only be created on top of structure geometry (no solids can't be computed).\n") + App.Console.PrintError(msg) + msg = Translator.translate("Please create or download a tank geometry before using this tool\n") + App.Console.PrintError(msg) + return True + self.solid = Part.CompSolid(solids) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Create a new tank")) + name = Translator.translate("Filling level") + " (\%)" + self.form.findChild(QtGui.QLabel, "LevelLabel").setText(name) + name = '\n' + name = name + Translator.translate("Density") + name = name + '(kg/m3)' + self.form.findChild(QtGui.QLabel, "DensityLabel").setText(name) + + def onLevel(self, value): + """ Method called when tank filling level has been modified. + @param value Changed value. + """ + pass + + def onDens(self, value): + """ Method called when fluid density has been modified. + @param value Changed value. + """ + pass + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.ui b/src/Mod/Ship/tankCreateTank/TaskPanel.ui new file mode 100644 index 000000000..635af0090 --- /dev/null +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.ui @@ -0,0 +1,141 @@ + + + TaskPanel + + + + 0 + 0 + 260 + 180 + + + + Create new ship tank + + + + + + + + + 240 + 160 + + + + Fluid + + + false + + + + + 0 + 20 + 241 + 141 + + + + + 6 + + + QLayout::SetDefaultConstraint + + + + + QLayout::SetDefaultConstraint + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Filling level (%) + + + + + + + 1 + + + 100.000000000000000 + + + 1.000000000000000 + + + + + + + + + 10 + + + 0 + + + 10 + + + 0 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Density (kg/m<span style=" vertical-align:super;">3</span>)</p></body></html> + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 998.000000000000000 + + + + + + + + + + + + + + + + diff --git a/src/Mod/Ship/tankCreateTank/__init__.py b/src/Mod/Ship/tankCreateTank/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/tankCreateTank/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From cb418f02b1be6fb0ee0de9741c39d4ace5c09d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 14 May 2012 14:06:07 +0200 Subject: [PATCH 251/517] Added tool to setup ship weights (structural based) --- src/Mod/Ship/CMakeLists.txt | 18 +- src/Mod/Ship/Icons/Weight.png | Bin 0 -> 7327 bytes src/Mod/Ship/Icons/Weight.xcf | Bin 0 -> 32353 bytes src/Mod/Ship/Icons/Weight.xpm | 721 +++++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Instance.py | 41 +- src/Mod/Ship/Makefile.am | 6 + src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/shipHydrostatics/Tools.py | 2 +- src/Mod/Ship/tankWeights/TaskPanel.py | 212 ++++++++ src/Mod/Ship/tankWeights/TaskPanel.ui | 97 ++++ src/Mod/Ship/tankWeights/__init__.py | 36 ++ 12 files changed, 1145 insertions(+), 5 deletions(-) create mode 100644 src/Mod/Ship/Icons/Weight.png create mode 100644 src/Mod/Ship/Icons/Weight.xcf create mode 100644 src/Mod/Ship/Icons/Weight.xpm create mode 100644 src/Mod/Ship/tankWeights/TaskPanel.py create mode 100644 src/Mod/Ship/tankWeights/TaskPanel.ui create mode 100644 src/Mod/Ship/tankWeights/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index a362a0c6a..a3c14ce96 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -33,6 +33,9 @@ SET(ShipIcons_SRCS Icons/ReparametrizeIco.xpm Icons/Ship.xcf Icons/Ship.xpm + Icons/Weight.png + Icons/Weight.xcf + Icons/Weight.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -96,6 +99,13 @@ SET(ShipUtils_SRCS ) SOURCE_GROUP("shiputils" FILES ${ShipUtils_SRCS}) +SET(ShipWeights_SRCS + tankWeights/__init__.py + tankWeights/TaskPanel.py + tankWeights/TaskPanel.ui +) +SOURCE_GROUP("shipweights" FILES ${ShipWeights_SRCS}) + SET(ShipCreateTank_SRCS tankCreateTank/__init__.py tankCreateTank/TaskPanel.py @@ -103,7 +113,7 @@ SET(ShipCreateTank_SRCS ) SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipCreateTank_SRCS}) +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -159,6 +169,12 @@ INSTALL( DESTINATION Mod/Ship/shipUtils ) +INSTALL( + FILES + ${ShipWeights_SRCS} + DESTINATION + Mod/Ship/tankWeights +) INSTALL( FILES ${ShipCreateTank_SRCS} diff --git a/src/Mod/Ship/Icons/Weight.png b/src/Mod/Ship/Icons/Weight.png new file mode 100644 index 0000000000000000000000000000000000000000..b613fa569e1ba8860e75b14b7ae9f17fcd46dd34 GIT binary patch literal 7327 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 z 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 JLcuER{{W=4{qg_+ literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/Weight.xcf b/src/Mod/Ship/Icons/Weight.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e10ea8e991301b56e4a9a30104fe9db7056c8776 GIT binary patch literal 32353 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 c #767576", +", c #90908F", +"' c #A1A2A2", +") c #ACACAC", +"! c #A1A1A1", +"~ c #8F8E8F", +"{ c #777776", +"] c #636363", +"^ c #636364", +"/ c #636263", +"( c #636362", +"_ c #767676", +": c #9D9D9D", +"< c #B0B0B1", +"[ c #B1B1B0", +"} c #B0B0B0", +"| c #AFAFAF", +"1 c #9C9C9C", +"2 c #767777", +"3 c #656565", +"4 c #646463", +"5 c #868787", +"6 c #AFAFB0", +"7 c #AEAEAE", +"8 c #ADAEAE", +"9 c #ADADAE", +"0 c #868687", +"a c #666667", +"b c #676766", +"c c #656665", +"d c #7B7B7C", +"e c #AFAEAE", +"f c #ACADAC", +"g c #ACACAB", +"h c #7C7C7C", +"i c #686867", +"j c #686868", +"k c #666767", +"l c #A0A0A0", +"m c #ADADAD", +"n c #ADADAC", +"o c #ABAAAA", +"p c #ABABAA", +"q c #9E9E9E", +"r c #6A6969", +"s c #696969", +"t c #676768", +"u c #676868", +"v c #7F7F7F", +"w c #ABABAC", +"x c #A9A9A9", +"y c #A8A8A9", +"z c #80807F", +"A c #6B6B6B", +"B c #6B6C6B", +"C c #696A69", +"D c #939394", +"E c #AAAAAA", +"F c #A7A8A8", +"G c #A8A7A8", +"H c #929292", +"I c #6D6C6D", +"J c #6D6D6D", +"K c #6A6A6A", +"L c #A6A6A6", +"M c #9D9E9E", +"N c #6D6E6E", +"O c #6E6E6D", +"P c #6C6C6C", +"Q c #A0A09F", +"R c #A8A7A7", +"S c #A4A4A5", +"T c #706F6F", +"U c #706F70", +"V c #6D6E6D", +"W c #A6A5A6", +"X c #A3A3A3", +"Y c #919191", +"Z c #717070", +"` c #707171", +" . c #6F6F6F", +".. c #6F6F6E", +"+. c #818281", +"@. c #A4A4A4", +"#. c #A2A2A2", +"$. c #A2A2A1", +"%. c #727272", +"&. c #707071", +"*. c #717071", +"=. c #9A9A9A", +"-. c #A2A2A3", +";. c #A0A1A0", +">. c #989897", +",. c #737473", +"'. c #737474", +"). c #727172", +"!. c #808080", +"~. c #9F9F9F", +"{. c #9E9F9F", +"]. c #808181", +"^. c #747574", +"/. c #757575", +"(. c #737373", +"_. c #737374", +":. c #888888", +"<. c #A09FA0", +"[. c #9F9FA0", +"}. c #A09F9F", +"|. c #878888", +"1. c #767675", +"2. c #949494", +"3. c #9D9D9E", +"4. c #9D9C9C", +"5. c #9C9C9D", +"6. c #787778", +"7. c #777778", +"8. c #777777", +"9. c #8C8C8C", +"0. c #999A99", +"a. c #818181", +"b. c #797878", +"c. c #797879", +"d. c #605F60", +"e. c #605F5F", +"f. c #606160", +"g. c #616061", +"h. c #626162", +"i. c #616262", +"j. c #636262", +"k. c #626363", +"l. c #636463", +"m. c #646464", +"n. c #646564", +"o. c #646465", +"p. c #656564", +"q. c #656666", +"r. c #666666", +"s. c #666565", +"t. c #676666", +"u. c #676767", +"v. c #686768", +"w. c #686767", +"x. c #696869", +"y. c #5F5F60", +"z. c #616060", +"A. c #626161", +"B. c #626263", +"C. c #636464", +"D. c #656464", +"E. c #656566", +"F. c #696868", +"G. c #6A6A69", +"H. c #69696A", +"I. c #B3B3B3", +"J. c #B3B2B2", +"K. c #B2B2B2", +"L. c #B2B2B1", +"M. c #B2B1B1", +"N. c #B1B1B1", +"O. c #B0B1B1", +"P. c #AFB0AF", +"Q. c #AEAFAF", +"R. c #ACADAD", +"S. c #ABABAB", +"T. c #AAABAA", +"U. c #AAA9AA", +"V. c #6B6B6A", +"W. c #6B6C6C", +"X. c #6C6B6C", +"Y. c #B2B3B3", +"Z. c #B2B3B2", +"`. c #B2B1B2", +" + c #B1B2B1", +".+ c #B1B1B2", +"++ c #B1B0B0", +"@+ c #B0AFB0", +"#+ c #AFAEAF", +"$+ c #AEADAE", +"%+ c #ADACAC", +"&+ c #ACACAD", +"*+ c #ABACAC", +"=+ c #ACABAB", +"-+ c #AAAAAB", +";+ c #A9A9AA", +">+ c #A8A8A8", +",+ c #6D6C6C", +"'+ c #6C6D6D", +")+ c #B1B2B2", +"!+ c #B0B1B0", +"~+ c #AFB0B0", +"{+ c #AEAFAE", +"]+ c #AFAFAE", +"^+ c #AEADAD", +"/+ c #ACABAC", +"(+ c #A9AAAA", +"_+ c #A9A8A9", +":+ c #A7A7A7", +"<+ c #A6A7A6", +"[+ c #6E6E6E", +"}+ c #B1B0B1", +"|+ c #ADAEAD", +"1+ c #ADACAD", +"2+ c #A9A8A8", +"3+ c #A7A8A7", +"4+ c #A7A6A7", +"5+ c #A5A5A6", +"6+ c #A6A6A5", +"7+ c #A6A5A5", +"8+ c #A5A5A5", +"9+ c #6F6F70", +"0+ c #5F605F", +"a+ c #B3B2B3", +"b+ c #AAABAB", +"c+ c #A9AAA9", +"d+ c #A4A5A5", +"e+ c #A3A4A4", +"f+ c #A4A3A3", +"g+ c #A3A3A4", +"h+ c #B0AFAF", +"i+ c #AEAEAF", +"j+ c #A8A9A8", +"k+ c #A7A7A8", +"l+ c #A7A7A6", +"m+ c #A7A6A6", +"n+ c #A5A4A4", +"o+ c #A4A3A4", +"p+ c #A3A4A3", +"q+ c #A3A3A2", +"r+ c #B2B2B3", +"s+ c #AAAAA9", +"t+ c #A6A6A7", +"u+ c #A5A6A6", +"v+ c #A5A6A5", +"w+ c #A4A5A4", +"x+ c #A4A4A3", +"y+ c #A1A2A1", +"z+ c #A1A1A0", +"A+ c #737273", +"B+ c #747374", +"C+ c #AEAEAD", +"D+ c #A6A7A7", +"E+ c #A2A3A2", +"F+ c #A2A1A2", +"G+ c #A0A1A1", +"H+ c #A1A0A1", +"I+ c #A0A0A1", +"J+ c #747474", +"K+ c #B0B0AF", +"L+ c #ABACAB", +"M+ c #ABAAAB", +"N+ c #A5A4A5", +"O+ c #A3A2A3", +"P+ c #A2A1A1", +"Q+ c #9FA09F", +"R+ c #9E9F9E", +"S+ c #757676", +"T+ c #AAA9A9", +"U+ c #A5A5A4", +"V+ c #A2A3A3", +"W+ c #A1A1A2", +"X+ c #9F9E9E", +"Y+ c #9E9D9D", +"Z+ c #9C9D9D", +"`+ c #9D9D9C", +" @ c #777877", +".@ c #A8A8A7", +"+@ c #9FA0A0", +"@@ c #9F9E9F", +"#@ c #9D9E9D", +"$@ c #9C9D9C", +"%@ c #9B9C9C", +"&@ c #787879", +"*@ c #676867", +"=@ c #A9A9A8", +"-@ c #9E9E9D", +";@ c #9C9C9B", +">@ c #9B9B9B", +",@ c #9B9B9A", +"'@ c #9A9B9B", +")@ c #797A79", +"!@ c #797A7A", +"~@ c #7A797A", +"{@ c #686969", +"]@ c #9D9C9D", +"^@ c #9A9B9A", +"/@ c #999A9A", +"(@ c #999999", +"_@ c #999899", +":@ c #7A7B7B", +"<@ c #7B7B7B", +"[@ c #A3A2A2", +"}@ c #A1A0A0", +"|@ c #9E9E9F", +"1@ c #9C9B9C", +"2@ c #9C9B9B", +"3@ c #9A9A99", +"4@ c #9A999A", +"5@ c #989998", +"6@ c #989898", +"7@ c #979898", +"8@ c #989797", +"9@ c #979797", +"0@ c #7C7C7D", +"a@ c #6B6A6A", +"b@ c #6B6A6B", +"c@ c #000000", +"d@ c #9F9F9E", +"e@ c #9B9A9A", +"f@ c #9A9999", +"g@ c #989899", +"h@ c #969796", +"i@ c #969696", +"j@ c #7D7E7D", +"k@ c #7E7E7E", +"l@ c #9B9B9C", +"m@ c #999898", +"n@ c #979897", +"o@ c #969697", +"p@ c #969595", +"q@ c #959596", +"r@ c #959595", +"s@ c #959594", +"t@ c #959495", +"u@ c #7E7F7F", +"v@ c #6C6D6C", +"w@ c #9E9D9E", +"x@ c #979798", +"y@ c #969596", +"z@ c #969695", +"A@ c #949594", +"B@ c #939494", +"C@ c #949493", +"D@ c #939493", +"E@ c #807F80", +"F@ c #9B9C9B", +"G@ c #969797", +"H@ c #959696", +"I@ c #959494", +"J@ c #949394", +"K@ c #939393", +"L@ c #939293", +"M@ c #929392", +"N@ c #939292", +"O@ c #818282", +"P@ c #6E6F6F", +"Q@ c #989999", +"R@ c #979696", +"S@ c #939392", +"T@ c #929393", +"U@ c #919291", +"V@ c #919190", +"W@ c #828283", +"X@ c #828382", +"Y@ c #707070", +"Z@ c #9B9A9B", +"`@ c #9A9A9B", +" # c #949595", +".# c #929291", +"+# c #929191", +"@# c #919091", +"## c #909090", +"$# c #908F90", +"%# c #8F8F90", +"&# c #848383", +"*# c #838384", +"=# c #848484", +"-# c #717171", +";# c #999998", +"># c #979697", +",# c #909190", +"'# c #919090", +")# c #8F8F8F", +"!# c #8E8E8E", +"~# c #8E8F8E", +"{# c #858484", +"]# c #858585", +"^# c #727372", +"/# c #99999A", +"(# c #959695", +"_# c #949495", +":# c #949393", +"<# c #919292", +"[# c #908F8F", +"}# c #8F8F8E", +"|# c #8F8E8E", +"1# c #8E8F8F", +"2# c #8E8D8E", +"3# c #8E8D8D", +"4# c #8D8E8D", +"5# c #8D8C8D", +"6# c #8D8D8D", +"7# c #868686", +"8# c #747473", +"9# c #929192", +"0# c #909091", +"a# c #8D8E8E", +"b# c #8D8D8E", +"c# c #8C8D8D", +"d# c #8B8C8B", +"e# c #878787", +"f# c #878887", +"g# c #747475", +"h# c #747575", +"i# c #979796", +"j# c #8E8E8F", +"k# c #8E8E8D", +"l# c #8D8D8C", +"m# c #8B8C8C", +"n# c #8B8B8B", +"o# c #8A8B8B", +"p# c #8B8A8A", +"q# c #8A8A8A", +"r# c #888988", +"s# c #898989", +"t# c #8F9090", +"u# c #8D8C8C", +"v# c #8C8B8C", +"w# c #8B8B8A", +"x# c #8C8C8B", +"y# c #8A8A8B", +"z# c #89898A", +"A# c #898A89", +"B# c #8A8989", +"C# c #888788", +"D# c #8C8B8B", +"E# c #777878", +"F# c #8B8A8B", +"G# c #8A8B8A", +"H# c #8A898A", +"I# c #8A8A89", +"J# c #888989", +"K# c #898888", +"L# c #888887", +"M# c #868786", +"N# c #797978", +"O# c #797979", +"P# c #929293", +"Q# c #878788", +"R# c #878687", +"S# c #868586", +"T# c #858485", +"U# c #7A7A7A", +"V# c #898A8A", +"W# c #898889", +"X# c #888889", +"Y# c #888787", +"Z# c #878786", +"`# c #868685", +" $ c #858685", +".$ c #838483", +"+$ c #8F908F", +"@$ c #7B7C7C", +"#$ c #8C8C8D", +"$$ c #898988", +"%$ c #878686", +"&$ c #868585", +"*$ c #848585", +"=$ c #858584", +"-$ c #838383", +";$ c #828282", +">$ c #838282", +",$ c #7D7C7C", +"'$ c #858586", +")$ c #838484", +"!$ c #838382", +"~$ c #818182", +"{$ c #828181", +"]$ c #808180", +"^$ c #919192", +"/$ c #7E7D7D", +"($ c #8C8D8C", +"_$ c #838283", +":$ c #828383", +"<$ c #828281", +"[$ c #818180", +"}$ c #7F807F", +"|$ c #7E7E7F", +"1$ c #7E7F7E", +"2$ c #7F7E7F", +"3$ c #858686", +"4$ c #848384", +"5$ c #818081", +"6$ c #818080", +"7$ c #807F7F", +"8$ c #7F7F7E", +"9$ c #7F7F80", +"0$ c #909191", +"a$ c #8B8B8C", +"b$ c #848584", +"c$ c #848483", +"d$ c #7E7E7D", +"e$ c #7E7D7E", +"f$ c #7D7D7D", +"g$ c #828182", +"h$ c #7F8080", +"i$ c #7D7C7D", +"j$ c #7C7D7D", +"k$ c #7C7D7C", +"l$ c #7C7C7B", +"m$ c #7B7C7B", +"n$ c #7D7E7E", +"o$ c #7D7D7E", +"p$ c #7D7D7C", +"q$ c #7C7B7C", +"r$ c #7B7B7A", +"s$ c #7A7B7A", +"t$ c #7A7A7B", +"u$ c #7A7A79", +"v$ c #787979", +"w$ c #848485", +"x$ c #7F7E7E", +"y$ c #7C7B7B", +"z$ c #7A7979", +"A$ c #787878", +"B$ c #787777", +"C$ c #787877", +"D$ c #808081", +"E$ c #787978", +"F$ c #777677", +"G$ c #767776", +"H$ c #7B7A7A", +"I$ c #767677", +"J$ c #757576", +"K$ c #757475", +"L$ c #747373", +"M$ c #727373", +"N$ c #737372", +"O$ c #737272", +"P$ c #7B7A7B", +"Q$ c #757675", +"R$ c #757574", +"S$ c #717272", +"T$ c #717172", +"U$ c #777676", +"V$ c #70706F", +"W$ c #79797A", +"X$ c #757474", +"Y$ c #727271", +"Z$ c #727171", +"`$ c #6F6E6F", +" % c #767575", +".% c #6F6E6E", +"+% c #6E6F6E", +"@% c #6E6D6D", +"#% c #6D6D6E", +"$% c #6D6D6C", +"%% c #717271", +"&% c #6C6C6D", +"*% c #6B6B6C", +"=% c #717170", +"-% c #6F706F", +";% c #6E6D6E", +">% c #6C6C6B", +",% c #6A6B6B", +"'% c #6A6B6A", +")% c #707170", +"!% c #6F7070", +"~% c #6A6A6B", +"{% c #6E6E6F", +"]% c #696A6A", +"^% c #696968", +"/% c #686968", +"(% c #666766", +"_% c #6C6B6B", +":% c #676667", +"<% c #6A696A", +"[% c #656465", +"}% c #666566", +"|% c #666665", +"1% c #646565", +"2% c #646364", +"3% c #646363", +"4% c #989798", +"5% c #686869", +"6% c #626362", +"7% c #606061", +"8% c #B3B3B2", +"9% c #A8A9A9", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . + @ + # + ", +" + + $ + % & & & * * = ", +" - - ; > , ' ) ! ~ { ] ] ^ ", +" / ( _ : < [ < } } | | 1 2 3 3 ", +" 4 4 5 } 6 | | 7 7 8 9 0 a b ", +" 3 c d e 7 7 f ) g h i j ", +" k k l m n o p q r s ", +" t u v ) w x y z A B ", +" C s D o E F G H I J ", +" K A l x L M N O ", +" P P Q R S 1 T U ", +" V V H L W X X Y Z ` ", +" ...+.@.S #.$.+.%.%. ", +" &.*.=.-.X ;.l >.,.'. ", +" ).%.!.! ! ! ~.~.{.].^./. ", +" (._.:.<.[.}.~. q q q M |.1._ ", +" /./.v 2.q M 3.: : 4.5.H !.6.7. ", +" 2 { 8.!.9.2.0.2.9.a.b.b.c. ", +" . . . . . . . . . . . . . . . . . . . . . . . . . . d.. e.@ f.f.g.& & h.& = i.j.j.j.k.] ] l.4 m.n.o.p.3 3 q.r.s.r.r.t.t.u.u.j v.w.j j x. ", +" . . . . . . . . . . . . . . . . . . . . . . . @ d.y.+ z.z.f.$ & A.A.= * * j.B.] ] C.m.4 m.m.D.p.p.3 E.E.r.r.t.r.u.u.u.u t i j j x.F.s s G.H.K K ", +" . . . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.K.K.K.L.M.N.O.} } } } } P.| | Q.7 7 8 m m 9 m f R.) ) ) S.S.S.S.T.E E U.E x V.A W.X. ", +" . . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.Y.Z.K.`. +M..+N.++N.++} @+| | | | e #+7 $+$+m m %+&+) ) ) *+=+g S.o E -+;+E ;+x x x >+>+>+F G ,+'+J ", +" . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.I.K.K.K.K.)+M.[ ++!+} ~+} ~+| | {+]+{+$+7 $+^+m n n %+) /+w S.S.S.o E E E U.(+x x x _+>+>+>+:+R :+:+<+:+L O [+ ", +" . . . I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.Z.K.K..+`.N.N.}+++} ~+} 6 | | | e 7 7 7 m |+m &+1+f ) *+*+w S.T.-+o E E E (+x x 2+2+>+>+3+F R :+4+L L L 5+6+7+8+@. .9+T ", +" 0+@ I.I.I.I.I.I.I.I.I.Y.a+Z.K.K.L.N.N.[ !+} } } ~+} 6 | {+7 7 7 $+m ^+m ) ) 1+) g /+S.S.S.b+E E E (+c+x x y >+>+>+F F :+:+:+L L L W W 5+8+S d+@.@.e+f+g+Z &. ", +" & $ I.I.I.I.I.I.J.K.K. +L.N.N.!+} } h+| | 6 | | {+i+7 7 8 m R.R.) ) ) ) *+w S.b+b+E E E (+x x _+j+y >+G G 3+k+:+l+m+m+L 7+5+5+d+8+n+@.o+o+p+X q+X #.#.#.).%. ", +" & * * r+K.L.)+.+N.N.++N.!+} } h+@+| | | 7 7 7 9 m m 1+&+&+f ) ) w S.S.o E T.s+s+x (+x 2+j+y >+F k+:+:+4+t+t+L u+u+v+v+8+8+w+@.x+o+@.X X q+-.-.#.' y+! ! z+A+(.B+ ", +" ] / +.+N.N.} !+} @+@+P.| | ]+i+7 |+C+m m m &+f f g *+=+S.S.S.o E E U.s+(+x x j+2+>+F k+k+:+D+m+L L 6+8+7+8+8+8+n+@.@.o+x+f+X -.E+#.' F+' ! ! ;.G+H+I+}.}.<.J+/. ", +" 4 m.m.!+K+@+~+h+| #+7 {+7 C+^+8 m m &+&+) g L+S.S.S.p M+E U.s+x x x x 2+2+>+R F k+:+<+l+L L L W 8+v+N+w+@.S x+x+X X q+X O+E+F+P+F+! ! H+I+;.Q l Q+~.~.{.~.R+q S+_ _ ", +" 3 3 h+| | {+e 7 ^+^+^+m m ) ) ) ) =+w S.S.b+-+T.U.c+T+;+x x 2+2+>+>+R :+:+D+L L L L 6+7+8+N+U+w+@.e+x+o+p+V+X #.E+' y+W+! H+l l l l [.[.~.{.~.q X+q 3.Y+: : Z+`+8. @ ", +" r.r.7 m 7 ^+m n R.) ) L+*+=+L+S.-+b+E E (+T+x x x >+j+>+.@G :+l+:+D+L L u+7+5+8+N+8+@.@.f+X f+f+q+X #.#.y+' $.! ! ;.I+l Q +@Q+}.@@~.q q q #@3.: : : $@$@1 1 %@%@&@c. ", +" u.w.*@m &+&+) /+w S.S.S.S.o o E x c+T+x y =@>+>+R G :+:+:+m+:+6+7+6+8+8+8+n+S @.e+@.x+X q+#.#.E+#.y+! ! ! z+I+l l +@l }.~.~.R+R+q -@#@: : `+5.1 1 ;@>@>@>@>@,@'@=.)@!@~@ ", +" j {@g S.S.S.S.E p E c+T+U.x x 2+_+>+>+F R R t+:+m+L L 5+v+8+8+8+N+w+@.@.f+p+f+X X #.#.#.! ! ! ! I+z+l l [.~.~.~.{.X+q q M M : : ]@5.1 1 %@;@>@>@>@>@^@=./@(@(@0.(@_@:@<@ ", +" H.s r M+T.E E T+;+x =@x y >+>+G F :+:+D+L L L L 7+8+8+n+U+@.@.p+p+X X O+V+#.[@#.$.P+! ! }@G+l <.Q [.[.~.@@|@q q M #@: : : 4.1 1 1@2@>@>@>@=.=.=.3@4@3@(@(@_@5@6@7@8@9@h h 0@ ", +" a@b@T+;+x =@y >+>+>+3+G :+:+l+c@c@c@c@c@c@d+8+N+@.@.@.X o+X X q+#.#.P+P+W+! ! G+H+l +@+@<.~.~.d@R+q q 3.M 3.: ]@Z+5.1@2@1 >@>@=.=.e@=.=.f@(@(@(@g@6@6@6@6@9@8@h@9@i@i@i@j@k@ ", +" P W.j+>+G R 3+:+:+t+:+L L 7+7+c@c@c@c@c@c@@.@.X X O+X #.' #.F+P+! G+H+l l l ~.Q ~.~.X+q R+-@M M #@Z+]@4.1 1 ;@2@l@>@e@^@^@=.4@=.0.(@(@5@m@6@>.8@n@9@9@i@o@i@p@q@p@r@s@t@v u@ ", +" J J v@:+:+:+l+L 5+6+5+8+d+d+@.@.c@c@c@c@c@c@#.#.#.#.' P+! ! ! I+l Q ~.~.~.d@q X+q q w@3.: : 5.1 4.1 %@2@>@>@>@e@=.=.3@4@0._@_@5@5@6@6@x@9@8@9@9@i@i@i@y@z@r@r@t@A@2.B@C@D@!.E@!. ", +" O [+L L v+8+8+8+8+S @.e+x+x+X X c@c@c@c@c@c@! H+! }@}@l l l [.~.{.d@q q M w@Y+: : ]@1 $@1 1 %@F@>@'@'@=.=.4@=.(@(@g@(@6@6@7@9@n@9@9@o@G@i@z@H@y@r@r@I@r@2.2.2.J@K@K@L@M@N@H a.O@ ", +" P@T N+w+n+@.@.g+X X V+O+V+[@#.y+c@c@c@c@c@c@l Q Q+~.~.~.{.{.q q q : : `+: `+1 ;@2@F@l@>@,@^@=.=./@/@(@Q@Q@m@5@6@x@x@x@9@9@i@R@i@z@r@q@r@r@t@A@A@D 2.K@D@K@S@T@H H U@H Y Y V@W@X@ ", +" Y@Y@Y@p+g+X [@X #.-.#.F+W+! ! ! ! c@c@c@c@c@c@|@q q q M 3.: : ]@]@5.1 1 1 >@>@^@Z@=.`@=.f@f@(@Q@m@6@Q@6@x@9@8@9@9@o@R@i@i@y@q@r@ #I@I@2.J@B@K@K@S@N@M@H .#+#.#Y Y V@@#####$#%#&#*#=# ", +" -#-#-.O+#.' ! P+W+z+}@I+}@l l Q [.c@c@c@c@c@c@Y+: ]@Z+: 1 1 %@>@>@>@>@'@=.=./@3@(@(@;#6@6@6@6@7@9@n@>#9@i@R@i@i@q@r@r@ #s@2.2.J@D D@K@S@K@H N@H +#Y Y Y ,#'#####, $#)#)#)#!#~#!#{#]# ", +" %.^#! ! ! }@z+}@l +@+@~.~.X+{.R+q c@c@c@c@c@c@1 1 ;@;@F@>@=.e@'@=./#3@f@(@Q@_@5@m@>.>.n@9@G@R@>#o@i@(#z@H@r@t@2._#2.:#B@D K@N@T@H H .#<#Y Y Y Y ######$#[#)#}#|#1#|#!#2#3#4#5#6#7#7# ", +" (.(.8#l l l ~.[.d@~.q X+q Y+#@3.: Z+c@c@c@c@c@c@>@>@^@`@=.=./@c@c@c@c@c@c@6@>.8@9@9@h@9@i@i@c@c@c@c@c@c@2.2.2.c@c@c@c@c@c@H U@9#U@Y Y Y 0#####%#)#)#)#)#!#}#a#b#b#6#c#5#c#9.9.9.d#e#f#e# ", +" g#h#~.|@@@|@q -@q #@: : : 4.$@F@%@%@c@c@c@c@c@c@4@4@(@(@Q@Q@c@c@c@c@c@c@i#i#o@i@z@i@H@r@c@c@c@c@c@c@c@c@c@N@M@c@c@c@c@c@c@Y '#'#####%#%#)#)#j#!#!#!#k#!#6#6#5#9.l#9.9.m#d#n#o#o#p#q#r#s# ", +" S+/.S+q q 3.: ]@$@`+4.1 %@l@>@Z@,@e@=.c@c@c@c@c@c@(@m@6@>.8@n@c@c@c@c@c@i@y@q@r@r@s@s@2.c@c@c@c@c@c@c@c@c@c@c@U@c@c@c@c@c@c@t#, )#1#}#|#!#!#2#4#6#6#c#u#9.9.v#n#n#n#w#q#q#q#q#q#s#s#s#q#q#p# ", +" 2 8.`+`+1 1 %@1 F@2@>@>@^@=./@3@4@/@(@c@c@c@c@c@c@9@9@9@>#h@c@c@c@c@c@r@r@t@I@2.B@D@K@K@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@|#!#!#6#b#6#5#l#9.9.9.x#9.n#n#n#o#y#q#z#A#B#s#s#r#:.:.f#C#f#d#D# ", +" 7.E#%@l@>@>@`@'@e@3@=.4@(@(@5@5@6@6@6@c@c@c@c@c@c@i@i@r@r@c@c@c@c@c@c@K@K@D@K@S@S@L@H c@c@c@c@c@c@c@##$#$#$#c@c@c@c@c@c@c@c@6#6#9.5#9.9.d#D#n#n#F#q#G#q#H#I#A#s#J#K#K#:.C#C#L#e#e#M#7#7#9.9. ", +" N#c.O#e@=.=.=.(@0.(@(@_@5@>.6@7@9@9@9@G@c@c@c@c@c@c@s@r@r@c@c@c@c@c@c@S@S@P#H U@Y Y Y Y c@c@c@c@c@c@)#~ 1#~#!#2#c@c@c@c@c@c@c@x#n#9.n#n#w#G#q#I#H#B#A#s#r#s#:.:.:.Q#L#e#R#R#7#7#S#7#]#]#T#a#!#~# ", +" ~@U#f@f@(@Q@m@g@7@>.x@n@9@i@9@i@H@y@r@y@c@c@c@c@c@c@2.D c@c@c@c@c@c@H U@Y Y V@,#,###, c@c@c@c@c@c@c@a#a#k#6#5#6#c@c@c@c@c@c@c@o#y#q#q#I#s#V#W#s#X#:.:.Y#:.C#e#Z#7#7#`#7# $]#]#T#]#{#=#=#=#.$)#+$ ", +" <@@$6@8@9@x@9@9@o@o@i@i@y@H@r@r@ #I@A@2.c@c@c@c@c@c@M@c@c@c@c@c@c@Y 0#####$#)#)#)#1#~#c@c@c@c@c@c@u#6##$9.9.D#D#d#c@c@c@c@c@c@A#s#$$J#X#r#:.:.f#e#e#%$R#7#7#&$]#`#*$=$=$=#=#=#*#-$-$-$;$W@>$,#Y ", +" h h ,$9@i@i@i@i@y@H@r@r@r@r@_#2.J@:#K@K@N@c@c@c@c@c@c@c@c@c@c@c@c@##$#%#)#1#|#~#!#a#a#6#c@c@c@c@c@c@D#9.n#o#p#q#q#B#c@c@c@c@c@c@:.|.:.L#e#5 Z#R#7#7#'$ $]#]#{#=#=#=#=#)$&#-$-$W@!$X@;$~${$a.]$H H ^$ ", +" j@/$H@y@p@r@r@t@2.2.2.2.J@:#K@K@P#M@H H +#c@c@c@c@c@c@c@c@c@c@c@c@c@!#2#k#b#3#5#c##$($9.c@c@c@c@c@c@o#q#V#z#B#s#s#W#c@c@c@c@c@c@e#e#0 7#`#`#S#]#]#=$T#=#=#)$*#-$-$_$:$;$;$<$O@{$a.]$[$!.!.!.v }$K@:# ", +" |$1$2$s@2.2.C@:#D@K@K@K@H M@H H U@Y Y Y 0###c@c@c@c@c@c@c@c@c@c@c@c@c@c#5##$9.9.m#D#v#n#o#c@c@c@c@c@c@s#J#$$:.:.:.L#Y#c@c@c@c@c@c@`#3$]#]#]#*$]#=#*#4$)$-$!$X@!$;$;$~$a.a.].5$5$6$!.}$7$v 8$v u@2$2.2.r@ ", +" 9$}$:#B@K@K@L@H N@<#H <#<#@#0$0$######, +$)#c@c@c@c@c@c@c@c@c@c@c@c@c@c@a$D#y#p#q#q#q#q#s#c@c@c@c@c@c@C#e#:.e#e#5 %$7#c@c@c@c@c@c@b$=#c$=#-$-$-$W@;$;$;$;$+.a.a.a.[$[$!.!.!.}$v u@2$k@k@k@d$e$f$,$f$r@z@ ", +" a.].L@T@H U@+#U@Y Y Y ######, +$)#)#j#!#!#k#c@c@c@c@c@c@c@c@a$c@c@c@c@c@p#q#I#B#s#s#K#s#K#c@c@c@c@c@c@%$%$7#7#'$'$]#{#c@c@c@c@c@c@-$-$:$!$X@g$~$O@+.a.a.[$!.!.}$E@h$v 2$2$|$k@k@f$/$f$i$j$k$h l$@$m$9@9@ ", +" g$~$<$+#Y @#'#V@t#[#[#%#)#1#|#j#!#k#b#6#4#l#l#c@c@c@c@c@c@n#w#y#c@c@c@c@c@c@W#J#:.:.:.|.e#e#c@c@c@c@c@c@3$]#*$=$=$=#4$*#c@c@c@c@c@c@<$a.+.a.a.[$].!.z E@z v v v |$1$k@n$k@f$o$f$j$p$0@h q$<@<@r$r$s$s$6@6@5@ ", +" >$-$,###+$[#[#)#}#}#!#!#b#b#6#6#6#6##$u#9.x#d#c@c@c@c@c@c@I#B#s#s#c@c@c@c@c@c@Q#5 Z#M#7#7#7#c@c@c@c@c@c@=#c$c$-$-$-$>$X@c@c@c@c@c@c@a.[$!.!.7$h$v 8$8$8$1$k@n$j@/$f$f$j$0@h q$<@l$<@<@t$U#U#~@u$O#O#O#v$f@/@ ", +" c$)$=#)#)#!#~#!#3#a#4#6#5#9.#$9.v#m#n#n#n#w#G#q#c@c@c@c@c@c@$$K#:.C#c@c@c@c@c@c@7#7# $ $]#T#w$c@c@c@c@c@c@c@!$X@;$;$a.<$c@c@c@c@c@c@c@v v v k@x$k@k@k@o$o$f$k$f$i$h l$q$y$<@<@<@t$U#U#u$O#z$c.&@b.A$E#B$C$,@^@,@ ", +" ]#]#!#6#k#3#6#6#l#($9.9.m#n#n#n#F#y#q#I#V#z#s#s#c@c@c@c@c@c@e#e#M#M#7#c@c@c@c@c@c@b$=#=#)$.$-$-$c@c@c@c@c@c@g${$a.!.a.D$c@c@c@c@c@c@c@x$k@d$/$f$f$j$p$h h h c@c@c@c@c@c@U#U#z$~@O#b.E$c.A$A$C$7.8.8.F$G$_ _ 1 1 ", +" 7#7##$9.c#9.x#n#n#n#n#n#p#q#I#H#s#s#s#s#J#:.:.L#c@c@c@c@c@c@3$ $&$]#]#c@c@c@c@c@c@-$-$>$>$;$;$O@c@c@c@c@c@c@c@!.E@9$v c@c@c@c@c@c@c@c@f$f$0@0@h <@l$y$<@t$H$c@c@c@c@c@c@c.O#c.&@A$A$8.B$8.{ I$_ > S+/.J$/.h#: #@ ", +" e#e#Y#v#n#n#o#p#q#q#q#A#z#s#J#K#X#:.:.Q#e#e#e#Z#0 c@c@c@c@c@c@b$*$b$=#=#)$c@c@c@c@c@c@O@;$a.a.]$].6$c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@d <@<@r$:@<@H$U#u$u$U#c@c@c@c@c@c@7.7.8.I$2 I$_ S+S+S+/.g#/./.^.J+'.8#q @@{. ", +" :.:.F#p#q#q#q#A#s#J#s#X#:.:.|.L#Y#5 %$7#7#7# $`#]#c@c@c@c@c@c@c$-$-$-$>$;$;$c@c@c@c@c@c@!.!.!.}$v v c@c@c@c@c@c@c@c@c@c@c@h c@c@c@c@c@c@r$U#U#~@u$O#O#N#E$A$A$c@c@c@c@c@c@2 _ _ 1.J$J$/.K$h#J+J+L$'.(.M$N$%.O$%.l +@ ", +" z#V#z#$$W#X#r#:.:.Q#e#Q#R#Z#%$7#S#'$]#]#]#]#=#{#=#c@c@c@c@c@c@W@;$;$+.a.a.5$c@c@c@c@c@c@v u@1$1$k@k@d$c@c@c@c@c@c@c@c@c@<@P$c@c@c@c@c@c@z$O#v$b.A$A$A$B$B$8.8.c@c@c@c@c@c@Q$K$J+R$J+J+B+L$'.(.(.%.O$%.S$T$-#-#` H+! ", +" p#F#w#:.:.:.Y#e#Z#Z#7#7#7#`#&$]#]#T#b$=#=#c$-$*#-$!$c@c@c@c@c@c@a.].]$]$!.E@}$9$c@c@c@c@c@c@e$f$f$f$f$i$h h c@c@c@c@c@s$U#U#u$c@c@c@c@c@c@A$ @6. @8.{ 2 U$_ _ _ c@c@c@c@c@c@B+J+_.(.A+A+^#%.%.%.%.S$` *.-#Y@Y@U V$#.q+E+ ", +" v#9.e#5 e#7#7#S#3$]#]#]#*$=$b$4$&#-$-$-$:$_$;$;$<$<${$a.].]$!.!.!.z v 8$v 8$x$k@k@d$j@f$f$p$f$h l$m$d <@<@:@U#t$u$W$O#O#O#v$v$c@c@c@c@c@c@{ { G$_ _ _ /./.h#X$^.^.8#(.,.(.(.A+%.%.Y$Z$S$-#-#*.Z Y@Y@U U . .`$`$[+[+e+o+ ", +" c#5#6#7#`#]#]#=$=$w$=#c$=#-$4$-$_$X@;$;${$a.{$a.a.a.6$!.h$7$}$2$2$k@k@k@n$/$f$f$f$k$k$h h q$m$<@P$r$U#U#U#U#u$O#O#c.E$A$E#7. @7.c@c@c@c@c@c@J$ %/./.X$J+J+_.B+(.(.A+M$^#%.%.S$S$-#-#*.&.Z Y@U . ....%+%[+[+@%#%#%J $%U+8+8+ ", +" 2#!#*$b$w$=#.$-$-$-$W@-$;$;$;${${$a.a.!.!.!.h$h$9$v v 2$2$1$e$k@k@j@p$h ,$h h l$h <@<@<@U#s$U#U#W$W$O#c@c@c@c@c@c@8.E#8.2 8._ c@c@c@c@c@c@R$g#J+_.8#,.(.A+M$%.A+%%S$-#-#-#` Y@Y@Y@V$ .9+ .[+`$.%[+[+N J J I &%,+P P P *%<+<+ ", +" ~ )#-$-$-$:$_$>$;$g$g$+.a.a.6$5$!.!.E@7$v v |$|$k@k@k@f$/$f$k$h k$h @$l$<@<@:@<@r$U#~@u$z$)@O#b.A$E$C$c@c@c@c@c@c@c@S+1.S+Q$c@c@c@c@c@c@c@L$(.(.N$%.%.%.Z$).-#-#=%*.Y@Y@U -% . . .[++%O V ;%J J J v@P W.>%A A A ,%'%V.K :+3+ ", +" )###,#;$;$g$a.+.a.a.[$a.!.h$9$E@v 8$v x$x$n$e$/$f$f$i$0@k$h q$q$d <@H$t$U#U#~@U#!@O#v$&@A$b.7.6.7.8.8.F$8.c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@O$%.S$Y$-#-#=%` )%Y@!%9+T T ..%P@[+N ;%O J J '+$%I P P B A A a@b@~%K r s s s F.2+=@_+ ", +" Y Y a.a.a.5$!.]$E@z z v u@u@k@x$k@e$f$f$j$f$h 0@h h d <@<@<@H$U#U#U#u$O#O#N#A$E$A$A$C$A$8.8.U$_ _ > > _ /./.c@c@c@c@c@c@c@c@c@c@c@c@c@c@c@-#Z )%&.Y@Y@T !% . .{%+%[+[+N V @%I $%,+&%P W.P A A A ,%K K G.]%s s s x.j j j u w.E E ", +" S@M@!.E@}$v v v 8$1$k@k@k@e$f$f$j$h k$h y$q$<@<@U#r$U#U#u$U#O#v$E$N#b.A$B$ @8.8.{ I$U$2 > %S+Q$h#/.g#J+,.J+,.c@c@c@c@c@c@c@c@c@c@c@c@` Y@!%!%T . .`$[+[+N O J J J $%I P P P P A A A ,%'%K s H.H.s ^%/%^%j t u t u.u.(%b a S.L+ ", +" D K@C@v u@k@k@k@j@f$/$f$f$h h h d d <@<@P$:@H$u$U#!@z$O#&@O#c.A$E#6.8.8.F$F$G$_ _ %> /.X$/.^.J+J+_.J+(.(.(.A+^#%.Y$c@c@c@c@c@c@c@c@T . .P@P@{%[+O N N J J $%P ,+B _%*%_%,%b@,%K K K H.s s s j j j i *@u.u.k :%(%a r.3 c s.3 ) R.1+ ", +" 2.s@k@e$j@j@p$f$p$h h q$<@<@<@s$t$t$U#U#W$O#O#c.A$A$A$A$ @7.8.{ { I$_ Q$J$> /./.g#J+J+J+J+8#(.(.M$A+%.%.S$T$-#-#*.)%Y@Y@U Y@-% .+%{%+%[+[+;%@%J $%&%P P X.X._%A A A V.,%K <%C C s /%s ^%u j u.u.u.u.a :%r.r.E.3 3 p.p.[%m.m.m.] 9 ^+ ", +" z@i@H@,$j$h @$m$d <@<@P$U#U#)@U#u$O#E$b.b.A$A$6.C$7.8.G$I$_ _ _ S+Q$/.K$R$^.J+'.(._.(.(.(.O$O$%.%.-#-#-#-#-#)%V$Y@T -% . . .{%[+N N J J J v@,+P _%>%X.B A '%A K G.G.<%r s /%{@j j j v.*@u.t.t.r.r.}%E.|%3 1%o.p.m.2%m.] 3%] / j.j.#+| | ", +" 9@9@h l$<@<@t$H$U#u$W$O#O#O#O#A$b.A$E# @8.8.8.I$_ _ /.S+1./.R$/.J+J+L$8#(.(.(.^#A+%.S$Z$%%-#*.-#)%=%Y@T V$-% ...`$+%[+O J J J '+&%J P P X._%A A V.A K K ]%C r ^%{@^%j j v.*@w.u.u.:%t.r.r.c q.3 1%1%3 m.4 ] 4 ] ] / * * * A.& & f.& < ++ ", +" 4%6@H$U#!@z$W$O#O#b.c.A$A$C$7.7.8.I$U$G$_ /.1.1././.R$^.J+_._.'.(.(.^#A+%.%.Z$T$-#-#=%)%Y@Y@T T . .`$`$+%[+[+O @%J ,+&%P P P W._%A A A K K K K G.s ^%F.s j u u j u u.k b r.|%s.s.3 3 [%p.[%m.m.] ^ ] ] k.( * = * - & $ % z.+ + # + .+.+ ", +" _@(@(@O#E$E$A$A$6.8.C$8.8.8._ _ _ S+S+/././.X$X$J+J+(.L$(.(.N$M$%.%.%%%%-#-#Y@)%Z 9+Y@ . . .`$+%[+O N O #%J J v@$%P P A *%A V.,%~%a@K K s s ^%^%5%/%i u.*@u.u.b r.r.r.|%3 s.3 3 1%m.m.m.] m.] 6%] * * i.- - - & + 7%+ + + y.. . . . . a+I.I. ", +" =.=.A$A$B$8. @I$F$G$G$_ S+ %/./.^.J+^.8#J+B+(.(.O$A+%.%.Y$%.T$-#-#=%Y@Y@!%-%U . ...[++%[+O @%J J '+P v@P W.B _%A A ,%,%K K <%s s {@{@^%j v.i t u.u.t.a r.r.r.E.E.3 o.D.m.m.C.l.3%] ( / j.* = A.& & g.g.z.+ d.y.. . . . . . . . . . . . I.I. ", +" >@>@>@8.8._ G$> > _ S+R$g#^.J+J+8#_.(.(.N$^#O$%.T$-#-#-#-#=%Y@Y@Y@!%9+ .[+P@..[+[+O J J J ,+$%P P B W.*%A ~%K K K <%s <%s F.5%/%j u v.u.w.u.k t.r.r.3 }%3 [%D.1%m.m.4 C.2%] ] ( 6%* A.- & & & + + + d.0+y.. . . . . . . . . . . . . . . . I.I.I. ", +" 1 1 _ J$/.J$/.R$J+R$J+8#_.(.(.M$O$O$%.Y$S$T$=%-#Z &.Y@Y@ .T ...`$[+[+N [+N J I '+v@P P W._%A A ,%A K ]%K C s s s s /%j v.w.j u.u.k :%r.|%r.q.3 3 3 n.m.m.2%C.] ] / B.* * * A.h.& z.+ + + 0++ 0+0+. . . . . . . . . . . . . . . . . . . . . I.I. ", +" : 3.R$K$J+J+(.L$(.A+N$N$%.%.Y$-#T$-#&.&.` Y@-%V$ . ...+%{%[+N [+J J ,+&%P P P P A A A A K K K K G.s s x.F.5%j j w.u.u.a u.r.r.r.3 q.c 1%1%o.m.m.2%C.] ] ] k.6%* = & ; & $ f.f.d.@ d.. . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I. ", +" |@d@8#(.(.A+^#%.Y$-#-#-#-#*.&.Y@Y@Y@9+9+ .+%+%[+[+[+[+#%J J v@P P W.*%_%A A a@'%K K H.C <%x.F.5%j j i i *@u.:%b r.r.r.}%3 3 3 [%o.o.2%m.^ ^ ] / 6%j.= h.= h.& & f.+ + + y.y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I. ", +" Q+[.l %.Y$Y$-#-#-#&.Z !%V$9+ . . . ..%[+V [+J J J v@J P P X._%A A a@V.~%]%K r s s s {@j j j i u.u.u.k (%r.}%|%c 3 1%p.3 m.^ C.] ] ] * * j.h.- ; & % 7%f.+ + + e.e.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I.I. ", +" ! ! -#)%Y@V$V$9+ . ...{%[+O [+@%J J '+I $%P P P A B A ~%b@V.<%r C s s s /%j j *@w.i u.u.k r.r.r.3 3 3 3 D.m.m.] 3%] ] 6%k.* * * = h.& & g.f.+ + y.# d.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I. ", +" #.#.E+U ..%[+{%[+V @%[+J J v@v@P B W.*%A V.a@'%K r <%C H.s /%j j j i *@u.u.k b t.r.q.|%|%3 3 n.1%4 m.3%] ] j.B.j.* * * & & & g.+ f.+ . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I.I.I. ", +" f+x+@.@.N+d+N+8+u+5+u+L L l+l+<+:+:+F >+>+>+2+2+x x c+(+E E T.E b+S.g S.g ) ) f n m m m 8 $+^+7 i+e 7 | | ~+K+K+++}+[ }+N.N.K.`.K.Z.K.8%I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I. ", +" 8+8+5+L L L <+D+:+4+F .@:+>+>+>+9%x x T+U.E U.E b+b+S.S.g w ) ) f R.n m m m ^+7 8 7 7 ]+Q.| | P.h+} < N.}+N.N.)+ +)+K.Z.Y.8%I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I. ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 05dbfecb5..6cf4c9689 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -34,13 +34,13 @@ class ShipWorkbench ( Workbench ): # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) - list = ["Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank"] self.appendToolbar("Loading",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) - list = ["Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank"] self.appendToolbar("Loading",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 16d77f868..adba4d22b 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -663,7 +663,7 @@ class ViewProviderShip: def sections(obj): """ Returns the discretization points of sections, with the advantage that is a list of nSections lists, with the points. - @param Ship object + @param obj Ship object @return Sections points """ histogram = obj.nPoints[:] @@ -674,3 +674,42 @@ def sections(obj): for j in range(histogram[i],histogram[i+1]): sections[i].append(points[j]) return sections + +def weights(obj): + """ Returns Ship weights list. If weights has not been sets, + this tool creates it. + @param obj Ship object + @return Weights list. None if errors + """ + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + return None + if not obj.IsShip: + return None + # Test if properties already exist + try: + props.index("WeightNames") + except ValueError: + obj.addProperty("App::PropertyStringList","WeightNames","Ship", str(Translator.translate("Ship Weights names"))).WeightNames=[Translator.translate("Lightweight").__str__()] + try: + props.index("WeightMass") + except ValueError: + # Compute mass aproximation + from shipHydrostatics import Tools + disp = Tools.Displacement(obj,obj.Draft,0.0) + obj.addProperty("App::PropertyFloatList","WeightMass","Ship", str(Translator.translate("Ship Weights masses"))).WeightMass=[1000.0 * disp[1]] + try: + props.index("WeightPos") + except ValueError: + # Compute mass aproximation + from shipHydrostatics import Tools + disp = Tools.Displacement(obj,obj.Draft,0.0) + obj.addProperty("App::PropertyVectorList","WeightPos","Ship", str(Translator.translate("Ship Weights centers of gravity"))).WeightPos=[Vector(disp[2],0.0,obj.Draft)] + # Setup list + weights = [] + for i in range(0,len(obj.WeightNames)): + weights.append([obj.WeightNames[i], obj.WeightMass[i], obj.WeightPos[i]]) + return weights diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 0251da41d..35c1957b7 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -34,6 +34,9 @@ nobase_data_DATA = \ Icons/ReparametrizeIco.xpm \ Icons/Ship.xcf \ Icons/Ship.xpm \ + Icons/Weight.png \ + Icons/Weight.xcf \ + Icons/Weight.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -66,6 +69,9 @@ nobase_data_DATA = \ shipUtils/Math.py \ shipUtils/Paths.py \ shipUtils/Translator.py \ + tankWeights/__init__.py \ + tankWeights/TaskPanel.py \ + tankWeights/TaskPanel.ui \ tankCreateTank/__init__.py \ tankCreateTank/TaskPanel.py \ tankCreateTank/TaskPanel.ui diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index f62bebfb4..71a9e75e4 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -84,6 +84,18 @@ class Hydrostatics: ToolTip = str(Translator.translate('Plot ship hydrostatics')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class SetWeights: + def Activated(self): + import tankWeights + tankWeights.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Weight.png" + MenuText = str(Translator.translate('Set ship weights')) + ToolTip = str(Translator.translate('Set ship weights, tanks must be added later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + class CreateTank: def Activated(self): import tankCreateTank @@ -101,4 +113,5 @@ FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) +FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index a2b1f2c65..3db003957 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -116,7 +116,7 @@ def Displacement(ship, draft, trim): @param ship Selected ship instance @param draft Draft. @param trim Trim in degrees. - @return [areas,disp,xcb]: \n + @return [areas,disp,xcb,Cb]: \n areas : Area of each section \n disp: Ship displacement \n xcb: X bouyance center coordinate diff --git a/src/Mod/Ship/tankWeights/TaskPanel.py b/src/Mod/Ship/tankWeights/TaskPanel.py new file mode 100644 index 000000000..14cda21e5 --- /dev/null +++ b/src/Mod/Ship/tankWeights/TaskPanel.py @@ -0,0 +1,212 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +from Instance import * +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/tankWeights/TaskPanel.ui" + self.ship = None + + def accept(self): + if not self.ship: + return False + # Setup lists + name = [] + mass = [] + pos = [] + for i in range(0,self.form.weights.rowCount() - 1): + item = self.form.weights.item(i,0) + name.append(item.text().__str__()) + item = self.form.weights.item(i,1) + mass.append(item.text().toFloat()[0]) + vec = [] + item = self.form.weights.item(i,2) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,3) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,4) + vec.append(item.text().toFloat()[0]) + pos.append(App.Base.Vector(vec[0],vec[1],vec[2])) + # Send to ship + self.ship.WeightNames = name[:] + self.ship.WeightMass = mass[:] + self.ship.WeightPos = pos[:] + return True + + def reject(self): + if not self.ship: + return False + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.weights = form.findChild(QtGui.QTableWidget, "Weights") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.weights,QtCore.SIGNAL("cellChanged(int,int)"),self.onTableItem); + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Get selected geometry. + @return False if sucessfully values initialized. + """ + # Get selected objects + selObjs = FreeCADGui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + continue + if obj.IsShip: + # Test if another ship already selected + if self.ship: + msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.ship = obj + # Test if any valid ship was selected + if not self.ship: + msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") + App.Console.PrintError(msg) + return True + # Get weights + w = weights(self.ship) + # Set the items + self.form.weights.setRowCount(len(w)+1) + for i in range(0,len(w)): + item = QtGui.QTableWidgetItem(w[i][0]) + self.form.weights.setItem(i,0,item) + string = '%g' % (w[i][1]) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,1,item) + string = '%g' % (w[i][2].x) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,2,item) + string = '%g' % (w[i][2].y) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,3,item) + string = '%g' % (w[i][2].z) + item = QtGui.QTableWidgetItem(string) + self.form.weights.setItem(i,4,item) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Set weights")) + labels = [] + labels.append(Translator.translate("Name")) + labels.append(Translator.translate("Mass") + " [kg]") + labels.append(QtCore.QString("g.x [m]")) + labels.append(QtCore.QString("g.y [m]")) + labels.append(QtCore.QString("g.z [m]")) + self.form.weights.setHorizontalHeaderLabels(labels) + + def onTableItem(self, row, column): + """ Function called when an item of table is changed. + @param row Changed item row + @param column Changed item column + """ + item = self.form.weights.item(row,column) + # Row deletion + if column == 0: + if not item.text(): + self.form.weights.removeRow(row) + # Ensure that exist one empty item at the end + nRow = self.form.weights.rowCount() + last = self.form.weights.item(nRow-1,0) + if last: + if(last.text() != ''): + self.form.weights.setRowCount(nRow+1) + # Fields must be numbers + for i in range(0,self.form.weights.rowCount()-1): # Avoid last row + for j in range(1,self.form.weights.columnCount()): # Avoid name column + item = self.form.weights.item(i,j) + if not item: + item = QtGui.QTableWidgetItem('0.0') + self.form.weights.setItem(i,j,item) + continue + (number,flag) = item.text().toFloat() + if not flag: + item.setText('0.0') + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/tankWeights/TaskPanel.ui b/src/Mod/Ship/tankWeights/TaskPanel.ui new file mode 100644 index 000000000..23dc4ff1b --- /dev/null +++ b/src/Mod/Ship/tankWeights/TaskPanel.ui @@ -0,0 +1,97 @@ + + + TaskPanel + + + + 0 + 0 + 260 + 256 + + + + Set wieghts + + + + + + true + + + 1 + + + 5 + + + false + + + 20 + + + false + + + false + + + + + Name + + + + + Mass [kg] + + + + + g.x [m] + + + + + g.y [m] + + + + + g.z [m] + + + + + Lightweight + + + + + 0.0 + + + + + 0.0 + + + + + 0.0 + + + + + 0.0 + + + + + + + + + diff --git a/src/Mod/Ship/tankWeights/__init__.py b/src/Mod/Ship/tankWeights/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/tankWeights/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 4601fea5542beb62d54050eb31e4e35d92ade3e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 14 May 2012 14:42:14 +0200 Subject: [PATCH 252/517] Added annotations to ship weights definition tool --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 1 + src/Mod/Ship/tankWeights/Preview.py | 106 ++++++++++++++++++++++++++ src/Mod/Ship/tankWeights/TaskPanel.py | 34 +++++++++ 4 files changed, 142 insertions(+) create mode 100644 src/Mod/Ship/tankWeights/Preview.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index a3c14ce96..c44e313ab 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -101,6 +101,7 @@ SOURCE_GROUP("shiputils" FILES ${ShipUtils_SRCS}) SET(ShipWeights_SRCS tankWeights/__init__.py + tankWeights/Preview.py tankWeights/TaskPanel.py tankWeights/TaskPanel.ui ) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 35c1957b7..01b296c01 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -70,6 +70,7 @@ nobase_data_DATA = \ shipUtils/Paths.py \ shipUtils/Translator.py \ tankWeights/__init__.py \ + tankWeights/Preview.py \ tankWeights/TaskPanel.py \ tankWeights/TaskPanel.ui \ tankCreateTank/__init__.py \ diff --git a/src/Mod/Ship/tankWeights/Preview.py b/src/Mod/Ship/tankWeights/Preview.py new file mode 100644 index 000000000..571155bb9 --- /dev/null +++ b/src/Mod/Ship/tankWeights/Preview.py @@ -0,0 +1,106 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD,FreeCADGui +from FreeCAD import Base +from FreeCAD import Part +# FreeCADShip modules +from shipUtils import Paths, Translator + +class Preview(object): + def __init__(self): + """ Constructor. + """ + self.objects = [] + + def reinit(self): + """ Reinitializate drawer. + """ + self.clean() + + def update(self, names, pos): + """ Update the 3D view printing annotations. + @param names Weight names. + @param pos Weight positions (FreeCAD::Base::Vector). + """ + # Destroy all previous entities + self.clean() + for i in range(0, len(names)): + # Draw gravity line + line = Part.makeLine((pos[i].x,pos[i].y,pos[i].z),(pos[i].x,pos[i].y,pos[i].z - 9.81)) + Part.show(line) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'Line' + # Draw circles + circle = Part.makeCircle(0.5, pos[i], Base.Vector(1.0,0.0,0.0)) + Part.show(circle) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'CircleX' + circle = Part.makeCircle(0.5, pos[i], Base.Vector(0.0,1.0,0.0)) + Part.show(circle) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'CircleY' + circle = Part.makeCircle(0.5, pos[i], Base.Vector(0.0,0.0,1.0)) + Part.show(circle) + objs = FreeCAD.ActiveDocument.Objects + self.objects.append(objs[-1]) + objs[-1].Label = names[i] + 'CircleZ' + # Draw annotation + self.objects.append(DrawText(names[i] + 'Text', names[i], Base.Vector(pos[i].x+1.0,pos[i].y,pos[i].z))) + + def clean(self): + """ Erase all annotations from screen. + """ + for i in range(0,len(self.objects)): + if not FreeCAD.ActiveDocument.getObject(self.objects[i].Name): + continue + FreeCAD.ActiveDocument.removeObject(self.objects[i].Name) + self.objects = [] + +def DrawText(name, string, position, displayMode="Screen", angle=0.0, justification="Left", colour=(0.00,0.00,0.00), size=12): + """ Draws a text in a desired position. + @param name Name of the object + @param string Text to draw (recommended format u'') + @param position Point to draw the text + @param angle Counter clockwise rotation of text + @param justification Alignement of the text ("Left", "Right" or "Center") + @param colour Colour of the text + @param size Font size + @return FreeCAD annotation object + """ + # Create the object + text = FreeCAD.ActiveDocument.addObject("App::Annotation",name) + # Set the text + text.LabelText = [string, u''] + # Set the options + text.Position = position + FreeCADGui.ActiveDocument.getObject(text.Name).Rotation = angle + FreeCADGui.ActiveDocument.getObject(text.Name).Justification = justification + FreeCADGui.ActiveDocument.getObject(text.Name).FontSize = size + FreeCADGui.ActiveDocument.getObject(text.Name).TextColor = colour + FreeCADGui.ActiveDocument.getObject(text.Name).DisplayMode = displayMode + return FreeCAD.ActiveDocument.getObject(text.Name) diff --git a/src/Mod/Ship/tankWeights/TaskPanel.py b/src/Mod/Ship/tankWeights/TaskPanel.py index 14cda21e5..a01f7c73c 100644 --- a/src/Mod/Ship/tankWeights/TaskPanel.py +++ b/src/Mod/Ship/tankWeights/TaskPanel.py @@ -27,6 +27,7 @@ import FreeCADGui as Gui # Qt library from PyQt4 import QtGui,QtCore # Module +import Preview from Instance import * from shipUtils import Paths, Translator @@ -34,8 +35,10 @@ class TaskPanel: def __init__(self): self.ui = Paths.modulePath() + "/tankWeights/TaskPanel.ui" self.ship = None + self.preview = Preview.Preview() def accept(self): + self.preview.clean() if not self.ship: return False # Setup lists @@ -62,6 +65,7 @@ class TaskPanel: return True def reject(self): + self.preview.clean() if not self.ship: return False return True @@ -98,6 +102,21 @@ class TaskPanel: self.retranslateUi() # Connect Signals and Slots QtCore.QObject.connect(form.weights,QtCore.SIGNAL("cellChanged(int,int)"),self.onTableItem); + # Update screen + name = [] + pos = [] + for i in range(0,self.form.weights.rowCount() - 1): + item = self.form.weights.item(i,0) + name.append(item.text().__str__()) + vec = [] + item = self.form.weights.item(i,2) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,3) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,4) + vec.append(item.text().toFloat()[0]) + pos.append(App.Base.Vector(vec[0],vec[1],vec[2])) + self.preview.update(name, pos) def getMainWindow(self): "returns the main window" @@ -202,6 +221,21 @@ class TaskPanel: (number,flag) = item.text().toFloat() if not flag: item.setText('0.0') + # Update screen annotations + name = [] + pos = [] + for i in range(0,self.form.weights.rowCount() - 1): + item = self.form.weights.item(i,0) + name.append(item.text().__str__()) + vec = [] + item = self.form.weights.item(i,2) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,3) + vec.append(item.text().toFloat()[0]) + item = self.form.weights.item(i,4) + vec.append(item.text().toFloat()[0]) + pos.append(App.Base.Vector(vec[0],vec[1],vec[2])) + self.preview.update(name, pos) def createTask(): panel = TaskPanel() From e30bc42696d15a8601e9eb48848c18b3360aad67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 22 May 2012 11:10:17 +0200 Subject: [PATCH 253/517] Fixed UI symbol --- src/Mod/Ship/tankCreateTank/TaskPanel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py index ec6394638..4eddbd03e 100644 --- a/src/Mod/Ship/tankCreateTank/TaskPanel.py +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py @@ -139,7 +139,7 @@ class TaskPanel: """ Set user interface locale strings. """ self.form.setWindowTitle(Translator.translate("Create a new tank")) - name = Translator.translate("Filling level") + " (\%)" + name = Translator.translate("Filling level") + " (%)" self.form.findChild(QtGui.QLabel, "LevelLabel").setText(name) name = '\n' name = name + Translator.translate("Density") From 3c0b8af49dae7c6e82765c2565121817bd682ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Tue, 22 May 2012 11:10:55 +0200 Subject: [PATCH 254/517] Started GZ curves computation tool development --- src/Mod/Ship/CMakeLists.txt | 15 +- src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Makefile.am | 5 +- src/Mod/Ship/ShipGui.py | 13 ++ src/Mod/Ship/TankInstance.py | 62 +++++++- src/Mod/Ship/tankGZ/TaskPanel.py | 233 +++++++++++++++++++++++++++++++ src/Mod/Ship/tankGZ/TaskPanel.ui | 140 +++++++++++++++++++ src/Mod/Ship/tankGZ/__init__.py | 36 +++++ 8 files changed, 503 insertions(+), 5 deletions(-) create mode 100644 src/Mod/Ship/tankGZ/TaskPanel.py create mode 100644 src/Mod/Ship/tankGZ/TaskPanel.ui create mode 100644 src/Mod/Ship/tankGZ/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index c44e313ab..3106dbc47 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -114,7 +114,14 @@ SET(ShipCreateTank_SRCS ) SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS}) +SET(ShipGZ_SRCS + tankGZ/__init__.py + tankGZ/TaskPanel.py + tankGZ/TaskPanel.ui +) +SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -182,6 +189,12 @@ INSTALL( DESTINATION Mod/Ship/tankCreateTank ) +INSTALL( + FILES + ${ShipGZ_SRCS} + DESTINATION + Mod/Ship/tankGZ +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 6cf4c9689..aa8a409af 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -34,13 +34,13 @@ class ShipWorkbench ( Workbench ): # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Loading",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank"] + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Loading",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 01b296c01..54b7ecf6a 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -75,7 +75,10 @@ nobase_data_DATA = \ tankWeights/TaskPanel.ui \ tankCreateTank/__init__.py \ tankCreateTank/TaskPanel.py \ - tankCreateTank/TaskPanel.ui + tankCreateTank/TaskPanel.ui \ + tankGZ/__init__.py \ + tankGZ/TaskPanel.py \ + tankGZ/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 71a9e75e4..c97f1e908 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -108,6 +108,18 @@ class CreateTank: ToolTip = str(Translator.translate('Create a new ship tank')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class GZ: + def Activated(self): + import tankGZ + tankGZ.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" + MenuText = str(Translator.translate('GZ curve')) + ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -115,3 +127,4 @@ FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) +FreeCADGui.addCommand('Ship_GZ', GZ()) diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py index 584aa0f97..6e44795f8 100644 --- a/src/Mod/Ship/TankInstance.py +++ b/src/Mod/Ship/TankInstance.py @@ -45,7 +45,7 @@ class ShipTank: # Add uniqueness property to identify Tank instances obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", str(Translator.translate("True if is a valid ship tank instance"))).IsShipTank=True # Add general options - obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Filling level"))).Level=level + obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Fluid filling level percentage"))).Level=level obj.addProperty("App::PropertyFloat","Density","ShipTank", str(Translator.translate("Inside fluid density"))).Density=density # Add shapes shape = self.computeShape(solid) @@ -1884,3 +1884,63 @@ class ViewProviderShipTank: " ", " "}; """ + +def tankWeight(obj, angles=Vector(0.0,0.0,0.0), cor=Vector(0.0,0.0,0.0)): + """ Compute tank fluid weight and their center of gravity. + @param obj Tank object. + @param angles Tank angles, Roll, Pitch and Yaw. + @param cor Center or rotation. + @return Weight and center of gravity. None if errors detected + """ + # Test if is a tank instance + props = obj.PropertiesList + try: + props.index("IsShipTank") + except ValueError: + return None + if not obj.IsShipTank: + return None + # Get object solids + Solids = obj.Shape.Solids + W = [0.0, 0.0, 0.0, 0.0] + for s in Solids: + # Get fluid volume + bbox = s.BoundBox + z0 = bbox.ZMin + z1 = bbox.ZMax + dz = obj.Level/100.0 * (z1-z0) + z = z0 + dz + dx = bbox.XMax-bbox.XMin + dy = bbox.YMax-bbox.YMin + box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0))) + fluid = s.common(box) + vol = fluid.Volume + W[0] = W[0] + vol*obj.Density + # Compute fluid solid in rotated position (non linear rotation + # are ussually computed as Roll -> Pitch -> Yaw). + s.rotate(cor, Vector(1.0,0.0,0.0), angles.x) + s.rotate(cor, Vector(0.0,1.0,0.0), angles.y) + s.rotate(cor, Vector(0.0,0.0,1.0), angles.z) + bbox = s.BoundBox + z0 = bbox.ZMin + z1 = bbox.ZMax + dx = bbox.XMax-bbox.XMin + dy = bbox.YMax-bbox.YMin + Error = 0.01*vol + z = 0.0 + v = 0.0 + while(abs(vol - v) > Error): + z = z + (vol - v) / (dx*dy) + dz = z - z0 + box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0))) + fluid = s.common(box) + v = fluid.Volume + if(abs(vol - v) / (dx*dy) <= 0.000001): + break + # Add fluid moments + for f in fluid.Solids: + cog = f.CenterOfMass + W[1] = W[1] + f.Volume*obj.Density*cog.x + W[2] = W[2] + f.Volume*obj.Density*cog.y + W[3] = W[3] + f.Volume*obj.Density*cog.z + return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py new file mode 100644 index 000000000..8a47e67ae --- /dev/null +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -0,0 +1,233 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +from Instance import * +from TankInstance import * +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/tankGZ/TaskPanel.ui" + self.ship = None + self.tanks = {} + + def accept(self): + if not self.ship: + return False + return True + + def reject(self): + if not self.ship: + return False + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.tanks = form.findChild(QtGui.QListWidget, "Tanks") + form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") + form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + self.onTanksSelection() + # Connect Signals and Slots + QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) + return False + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Get selected geometry. + @return False if sucessfully values initialized. + """ + # Get selected objects + selObjs = FreeCADGui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + continue + if obj.IsShip: + # Test if another ship already selected + if self.ship: + msg = Translator.translate("More than one ship selected (extra ship will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.ship = obj + # Test if any valid ship was selected + if not self.ship: + msg = Translator.translate("Ship instance must be selected (no valid ship found at selected objects)\n") + App.Console.PrintError(msg) + return True + props = self.ship.PropertiesList + try: + props.index("WeightNames") + except: + msg = Translator.translate("Ship weights has not been set. You need to set weights before use this tool.\n") + App.Console.PrintError(msg) + return True + # Setup available tanks list + objs = App.ActiveDocument.Objects + iconPath = Paths.iconsPath() + "/Tank.xpm" + icon = QtGui.QIcon(QtGui.QPixmap(iconPath)) + for obj in objs: + # Try to get valid tank property + props = obj.PropertiesList + try: + props.index("IsShipTank") + except ValueError: + continue + if not obj.IsShipTank: + continue + # Add tank to list + name = obj.Name + label = obj.Label + tag = label + ' (' + name + ')' + self.tanks[tag] = name + # self.tanks.append([name, tag]) + item = QtGui.QListWidgetItem(tag) + item.setIcon(icon) + self.form.tanks.addItem(item) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("GZ curve computation")) + self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) + + def onTanksSelection(self): + """ Called when tanks are selected or deselected. + """ + # Set displacement label + disp = self.computeDisplacement() + self.form.disp.setText(Translator.translate("Displacement") + ' %g [kg]' % (disp[0])) + + def getTanks(self): + """ Get the selected tanks objects list. + @return Selected tanks list. + """ + items = self.form.tanks.selectedItems() + tanks = [] + for item in items: + tag = str(item.text()) + name = self.tanks[tag] + t = App.ActiveDocument.getObject('Tank') + if not t: + continue + tanks.append(t) + return tanks + + def computeDisplacement(self): + """ Computes ship displacement. + @return Ship displacement and center of gravity. None if errors detected. + """ + if not self.ship: + return None + # Test if is a ship instance + obj = self.ship + props = obj.PropertiesList + try: + props.index("IsShip") + except ValueError: + return None + if not obj.IsShip: + return None + # Test if properties already exist + try: + props.index("WeightNames") + except: + return None + # Get ship structure weights + W = [0.0, 0.0, 0.0, 0.0] + sWeights = weights(obj) + for w in sWeights: + W[0] = W[0] + w[1] + W[1] = W[1] + w[1]*w[2][0] + W[2] = W[2] + w[1]*w[2][1] + W[3] = W[3] + w[1]*w[2][2] + # Get selected tanks weights + tanks = self.getTanks() + for t in tanks: + w = tankWeight(t) + W[0] = W[0] + w[0] + W[1] = W[1] + w[0]*w[1] + W[2] = W[2] + w[0]*w[2] + W[3] = W[3] + w[0]*w[3] + return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui new file mode 100644 index 000000000..a1f16c39b --- /dev/null +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -0,0 +1,140 @@ + + + TaskPanel + + + + 0 + 0 + 256 + 368 + + + + + 256 + 368 + + + + GZ curve computation + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Loading condition + + + + + 0 + 20 + 231 + 151 + + + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::MultiSelection + + + + + + + Displacement = 0 [kg] + + + + + + + Draft = 0 [m] + + + + + + + + + + + + 0 + 0 + + + + Roll angles + + + + + 0 + 20 + 231 + 141 + + + + + QLayout::SetMinimumSize + + + + + Start [deg] + + + + + + + End [deg] + + + + + + + Number of points + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/Ship/tankGZ/__init__.py b/src/Mod/Ship/tankGZ/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/tankGZ/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From bdd5e0bc999d917727287ca76dd848ce24f8bc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Wed, 23 May 2012 19:04:35 +0200 Subject: [PATCH 255/517] Added draft computation to GZ tool. --- src/Mod/Ship/tankGZ/TaskPanel.py | 47 ++++++++++++++++++++------------ src/Mod/Ship/tankGZ/TaskPanel.ui | 2 +- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 8a47e67ae..9864bfd10 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -30,12 +30,14 @@ from PyQt4 import QtGui,QtCore from Instance import * from TankInstance import * from shipUtils import Paths, Translator +from shipHydrostatics import Tools as Hydrostatics class TaskPanel: def __init__(self): self.ui = Paths.modulePath() + "/tankGZ/TaskPanel.ui" self.ship = None self.tanks = {} + self.trim = 0.0 def accept(self): if not self.ship: @@ -163,14 +165,18 @@ class TaskPanel: """ self.form.setWindowTitle(Translator.translate("GZ curve computation")) self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) + self.form.findChild(QtGui.QGroupBox, "AnglesGroup").setTitle(Translator.translate("Roll angles.")) def onTanksSelection(self): """ Called when tanks are selected or deselected. """ # Set displacement label disp = self.computeDisplacement() - self.form.disp.setText(Translator.translate("Displacement") + ' %g [kg]' % (disp[0])) - + self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) + # Set draft label + draft = self.computeDraft(disp[0]) + self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft)) + def getTanks(self): """ Get the selected tanks objects list. @return Selected tanks list. @@ -192,23 +198,9 @@ class TaskPanel: """ if not self.ship: return None - # Test if is a ship instance - obj = self.ship - props = obj.PropertiesList - try: - props.index("IsShip") - except ValueError: - return None - if not obj.IsShip: - return None - # Test if properties already exist - try: - props.index("WeightNames") - except: - return None # Get ship structure weights W = [0.0, 0.0, 0.0, 0.0] - sWeights = weights(obj) + sWeights = weights(self.ship) for w in sWeights: W[0] = W[0] + w[1] W[1] = W[1] + w[1]*w[2][0] @@ -224,6 +216,27 @@ class TaskPanel: W[3] = W[3] + w[0]*w[3] return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] + def computeDraft(self, disp): + """ Computes ship draft. + @param disp Ship displacement. + @return Ship draft. None if errors detected. + @note 0 trim will be assumed. + """ + if not self.ship: + return None + # Initial condition + trim = 0.0 + dens = 1025 + bbox = self.ship.Shape.BoundBox + draft = bbox.ZMin + dx = bbox.XMax - bbox.XMin + dy = bbox.YMax - bbox.YMin + w = 0.0 + while(abs(disp - w)/disp > 0.01): + draft = draft + (disp - w) / (dens*dx*dy) + w = 1000.0*Hydrostatics.Displacement(self.ship, draft, trim)[1] + return draft + def createTask(): panel = TaskPanel() Gui.Control.showDialog(panel) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index a1f16c39b..41823bf71 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -76,7 +76,7 @@ - + 0 From 6bc60de9bd04ecc7f1bfc2caa7b126ad6b3582f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 26 May 2012 15:33:29 +0200 Subject: [PATCH 256/517] Added trim option to GZ curves tool --- src/Mod/Ship/shipHydrostatics/Tools.py | 6 +- src/Mod/Ship/tankGZ/TaskPanel.py | 106 ++++++++++++++++++++----- src/Mod/Ship/tankGZ/TaskPanel.ui | 84 +++++++++++++++++--- 3 files changed, 163 insertions(+), 33 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 3db003957..2c0e5aa36 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -439,9 +439,9 @@ def KBT(ship, draft, trim, roll=0.0): @param draft Draft. @param trim Trim in degrees. @param roll Roll angle in degrees. - @return [KBTx, KBTy]: \n - KBTy : TRansversal KB y coordinate \n - KBTz : TRansversal KB z coordinate + @return [KBTy, KBTz]: \n + KBTy : Transversal KB y coordinate \n + KBTz : Transversal KB z coordinate """ angle = math.radians(trim) rAngle = math.radians(roll) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 9864bfd10..48a23242b 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -21,6 +21,7 @@ #* * #*************************************************************************** +import math # FreeCAD modules import FreeCAD as App import FreeCADGui as Gui @@ -37,7 +38,6 @@ class TaskPanel: self.ui = Paths.modulePath() + "/tankGZ/TaskPanel.ui" self.ship = None self.tanks = {} - self.trim = 0.0 def accept(self): if not self.ship: @@ -71,11 +71,13 @@ class TaskPanel: pass def setupUi(self): - mw = self.getMainWindow() - form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.tanks = form.findChild(QtGui.QListWidget, "Tanks") - form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") - form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.tanks = form.findChild(QtGui.QListWidget, "Tanks") + form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") + form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + form.trim = form.findChild(QtGui.QDoubleSpinBox, "Trim") + form.autoTrim = form.findChild(QtGui.QPushButton, "TrimAutoCompute") self.form = form # Initial values if self.initValues(): @@ -84,6 +86,8 @@ class TaskPanel: self.onTanksSelection() # Connect Signals and Slots QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) + QtCore.QObject.connect(form.trim,QtCore.SIGNAL("valueChanged(double)"),self.onTrim) + QtCore.QObject.connect(form.autoTrim,QtCore.SIGNAL("pressed()"),self.onAutoTrim) return False def getMainWindow(self): @@ -166,6 +170,10 @@ class TaskPanel: self.form.setWindowTitle(Translator.translate("GZ curve computation")) self.form.findChild(QtGui.QGroupBox, "LoadConditionGroup").setTitle(Translator.translate("Loading condition.")) self.form.findChild(QtGui.QGroupBox, "AnglesGroup").setTitle(Translator.translate("Roll angles.")) + self.form.findChild(QtGui.QLabel, "TrimLabel").setText(Translator.translate("Trim") + " [deg]") + self.form.findChild(QtGui.QLabel, "StartAngleLabel").setText(Translator.translate("Start") + " [deg]") + self.form.findChild(QtGui.QLabel, "EndAngleLabel").setText(Translator.translate("Start") + " [deg]") + self.form.findChild(QtGui.QLabel, "NAngleLabel").setText(Translator.translate("Number of points")) def onTanksSelection(self): """ Called when tanks are selected or deselected. @@ -174,8 +182,59 @@ class TaskPanel: disp = self.computeDisplacement() self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) # Set draft label - draft = self.computeDraft(disp[0]) - self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft)) + draft = self.computeDraft(disp[0], self.form.trim.value()) + self.form.draft.setText(Translator.translate("Draft") + ' = %g [m]' % (draft[0])) + + def onTrim(self, trim): + """ Called when trim angle value is changed. + @param trim Selected trim angle. + """ + self.onTanksSelection() + + def onAutoTrim(self): + """ Called when trim angle must be auto computed. + """ + # Start at null trim angle + trim = 0.0 + # Get center of gravity + disp = self.computeDisplacement(trim) + G = [disp[1], disp[2], disp[3]] + disp = disp[0] + # Get bouyancy center + draft = self.computeDraft(disp) + xcb = draft[1] + draft = draft[0] + KBT = Hydrostatics.KBT(self.ship, draft, trim) + B = [xcb, KBT[0], KBT[1]] + # Get stability initial condition + BG = [G[0]-B[0], G[1]-B[1], G[2]-B[2]] + x = BG[0]*math.cos(math.radians(trim)) - BG[2]*math.sin(math.radians(trim)) + y = BG[1] + z = BG[0]*math.sin(math.radians(trim)) + BG[2]*math.cos(math.radians(trim)) + var = math.degrees(math.atan2(x,z)) + # Iterate looking stability point + dVar = math.copysign(0.0033, var) + while True: + if (dVar*math.copysign(dVar, var) < 0.0): + break + trim = trim - math.copysign(dVar, var) + # Get center of gravity + disp = self.computeDisplacement(trim) + G = [disp[1], disp[2], disp[3]] + disp = disp[0] + # Get bouyancy center + draft = self.computeDraft(disp, trim) + xcb = draft[1] + draft = draft[0] + KBT = Hydrostatics.KBT(self.ship, draft, trim) + B = [xcb, KBT[0], KBT[1]] + # Get stability initial condition + BG = [G[0]-B[0], G[1]-B[1], G[2]-B[2]] + x = BG[0]*math.cos(math.radians(trim)) - BG[2]*math.sin(math.radians(trim)) + y = BG[1] + z = BG[0]*math.sin(math.radians(trim)) + BG[2]*math.cos(math.radians(trim)) + var = math.degrees(math.atan2(x,z)) + self.form.trim.setValue(trim) def getTanks(self): """ Get the selected tanks objects list. @@ -186,14 +245,15 @@ class TaskPanel: for item in items: tag = str(item.text()) name = self.tanks[tag] - t = App.ActiveDocument.getObject('Tank') + t = App.ActiveDocument.getObject(name) if not t: continue tanks.append(t) return tanks - def computeDisplacement(self): + def computeDisplacement(self, trim=0.0): """ Computes ship displacement. + @param trim Trim angle [degrees]. @return Ship displacement and center of gravity. None if errors detected. """ if not self.ship: @@ -209,33 +269,39 @@ class TaskPanel: # Get selected tanks weights tanks = self.getTanks() for t in tanks: - w = tankWeight(t) + w = tankWeight(t, App.Base.Vector(0.0,-trim,0.0)) + # Unrotate center of gravity + x = w[1]*math.cos(math.radians(-trim)) - w[3]*math.sin(math.radians(-trim)) + y = w[2] + z = w[1]*math.sin(math.radians(-trim)) + w[3]*math.cos(math.radians(-trim)) W[0] = W[0] + w[0] - W[1] = W[1] + w[0]*w[1] - W[2] = W[2] + w[0]*w[2] - W[3] = W[3] + w[0]*w[3] + W[1] = W[1] + w[0]*x + W[2] = W[2] + w[0]*y + W[3] = W[3] + w[0]*z return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] - def computeDraft(self, disp): + def computeDraft(self, disp, trim=0.0): """ Computes ship draft. @param disp Ship displacement. - @return Ship draft. None if errors detected. - @note 0 trim will be assumed. + @param trim Trim angle [degrees]. + @return Ship draft, and longitudinal bouyance center position. None if errors detected. """ if not self.ship: return None # Initial condition - trim = 0.0 dens = 1025 bbox = self.ship.Shape.BoundBox draft = bbox.ZMin dx = bbox.XMax - bbox.XMin dy = bbox.YMax - bbox.YMin w = 0.0 + xcb = 0.0 while(abs(disp - w)/disp > 0.01): draft = draft + (disp - w) / (dens*dx*dy) - w = 1000.0*Hydrostatics.Displacement(self.ship, draft, trim)[1] - return draft + ww = Hydrostatics.Displacement(self.ship, draft, trim) + w = 1000.0*ww[1] + xcb = ww[2] + return [draft,xcb] def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index 41823bf71..3742ecb82 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -7,13 +7,13 @@ 0 0 256 - 368 + 408 256 - 368 + 408 @@ -25,7 +25,7 @@ 0 - 0 + 6 @@ -43,7 +43,7 @@ 0 20 231 - 151 + 231 @@ -71,6 +71,55 @@ + + + + + + + 3 + 0 + + + + Trim [deg] + + + + + + + + 3 + 0 + + + + -45.000000000000000 + + + 45.000000000000000 + + + 0.100000000000000 + + + + + + + + 1 + 0 + + + + Auto + + + + + @@ -78,9 +127,9 @@ - + 0 - 0 + 3 @@ -92,7 +141,7 @@ 0 20 231 - 141 + 101 @@ -121,13 +170,28 @@ - + + + 0.000000000000000 + + + 90.000000000000000 + + - + + + 90.000000000000000 + + - + + + 10000 + + From e16ea9d29c186cf60e51d19250a67de233b57ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 27 May 2012 14:31:10 +0200 Subject: [PATCH 257/517] Added roll angles options controller at GZ curves tool --- src/Mod/Ship/tankGZ/TaskPanel.py | 20 +++++++++++++++++++- src/Mod/Ship/tankGZ/TaskPanel.ui | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 48a23242b..a577ee53c 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -78,6 +78,9 @@ class TaskPanel: form.draft = form.findChild(QtGui.QLabel, "DraftLabel") form.trim = form.findChild(QtGui.QDoubleSpinBox, "Trim") form.autoTrim = form.findChild(QtGui.QPushButton, "TrimAutoCompute") + form.roll0 = form.findChild(QtGui.QDoubleSpinBox, "StartAngle") + form.roll1 = form.findChild(QtGui.QDoubleSpinBox, "EndAngle") + form.nRoll = form.findChild(QtGui.QSpinBox, "NAngle") self.form = form # Initial values if self.initValues(): @@ -88,6 +91,9 @@ class TaskPanel: QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) QtCore.QObject.connect(form.trim,QtCore.SIGNAL("valueChanged(double)"),self.onTrim) QtCore.QObject.connect(form.autoTrim,QtCore.SIGNAL("pressed()"),self.onAutoTrim) + QtCore.QObject.connect(form.roll0,QtCore.SIGNAL("valueChanged(double)"),self.onRoll) + QtCore.QObject.connect(form.roll1,QtCore.SIGNAL("valueChanged(double)"),self.onRoll) + QtCore.QObject.connect(form.nRoll,QtCore.SIGNAL("valueChanged(int)"),self.onRoll) return False def getMainWindow(self): @@ -236,6 +242,15 @@ class TaskPanel: var = math.degrees(math.atan2(x,z)) self.form.trim.setValue(trim) + def onRoll(self, value): + """ Called when roll angles options are modified. + @param value Dummy changed value. + """ + roll0 = self.form.roll0.value() + self.form.roll1.setMinimum(roll0) + roll1 = self.form.roll1.value() + self.form.roll0.setMaximum(roll1) + def getTanks(self): """ Get the selected tanks objects list. @return Selected tanks list. @@ -254,7 +269,10 @@ class TaskPanel: def computeDisplacement(self, trim=0.0): """ Computes ship displacement. @param trim Trim angle [degrees]. - @return Ship displacement and center of gravity. None if errors detected. + @return Ship displacement and center of gravity. None if errors + detected. + @note Returned center of gravity is refered to ship attached + axis coordinates. """ if not self.ship: return None diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index 3742ecb82..c1cad3e01 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -184,13 +184,22 @@ 90.000000000000000 + + 90.000000000000000 + + + 2 + 10000 + + 90 + From 506d638c8eafb2dfa8c50911e970395b46831ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 27 May 2012 15:41:57 +0200 Subject: [PATCH 258/517] Added GZ computation capabilities. --- src/Mod/Ship/tankGZ/TaskPanel.py | 47 ++++++++++++++++++++++++++++---- src/Mod/Ship/tankGZ/TaskPanel.ui | 6 ++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index a577ee53c..72a7ef057 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -42,6 +42,20 @@ class TaskPanel: def accept(self): if not self.ship: return False + # Get general data + disp = self.computeDisplacement() + draft = self.computeDraft(disp[0], self.form.trim.value()) + trim = self.form.trim.value() + # Get roll angles + roll0 = self.form.roll0.value() + roll1 = self.form.roll1.value() + nRoll = self.form.nRoll.value() + dRoll = (roll1 - roll0) / (nRoll - 1) + roll = [] + GZ = [] + for i in range(0, nRoll): + roll.append(i*dRoll) + GZ.append(self.computeGZ(draft[0], trim, roll[-1])) return True def reject(self): @@ -266,7 +280,7 @@ class TaskPanel: tanks.append(t) return tanks - def computeDisplacement(self, trim=0.0): + def computeDisplacement(self, trim=0.0, roll=0.0): """ Computes ship displacement. @param trim Trim angle [degrees]. @return Ship displacement and center of gravity. None if errors @@ -287,15 +301,18 @@ class TaskPanel: # Get selected tanks weights tanks = self.getTanks() for t in tanks: - w = tankWeight(t, App.Base.Vector(0.0,-trim,0.0)) + w = tankWeight(t, App.Base.Vector(roll,-trim,0.0)) # Unrotate center of gravity x = w[1]*math.cos(math.radians(-trim)) - w[3]*math.sin(math.radians(-trim)) y = w[2] z = w[1]*math.sin(math.radians(-trim)) + w[3]*math.cos(math.radians(-trim)) + w[1] = x + w[2] = y*math.cos(math.radians(-roll)) - z*math.sin(math.radians(-roll)) + w[3] = y*math.sin(math.radians(-roll)) + z*math.cos(math.radians(-roll)) W[0] = W[0] + w[0] - W[1] = W[1] + w[0]*x - W[2] = W[2] + w[0]*y - W[3] = W[3] + w[0]*z + W[1] = W[1] + w[0]*w[1] + W[2] = W[2] + w[0]*w[2] + W[3] = W[3] + w[0]*w[3] return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]] def computeDraft(self, disp, trim=0.0): @@ -321,6 +338,26 @@ class TaskPanel: xcb = ww[2] return [draft,xcb] + def computeGZ(self, draft, trim, roll): + """ Compute GZ value. + @param draft Ship draft. + @param trim Ship trim angle [degrees]. + @param roll Ship roll angle [degrees]. + @return GZ value [m]. + """ + # Get center of gravity (x coordinate not relevant) + disp = self.computeDisplacement(trim, roll) + G = [disp[2], disp[3]] + disp = disp[0] + # Get bouyancy center (x coordinate not relevant) + KBT = Hydrostatics.KBT(self.ship, draft, trim, roll) + B = [KBT[0], KBT[1]] + # GZ computation + BG = [G[0] - B[0], G[1] - B[1]] + y = BG[0]*math.cos(math.radians(-roll)) - BG[1]*math.sin(math.radians(-roll)) + z = BG[0]*math.sin(math.radians(-roll)) + BG[1]*math.cos(math.radians(-roll)) + return -y + def createTask(): panel = TaskPanel() Gui.Control.showDialog(panel) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index c1cad3e01..ce59e5d2b 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -182,10 +182,10 @@ - 90.000000000000000 + 89.000000000000000 - 90.000000000000000 + 45.000000000000000 @@ -198,7 +198,7 @@ 10000 - 90 + 46 From 3b381f84053294cd6c15b713488d5e18b3aeecf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 27 May 2012 16:39:30 +0200 Subject: [PATCH 259/517] GZ curve plotting --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 1 + src/Mod/Ship/tankGZ/Plot.py | 186 +++++++++++++++++++++++++++++++ src/Mod/Ship/tankGZ/TaskPanel.py | 2 + 4 files changed, 190 insertions(+) create mode 100644 src/Mod/Ship/tankGZ/Plot.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 3106dbc47..7944e4c38 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -116,6 +116,7 @@ SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) SET(ShipGZ_SRCS tankGZ/__init__.py + tankGZ/Plot.py tankGZ/TaskPanel.py tankGZ/TaskPanel.ui ) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 54b7ecf6a..a6d38f500 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -77,6 +77,7 @@ nobase_data_DATA = \ tankCreateTank/TaskPanel.py \ tankCreateTank/TaskPanel.ui \ tankGZ/__init__.py \ + tankGZ/Plot.py \ tankGZ/TaskPanel.py \ tankGZ/TaskPanel.ui diff --git a/src/Mod/Ship/tankGZ/Plot.py b/src/Mod/Ship/tankGZ/Plot.py new file mode 100644 index 000000000..1ce11d344 --- /dev/null +++ b/src/Mod/Ship/tankGZ/Plot.py @@ -0,0 +1,186 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import os +# FreeCAD modules +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base +from FreeCAD import Image, ImageGui +# FreeCADShip modules +from shipUtils import Paths, Translator + +header = """ ################################################################# + + ##### #### ### #### ##### # # ### #### + # # # # # # # # # # # # + # ## #### #### # # # # # # # # # # # + #### # # # # # # # ##### # # ## ## ##### # #### + # # #### #### # # # # # # # # # # + # # # # # # # # # # # # # # + # # #### #### ### # # #### ##### # # ### # + + ################################################################# +""" + +class Plot(object): + def __init__(self, x, y, disp, draft, trim): + """ Constructor. performs plot and show it (Using pyxplot). + @param x Roll angles [deg]. + @param y GZ value [m]. + @param disp Ship displacement [tons]. + @param draft Ship draft [m]. + @param trim Ship trim angle [deg]. + """ + if self.createDirectory(): + return + if self.saveData(x,y): + return + if self.saveLayout(x,y, disp, draft, trim): + return + if self.execute(): + return + ImageGui.open(self.path + 'gz.png') + + def createDirectory(self): + """ Create needed folder to write data and scripts. + @return True if error happens. + """ + self.path = FreeCAD.ConfigGet("UserAppData") + "ShipOutput/" + if not os.path.exists(self.path): + os.makedirs(self.path) + if not os.path.exists(self.path): + msg = Translator.translate("Can't create '" + self.path + "' folder.\n") + FreeCAD.Console.PrintError(msg) + return False + + def saveData(self,x,y): + """ Write data file. + @param x Roll angles. + @param y GZ value. + @return True if error happens. + """ + # Open the file + filename = self.path + 'gz.dat' + try: + Output = open(filename, "w") + except IOError: + msg = Translator.translate("Can't write '" + filename + "' file.\n") + FreeCAD.Console.PrintError(msg) + return True + # Print header + Output.write(header) + Output.write(" #\n") + Output.write(" # File automatically exported by FreeCAD-Ship\n") + Output.write(" # This file contains transversal GZ stability parameter, filled with following columns:\n") + Output.write(" # 1: Roll angles [deg]\n") + Output.write(" # 2: GZ [m]\n") + Output.write(" #\n") + Output.write(" #################################################################\n") + # Print data + if len(x) < 2: + msg = Translator.translate("Not enough data to plot.\n") + FreeCAD.Console.PrintError(msg) + return True + for i in range(0, len(x)): + string = "%f %f\n" % (x[i], y[i]) + Output.write(string) + # Close file + Output.close() + self.dataFile = filename + msg = Translator.translate("Data saved at '" + self.dataFile + "'.\n") + FreeCAD.Console.PrintMessage(msg) + return False + + def saveLayout(self, x, y, disp, draft, trim): + """ Prints the data output. + @param x Roll angles. + @param y GZ value. + @param disp Ship displacement. + @param draft Ship draft. + @param trim Ship trim angle. + @return True if error happens. + """ + filename = self.path + 'gz.pyxplot' + # Open the file + try: + Output = open(filename, "w") + except IOError: + msg = Translator.translate("Can't write '" + filename + "' file.\n") + FreeCAD.Console.PrintError(msg) + return True + # Write header + Output.write(header) + Output.write(" #\n") + Output.write(" # File automatically exported by FreeCAD-Ship\n") + Output.write(" # This file contains a script to plot transversal GZ stability parameter.\n") + Output.write(" # To use it execute:\n") + Output.write(" #\n") + Output.write(" # pyxplot %s\n" % (filename)) + Output.write(" #\n") + Output.write(" #################################################################\n") + # Write general options for hydrostatics + Output.write("set numeric display latex\n") + Output.write("set output '%s'\n" % (self.path + 'gz.eps')) + Output.write("set nokey\n") + Output.write("set grid\n") + Output.write("# X axis\n") + Output.write("set xlabel '$roll$ / degrees'\n") + Output.write("set xtic\n") + Output.write("# Y axis\n") + Output.write("set ylabel '$GZ$ / m'\n") + Output.write("set ytic\n") + Output.write("# Line styles\n") + Output.write("set style 1 line linetype 1 linewidth 2 colour rgb (0):(0):(0)\n") + # Additional data + Output.write("# Additional data\n") + Output.write("set label (1) '$\\Delta = %g \\mathrm{tons}$' %f,%f\n" % (disp, x[0] + 0.65*(x[-1] - x[0]), min(y) + 0.95*(max(y)-min(y)))) + Output.write("set label (2) '$T = %g \\mathrm{m}$' %f,%f\n" % (draft, x[0] + 0.65*(x[-1] - x[0]), min(y) + 0.85*(max(y)-min(y)))) + Output.write("set label (3) '$Trim = %g^\\circ$' %f,%f\n" % (trim, x[0] + 0.65*(x[-1] - x[0]), min(y) + 0.75*(max(y)-min(y)))) + # Write plot call + Output.write("# Plot\n") + Output.write("plot '%s' using 1:2 title 'GZ' axes x1y1 with lines style 1\n" % (self.dataFile)) + # Close file + self.layoutFile = filename + Output.close() + return False + + def execute(self): + """ Calls pyxplot in order to plot an save an image. + @return True if error happens. + """ + filename = self.path + 'gz' + comm = "pyxplot %s" % (self.layoutFile) + if os.system(comm): + msg = Translator.translate("Can't execute pyxplot. Maybe is not installed?\n") + FreeCAD.Console.PrintError(msg) + msg = Translator.translate("Plot will not generated\n") + FreeCAD.Console.PrintError(msg) + return True + comm = "gs -r300 -dEPSCrop -dTextAlphaBits=4 -sDEVICE=png16m -sOutputFile=%s.png -dBATCH -dNOPAUSE %s.eps" % (filename,filename) + if os.system(comm): + msg = Translator.translate("Can't execute ghostscript. Maybe is not installed?\n") + FreeCAD.Console.PrintError(msg) + msg = Translator.translate("Generated image will not converted to png\n") + FreeCAD.Console.PrintError(msg) + return True + return False diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 72a7ef057..5fefccafb 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -28,6 +28,7 @@ import FreeCADGui as Gui # Qt library from PyQt4 import QtGui,QtCore # Module +from Plot import * from Instance import * from TankInstance import * from shipUtils import Paths, Translator @@ -56,6 +57,7 @@ class TaskPanel: for i in range(0, nRoll): roll.append(i*dRoll) GZ.append(self.computeGZ(draft[0], trim, roll[-1])) + Plot(roll, GZ, disp[0]/1000.0, draft[0], trim) return True def reject(self): From ef24e4d2e6e5bae765a869008320030c6cdaa319 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 31 May 2012 11:50:25 +0200 Subject: [PATCH 260/517] Implement CDATA reader, fix bugs in Writer::insertBinFile --- src/App/PropertyFile.cpp | 52 +++++++++++++++++++++++++++------------- src/Base/Reader.cpp | 43 +++++++++++++++++++++++++++++---- src/Base/Reader.h | 15 ++++++++++-- src/Base/Writer.cpp | 24 +++++++------------ 4 files changed, 96 insertions(+), 38 deletions(-) diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index 13599c88a..52278ea99 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -257,13 +257,18 @@ void PropertyFileIncluded::setPyObject(PyObject *value) void PropertyFileIncluded::Save (Base::Writer &writer) const { if (writer.isForceXML()) { - writer.Stream() << writer.ind() << "" << endl; - - // write the file in the XML stream - if (!_cValue.empty()) + if (!_cValue.empty()) { + Base::FileInfo file(_cValue.c_str()); + writer.Stream() << writer.ind() << "" << std::endl; + // write the file in the XML stream + writer.incInd(); writer.insertBinFile(_cValue.c_str()); - - writer.Stream() << writer.ind() <<"" << endl ; + writer.decInd(); + writer.Stream() << writer.ind() <<"" << endl; + } + else + writer.Stream() << writer.ind() << "" << std::endl; } else { // instead initiate an extra file @@ -280,17 +285,30 @@ void PropertyFileIncluded::Save (Base::Writer &writer) const void PropertyFileIncluded::Restore(Base::XMLReader &reader) { reader.readElement("FileIncluded"); - string file (reader.getAttribute("file") ); - - if (!file.empty()) { - // initate a file read - reader.addFile(file.c_str(),this); - - // is in the document transient path - aboutToSetValue(); - _cValue = getDocTransientPath() + "/" + file; - _BaseFileName = file; - hasSetValue(); + if (reader.hasAttribute("file")) { + string file (reader.getAttribute("file") ); + if (!file.empty()) { + // initate a file read + reader.addFile(file.c_str(),this); + // is in the document transient path + aboutToSetValue(); + _cValue = getDocTransientPath() + "/" + file; + _BaseFileName = file; + hasSetValue(); + } + } + // section is XML stream + else if (reader.hasAttribute("data")) { + string file (reader.getAttribute("data") ); + if (!file.empty()) { + // is in the document transient path + aboutToSetValue(); + _cValue = getDocTransientPath() + "/" + file; + reader.readBinFile(_cValue.c_str()); + reader.readEndElement("FileIncluded"); + _BaseFileName = file; + hasSetValue(); + } } } diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp index db355f723..6791b99f6 100644 --- a/src/Base/Reader.cpp +++ b/src/Base/Reader.cpp @@ -34,6 +34,7 @@ /// Here the FreeCAD includes sorted by Base,App,Gui...... #include "Reader.h" +#include "Base64.h" #include "Exception.h" #include "Persistence.h" #include "InputSource.h" @@ -79,6 +80,7 @@ Base::XMLReader::XMLReader(const char* FileName, std::istream& str) //parser->setFeature(XMLUni::fgXercesDynamic, true); parser->setContentHandler(this); + parser->setLexicalHandler(this); parser->setErrorHandler(this); try { @@ -127,7 +129,7 @@ long Base::XMLReader::getAttributeAsInteger(const char* AttrName) const if (pos != AttrMap.end()) return atol(pos->second.c_str()); else - // wrong name, use hasAttribute if not shure! + // wrong name, use hasAttribute if not sure! assert(0); return 0; @@ -140,7 +142,7 @@ unsigned long Base::XMLReader::getAttributeAsUnsigned(const char* AttrName) cons if (pos != AttrMap.end()) return strtoul(pos->second.c_str(),0,10); else - // wrong name, use hasAttribute if not shure! + // wrong name, use hasAttribute if not sure! assert(0); return 0; @@ -153,7 +155,7 @@ double Base::XMLReader::getAttributeAsFloat (const char* AttrName) const if (pos != AttrMap.end()) return atof(pos->second.c_str()); else - // wrong name, use hasAttribute if not shure! + // wrong name, use hasAttribute if not sure! assert(0); return 0.0; @@ -166,7 +168,7 @@ const char* Base::XMLReader::getAttribute (const char* AttrName) const if (pos != AttrMap.end()) return pos->second.c_str(); else - // wrong name, use hasAttribute if not shure! + // wrong name, use hasAttribute if not sure! assert(0); return ""; @@ -255,6 +257,22 @@ void Base::XMLReader::readCharacters(void) { } +void Base::XMLReader::readBinFile(const char* filename) +{ + Base::FileInfo fi(filename); + Base::ofstream to(fi, std::ios::out | std::ios::binary); + if (!to) + throw Base::Exception("XMLReader::readBinFile() Could not open file!"); + + bool ok; + do { + ok = read(); if (!ok) break; + } while (ReadType != EndCDATA); + + to << Base::base64_decode(Characters); + to.close(); +} + void Base::XMLReader::readFiles(zipios::ZipInputStream &zipstream) const { // It's possible that not all objects inside the document could be created, e.g. if a module @@ -370,15 +388,32 @@ void Base::XMLReader::endElement (const XMLCh* const /*uri*/, const XMLCh *cons ReadType = EndElement; } +void Base::XMLReader::startCDATA () +{ + ReadType = StartCDATA; +} +void Base::XMLReader::endCDATA () +{ + ReadType = EndCDATA; +} + +#if (XERCES_VERSION_MAJOR == 2) void Base::XMLReader::characters(const XMLCh* const chars, const unsigned int length) +#else +void Base::XMLReader::characters(const XMLCh* const chars, const XMLSize_t length) +#endif { Characters = StrX(chars).c_str(); ReadType = Chars; CharacterCount += length; } +#if (XERCES_VERSION_MAJOR == 2) void Base::XMLReader::ignorableWhitespace( const XMLCh* const /*chars*/, const unsigned int /*length*/) +#else +void Base::XMLReader::ignorableWhitespace( const XMLCh* const /*chars*/, const XMLSize_t /*length*/) +#endif { //fSpaceCount += length; } diff --git a/src/Base/Reader.h b/src/Base/Reader.h index 3ced7241b..7e55575d4 100644 --- a/src/Base/Reader.h +++ b/src/Base/Reader.h @@ -131,6 +131,8 @@ public: void readEndElement(const char* ElementName=0); /// read until characters are found void readCharacters(void); + /// read binary file + void readBinFile(const char*); //@} /** @name Attribute handling */ @@ -171,8 +173,15 @@ protected: // ----------------------------------------------------------------------- virtual void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const XERCES_CPP_NAMESPACE_QUALIFIER Attributes& attrs); virtual void endElement (const XMLCh* const uri, const XMLCh *const localname, const XMLCh *const qname); - virtual void characters (const XMLCh* const chars, const unsigned int length); + virtual void startCDATA (); + virtual void endCDATA (); +#if (XERCES_VERSION_MAJOR == 2) + virtual void characters (const XMLCh* const chars, const unsigned int length); virtual void ignorableWhitespace(const XMLCh* const chars, const unsigned int length); +#else + virtual void characters (const XMLCh* const chars, const XMLSize_t length); + virtual void ignorableWhitespace(const XMLCh* const chars, const XMLSize_t length); +#endif virtual void resetDocument(); @@ -198,7 +207,9 @@ protected: Chars, StartElement, StartEndElement, - EndElement + EndElement, + StartCDATA, + EndCDATA } ReadType; diff --git a/src/Base/Writer.cpp b/src/Base/Writer.cpp index 01eecef6b..621893a8a 100644 --- a/src/Base/Writer.cpp +++ b/src/Base/Writer.cpp @@ -65,32 +65,26 @@ void Writer::insertAsciiFile(const char* FileName) if (!from) throw Base::Exception("Writer::insertAsciiFile() Could not open file!"); - Stream() << "" << endl; + Stream() << "]]>" << endl; } void Writer::insertBinFile(const char* FileName) { Base::FileInfo fi(FileName); - Base::ifstream from(fi, std::ios::in | std::ios::binary); + Base::ifstream from(fi, std::ios::in | std::ios::binary | std::ios::ate); if (!from) throw Base::Exception("Writer::insertAsciiFile() Could not open file!"); - Stream() << " bytes(fileSize); + from.read((char*)&bytes[0], fileSize); + Stream() << Base::base64_encode(&bytes[0], fileSize); Stream() << "]]>" << endl; } From 4f91a5a71b42c9de264339434540f9efda55b86b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 28 May 2012 16:02:26 -0300 Subject: [PATCH 261/517] Added FreeCADGui.doCommand() python command --- src/Gui/Application.h | 2 ++ src/Gui/ApplicationPy.cpp | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/Gui/Application.h b/src/Gui/Application.h index 74b3dbb64..44a73d0c6 100644 --- a/src/Gui/Application.h +++ b/src/Gui/Application.h @@ -231,6 +231,8 @@ public: PYFUNCDEF_S(sActiveDocument); PYFUNCDEF_S(sGetDocument); + PYFUNCDEF_S(sDoCommand); + static PyMethodDef Methods[]; private: diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index 9ca9ee3af..9a2a51af4 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -128,6 +128,9 @@ PyMethodDef Application::Methods[] = { {"getDocument", (PyCFunction) Application::sGetDocument, 1, "getDocument(string) -> object\n\n" "Get a document by its name"}, + {"doCommand", (PyCFunction) Application::sDoCommand, 1, + "doCommand(string) -> None\n\n" + "Prints the given string in the python console and runs it"}, {NULL, NULL} /* Sentinel */ }; @@ -765,3 +768,12 @@ PyObject* Application::sRunCommand(PyObject * /*self*/, PyObject *args,PyObject return 0; } } + +PyObject* Application::sDoCommand(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) +{ + char *pstr=0; + if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C + return NULL; // NULL triggers exception + Command::doCommand(Command::Doc,pstr); + return Py_None; +} From d9aa2712bb87d900e7b1c7b5109805ea39b6e35c Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 28 May 2012 16:02:56 -0300 Subject: [PATCH 262/517] Testing python Gui.doCommand with the Draft Line tool --- src/Mod/Draft/DraftGui.py | 6 +++++- src/Mod/Draft/DraftTools.py | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 13517f478..7e651a698 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -78,7 +78,11 @@ class todo: try: name = str(name) FreeCAD.ActiveDocument.openTransaction(name) - func() + if isinstance(func,list): + for l in func: + FreeCADGui.doCommand(l) + else: + func() FreeCAD.ActiveDocument.commitTransaction() except: wrn = "[Draft.todo.commit] Unexpected error:", sys.exc_info()[0], "in ", f, "(", arg, ")" diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 885e781c6..81d1bc05d 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -415,13 +415,26 @@ class Line(Creator): def finish(self,closed=False,cont=False): "terminates the operation and closes the poly if asked" if self.obj: + # remove temporary object, if any old = self.obj.Name todo.delay(self.doc.removeObject,old) self.obj = None if (len(self.node) > 1): + # building command string + if self.support: + sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' + else: + sup = 'None' + points='[' + for n in self.node: + if len(points) > 1: + points += ',' + points += 'FreeCAD.Vector('+str(n.x) + ',' + str(n.y) + ',' + str(n.z) + ')' + points += ']' self.commit(translate("draft","Create DWire"), - partial(Draft.makeWire,self.node,closed, - face=self.ui.fillmode,support=self.support)) + ['import Draft', + 'points='+points, + 'Draft.makeWire(points,closed='+str(closed)+',face='+str(bool(self.ui.fillmode))+',support='+sup+')']) if self.ui: self.linetrack.finalize() self.constraintrack.finalize() From 77e618cb92757ae48ef0863fc680291dd7644578 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 29 May 2012 22:17:12 -0300 Subject: [PATCH 263/517] Used Gui.doCommand() in all Draft commands --- src/Mod/Draft/DraftTools.py | 186 +++++++++++++++++++++++---------- src/Mod/Draft/DraftVecUtils.py | 4 + 2 files changed, 136 insertions(+), 54 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 81d1bc05d..93fb74fcc 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -380,8 +380,38 @@ class Creator: todo.delayCommit(self.commitList) self.commitList = [] + def getStrings(self): + "returns a couple of useful strings fro building python commands" + + # current plane rotation + p = plane.getRotation() + qr = p.Rotation.Q + qr = '('+str(qr[0])+','+str(qr[1])+','+str(qr[2])+','+str(qr[3])+')' + + # support object + if self.support: + sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' + else: + sup = 'None' + + # contents of self.node + points='[' + for n in self.node: + if len(points) > 1: + points += ',' + points += DraftVecUtils.toString(n) + points += ']' + + # fill mode + if self.ui: + fil = str(bool(self.ui.fillmode)) + else: + fil = "True" + + return qr,sup,points,fil + def commit(self,name,func): - "stores partial actions to be committed to the FreeCAD document" + "stores actions to be committed to the FreeCAD document" self.commitList.append((name,func)) class Line(Creator): @@ -421,20 +451,11 @@ class Line(Creator): self.obj = None if (len(self.node) > 1): # building command string - if self.support: - sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' - else: - sup = 'None' - points='[' - for n in self.node: - if len(points) > 1: - points += ',' - points += 'FreeCAD.Vector('+str(n.x) + ',' + str(n.y) + ',' + str(n.z) + ')' - points += ']' + rot,sup,pts,fil = self.getStrings() self.commit(translate("draft","Create DWire"), ['import Draft', - 'points='+points, - 'Draft.makeWire(points,closed='+str(closed)+',face='+str(bool(self.ui.fillmode))+',support='+sup+')']) + 'points='+pts, + 'Draft.makeWire(points,closed='+str(closed)+',face='+fil+',support='+sup+')']) if self.ui: self.linetrack.finalize() self.constraintrack.finalize() @@ -628,9 +649,12 @@ class BSpline(Line): old = self.obj.Name self.doc.removeObject(old) try: + # building command string + rot,sup,pts,fil = self.getStrings() self.commit(translate("draft","Create BSpline"), - partial(Draft.makeBSpline,self.node,closed, - face=self.ui.fillmode,support=self.support)) + ['import Draft', + 'points='+pts, + 'Draft.makeBSpline(points,closed='+str(closed)+',face='+fil+',support='+sup+')']) except: print "Draft: error delaying commit" if self.ui: @@ -741,12 +765,15 @@ class Rectangle(Creator): if abs(DraftVecUtils.angle(p4.sub(p1),plane.u,plane.axis)) > 1: length = -length height = p2.sub(p1).Length if abs(DraftVecUtils.angle(p2.sub(p1),plane.v,plane.axis)) > 1: height = -height - p = plane.getRotation() - p.move(p1) try: + # building command string + rot,sup,pts,fil = self.getStrings() self.commit(translate("draft","Create Rectangle"), - partial(Draft.makeRectangle,length,height, - p,self.ui.fillmode,support=self.support)) + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(p1), + 'Draft.makeRectangle(length='+str(length)+',height='+str(height)+',placement=pl,face='+fil+',support='+sup+')']) except: print "Draft: error delaying commit" self.finish(cont=True) @@ -1013,23 +1040,30 @@ class Arc(Creator): def drawArc(self): "actually draws the FreeCAD object" - p = plane.getRotation() - p.move(self.center) + rot,sup,pts,fil = self.getStrings() if self.closedCircle: try: - self.commit(translate("draft","Create Circle"), - partial(Draft.makeCircle,self.rad,p, - self.ui.fillmode,support=self.support)) + # building command string + self.commit(translate("draft","Create Circle"), + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',support='+sup+')']) except: - print "Draft: error delaying commit" + print "Draft: error delaying commit" else: sta = math.degrees(self.firstangle) end = math.degrees(self.firstangle+self.angle) if end < sta: sta,end = end,sta try: - self.commit(translate("draft","Create Arc"), - partial(Draft.makeCircle,self.rad,p,self.ui.fillmode, - sta,end,support=self.support)) + # building command string + self.commit(translate("draft","Create Arc"), + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',startangle='+str(sta)+',endangle='+str(end)+',support='+sup+')']) except: print "Draft: error delaying commit" self.finish(cont=True) @@ -1257,11 +1291,14 @@ class Polygon(Creator): def drawPolygon(self): "actually draws the FreeCAD object" - p = plane.getRotation() - p.move(self.center) + rot,sup,pts,fil = self.getStrings() + # building command string self.commit(translate("draft","Create Polygon"), - partial(Draft.makePolygon,self.ui.numFaces.value(),self.rad, - True,p,face=self.ui.fillmode,support=self.support)) + ['import Draft', + 'pl=FreeCAD.Placement()', + 'pl.Rotation.Q='+rot, + 'pl.Base='+DraftVecUtils.toString(self.center), + 'Draft.makePolygon('+str(self.ui.numFaces.value())+',radius='+str(self.rad)+',inscribed=True,placement=pl,face='+fil+',support='+sup+')']) self.finish(cont=True) def numericInput(self,numx,numy,numz): @@ -1326,8 +1363,16 @@ class Text(Creator): def createObject(self): "creates an object in the current doc" - self.commit(translate("draft","Create Text"), - partial(Draft.makeText,self.text,self.node[0])) + tx = '' + for l in self.text: + if tx: + tx += ',' + tx += '"'+l+'"' +# self.commit(translate("draft","Create Text"), +# ['import Draft', +# 'Draft.makeText(['+tx+'],'+DraftVecUtils.toString(self.node[0])+')']) + self.commit(translate("draft","Create Text"),partial(Draft.makeText,self.text,self.node[0])) + self.finish(cont=True) def action(self,arg): @@ -1429,9 +1474,9 @@ class Dimension(Creator): pt = o.ViewObject.RootNode.getChildren()[1].getChildren()[0].getChildren()[0].getChildren()[3] p3 = Vector(pt.point.getValues()[2].getValue()) self.commit(translate("draft","Create Dimension"), - partial(Draft.makeDimension,p1,p2,p3)) - self.commit(translate("draft","Delete Measurement"), - partial(FreeCAD.ActiveDocument.removeObject,o.Name)) + ['import Draft', + 'Draft.makeDimension('+DraftVecUtils.toString(p1)+','+DraftVecUtils.toString(p2)+','+DraftVecUtils.toString(p3)+')', + 'FreeCAD.ActiveDocument.removeObject("'+o.Name+'")']) def createObject(self): "creates an object in the current doc" @@ -1449,8 +1494,8 @@ class Dimension(Creator): self.arcmode,self.node[2])) else: self.commit(translate("draft","Create Dimension"), - partial(Draft.makeDimension,self.node[0],self.node[1], - self.node[2])) + ['import Draft', + 'Draft.makeDimension('+DraftVecUtils.toString(self.node[0])+','+DraftVecUtils.toString(self.node[1])+','+DraftVecUtils.toString(self.node[2])+')']) if self.ui.continueMode: self.cont = self.node[2] if not self.dir: @@ -1712,7 +1757,7 @@ class Modifier: self.commitList = [] def commit(self,name,func): - "stores partial actions to be committed to the FreeCAD document" + "stores actions to be committed to the FreeCAD document" # print "committing" self.commitList.append((name,func)) @@ -1768,10 +1813,20 @@ class Move(Modifier): def move(self,delta,copy=False): "moving the real shapes" + sel = '[' + for o in self.sel: + if len(sel) > 1: + sel += ',' + sel += 'FreeCAD.ActiveDocument.'+o.Name + sel += ']' if copy: - self.commit(translate("draft","Copy"),partial(Draft.move,self.sel,delta,copy)) + self.commit(translate("draft","Copy"), + ['import Draft', + 'Draft.move('+sel+','+DraftVecUtils.toString(delta)+',copy='+str(copy)+')']) else: - self.commit(translate("draft","Move"),partial(Draft.move,self.sel,delta,copy)) + self.commit(translate("draft","Move"), + ['import Draft', + 'Draft.move('+sel+','+DraftVecUtils.toString(delta)+',copy='+str(copy)+')']) self.doc.recompute() def action(self,arg): @@ -1926,14 +1981,20 @@ class Rotate(Modifier): def rot (self,angle,copy=False): "rotating the real shapes" + sel = '[' + for o in self.sel: + if len(sel) > 1: + sel += ',' + sel += 'FreeCAD.ActiveDocument.'+o.Name + sel += ']' if copy: self.commit(translate("draft","Copy"), - partial(Draft.rotate,self.sel, - math.degrees(angle),self.center,plane.axis,copy)) + ['import Draft', + 'Draft.rotate('+sel+','+str(math.degrees(angle))+','+DraftVecUtils.toString(self.center)+',axis='+DraftVecUtils.toString(plane.axis)+',copy='+str(copy)+')']) else: self.commit(translate("draft","Rotate"), - partial(Draft.rotate,self.sel, - math.degrees(angle),self.center,plane.axis,copy)) + ['import Draft', + 'Draft.rotate('+sel+','+str(math.degrees(angle))+','+DraftVecUtils.toString(self.center)+',axis='+DraftVecUtils.toString(plane.axis)+',copy='+str(copy)+')']) def action(self,arg): "scene event handler" @@ -2194,13 +2255,18 @@ class Offset(Modifier): occmode = self.ui.occOffset.isChecked() if hasMod(arg,MODALT) or self.ui.isCopy.isChecked(): copymode = True if self.npts: + print "offset:npts=",self.npts self.commit(translate("draft","Offset"), - partial(Draft.offset,self.sel, - self.npts,copymode,occ=False)) + ['import Draft', + 'Draft.offset(FreeCAD.ActiveDocument.'+self.sel.Name+','+DraftVecUtils.toString(self.ntps)+',copy='+str(copymode)+')']) elif self.dvec: + if isinstance(self.dvec,float): + d = str(self.dvec) + else: + d = DraftVecUtils.toString(self.dvec) self.commit(translate("draft","Offset"), - partial(Draft.offset,self.sel, - self.dvec,copymode,occ=occmode)) + ['import Draft', + 'Draft.offset(FreeCAD.ActiveDocument.'+self.sel.Name+','+d+',copy='+str(copymode)+',occ='+str(occmode)+')']) if hasMod(arg,MODALT): self.extendedCopy = True else: @@ -2222,9 +2288,13 @@ class Offset(Modifier): copymode = False occmode = self.ui.occOffset.isChecked() if self.ui.isCopy.isChecked(): copymode = True + if isinstance(self.dvec,float): + d = str(self.dvec) + else: + d = DraftVecUtils.toString(self.dvec) self.commit(translate("draft","Offset"), - partial(Draft.offset,self.sel, - self.dvec,copymode,occ=occmode)) + ['import Draft', + 'Draft.offset(FreeCAD.ActiveDocument.'+self.sel.Name+','+d+',copy='+str(copymode)+',occ='+str(occmode)+')']) self.finish() @@ -2946,12 +3016,20 @@ class Scale(Modifier): def scale(self,delta,copy=False): "moving the real shapes" + sel = '[' + for o in self.sel: + if len(sel) > 1: + sel += ',' + sel += 'FreeCAD.ActiveDocument.'+o.Name + sel += ']' if copy: self.commit(translate("draft","Copy"), - partial(Draft.scale,self.sel,delta,self.node[0],copy)) + ['import Draft', + 'Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+')']) else: self.commit(translate("draft","Scale"), - partial(Draft.scale,self.sel,delta,self.node[0],copy)) + ['import Draft', + 'Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+')']) def action(self,arg): "scene event handler" diff --git a/src/Mod/Draft/DraftVecUtils.py b/src/Mod/Draft/DraftVecUtils.py index 1f10a2c7e..678965e85 100644 --- a/src/Mod/Draft/DraftVecUtils.py +++ b/src/Mod/Draft/DraftVecUtils.py @@ -40,6 +40,10 @@ def typecheck (args_and_types, name="?"): FreeCAD.Console.PrintWarning("typecheck[" + str(name) + "]: " + str(v) + " is not " + str(t) + "\n") raise TypeError("fcvec." + str(name)) +def toString(u): + "returns a string containing a python command to recreate this vector" + return "FreeCAD.Vector("+str(u.x)+","+str(u.y)+","+str(u.z)+")" + def tup(u,array=False): "returns a tuple (x,y,z) with the vector coords, or an array if array=true" typecheck ([(u,Vector)], "tup"); From f82fb927bc1b44fb52a5bfef23984c8529fd4a40 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 30 May 2012 12:58:08 -0300 Subject: [PATCH 264/517] Draft: fixes in commands --- src/Mod/Draft/DraftTools.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 93fb74fcc..9135588a7 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -1363,15 +1363,15 @@ class Text(Creator): def createObject(self): "creates an object in the current doc" - tx = '' + tx = '[' for l in self.text: - if tx: + if len(tx) > 1: tx += ',' - tx += '"'+l+'"' -# self.commit(translate("draft","Create Text"), -# ['import Draft', -# 'Draft.makeText(['+tx+'],'+DraftVecUtils.toString(self.node[0])+')']) - self.commit(translate("draft","Create Text"),partial(Draft.makeText,self.text,self.node[0])) + tx += '"'+str(l)+'"' + tx += ']' + self.commit(translate("draft","Create Text"), + ['import Draft', + 'Draft.makeText('+tx+',point='+DraftVecUtils.toString(self.node[0])+')']) self.finish(cont=True) @@ -1911,19 +1911,21 @@ class ApplyStyle(Modifier): if self.ui: self.sel = Draft.getSelection() if (len(self.sel)>0): + c = ['import Draft'] for ob in self.sel: if (ob.Type == "App::DocumentObjectGroup"): - self.formatGroup(ob) + c.extend(self.formatGroup(ob)) else: - self.commit(translate("draft","Change Style"),partial(Draft.formatObject,ob)) + c.append('Draft.formatObject(FreeCAD.ActiveDocument.'+ob.Name+')') + self.commit(translate("draft","Change Style"),c) def formatGroup(self,grpob): + c=[] for ob in grpob.Group: if (ob.Type == "App::DocumentObjectGroup"): - self.formatGroup(ob) + c.extend(self.formatGroup(ob)) else: - self.commit(translate("draft","Change Style"),partial(Draft.formatObject,ob)) - + c.append('Draft.formatObject(FreeCAD.ActiveDocument.'+ob.Name+')') class Rotate(Modifier): "The Draft_Rotate FreeCAD command definition" From 7defe80054a1f71c1a0630299e0461d6dfbafa1e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 30 May 2012 19:40:23 -0300 Subject: [PATCH 265/517] Draft: finished the switch to Gui.doCommand() --- src/Mod/Draft/DraftTools.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 9135588a7..b37e07c00 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -30,7 +30,6 @@ __url__ = "http://free-cad.sourceforge.net" #--------------------------------------------------------------------------- import os, FreeCAD, FreeCADGui, WorkingPlane, math, re, importSVG, Draft, Draft_rc, DraftVecUtils -from functools import partial from FreeCAD import Vector from DraftGui import todo,QtCore,QtGui from DraftSnap import * @@ -1482,16 +1481,16 @@ class Dimension(Creator): "creates an object in the current doc" if self.angledata: self.commit(translate("draft","Create Dimension"), - partial(Draft.makeAngularDimension,self.center, - self.angledata,self.node[-1])) + ['import Draft', + 'Draft.makeAngularDimension(center='+DraftVecUtils.toString(self.center)+',angles=['+str(self.angledata[0])+','+str(self.angledata[1])+'],p3='+DraftVecUtils.toString(self.node[-1])+')']) elif self.link and (not self.arcmode): self.commit(translate("draft","Create Dimension"), - partial(Draft.makeDimension,self.link[0],self.link[1], - self.link[2],self.node[2])) + ['import Draft', + 'Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')']) elif self.arcmode: self.commit(translate("draft","Create Dimension"), - partial(Draft.makeDimension,self.link[0],self.link[1], - self.arcmode,self.node[2])) + ['import Draft', + 'Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+',"'+str(self.arcmode)+'",'+DraftVecUtils.toString(self.node[2])+')']) else: self.commit(translate("draft","Create Dimension"), ['import Draft', From 539cad092a533efd067081b19178bc4448b38a7a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 30 May 2012 21:34:51 -0300 Subject: [PATCH 266/517] Arch: Wall tool is now translatable + uses Gui.doCommand --- src/Mod/Arch/ArchWall.py | 48 ++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index c26125136..4b9db7ee0 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -24,12 +24,13 @@ import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Wall" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeWall(baseobj=None,width=None,height=None,align="Center",name="Wall"): +def makeWall(baseobj=None,width=None,height=None,align="Center",name=str(translate("Arch","Wall"))): '''makeWall(obj,[width],[height],[align],[name]): creates a wall based on the given object, which can be a sketch, a draft object, a face or a solid. align can be "Center","Left" or "Right"''' @@ -117,10 +118,12 @@ class _CommandWall: if sel: import Draft if Draft.getType(sel[0]) != "Wall": - FreeCAD.ActiveDocument.openTransaction("Wall") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Wall"))) + FreeCADGui.doCommand('import Arch') for obj in sel: - makeWall(obj) + FreeCADGui.doCommand('Arch.makeWall(FreeCAD.ActiveDocument.'+obj.Name+')') FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() done = True if not done: import DraftTrackers @@ -146,32 +149,33 @@ class _CommandWall: add = False l = Part.Line(self.points[0],self.points[1]) self.tracker.finalize() - FreeCAD.ActiveDocument.openTransaction("Wall") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Wall"))) + FreeCADGui.doCommand('import Arch') + FreeCADGui.doCommand('import Part') + FreeCADGui.doCommand('trace=Part.Line(FreeCAD.'+str(l.StartPoint)+',FreeCAD.'+str(l.EndPoint)+')') if not self.existing: self.addDefault(l) else: w = joinWalls(self.existing) if w: if areSameWallTypes([w,self]): - w.Base.addGeometry(l) + FreeCADGui.doCommand('FreeCAD.ActiveDocument.'+w.Name+'.Base.addGeometry(trace)') else: - nw = self.addDefault(l) + self.addDefault(l) add = True else: self.addDefault(l) + if add: + FreeCADGui.doCommand('Arch.addComponents(FreeCAD.ActiveDocument.'+FreeCAD.ActiveDocument.Objects[-1].Name+',FreeCAD.ActiveDocument.'+w.Name+')') FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() - if add: - import ArchCommands - ArchCommands.addComponents(nw,w) if self.continueCmd: self.Activated() def addDefault(self,l): - s = FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject","WallTrace") - s.addGeometry(l) - w = makeWall(s,width=self.Width,height=self.Height,align=self.Align) - return w + FreeCADGui.doCommand('base=FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject","'+str(translate('Arch','WallTrace'))+'")') + FreeCADGui.doCommand('base.addGeometry(trace)') + FreeCADGui.doCommand('Arch.makeWall(base,width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")') def update(self,point): "this function is called by the Snapper when the mouse is moved" @@ -191,11 +195,11 @@ class _CommandWall: def taskbox(self): "sets up a taskbox widget" w = QtGui.QWidget() - w.setWindowTitle("Wall options") + w.setWindowTitle(str(translate("Arch","Wall options"))) lay0 = QtGui.QVBoxLayout(w) lay1 = QtGui.QHBoxLayout() lay0.addLayout(lay1) - label1 = QtGui.QLabel("Width") + label1 = QtGui.QLabel(str(translate("Arch","Width"))) lay1.addWidget(label1) value1 = QtGui.QDoubleSpinBox() value1.setDecimals(2) @@ -203,7 +207,7 @@ class _CommandWall: lay1.addWidget(value1) lay2 = QtGui.QHBoxLayout() lay0.addLayout(lay2) - label2 = QtGui.QLabel("Height") + label2 = QtGui.QLabel(str(translate("Arch","Height"))) lay2.addWidget(label2) value2 = QtGui.QDoubleSpinBox() value2.setDecimals(2) @@ -211,14 +215,14 @@ class _CommandWall: lay2.addWidget(value2) lay3 = QtGui.QHBoxLayout() lay0.addLayout(lay3) - label3 = QtGui.QLabel("Alignment") + label3 = QtGui.QLabel(str(translate("Arch","Alignment"))) lay3.addWidget(label3) value3 = QtGui.QComboBox() items = ["Center","Left","Right"] value3.addItems(items) value3.setCurrentIndex(items.index(self.Align)) lay3.addWidget(value3) - value4 = QtGui.QCheckBox("Continue") + value4 = QtGui.QCheckBox(str(translate("Arch","Continue"))) lay0.addWidget(value4) QtCore.QObject.connect(value1,QtCore.SIGNAL("valueChanged(double)"),self.setWidth) QtCore.QObject.connect(value2,QtCore.SIGNAL("valueChanged(double)"),self.setHeight) @@ -245,13 +249,13 @@ class _Wall(ArchComponent.Component): def __init__(self,obj): ArchComponent.Component.__init__(self,obj) obj.addProperty("App::PropertyLength","Width","Base", - "The width of this wall. Not used if this wall is based on a face") + str(translate("Arch","The width of this wall. Not used if this wall is based on a face"))) obj.addProperty("App::PropertyLength","Height","Base", - "The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid") + str(translate("Arch","The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid"))) obj.addProperty("App::PropertyEnumeration","Align","Base", - "The alignment of this wall on its base object, if applicable") + str(translate("Arch","The alignment of this wall on its base object, if applicable"))) obj.addProperty("App::PropertyVector","Normal","Base", - "The normal extrusion direction of this object (keep (0,0,0) for automatic normal)") + str(translate("Arch","The normal extrusion direction of this object (keep (0,0,0) for automatic normal)"))) obj.Align = ['Left','Right','Center'] self.Type = "Wall" obj.Width = 0.1 From 2a3ff10d84bd358f9b42126d544c71fbf5c257fb Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 31 May 2012 12:30:20 -0300 Subject: [PATCH 267/517] Arch: Adapted all other tools to doCommand() + translatable --- src/Mod/Arch/ArchAxis.py | 18 ++++---- src/Mod/Arch/ArchBuilding.py | 24 +++++++--- src/Mod/Arch/ArchCommands.py | 34 ++++++++++++--- src/Mod/Arch/ArchFloor.py | 27 ++++++++---- src/Mod/Arch/ArchRoof.py | 26 ++++++----- src/Mod/Arch/ArchSectionPlane.py | 75 +++++++++++++++++++++----------- src/Mod/Arch/ArchSite.py | 21 +++++++-- src/Mod/Arch/ArchStructure.py | 24 +++++----- src/Mod/Arch/ArchWindow.py | 10 +++-- 9 files changed, 173 insertions(+), 86 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index 37cdf9f54..d165e69ea 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -25,12 +25,13 @@ import FreeCAD,FreeCADGui,Draft,math,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore, QtGui from pivy import coin +from DraftTools import translate __title__="FreeCAD Axis System" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeAxis(num=0,size=0,name="Axes"): +def makeAxis(num=5,size=1,name=str(translate("Arch","Axes"))): '''makeAxis(num,size): makes an Axis System based on the given number of axes and interval distances''' obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name) @@ -56,16 +57,17 @@ class _CommandAxis: 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Axis","Creates an axis system.")} def Activated(self): - FreeCAD.ActiveDocument.openTransaction("Axis") - makeAxis(5,1) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Axis"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeAxis()") FreeCAD.ActiveDocument.commitTransaction() class _Axis: "The Axis object" def __init__(self,obj): - obj.addProperty("App::PropertyFloatList","Distances","Base", "The intervals between axes") - obj.addProperty("App::PropertyFloatList","Angles","Base", "The angles of each axis") - obj.addProperty("App::PropertyFloat","Length","Base", "The length of the axes") + obj.addProperty("App::PropertyFloatList","Distances","Base", str(translate("Arch","The intervals between axes"))) + obj.addProperty("App::PropertyFloatList","Angles","Base", str(translate("Arch","The angles of each axis"))) + obj.addProperty("App::PropertyFloat","Length","Base", str(translate("Arch","The length of the axes"))) self.Type = "Axis" obj.Length=1.0 obj.Proxy = self @@ -98,8 +100,8 @@ class _ViewProviderAxis: "A View Provider for the Axis object" def __init__(self,vobj): - vobj.addProperty("App::PropertyLength","BubbleSize","Base", "The size of the axis bubbles") - vobj.addProperty("App::PropertyEnumeration","NumerationStyle","Base", "The numeration style") + vobj.addProperty("App::PropertyLength","BubbleSize","Base", str(translate("Arch","The size of the axis bubbles"))) + vobj.addProperty("App::PropertyEnumeration","NumerationStyle","Base", str(translate("Arch","The numeration style"))) vobj.NumerationStyle = ["1,2,3","01,02,03","001,002,003","A,B,C","a,b,c","I,II,III","L0,L1,L2"] vobj.Proxy = self vobj.BubbleSize = .1 diff --git a/src/Mod/Arch/ArchBuilding.py b/src/Mod/Arch/ArchBuilding.py index f8ed4e8ca..4b0011b34 100644 --- a/src/Mod/Arch/ArchBuilding.py +++ b/src/Mod/Arch/ArchBuilding.py @@ -23,12 +23,13 @@ import FreeCAD,FreeCADGui,Draft,ArchCommands from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Building" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeBuilding(objectslist=None,join=False,name="Building"): +def makeBuilding(objectslist=None,join=False,name=str(translate("Arch","Building"))): '''makeBuilding(objectslist,[joinmode]): creates a building including the objects from the given list. If joinmode is True, components will be joined.''' obj = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroupPython",name) @@ -51,15 +52,24 @@ class _CommandBuilding: ok = False if (len(sel) == 1): if Draft.getType(sel[0]) in ["Cell","Site","Floor"]: - FreeCAD.ActiveDocument.openTransaction("Type conversion") - nobj = makeBuilding() - ArchCommands.copyProperties(sel[0],nobj) - FreeCAD.ActiveDocument.removeObject(sel[0].Name) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Type conversion"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("obj = Arch.makeBuilding()") + FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") + FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: - FreeCAD.ActiveDocument.openTransaction("Building") - makeBuilding(sel) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch"," Create Building"))) + ss = "[" + for o in sel: + if len(ss) > 1: + ss += "," + ss += "FreeCAD.ActiveDocument."+o.Name + ss += "]" + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Floor"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeBuilding("+ss+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 2ebfad0d0..2025a6f30 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -24,6 +24,7 @@ import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Arch Commands" __author__ = "Yorik van Havre" @@ -341,11 +342,20 @@ class _CommandAdd: def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Grouping") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Grouping"))) if not mergeCells(sel): host = sel.pop() - addComponents(sel,host) + ss = "[" + for o in sel: + if len(ss) > 1: + ss += "," + ss += "FreeCAD.ActiveDocument."+o.Name + ss += "]" + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.addComponents("+ss+",FreeCAD.ActiveDocument."+host.Name+")") FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + class _CommandRemove: "the Arch Add command definition" @@ -362,13 +372,22 @@ class _CommandRemove: def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Ungrouping") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Ungrouping"))) if Draft.getType(sel[-1]) in ["Wall","Structure"]: host = sel.pop() - removeComponents(sel,host) + ss = "[" + for o in sel: + if len(ss) > 1: + ss += "," + ss += "FreeCAD.ActiveDocument."+o.Name + ss += "]" + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.removeComponents("+ss+",FreeCAD.ActiveDocument."+host.Name+")") else: - removeComponents(sel) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.removeComponents("+ss+")") FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() class _CommandSplitMesh: @@ -387,7 +406,7 @@ class _CommandSplitMesh: def Activated(self): if FreeCADGui.Selection.getSelection(): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Split Mesh") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Split Mesh"))) for obj in sel: n = obj.Name nobjs = splitMesh(obj) @@ -396,6 +415,7 @@ class _CommandSplitMesh: for o in nobjs: g.addObject(o) FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() class _CommandMeshToShape: @@ -424,7 +444,7 @@ class _CommandMeshToShape: if f.InList: if f.InList[0].isDerivedFrom("App::DocumentObjectGroup"): g = f.InList[0] - FreeCAD.ActiveDocument.openTransaction("Mesh to Shape") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Mesh to Shape"))) for obj in FreeCADGui.Selection.getSelection(): newobj = meshToShape(obj) if g and newobj: diff --git a/src/Mod/Arch/ArchFloor.py b/src/Mod/Arch/ArchFloor.py index 606395961..922d8aca0 100644 --- a/src/Mod/Arch/ArchFloor.py +++ b/src/Mod/Arch/ArchFloor.py @@ -23,12 +23,13 @@ import FreeCAD,FreeCADGui,Draft,ArchCommands from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Arch Floor" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeFloor(objectslist=None,join=True,name="Floor"): +def makeFloor(objectslist=None,join=True,name=str(translate("Arch","Floor"))): '''makeFloor(objectslist,[joinmode]): creates a floor including the objects from the given list. If joinmode is False, components will not be joined.''' @@ -52,23 +53,31 @@ class _CommandFloor: ok = False if (len(sel) == 1): if Draft.getType(sel[0]) in ["Cell","Site","Building"]: - FreeCAD.ActiveDocument.openTransaction("Type conversion") - nobj = makeFloor() - ArchCommands.copyProperties(sel[0],nobj) - FreeCAD.ActiveDocument.removeObject(sel[0].Name) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Type conversion"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("obj = Arch.makeFloor()") + FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") + FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: - FreeCAD.ActiveDocument.openTransaction("Floor") - makeFloor(sel) + ss = "[" + for o in sel: + if len(ss) > 1: + ss += "," + ss += "FreeCAD.ActiveDocument."+o.Name + ss += "]" + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Floor"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeFloor("+ss+")") FreeCAD.ActiveDocument.commitTransaction() - FreeCAD.ActiveDocument.recompute() + FreeCAD.ActiveDocument.recompute() class _Floor: "The Cell object" def __init__(self,obj): obj.addProperty("App::PropertyLength","Height","Base", - "The height of this floor") + str(translate("Arch","The height of this floor"))) self.Type = "Floor" obj.Proxy = self self.Object = obj diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 31515afbc..4c8d6964c 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -24,12 +24,13 @@ import FreeCAD,FreeCADGui,Draft,ArchComponent, DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Roof" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeRoof(baseobj,facenr=1,angle=45,name="Roof"): +def makeRoof(baseobj,facenr=1,angle=45,name=str(translate("Arch","Roof"))): '''makeRoof(baseobj,[facenr],[angle],[name]) : Makes a roof based on a face from an existing object. You can provide the number of the face to build the roof on (default = 1), the angle (default=45) and a name (default @@ -64,35 +65,38 @@ class _CommandRoof: if sel.HasSubObjects: if "Face" in sel.SubElementNames[0]: idx = int(sel.SubElementNames[0][4:]) - FreeCAD.ActiveDocument.openTransaction("Create Roof") - makeRoof(obj,idx) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Roof"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+","+str(idx)+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() elif obj.isDerivedFrom("Part::Feature"): if len(obj.Shape.Faces) == 1: - FreeCAD.ActiveDocument.openTransaction("Create Roof") - makeRoof(obj,1) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Roof"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+",1)") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() elif obj.isDerivedFrom("Part::Feature"): if len(obj.Shape.Faces) == 1: - FreeCAD.ActiveDocument.openTransaction("Create Roof") - makeRoof(obj,1) + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Roof"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+",1)") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() else: - FreeCAD.Console.PrintMessage("Unable to create a roof") + FreeCAD.Console.PrintMessage(str(translate("Arch","Unable to create a roof"))) else: - FreeCAD.Console.PrintMessage("No object selected") + FreeCAD.Console.PrintMessage(str(translate("Arch","No object selected"))) class _Roof(ArchComponent.Component): "The Roof object" def __init__(self,obj): ArchComponent.Component.__init__(self,obj) obj.addProperty("App::PropertyAngle","Angle","Base", - "The angle of this roof") + str(translate("Arch","The angle of this roof"))) obj.addProperty("App::PropertyInteger","Face","Base", - "The face number of the base object used to build this roof") + str(translate("Arch","The face number of the base object used to build this roof"))) self.Type = "Structure" def execute(self,obj): diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index e1230e59f..8f695d708 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -25,7 +25,45 @@ import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,math,Draft,ArchCommands, Dr from FreeCAD import Vector from PyQt4 import QtCore from pivy import coin +from DraftTools import translate +def makeSectionPlane(objectslist=None): + """makeSectionPlane([objectslist]) : Creates a Section plane objects including the + given objects. If no object is given, the whole document will be considered.""" + obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Section") + _SectionPlane(obj) + _ViewProviderSectionPlane(obj.ViewObject) + if objectslist: + g = [] + for o in objectslist: + if o.isDerivedFrom("Part::Feature"): + g.append(o) + elif o.isDerivedFrom("App::DocumentObjectGroup"): + g.append(o) + obj.Objects = g + +def makeSectionView(section): + """makeSectionView(section) : Creates a Drawing view of the given Section Plane + in the active Page object (a new page will be created if none exists""" + page = None + for o in FreeCAD.ActiveDocument.Objects: + if o.isDerivedFrom("Drawing::FeaturePage"): + page = o + break + if not page: + page = FreeCAD.ActiveDocument.addObject("Drawing::FeaturePage",str(translate("Arch","Page"))) + template = Draft.getParam("template") + if not template: + template = FreeCAD.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg' + page.ViewObject.HintOffsetX = 200 + page.ViewObject.HintOffsetY = 100 + page.ViewObject.HintScale = 20 + page.Template = template + + view = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View") + page.addObject(view) + _ArchDrawingView(view) + view.Source = section class _CommandSectionPlane: "the Arch SectionPlane command definition" @@ -37,30 +75,17 @@ class _CommandSectionPlane: def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Section Plane") - obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Section") - _SectionPlane(obj) - _ViewProviderSectionPlane(obj.ViewObject) - FreeCAD.ActiveDocument.commitTransaction() - g = [] + ss = "[" for o in sel: - if o.isDerivedFrom("Part::Feature"): - g.append(o) - elif o.isDerivedFrom("App::DocumentObjectGroup"): - g.append(o) - obj.Objects = g - page = FreeCAD.ActiveDocument.addObject("Drawing::FeaturePage","Page") - template = Draft.getParam("template") - if not template: - template = FreeCAD.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg' - page.ViewObject.HintOffsetX = 200 - page.ViewObject.HintOffsetY = 100 - page.ViewObject.HintScale = 20 - page.Template = template - view = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View") - page.addObject(view) - _ArchDrawingView(view) - view.Source = obj + if len(ss) > 1: + ss += "," + ss += "FreeCAD.ActiveDocument."+o.Name + ss += "]" + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Section Plane"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("section = Arch.makeSectionPlane("+ss+")") + FreeCADGui.doCommand("Arch.makeSectionView(section)") + FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() class _SectionPlane: @@ -68,7 +93,7 @@ class _SectionPlane: def __init__(self,obj): obj.Proxy = self obj.addProperty("App::PropertyLinkList","Objects","Base", - "The objects that must be considered by this section plane. Empty means all document") + str(translate("Arch","The objects that must be considered by this section plane. Empty means all document"))) self.Type = "SectionPlane" def execute(self,obj): @@ -89,7 +114,7 @@ class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent): "A View Provider for Section Planes" def __init__(self,vobj): vobj.addProperty("App::PropertyLength","DisplaySize","Base", - "The display size of the section plane") + str(translate("Arch","The display size of this section plane"))) vobj.DisplaySize = 1 vobj.Transparency = 85 vobj.LineWidth = 1 diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index 300fd09ef..d05a7e8ff 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -23,12 +23,13 @@ import FreeCAD,FreeCADGui,Draft,ArchCommands from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Site" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeSite(objectslist=None,name="Site"): +def makeSite(objectslist=None,name=str(translate("Arch","Site"))): '''makeBuilding(objectslist): creates a site including the objects from the given list.''' obj = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroupPython",name) @@ -51,15 +52,27 @@ class _CommandSite: ok = False if (len(sel) == 1): if Draft.getType(sel[0]) in ["Cell","Building","Floor"]: - FreeCAD.ActiveDocument.openTransaction("Type conversion") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Type conversion"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("obj = Arch.makeSite()") + FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") + FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + nobj = makeSite() ArchCommands.copyProperties(sel[0],nobj) FreeCAD.ActiveDocument.removeObject(sel[0].Name) FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: - FreeCAD.ActiveDocument.openTransaction("Site") - makeSite(sel) + ss = "[" + for o in sel: + if len(ss) > 1: + ss += "," + ss += "FreeCAD.ActiveDocument."+o.Name + ss += "]" + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Site"))) + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.makeSite("+ss+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 2327ad7ca..7bf73cc1e 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -24,12 +24,13 @@ import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore +from DraftTools import translate __title__="FreeCAD Structure" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeStructure(baseobj=None,length=None,width=None,height=None,name="Structure"): +def makeStructure(baseobj=None,length=None,width=None,height=None,name=str(translate("Arch","Structure"))): '''makeStructure([obj],[length],[width],[heigth],[swap]): creates a structure element based on the given profile object and the given extrusion height. If no base object is given, you can also specify @@ -64,29 +65,31 @@ class _CommandStructure: 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Structure","Creates a structure object from scratch or from a selected object (sketch, wire, face or solid)")} def Activated(self): + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Structure"))) + FreeCADGui.doCommand("import Arch") sel = FreeCADGui.Selection.getSelection() if sel: - FreeCAD.ActiveDocument.openTransaction("Structure") for obj in sel: - makeStructure(obj) - FreeCAD.ActiveDocument.commitTransaction() + FreeCADGui.doCommand("Arch.makeStructure(FreeCAD.ActiveDocument."+obj.Name+")") else: - makeStructure() + FreeCADGui.doCommand("Arch.makeStructure()") + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() class _Structure(ArchComponent.Component): "The Structure object" def __init__(self,obj): ArchComponent.Component.__init__(self,obj) obj.addProperty("App::PropertyLength","Length","Base", - "The length of this element, if not based on a profile") + str(translate("Arch","The length of this element, if not based on a profile"))) obj.addProperty("App::PropertyLength","Width","Base", - "The width of this element, if not based on a profile") + str(translate("Arch","The width of this element, if not based on a profile"))) obj.addProperty("App::PropertyLength","Height","Base", - "The height or extrusion depth of this element. Keep 0 for automatic") + str(translate("Arch","The height or extrusion depth of this element. Keep 0 for automatic"))) obj.addProperty("App::PropertyLinkList","Axes","Base", - "Axes systems this structure is built on") + str(translate("Arch","Axes systems this structure is built on"))) obj.addProperty("App::PropertyVector","Normal","Base", - "The normal extrusion direction of this object (keep (0,0,0) for automatic normal)") + str(translate("Arch","The normal extrusion direction of this object (keep (0,0,0) for automatic normal)"))) self.Type = "Structure" def execute(self,obj): @@ -167,7 +170,6 @@ class _Structure(ArchComponent.Component): if hasattr(hole,"Proxy"): if hasattr(hole.Proxy,"Subvolume"): if hole.Proxy.Subvolume: - print "cutting subvolume",hole.Proxy.Subvolume base = base.cut(hole.Proxy.Subvolume) cut = True if not cut: diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 35813ddfc..40b038aed 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -24,12 +24,13 @@ import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore,QtGui +from DraftTools import translate __title__="FreeCAD Wall" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeWindow(baseobj=None,width=None,name="Window"): +def makeWindow(baseobj=None,width=None,name=str(translate("Arch","Window"))): '''makeWindow(obj,[name]): creates a window based on the given object''' if baseobj: @@ -87,9 +88,10 @@ class _CommandWindow: def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction("Create Window") + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Window"))) + FreeCADGui.doCommand("import Arch") for obj in sel: - makeWindow(obj) + FreeCADGui.doCommand("Arch.makeWindow(FreeCAD.ActiveDocument."+obj.Name+")") FreeCAD.ActiveDocument.commitTransaction() class _Window(ArchComponent.Component): @@ -97,7 +99,7 @@ class _Window(ArchComponent.Component): def __init__(self,obj): ArchComponent.Component.__init__(self,obj) obj.addProperty("App::PropertyStringList","WindowParts","Base", - "the components of this window") + str(translate("Arch","the components of this window"))) self.Type = "Window" def execute(self,obj): From 8c3f97c98e73c8e3dda7ed13270d0cc7a5a2cdb7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 30 May 2012 15:18:37 +0200 Subject: [PATCH 268/517] Keep faces colors on boolean operations --- src/Mod/Part/App/FeaturePartBoolean.cpp | 18 ++++- src/Mod/Part/App/FeaturePartBoolean.h | 8 ++- src/Mod/Part/App/FeaturePartCommon.cpp | 8 +-- src/Mod/Part/App/FeaturePartCommon.h | 2 +- src/Mod/Part/App/FeaturePartCut.cpp | 8 +-- src/Mod/Part/App/FeaturePartCut.h | 2 +- src/Mod/Part/App/FeaturePartFuse.cpp | 8 +-- src/Mod/Part/App/FeaturePartFuse.h | 2 +- src/Mod/Part/App/FeaturePartSection.cpp | 8 +-- src/Mod/Part/App/FeaturePartSection.h | 2 +- src/Mod/Part/Gui/ViewProviderBoolean.cpp | 84 ++++++++++++++++++++++++ src/Mod/Part/Gui/ViewProviderBoolean.h | 1 + 12 files changed, 119 insertions(+), 32 deletions(-) diff --git a/src/Mod/Part/App/FeaturePartBoolean.cpp b/src/Mod/Part/App/FeaturePartBoolean.cpp index f21296a8b..7418db97a 100644 --- a/src/Mod/Part/App/FeaturePartBoolean.cpp +++ b/src/Mod/Part/App/FeaturePartBoolean.cpp @@ -23,6 +23,8 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include +#include #endif #include "FeaturePartBoolean.h" @@ -33,7 +35,7 @@ using namespace Part; PROPERTY_SOURCE_ABSTRACT(Part::Boolean, Part::Feature) -Boolean::Boolean(void) +Boolean::Boolean(void) : myBoolOp(0) { ADD_PROPERTY(Base,(0)); ADD_PROPERTY(Tool,(0)); @@ -66,13 +68,23 @@ App::DocumentObjectExecReturn *Boolean::execute(void) TopoDS_Shape BaseShape = base->Shape.getValue(); TopoDS_Shape ToolShape = tool->Shape.getValue(); - TopoDS_Shape resShape = runOperation(BaseShape, ToolShape); - if (resShape.IsNull()) + std::auto_ptr mkBool(makeOperation(BaseShape, ToolShape)); + if (!mkBool->IsDone()) { + return new App::DocumentObjectExecReturn("Boolean operation failed"); + } + const TopoDS_Shape& resShape = mkBool->Shape(); + if (resShape.IsNull()) { return new App::DocumentObjectExecReturn("Resulting shape is invalid"); + } + + // tmp. set boolean operation pointer + this->myBoolOp = mkBool.get(); this->Shape.setValue(resShape); + this->myBoolOp = 0; return App::DocumentObject::StdReturn; } catch (...) { + this->myBoolOp = 0; return new App::DocumentObjectExecReturn("A fatal error occurred when running boolean operation"); } } diff --git a/src/Mod/Part/App/FeaturePartBoolean.h b/src/Mod/Part/App/FeaturePartBoolean.h index 742af5098..13305dffe 100644 --- a/src/Mod/Part/App/FeaturePartBoolean.h +++ b/src/Mod/Part/App/FeaturePartBoolean.h @@ -27,6 +27,8 @@ #include #include "PartFeature.h" +class BRepAlgoAPI_BooleanOperation; + namespace Part { @@ -51,9 +53,13 @@ public: const char* getViewProviderName(void) const { return "PartGui::ViewProviderBoolean"; } + BRepAlgoAPI_BooleanOperation* getBooleanOperation() const { return myBoolOp; } protected: - virtual TopoDS_Shape runOperation(const TopoDS_Shape&, const TopoDS_Shape&) const = 0; + virtual BRepAlgoAPI_BooleanOperation* makeOperation(const TopoDS_Shape&, const TopoDS_Shape&) const = 0; + +private: + BRepAlgoAPI_BooleanOperation* myBoolOp; }; } diff --git a/src/Mod/Part/App/FeaturePartCommon.cpp b/src/Mod/Part/App/FeaturePartCommon.cpp index 828512bc3..1835cdfc1 100644 --- a/src/Mod/Part/App/FeaturePartCommon.cpp +++ b/src/Mod/Part/App/FeaturePartCommon.cpp @@ -41,14 +41,10 @@ Common::Common(void) { } -TopoDS_Shape Common::runOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const +BRepAlgoAPI_BooleanOperation* Common::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const { // Let's call algorithm computing a section operation: - BRepAlgoAPI_Common mkCommon(base, tool); - // Let's check if the section has been successful - if (!mkCommon.IsDone()) - throw Base::Exception("Intersection failed"); - return mkCommon.Shape(); + return new BRepAlgoAPI_Common(base, tool); } // ---------------------------------------------------- diff --git a/src/Mod/Part/App/FeaturePartCommon.h b/src/Mod/Part/App/FeaturePartCommon.h index 295ec2e4f..19df8cdeb 100644 --- a/src/Mod/Part/App/FeaturePartCommon.h +++ b/src/Mod/Part/App/FeaturePartCommon.h @@ -41,7 +41,7 @@ public: //@{ /// recalculate the Feature protected: - TopoDS_Shape runOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; + BRepAlgoAPI_BooleanOperation* makeOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; //@} }; diff --git a/src/Mod/Part/App/FeaturePartCut.cpp b/src/Mod/Part/App/FeaturePartCut.cpp index 1d48c1783..6b6d792c5 100644 --- a/src/Mod/Part/App/FeaturePartCut.cpp +++ b/src/Mod/Part/App/FeaturePartCut.cpp @@ -40,12 +40,8 @@ Cut::Cut(void) { } -TopoDS_Shape Cut::runOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const +BRepAlgoAPI_BooleanOperation* Cut::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const { // Let's call algorithm computing a cut operation: - BRepAlgoAPI_Cut mkCut(base, tool); - // Let's check if the cut has been successful - if (!mkCut.IsDone()) - throw Base::Exception("Cut failed"); - return mkCut.Shape(); + return new BRepAlgoAPI_Cut(base, tool); } diff --git a/src/Mod/Part/App/FeaturePartCut.h b/src/Mod/Part/App/FeaturePartCut.h index 63b0de61a..11187781c 100644 --- a/src/Mod/Part/App/FeaturePartCut.h +++ b/src/Mod/Part/App/FeaturePartCut.h @@ -42,7 +42,7 @@ public: //@{ /// recalculate the Feature protected: - TopoDS_Shape runOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; + BRepAlgoAPI_BooleanOperation* makeOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; //@} }; diff --git a/src/Mod/Part/App/FeaturePartFuse.cpp b/src/Mod/Part/App/FeaturePartFuse.cpp index d0f4a0e97..ea25450fc 100644 --- a/src/Mod/Part/App/FeaturePartFuse.cpp +++ b/src/Mod/Part/App/FeaturePartFuse.cpp @@ -41,14 +41,10 @@ Fuse::Fuse(void) { } -TopoDS_Shape Fuse::runOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const +BRepAlgoAPI_BooleanOperation* Fuse::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const { // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Fuse mkFuse(base, tool); - // Let's check if the fusion has been successful - if (!mkFuse.IsDone()) - throw Base::Exception("Fusion failed"); - return mkFuse.Shape(); + return new BRepAlgoAPI_Fuse(base, tool); } // ---------------------------------------------------- diff --git a/src/Mod/Part/App/FeaturePartFuse.h b/src/Mod/Part/App/FeaturePartFuse.h index 251d7ec58..7e2e88d32 100644 --- a/src/Mod/Part/App/FeaturePartFuse.h +++ b/src/Mod/Part/App/FeaturePartFuse.h @@ -42,7 +42,7 @@ public: //@{ /// recalculate the Feature protected: - TopoDS_Shape runOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; + BRepAlgoAPI_BooleanOperation* makeOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; //@} }; diff --git a/src/Mod/Part/App/FeaturePartSection.cpp b/src/Mod/Part/App/FeaturePartSection.cpp index 6beb1eeef..55cd6da6e 100644 --- a/src/Mod/Part/App/FeaturePartSection.cpp +++ b/src/Mod/Part/App/FeaturePartSection.cpp @@ -39,12 +39,8 @@ Section::Section(void) { } -TopoDS_Shape Section::runOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const +BRepAlgoAPI_BooleanOperation* Section::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const { // Let's call algorithm computing a section operation: - BRepAlgoAPI_Section mkSection(base, tool); - // Let's check if the section has been successful - if (!mkSection.IsDone()) - throw Base::Exception("Section failed"); - return mkSection.Shape(); + return new BRepAlgoAPI_Section(base, tool); } diff --git a/src/Mod/Part/App/FeaturePartSection.h b/src/Mod/Part/App/FeaturePartSection.h index 911c2a5b7..69ec64c92 100644 --- a/src/Mod/Part/App/FeaturePartSection.h +++ b/src/Mod/Part/App/FeaturePartSection.h @@ -42,7 +42,7 @@ public: //@{ /// recalculate the Feature protected: - TopoDS_Shape runOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; + BRepAlgoAPI_BooleanOperation* makeOperation(const TopoDS_Shape&, const TopoDS_Shape&) const; //@} }; diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.cpp b/src/Mod/Part/Gui/ViewProviderBoolean.cpp index 5857b2ef7..d35cd0dde 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/Part/Gui/ViewProviderBoolean.cpp @@ -24,9 +24,15 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include +# include +# include +# include +# include #endif #include "ViewProviderBoolean.h" +#include #include #include #include @@ -71,6 +77,84 @@ QIcon ViewProviderBoolean::getIcon(void) const return ViewProviderPart::getIcon(); } +void findFaces(BRepAlgoAPI_BooleanOperation* mkBool, + const TopTools_IndexedMapOfShape& M1, + const TopTools_IndexedMapOfShape& M3, + const std::vector& colBase, + std::vector& colBool) +{ + for (int i=1; i<=M1.Extent(); i++) { + bool modified=false, generated=false; + TopTools_ListIteratorOfListOfShape it; + for (it.Initialize(mkBool->Modified(M1(i))); it.More(); it.Next()) { + modified = true; + for (int j=1; j<=M3.Extent(); j++) { + if (M3(j).IsPartner(it.Value())) { + colBool[j-1] = colBase[i-1]; + break; + } + } + } + + for (it.Initialize(mkBool->Generated(M1(i))); it.More(); it.Next()) { + generated = true; + for (int j=1; j<=M3.Extent(); j++) { + if (M3(j).IsPartner(it.Value())) { + colBool[j-1] = colBase[i-1]; + break; + } + } + } + + if (!modified && !generated && !mkBool->IsDeleted(M1(i))) { + for (int j=1; j<=M3.Extent(); j++) { + if (M3(j).IsPartner(M1(i))) { + colBool[j-1] = colBase[i-1]; + break; + } + } + } + } +} + +void ViewProviderBoolean::updateData(const App::Property* prop) +{ + PartGui::ViewProviderPart::updateData(prop); + if (prop->getTypeId() == Part::PropertyPartShape::getClassTypeId()) { + Part::Boolean* objBool = dynamic_cast(getObject()); + Part::Feature* objBase = dynamic_cast(objBool->Base.getValue()); + Part::Feature* objTool = dynamic_cast(objBool->Tool.getValue()); + + BRepAlgoAPI_BooleanOperation* mkBool = objBool->getBooleanOperation(); + if (mkBool && objBase && objTool) { + const TopoDS_Shape& baseShape = objBase->Shape.getValue(); + const TopoDS_Shape& toolShape = objTool->Shape.getValue(); + const TopoDS_Shape& boolShape = objBool->Shape.getValue(); + + TopTools_IndexedMapOfShape M1, M2, M3; + TopExp::MapShapes(baseShape, TopAbs_FACE, M1); + TopExp::MapShapes(toolShape, TopAbs_FACE, M2); + TopExp::MapShapes(boolShape, TopAbs_FACE, M3); + Gui::ViewProvider* vpBase = Gui::Application::Instance->getViewProvider(objBase); + Gui::ViewProvider* vpTool = Gui::Application::Instance->getViewProvider(objTool); + std::vector colBase = static_cast(vpBase)->DiffuseColor.getValues(); + std::vector colTool = static_cast(vpTool)->DiffuseColor.getValues(); + std::vector colBool; + colBool.resize(M3.Extent(), this->ShapeColor.getValue()); + bool applyColor=false; + if (colBase.size() == M1.Extent()) { + findFaces(mkBool, M1, M3, colBase, colBool); + applyColor = true; + } + if (colTool.size() == M2.Extent()) { + findFaces(mkBool, M2, M3, colTool, colBool); + applyColor = true; + } + if (applyColor) + this->DiffuseColor.setValues(colBool); + } + } +} PROPERTY_SOURCE(PartGui::ViewProviderMultiFuse,PartGui::ViewProviderPart) diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.h b/src/Mod/Part/Gui/ViewProviderBoolean.h index 0fb245bb4..0a34127b1 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.h +++ b/src/Mod/Part/Gui/ViewProviderBoolean.h @@ -42,6 +42,7 @@ public: /// grouping handling std::vector claimChildren(void) const; QIcon getIcon(void) const; + void updateData(const App::Property*); }; /// ViewProvider for the MultiFuse feature From 9e872e4987c491128688ad6371ecb31df75c6b96 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 30 May 2012 21:39:01 +0200 Subject: [PATCH 269/517] Keep faces colors on boolean operations --- src/Mod/Part/App/AppPart.cpp | 1 + src/Mod/Part/App/FeaturePartBoolean.cpp | 16 ++- src/Mod/Part/App/FeaturePartBoolean.h | 5 +- src/Mod/Part/App/FeaturePartCommon.cpp | 7 + src/Mod/Part/App/FeaturePartCommon.h | 1 + src/Mod/Part/App/FeaturePartFuse.cpp | 7 + src/Mod/Part/App/FeaturePartFuse.h | 1 + src/Mod/Part/App/PartFeature.cpp | 55 ++++++++ src/Mod/Part/App/PartFeature.h | 6 +- src/Mod/Part/App/PropertyTopoShape.cpp | 66 +++++++++ src/Mod/Part/App/PropertyTopoShape.h | 62 +++++++- src/Mod/Part/Gui/ViewProviderBoolean.cpp | 171 ++++++++++++++++------- src/Mod/Part/Gui/ViewProviderBoolean.h | 2 + 13 files changed, 334 insertions(+), 66 deletions(-) diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 875f04cd4..716597e2b 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -134,6 +134,7 @@ void PartExport initPart() Part::TopoShape ::init(); Part::PropertyPartShape ::init(); Part::PropertyGeometryList ::init(); + Part::PropertyShapeHistory ::init(); Part::PropertyFilletEdges ::init(); Part::Feature ::init(); diff --git a/src/Mod/Part/App/FeaturePartBoolean.cpp b/src/Mod/Part/App/FeaturePartBoolean.cpp index 7418db97a..1a2608797 100644 --- a/src/Mod/Part/App/FeaturePartBoolean.cpp +++ b/src/Mod/Part/App/FeaturePartBoolean.cpp @@ -24,7 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include -#include +# include #endif #include "FeaturePartBoolean.h" @@ -35,10 +35,13 @@ using namespace Part; PROPERTY_SOURCE_ABSTRACT(Part::Boolean, Part::Feature) -Boolean::Boolean(void) : myBoolOp(0) +Boolean::Boolean(void) { ADD_PROPERTY(Base,(0)); ADD_PROPERTY(Tool,(0)); + ADD_PROPERTY_TYPE(History,(ShapeHistory()), "Boolean", (App::PropertyType) + (App::Prop_Output|App::Prop_Transient|App::Prop_Hidden), "Shape history"); + History.setSize(0); } short Boolean::mustExecute() const @@ -77,14 +80,15 @@ App::DocumentObjectExecReturn *Boolean::execute(void) return new App::DocumentObjectExecReturn("Resulting shape is invalid"); } - // tmp. set boolean operation pointer - this->myBoolOp = mkBool.get(); + std::vector history; + history.push_back(buildHistory(*mkBool.get(), TopAbs_FACE, resShape, BaseShape)); + history.push_back(buildHistory(*mkBool.get(), TopAbs_FACE, resShape, ToolShape)); + this->Shape.setValue(resShape); - this->myBoolOp = 0; + this->History.setValues(history); return App::DocumentObject::StdReturn; } catch (...) { - this->myBoolOp = 0; return new App::DocumentObjectExecReturn("A fatal error occurred when running boolean operation"); } } diff --git a/src/Mod/Part/App/FeaturePartBoolean.h b/src/Mod/Part/App/FeaturePartBoolean.h index 13305dffe..2730af82f 100644 --- a/src/Mod/Part/App/FeaturePartBoolean.h +++ b/src/Mod/Part/App/FeaturePartBoolean.h @@ -41,6 +41,7 @@ public: App::PropertyLink Base; App::PropertyLink Tool; + PropertyShapeHistory History; /** @name methods overide Feature */ //@{ @@ -53,13 +54,9 @@ public: const char* getViewProviderName(void) const { return "PartGui::ViewProviderBoolean"; } - BRepAlgoAPI_BooleanOperation* getBooleanOperation() const { return myBoolOp; } protected: virtual BRepAlgoAPI_BooleanOperation* makeOperation(const TopoDS_Shape&, const TopoDS_Shape&) const = 0; - -private: - BRepAlgoAPI_BooleanOperation* myBoolOp; }; } diff --git a/src/Mod/Part/App/FeaturePartCommon.cpp b/src/Mod/Part/App/FeaturePartCommon.cpp index 1835cdfc1..ea4be0edd 100644 --- a/src/Mod/Part/App/FeaturePartCommon.cpp +++ b/src/Mod/Part/App/FeaturePartCommon.cpp @@ -56,6 +56,9 @@ MultiCommon::MultiCommon(void) { ADD_PROPERTY(Shapes,(0)); Shapes.setSize(0); + ADD_PROPERTY_TYPE(History,(ShapeHistory()), "Boolean", (App::PropertyType) + (App::Prop_Output|App::Prop_Transient|App::Prop_Hidden), "Shape history"); + History.setSize(0); } short MultiCommon::mustExecute() const @@ -78,6 +81,7 @@ App::DocumentObjectExecReturn *MultiCommon::execute(void) } if (s.size() >= 2) { + std::vector history; TopoDS_Shape res = s.front(); for (std::vector::iterator it = s.begin()+1; it != s.end(); ++it) { // Let's call algorithm computing a fuse operation: @@ -86,10 +90,13 @@ App::DocumentObjectExecReturn *MultiCommon::execute(void) if (!mkCommon.IsDone()) throw Base::Exception("Intersection failed"); res = mkCommon.Shape(); + history.push_back(buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape1())); + history.push_back(buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape2())); } if (res.IsNull()) throw Base::Exception("Resulting shape is invalid"); this->Shape.setValue(res); + this->History.setValues(history); } else { throw Base::Exception("Not enough shape objects linked"); diff --git a/src/Mod/Part/App/FeaturePartCommon.h b/src/Mod/Part/App/FeaturePartCommon.h index 19df8cdeb..ccb568aed 100644 --- a/src/Mod/Part/App/FeaturePartCommon.h +++ b/src/Mod/Part/App/FeaturePartCommon.h @@ -53,6 +53,7 @@ public: MultiCommon(); App::PropertyLinkList Shapes; + PropertyShapeHistory History; /** @name methods override feature */ //@{ diff --git a/src/Mod/Part/App/FeaturePartFuse.cpp b/src/Mod/Part/App/FeaturePartFuse.cpp index ea25450fc..8493b7b88 100644 --- a/src/Mod/Part/App/FeaturePartFuse.cpp +++ b/src/Mod/Part/App/FeaturePartFuse.cpp @@ -56,6 +56,9 @@ MultiFuse::MultiFuse(void) { ADD_PROPERTY(Shapes,(0)); Shapes.setSize(0); + ADD_PROPERTY_TYPE(History,(ShapeHistory()), "Boolean", (App::PropertyType) + (App::Prop_Output|App::Prop_Transient|App::Prop_Hidden), "Shape history"); + History.setSize(0); } short MultiFuse::mustExecute() const @@ -79,6 +82,7 @@ App::DocumentObjectExecReturn *MultiFuse::execute(void) if (s.size() >= 2) { try { + std::vector history; TopoDS_Shape res = s.front(); for (std::vector::iterator it = s.begin()+1; it != s.end(); ++it) { // Let's call algorithm computing a fuse operation: @@ -87,10 +91,13 @@ App::DocumentObjectExecReturn *MultiFuse::execute(void) if (!mkFuse.IsDone()) throw Base::Exception("Fusion failed"); res = mkFuse.Shape(); + history.push_back(buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape1())); + history.push_back(buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape2())); } if (res.IsNull()) throw Base::Exception("Resulting shape is invalid"); this->Shape.setValue(res); + this->History.setValues(history); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); diff --git a/src/Mod/Part/App/FeaturePartFuse.h b/src/Mod/Part/App/FeaturePartFuse.h index 7e2e88d32..f1c83bb6f 100644 --- a/src/Mod/Part/App/FeaturePartFuse.h +++ b/src/Mod/Part/App/FeaturePartFuse.h @@ -54,6 +54,7 @@ public: MultiFuse(); App::PropertyLinkList Shapes; + PropertyShapeHistory History; /** @name methods override feature */ //@{ diff --git a/src/Mod/Part/App/PartFeature.cpp b/src/Mod/Part/App/PartFeature.cpp index c9483f37c..e71edcc7d 100644 --- a/src/Mod/Part/App/PartFeature.cpp +++ b/src/Mod/Part/App/PartFeature.cpp @@ -26,6 +26,10 @@ #ifndef _PreComp_ # include # include +# include +# include +# include +# include #endif @@ -128,6 +132,57 @@ TopLoc_Location Feature::getLocation() const return TopLoc_Location(trf); } +ShapeHistory Feature::buildHistory(BRepBuilderAPI_MakeShape& mkShape, TopAbs_ShapeEnum type, + const TopoDS_Shape& newS, const TopoDS_Shape& oldS) +{ + ShapeHistory history; + history.type = type; + + TopTools_IndexedMapOfShape newM, oldM; + TopExp::MapShapes(newS, type, newM); + TopExp::MapShapes(oldS, type, oldM); + + for (int i=1; i<=oldM.Extent(); i++) { + bool modified=false, generated=false; + TopTools_ListIteratorOfListOfShape it; + for (it.Initialize(mkShape.Modified(oldM(i))); it.More(); it.Next()) { + modified = true; + for (int j=1; j<=newM.Extent(); j++) { + if (newM(j).IsPartner(it.Value())) { + history.modified[i-1].push_back(j-1); + break; + } + } + } + + for (it.Initialize(mkShape.Generated(oldM(i))); it.More(); it.Next()) { + generated = true; + for (int j=1; j<=newM.Extent(); j++) { + if (newM(j).IsPartner(it.Value())) { + history.generated[i-1].push_back(j-1); + break; + } + } + } + + if (!modified && !generated) { + if (mkShape.IsDeleted(oldM(i))) { + history.deleted.insert(i-1); + } + else { + for (int j=1; j<=newM.Extent(); j++) { + if (newM(j).IsPartner(oldM(i))) { + history.accepted[i-1] = j-1; + break; + } + } + } + } + } + + return history; +} + /// returns the type name of the ViewProvider const char* Feature::getViewProviderName(void) const { return "PartGui::ViewProviderPart"; diff --git a/src/Mod/Part/App/PartFeature.h b/src/Mod/Part/App/PartFeature.h index efa0b7a83..159f0473e 100644 --- a/src/Mod/Part/App/PartFeature.h +++ b/src/Mod/Part/App/PartFeature.h @@ -30,6 +30,8 @@ #include #include +class BRepBuilderAPI_MakeShape; + namespace Part { @@ -63,9 +65,9 @@ public: protected: void onChanged(const App::Property* prop); - -protected: TopLoc_Location getLocation() const; + ShapeHistory buildHistory(BRepBuilderAPI_MakeShape&, TopAbs_ShapeEnum type, + const TopoDS_Shape& newS, const TopoDS_Shape& oldS); }; class FilletBase : public Part::Feature diff --git a/src/Mod/Part/App/PropertyTopoShape.cpp b/src/Mod/Part/App/PropertyTopoShape.cpp index d0cc3981c..f3e83a809 100644 --- a/src/Mod/Part/App/PropertyTopoShape.cpp +++ b/src/Mod/Part/App/PropertyTopoShape.cpp @@ -343,6 +343,72 @@ void PropertyPartShape::RestoreDocFile(Base::Reader &reader) // ------------------------------------------------------------------------- +TYPESYSTEM_SOURCE(Part::PropertyShapeHistory , App::PropertyLists); + +PropertyShapeHistory::PropertyShapeHistory() +{ +} + +PropertyShapeHistory::~PropertyShapeHistory() +{ +} + +void PropertyShapeHistory::setValue(const ShapeHistory& sh) +{ + aboutToSetValue(); + _lValueList.resize(1); + _lValueList[0] = sh; + hasSetValue(); +} + +void PropertyShapeHistory::setValues(const std::vector& values) +{ + aboutToSetValue(); + _lValueList = values; + hasSetValue(); +} + +PyObject *PropertyShapeHistory::getPyObject(void) +{ + return Py::new_reference_to(Py::None()); +} + +void PropertyShapeHistory::setPyObject(PyObject *value) +{ +} + +void PropertyShapeHistory::Save (Base::Writer &writer) const +{ +} + +void PropertyShapeHistory::Restore(Base::XMLReader &reader) +{ +} + +void PropertyShapeHistory::SaveDocFile (Base::Writer &writer) const +{ +} + +void PropertyShapeHistory::RestoreDocFile(Base::Reader &reader) +{ +} + +App::Property *PropertyShapeHistory::Copy(void) const +{ + PropertyShapeHistory *p= new PropertyShapeHistory(); + p->_lValueList = _lValueList; + return p; +} + +void PropertyShapeHistory::Paste(const Property &from) +{ + aboutToSetValue(); + _lValueList = dynamic_cast(from)._lValueList; + hasSetValue(); +} + +// ------------------------------------------------------------------------- + TYPESYSTEM_SOURCE(Part::PropertyFilletEdges , App::PropertyLists); PropertyFilletEdges::PropertyFilletEdges() diff --git a/src/Mod/Part/App/PropertyTopoShape.h b/src/Mod/Part/App/PropertyTopoShape.h index 3113ed456..190a82d2a 100644 --- a/src/Mod/Part/App/PropertyTopoShape.h +++ b/src/Mod/Part/App/PropertyTopoShape.h @@ -21,12 +21,15 @@ ***************************************************************************/ -#ifndef PROPERTYTOPOSHAPE_H -#define PROPERTYTOPOSHAPE_H +#ifndef PART_PROPERTYTOPOSHAPE_H +#define PART_PROPERTYTOPOSHAPE_H #include "TopoShape.h" +#include #include #include +#include +#include namespace Part { @@ -95,6 +98,59 @@ private: TopoShape _Shape; }; +struct PartExport ShapeHistory { + TopAbs_ShapeEnum type; + std::map > modified; + std::map > generated; + std::map accepted; + std::set deleted; +}; + +class PartExport PropertyShapeHistory : public App::PropertyLists +{ + TYPESYSTEM_HEADER(); + +public: + PropertyShapeHistory(); + ~PropertyShapeHistory(); + + virtual void setSize(int newSize) { + _lValueList.resize(newSize); + } + virtual int getSize(void) const { + return _lValueList.size(); + } + + /** Sets the property + */ + void setValue(const ShapeHistory&); + + void setValues (const std::vector& values); + + const std::vector &getValues(void) const { + return _lValueList; + } + + virtual PyObject *getPyObject(void); + virtual void setPyObject(PyObject *); + + virtual void Save (Base::Writer &writer) const; + virtual void Restore(Base::XMLReader &reader); + + virtual void SaveDocFile (Base::Writer &writer) const; + virtual void RestoreDocFile(Base::Reader &reader); + + virtual Property *Copy(void) const; + virtual void Paste(const Property &from); + + virtual unsigned int getMemSize (void) const { + return _lValueList.size() * sizeof(ShapeHistory); + } + +private: + std::vector _lValueList; +}; + /** A property class to store hash codes and two radii for the fillet algorithm. * @author Werner Mayer */ @@ -151,4 +207,4 @@ private: } //namespace Part -#endif // PROPERTYTOPOSHAPE_H +#endif // PART_PROPERTYTOPOSHAPE_H diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.cpp b/src/Mod/Part/Gui/ViewProviderBoolean.cpp index d35cd0dde..46c85bb65 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/Part/Gui/ViewProviderBoolean.cpp @@ -77,80 +77,69 @@ QIcon ViewProviderBoolean::getIcon(void) const return ViewProviderPart::getIcon(); } -void findFaces(BRepAlgoAPI_BooleanOperation* mkBool, - const TopTools_IndexedMapOfShape& M1, - const TopTools_IndexedMapOfShape& M3, - const std::vector& colBase, - std::vector& colBool) +void applyColor(const Part::ShapeHistory& hist, + const std::vector& colBase, + std::vector& colBool) { - for (int i=1; i<=M1.Extent(); i++) { - bool modified=false, generated=false; - TopTools_ListIteratorOfListOfShape it; - for (it.Initialize(mkBool->Modified(M1(i))); it.More(); it.Next()) { - modified = true; - for (int j=1; j<=M3.Extent(); j++) { - if (M3(j).IsPartner(it.Value())) { - colBool[j-1] = colBase[i-1]; - break; - } - } + std::map >::const_iterator jt; + // apply color from modified faces + for (jt = hist.modified.begin(); jt != hist.modified.end(); ++jt) { + std::vector::const_iterator kt; + for (kt = jt->second.begin(); kt != jt->second.end(); ++kt) { + colBool[*kt] = colBase[jt->first]; } - - for (it.Initialize(mkBool->Generated(M1(i))); it.More(); it.Next()) { - generated = true; - for (int j=1; j<=M3.Extent(); j++) { - if (M3(j).IsPartner(it.Value())) { - colBool[j-1] = colBase[i-1]; - break; - } - } - } - - if (!modified && !generated && !mkBool->IsDeleted(M1(i))) { - for (int j=1; j<=M3.Extent(); j++) { - if (M3(j).IsPartner(M1(i))) { - colBool[j-1] = colBase[i-1]; - break; - } - } + } + // apply color from generated faces + for (jt = hist.generated.begin(); jt != hist.generated.end(); ++jt) { + std::vector::const_iterator kt; + for (kt = jt->second.begin(); kt != jt->second.end(); ++kt) { + colBool[*kt] = colBase[jt->first]; } } + // apply data from accepted faces + for (std::map::const_iterator kt = hist.accepted.begin(); kt != hist.accepted.end(); ++kt) { + colBool[kt->second] = colBase[kt->first]; + } } void ViewProviderBoolean::updateData(const App::Property* prop) { PartGui::ViewProviderPart::updateData(prop); - if (prop->getTypeId() == Part::PropertyPartShape::getClassTypeId()) { + if (prop->getTypeId() == Part::PropertyShapeHistory::getClassTypeId()) { + const std::vector& hist = static_cast + (prop)->getValues(); + if (hist.size() != 2) + return; Part::Boolean* objBool = dynamic_cast(getObject()); Part::Feature* objBase = dynamic_cast(objBool->Base.getValue()); Part::Feature* objTool = dynamic_cast(objBool->Tool.getValue()); - - BRepAlgoAPI_BooleanOperation* mkBool = objBool->getBooleanOperation(); - if (mkBool && objBase && objTool) { + if (objBase && objTool) { const TopoDS_Shape& baseShape = objBase->Shape.getValue(); const TopoDS_Shape& toolShape = objTool->Shape.getValue(); const TopoDS_Shape& boolShape = objBool->Shape.getValue(); - TopTools_IndexedMapOfShape M1, M2, M3; - TopExp::MapShapes(baseShape, TopAbs_FACE, M1); - TopExp::MapShapes(toolShape, TopAbs_FACE, M2); - TopExp::MapShapes(boolShape, TopAbs_FACE, M3); + TopTools_IndexedMapOfShape baseMap, toolMap, boolMap; + TopExp::MapShapes(baseShape, TopAbs_FACE, baseMap); + TopExp::MapShapes(toolShape, TopAbs_FACE, toolMap); + TopExp::MapShapes(boolShape, TopAbs_FACE, boolMap); + Gui::ViewProvider* vpBase = Gui::Application::Instance->getViewProvider(objBase); Gui::ViewProvider* vpTool = Gui::Application::Instance->getViewProvider(objTool); std::vector colBase = static_cast(vpBase)->DiffuseColor.getValues(); std::vector colTool = static_cast(vpTool)->DiffuseColor.getValues(); std::vector colBool; - colBool.resize(M3.Extent(), this->ShapeColor.getValue()); - bool applyColor=false; - if (colBase.size() == M1.Extent()) { - findFaces(mkBool, M1, M3, colBase, colBool); - applyColor = true; + colBool.resize(boolMap.Extent(), this->ShapeColor.getValue()); + + bool setColor=false; + if (colBase.size() == baseMap.Extent()) { + applyColor(hist[0], colBase, colBool); + setColor = true; } - if (colTool.size() == M2.Extent()) { - findFaces(mkBool, M2, M3, colTool, colBool); - applyColor = true; + if (colTool.size() == toolMap.Extent()) { + applyColor(hist[1], colTool, colBool); + setColor = true; } - if (applyColor) + if (setColor) this->DiffuseColor.setValues(colBool); } } @@ -176,6 +165,46 @@ QIcon ViewProviderMultiFuse::getIcon(void) const return Gui::BitmapFactory().pixmap("Part_Fuse"); } +void ViewProviderMultiFuse::updateData(const App::Property* prop) +{ + PartGui::ViewProviderPart::updateData(prop); + if (prop->getTypeId() == Part::PropertyShapeHistory::getClassTypeId()) { + const std::vector& hist = static_cast + (prop)->getValues(); + Part::MultiFuse* objBool = dynamic_cast(getObject()); + std::vector sources = objBool->Shapes.getValues(); + if (hist.size() != sources.size()) + return; + + const TopoDS_Shape& boolShape = objBool->Shape.getValue(); + TopTools_IndexedMapOfShape boolMap; + TopExp::MapShapes(boolShape, TopAbs_FACE, boolMap); + + std::vector colBool; + colBool.resize(boolMap.Extent(), this->ShapeColor.getValue()); + + bool setColor=false; + int index=0; + for (std::vector::iterator it = sources.begin(); it != sources.end(); ++it, ++index) { + Part::Feature* objBase = dynamic_cast(*it); + const TopoDS_Shape& baseShape = objBase->Shape.getValue(); + + TopTools_IndexedMapOfShape baseMap; + TopExp::MapShapes(baseShape, TopAbs_FACE, baseMap); + + Gui::ViewProvider* vpBase = Gui::Application::Instance->getViewProvider(objBase); + std::vector colBase = static_cast(vpBase)->DiffuseColor.getValues(); + if (colBase.size() == baseMap.Extent()) { + applyColor(hist[index], colBase, colBool); + setColor = true; + } + } + + if (setColor) + this->DiffuseColor.setValues(colBool); + } +} + PROPERTY_SOURCE(PartGui::ViewProviderMultiCommon,PartGui::ViewProviderPart) @@ -196,3 +225,43 @@ QIcon ViewProviderMultiCommon::getIcon(void) const { return Gui::BitmapFactory().pixmap("Part_Common"); } + +void ViewProviderMultiCommon::updateData(const App::Property* prop) +{ + PartGui::ViewProviderPart::updateData(prop); + if (prop->getTypeId() == Part::PropertyShapeHistory::getClassTypeId()) { + const std::vector& hist = static_cast + (prop)->getValues(); + Part::MultiCommon* objBool = dynamic_cast(getObject()); + std::vector sources = objBool->Shapes.getValues(); + if (hist.size() != sources.size()) + return; + + const TopoDS_Shape& boolShape = objBool->Shape.getValue(); + TopTools_IndexedMapOfShape boolMap; + TopExp::MapShapes(boolShape, TopAbs_FACE, boolMap); + + std::vector colBool; + colBool.resize(boolMap.Extent(), this->ShapeColor.getValue()); + + bool setColor=false; + int index=0; + for (std::vector::iterator it = sources.begin(); it != sources.end(); ++it, ++index) { + Part::Feature* objBase = dynamic_cast(*it); + const TopoDS_Shape& baseShape = objBase->Shape.getValue(); + + TopTools_IndexedMapOfShape baseMap; + TopExp::MapShapes(baseShape, TopAbs_FACE, baseMap); + + Gui::ViewProvider* vpBase = Gui::Application::Instance->getViewProvider(objBase); + std::vector colBase = static_cast(vpBase)->DiffuseColor.getValues(); + if (colBase.size() == baseMap.Extent()) { + applyColor(hist[index], colBase, colBool); + setColor = true; + } + } + + if (setColor) + this->DiffuseColor.setValues(colBool); + } +} diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.h b/src/Mod/Part/Gui/ViewProviderBoolean.h index 0a34127b1..29c531109 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.h +++ b/src/Mod/Part/Gui/ViewProviderBoolean.h @@ -59,6 +59,7 @@ public: /// grouping handling std::vector claimChildren(void) const; QIcon getIcon(void) const; + void updateData(const App::Property*); }; /// ViewProvider for the MultiFuse feature @@ -75,6 +76,7 @@ public: /// grouping handling std::vector claimChildren(void) const; QIcon getIcon(void) const; + void updateData(const App::Property*); }; From 20fcef29c7fdb7e1f38543066586bd946e94acdb Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 31 May 2012 15:28:15 +0200 Subject: [PATCH 270/517] Keep faces colors on boolean operations --- src/Mod/Part/App/FeaturePartCommon.cpp | 47 ++++++++++++++++-------- src/Mod/Part/App/FeaturePartFuse.cpp | 14 ++++++- src/Mod/Part/App/PartFeature.cpp | 37 +++++++++++++++---- src/Mod/Part/App/PartFeature.h | 1 + src/Mod/Part/App/PropertyTopoShape.h | 8 ++-- src/Mod/Part/Gui/ViewProviderBoolean.cpp | 13 +------ 6 files changed, 79 insertions(+), 41 deletions(-) diff --git a/src/Mod/Part/App/FeaturePartCommon.cpp b/src/Mod/Part/App/FeaturePartCommon.cpp index ea4be0edd..44c93a01c 100644 --- a/src/Mod/Part/App/FeaturePartCommon.cpp +++ b/src/Mod/Part/App/FeaturePartCommon.cpp @@ -25,6 +25,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include #endif @@ -81,22 +82,38 @@ App::DocumentObjectExecReturn *MultiCommon::execute(void) } if (s.size() >= 2) { - std::vector history; - TopoDS_Shape res = s.front(); - for (std::vector::iterator it = s.begin()+1; it != s.end(); ++it) { - // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Common mkCommon(res, *it); - // Let's check if the fusion has been successful - if (!mkCommon.IsDone()) - throw Base::Exception("Intersection failed"); - res = mkCommon.Shape(); - history.push_back(buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape1())); - history.push_back(buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape2())); + try { + std::vector history; + TopoDS_Shape res = s.front(); + for (std::vector::iterator it = s.begin()+1; it != s.end(); ++it) { + // Let's call algorithm computing a fuse operation: + BRepAlgoAPI_Common mkCommon(res, *it); + // Let's check if the fusion has been successful + if (!mkCommon.IsDone()) + throw Base::Exception("Intersection failed"); + res = mkCommon.Shape(); + + ShapeHistory hist1 = buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape1()); + ShapeHistory hist2 = buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape2()); + if (history.empty()) { + history.push_back(hist1); + history.push_back(hist2); + } + else { + for (std::vector::iterator jt = history.begin(); jt != history.end(); ++jt) + *jt = joinHistory(*jt, hist1); + history.push_back(hist2); + } + } + if (res.IsNull()) + throw Base::Exception("Resulting shape is invalid"); + this->Shape.setValue(res); + this->History.setValues(history); + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + return new App::DocumentObjectExecReturn(e->GetMessageString()); } - if (res.IsNull()) - throw Base::Exception("Resulting shape is invalid"); - this->Shape.setValue(res); - this->History.setValues(history); } else { throw Base::Exception("Not enough shape objects linked"); diff --git a/src/Mod/Part/App/FeaturePartFuse.cpp b/src/Mod/Part/App/FeaturePartFuse.cpp index 8493b7b88..47efb7a44 100644 --- a/src/Mod/Part/App/FeaturePartFuse.cpp +++ b/src/Mod/Part/App/FeaturePartFuse.cpp @@ -91,8 +91,18 @@ App::DocumentObjectExecReturn *MultiFuse::execute(void) if (!mkFuse.IsDone()) throw Base::Exception("Fusion failed"); res = mkFuse.Shape(); - history.push_back(buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape1())); - history.push_back(buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape2())); + + ShapeHistory hist1 = buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape1()); + ShapeHistory hist2 = buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape2()); + if (history.empty()) { + history.push_back(hist1); + history.push_back(hist2); + } + else { + for (std::vector::iterator jt = history.begin(); jt != history.end(); ++jt) + *jt = joinHistory(*jt, hist1); + history.push_back(hist2); + } } if (res.IsNull()) throw Base::Exception("Resulting shape is invalid"); diff --git a/src/Mod/Part/App/PartFeature.cpp b/src/Mod/Part/App/PartFeature.cpp index e71edcc7d..ef43452df 100644 --- a/src/Mod/Part/App/PartFeature.cpp +++ b/src/Mod/Part/App/PartFeature.cpp @@ -143,36 +143,36 @@ ShapeHistory Feature::buildHistory(BRepBuilderAPI_MakeShape& mkShape, TopAbs_Sha TopExp::MapShapes(oldS, type, oldM); for (int i=1; i<=oldM.Extent(); i++) { - bool modified=false, generated=false; + bool found = false; TopTools_ListIteratorOfListOfShape it; for (it.Initialize(mkShape.Modified(oldM(i))); it.More(); it.Next()) { - modified = true; + found = true; for (int j=1; j<=newM.Extent(); j++) { if (newM(j).IsPartner(it.Value())) { - history.modified[i-1].push_back(j-1); + history.shapeMap[i-1].push_back(j-1); break; } } } for (it.Initialize(mkShape.Generated(oldM(i))); it.More(); it.Next()) { - generated = true; + found = true; for (int j=1; j<=newM.Extent(); j++) { if (newM(j).IsPartner(it.Value())) { - history.generated[i-1].push_back(j-1); + history.shapeMap[i-1].push_back(j-1); break; } } } - if (!modified && !generated) { + if (!found) { if (mkShape.IsDeleted(oldM(i))) { - history.deleted.insert(i-1); + history.shapeMap[i-1] = std::vector(); } else { for (int j=1; j<=newM.Extent(); j++) { if (newM(j).IsPartner(oldM(i))) { - history.accepted[i-1] = j-1; + history.shapeMap[i-1].push_back(j-1); break; } } @@ -183,6 +183,27 @@ ShapeHistory Feature::buildHistory(BRepBuilderAPI_MakeShape& mkShape, TopAbs_Sha return history; } +ShapeHistory Feature::joinHistory(const ShapeHistory& oldH, const ShapeHistory& newH) +{ + ShapeHistory join; + join.type = oldH.type; + + for (ShapeHistory::MapList::const_iterator it = oldH.shapeMap.begin(); it != oldH.shapeMap.end(); ++it) { + int old_shape_index = it->first; + if (it->second.empty()) + join.shapeMap[old_shape_index] = ShapeHistory::List(); + for (ShapeHistory::List::const_iterator jt = it->second.begin(); jt != it->second.end(); ++jt) { + ShapeHistory::MapList::const_iterator kt = newH.shapeMap.find(*jt); + if (kt != newH.shapeMap.end()) { + ShapeHistory::List& ary = join.shapeMap[old_shape_index]; + ary.insert(ary.end(), kt->second.begin(), kt->second.end()); + } + } + } + + return join; +} + /// returns the type name of the ViewProvider const char* Feature::getViewProviderName(void) const { return "PartGui::ViewProviderPart"; diff --git a/src/Mod/Part/App/PartFeature.h b/src/Mod/Part/App/PartFeature.h index 159f0473e..689736a42 100644 --- a/src/Mod/Part/App/PartFeature.h +++ b/src/Mod/Part/App/PartFeature.h @@ -68,6 +68,7 @@ protected: TopLoc_Location getLocation() const; ShapeHistory buildHistory(BRepBuilderAPI_MakeShape&, TopAbs_ShapeEnum type, const TopoDS_Shape& newS, const TopoDS_Shape& oldS); + ShapeHistory joinHistory(const ShapeHistory&, const ShapeHistory&); }; class FilletBase : public Part::Feature diff --git a/src/Mod/Part/App/PropertyTopoShape.h b/src/Mod/Part/App/PropertyTopoShape.h index 190a82d2a..a75c85ccd 100644 --- a/src/Mod/Part/App/PropertyTopoShape.h +++ b/src/Mod/Part/App/PropertyTopoShape.h @@ -99,11 +99,11 @@ private: }; struct PartExport ShapeHistory { + typedef std::map > MapList; + typedef std::vector List; + TopAbs_ShapeEnum type; - std::map > modified; - std::map > generated; - std::map accepted; - std::set deleted; + MapList shapeMap; }; class PartExport PropertyShapeHistory : public App::PropertyLists diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.cpp b/src/Mod/Part/Gui/ViewProviderBoolean.cpp index 46c85bb65..22a9c8a4e 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/Part/Gui/ViewProviderBoolean.cpp @@ -83,23 +83,12 @@ void applyColor(const Part::ShapeHistory& hist, { std::map >::const_iterator jt; // apply color from modified faces - for (jt = hist.modified.begin(); jt != hist.modified.end(); ++jt) { + for (jt = hist.shapeMap.begin(); jt != hist.shapeMap.end(); ++jt) { std::vector::const_iterator kt; for (kt = jt->second.begin(); kt != jt->second.end(); ++kt) { colBool[*kt] = colBase[jt->first]; } } - // apply color from generated faces - for (jt = hist.generated.begin(); jt != hist.generated.end(); ++jt) { - std::vector::const_iterator kt; - for (kt = jt->second.begin(); kt != jt->second.end(); ++kt) { - colBool[*kt] = colBase[jt->first]; - } - } - // apply data from accepted faces - for (std::map::const_iterator kt = hist.accepted.begin(); kt != hist.accepted.end(); ++kt) { - colBool[kt->second] = colBase[kt->first]; - } } void ViewProviderBoolean::updateData(const App::Property* prop) From f2b4f5c18e23b034c1d1cbb9322e7aa0852647c8 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 31 May 2012 23:44:50 +0200 Subject: [PATCH 271/517] Keep faces colors on boolean operations --- src/Mod/Part/Gui/ViewProviderBoolean.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.cpp b/src/Mod/Part/Gui/ViewProviderBoolean.cpp index 22a9c8a4e..d73afe296 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/Part/Gui/ViewProviderBoolean.cpp @@ -124,10 +124,20 @@ void ViewProviderBoolean::updateData(const App::Property* prop) applyColor(hist[0], colBase, colBool); setColor = true; } + else if (!colBase.empty() && colBase[0] != this->ShapeColor.getValue()) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyColor(hist[0], colBase, colBool); + setColor = true; + } if (colTool.size() == toolMap.Extent()) { applyColor(hist[1], colTool, colBool); setColor = true; } + else if (!colTool.empty() && colTool[0] != this->ShapeColor.getValue()) { + colTool.resize(toolMap.Extent(), colTool[0]); + applyColor(hist[1], colTool, colBool); + setColor = true; + } if (setColor) this->DiffuseColor.setValues(colBool); } @@ -187,6 +197,11 @@ void ViewProviderMultiFuse::updateData(const App::Property* prop) applyColor(hist[index], colBase, colBool); setColor = true; } + else if (!colBase.empty() && colBase[0] != this->ShapeColor.getValue()) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyColor(hist[index], colBase, colBool); + setColor = true; + } } if (setColor) @@ -248,6 +263,11 @@ void ViewProviderMultiCommon::updateData(const App::Property* prop) applyColor(hist[index], colBase, colBool); setColor = true; } + else if (!colBase.empty() && colBase[0] != this->ShapeColor.getValue()) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyColor(hist[index], colBase, colBool); + setColor = true; + } } if (setColor) From 4c566a6113c2c2c3326d2722604039f6d8bb4b3e Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 1 Jun 2012 16:44:57 +0200 Subject: [PATCH 272/517] Make a convenient function to convert between gp_Trsf and Base::Matrix4D --- src/Mod/Part/App/TopoShape.cpp | 38 ++++++++++++++++++++-------------- src/Mod/Part/App/TopoShape.h | 2 ++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index fd90af18f..9bf487074 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -433,25 +433,19 @@ void TopoShape::operator = (const TopoShape& sh) } } -void TopoShape::setTransform(const Base::Matrix4D& rclTrf) +void TopoShape::convertTogpTrsf(const Base::Matrix4D& mtrx, gp_Trsf& trsf) { - gp_Trsf mov; - mov.SetValues(rclTrf[0][0],rclTrf[0][1],rclTrf[0][2],rclTrf[0][3], - rclTrf[1][0],rclTrf[1][1],rclTrf[1][2],rclTrf[1][3], - rclTrf[2][0],rclTrf[2][1],rclTrf[2][2],rclTrf[2][3], - 0.00001,0.00001); - TopLoc_Location loc(mov); - _Shape.Location(loc); + trsf.SetValues(mtrx[0][0],mtrx[0][1],mtrx[0][2],mtrx[0][3], + mtrx[1][0],mtrx[1][1],mtrx[1][2],mtrx[1][3], + mtrx[2][0],mtrx[2][1],mtrx[2][2],mtrx[2][3], + 0.00001,0.00001); } -Base::Matrix4D TopoShape::getTransform(void) const +void TopoShape::convertToMatrix(const gp_Trsf& trsf, Base::Matrix4D& mtrx) { - Base::Matrix4D mtrx; - gp_Trsf Trf = _Shape.Location().Transformation(); - - gp_Mat m = Trf._CSFDB_Getgp_Trsfmatrix(); - gp_XYZ p = Trf._CSFDB_Getgp_Trsfloc(); - Standard_Real scale = Trf._CSFDB_Getgp_Trsfscale(); + gp_Mat m = trsf._CSFDB_Getgp_Trsfmatrix(); + gp_XYZ p = trsf._CSFDB_Getgp_Trsfloc(); + Standard_Real scale = trsf._CSFDB_Getgp_Trsfscale(); // set Rotation matrix mtrx[0][0] = scale * m._CSFDB_Getgp_Matmatrix(0,0); @@ -470,7 +464,21 @@ Base::Matrix4D TopoShape::getTransform(void) const mtrx[0][3] = p._CSFDB_Getgp_XYZx(); mtrx[1][3] = p._CSFDB_Getgp_XYZy(); mtrx[2][3] = p._CSFDB_Getgp_XYZz(); +} +void TopoShape::setTransform(const Base::Matrix4D& rclTrf) +{ + gp_Trsf mov; + convertTogpTrsf(rclTrf, mov); + TopLoc_Location loc(mov); + _Shape.Location(loc); +} + +Base::Matrix4D TopoShape::getTransform(void) const +{ + Base::Matrix4D mtrx; + gp_Trsf Trf = _Shape.Location().Transformation(); + convertToMatrix(Trf, mtrx); return mtrx; } diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index 1de76b1ca..1d16b9e07 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -73,6 +73,8 @@ public: Base::Matrix4D getTransform(void) const; /// Bound box from the CasCade shape Base::BoundBox3d getBoundBox(void)const; + static void convertTogpTrsf(const Base::Matrix4D& mtrx, gp_Trsf& trsf); + static void convertToMatrix(const gp_Trsf& trsf, Base::Matrix4D& mtrx); //@} /** @name Subelement management */ From fbd3556aaf64e13ee2975a08278bae52a72e071b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 1 Jun 2012 15:19:21 -0300 Subject: [PATCH 273/517] Draft: Added Draft_ToggleGrid() command to toggle the Draft grid --- src/Mod/Arch/InitGui.py | 5 ++-- src/Mod/Draft/DraftSnap.py | 54 ++++++++++++++++++++----------------- src/Mod/Draft/DraftTools.py | 23 +++++++++++++++- src/Mod/Draft/InitGui.py | 6 ++--- 4 files changed, 57 insertions(+), 31 deletions(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 1de87ed47..32e9d70db 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -69,8 +69,9 @@ class ArchWorkbench(Workbench): "Draft_Offset","Draft_Upgrade", "Draft_Downgrade","Draft_Trimex"] self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode", - "Draft_AddToGroup","Draft_SelectGroup", - "Draft_SelectPlane","Draft_ToggleSnap"] + "Draft_AddToGroup","Draft_SelectGroup", + "Draft_SelectPlane","Draft_ToggleSnap", + "Draft_ShowSnapBar","Draft_ToggleGrid"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 1479a6568..183f20a52 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -73,6 +73,7 @@ class Snapper: self.snapInfo = None self.lastSnappedObject = None self.active = True + self.forceGridOff = False self.trackers = [[],[],[],[]] # view, grid, snap, extline self.polarAngles = [90,45] @@ -166,7 +167,7 @@ class Snapper: self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) # set the grid - if self.grid and Draft.getParam("grid"): + if self.grid and Draft.getParam("grid") and (not self.forceGridOff): self.grid.set() # activate snap @@ -243,18 +244,20 @@ class Snapper: if (not self.maxEdges) or (len(obj.Edges) <= self.maxEdges): if "Edge" in comp: # we are snapping to an edge - edge = obj.Shape.Edges[int(comp[4:])-1] - snaps.extend(self.snapToEndpoints(edge)) - snaps.extend(self.snapToMidpoint(edge)) - snaps.extend(self.snapToPerpendicular(edge,lastpoint)) - #snaps.extend(self.snapToOrtho(edge,lastpoint,constrain)) # now part of snapToPolar - snaps.extend(self.snapToIntersection(edge)) - snaps.extend(self.snapToElines(edge,eline)) + en = int(comp[4:])-1 + if len(obj.Shape.Edges) > en: + edge = obj.Shape.Edges[en] + snaps.extend(self.snapToEndpoints(edge)) + snaps.extend(self.snapToMidpoint(edge)) + snaps.extend(self.snapToPerpendicular(edge,lastpoint)) + #snaps.extend(self.snapToOrtho(edge,lastpoint,constrain)) # now part of snapToPolar + snaps.extend(self.snapToIntersection(edge)) + snaps.extend(self.snapToElines(edge,eline)) - if isinstance (edge.Curve,Part.Circle): - # the edge is an arc, we have extra options - snaps.extend(self.snapToAngles(edge)) - snaps.extend(self.snapToCenter(edge)) + if isinstance (edge.Curve,Part.Circle): + # the edge is an arc, we have extra options + snaps.extend(self.snapToAngles(edge)) + snaps.extend(self.snapToCenter(edge)) elif "Vertex" in comp: # directly snapped to a vertex @@ -418,18 +421,19 @@ class Snapper: def snapToGrid(self,point): "returns a grid snap point if available" if self.grid: - if self.isEnabled("grid"): - np = self.grid.getClosestNode(point) - if np: - if self.radius != 0: - dv = point.sub(np) - if dv.Length <= self.radius: - if self.tracker: - self.tracker.setCoords(np) - self.tracker.setMarker(self.mk['grid']) - self.tracker.on() - self.setCursor('grid') - return np + if self.grid.Visible: + if self.isEnabled("grid"): + np = self.grid.getClosestNode(point) + if np: + if self.radius != 0: + dv = point.sub(np) + if dv.Length <= self.radius: + if self.tracker: + self.tracker.setCoords(np) + self.tracker.setMarker(self.mk['grid']) + self.tracker.on() + self.setCursor('grid') + return np return point def snapToEndpoints(self,shape): @@ -889,7 +893,7 @@ class Snapper: if self.grid: if self.grid.Visible: self.grid.set() - + if not hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper = Snapper() if not hasattr(FreeCAD,"DraftWorkingPlane"): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index b37e07c00..559e75e26 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3828,7 +3828,27 @@ class Draft_Clone(): return True else: return False - + + +class ToggleGrid(): + "The Draft ToggleGrid command definition" + + def GetResources(self): + return {'Pixmap' : 'Snap_Grid', + 'Accel' : "G,R", + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleGrid", "Toggle Grid"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_ToggleGrid", "Toggles the Draft gid on/off")} + + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if FreeCADGui.Snapper.grid: + if FreeCADGui.Snapper.grid.Visible: + FreeCADGui.Snapper.grid.off() + FreeCADGui.Snapper.forceGridOff=True + else: + FreeCADGui.Snapper.grid.on() + FreeCADGui.Snapper.forceGridOff=False + #--------------------------------------------------------------------------- # Adds the icons & commands to the FreeCAD command manager, and sets defaults #--------------------------------------------------------------------------- @@ -3876,6 +3896,7 @@ FreeCADGui.addCommand('Draft_SelectGroup',SelectGroup()) FreeCADGui.addCommand('Draft_Shape2DView',Shape2DView()) FreeCADGui.addCommand('Draft_ToggleSnap',ToggleSnap()) FreeCADGui.addCommand('Draft_ShowSnapBar',ShowSnapBar()) +FreeCADGui.addCommand('Draft_ToggleGrid',ToggleGrid()) # a global place to look for active draft Command FreeCAD.activeDraftCommand = None diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 84d0b9b86..3e2bd5696 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -192,12 +192,12 @@ class DraftWorkbench (Workbench): "Draft_Clone"] self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", - "Draft_ShowSnapBar"] + "Draft_ShowSnapBar","Draft_ToggleGrid"] self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"] self.appendToolbar(str(DraftTools.translate("draft","Draft creation tools")),self.cmdList) self.appendToolbar(str(DraftTools.translate("draft","Draft modification tools")),self.modList) self.appendMenu(str(DraftTools.translate("draft","&Draft")),self.cmdList+self.modList) - self.appendMenu([str(DraftTools.translate("draft","&Draft")),str(DraftTools.translate("draft","Display options"))],self.treecmdList) + self.appendMenu([str(DraftTools.translate("draft","&Draft")),str(DraftTools.translate("draft","Context tools"))],self.treecmdList) self.appendMenu([str(DraftTools.translate("draft","&Draft")),str(DraftTools.translate("draft","Wire tools"))],self.lineList) def Activated(self): @@ -211,7 +211,7 @@ class DraftWorkbench (Workbench): if (FreeCAD.activeDraftCommand == None): if (FreeCADGui.Selection.getSelection()): self.appendContextMenu("Draft",self.cmdList+self.modList) - self.appendContextMenu("Display options",self.treecmdList) + self.appendContextMenu("Draft context tools",self.treecmdList) else: self.appendContextMenu("Draft",self.cmdList) else: From 0e8648126c7954dd6fea6329c641c705a01c880e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 1 Jun 2012 16:26:31 -0300 Subject: [PATCH 274/517] Arch: Small fix in menu name --- src/Mod/Arch/InitGui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 32e9d70db..4c5384ff0 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -76,7 +76,7 @@ class ArchWorkbench(Workbench): "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools) self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) - self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Tools"))],self.meshtools) + self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftcontexttools) FreeCADGui.addIconPath(":/icons") From 1b8998f77da1f237e310c6beef9ab246f99b3a21 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 2 Jun 2012 18:52:47 +0200 Subject: [PATCH 275/517] 0000631: Support of more sophisticated switch to configure with cmake --- CMakeLists.txt | 13 ++++++++++++- src/3rdParty/CMakeLists.txt | 4 ++-- src/Base/CMakeLists.txt | 15 +++++---------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dda4867a2..2d2eaf684 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,10 @@ if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-Wno-write-strings) add_definitions(-Wno-deprecated) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + # get linker errors as soon as possible and not at runtime e.g. for modules + if(UNIX) + SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined") + endif(UNIX) endif(CMAKE_COMPILER_IS_GNUCXX) @@ -98,7 +102,14 @@ OPTION(FREECAD_BUILD_FEM "Build the FreeCAD FEM module, be aware, unfinished cod OPTION(FREECAD_BUILD_SANDBOX "Build the FreeCAD Sandbox module which is only for testing purposes" OFF) OPTION(FREECAD_BUILD_TEMPLATE "Build the FreeCAD template module which is only for testing purposes" OFF) OPTION(FREECAD_BUILD_DEBIAN "Prepare for a build of a Debian package" OFF) -OPTION(USE_EXTERNAL_ZIPIOS "Use system installed zipios++ instead of the bundled." OFF) +OPTION(FREECAD_USE_EXTERNAL_ZIPIOS "Use system installed zipios++ instead of the bundled." OFF) +OPTION(FREECAD_USE_EXTERNAL_PIVY "Use system installed python-pivy instead of the bundled." OFF) + +# if this is set override some options +if (FREECAD_BUILD_DEBIAN) + set(FREECAD_USE_EXTERNAL_ZIPIOS ON) + set(FREECAD_USE_EXTERNAL_PIVY ON) +endif (FREECAD_BUILD_DEBIAN) # ============================================================================== diff --git a/src/3rdParty/CMakeLists.txt b/src/3rdParty/CMakeLists.txt index 5309c7a1f..456c1f325 100644 --- a/src/3rdParty/CMakeLists.txt +++ b/src/3rdParty/CMakeLists.txt @@ -20,7 +20,7 @@ elseif(FREECAD_BUILD_GUI AND FREECAD_LIBPACK_CHECKFILE7X) #endif(MINGW) # applies for Unix, MinGW and Windows with custom LibPack elseif(FREECAD_BUILD_GUI) - if (NOT FREECAD_BUILD_DEBIAN) + if (NOT FREECAD_USE_EXTERNAL_PIVY) find_path(COIN_VERSION3 Inventor/scxml/ScXML.h ${COIN3D_INCLUDE_DIR}) if (COIN_VERSION3) if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Pivy-0.5) @@ -31,7 +31,7 @@ elseif(FREECAD_BUILD_GUI) add_subdirectory(Pivy) endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Pivy) endif(COIN_VERSION3) - endif (NOT FREECAD_BUILD_DEBIAN) + endif (NOT FREECAD_USE_EXTERNAL_PIVY) endif(FREECAD_BUILD_GUI AND FREECAD_LIBPACK_CHECKFILE6X) # For Windows we have all stuff in the LibPack diff --git a/src/Base/CMakeLists.txt b/src/Base/CMakeLists.txt index fdfb8a2b1..3cab43354 100644 --- a/src/Base/CMakeLists.txt +++ b/src/Base/CMakeLists.txt @@ -68,7 +68,7 @@ if(SWIG_FOUND) add_definitions(-DHAVE_SWIG=1) endif(SWIG_FOUND) -if (EXISTS ${CMAKE_SOURCE_DIR}/src/zipios++ AND NOT FREECAD_BUILD_DEBIAN) +if (EXISTS ${CMAKE_SOURCE_DIR}/src/zipios++ AND NOT FREECAD_USE_EXTERNAL_ZIPIOS) SET(zipios_SRCS ../zipios++/backbuffer.h ../zipios++/basicentry.cpp @@ -122,12 +122,7 @@ SET(zipios_SRCS ../zipios++/zipoutputstream.h ) SOURCE_GROUP("zipios" FILES ${zipios_SRCS}) -else (EXISTS ${CMAKE_SOURCE_DIR}/src/zipios++ AND NOT FREECAD_BUILD_DEBIAN) - set(FreeCADBase_LIBS - ${FreeCADBase_LIBS} - -lzipios - ) -endif (EXISTS ${CMAKE_SOURCE_DIR}/src/zipios++ AND NOT FREECAD_BUILD_DEBIAN) +endif () SET(pycxx_SRCS ../CXX/Config.hxx @@ -293,7 +288,7 @@ SET(FreeCADBase_SRCS ) # Use external zipios++ if specified. -if(USE_EXTERNAL_ZIPIOS) +if(FREECAD_USE_EXTERNAL_ZIPIOS) find_library(ZIPIOS_LIBRARY zipios) find_path(ZIPIOS_INCLUDES zipios++/zipios-config.h) if(ZIPIOS_LIBRARY) @@ -308,9 +303,9 @@ if(USE_EXTERNAL_ZIPIOS) else() message(FATAL_ERROR "Using external zipios++ was specified but was not found.") endif() -else(USE_EXTERNAL_ZIPIOS) +else(FREECAD_USE_EXTERNAL_ZIPIOS) list(APPEND FreeCADBase_SRCS ${zipios_SRCS}) -endif(USE_EXTERNAL_ZIPIOS) +endif(FREECAD_USE_EXTERNAL_ZIPIOS) if(MSVC) From 495c4016549f1af1bc7f778849dd5c65fc27a74a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 2 Jun 2012 14:12:43 -0300 Subject: [PATCH 276/517] Arch: Windows are now autosubtracted from support walls on creation --- src/Mod/Arch/ArchWindow.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 40b038aed..de7df1b6e 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -88,11 +88,27 @@ class _CommandWindow: def Activated(self): sel = FreeCADGui.Selection.getSelection() - FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Window"))) - FreeCADGui.doCommand("import Arch") - for obj in sel: - FreeCADGui.doCommand("Arch.makeWindow(FreeCAD.ActiveDocument."+obj.Name+")") - FreeCAD.ActiveDocument.commitTransaction() + if sel: + if Draft.getType(sel[0]) == "Wall": + FreeCADGui.activateWorkbench("SketcherWorkbench") + FreeCADGui.runCommand("Sketcher_NewSketch") + else: + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Window"))) + FreeCADGui.doCommand("import Arch") + for obj in sel: + FreeCADGui.doCommand("Arch.makeWindow(FreeCAD.ActiveDocument."+obj.Name+")") + if hasattr(obj,"Support"): + if obj.Support: + if isinstance(obj.Support,tuple): + s = obj.Support[0] + else: + s = obj.Support + w = FreeCAD.ActiveDocument.Objects[-1] # last created object + FreeCADGui.doCommand("Arch.removeComponents(FreeCAD.ActiveDocument."+w.Name+",host=FreeCAD.ActiveDocument."+s.Name+")") + elif Draft.isClone(w,"Window"): + if w.Objects[0].Inlist: + FreeCADGui.doCommand("Arch.removeComponents(FreeCAD.ActiveDocument."+w.Name+",host=FreeCAD.ActiveDocument."+w.Objects[0].Inlist[0].Name+")") + FreeCAD.ActiveDocument.commitTransaction() class _Window(ArchComponent.Component): "The Window object" From 3858f8a2684a19487c131ac1170334fe526e8b09 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 3 Jun 2012 01:26:55 +0200 Subject: [PATCH 277/517] Start implementing ActionSelector class --- src/3rdParty/Pivy-0.5/CMakeLists.txt | 2 +- src/Gui/Widgets.cpp | 111 +++++++++++++++++++++++---- src/Gui/Widgets.h | 24 ++++++ 3 files changed, 120 insertions(+), 17 deletions(-) diff --git a/src/3rdParty/Pivy-0.5/CMakeLists.txt b/src/3rdParty/Pivy-0.5/CMakeLists.txt index 3b71e24a1..fc810fb79 100644 --- a/src/3rdParty/Pivy-0.5/CMakeLists.txt +++ b/src/3rdParty/Pivy-0.5/CMakeLists.txt @@ -88,7 +88,7 @@ if(MSVC) debug ${PYTHON_DEBUG_LIBRARY} optimized ${PYTHON_LIBRARY}) else(MSVC) - set(CoinPy_LIBS + set(SoQtPy_LIBS ${SOQT_LIBRARIES} ${COIN3D_LIBRARY} ${PYTHON_LIBRARY}) diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp index 1db07b7cd..714774d06 100644 --- a/src/Gui/Widgets.cpp +++ b/src/Gui/Widgets.cpp @@ -23,7 +23,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include +# include # include # include # include @@ -102,6 +102,85 @@ void CommandIconView::onSelectionChanged(QListWidgetItem * item, QListWidgetItem emitSelectionChanged(item->toolTip()); } +// ------------------------------------------------------------------------------ + +ActionSelector::ActionSelector(QWidget* parent) + : QWidget(parent) +{ + moveActionRightButton = new QPushButton(this); + moveActionRightButton->setMinimumSize(QSize(30, 30)); + QIcon icon; + icon.addFile(QString::fromUtf8(":/icons/button_right.xpm"), QSize(), QIcon::Normal, QIcon::Off); + moveActionRightButton->setIcon(icon); + gridLayout->addWidget(moveActionRightButton, 1, 1, 1, 1); + + spacerItem = new QSpacerItem(33, 57, QSizePolicy::Minimum, QSizePolicy::Expanding); + gridLayout->addItem(spacerItem, 5, 1, 1, 1); + spacerItem1 = new QSpacerItem(33, 58, QSizePolicy::Minimum, QSizePolicy::Expanding); + gridLayout->addItem(spacerItem1, 0, 1, 1, 1); + + moveActionLeftButton = new QPushButton(this); + moveActionLeftButton->setMinimumSize(QSize(30, 30)); + QIcon icon1; + icon1.addFile(QString::fromUtf8(":/icons/button_left.xpm"), QSize(), QIcon::Normal, QIcon::Off); + moveActionLeftButton->setIcon(icon1); + moveActionLeftButton->setAutoDefault(true); + moveActionLeftButton->setDefault(false); + + gridLayout->addWidget(moveActionLeftButton, 2, 1, 1, 1); + + moveActionDownButton = new QPushButton(this); + moveActionDownButton->setMinimumSize(QSize(30, 30)); + QIcon icon2; + icon2.addFile(QString::fromUtf8(":/icons/button_down.xpm"), QSize(), QIcon::Normal, QIcon::Off); + moveActionDownButton->setIcon(icon2); + moveActionDownButton->setAutoDefault(true); + + gridLayout->addWidget(moveActionDownButton, 4, 1, 1, 1); + + moveActionUpButton = new QPushButton(this); + moveActionUpButton->setMinimumSize(QSize(30, 30)); + QIcon icon3; + icon3.addFile(QString::fromUtf8(":/icons/button_up.xpm"), QSize(), QIcon::Normal, QIcon::Off); + moveActionUpButton->setIcon(icon3); + + gridLayout->addWidget(moveActionUpButton, 3, 1, 1, 1); + + vboxLayout = new QVBoxLayout(); + vboxLayout->setContentsMargins(0, 0, 0, 0); + label_2 = new QLabel(this); + vboxLayout->addWidget(label_2); + + avalableTreeWidget = new QTreeWidget(this); + avalableTreeWidget->setRootIsDecorated(false); + avalableTreeWidget->setColumnCount(0); + vboxLayout->addWidget(avalableTreeWidget); + + gridLayout->addLayout(vboxLayout, 0, 0, 6, 1); + + vboxLayout1 = new QVBoxLayout(); + vboxLayout1->setContentsMargins(0, 0, 0, 0); + label = new QLabel(this); + vboxLayout1->addWidget(label); + + selectedTreeWidget = new QTreeWidget(this); + vboxLayout1->addWidget(selectedTreeWidget); + + gridLayout->addLayout(vboxLayout1, 0, 2, 6, 1); + + moveActionRightButton->setText(QString()); + moveActionLeftButton->setText(QString()); + moveActionDownButton->setText(QString()); + moveActionUpButton->setText(QString()); + label_2->setText(QApplication::translate("Gui::ActionSelector", "Available:", 0, QApplication::UnicodeUTF8)); + label->setText(QApplication::translate("Gui::ActionSelector", "Selected:", 0, QApplication::UnicodeUTF8)); +} + +ActionSelector::~ActionSelector() +{ +} + + // ------------------------------------------------------------------------------ /* TRANSLATOR Gui::AccelLineEdit */ @@ -628,10 +707,10 @@ StatusWidget::StatusWidget(QWidget* parent) label = new QLabel(this); label->setAlignment(Qt::AlignCenter); - QGridLayout* gridLayout = new QGridLayout(this); - gridLayout->setSpacing(6); - gridLayout->setMargin(9); - gridLayout->addWidget(label, 0, 0, 1, 1); + QGridLayout* gridLayout = new QGridLayout(this); + gridLayout->setSpacing(6); + gridLayout->setMargin(9); + gridLayout->addWidget(label, 0, 0, 1, 1); } StatusWidget::~StatusWidget() @@ -775,20 +854,20 @@ void LabelEditor::setText(const QString& s) void LabelEditor::changeText() { QDialog dlg(this); - QVBoxLayout* hboxLayout = new QVBoxLayout(&dlg); - QDialogButtonBox* buttonBox = new QDialogButtonBox(&dlg); - buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Close); + QVBoxLayout* hboxLayout = new QVBoxLayout(&dlg); + QDialogButtonBox* buttonBox = new QDialogButtonBox(&dlg); + buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Close); QPlainTextEdit *edit = new QPlainTextEdit(&dlg); edit->setPlainText(this->lineEdit->text()); - - hboxLayout->addWidget(edit); - hboxLayout->addWidget(buttonBox); - connect(buttonBox, SIGNAL(accepted()), &dlg, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), &dlg, SLOT(reject())); - if (dlg.exec() == QDialog::Accepted) { - this->lineEdit->setText(edit->toPlainText()); - } + + hboxLayout->addWidget(edit); + hboxLayout->addWidget(buttonBox); + connect(buttonBox, SIGNAL(accepted()), &dlg, SLOT(accept())); + connect(buttonBox, SIGNAL(rejected()), &dlg, SLOT(reject())); + if (dlg.exec() == QDialog::Accepted) { + this->lineEdit->setText(edit->toPlainText()); + } } /** diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index 16baf74b7..a13e407c6 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -63,6 +63,30 @@ Q_SIGNALS: // ------------------------------------------------------------------------------ +class ActionSelector : public QWidget +{ +public: + ActionSelector(QWidget* parent=0); + ~ActionSelector(); + +private: + QGridLayout *gridLayout; + QPushButton *moveActionRightButton; + QSpacerItem *spacerItem; + QSpacerItem *spacerItem1; + QPushButton *moveActionLeftButton; + QPushButton *moveActionDownButton; + QPushButton *moveActionUpButton; + QVBoxLayout *vboxLayout; + QLabel *label_2; + QTreeWidget *avalableTreeWidget; + QVBoxLayout *vboxLayout1; + QLabel *label; + QTreeWidget *selectedTreeWidget; +}; + +// ------------------------------------------------------------------------------ + /** * The AccelLineEdit class provides a lineedit to specfify shortcuts. * \author Werner Mayer From 5174778cc01c99697e1cb85a62239de89362151c Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 3 Jun 2012 12:11:38 +0200 Subject: [PATCH 278/517] 0000719: Implement a KActionSelector-like widget --- src/Gui/Widgets.cpp | 225 +++++++++++++++---- src/Gui/Widgets.h | 43 +++- src/Tools/plugins/widget/FreeCAD_widgets.sln | 20 -- src/Tools/plugins/widget/customwidgets.cpp | 88 ++++++++ src/Tools/plugins/widget/customwidgets.h | 27 +++ src/Tools/plugins/widget/plugin.cpp | 74 ++++++ 6 files changed, 407 insertions(+), 70 deletions(-) delete mode 100644 src/Tools/plugins/widget/FreeCAD_widgets.sln diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp index 714774d06..98a87442c 100644 --- a/src/Gui/Widgets.cpp +++ b/src/Gui/Widgets.cpp @@ -104,82 +104,229 @@ void CommandIconView::onSelectionChanged(QListWidgetItem * item, QListWidgetItem // ------------------------------------------------------------------------------ +/* TRANSLATOR Gui::ActionSelector */ + ActionSelector::ActionSelector(QWidget* parent) : QWidget(parent) { - moveActionRightButton = new QPushButton(this); - moveActionRightButton->setMinimumSize(QSize(30, 30)); + addButton = new QPushButton(this); + addButton->setMinimumSize(QSize(30, 30)); QIcon icon; icon.addFile(QString::fromUtf8(":/icons/button_right.xpm"), QSize(), QIcon::Normal, QIcon::Off); - moveActionRightButton->setIcon(icon); - gridLayout->addWidget(moveActionRightButton, 1, 1, 1, 1); + addButton->setIcon(icon); + gridLayout = new QGridLayout(this); + gridLayout->addWidget(addButton, 1, 1, 1, 1); spacerItem = new QSpacerItem(33, 57, QSizePolicy::Minimum, QSizePolicy::Expanding); gridLayout->addItem(spacerItem, 5, 1, 1, 1); spacerItem1 = new QSpacerItem(33, 58, QSizePolicy::Minimum, QSizePolicy::Expanding); gridLayout->addItem(spacerItem1, 0, 1, 1, 1); - moveActionLeftButton = new QPushButton(this); - moveActionLeftButton->setMinimumSize(QSize(30, 30)); + removeButton = new QPushButton(this); + removeButton->setMinimumSize(QSize(30, 30)); QIcon icon1; icon1.addFile(QString::fromUtf8(":/icons/button_left.xpm"), QSize(), QIcon::Normal, QIcon::Off); - moveActionLeftButton->setIcon(icon1); - moveActionLeftButton->setAutoDefault(true); - moveActionLeftButton->setDefault(false); + removeButton->setIcon(icon1); + removeButton->setAutoDefault(true); + removeButton->setDefault(false); - gridLayout->addWidget(moveActionLeftButton, 2, 1, 1, 1); + gridLayout->addWidget(removeButton, 2, 1, 1, 1); - moveActionDownButton = new QPushButton(this); - moveActionDownButton->setMinimumSize(QSize(30, 30)); - QIcon icon2; - icon2.addFile(QString::fromUtf8(":/icons/button_down.xpm"), QSize(), QIcon::Normal, QIcon::Off); - moveActionDownButton->setIcon(icon2); - moveActionDownButton->setAutoDefault(true); - - gridLayout->addWidget(moveActionDownButton, 4, 1, 1, 1); - - moveActionUpButton = new QPushButton(this); - moveActionUpButton->setMinimumSize(QSize(30, 30)); + upButton = new QPushButton(this); + upButton->setMinimumSize(QSize(30, 30)); QIcon icon3; icon3.addFile(QString::fromUtf8(":/icons/button_up.xpm"), QSize(), QIcon::Normal, QIcon::Off); - moveActionUpButton->setIcon(icon3); + upButton->setIcon(icon3); - gridLayout->addWidget(moveActionUpButton, 3, 1, 1, 1); + gridLayout->addWidget(upButton, 3, 1, 1, 1); + + downButton = new QPushButton(this); + downButton->setMinimumSize(QSize(30, 30)); + QIcon icon2; + icon2.addFile(QString::fromUtf8(":/icons/button_down.xpm"), QSize(), QIcon::Normal, QIcon::Off); + downButton->setIcon(icon2); + downButton->setAutoDefault(true); + + gridLayout->addWidget(downButton, 4, 1, 1, 1); vboxLayout = new QVBoxLayout(); vboxLayout->setContentsMargins(0, 0, 0, 0); - label_2 = new QLabel(this); - vboxLayout->addWidget(label_2); + labelAvailable = new QLabel(this); + vboxLayout->addWidget(labelAvailable); - avalableTreeWidget = new QTreeWidget(this); - avalableTreeWidget->setRootIsDecorated(false); - avalableTreeWidget->setColumnCount(0); - vboxLayout->addWidget(avalableTreeWidget); + availableWidget = new QTreeWidget(this); + availableWidget->setRootIsDecorated(false); + availableWidget->setHeaderLabels(QStringList() << QString()); + availableWidget->header()->hide(); + vboxLayout->addWidget(availableWidget); gridLayout->addLayout(vboxLayout, 0, 0, 6, 1); vboxLayout1 = new QVBoxLayout(); vboxLayout1->setContentsMargins(0, 0, 0, 0); - label = new QLabel(this); - vboxLayout1->addWidget(label); + labelSelected = new QLabel(this); + vboxLayout1->addWidget(labelSelected); - selectedTreeWidget = new QTreeWidget(this); - vboxLayout1->addWidget(selectedTreeWidget); + selectedWidget = new QTreeWidget(this); + selectedWidget->setRootIsDecorated(false); + selectedWidget->setHeaderLabels(QStringList() << QString()); + selectedWidget->header()->hide(); + vboxLayout1->addWidget(selectedWidget); gridLayout->addLayout(vboxLayout1, 0, 2, 6, 1); - moveActionRightButton->setText(QString()); - moveActionLeftButton->setText(QString()); - moveActionDownButton->setText(QString()); - moveActionUpButton->setText(QString()); - label_2->setText(QApplication::translate("Gui::ActionSelector", "Available:", 0, QApplication::UnicodeUTF8)); - label->setText(QApplication::translate("Gui::ActionSelector", "Selected:", 0, QApplication::UnicodeUTF8)); + addButton->setText(QString()); + removeButton->setText(QString()); + upButton->setText(QString()); + downButton->setText(QString()); + + connect(addButton, SIGNAL(clicked()), + this, SLOT(on_addButton_clicked()) ); + connect(removeButton, SIGNAL(clicked()), + this, SLOT(on_removeButton_clicked()) ); + connect(upButton, SIGNAL(clicked()), + this, SLOT(on_upButton_clicked()) ); + connect(downButton, SIGNAL(clicked()), + this, SLOT(on_downButton_clicked()) ); + connect(availableWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), + this, SLOT(onItemDoubleClicked(QTreeWidgetItem*,int)) ); + connect(selectedWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), + this, SLOT(onItemDoubleClicked(QTreeWidgetItem*,int)) ); + connect(availableWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), + this, SLOT(onItemChanged(QTreeWidgetItem *,int)) ); + connect(selectedWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), + this, SLOT(onItemChanged(QTreeWidgetItem *,int)) ); + retranslateUi(); } ActionSelector::~ActionSelector() { } +void ActionSelector::retranslateUi() +{ + labelAvailable->setText(QApplication::translate("Gui::ActionSelector", "Available:", 0, QApplication::UnicodeUTF8)); + labelSelected->setText(QApplication::translate("Gui::ActionSelector", "Selected:", 0, QApplication::UnicodeUTF8)); + addButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Add", 0, QApplication::UnicodeUTF8)); + removeButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Remove", 0, QApplication::UnicodeUTF8)); + upButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Move up", 0, QApplication::UnicodeUTF8)); + downButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Move down", 0, QApplication::UnicodeUTF8)); +} + +void ActionSelector::changeEvent(QEvent* event) +{ + if (event->type() == QEvent::LanguageChange) { + retranslateUi(); + } + QWidget::changeEvent(event); +} + +void ActionSelector::keyPressEvent(QKeyEvent* event) +{ + if ((event->modifiers() & Qt::ControlModifier)) { + switch (event->key()) + { + case Qt::Key_Right: + on_addButton_clicked(); + break; + case Qt::Key_Left: + on_removeButton_clicked(); + break; + case Qt::Key_Up: + on_upButton_clicked(); + break; + case Qt::Key_Down: + on_downButton_clicked(); + break; + default: + event->ignore(); + return; + } + } +} + +void ActionSelector::setButtonsEnabled() +{ + addButton->setEnabled(availableWidget->indexOfTopLevelItem(availableWidget->currentItem()) > -1); + removeButton->setEnabled(selectedWidget->indexOfTopLevelItem(selectedWidget->currentItem()) > -1); + upButton->setEnabled(selectedWidget->indexOfTopLevelItem(selectedWidget->currentItem()) > 0); + downButton->setEnabled(selectedWidget->indexOfTopLevelItem(selectedWidget->currentItem()) > -1 && + selectedWidget->indexOfTopLevelItem(selectedWidget->currentItem()) < selectedWidget->topLevelItemCount() - 1); +} + +void ActionSelector::onItemChanged(QTreeWidgetItem * /*item*/, int /*column*/) +{ + setButtonsEnabled(); +} + +void ActionSelector::onItemDoubleClicked(QTreeWidgetItem * item, int column) +{ + QTreeWidget* treeWidget = item->treeWidget(); + if (treeWidget == availableWidget) { + int index = availableWidget->indexOfTopLevelItem(item); + item = availableWidget->takeTopLevelItem(index); + availableWidget->setCurrentItem(0); + selectedWidget->addTopLevelItem(item); + selectedWidget->setCurrentItem(item); + } + else if (treeWidget == selectedWidget) { + int index = selectedWidget->indexOfTopLevelItem(item); + item = selectedWidget->takeTopLevelItem(index); + selectedWidget->setCurrentItem(0); + availableWidget->addTopLevelItem(item); + availableWidget->setCurrentItem(item); + } +} + +void ActionSelector::on_addButton_clicked() +{ + QTreeWidgetItem* item = availableWidget->currentItem(); + if (item) { + int index = availableWidget->indexOfTopLevelItem(item); + item = availableWidget->takeTopLevelItem(index); + availableWidget->setCurrentItem(0); + selectedWidget->addTopLevelItem(item); + selectedWidget->setCurrentItem(item); + } +} + +void ActionSelector::on_removeButton_clicked() +{ + QTreeWidgetItem* item = selectedWidget->currentItem(); + if (item) { + int index = selectedWidget->indexOfTopLevelItem(item); + item = selectedWidget->takeTopLevelItem(index); + selectedWidget->setCurrentItem(0); + availableWidget->addTopLevelItem(item); + availableWidget->setCurrentItem(item); + } +} + +void ActionSelector::on_upButton_clicked() +{ + QTreeWidgetItem* item = selectedWidget->currentItem(); + if (item && selectedWidget->isItemSelected(item)) { + int index = selectedWidget->indexOfTopLevelItem(item); + if (index > 0) { + selectedWidget->takeTopLevelItem(index); + selectedWidget->insertTopLevelItem(index-1, item); + selectedWidget->setCurrentItem(item); + } + } +} + +void ActionSelector::on_downButton_clicked() +{ + QTreeWidgetItem* item = selectedWidget->currentItem(); + if (item && selectedWidget->isItemSelected(item)) { + int index = selectedWidget->indexOfTopLevelItem(item); + if (index < selectedWidget->topLevelItemCount()-1) { + selectedWidget->takeTopLevelItem(index); + selectedWidget->insertTopLevelItem(index+1, item); + selectedWidget->setCurrentItem(item); + } + } +} // ------------------------------------------------------------------------------ diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index a13e407c6..afdddba89 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -63,26 +63,47 @@ Q_SIGNALS: // ------------------------------------------------------------------------------ -class ActionSelector : public QWidget +class GuiExport ActionSelector : public QWidget { + Q_OBJECT + public: ActionSelector(QWidget* parent=0); ~ActionSelector(); + QTreeWidget* availableTreeWidget() const + { return availableWidget; } + QTreeWidget* selectedTreeWidget() const + { return selectedWidget; } + +private: + void keyPressEvent(QKeyEvent *); + void changeEvent(QEvent*); + void retranslateUi(); + void setButtonsEnabled(); + +private Q_SLOTS: + void on_addButton_clicked(); + void on_removeButton_clicked(); + void on_upButton_clicked(); + void on_downButton_clicked(); + void onItemChanged(QTreeWidgetItem * item, int column); + void onItemDoubleClicked(QTreeWidgetItem * item, int column); + private: QGridLayout *gridLayout; - QPushButton *moveActionRightButton; + QVBoxLayout *vboxLayout; + QVBoxLayout *vboxLayout1; + QPushButton *addButton; + QPushButton *removeButton; + QPushButton *upButton; + QPushButton *downButton; + QLabel *labelAvailable; + QLabel *labelSelected; + QTreeWidget *availableWidget; + QTreeWidget *selectedWidget; QSpacerItem *spacerItem; QSpacerItem *spacerItem1; - QPushButton *moveActionLeftButton; - QPushButton *moveActionDownButton; - QPushButton *moveActionUpButton; - QVBoxLayout *vboxLayout; - QLabel *label_2; - QTreeWidget *avalableTreeWidget; - QVBoxLayout *vboxLayout1; - QLabel *label; - QTreeWidget *selectedTreeWidget; }; // ------------------------------------------------------------------------------ diff --git a/src/Tools/plugins/widget/FreeCAD_widgets.sln b/src/Tools/plugins/widget/FreeCAD_widgets.sln deleted file mode 100644 index 98489c937..000000000 --- a/src/Tools/plugins/widget/FreeCAD_widgets.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeCAD_widgets", "FreeCAD_widgets.vcproj", "{50CDC58F-0FF6-3CFA-BF66-E79DA98E7DF0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {50CDC58F-0FF6-3CFA-BF66-E79DA98E7DF0}.Debug|Win32.ActiveCfg = Debug|Win32 - {50CDC58F-0FF6-3CFA-BF66-E79DA98E7DF0}.Debug|Win32.Build.0 = Debug|Win32 - {50CDC58F-0FF6-3CFA-BF66-E79DA98E7DF0}.Release|Win32.ActiveCfg = Release|Win32 - {50CDC58F-0FF6-3CFA-BF66-E79DA98E7DF0}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/Tools/plugins/widget/customwidgets.cpp b/src/Tools/plugins/widget/customwidgets.cpp index 6a2280377..9de8c0f82 100644 --- a/src/Tools/plugins/widget/customwidgets.cpp +++ b/src/Tools/plugins/widget/customwidgets.cpp @@ -330,6 +330,94 @@ void AccelLineEdit::keyPressEvent ( QKeyEvent * e) // ------------------------------------------------------------------------------ +ActionSelector::ActionSelector(QWidget* parent) + : QWidget(parent) +{ + addButton = new QPushButton(this); + addButton->setMinimumSize(QSize(30, 30)); + QIcon icon; + icon.addFile(QString::fromUtf8(":/icons/button_right.xpm"), QSize(), QIcon::Normal, QIcon::Off); + addButton->setIcon(icon); + gridLayout = new QGridLayout(this); + gridLayout->addWidget(addButton, 1, 1, 1, 1); + + spacerItem = new QSpacerItem(33, 57, QSizePolicy::Minimum, QSizePolicy::Expanding); + gridLayout->addItem(spacerItem, 5, 1, 1, 1); + spacerItem1 = new QSpacerItem(33, 58, QSizePolicy::Minimum, QSizePolicy::Expanding); + gridLayout->addItem(spacerItem1, 0, 1, 1, 1); + + removeButton = new QPushButton(this); + removeButton->setMinimumSize(QSize(30, 30)); + QIcon icon1; + icon1.addFile(QString::fromUtf8(":/icons/button_left.xpm"), QSize(), QIcon::Normal, QIcon::Off); + removeButton->setIcon(icon1); + removeButton->setAutoDefault(true); + removeButton->setDefault(false); + + gridLayout->addWidget(removeButton, 2, 1, 1, 1); + + upButton = new QPushButton(this); + upButton->setMinimumSize(QSize(30, 30)); + QIcon icon3; + icon3.addFile(QString::fromUtf8(":/icons/button_up.xpm"), QSize(), QIcon::Normal, QIcon::Off); + upButton->setIcon(icon3); + + gridLayout->addWidget(upButton, 3, 1, 1, 1); + + downButton = new QPushButton(this); + downButton->setMinimumSize(QSize(30, 30)); + QIcon icon2; + icon2.addFile(QString::fromUtf8(":/icons/button_down.xpm"), QSize(), QIcon::Normal, QIcon::Off); + downButton->setIcon(icon2); + downButton->setAutoDefault(true); + + gridLayout->addWidget(downButton, 4, 1, 1, 1); + + vboxLayout = new QVBoxLayout(); + vboxLayout->setContentsMargins(0, 0, 0, 0); + labelAvailable = new QLabel(this); + vboxLayout->addWidget(labelAvailable); + + availableWidget = new QTreeWidget(this); + availableWidget->setRootIsDecorated(false); + availableWidget->setHeaderLabels(QStringList() << QString()); + availableWidget->header()->hide(); + vboxLayout->addWidget(availableWidget); + + gridLayout->addLayout(vboxLayout, 0, 0, 6, 1); + + vboxLayout1 = new QVBoxLayout(); + vboxLayout1->setContentsMargins(0, 0, 0, 0); + labelSelected = new QLabel(this); + vboxLayout1->addWidget(labelSelected); + + selectedWidget = new QTreeWidget(this); + selectedWidget->setRootIsDecorated(false); + selectedWidget->setHeaderLabels(QStringList() << QString()); + selectedWidget->header()->hide(); + vboxLayout1->addWidget(selectedWidget); + + gridLayout->addLayout(vboxLayout1, 0, 2, 6, 1); + + addButton->setText(QString()); + removeButton->setText(QString()); + upButton->setText(QString()); + downButton->setText(QString()); + + labelAvailable->setText(QApplication::translate("Gui::ActionSelector", "Available:", 0, QApplication::UnicodeUTF8)); + labelSelected->setText(QApplication::translate("Gui::ActionSelector", "Selected:", 0, QApplication::UnicodeUTF8)); + addButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Add", 0, QApplication::UnicodeUTF8)); + removeButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Remove", 0, QApplication::UnicodeUTF8)); + upButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Move up", 0, QApplication::UnicodeUTF8)); + downButton->setToolTip(QApplication::translate("Gui::ActionSelector", "Move down", 0, QApplication::UnicodeUTF8)); +} + +ActionSelector::~ActionSelector() +{ +} + +// -------------------------------------------------------------------- + CommandIconView::CommandIconView ( QWidget * parent ) : QListWidget(parent) { diff --git a/src/Tools/plugins/widget/customwidgets.h b/src/Tools/plugins/widget/customwidgets.h index 2543a119e..013f6ba4a 100644 --- a/src/Tools/plugins/widget/customwidgets.h +++ b/src/Tools/plugins/widget/customwidgets.h @@ -37,6 +37,7 @@ #include #include #include +#include namespace Gui { @@ -176,6 +177,32 @@ protected: // ------------------------------------------------------------------------------ +class ActionSelector : public QWidget +{ + Q_OBJECT + +public: + ActionSelector(QWidget* parent=0); + ~ActionSelector(); + +private: + QGridLayout *gridLayout; + QVBoxLayout *vboxLayout; + QVBoxLayout *vboxLayout1; + QPushButton *addButton; + QPushButton *removeButton; + QPushButton *upButton; + QPushButton *downButton; + QLabel *labelAvailable; + QLabel *labelSelected; + QTreeWidget *availableWidget; + QTreeWidget *selectedWidget; + QSpacerItem *spacerItem; + QSpacerItem *spacerItem1; +}; + +// ------------------------------------------------------------------------------ + class CommandIconView : public QListWidget { Q_OBJECT diff --git a/src/Tools/plugins/widget/plugin.cpp b/src/Tools/plugins/widget/plugin.cpp index d0a2aca92..3769f37d4 100644 --- a/src/Tools/plugins/widget/plugin.cpp +++ b/src/Tools/plugins/widget/plugin.cpp @@ -340,6 +340,79 @@ public: } }; +/* XPM */ +static const char *actionselector_pixmap[]={ +"22 22 6 1", +"a c #000000", +"# c #000080", +"b c #008080", +"c c #808080", +"d c #c0c0c0", +". c #ffffff", +"......................", +"......................", +"......................", +"...#aaaaaaaaaaaaaa#...", +".baccccccccccccccccab.", +".acccddddddddddddddca.", +"#ccd................d#", +"acc.................da", +"acd.......d....ca.ac.a", +"acd......db......a...a", +"acd.dbbb.dbbbd...a...a", +"acd.ccdbddb.db...a...a", +"acd.dbbbddb..b...a...a", +"acd.bd.bddb..b...a...a", +"acd.bbbbddbbbc...a...a", +"acd..d.....dd..ca.acda", +"#cd.................d#", +".ac................da.", +".badd............dda#.", +"...#aaaaaaaaaaaaaa#...", +"......................", +"......................"}; + +class ActionSelectorPlugin : public QDesignerCustomWidgetInterface +{ + Q_INTERFACES(QDesignerCustomWidgetInterface) +public: + ActionSelectorPlugin() + { + } + QWidget *createWidget(QWidget *parent) + { + return new Gui::ActionSelector(parent); + } + QString group() const + { + return QLatin1String("Input Widgets"); + } + QIcon icon() const + { + return QIcon( QPixmap( actionselector_pixmap ) ); + } + QString includeFile() const + { + return QLatin1String("Gui/Widgets.h"); + } + QString toolTip() const + { + return QLatin1String("Action Selector"); + } + QString whatsThis() const + { + return QLatin1String("A widget to select actions."); + } + bool isContainer() const + { + return false; + } + QString name() const + { + return QLatin1String("Gui::ActionSelector"); + } +}; + /* XPM */ static const char *iconview_pixmap[]={ "22 22 10 1", @@ -1061,6 +1134,7 @@ QList CustomWidgetPlugin::customWidgets () con cw.append(new LocationWidgetPlugin); cw.append(new FileChooserPlugin); cw.append(new AccelLineEditPlugin); + cw.append(new ActionSelectorPlugin); cw.append(new CommandIconViewPlugin); cw.append(new UIntSpinBoxPlugin); cw.append(new ColorButtonPlugin); From 0623cd9b5e604dcf4def465e2c598ef9be68f7ae Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 3 Jun 2012 14:22:05 +0200 Subject: [PATCH 279/517] Use ActionSelector in Loft panel and expose to Python by UiLoader --- src/Gui/Application.cpp | 4 + src/Gui/WidgetFactory.cpp | 74 +++++++++++++ src/Gui/WidgetFactory.h | 23 +++- src/Gui/Widgets.cpp | 38 ++++++- src/Gui/Widgets.h | 6 +- src/Gui/resource.cpp | 1 + src/Mod/Part/Gui/TaskLoft.cpp | 66 ++---------- src/Mod/Part/Gui/TaskLoft.h | 4 - src/Mod/Part/Gui/TaskLoft.ui | 192 +++++----------------------------- 9 files changed, 174 insertions(+), 234 deletions(-) diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index d62c36b4e..a4c3542b3 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -341,6 +341,10 @@ Application::Application(bool GUIenabled) "workbenches."); Py::Module(module).setAttr(std::string("ActiveDocument"),Py::None()); + UiLoaderPy::init_type(); + Base::Interpreter().addType(UiLoaderPy::type_object(), + module,"UiLoader"); + //insert Selection module PyObject* pSelectionModule = Py_InitModule3("Selection", SelectionSingleton::Methods, "Selection module"); diff --git a/src/Gui/WidgetFactory.cpp b/src/Gui/WidgetFactory.cpp index c074fcd7e..fd734154f 100644 --- a/src/Gui/WidgetFactory.cpp +++ b/src/Gui/WidgetFactory.cpp @@ -23,6 +23,7 @@ #include "PreCompiled.h" +#include #include #include #include @@ -194,6 +195,79 @@ QWidget* UiLoader::createWidget(const QString & className, QWidget * parent, // ---------------------------------------------------- +PyObject *UiLoaderPy::PyMake(struct _typeobject *type, PyObject * args, PyObject * kwds) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + return new UiLoaderPy(); +} + +void UiLoaderPy::init_type() +{ + behaviors().name("UiLoader"); + behaviors().doc("UiLoader to create widgets"); + behaviors().type_object()->tp_new = &PyMake; + // you must have overwritten the virtual functions + behaviors().supportRepr(); + behaviors().supportGetattr(); + behaviors().supportSetattr(); + add_varargs_method("createWidget",&UiLoaderPy::createWidget,"createWidget()"); +} + +UiLoaderPy::UiLoaderPy() +{ +} + +UiLoaderPy::~UiLoaderPy() +{ +} + +Py::Object UiLoaderPy::repr() +{ + std::string s; + std::ostringstream s_out; + s_out << "Ui loader"; + return Py::String(s_out.str()); +} + +Py::Object UiLoaderPy::createWidget(const Py::Tuple& args) +{ + Py::Module sipmod(PyImport_AddModule((char*)"sip")); + Py::Module qtmod(PyImport_ImportModule((char*)"PyQt4.Qt")); + + // 1st argument + std::string className = (std::string)Py::String(args[0]); + + // 2nd argument + QWidget* parent = 0; + if (args.size() > 1) { + Py::Callable func = sipmod.getDict().getItem("unwrapinstance"); + Py::Tuple arguments(1); + arguments[0] = args[1]; //PyQt pointer + Py::Object result = func.apply(arguments); + void* ptr = PyLong_AsVoidPtr(result.ptr()); + QObject* object = reinterpret_cast(ptr); + if (object) + parent = qobject_cast(object); + } + + // 3rd argument + std::string objectName; + if (args.size() > 2) { + objectName = (std::string)Py::String(args[2]); + } + + QWidget* widget = loader.createWidget(QString::fromAscii(className.c_str()), parent, + QString::fromAscii(objectName.c_str())); + Py::Callable func = sipmod.getDict().getItem("wrapinstance"); + Py::Tuple arguments(2); + arguments[0] = Py::asObject(PyLong_FromVoidPtr(widget)); + arguments[1] = qtmod.getDict().getItem("QWidget"); + return func.apply(arguments); +} + +// ---------------------------------------------------- + WidgetFactorySupplier* WidgetFactorySupplier::_pcSingleton = 0L; WidgetFactorySupplier & WidgetFactorySupplier::instance() diff --git a/src/Gui/WidgetFactory.h b/src/Gui/WidgetFactory.h index 8f20c8864..705e4c36b 100644 --- a/src/Gui/WidgetFactory.h +++ b/src/Gui/WidgetFactory.h @@ -32,6 +32,7 @@ #include "DlgPreferencesImp.h" #include "DlgCustomizeImp.h" #include "PropertyPage.h" +#include namespace Gui { namespace Dialog{ @@ -85,13 +86,33 @@ public: * Fore more details see the documentation to QWidgetFactory. */ QWidget* createWidget(const QString & className, QWidget * parent=0, - const QString& name =QString()); + const QString& name = QString()); private: QStringList cw; }; // -------------------------------------------------------------------- +class UiLoaderPy : public Py::PythonExtension +{ +public: + static void init_type(void); // announce properties and methods + + UiLoaderPy(); + ~UiLoaderPy(); + + Py::Object repr(); + Py::Object createWidget(const Py::Tuple&); + +private: + static PyObject *PyMake(struct _typeobject *, PyObject *, PyObject *); + +private: + UiLoader loader; +}; + +// -------------------------------------------------------------------- + /** * The WidgetProducer class is a value-based template class that provides * the ability to create widgets dynamically. diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp index 98a87442c..d4e66e3be 100644 --- a/src/Gui/Widgets.cpp +++ b/src/Gui/Widgets.cpp @@ -110,6 +110,7 @@ ActionSelector::ActionSelector(QWidget* parent) : QWidget(parent) { addButton = new QPushButton(this); + addButton->setObjectName(QLatin1String("addButton")); addButton->setMinimumSize(QSize(30, 30)); QIcon icon; icon.addFile(QString::fromUtf8(":/icons/button_right.xpm"), QSize(), QIcon::Normal, QIcon::Off); @@ -123,6 +124,7 @@ ActionSelector::ActionSelector(QWidget* parent) gridLayout->addItem(spacerItem1, 0, 1, 1, 1); removeButton = new QPushButton(this); + removeButton->setObjectName(QLatin1String("removeButton")); removeButton->setMinimumSize(QSize(30, 30)); QIcon icon1; icon1.addFile(QString::fromUtf8(":/icons/button_left.xpm"), QSize(), QIcon::Normal, QIcon::Off); @@ -133,6 +135,7 @@ ActionSelector::ActionSelector(QWidget* parent) gridLayout->addWidget(removeButton, 2, 1, 1, 1); upButton = new QPushButton(this); + upButton->setObjectName(QLatin1String("upButton")); upButton->setMinimumSize(QSize(30, 30)); QIcon icon3; icon3.addFile(QString::fromUtf8(":/icons/button_up.xpm"), QSize(), QIcon::Normal, QIcon::Off); @@ -141,6 +144,7 @@ ActionSelector::ActionSelector(QWidget* parent) gridLayout->addWidget(upButton, 3, 1, 1, 1); downButton = new QPushButton(this); + downButton->setObjectName(QLatin1String("downButton")); downButton->setMinimumSize(QSize(30, 30)); QIcon icon2; icon2.addFile(QString::fromUtf8(":/icons/button_down.xpm"), QSize(), QIcon::Normal, QIcon::Off); @@ -155,6 +159,7 @@ ActionSelector::ActionSelector(QWidget* parent) vboxLayout->addWidget(labelAvailable); availableWidget = new QTreeWidget(this); + availableWidget->setObjectName(QLatin1String("availableTreeWidget")); availableWidget->setRootIsDecorated(false); availableWidget->setHeaderLabels(QStringList() << QString()); availableWidget->header()->hide(); @@ -168,6 +173,7 @@ ActionSelector::ActionSelector(QWidget* parent) vboxLayout1->addWidget(labelSelected); selectedWidget = new QTreeWidget(this); + selectedWidget->setObjectName(QLatin1String("selectedTreeWidget")); selectedWidget->setRootIsDecorated(false); selectedWidget->setHeaderLabels(QStringList() << QString()); selectedWidget->header()->hide(); @@ -192,17 +198,39 @@ ActionSelector::ActionSelector(QWidget* parent) this, SLOT(onItemDoubleClicked(QTreeWidgetItem*,int)) ); connect(selectedWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(onItemDoubleClicked(QTreeWidgetItem*,int)) ); - connect(availableWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), - this, SLOT(onItemChanged(QTreeWidgetItem *,int)) ); - connect(selectedWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), - this, SLOT(onItemChanged(QTreeWidgetItem *,int)) ); + connect(availableWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem *)), + this, SLOT(onCurrentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)) ); + connect(selectedWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem *)), + this, SLOT(onCurrentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)) ); retranslateUi(); + setButtonsEnabled(); } ActionSelector::~ActionSelector() { } +void ActionSelector::setSelectedLabel(const QString& label) +{ + labelSelected->setText(label); +} + +QString ActionSelector::selectedLabel() const +{ + return labelSelected->text(); +} + +void ActionSelector::setAvailableLabel(const QString& label) +{ + labelAvailable->setText(label); +} + +QString ActionSelector::availableLabel() const +{ + return labelAvailable->text(); +} + + void ActionSelector::retranslateUi() { labelAvailable->setText(QApplication::translate("Gui::ActionSelector", "Available:", 0, QApplication::UnicodeUTF8)); @@ -254,7 +282,7 @@ void ActionSelector::setButtonsEnabled() selectedWidget->indexOfTopLevelItem(selectedWidget->currentItem()) < selectedWidget->topLevelItemCount() - 1); } -void ActionSelector::onItemChanged(QTreeWidgetItem * /*item*/, int /*column*/) +void ActionSelector::onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*) { setButtonsEnabled(); } diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index afdddba89..70366a67f 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -75,6 +75,10 @@ public: { return availableWidget; } QTreeWidget* selectedTreeWidget() const { return selectedWidget; } + void setSelectedLabel(const QString&); + QString selectedLabel() const; + void setAvailableLabel(const QString&); + QString availableLabel() const; private: void keyPressEvent(QKeyEvent *); @@ -87,7 +91,7 @@ private Q_SLOTS: void on_removeButton_clicked(); void on_upButton_clicked(); void on_downButton_clicked(); - void onItemChanged(QTreeWidgetItem * item, int column); + void onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*); void onItemDoubleClicked(QTreeWidgetItem * item, int column); private: diff --git a/src/Gui/resource.cpp b/src/Gui/resource.cpp index 3143f1502..b7f3ce8fb 100644 --- a/src/Gui/resource.cpp +++ b/src/Gui/resource.cpp @@ -91,6 +91,7 @@ WidgetFactorySupplier::WidgetFactorySupplier() new WidgetProducer; new WidgetProducer; new WidgetProducer; + new WidgetProducer; new WidgetProducer; new WidgetProducer; new WidgetProducer; diff --git a/src/Mod/Part/Gui/TaskLoft.cpp b/src/Mod/Part/Gui/TaskLoft.cpp index b6d58885d..96c3417a2 100644 --- a/src/Mod/Part/Gui/TaskLoft.cpp +++ b/src/Mod/Part/Gui/TaskLoft.cpp @@ -68,10 +68,14 @@ LoftWidget::LoftWidget(QWidget* parent) Gui::Application::Instance->runPythonCode("import Part"); d->ui.setupUi(this); - connect(d->ui.treeWidgetWire, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + d->ui.selector->setAvailableLabel(tr("Vertex/Wire")); + d->ui.selector->setSelectedLabel(tr("Loft")); + + connect(d->ui.selector->availableTreeWidget(), SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); - connect(d->ui.treeWidgetLoft, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + connect(d->ui.selector->selectedTreeWidget(), SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + findShapes(); } @@ -105,7 +109,7 @@ void LoftWidget::findShapes() child->setData(0, Qt::UserRole, name); Gui::ViewProvider* vp = activeGui->getViewProvider(*it); if (vp) child->setIcon(0, vp->getIcon()); - d->ui.treeWidgetWire->addTopLevelItem(child); + d->ui.selector->availableTreeWidget()->addTopLevelItem(child); } } } @@ -125,13 +129,13 @@ bool LoftWidget::accept() QTextStream str(&list); - int count = d->ui.treeWidgetLoft->topLevelItemCount(); + int count = d->ui.selector->selectedTreeWidget()->topLevelItemCount(); if (count < 2) { QMessageBox::critical(this, tr("Too few elements"), tr("At least two vertices, edges or wires are required.")); return false; } for (int i=0; iui.treeWidgetLoft->topLevelItem(i); + QTreeWidgetItem* child = d->ui.selector->selectedTreeWidget()->topLevelItem(i); QString name = child->data(0, Qt::UserRole).toString(); str << "App.getDocument('" << d->document.c_str() << "')." << name << ", "; } @@ -177,61 +181,13 @@ void LoftWidget::onCurrentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* } } -void LoftWidget::on_addButton_clicked() -{ - QTreeWidgetItem* item = d->ui.treeWidgetWire->currentItem(); - if (item) { - int index = d->ui.treeWidgetWire->indexOfTopLevelItem(item); - item = d->ui.treeWidgetWire->takeTopLevelItem(index); - d->ui.treeWidgetWire->setCurrentItem(0); - d->ui.treeWidgetLoft->addTopLevelItem(item); - d->ui.treeWidgetLoft->setCurrentItem(item); - } -} - -void LoftWidget::on_removeButton_clicked() -{ - QTreeWidgetItem* item = d->ui.treeWidgetLoft->currentItem(); - if (item) { - int index = d->ui.treeWidgetLoft->indexOfTopLevelItem(item); - item = d->ui.treeWidgetLoft->takeTopLevelItem(index); - d->ui.treeWidgetLoft->setCurrentItem(0); - d->ui.treeWidgetWire->addTopLevelItem(item); - d->ui.treeWidgetWire->setCurrentItem(item); - } -} - -void LoftWidget::on_upButton_clicked() -{ - QTreeWidgetItem* item = d->ui.treeWidgetLoft->currentItem(); - if (item && d->ui.treeWidgetLoft->isItemSelected(item)) { - int index = d->ui.treeWidgetLoft->indexOfTopLevelItem(item); - if (index > 0) { - d->ui.treeWidgetLoft->takeTopLevelItem(index); - d->ui.treeWidgetLoft->insertTopLevelItem(index-1, item); - d->ui.treeWidgetLoft->setCurrentItem(item); - } - } -} - -void LoftWidget::on_downButton_clicked() -{ - QTreeWidgetItem* item = d->ui.treeWidgetLoft->currentItem(); - if (item && d->ui.treeWidgetLoft->isItemSelected(item)) { - int index = d->ui.treeWidgetLoft->indexOfTopLevelItem(item); - if (index < d->ui.treeWidgetLoft->topLevelItemCount()-1) { - d->ui.treeWidgetLoft->takeTopLevelItem(index); - d->ui.treeWidgetLoft->insertTopLevelItem(index+1, item); - d->ui.treeWidgetLoft->setCurrentItem(item); - } - } -} - void LoftWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); if (e->type() == QEvent::LanguageChange) { d->ui.retranslateUi(this); + d->ui.selector->setAvailableLabel(tr("Vertex/Wire")); + d->ui.selector->setSelectedLabel(tr("Loft")); } } diff --git a/src/Mod/Part/Gui/TaskLoft.h b/src/Mod/Part/Gui/TaskLoft.h index 82ac877a5..50d30771d 100644 --- a/src/Mod/Part/Gui/TaskLoft.h +++ b/src/Mod/Part/Gui/TaskLoft.h @@ -43,10 +43,6 @@ public: bool reject(); private Q_SLOTS: - void on_addButton_clicked(); - void on_removeButton_clicked(); - void on_upButton_clicked(); - void on_downButton_clicked(); void onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*); private: diff --git a/src/Mod/Part/Gui/TaskLoft.ui b/src/Mod/Part/Gui/TaskLoft.ui index 1dd0c6159..dd461047d 100644 --- a/src/Mod/Part/Gui/TaskLoft.ui +++ b/src/Mod/Part/Gui/TaskLoft.ui @@ -6,7 +6,7 @@ 0 0 - 324 + 336 326 @@ -14,172 +14,8 @@ Loft - - - - - Vertex/Wire - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 33 - 58 - - - - - - - - true - - - - 30 - 30 - - - - Move right - - - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - - - - - - - :/icons/button_right.xpm:/icons/button_right.xpm - - - - - - - true - - - - 30 - 30 - - - - Move left - - - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - - - - - - - :/icons/button_left.xpm:/icons/button_left.xpm - - - true - - - false - - - - - - - true - - - - 30 - 30 - - - - Move up - - - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - - - - - - - :/icons/button_up.xpm:/icons/button_up.xpm - - - - - - - true - - - - 30 - 30 - - - - Move down - - - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - - - - - - - :/icons/button_down.xpm:/icons/button_down.xpm - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 33 - 57 - - - - - - - - - - - Loft - - - + + @@ -188,15 +24,35 @@ - + Ruled surface + + + + Qt::Horizontal + + + + 130 + 20 + + + + + + + Gui::ActionSelector + QWidget +

Gui/Widgets.h
+ + From 50a9ddee434719cedeb39d1ff8c1d43cd49af156 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 3 Jun 2012 16:36:00 +0200 Subject: [PATCH 280/517] 0000706: copy- paste- crash --- src/App/PropertyLinks.cpp | 14 ++++++++++---- src/Gui/MergeDocuments.cpp | 13 +++++-------- src/Gui/Tree.cpp | 11 ++++++++--- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/App/PropertyLinks.cpp b/src/App/PropertyLinks.cpp index 6cc105808..9ffb1d033 100644 --- a/src/App/PropertyLinks.cpp +++ b/src/App/PropertyLinks.cpp @@ -130,12 +130,18 @@ void PropertyLink::Restore(Base::XMLReader &reader) assert(getContainer()->getTypeId().isDerivedFrom(App::DocumentObject::getClassTypeId()) ); if (name != "") { - DocumentObject *pcObject = static_cast(getContainer())-> - getDocument()->getObject(name.c_str()); - if (!pcObject) + DocumentObject* parent = static_cast(getContainer()); + DocumentObject* object = parent->getDocument()->getObject(name.c_str()); + if (!object) { Base::Console().Warning("Lost link to '%s' while loading, maybe " "an object was not loaded correctly\n",name.c_str()); - setValue(pcObject); + } + else if (parent == object) { + Base::Console().Warning("Object '%s' links to itself, nullify it\n",name.c_str()); + object = 0; + } + + setValue(object); } else { setValue(0); diff --git a/src/Gui/MergeDocuments.cpp b/src/Gui/MergeDocuments.cpp index 7addd29be..52713fa47 100644 --- a/src/Gui/MergeDocuments.cpp +++ b/src/Gui/MergeDocuments.cpp @@ -122,16 +122,13 @@ MergeDocuments::importObjects(std::istream& input) reader.readElement("Object"); std::string type = reader.getAttribute("type"); std::string name = reader.getAttribute("name"); - std::string docn = name; - - // remove number from end to avoid lengthy names - size_t lastpos = docn.length()-1; - while (docn[lastpos] >= 48 && docn[lastpos] <= 57) - lastpos--; - docn = docn.substr(0, lastpos+1); try { - App::DocumentObject* o = appdoc->addObject(type.c_str(),docn.c_str()); + // Use name from XML as is and do NOT remove trailing digits because + // otherwise we may cause a dependency to itself + // Example: Object 'Cut001' references object 'Cut' and removing the + // digits we make an object 'Cut' referencing itself. + App::DocumentObject* o = appdoc->addObject(type.c_str(),name.c_str()); objs.push_back(o); // use this name for the later access because an object with // the given name may already exist diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index ba3672d8c..c453662a5 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -830,9 +830,14 @@ void DocumentItem::slotChangeObject(const Gui::ViewProviderDocumentObject& view) children.insert(kt->second); QTreeWidgetItem* parent = kt->second->parent(); if (parent && parent != it->second) { - int index = parent->indexOfChild(kt->second); - parent->takeChild(index); - it->second->addChild(kt->second); + if (it->second != kt->second) { + int index = parent->indexOfChild(kt->second); + parent->takeChild(index); + it->second->addChild(kt->second); + } + else { + Base::Console().Warning("Gui::DocumentItem::slotChangedObject(): Object references to itself.\n"); + } } } else { From 8941868e0d9c4f356f62f5451e76bbfa547843bf Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 4 Jun 2012 01:31:26 +0200 Subject: [PATCH 281/517] Tmp. switch off gcc linker settings --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d2eaf684..6461a3e10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) # get linker errors as soon as possible and not at runtime e.g. for modules if(UNIX) - SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined") + # SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined") endif(UNIX) endif(CMAKE_COMPILER_IS_GNUCXX) From b701bfd1e1d665b0744c07c8618bd75682f3914b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 3 Jun 2012 23:44:20 -0300 Subject: [PATCH 282/517] Arch: Several bugfixes in arch objects --- src/Mod/Arch/ArchComponent.py | 4 +- src/Mod/Arch/ArchStructure.py | 20 +++++----- src/Mod/Arch/ArchWall.py | 33 ++++++++------- src/Mod/Arch/ArchWindow.py | 75 ++++++++++++++++++----------------- 4 files changed, 69 insertions(+), 63 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index c9fa5a347..13ad37204 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -257,9 +257,9 @@ class Component: obj.addProperty("App::PropertyLink","Base","Base", "The base object this component is built upon") obj.addProperty("App::PropertyLinkList","Additions","Base", - "Other shapes that are appended to this wall") + "Other shapes that are appended to this object") obj.addProperty("App::PropertyLinkList","Subtractions","Base", - "Other shapes that are subtracted from this wall") + "Other shapes that are subtracted from this object") obj.Proxy = self self.Type = "Component" self.Subvolume = None diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 7bf73cc1e..d257c4d92 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -163,17 +163,13 @@ class _Structure(ArchComponent.Component): base = Part.Face(base) base = base.extrude(normal) for app in obj.Additions: - base = base.oldFuse(app.Shape) - app.ViewObject.hide() # to be removed + if hasattr(app,"Shape"): + if not app.Shape.isNull(): + base = base.fuse(app.Shape) + app.ViewObject.hide() # to be removed for hole in obj.Subtractions: - cut = False - if hasattr(hole,"Proxy"): - if hasattr(hole.Proxy,"Subvolume"): - if hole.Proxy.Subvolume: - base = base.cut(hole.Proxy.Subvolume) - cut = True - if not cut: - if hasattr(obj,"Shape"): + if hasattr(hole,"Shape"): + if not hole.Shape.isNull(): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed if base: @@ -186,7 +182,9 @@ class _Structure(ArchComponent.Component): fsh.append(sh) obj.Shape = Part.makeCompound(fsh) else: - obj.Shape = base + if not base.isNull(): + base = base.removeSplitter() + obj.Shape = base if not DraftGeomUtils.isNull(pl): obj.Placement = pl class _ViewProviderStructure(ArchComponent.ViewProviderComponent): diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 4b9db7ee0..0bfa8f6e4 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -272,20 +272,23 @@ class _Wall(ArchComponent.Component): "returns a subvolume from a base object" import Part max_length = 0 + f = None for w in base.Shape.Wires: if w.BoundBox.DiagonalLength > max_length: max_length = w.BoundBox.DiagonalLength f = w - f = Part.Face(f) - n = f.normalAt(0,0) - v1 = DraftVecUtils.scaleTo(n,width) - f.translate(v1) - v2 = DraftVecUtils.neg(v1) - v2 = DraftVecUtils.scale(v1,-2) - f = f.extrude(v2) - if delta: - f.translate(delta) - return f + if f: + f = Part.Face(f) + n = f.normalAt(0,0) + v1 = DraftVecUtils.scaleTo(n,width) + f.translate(v1) + v2 = DraftVecUtils.neg(v1) + v2 = DraftVecUtils.scale(v1,-2) + f = f.extrude(v2) + if delta: + f.translate(delta) + return f + return None def createGeometry(self,obj): "builds the wall shape" @@ -368,27 +371,29 @@ class _Wall(ArchComponent.Component): else: temp = sh base = temp - base = base.removeSplitter() for app in obj.Additions: - base = base.oldFuse(app.Shape) + base = base.fuse(app.Shape) app.ViewObject.hide() #to be removed for hole in obj.Subtractions: if Draft.getType(hole) == "Window": # window if hole.Base and obj.Width: f = self.getSubVolume(hole.Base,width) - base = base.cut(f) + if f: + base = base.cut(f) elif Draft.isClone(hole,"Window"): if hole.Objects[0].Base and width: f = self.getSubVolume(hole.Objects[0].Base,width,hole.Placement.Base) - base = base.cut(f) + if f: + base = base.cut(f) elif hasattr(hole,"Shape"): if not hole.Shape.isNull(): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed if base: + base.removeSplitter() obj.Shape = base if not DraftGeomUtils.isNull(pl): obj.Placement = pl diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index de7df1b6e..2c20b03ca 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -117,6 +117,7 @@ class _Window(ArchComponent.Component): obj.addProperty("App::PropertyStringList","WindowParts","Base", str(translate("Arch","the components of this window"))) self.Type = "Window" + obj.Proxy = self def execute(self,obj): self.createGeometry(obj) @@ -130,43 +131,45 @@ class _Window(ArchComponent.Component): pl = obj.Placement if obj.Base: if obj.Base.isDerivedFrom("Part::Feature"): - if obj.WindowParts and (len(obj.WindowParts)%5 == 0): - shapes = [] - for i in range(len(obj.WindowParts)/5): - wires = [] - wstr = obj.WindowParts[(i*5)+2].split(',') - for s in wstr: - j = int(s[4:]) - if obj.Base.Shape.Wires: - if len(obj.Base.Shape.Wires) >= j: - wires.append(obj.Base.Shape.Wires[j]) - if wires: - max_length = 0 - for w in wires: - if w.BoundBox.DiagonalLength > max_length: - max_length = w.BoundBox.DiagonalLength - ext = w - wires.remove(ext) - shape = Part.Face(ext) - norm = shape.normalAt(0,0) - thk = float(obj.WindowParts[(i*5)+3]) - if thk: - exv = DraftVecUtils.scaleTo(norm,thk) - shape = shape.extrude(exv) + if hasattr(obj,"WindowParts"): + if obj.WindowParts and (len(obj.WindowParts)%5 == 0): + shapes = [] + for i in range(len(obj.WindowParts)/5): + wires = [] + wstr = obj.WindowParts[(i*5)+2].split(',') + for s in wstr: + j = int(s[4:]) + if obj.Base.Shape.Wires: + if len(obj.Base.Shape.Wires) >= j: + wires.append(obj.Base.Shape.Wires[j]) + if wires: + max_length = 0 for w in wires: - f = Part.Face(w) - f = f.extrude(exv) - shape = shape.cut(f) - if obj.WindowParts[(i*5)+4]: - zof = float(obj.WindowParts[(i*5)+4]) - if zof: - zov = DraftVecUtils.scaleTo(norm,zof) - shape.translate(zov) - print shape - shapes.append(shape) - obj.Shape = Part.makeCompound(shapes) - if not DraftGeomUtils.isNull(pl): - obj.Placement = pl + if w.BoundBox.DiagonalLength > max_length: + max_length = w.BoundBox.DiagonalLength + ext = w + wires.remove(ext) + shape = Part.Face(ext) + norm = shape.normalAt(0,0) + thk = float(obj.WindowParts[(i*5)+3]) + if thk: + exv = DraftVecUtils.scaleTo(norm,thk) + shape = shape.extrude(exv) + for w in wires: + f = Part.Face(w) + f = f.extrude(exv) + shape = shape.cut(f) + if obj.WindowParts[(i*5)+4]: + zof = float(obj.WindowParts[(i*5)+4]) + if zof: + zov = DraftVecUtils.scaleTo(norm,zof) + shape.translate(zov) + print shape + shapes.append(shape) + if shapes: + obj.Shape = Part.makeCompound(shapes) + if not DraftGeomUtils.isNull(pl): + obj.Placement = pl class _ViewProviderWindow(ArchComponent.ViewProviderComponent): "A View Provider for the Window object" From f8f498a4f9e4748f9172d96eb84b420d0297449f Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 4 Jun 2012 11:43:20 +0200 Subject: [PATCH 283/517] 0000727: Keep faces colors on boolean operations --- src/Mod/Part/App/FeaturePartBoolean.cpp | 16 ++- src/Mod/Part/App/FeaturePartCommon.cpp | 30 +++-- src/Mod/Part/App/FeaturePartFuse.cpp | 30 +++-- src/Mod/Part/App/modelRefine.cpp | 147 ++++++++++++++++++++++++ src/Mod/Part/App/modelRefine.h | 31 ++++- src/Mod/Part/Gui/DlgSettingsGeneral.cpp | 2 + src/Mod/Part/Gui/DlgSettingsGeneral.ui | 110 ++++++++++-------- 7 files changed, 302 insertions(+), 64 deletions(-) diff --git a/src/Mod/Part/App/FeaturePartBoolean.cpp b/src/Mod/Part/App/FeaturePartBoolean.cpp index 1a2608797..2a1781b6c 100644 --- a/src/Mod/Part/App/FeaturePartBoolean.cpp +++ b/src/Mod/Part/App/FeaturePartBoolean.cpp @@ -28,6 +28,9 @@ #endif #include "FeaturePartBoolean.h" +#include "modelRefine.h" +#include +#include using namespace Part; @@ -75,7 +78,7 @@ App::DocumentObjectExecReturn *Boolean::execute(void) if (!mkBool->IsDone()) { return new App::DocumentObjectExecReturn("Boolean operation failed"); } - const TopoDS_Shape& resShape = mkBool->Shape(); + TopoDS_Shape resShape = mkBool->Shape(); if (resShape.IsNull()) { return new App::DocumentObjectExecReturn("Resulting shape is invalid"); } @@ -84,6 +87,17 @@ App::DocumentObjectExecReturn *Boolean::execute(void) history.push_back(buildHistory(*mkBool.get(), TopAbs_FACE, resShape, BaseShape)); history.push_back(buildHistory(*mkBool.get(), TopAbs_FACE, resShape, ToolShape)); + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); + if (hGrp->GetBool("RefineModel", false)) { + TopoDS_Shape oldShape = resShape; + BRepBuilderAPI_RefineModel mkRefine(oldShape); + resShape = mkRefine.Shape(); + ShapeHistory hist = buildHistory(mkRefine, TopAbs_FACE, resShape, oldShape); + history[0] = joinHistory(history[0], hist); + history[1] = joinHistory(history[1], hist); + } + this->Shape.setValue(resShape); this->History.setValues(history); return App::DocumentObject::StdReturn; diff --git a/src/Mod/Part/App/FeaturePartCommon.cpp b/src/Mod/Part/App/FeaturePartCommon.cpp index 44c93a01c..01ef09e41 100644 --- a/src/Mod/Part/App/FeaturePartCommon.cpp +++ b/src/Mod/Part/App/FeaturePartCommon.cpp @@ -30,7 +30,9 @@ #include "FeaturePartCommon.h" - +#include "modelRefine.h" +#include +#include #include using namespace Part; @@ -84,17 +86,17 @@ App::DocumentObjectExecReturn *MultiCommon::execute(void) if (s.size() >= 2) { try { std::vector history; - TopoDS_Shape res = s.front(); + TopoDS_Shape resShape = s.front(); for (std::vector::iterator it = s.begin()+1; it != s.end(); ++it) { // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Common mkCommon(res, *it); + BRepAlgoAPI_Common mkCommon(resShape, *it); // Let's check if the fusion has been successful if (!mkCommon.IsDone()) throw Base::Exception("Intersection failed"); - res = mkCommon.Shape(); + resShape = mkCommon.Shape(); - ShapeHistory hist1 = buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape1()); - ShapeHistory hist2 = buildHistory(mkCommon, TopAbs_FACE, res, mkCommon.Shape2()); + ShapeHistory hist1 = buildHistory(mkCommon, TopAbs_FACE, resShape, mkCommon.Shape1()); + ShapeHistory hist2 = buildHistory(mkCommon, TopAbs_FACE, resShape, mkCommon.Shape2()); if (history.empty()) { history.push_back(hist1); history.push_back(hist2); @@ -105,9 +107,21 @@ App::DocumentObjectExecReturn *MultiCommon::execute(void) history.push_back(hist2); } } - if (res.IsNull()) + if (resShape.IsNull()) throw Base::Exception("Resulting shape is invalid"); - this->Shape.setValue(res); + + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); + if (hGrp->GetBool("RefineModel", false)) { + TopoDS_Shape oldShape = resShape; + BRepBuilderAPI_RefineModel mkRefine(oldShape); + resShape = mkRefine.Shape(); + ShapeHistory hist = buildHistory(mkRefine, TopAbs_FACE, resShape, oldShape); + for (std::vector::iterator jt = history.begin(); jt != history.end(); ++jt) + *jt = joinHistory(*jt, hist); + } + + this->Shape.setValue(resShape); this->History.setValues(history); } catch (Standard_Failure) { diff --git a/src/Mod/Part/App/FeaturePartFuse.cpp b/src/Mod/Part/App/FeaturePartFuse.cpp index 47efb7a44..ba73877ea 100644 --- a/src/Mod/Part/App/FeaturePartFuse.cpp +++ b/src/Mod/Part/App/FeaturePartFuse.cpp @@ -29,7 +29,9 @@ #include "FeaturePartFuse.h" - +#include "modelRefine.h" +#include +#include #include using namespace Part; @@ -83,17 +85,17 @@ App::DocumentObjectExecReturn *MultiFuse::execute(void) if (s.size() >= 2) { try { std::vector history; - TopoDS_Shape res = s.front(); + TopoDS_Shape resShape = s.front(); for (std::vector::iterator it = s.begin()+1; it != s.end(); ++it) { // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Fuse mkFuse(res, *it); + BRepAlgoAPI_Fuse mkFuse(resShape, *it); // Let's check if the fusion has been successful if (!mkFuse.IsDone()) throw Base::Exception("Fusion failed"); - res = mkFuse.Shape(); + resShape = mkFuse.Shape(); - ShapeHistory hist1 = buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape1()); - ShapeHistory hist2 = buildHistory(mkFuse, TopAbs_FACE, res, mkFuse.Shape2()); + ShapeHistory hist1 = buildHistory(mkFuse, TopAbs_FACE, resShape, mkFuse.Shape1()); + ShapeHistory hist2 = buildHistory(mkFuse, TopAbs_FACE, resShape, mkFuse.Shape2()); if (history.empty()) { history.push_back(hist1); history.push_back(hist2); @@ -104,9 +106,21 @@ App::DocumentObjectExecReturn *MultiFuse::execute(void) history.push_back(hist2); } } - if (res.IsNull()) + if (resShape.IsNull()) throw Base::Exception("Resulting shape is invalid"); - this->Shape.setValue(res); + + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); + if (hGrp->GetBool("RefineModel", false)) { + TopoDS_Shape oldShape = resShape; + BRepBuilderAPI_RefineModel mkRefine(oldShape); + resShape = mkRefine.Shape(); + ShapeHistory hist = buildHistory(mkRefine, TopAbs_FACE, resShape, oldShape); + for (std::vector::iterator jt = history.begin(); jt != history.end(); ++jt) + *jt = joinHistory(*jt, hist); + } + + this->Shape.setValue(resShape); this->History.setValues(history); } catch (Standard_Failure) { diff --git a/src/Mod/Part/App/modelRefine.cpp b/src/Mod/Part/App/modelRefine.cpp index 1a68b8ffe..516cf0551 100644 --- a/src/Mod/Part/App/modelRefine.cpp +++ b/src/Mod/Part/App/modelRefine.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -547,6 +548,8 @@ bool FaceUniter::process() { if (workShell.IsNull()) return false; + modifiedShapes.clear(); + deletedShapes.clear(); typeObjects.push_back(&getPlaneObject()); typeObjects.push_back(&getCylinderObject()); //add more face types. @@ -583,6 +586,12 @@ bool FaceUniter::process() facesToRemove.reserve(facesToRemove.size() + adjacencySplitter.getGroup(adjacentIndex).size()); FaceVectorType temp = adjacencySplitter.getGroup(adjacentIndex); facesToRemove.insert(facesToRemove.end(), temp.begin(), temp.end()); + // the first shape will be marked as modified, i.e. replaced by newFace, all others are marked as deleted + if (!temp.empty()) + { + modifiedShapes.push_back(std::make_pair(temp.front(), newFace)); + deletedShapes.insert(deletedShapes.end(), temp.begin()+1, temp.end()); + } } } } @@ -632,3 +641,141 @@ bool FaceUniter::process() } return true; } + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +//TODO: Implement a way to log all modifications + +Part::BRepBuilderAPI_RefineModel::BRepBuilderAPI_RefineModel(const TopoDS_Shape& shape) +{ + myShape = shape; + Build(); +} + +void Part::BRepBuilderAPI_RefineModel::Build() +{ + if (myShape.IsNull()) + Standard_Failure::Raise("Cannot remove splitter from empty shape"); + + if (myShape.ShapeType() == TopAbs_SOLID) { + const TopoDS_Solid &solid = TopoDS::Solid(myShape); + BRepTools_ReShape reshape; + TopExp_Explorer it; + for (it.Init(solid, TopAbs_SHELL); it.More(); it.Next()) { + const TopoDS_Shell ¤tShell = TopoDS::Shell(it.Current()); + ModelRefine::FaceUniter uniter(currentShell); + if (uniter.process()) { + if (uniter.isModified()) { + const TopoDS_Shell &newShell = uniter.getShell(); + reshape.Replace(currentShell, newShell); + LogModifications(uniter); + } + } + else { + Standard_Failure::Raise("Removing splitter failed"); + } + } + myShape = reshape.Apply(solid); + } + else if (myShape.ShapeType() == TopAbs_SHELL) { + const TopoDS_Shell& shell = TopoDS::Shell(myShape); + ModelRefine::FaceUniter uniter(shell); + if (uniter.process()) { + myShape = uniter.getShell(); + LogModifications(uniter); + } + else { + Standard_Failure::Raise("Removing splitter failed"); + } + } + else if (myShape.ShapeType() == TopAbs_COMPOUND) { + BRep_Builder builder; + TopoDS_Compound comp; + builder.MakeCompound(comp); + + TopExp_Explorer xp; + // solids + for (xp.Init(myShape, TopAbs_SOLID); xp.More(); xp.Next()) { + const TopoDS_Solid &solid = TopoDS::Solid(xp.Current()); + BRepTools_ReShape reshape; + TopExp_Explorer it; + for (it.Init(solid, TopAbs_SHELL); it.More(); it.Next()) { + const TopoDS_Shell ¤tShell = TopoDS::Shell(it.Current()); + ModelRefine::FaceUniter uniter(currentShell); + if (uniter.process()) { + if (uniter.isModified()) { + const TopoDS_Shell &newShell = uniter.getShell(); + reshape.Replace(currentShell, newShell); + LogModifications(uniter); + } + } + } + builder.Add(comp, reshape.Apply(solid)); + } + // free shells + for (xp.Init(myShape, TopAbs_SHELL, TopAbs_SOLID); xp.More(); xp.Next()) { + const TopoDS_Shell& shell = TopoDS::Shell(xp.Current()); + ModelRefine::FaceUniter uniter(shell); + if (uniter.process()) { + builder.Add(comp, uniter.getShell()); + LogModifications(uniter); + } + } + // the rest + for (xp.Init(myShape, TopAbs_FACE, TopAbs_SHELL); xp.More(); xp.Next()) { + if (!xp.Current().IsNull()) + builder.Add(comp, xp.Current()); + } + for (xp.Init(myShape, TopAbs_WIRE, TopAbs_FACE); xp.More(); xp.Next()) { + if (!xp.Current().IsNull()) + builder.Add(comp, xp.Current()); + } + for (xp.Init(myShape, TopAbs_EDGE, TopAbs_WIRE); xp.More(); xp.Next()) { + if (!xp.Current().IsNull()) + builder.Add(comp, xp.Current()); + } + for (xp.Init(myShape, TopAbs_VERTEX, TopAbs_EDGE); xp.More(); xp.Next()) { + if (!xp.Current().IsNull()) + builder.Add(comp, xp.Current()); + } + + myShape = comp; + } + + Done(); +} + +void Part::BRepBuilderAPI_RefineModel::LogModifications(const ModelRefine::FaceUniter& uniter) +{ + const std::vector& modShapes = uniter.getModifiedShapes(); + for (std::vector::const_iterator it = modShapes.begin(); it != modShapes.end(); ++it) { + TopTools_ListOfShape list; + list.Append(it->second); + myModified.Bind(it->first, list); + } + const ShapeVectorType& delShapes = uniter.getDeletedShapes(); + for (ShapeVectorType::const_iterator it = delShapes.begin(); it != delShapes.end(); ++it) { + myDeleted.Append(*it); + } +} + +const TopTools_ListOfShape& Part::BRepBuilderAPI_RefineModel::Modified(const TopoDS_Shape& S) +{ + if (myModified.IsBound(S)) + return myModified.Find(S); + else + return myEmptyList; +} + +Standard_Boolean Part::BRepBuilderAPI_RefineModel::IsDeleted(const TopoDS_Shape& S) +{ + TopTools_ListIteratorOfListOfShape it; + for (it.Initialize(myDeleted); it.More(); it.Next()) + { + if (it.Value().IsSame(S)) + return Standard_True; + } + + return Standard_False; +} + diff --git a/src/Mod/Part/App/modelRefine.h b/src/Mod/Part/App/modelRefine.h index ed1267f98..32c897ff7 100644 --- a/src/Mod/Part/App/modelRefine.h +++ b/src/Mod/Part/App/modelRefine.h @@ -36,12 +36,15 @@ #include #include #include +#include namespace ModelRefine { - typedef std::vector FaceVectorType; - typedef std::vector EdgeVectorType; + typedef std::vector FaceVectorType; + typedef std::vector EdgeVectorType; + typedef std::vector ShapeVectorType; + typedef std::pair ShapePairType; void getFaceEdges(const TopoDS_Face &face, EdgeVectorType &edges); void boundaryEdges(const FaceVectorType &faces, EdgeVectorType &edgesOut); @@ -147,10 +150,16 @@ namespace ModelRefine bool process(); const TopoDS_Shell& getShell() const {return workShell;} bool isModified(){return modifiedSignal;} + const std::vector& getModifiedShapes() const + {return modifiedShapes;} + const ShapeVectorType& getDeletedShapes() const + {return deletedShapes;} private: TopoDS_Shell workShell; std::vector typeObjects; + std::vector modifiedShapes; + ShapeVectorType deletedShapes; bool modifiedSignal; }; } @@ -170,5 +179,23 @@ GeomAbs_OffsetSurface, GeomAbs_OtherSurface }; */ +namespace Part { +class BRepBuilderAPI_RefineModel : public BRepBuilderAPI_MakeShape +{ +public: + BRepBuilderAPI_RefineModel(const TopoDS_Shape&); + void Build(); + const TopTools_ListOfShape& Modified(const TopoDS_Shape& S); + Standard_Boolean IsDeleted(const TopoDS_Shape& S); + +private: + void LogModifications(const ModelRefine::FaceUniter& uniter); + +private: + TopTools_DataMapOfShapeListOfShape myModified; + TopTools_ListOfShape myEmptyList; + TopTools_ListOfShape myDeleted; +}; +} #endif // MODELREFINE_H diff --git a/src/Mod/Part/Gui/DlgSettingsGeneral.cpp b/src/Mod/Part/Gui/DlgSettingsGeneral.cpp index 61bce31f2..a9c917a86 100644 --- a/src/Mod/Part/Gui/DlgSettingsGeneral.cpp +++ b/src/Mod/Part/Gui/DlgSettingsGeneral.cpp @@ -69,6 +69,7 @@ void DlgSettingsGeneral::saveSettings() Interface_Static::SetCVal("write.step.unit","MM"); break; } + ui->checkBooleanRefine->onSave(); } void DlgSettingsGeneral::loadSettings() @@ -77,6 +78,7 @@ void DlgSettingsGeneral::loadSettings() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part"); int unit = hGrp->GetInt("Unit", 0); ui->comboBoxUnits->setCurrentIndex(unit); + ui->checkBooleanRefine->onRestore(); } /** diff --git a/src/Mod/Part/Gui/DlgSettingsGeneral.ui b/src/Mod/Part/Gui/DlgSettingsGeneral.ui index 4bca9519f..4ea3f5222 100644 --- a/src/Mod/Part/Gui/DlgSettingsGeneral.ui +++ b/src/Mod/Part/Gui/DlgSettingsGeneral.ui @@ -1,10 +1,8 @@ - - - - + + PartGui::DlgSettingsGeneral - - + + 0 0 @@ -12,73 +10,54 @@ 333 - + General - - - 9 - - - 6 - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - + + + + Export - - + + 9 - + 6 - - + + - + Millimeter - + Meter - + Inch - - - + + + Units for export of STEP/IGES - + - + Qt::Horizontal - + 40 20 @@ -89,9 +68,50 @@ + + + + Boolean operation + + + + + + Automatically refine model after boolean operation + + + RefineModel + + + Mod/Part/Boolean + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + - + + + Gui::PrefCheckBox + QCheckBox +
Gui/PrefWidgets.h
+
+
From 4f154d399366abb41efa6517997b4d42bfdd9d74 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 4 Jun 2012 22:58:37 +0200 Subject: [PATCH 284/517] 0000727: Keep faces colors on boolean operations --- src/Mod/Part/App/modelRefine.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/modelRefine.cpp b/src/Mod/Part/App/modelRefine.cpp index 516cf0551..25bb9378a 100644 --- a/src/Mod/Part/App/modelRefine.cpp +++ b/src/Mod/Part/App/modelRefine.cpp @@ -617,6 +617,15 @@ bool FaceUniter::process() sew.Add(*sewIt); sew.Perform(); workShell = TopoDS::Shell(sew.SewedShape()); + // update the list of modifications + for (std::vector::iterator it = modifiedShapes.begin(); it != modifiedShapes.end(); ++it) + { + if (sew.IsModified(it->second)) + { + it->second = sew.Modified(it->second); + break; + } + } } else { @@ -638,13 +647,25 @@ bool FaceUniter::process() faceFixer.Perform(); } workShell = TopoDS::Shell(edgeFuse.Shape()); + // update the list of modifications + TopTools_DataMapOfShapeShape faceMap; + edgeFuse.Faces(faceMap); + for (std::vector::iterator it = modifiedShapes.begin(); it != modifiedShapes.end(); ++it) + { + if (faceMap.IsBound(it->second)) + { + const TopoDS_Shape& value = faceMap.Find(it->second); + if (!value.IsSame(it->second)) + it->second = value; + } + } } return true; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// -//TODO: Implement a way to log all modifications +//BRepBuilderAPI_RefineModel implement a way to log all modifications on the faces Part::BRepBuilderAPI_RefineModel::BRepBuilderAPI_RefineModel(const TopoDS_Shape& shape) { From 8a92115ec6a47103acd5f0c957860af2e85d1124 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 4 Jun 2012 18:08:10 -0300 Subject: [PATCH 285/517] Arch: more bugfixing --- src/Mod/Arch/ArchBuilding.py | 44 +++++++--------------------------- src/Mod/Arch/ArchFloor.py | 22 +++++++++++++---- src/Mod/Arch/ArchSite.py | 46 ++++++++---------------------------- src/Mod/Arch/ArchWall.py | 16 +++++++++---- 4 files changed, 46 insertions(+), 82 deletions(-) diff --git a/src/Mod/Arch/ArchBuilding.py b/src/Mod/Arch/ArchBuilding.py index 4b0011b34..0d6d5cc40 100644 --- a/src/Mod/Arch/ArchBuilding.py +++ b/src/Mod/Arch/ArchBuilding.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchCommands +import FreeCAD,FreeCADGui,Draft,ArchCommands,ArchFloor from PyQt4 import QtCore from DraftTools import translate @@ -56,7 +56,7 @@ class _CommandBuilding: FreeCADGui.doCommand("import Arch") FreeCADGui.doCommand("obj = Arch.makeBuilding()") FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") - FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + FreeCADGui.doCommand('FreeCAD.ActiveDocument.removeObject("'+sel[0].Name+'")') FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: @@ -73,47 +73,19 @@ class _CommandBuilding: FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() -class _Building: +class _Building(ArchFloor._Floor): "The Building object" def __init__(self,obj): + ArchFloor._Floor.__init__(self,obj) self.Type = "Building" - obj.Proxy = self - self.Object = obj - - def execute(self,obj): - self.Object = obj - - def onChanged(self,obj,prop): - pass - - def addObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if not child in g: - g.append(child) - self.Object.Group = g - - def removeObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if child in g: - g.remove(child) - self.Object.Group = g - -class _ViewProviderBuilding: + obj.setEditorMode('Height',2) + +class _ViewProviderBuilding(ArchFloor._ViewProviderFloor): "A View Provider for the Building object" def __init__(self,vobj): - vobj.Proxy = self + ArchFloor._ViewProviderFloor.__init__(self,vobj) def getIcon(self): return ":/icons/Arch_Building_Tree.svg" - def attach(self,vobj): - self.Object = vobj.Object - return - - def claimChildren(self): - return self.Object.Group - - FreeCADGui.addCommand('Arch_Building',_CommandBuilding()) diff --git a/src/Mod/Arch/ArchFloor.py b/src/Mod/Arch/ArchFloor.py index 922d8aca0..f7ccab17a 100644 --- a/src/Mod/Arch/ArchFloor.py +++ b/src/Mod/Arch/ArchFloor.py @@ -57,7 +57,7 @@ class _CommandFloor: FreeCADGui.doCommand("import Arch") FreeCADGui.doCommand("obj = Arch.makeFloor()") FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") - FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + FreeCADGui.doCommand('FreeCAD.ActiveDocument.removeObject("'+sel[0].Name+'")') FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: @@ -74,7 +74,7 @@ class _CommandFloor: FreeCAD.ActiveDocument.recompute() class _Floor: - "The Cell object" + "The Floor object" def __init__(self,obj): obj.addProperty("App::PropertyLength","Height","Base", str(translate("Arch","The height of this floor"))) @@ -82,11 +82,17 @@ class _Floor: obj.Proxy = self self.Object = obj + def __getstate__(self): + return None + + def __setstate__(self,state): + return None + def execute(self,obj): - self.Object = obj + pass def onChanged(self,obj,prop): - pass + self.Object = obj def addObject(self,child): if hasattr(self,"Object"): @@ -103,7 +109,7 @@ class _Floor: self.Object.Group = g class _ViewProviderFloor: - "A View Provider for the Cell object" + "A View Provider for the Floor object" def __init__(self,vobj): vobj.Proxy = self @@ -117,4 +123,10 @@ class _ViewProviderFloor: def claimChildren(self): return self.Object.Group + def __getstate__(self): + return None + + def __setstate__(self,state): + return None + FreeCADGui.addCommand('Arch_Floor',_CommandFloor()) diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index d05a7e8ff..69cfda8ba 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchCommands +import FreeCAD,FreeCADGui,Draft,ArchCommands,ArchFloor from PyQt4 import QtCore from DraftTools import translate @@ -56,7 +56,7 @@ class _CommandSite: FreeCADGui.doCommand("import Arch") FreeCADGui.doCommand("obj = Arch.makeSite()") FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") - FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + FreeCADGui.doCommand('FreeCAD.ActiveDocument.removeObject("'+sel[0].Name+'")') nobj = makeSite() ArchCommands.copyProperties(sel[0],nobj) @@ -75,47 +75,21 @@ class _CommandSite: FreeCADGui.doCommand("Arch.makeSite("+ss+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() - -class _Site: + +class _Site(ArchFloor._Floor): "The Site object" def __init__(self,obj): + ArchFloor._Floor.__init__(self,obj) self.Type = "Site" - obj.Proxy = self - self.Object = obj - - def execute(self,obj): - self.Object = obj - - def onChanged(self,obj,prop): - pass - - def addObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if not child in g: - g.append(child) - self.Object.Group = g - - def removeObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if child in g: - g.remove(child) - self.Object.Group = g - -class _ViewProviderSite: + obj.setEditorMode('Height',2) + +class _ViewProviderSite(ArchFloor._ViewProviderFloor): "A View Provider for the Site object" def __init__(self,vobj): - vobj.Proxy = self + ArchFloor._ViewProviderFloor.__init__(self,vobj) def getIcon(self): return ":/icons/Arch_Site_Tree.svg" - def attach(self,vobj): - self.Object = vobj.Object - return - - def claimChildren(self): - return self.Object.Group - + FreeCADGui.addCommand('Arch_Site',_CommandSite()) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 0bfa8f6e4..19b3b29ba 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -265,6 +265,7 @@ class _Wall(ArchComponent.Component): self.createGeometry(obj) def onChanged(self,obj,prop): + print prop if prop in ["Base","Height","Width","Align","Additions","Subtractions"]: self.createGeometry(obj) @@ -373,7 +374,8 @@ class _Wall(ArchComponent.Component): base = temp for app in obj.Additions: - base = base.fuse(app.Shape) + if hasattr(app,"Shape"): + base = base.fuse(app.Shape) app.ViewObject.hide() #to be removed for hole in obj.Subtractions: if Draft.getType(hole) == "Window": @@ -393,10 +395,14 @@ class _Wall(ArchComponent.Component): hole.ViewObject.hide() # to be removed if base: - base.removeSplitter() - obj.Shape = base - if not DraftGeomUtils.isNull(pl): - obj.Placement = pl + if not base.isNull(): + try: + base.removeSplitter() + except: + print "Wall: Error removing splitter" + obj.Shape = base + if not DraftGeomUtils.isNull(pl): + obj.Placement = pl class _ViewProviderWall(ArchComponent.ViewProviderComponent): "A View Provider for the Wall object" From e1c3f5ed58c9a5ca5f6db9a694b77fa942c74475 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 4 Jun 2012 23:06:12 -0300 Subject: [PATCH 286/517] Arch: Fixed bug in wall --- src/Mod/Arch/ArchWall.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 19b3b29ba..a6e1cc1f7 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -397,7 +397,7 @@ class _Wall(ArchComponent.Component): if base: if not base.isNull(): try: - base.removeSplitter() + base = base.removeSplitter() except: print "Wall: Error removing splitter" obj.Shape = base From a589b39872ce80947700d95b99412cb6fec491ff Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 5 Jun 2012 00:00:43 -0300 Subject: [PATCH 287/517] Arch: Small improvements to section plane --- src/Mod/Arch/ArchSectionPlane.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 8f695d708..ea9fac7dc 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -41,6 +41,7 @@ def makeSectionPlane(objectslist=None): elif o.isDerivedFrom("App::DocumentObjectGroup"): g.append(o) obj.Objects = g + return obj def makeSectionView(section): """makeSectionView(section) : Creates a Drawing view of the given Section Plane @@ -55,15 +56,14 @@ def makeSectionView(section): template = Draft.getParam("template") if not template: template = FreeCAD.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg' - page.ViewObject.HintOffsetX = 200 - page.ViewObject.HintOffsetY = 100 - page.ViewObject.HintScale = 20 page.Template = template view = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View") page.addObject(view) _ArchDrawingView(view) view.Source = section + view.Label = str(translate("Arch","View of"))+" "+section.Name + return view class _CommandSectionPlane: "the Arch SectionPlane command definition" From fac54a4306825c3dd2aeda9d1c836bdc0fa83a6c Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 5 Jun 2012 11:55:45 +0200 Subject: [PATCH 288/517] Method Part.Edge.split added --- src/Mod/Part/App/TopoShapeEdgePy.xml | 12 ++- src/Mod/Part/App/TopoShapeEdgePyImp.cpp | 103 ++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/TopoShapeEdgePy.xml b/src/Mod/Part/App/TopoShapeEdgePy.xml index 873b3fb72..40def1030 100644 --- a/src/Mod/Part/App/TopoShapeEdgePy.xml +++ b/src/Mod/Part/App/TopoShapeEdgePy.xml @@ -24,7 +24,12 @@ Vector = valueAt(pos) - Get the point at the given parameter [0|Length] if defined
- + + + Float = parameterAt(Vertex) - Get the parameter at the given vertex if lying on the edge + + + Vector = normalAt(pos) - Get the normal vector at the given parameter [0|Length] if defined @@ -64,6 +69,11 @@ Discretizes the edge using a given deflection or number of points and returns a list of points + + + Splits the edge at the given parameter values and builds a wire out of it + + Set or get the tolerance of the vertex diff --git a/src/Mod/Part/App/TopoShapeEdgePyImp.cpp b/src/Mod/Part/App/TopoShapeEdgePyImp.cpp index ec5bc0905..329c6bd6c 100644 --- a/src/Mod/Part/App/TopoShapeEdgePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeEdgePyImp.cpp @@ -23,10 +23,13 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include # include +# include +# include # include # include # include @@ -47,6 +50,7 @@ # include # include # include +# include # include #endif @@ -55,12 +59,14 @@ #include #include +#include #include #include #include "TopoShape.h" #include "TopoShapeFacePy.h" #include "TopoShapeVertexPy.h" +#include "TopoShapeWirePy.h" #include "TopoShapeEdgePy.h" #include "TopoShapeEdgePy.cpp" @@ -185,6 +191,35 @@ PyObject* TopoShapeEdgePy::valueAt(PyObject *args) return new Base::VectorPy(new Base::Vector3d(V.X(),V.Y(),V.Z())); } +PyObject* TopoShapeEdgePy::parameterAt(PyObject *args) +{ + PyObject* pnt; + PyObject* face=0; + if (!PyArg_ParseTuple(args, "O!|O!",&TopoShapeVertexPy::Type,&pnt, + &TopoShapeFacePy::Type,&face)) + return 0; + + try { + const TopoDS_Shape& v = static_cast(pnt)->getTopoShapePtr()->_Shape; + const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); + + if (face) { + const TopoDS_Shape& f = static_cast(face)->getTopoShapePtr()->_Shape; + Standard_Real par = BRep_Tool::Parameter(TopoDS::Vertex(v), e, TopoDS::Face(f)); + return PyFloat_FromDouble(par); + } + else { + Standard_Real par = BRep_Tool::Parameter(TopoDS::Vertex(v), e); + return PyFloat_FromDouble(par); + } + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; + } +} + PyObject* TopoShapeEdgePy::tangentAt(PyObject *args) { double u; @@ -443,6 +478,74 @@ PyObject* TopoShapeEdgePy::discretize(PyObject *args) return 0; } +PyObject* TopoShapeEdgePy::split(PyObject *args) +{ + PyObject* float_or_list; + if (!PyArg_ParseTuple(args, "O", &float_or_list)) + return 0; + + try { + BRepAdaptor_Curve adapt(TopoDS::Edge(getTopoShapePtr()->_Shape)); + Standard_Real f = adapt.FirstParameter(); + Standard_Real l = adapt.LastParameter(); + + std::vector par; + par.push_back(f); + if (PyFloat_Check(float_or_list)) { + double val = PyFloat_AsDouble(float_or_list); + if (val == f || val == l) { + PyErr_SetString(PyExc_ValueError, "Cannot split edge at start or end point"); + return 0; + } + else if (val < f || val > l) { + PyErr_SetString(PyExc_ValueError, "Value out of parameter range"); + return 0; + } + par.push_back(val); + } + else if (PyList_Check(float_or_list)) { + Py::List list(float_or_list); + for (Py::List::iterator it = list.begin(); it != list.end(); ++it) { + double val = (double)Py::Float(*it); + if (val == f || val == l) { + PyErr_SetString(PyExc_ValueError, "Cannot split edge at start or end point"); + return 0; + } + else if (val < f || val > l) { + PyErr_SetString(PyExc_ValueError, "Value out of parameter range"); + return 0; + } + par.push_back(val); + } + } + else { + PyErr_SetString(PyExc_TypeError, "Either float or list of floats expected"); + return 0; + } + + par.push_back(l); + std::sort(par.begin(), par.end()); + + BRepBuilderAPI_MakeWire mkWire; + Handle_Geom_Curve c = adapt.Curve().Curve(); + std::vector::iterator end = par.end() - 1; + for (std::vector::iterator it = par.begin(); it != end; ++it) { + BRepBuilderAPI_MakeEdge mkBuilder(c, it[0], it[1]); + mkWire.Add(mkBuilder.Edge()); + } + + return new TopoShapeWirePy(new TopoShape(mkWire.Shape())); + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; + } + + PyErr_SetString(PyExc_Exception, "Geometry is not a curve"); + return 0; +} + PyObject* TopoShapeEdgePy::setTolerance(PyObject *args) { double tol; From ff187c13a9cb4758a8e86309d3676a086c7c8cc8 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 5 Jun 2012 13:42:21 +0200 Subject: [PATCH 289/517] 0000734: Cannot export Drawing Page to SVG --- src/Gui/ApplicationPy.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index 9a2a51af4..6f0bfd5ba 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -362,10 +362,18 @@ PyObject* Application::sExport(PyObject * /*self*/, PyObject *args,PyObject * /* if (ext == QLatin1String("iv") || ext == QLatin1String("wrl") || ext == QLatin1String("vrml") || ext == QLatin1String("wrz") || ext == QLatin1String("svg") || ext == QLatin1String("idtf")) { - QString cmd = QString::fromLatin1( - "Gui.getDocument(\"%1\").ActiveView.dump(\"%2\")" - ).arg(QLatin1String(doc->getName())).arg(fi.absoluteFilePath()); - Base::Interpreter().runString(cmd.toUtf8()); + Gui::Document* gui_doc = Application::Instance->getDocument(doc); + std::list view3d = gui_doc->getMDIViewsOfType(View3DInventor::getClassTypeId()); + if (view3d.empty()) { + PyErr_SetString(PyExc_Exception, "Cannot export to SVG because document doesn't have a 3d view"); + return 0; + } + else { + QString cmd = QString::fromLatin1( + "Gui.getDocument(\"%1\").mdiViewsOfType('Gui::View3DInventor')[0].dump(\"%2\")" + ).arg(QLatin1String(doc->getName())).arg(fi.absoluteFilePath()); + Base::Interpreter().runString(cmd.toUtf8()); + } } else if (ext == QLatin1String("pdf")) { Gui::Document* gui_doc = Application::Instance->getDocument(doc); From 3bd569252cd9b2d38b0f0da2f2a2c17e54ed0ac1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 5 Jun 2012 13:55:56 +0200 Subject: [PATCH 290/517] Raise exception in Drawing module for unsupported objects --- src/Mod/Drawing/Gui/AppDrawingGuiPy.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Mod/Drawing/Gui/AppDrawingGuiPy.cpp b/src/Mod/Drawing/Gui/AppDrawingGuiPy.cpp index 07aa2c471..a4cb65ef9 100644 --- a/src/Mod/Drawing/Gui/AppDrawingGuiPy.cpp +++ b/src/Mod/Drawing/Gui/AppDrawingGuiPy.cpp @@ -139,6 +139,10 @@ exporter(PyObject *self, PyObject *args) str_out.close(); break; } + else { + PyErr_SetString(PyExc_TypeError, "Export as SVG of this object type is not supported by Drawing module"); + return 0; + } } } } PY_CATCH; From 73ee872301b1a51c55f2dd97ac1b978fe85a6e53 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 5 Jun 2012 12:37:17 -0300 Subject: [PATCH 291/517] Arch: Friendlier pycollada warning --- src/Mod/Arch/InitGui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 4c5384ff0..6267d9077 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -105,7 +105,7 @@ FreeCAD.addExportType("Wavefront OBJ - Arch module (*.obj)","importOBJ") try: import collada except: - FreeCAD.Console.PrintError("pycollada not found, no collada support.\n") + FreeCAD.Console.PrintMessage(str(DraftTools.translate("arch","pycollada not found, collada support will be disabled.\n"))) else: FreeCAD.addImportType("Collada (*.dae)","importDAE") FreeCAD.addExportType("Collada (*.dae)","importDAE") From a26daf5d231b8881044b555b1f97d1c0b53a1109 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 5 Jun 2012 13:31:34 -0300 Subject: [PATCH 292/517] Arch: More bugfixes --- src/Mod/Arch/ArchComponent.py | 15 +++++++++++---- src/Mod/Arch/ArchSectionPlane.py | 1 + src/Mod/Arch/ArchVRM.py | 4 ++-- src/Mod/Arch/ArchWall.py | 15 ++++++++++++--- src/Mod/Arch/ArchWindow.py | 2 ++ 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 13ad37204..5e0206fe9 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -308,16 +308,23 @@ class ViewProviderComponent: return False class ArchSelectionObserver: - def __init__(self,origin,watched): + def __init__(self,origin,watched,hide=True,nextCommand=None): self.origin = origin self.watched = watched + self.hide = hide + self.nextCommand = nextCommand def addSelection(self,document, object, element, position): if object == self.watched.Name: if not element: print "closing Sketch edit" - self.origin.ViewObject.Transparency = 0 - self.origin.ViewObject.Selectable = True - self.watched.ViewObject.hide() + if self.hide: + self.origin.ViewObject.Transparency = 0 + self.origin.ViewObject.Selectable = True + self.watched.ViewObject.hide() FreeCADGui.activateWorkbench("ArchWorkbench") FreeCADGui.Selection.removeObserver(FreeCAD.ArchObserver) + if self.nextCommand: + FreeCADGui.Selection.clearSelection() + FreeCADGui.Selection.addSelection(self.watched) + FreeCADGui.runCommand(self.nextCommand) del FreeCAD.ArchObserver diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index ea9fac7dc..aa1d8bb99 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -234,6 +234,7 @@ class _ArchDrawingView: 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 result = '' diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index 2de8ad0b3..2eefd8f27 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -574,7 +574,7 @@ class Renderer: svg += '" ' svg += 'stroke="#000000" ' svg += 'stroke-width="' + str(linewidth) + '" ' - svg += 'style="stroke-width:0.01;' + svg += 'style="stroke-width:' + str(linewidth) + ';' svg += 'stroke-miterlimit:1;' svg += 'stroke-linejoin:round;' svg += 'stroke-dasharray:none;' @@ -598,7 +598,7 @@ class Renderer: svg += '" ' svg += 'stroke="#000000" ' svg += 'stroke-width="' + str(linewidth) + '" ' - svg += 'style="stroke-width:0.01;' + svg += 'style="stroke-width:' + str(linewidth) + ';' svg += 'stroke-miterlimit:1;' svg += 'stroke-linejoin:round;' svg += 'stroke-dasharray:none;' diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index a6e1cc1f7..25fb891ee 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -256,7 +256,10 @@ class _Wall(ArchComponent.Component): str(translate("Arch","The alignment of this wall on its base object, if applicable"))) obj.addProperty("App::PropertyVector","Normal","Base", str(translate("Arch","The normal extrusion direction of this object (keep (0,0,0) for automatic normal)"))) + obj.addProperty("App::PropertyBool","ForceWire","Base", + str(translate("Arch","If True, if this wall is based on a face, it will use its border wire as trace, and disconsider the face."))) obj.Align = ['Left','Right','Center'] + obj.ForceWire = False self.Type = "Wall" obj.Width = 0.1 obj.Height = 0 @@ -265,7 +268,6 @@ class _Wall(ArchComponent.Component): self.createGeometry(obj) def onChanged(self,obj,prop): - print prop if prop in ["Base","Height","Width","Align","Additions","Subtractions"]: self.createGeometry(obj) @@ -359,7 +361,7 @@ class _Wall(ArchComponent.Component): base = obj.Base.Shape.copy() if base.Solids: pass - elif base.Faces: + elif base.Faces and (not obj.ForceWire): if height: norm = normal.multiply(height) base = base.extrude(norm) @@ -372,6 +374,13 @@ class _Wall(ArchComponent.Component): else: temp = sh base = temp + elif base.Edges: + wire = Part.Wire(base.Edges) + sh = getbase(wire) + if sh: + base = sh + else: + FreeCAD.Console.PrintError(str(translate("Arch","Error: Invalid base object"))) for app in obj.Additions: if hasattr(app,"Shape"): @@ -399,7 +408,7 @@ class _Wall(ArchComponent.Component): try: base = base.removeSplitter() except: - print "Wall: Error removing splitter" + FreeCAD.Console.PrintError(str(translate("Arch","Error removing splitter from wall shape"))) obj.Shape = base if not DraftGeomUtils.isNull(pl): obj.Placement = pl diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 2c20b03ca..2f593257f 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -92,6 +92,8 @@ class _CommandWindow: if Draft.getType(sel[0]) == "Wall": FreeCADGui.activateWorkbench("SketcherWorkbench") FreeCADGui.runCommand("Sketcher_NewSketch") + FreeCAD.ArchObserver = ArchComponent.ArchSelectionObserver(sel[0],FreeCAD.ActiveDocument.Objects[-1],hide=False,nextCommand="Arch_Window") + FreeCADGui.Selection.addObserver(FreeCAD.ArchObserver) else: FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Window"))) FreeCADGui.doCommand("import Arch") From 19e747d770268064c350e22ab8bfa6a97e746d36 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 5 Jun 2012 16:33:01 -0300 Subject: [PATCH 293/517] 0000722: Deleting Draft dimensions --- src/Mod/Draft/Draft.py | 36 +++++++++++++++++++++++++----------- src/Mod/Draft/DraftTools.py | 2 +- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 7b1c5dc8f..49ff4ad04 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1782,7 +1782,6 @@ class _ViewProviderDimension: obj.Proxy = self obj.FontSize=getParam("textheight") obj.FontName=getParam("textfont") - obj.DisplayMode = ["2D","3D"] obj.ExtLines=0.3 obj.Override = '' @@ -1825,18 +1824,19 @@ class _ViewProviderDimension: if hasattr(obj.ViewObject,"DisplayMode"): if obj.ViewObject.DisplayMode == "3D": offset = DraftVecUtils.neg(offset) - if hasattr(obj.ViewObject,"TextPosition"): - if obj.ViewObject.TextPosition == Vector(0,0,0): - tbase = midpoint.add(offset) + if hasattr(obj.ViewObject,"TextPosition"): + if obj.ViewObject.TextPosition == Vector(0,0,0): + tbase = midpoint.add(offset) + else: + tbase = obj.ViewObject.TextPosition else: - tbase = obj.ViewObject.TextPosition + tbase = midpoint.add(offset) else: - tbase = midpoint.add(offset) + tbase = midpoint rot = FreeCAD.Placement(DraftVecUtils.getPlaneRotation(u,v,norm)).Rotation.Q return p1,p2,p3,p4,tbase,norm,rot def attach(self, obj): - obj.DisplayMode = ["2D","3D"] self.Object = obj.Object p1,p2,p3,p4,tbase,norm,rot = self.calcGeom(obj.Object) self.color = coin.SoBaseColor() @@ -1903,6 +1903,10 @@ class _ViewProviderDimension: self.onChanged(obj,"FontName") def updateData(self, obj, prop): + try: + dm = obj.ViewObject.DisplayMode + except: + dm = "2D" text = None if obj.Base and obj.LinkedVertices: if "Shape" in obj.Base.PropertiesList: @@ -1936,7 +1940,7 @@ class _ViewProviderDimension: self.text.string = self.text3d.string = text self.textpos.rotation = coin.SbRotation(rot[0],rot[1],rot[2],rot[3]) self.textpos.translation.setValue([tbase.x,tbase.y,tbase.z]) - if obj.ViewObject.DisplayMode == "2D": + if dm == "2D": self.coords.point.setValues([[p1.x,p1.y,p1.z], [p2.x,p2.y,p2.z], [p3.x,p3.y,p3.z], @@ -1958,6 +1962,7 @@ class _ViewProviderDimension: self.coord2.point.setValue((p3.x,p3.y,p3.z)) def onChanged(self, vp, prop): + self.Object = vp.Object if prop == "FontSize": self.font.size = vp.FontSize self.font3d.size = vp.FontSize*100 @@ -1969,13 +1974,20 @@ class _ViewProviderDimension: elif prop == "LineWidth": self.drawstyle.lineWidth = vp.LineWidth else: + self.drawstyle.lineWidth = vp.LineWidth self.updateData(vp.Object, None) def getDisplayModes(self,obj): return ["2D","3D"] def getDefaultDisplayMode(self): - return "2D" + if hasattr(self,"defaultmode"): + return self.defaultmode + else: + return "2D" + + def setDisplayMode(self,mode): + return mode def getIcon(self): if self.Object.Base: @@ -2034,10 +2046,12 @@ class _ViewProviderDimension: """ def __getstate__(self): - return None + return self.Object.ViewObject.DisplayMode def __setstate__(self,state): - return None + if state: + self.defaultmode = state + self.setDisplayMode(state) class _AngularDimension: "The AngularDimension object" diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 559e75e26..a5f52576c 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -1653,7 +1653,7 @@ class Dimension(Creator): if self.dir: point = self.node[0].add(DraftVecUtils.project(point.sub(self.node[0]),self.dir)) self.node.append(point) - print "node",self.node + #print "node",self.node self.dimtrack.update(self.node) if (len(self.node) == 2): self.point2 = self.node[1] From f4f132540c2af3bf20f724e8978afaf8724ef803 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 5 Jun 2012 18:53:48 -0300 Subject: [PATCH 294/517] Draft: Fixes in working plane --- src/Mod/Draft/DraftTools.py | 11 +++++++++++ src/Mod/Draft/DraftTrackers.py | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index a5f52576c..06cffa472 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -231,6 +231,17 @@ class SelectPlane: self.call = None self.doc = FreeCAD.ActiveDocument if self.doc: + sel = FreeCADGui.Selection.getSelectionEx() + if len(sel) == 1: + sel = sel[0] + if sel.HasSubObjects: + if len(sel.SubElementNames) == 1: + if "Face" in sel.SubElementNames[0]: + self.ui = FreeCADGui.draftToolBar + plane.alignToFace(sel.SubObjects[0], self.offset) + self.display(plane.axis) + self.finish() + return FreeCAD.activeDraftCommand = self self.view = Draft.get3DView() self.ui = FreeCADGui.draftToolBar diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 5223ebf66..ab556e095 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -617,7 +617,9 @@ class gridTracker(Tracker): def set(self): Q = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q + P = FreeCAD.DraftWorkingPlane.position self.trans.rotation.setValue([Q[0],Q[1],Q[2],Q[3]]) + self.trans.translation.setValue([P.x,P.y,P.z]) self.on() def getClosestNode(self,point): From a4b593ddd38e1b7b617c279c0fb8ea3c1160bcf7 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 5 Jun 2012 20:11:47 -0300 Subject: [PATCH 295/517] Draft: Fixed concrete hatch pattern --- src/Mod/Draft/Draft_rc.py | 365 +++++++++++------- src/Mod/Draft/Resources/patterns/concrete.svg | 112 +----- 2 files changed, 234 insertions(+), 243 deletions(-) diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index e1f587ddd..e74a2fc93 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Tue May 22 16:46:43 2012 +# Created: Tue Jun 5 20:09:57 2012 # by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -117,79 +117,150 @@ qt_resource_data = "\ \x0a\x20\x20\x20\x20\x3c\x2f\x70\x61\x74\x74\x65\x72\x6e\x3e\x0a\ \x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ \ -\x00\x00\x04\x69\ -\x00\ -\x00\x15\x07\x78\x9c\xbd\x58\xdb\x6e\x1b\x37\x10\x7d\xef\x57\x2c\ -\x36\x2f\x2d\xb0\xa1\x78\xbf\xb8\x52\x7e\xa1\x0f\x45\x3e\x40\xb0\ -\xd7\xb2\x10\x47\x0e\x24\xb5\x49\xfa\xf5\x1d\xde\x96\xb4\xe1\x59\ -\xcf\x4b\x2c\x01\xc2\x90\x7b\x20\x9e\x1d\xce\x99\x19\x72\x7b\xf9\ -\xf7\xf0\xe9\xb7\x61\xd8\xde\xcd\xf7\x97\x68\x80\xf9\x6d\x7f\xbd\ -\xce\xe7\x53\x1a\xc0\xe7\x78\xb7\x1b\x6f\x9f\x4e\xb7\xe7\xf9\x3a\ -\x8f\x75\xb2\x60\x3e\x9f\x8e\xd7\xcb\x6e\xfc\xe7\x32\x9f\xff\xfe\ -\xb6\xbf\x9d\xff\x3a\x7d\xbe\x34\xd0\x8f\xdd\xc8\x97\xc1\xcf\x7e\ -\xf0\xfd\x78\x77\x7d\xd8\x8d\xcc\x2c\x33\x0f\xf3\xf1\xf0\x70\x4d\ -\x53\x9f\xca\xdc\xf6\x50\x1f\x0e\xc3\xe5\xfa\xf3\x71\xde\x8d\xf7\ -\xc7\xc7\xc7\x9b\xd3\xd3\x69\xfe\x13\x66\xce\x4f\x5f\xe6\x9b\x0f\ -\x3c\x7d\xea\xf8\x63\xfa\xe7\x9b\xee\x8f\x87\xe1\x7a\xde\x9f\x2e\ -\xf7\x4f\xe7\xaf\xbb\xf1\x72\xbb\x7f\x9c\x7f\x67\x5c\xfc\xd1\x3d\ -\x8f\x2f\x78\x50\x9a\x8b\x65\xe5\xec\x84\x87\x06\x19\x06\xc0\x7c\ -\x1d\x0c\x53\xc6\x09\x2d\xfd\xa4\x98\x91\xd2\x07\x6d\x87\xfd\x20\ -\x98\x52\x41\x7a\xe3\xa6\xc5\x1a\xf8\x20\xe0\xfb\x51\x32\xeb\x60\ -\x28\xcc\xc4\x57\x60\x3d\xea\xbf\xb1\x5f\x35\x52\x8b\x4c\xa4\xd7\ -\x7c\x1c\x36\x6f\xf1\x13\x9a\x09\x0e\x04\xd5\x64\x99\x97\x56\x5b\ -\x2b\x80\x9f\x62\x32\x72\x36\x76\x5a\xac\xca\xcf\xb2\x38\x74\x42\ -\xc0\xca\x38\xac\x47\xa1\xfc\x24\x8d\x9f\x97\xd9\x7f\x9c\x05\xa5\ -\x2c\x0f\xc0\x8f\xb3\xe4\x53\xe3\xd4\xd4\xcc\xca\x50\x94\xb5\x61\ -\xe9\x35\x5c\x07\x43\x19\x6a\x02\x43\xe9\x59\xd9\x61\x61\x99\xe4\ -\x02\x5c\x08\x0c\x25\x93\x2a\xf2\x0e\xd3\x62\x55\x7e\x9a\x69\x0b\ -\x70\x0b\x0b\xe3\xa8\x0e\x84\xb2\xb3\x04\x76\x40\xc9\xc4\x68\x97\ -\x93\xe4\x8c\x7b\xa3\x82\x4e\xfe\xd3\xa1\x6c\x7b\x33\x2b\x3f\xf0\ -\xb3\xcf\xa4\xf8\x2a\xb0\xc7\xa1\x1c\x3d\x81\xa3\xd2\xcc\xc5\x97\ -\xd7\x93\x74\x20\x12\xe7\xa4\x49\x1c\x65\x8e\xf1\xb4\xb4\x8a\x6a\ -\x0b\xae\x71\x34\x49\x57\x89\x22\x8e\xeb\x60\x18\x43\x43\x51\x89\ -\xe6\x4c\xc4\x35\xe4\x14\x98\x82\xa8\xe6\x5e\x24\x86\xa2\xea\x13\ -\x48\xe4\xfd\xf3\x8d\x61\xa6\x95\x18\xe2\xb8\x0e\x86\x32\xa4\xe8\ -\x44\x97\xdd\xd0\x93\xf2\xcc\x69\x2b\x8a\x4e\xea\x72\xaf\x32\xd4\ -\x29\xc6\xb2\x0f\x51\x5c\x07\x43\x19\x52\x74\xa2\x04\x13\x96\xc7\ -\x94\x05\x5c\x8d\xb3\x59\x27\x8a\x25\xc7\xc0\xec\x62\x55\x7e\x8e\ -\xc5\x61\x8c\xbc\x15\x54\x07\x42\xd9\x51\x74\x22\x8b\x00\x55\xf4\ -\x9f\x34\x86\x2b\x93\xf2\x74\x64\x9c\xb4\x5d\xad\xca\xae\x64\x3c\ -\x9b\xd2\x34\x86\xea\x40\x28\x3b\x8a\x42\xb4\x60\x21\xee\x01\x14\ -\x02\x58\x42\x3b\x1f\xb2\x42\x7c\x76\x46\x8c\xfc\x6a\xb6\x2c\x98\ -\x44\x91\x15\x82\xe3\x3a\x18\xc6\xd0\x52\x14\xa2\x2c\xcb\x69\x42\ -\x1a\xe6\xa2\xfb\x5c\x22\x58\x8a\x5f\x0c\xfc\x6a\xb6\xf0\x73\xd5\ -\x37\x6b\xb8\x0e\x86\x12\xa4\x08\x24\x26\xc2\x49\x4b\x50\x89\x13\ -\x2e\x6b\xc3\xc2\x4c\xfa\x6d\x3e\x8b\x33\xaf\x3c\x29\x0f\x50\x02\ -\x94\xf8\x17\x8e\x15\x89\x89\xc0\x82\x29\x75\x82\xd0\x09\x90\x1a\ -\x81\x35\x76\x94\xf8\x17\x25\xc2\xec\x24\x3c\xe8\xd4\x38\x23\x73\ -\x9d\x48\xda\x4f\x99\xab\x9a\x6d\x03\x7d\x49\x6a\xab\xb8\x0e\x86\ -\x32\xa4\x68\x00\xaa\xab\xcd\x21\x06\x9a\x0f\x20\x01\x9d\x77\x31\ -\x67\x78\x19\x57\xae\x66\xdb\xcf\xa4\xc6\x5c\xc8\x70\x5c\x07\xc3\ -\x18\x3a\x92\x06\x96\x72\x23\x14\xb3\x42\x8a\x52\x25\xde\x66\xe8\ -\x69\x0c\xd7\x72\xb0\xa3\x88\x00\x2a\x6d\x52\xbf\x8d\x4a\x70\x22\ -\x28\x29\x89\xdd\x94\xa4\x75\x53\x72\x8d\x21\x45\x25\x7a\xf1\x61\ -\xec\xab\x52\xc3\x9c\x54\x62\x4a\xfd\x5d\xac\x96\x87\xb9\x5a\xda\ -\x65\x0c\xd5\x81\x50\x76\x14\x95\xa8\x90\xbb\x51\x37\x41\xbd\xe0\ -\xbc\xa4\xb9\x9a\x43\xd5\xb4\x58\x8d\x9d\xa9\x1b\x87\xa3\x3a\x10\ -\xca\x8e\xa2\x10\x59\x8a\xe1\x73\xdf\x41\xca\xcb\x82\x9c\x16\xab\ -\xb2\x33\x4d\x9a\x38\xca\xbc\xad\x5f\x4f\x51\x47\xd7\x89\x7a\xc8\ -\x35\x10\x7b\x79\x67\x75\xa9\xec\x8b\xd5\xf2\x5f\x7a\x9b\xa4\x4b\ -\x1c\xd6\xa3\x50\x7e\x24\x6d\xe4\x18\x89\x1d\x80\x62\xf0\x4a\x5c\ -\xe5\xfc\xe2\x79\x69\x21\xab\xd5\x94\x61\x3b\xf1\x62\xb0\x1e\x85\ -\xf2\x23\x29\x23\x9f\x33\x54\x4c\xd0\x9d\xfb\x7e\x79\x83\xe2\x49\ -\xc2\x50\x85\x1c\xb4\x01\x29\xf0\xb2\xef\xf2\x01\x21\x95\xf5\x6a\ -\x36\xef\x85\x7a\xc0\x59\xc3\x75\x30\x94\x20\x49\x1b\xa6\x64\xac\ -\x98\x1b\x8c\xaf\xc7\xc8\x77\x29\x6f\x81\x22\x0f\xb9\x64\x01\xcd\ -\x78\x23\xf8\x2e\x1e\x0c\x14\x7d\x80\x6a\x4b\x12\x85\xfe\xc5\xf0\ -\xf7\x6d\xf1\x02\xe9\x84\x01\x39\x59\x7b\x13\xe0\x94\x60\xfa\xbb\ -\x02\xe3\x9c\x07\xc1\xbc\x42\x10\x8e\x24\x06\x6a\x58\x29\xbf\x18\ -\xac\x43\xa1\xfc\x28\x22\xd1\x70\xba\x9d\xb4\x01\x92\x3c\xb7\x57\ -\xa9\xad\x8c\x3f\x2d\xe5\xe5\x3a\xf6\x7c\x3a\xcf\xa2\x4b\x93\x0e\ -\x10\xe5\x1a\x25\xc0\x01\xca\x05\x58\x5e\xbc\xdf\x35\x4a\xe0\x94\ -\xf8\x8f\xa7\xd6\x00\x1f\x68\x4d\x80\x62\xbd\x46\x79\x76\xb8\xaf\ -\xe6\xcb\x4b\x00\xf5\xf2\x16\xe0\x05\xb0\xc7\xa1\x1c\x7b\x09\x6c\ -\x37\x87\x72\xb1\xb9\x29\xb7\x96\xe9\xc2\x73\x93\x6f\x3c\xb7\x9b\ -\x78\x03\xfa\x3f\xe0\xde\x25\x35\ +\x00\x00\x08\xd7\ +\x3c\ +\x73\x76\x67\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x74\x65\x72\x6e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x63\x6f\x6e\x63\x72\x65\x74\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x70\x61\x74\x74\x65\x72\x6e\x55\x6e\ +\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\ +\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x2e\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x2e\x35\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x20\x73\x74\x72\x6f\x6b\x65\x3a\ +\x23\x30\x30\x30\x30\x30\x30\x3b\x20\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x2e\x35\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x73\x63\ +\x61\x6c\x65\x28\x2e\x30\x31\x29\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x34\x30\x31\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\ +\x6d\x20\x35\x2e\x33\x35\x37\x31\x34\x32\x38\x2c\x33\x2e\x35\x32\ +\x32\x38\x39\x34\x36\x20\x61\x20\x31\x2e\x33\x33\x39\x32\x38\x35\ +\x37\x2c\x31\x2e\x33\x33\x39\x32\x38\x35\x37\x20\x30\x20\x31\x20\ +\x31\x20\x2d\x32\x2e\x36\x37\x38\x35\x37\x31\x35\x2c\x30\x20\x31\ +\x2e\x33\x33\x39\x32\x38\x35\x37\x2c\x31\x2e\x33\x33\x39\x32\x38\ +\x35\x37\x20\x30\x20\x31\x20\x31\x20\x32\x2e\x36\x37\x38\x35\x37\ +\x31\x35\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x31\x34\x2e\ +\x31\x30\x37\x31\x34\x33\x2c\x36\x2e\x38\x32\x36\x34\x36\x36\x31\ +\x20\x61\x20\x33\x2e\x32\x31\x34\x32\x38\x35\x36\x2c\x33\x2e\x32\ +\x31\x34\x32\x38\x35\x36\x20\x30\x20\x31\x20\x31\x20\x2d\x36\x2e\ +\x34\x32\x38\x35\x37\x31\x31\x2c\x30\x20\x33\x2e\x32\x31\x34\x32\ +\x38\x35\x36\x2c\x33\x2e\x32\x31\x34\x32\x38\x35\x36\x20\x30\x20\ +\x31\x20\x31\x20\x36\x2e\x34\x32\x38\x35\x37\x31\x31\x2c\x30\x20\ +\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x6d\x20\x31\x34\x2e\x38\x32\x31\x34\x32\ +\x38\x2c\x33\x30\x2e\x39\x33\x33\x36\x30\x39\x20\x61\x20\x30\x2e\ +\x37\x31\x34\x32\x38\x35\x37\x33\x2c\x30\x2e\x37\x31\x34\x32\x38\ +\x35\x37\x33\x20\x30\x20\x31\x20\x31\x20\x2d\x31\x2e\x34\x32\x38\ +\x35\x37\x31\x2c\x30\x20\x30\x2e\x37\x31\x34\x32\x38\x35\x37\x33\ +\x2c\x30\x2e\x37\x31\x34\x32\x38\x35\x37\x33\x20\x30\x20\x31\x20\ +\x31\x20\x31\x2e\x34\x32\x38\x35\x37\x31\x2c\x30\x20\x7a\x22\x2f\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\ +\x64\x3d\x22\x6d\x20\x32\x38\x2e\x35\x37\x31\x34\x32\x38\x2c\x31\ +\x36\x2e\x32\x30\x31\x34\x36\x36\x20\x61\x20\x32\x2e\x32\x33\x32\ +\x31\x34\x32\x39\x2c\x32\x2e\x32\x33\x32\x31\x34\x32\x39\x20\x30\ +\x20\x31\x20\x31\x20\x2d\x34\x2e\x34\x36\x34\x32\x38\x36\x2c\x30\ +\x20\x32\x2e\x32\x33\x32\x31\x34\x32\x39\x2c\x32\x2e\x32\x33\x32\ +\x31\x34\x32\x39\x20\x30\x20\x31\x20\x31\x20\x34\x2e\x34\x36\x34\ +\x32\x38\x36\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x36\x2e\ +\x32\x35\x30\x30\x30\x30\x32\x2c\x32\x30\x2e\x30\x38\x35\x33\x39\ +\x34\x20\x61\x20\x30\x2e\x34\x39\x31\x30\x37\x31\x34\x33\x2c\x30\ +\x2e\x34\x39\x31\x30\x37\x31\x34\x33\x20\x30\x20\x31\x20\x31\x20\ +\x2d\x30\x2e\x39\x38\x32\x31\x34\x32\x39\x2c\x30\x20\x30\x2e\x34\ +\x39\x31\x30\x37\x31\x34\x33\x2c\x30\x2e\x34\x39\x31\x30\x37\x31\ +\x34\x33\x20\x30\x20\x31\x20\x31\x20\x30\x2e\x39\x38\x32\x31\x34\ +\x32\x39\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x33\x34\x2e\ +\x37\x33\x32\x31\x34\x34\x2c\x32\x37\x2e\x35\x32\x37\x37\x32\x35\ +\x20\x61\x20\x30\x2e\x32\x36\x37\x38\x35\x37\x31\x33\x2c\x30\x2e\ +\x34\x33\x33\x34\x30\x31\x39\x37\x20\x30\x20\x31\x20\x31\x20\x2d\ +\x30\x2e\x35\x33\x35\x37\x31\x34\x2c\x30\x20\x30\x2e\x32\x36\x37\ +\x38\x35\x37\x31\x33\x2c\x30\x2e\x34\x33\x33\x34\x30\x31\x39\x37\ +\x20\x30\x20\x31\x20\x31\x20\x30\x2e\x35\x33\x35\x37\x31\x34\x2c\ +\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x34\x30\x2e\x31\x37\x38\ +\x35\x37\x32\x2c\x39\x2e\x33\x37\x31\x31\x30\x38\x31\x20\x61\x20\ +\x30\x2e\x31\x33\x33\x39\x32\x38\x35\x37\x2c\x30\x2e\x32\x32\x33\ +\x32\x31\x34\x32\x38\x20\x30\x20\x31\x20\x31\x20\x2d\x30\x2e\x32\ +\x36\x37\x38\x35\x37\x2c\x30\x20\x30\x2e\x31\x33\x33\x39\x32\x38\ +\x35\x37\x2c\x30\x2e\x32\x32\x33\x32\x31\x34\x32\x38\x20\x30\x20\ +\x31\x20\x31\x20\x30\x2e\x32\x36\x37\x38\x35\x37\x2c\x30\x20\x7a\ +\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x20\x34\x30\x2e\x39\x38\x32\x31\x34\x34\ +\x2c\x33\x38\x2e\x37\x34\x36\x31\x30\x39\x20\x61\x20\x30\x2e\x32\ +\x32\x33\x32\x31\x34\x32\x38\x2c\x30\x2e\x32\x32\x33\x32\x31\x34\ +\x32\x38\x20\x30\x20\x31\x20\x31\x20\x2d\x30\x2e\x34\x34\x36\x34\ +\x32\x38\x2c\x30\x20\x30\x2e\x32\x32\x33\x32\x31\x34\x32\x38\x2c\ +\x30\x2e\x32\x32\x33\x32\x31\x34\x32\x38\x20\x30\x20\x31\x20\x31\ +\x20\x30\x2e\x34\x34\x36\x34\x32\x38\x2c\x30\x20\x7a\x22\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\ +\x3d\x22\x6d\x20\x33\x31\x2e\x31\x36\x30\x37\x31\x35\x2c\x34\x30\ +\x2e\x35\x37\x36\x34\x36\x36\x20\x61\x20\x33\x2e\x39\x32\x38\x35\ +\x37\x31\x35\x2c\x33\x2e\x39\x32\x38\x35\x37\x31\x35\x20\x30\x20\ +\x31\x20\x31\x20\x2d\x37\x2e\x38\x35\x37\x31\x34\x33\x2c\x30\x20\ +\x33\x2e\x39\x32\x38\x35\x37\x31\x35\x2c\x33\x2e\x39\x32\x38\x35\ +\x37\x31\x35\x20\x30\x20\x31\x20\x31\x20\x37\x2e\x38\x35\x37\x31\ +\x34\x33\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x32\x32\x2e\ +\x32\x33\x32\x31\x34\x33\x2c\x33\x38\x2e\x32\x35\x35\x30\x33\x35\ +\x20\x61\x20\x31\x2e\x36\x30\x37\x31\x34\x32\x38\x2c\x31\x2e\x36\ +\x30\x37\x31\x34\x32\x38\x20\x30\x20\x31\x20\x31\x20\x2d\x33\x2e\ +\x32\x31\x34\x32\x38\x36\x2c\x30\x20\x31\x2e\x36\x30\x37\x31\x34\ +\x32\x38\x2c\x31\x2e\x36\x30\x37\x31\x34\x32\x38\x20\x30\x20\x31\ +\x20\x31\x20\x33\x2e\x32\x31\x34\x32\x38\x36\x2c\x30\x20\x7a\x22\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x20\x64\x3d\x22\x6d\x20\x34\x31\x2e\x39\x36\x34\x32\x38\x37\x2c\ +\x31\x31\x2e\x36\x34\x37\x38\x39\x35\x20\x61\x20\x30\x2e\x38\x39\ +\x32\x38\x35\x37\x31\x33\x2c\x30\x2e\x38\x39\x32\x38\x35\x37\x31\ +\x33\x20\x30\x20\x31\x20\x31\x20\x2d\x31\x2e\x37\x38\x35\x37\x31\ +\x34\x2c\x30\x20\x30\x2e\x38\x39\x32\x38\x35\x37\x31\x33\x2c\x30\ +\x2e\x38\x39\x32\x38\x35\x37\x31\x33\x20\x30\x20\x31\x20\x31\x20\ +\x31\x2e\x37\x38\x35\x37\x31\x34\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\ +\x22\x6d\x20\x33\x36\x2e\x30\x37\x31\x34\x33\x2c\x32\x35\x2e\x37\ +\x35\x35\x30\x33\x37\x20\x61\x20\x30\x2e\x33\x35\x37\x31\x34\x32\ +\x38\x37\x2c\x30\x2e\x33\x35\x37\x31\x34\x32\x38\x37\x20\x30\x20\ +\x31\x20\x31\x20\x2d\x30\x2e\x37\x31\x34\x32\x38\x36\x2c\x30\x20\ +\x30\x2e\x33\x35\x37\x31\x34\x32\x38\x37\x2c\x30\x2e\x33\x35\x37\ +\x31\x34\x32\x38\x37\x20\x30\x20\x31\x20\x31\x20\x30\x2e\x37\x31\ +\x34\x32\x38\x36\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x36\ +\x2e\x32\x35\x2c\x34\x32\x2e\x39\x38\x37\x31\x37\x39\x20\x61\x20\ +\x30\x2e\x36\x32\x35\x2c\x30\x2e\x36\x32\x35\x20\x30\x20\x31\x20\ +\x31\x20\x2d\x31\x2e\x32\x35\x2c\x30\x20\x30\x2e\x36\x32\x35\x2c\ +\x30\x2e\x36\x32\x35\x20\x30\x20\x31\x20\x31\x20\x31\x2e\x32\x35\ +\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x31\x37\x2e\x33\x32\ +\x31\x34\x32\x38\x2c\x31\x39\x2e\x39\x35\x31\x34\x36\x36\x20\x61\ +\x20\x31\x2e\x33\x33\x39\x32\x38\x35\x37\x2c\x31\x2e\x33\x33\x39\ +\x32\x38\x35\x37\x20\x30\x20\x31\x20\x31\x20\x2d\x32\x2e\x36\x37\ +\x38\x35\x37\x31\x2c\x30\x20\x31\x2e\x33\x33\x39\x32\x38\x35\x37\ +\x2c\x31\x2e\x33\x33\x39\x32\x38\x35\x37\x20\x30\x20\x31\x20\x31\ +\x20\x32\x2e\x36\x37\x38\x35\x37\x31\x2c\x30\x20\x7a\x22\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\ +\x3d\x22\x6d\x20\x31\x31\x2e\x39\x36\x34\x32\x38\x36\x2c\x31\x38\ +\x2e\x31\x36\x35\x37\x35\x32\x20\x61\x20\x30\x2e\x34\x34\x36\x34\ +\x32\x38\x35\x37\x2c\x30\x2e\x34\x34\x36\x34\x32\x38\x35\x37\x20\ +\x30\x20\x31\x20\x31\x20\x2d\x30\x2e\x38\x39\x32\x38\x35\x37\x2c\ +\x30\x20\x30\x2e\x34\x34\x36\x34\x32\x38\x35\x37\x2c\x30\x2e\x34\ +\x34\x36\x34\x32\x38\x35\x37\x20\x30\x20\x31\x20\x31\x20\x30\x2e\ +\x38\x39\x32\x38\x35\x37\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\ +\x20\x31\x36\x2e\x36\x30\x37\x31\x34\x33\x2c\x37\x2e\x38\x39\x37\ +\x38\x39\x34\x39\x20\x61\x20\x30\x2e\x35\x33\x35\x37\x31\x34\x32\ +\x37\x2c\x30\x2e\x35\x33\x35\x37\x31\x34\x32\x37\x20\x30\x20\x31\ +\x20\x31\x20\x2d\x31\x2e\x30\x37\x31\x34\x32\x39\x2c\x30\x20\x30\ +\x2e\x35\x33\x35\x37\x31\x34\x32\x37\x2c\x30\x2e\x35\x33\x35\x37\ +\x31\x34\x32\x37\x20\x30\x20\x31\x20\x31\x20\x31\x2e\x30\x37\x31\ +\x34\x32\x39\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x70\x61\x74\ +\x74\x65\x72\x6e\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x3c\x2f\x73\x76\x67\x3e\ \x00\x00\x74\xe7\ \x3c\ \xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ @@ -37775,83 +37846,83 @@ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x35\x00\x00\x00\x1b\ \x00\x00\x00\x38\x00\x02\x00\x00\x00\x05\x00\x00\x00\x16\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x05\ -\x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x06\x43\xc1\ -\x00\x00\x02\x02\x00\x01\x00\x00\x00\x01\x00\x05\x40\x4a\ -\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x03\x79\xe8\ -\x00\x00\x02\x56\x00\x01\x00\x00\x00\x01\x00\x05\xdd\x0d\ -\x00\x00\x02\x3a\x00\x01\x00\x00\x00\x01\x00\x05\xa8\x51\ -\x00\x00\x01\x3e\x00\x01\x00\x00\x00\x01\x00\x02\x06\xcc\ -\x00\x00\x02\x1e\x00\x01\x00\x00\x00\x01\x00\x05\x73\x1f\ -\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x96\ -\x00\x00\x02\x72\x00\x01\x00\x00\x00\x01\x00\x06\x10\xb8\ -\x00\x00\x01\x5a\x00\x00\x00\x00\x00\x01\x00\x02\x39\x0a\ -\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x01\x5e\x55\ -\x00\x00\x01\xae\x00\x01\x00\x00\x00\x01\x00\x04\x2a\x0f\ -\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x02\xe4\x37\ -\x00\x00\x01\x06\x00\x01\x00\x00\x00\x01\x00\x01\x2b\x46\ -\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x81\ -\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x04\x5d\x63\ -\x00\x00\x01\xe6\x00\x01\x00\x00\x00\x01\x00\x05\x0e\x32\ +\x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x06\x48\x2f\ +\x00\x00\x02\x02\x00\x01\x00\x00\x00\x01\x00\x05\x44\xb8\ +\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x03\x7e\x56\ +\x00\x00\x02\x56\x00\x01\x00\x00\x00\x01\x00\x05\xe1\x7b\ +\x00\x00\x02\x3a\x00\x01\x00\x00\x00\x01\x00\x05\xac\xbf\ +\x00\x00\x01\x3e\x00\x01\x00\x00\x00\x01\x00\x02\x0b\x3a\ +\x00\x00\x02\x1e\x00\x01\x00\x00\x00\x01\x00\x05\x77\x8d\ +\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x04\ +\x00\x00\x02\x72\x00\x01\x00\x00\x00\x01\x00\x06\x15\x26\ +\x00\x00\x01\x5a\x00\x00\x00\x00\x00\x01\x00\x02\x3d\x78\ +\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x01\x62\xc3\ +\x00\x00\x01\xae\x00\x01\x00\x00\x00\x01\x00\x04\x2e\x7d\ +\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x02\xe8\xa5\ +\x00\x00\x01\x06\x00\x01\x00\x00\x00\x01\x00\x01\x2f\xb4\ +\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x83\xef\ +\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x04\x61\xd1\ +\x00\x00\x01\xe6\x00\x01\x00\x00\x00\x01\x00\x05\x12\xa0\ \x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\xb0\x00\x01\x00\x00\x00\x01\x00\x00\x06\x29\ +\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x06\x29\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x6c\x16\ -\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xbd\xc3\ -\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x1f\xe0\ -\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xde\xc8\ -\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x08\xaa\ -\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x89\x60\ -\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe1\xfe\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb3\x2f\ -\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x59\x6f\ -\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xfa\xd8\ -\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xd6\xe5\ -\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xe7\xc2\ -\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x76\xca\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xdc\x64\ -\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa2\x25\ -\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xcc\x79\ -\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc1\x0e\ -\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x98\x0d\ -\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x23\xc9\ -\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xad\x18\ -\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xb7\x7a\ -\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x11\xb0\ -\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x90\x54\ -\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x08\xb6\ -\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x69\xb7\ -\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x35\x39\ -\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x80\x6a\ -\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xc9\xd1\ -\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xf7\xcc\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xe9\x62\ -\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x4c\x78\ -\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa0\x14\ -\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x06\xb1\ -\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\x9d\xf1\ -\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb5\x34\ -\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x28\x89\ -\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xc9\x9b\ -\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x5e\xb7\ -\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc0\x20\ -\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x44\xde\ -\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x06\xfe\x69\ -\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdb\x89\ -\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x2f\xba\ -\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x5f\xe4\ -\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x07\xfd\x44\ -\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x10\x0a\ -\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd4\x46\ -\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x93\x41\ -\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xef\x83\ -\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xed\x72\ -\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x3d\x1e\ -\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x98\xb1\ -\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x2f\xda\ -\x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x77\x44\ -\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x80\xb1\ +\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x70\x84\ +\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xc2\x31\ +\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x24\x4e\ +\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xe3\x36\ +\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x0d\x18\ +\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x8d\xce\ +\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe6\x6c\ +\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb7\x9d\ +\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x5d\xdd\ +\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xff\x46\ +\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xdb\x53\ +\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xec\x30\ +\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x7b\x38\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xe0\xd2\ +\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa6\x93\ +\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xd0\xe7\ +\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc5\x7c\ +\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x9c\x7b\ +\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x28\x37\ +\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xb1\x86\ +\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xbb\xe8\ +\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x16\x1e\ +\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x94\xc2\ +\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x0d\x24\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x6e\x25\ +\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x39\xa7\ +\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x84\xd8\ +\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xce\x3f\ +\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xfc\x3a\ +\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xed\xd0\ +\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x50\xe6\ +\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa4\x82\ +\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x0b\x1f\ +\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\xa2\x5f\ +\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb9\xa2\ +\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x2c\xf7\ +\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xce\x09\ +\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x63\x25\ +\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc4\x8e\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x49\x4c\ +\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x07\x02\xd7\ +\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdf\xf7\ +\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x34\x28\ +\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x64\x52\ +\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x08\x01\xb2\ +\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x14\x78\ +\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd8\xb4\ +\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x97\xaf\ +\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xf3\xf1\ +\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xf1\xe0\ +\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x41\x8c\ +\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x9d\x1f\ +\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x34\x48\ +\x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x7b\xb2\ +\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x85\x1f\ " def qInitResources(): diff --git a/src/Mod/Draft/Resources/patterns/concrete.svg b/src/Mod/Draft/Resources/patterns/concrete.svg index 8c2fd6c61..2aa5e9565 100644 --- a/src/Mod/Draft/Resources/patterns/concrete.svg +++ b/src/Mod/Draft/Resources/patterns/concrete.svg @@ -11,102 +11,22 @@ style="fill:none; stroke:#000000; stroke-width:.5" transform="scale(.01)" id="g3401"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + From 01681d66ec1ce35959f5c9b82e478ba17f65d63d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 6 Jun 2012 16:45:34 -0300 Subject: [PATCH 296/517] Arch: Bugfix in wall object --- src/Mod/Arch/ArchWall.py | 46 ++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 25fb891ee..1d6f8e5e0 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -382,28 +382,32 @@ class _Wall(ArchComponent.Component): else: FreeCAD.Console.PrintError(str(translate("Arch","Error: Invalid base object"))) - for app in obj.Additions: - if hasattr(app,"Shape"): - base = base.fuse(app.Shape) - app.ViewObject.hide() #to be removed - for hole in obj.Subtractions: - if Draft.getType(hole) == "Window": - # window - if hole.Base and obj.Width: - f = self.getSubVolume(hole.Base,width) - if f: - base = base.cut(f) - elif Draft.isClone(hole,"Window"): - if hole.Objects[0].Base and width: - f = self.getSubVolume(hole.Objects[0].Base,width,hole.Placement.Base) - if f: - base = base.cut(f) - elif hasattr(hole,"Shape"): - if not hole.Shape.isNull(): - base = base.cut(hole.Shape) - hole.ViewObject.hide() # to be removed - if base: + for app in obj.Additions: + if hasattr(app,"Shape"): + if app.Shape: + if not app.Shape.isNull(): + base = base.fuse(app.Shape) + app.ViewObject.hide() #to be removed + + for hole in obj.Subtractions: + if Draft.getType(hole) == "Window": + # window + if hole.Base and obj.Width: + f = self.getSubVolume(hole.Base,width) + if f: + base = base.cut(f) + elif Draft.isClone(hole,"Window"): + if hole.Objects[0].Base and width: + f = self.getSubVolume(hole.Objects[0].Base,width,hole.Placement.Base) + if f: + base = base.cut(f) + elif hasattr(hole,"Shape"): + if hole.Shape: + if not hole.Shape.isNull(): + base = base.cut(hole.Shape) + hole.ViewObject.hide() # to be removed + if not base.isNull(): try: base = base.removeSplitter() From 46b7d598ee4a5bd489d8adeb25994abfe7bf1dec Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 6 Jun 2012 16:45:54 -0300 Subject: [PATCH 297/517] Draft: Fixes in trackers * Plane tracker can now be turned off in preferences * Grid no longer stays in front of new objects --- src/Mod/Draft/Draft.py | 2 +- src/Mod/Draft/DraftGui.py | 3 + src/Mod/Draft/DraftSnap.py | 4 + src/Mod/Draft/DraftTools.py | 193 +++--- src/Mod/Draft/DraftTrackers.py | 16 + src/Mod/Draft/Draft_rc.py | 663 ++++++++++--------- src/Mod/Draft/Resources/ui/userprefs-base.ui | 51 +- 7 files changed, 468 insertions(+), 464 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 49ff4ad04..fc2596beb 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -108,7 +108,7 @@ def getParamType(param): return "float" elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit","maxSnap", "SvgLinesBlack","dxfStdSize","showSnapBar","hideSnapBar","alwaysShowGrid", - "renderPolylineWidth"]: + "renderPolylineWidth","showPlaneTracker"]: return "bool" elif param in ["color","constructioncolor","snapcolor"]: return "unsigned" diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 7e651a698..663c57fe9 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -87,6 +87,9 @@ class todo: except: wrn = "[Draft.todo.commit] Unexpected error:", sys.exc_info()[0], "in ", f, "(", arg, ")" FreeCAD.Console.PrintWarning (wrn) + # restack Draft screen widgets after creation + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.restack() todo.commitlist = [] @staticmethod diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 183f20a52..3918be2b2 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -631,6 +631,10 @@ class Snapper: v.setCursor(cur) self.cursorMode = mode + def restack(self): + if self.grid: + self.grid.lowerTracker() + def off(self): "finishes snapping" if self.tracker: diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 06cffa472..1a55ee3cf 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -327,62 +327,65 @@ class SelectPlane: # Geometry constructors #--------------------------------------------------------------------------- -class Creator: - "A generic Draft Creator Tool used by creation tools such as line or arc" +class DraftTool: + "The base class of all Draft Tools" def __init__(self): self.commitList = [] - + def Activated(self,name="None"): if FreeCAD.activeDraftCommand: FreeCAD.activeDraftCommand.finish() + global Part, DraftGeomUtils import Part, DraftGeomUtils + self.ui = None self.call = None - self.doc = None - self.support = None + self.support = None self.commitList = [] self.doc = FreeCAD.ActiveDocument - self.view = Draft.get3DView() - self.featureName = name if not self.doc: self.finish() - else: - FreeCAD.activeDraftCommand = self - self.ui = FreeCADGui.draftToolBar - self.ui.sourceCmd = self - self.ui.setTitle(name) - self.ui.show() - rot = self.view.getCameraNode().getField("orientation").getValue() - upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) - self.node = [] - self.pos = [] - self.constrain = None - self.obj = None - self.snap = snapTracker() - self.extsnap = lineTracker(dotted=True) - self.planetrack = PlaneTracker() - - def IsActive(self): - if FreeCADGui.ActiveDocument: - return True - else: - return False + return + FreeCAD.activeDraftCommand = self + self.view = Draft.get3DView() + self.ui = FreeCADGui.draftToolBar + self.ui.sourceCmd = self + self.ui.setTitle(name) + self.ui.show() + rot = self.view.getCameraNode().getField("orientation").getValue() + upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) + plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) + self.node = [] + self.pos = [] + self.constrain = None + self.obj = None + self.extendedCopy = False + self.ui.setTitle(name) + self.featureName = name + #self.snap = snapTracker() + #self.extsnap = lineTracker(dotted=True) + self.planetrack = None + if Draft.getParam("showPlaneTracker"): + self.planetrack = PlaneTracker() + def finish(self): - self.snap.finalize() - self.extsnap.finalize() - self.node=[] - self.planetrack.finalize() - if self.support: plane.restore() - FreeCADGui.Snapper.off() + self.node = [] + #self.snap.finalize() + #self.extsnap.finalize() FreeCAD.activeDraftCommand = None if self.ui: self.ui.offUi() - self.ui.sourceCmd = None + self.ui.sourceCmd=None + #self.ui.cross(False) msg("") + if self.planetrack: + self.planetrack.finalize() + if self.support: + plane.restore() + FreeCADGui.Snapper.off() if self.call: self.view.removeEventCallback("SoEvent",self.call) self.call = None @@ -390,6 +393,11 @@ class Creator: todo.delayCommit(self.commitList) self.commitList = [] + def commit(self,name,func): + "stores actions to be committed to the FreeCAD document" + # print "committing" + self.commitList.append((name,func)) + def getStrings(self): "returns a couple of useful strings fro building python commands" @@ -419,10 +427,19 @@ class Creator: fil = "True" return qr,sup,points,fil - - def commit(self,name,func): - "stores actions to be committed to the FreeCAD document" - self.commitList.append((name,func)) + + +class Creator(DraftTool): + "A generic Draft Creator Tool used by creation tools such as line or arc" + + def __init__(self): + DraftTool.__init__(self) + + def IsActive(self): + if FreeCADGui.ActiveDocument: + return True + else: + return False class Line(Creator): "The Line FreeCAD command definition" @@ -527,7 +544,8 @@ class Line(Creator): if (len(self.node) == 1): self.linetrack.on() msg(translate("draft", "Pick next point:\n")) - self.planetrack.set(self.node[0]) + if self.planetrack: + self.planetrack.set(self.node[0]) elif (len(self.node) == 2): last = self.node[len(self.node)-2] newseg = Part.Line(last,point).toShape() @@ -550,7 +568,8 @@ class Line(Creator): self.obj.ViewObject.Visibility = False self.node = [self.node[-1]] self.linetrack.p1(self.node[0]) - self.planetrack.set(self.node[0]) + if self.planetrack: + self.planetrack.set(self.node[0]) msg(translate("draft", "Pick next point:\n")) def numericInput(self,numx,numy,numz): @@ -643,7 +662,8 @@ class BSpline(Line): def drawUpdate(self,point): if (len(self.node) == 1): self.bsplinetrack.on() - self.planetrack.set(self.node[0]) + if self.planetrack: + self.planetrack.set(self.node[0]) msg(translate("draft", "Pick next point:\n")) else: spline = Part.BSplineCurve() @@ -821,7 +841,8 @@ class Rectangle(Creator): self.ui.setRelative() self.rect.setorigin(point) self.rect.on() - self.planetrack.set(point) + if self.planetrack: + self.planetrack.set(point) class Arc(Creator): @@ -1026,7 +1047,8 @@ class Arc(Creator): self.step = 1 self.linetrack.on() msg(translate("draft", "Pick radius:\n")) - self.planetrack.set(point) + if self.planetrack: + self.planetrack.set(point) elif (self.step == 1): # choose radius if self.closedCircle: self.ui.cross(False) @@ -1294,7 +1316,8 @@ class Polygon(Creator): self.step = 1 self.linetrack.on() msg(translate("draft", "Pick radius:\n")) - self.planetrack.set(point) + if self.planetrack: + self.planetrack.set(point) elif (self.step == 1): # choose radius self.ui.cross(False) self.drawPolygon() @@ -1670,7 +1693,8 @@ class Dimension(Creator): self.point2 = self.node[1] if (len(self.node) == 1): self.dimtrack.on() - self.planetrack.set(self.node[0]) + if self.planetrack: + self.planetrack.set(self.node[0]) elif (len(self.node) == 2) and self.cont: self.node.append(self.cont) self.createObject() @@ -1705,73 +1729,18 @@ class Dimension(Creator): # Modifier functions #--------------------------------------------------------------------------- -class Modifier: +class Modifier(DraftTool): "A generic Modifier Tool, used by modification tools such as move" - - def __init__(self): - self.commitList = [] + def __init__(self): + DraftTool.__init__(self) + def IsActive(self): if Draft.getSelection(): return True else: return False - def Activated(self,name="None"): - if FreeCAD.activeDraftCommand: - FreeCAD.activeDraftCommand.finish() - global Part, DraftGeomUtils - import Part, DraftGeomUtils - self.ui = None - self.call = None - self.commitList = [] - self.doc = FreeCAD.ActiveDocument - if not self.doc: - self.finish() - else: - FreeCAD.activeDraftCommand = self - self.view = Draft.get3DView() - self.ui = FreeCADGui.draftToolBar - FreeCADGui.draftToolBar.show() - rot = self.view.getCameraNode().getField("orientation").getValue() - upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) - self.node = [] - self.ui.sourceCmd = self - self.constrain = None - self.obj = None - self.extendedCopy = False - self.ui.setTitle(name) - self.featureName = name - #self.snap = snapTracker() - #self.extsnap = lineTracker(dotted=True) - self.planetrack = PlaneTracker() - - def finish(self): - self.node = [] - #self.snap.finalize() - #self.extsnap.finalize() - FreeCAD.activeDraftCommand = None - if self.ui: - self.ui.offUi() - self.ui.sourceCmd=None - self.ui.cross(False) - msg("") - self.planetrack.finalize() - FreeCADGui.Snapper.off() - if self.call: - self.view.removeEventCallback("SoEvent",self.call) - self.call = None - if self.commitList: - todo.delayCommit(self.commitList) - self.commitList = [] - - def commit(self,name,func): - "stores actions to be committed to the FreeCAD document" - # print "committing" - self.commitList.append((name,func)) - - class Move(Modifier): "The Draft_Move FreeCAD command definition" @@ -1870,7 +1839,8 @@ class Move(Modifier): self.ghost.on() self.linetrack.p1(point) msg(translate("draft", "Pick end point:\n")) - self.planetrack.set(point) + if self.planetrack: + self.planetrack.set(point) else: last = self.node[0] if self.ui.isCopy.isChecked() or hasMod(arg,MODALT): @@ -2085,7 +2055,8 @@ class Rotate(Modifier): self.linetrack.on() self.step = 1 msg(translate("draft", "Pick base angle:\n")) - self.planetrack.set(point) + if self.planetrack: + self.planetrack.set(point) elif (self.step == 1): self.ui.labelRadius.setText("Rotation") self.rad = DraftVecUtils.dist(point,self.center) @@ -2201,7 +2172,8 @@ class Offset(Modifier): self.call = self.view.addEventCallback("SoEvent",self.action) msg(translate("draft", "Pick distance:\n")) self.ui.cross(True) - self.planetrack.set(self.shape.Vertexes[0].Point) + if self.planetrack: + self.planetrack.set(self.shape.Vertexes[0].Point) self.running = True def action(self,arg): @@ -3293,7 +3265,8 @@ class Edit(Modifier): plane.save() if "Shape" in self.obj.PropertiesList: plane.alignToFace(self.obj.Shape) - self.planetrack.set(self.editpoints[0]) + if self.planetrack: + self.planetrack.set(self.editpoints[0]) else: msg(translate("draft", "This object type is not editable\n"),'warning') self.finish() diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index ab556e095..47e378a34 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -81,6 +81,22 @@ class Tracker: self.switch.whichChild = -1 self.Visible = False + def lowerTracker(self): + '''lowers the tracker to the bottom of the scenegraph, so + it doesn't obscure the other objects''' + if self.switch: + sg=Draft.get3DView().getSceneGraph() + sg.removeChild(self.switch) + sg.addChild(self.switch) + + def raiseTracker(self): + '''raises the tracker to the top of the scenegraph, so + it obscures the other objects''' + if self.switch: + sg=Draft.get3DView().getSceneGraph() + sg.removeChild(self.switch) + sg.insertChild(self.switch,0) + class snapTracker(Tracker): "A Snap Mark tracker, used by tools that support snapping" def __init__(self): diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index e74a2fc93..4028d367e 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Tue Jun 5 20:09:57 2012 +# Created: Wed Jun 6 16:21:23 2012 # by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -117,7 +117,7 @@ qt_resource_data = "\ \x0a\x20\x20\x20\x20\x3c\x2f\x70\x61\x74\x74\x65\x72\x6e\x3e\x0a\ \x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ \ -\x00\x00\x08\xd7\ +\x00\x00\x08\xd6\ \x3c\ \x73\x76\x67\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\x20\ \x20\x20\x3c\x70\x61\x74\x74\x65\x72\x6e\x0a\x20\x20\x20\x20\x20\ @@ -257,10 +257,10 @@ qt_resource_data = "\ \x20\x31\x20\x2d\x31\x2e\x30\x37\x31\x34\x32\x39\x2c\x30\x20\x30\ \x2e\x35\x33\x35\x37\x31\x34\x32\x37\x2c\x30\x2e\x35\x33\x35\x37\ \x31\x34\x32\x37\x20\x30\x20\x31\x20\x31\x20\x31\x2e\x30\x37\x31\ -\x34\x32\x39\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x0a\x20\x20\x20\x20\ -\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x70\x61\x74\ -\x74\x65\x72\x6e\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ -\x3c\x2f\x73\x76\x67\x3e\ +\x34\x32\x39\x2c\x30\x20\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x70\x61\x74\x74\ +\x65\x72\x6e\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x3c\ +\x2f\x73\x76\x67\x3e\ \x00\x00\x74\xe7\ \x3c\ \xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\ @@ -26767,258 +26767,263 @@ qt_resource_data = "\ \x33\x2e\x72\x9f\xc2\xcc\xa8\x77\x7d\x66\xc6\x1b\xcc\xef\xf2\x48\ \xa6\x8c\x0e\x28\xa3\x2d\x9e\x88\x63\x66\x74\x00\x9f\x1b\xd5\x84\ \x37\x0f\xfe\x01\xbd\x89\x17\xfc\ -\x00\x00\x0f\x9f\ +\x00\x00\x0f\xe1\ \x00\ -\x00\xa2\x2c\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ -\x0f\x45\x0e\xc8\xc6\xb1\xf3\x6e\x1d\x2f\xda\xf4\x09\x74\x77\xbb\ -\x75\xda\xbd\xbd\x2f\x0b\x5a\xa2\x6d\x5e\x65\xd1\x4b\xd2\x49\xbc\ -\xb8\x1f\x7f\x33\xa4\x64\x4b\xb2\x2c\xc7\xa6\x65\x39\xad\x8b\x02\ -\xb1\x48\x8a\x1c\x0e\xe7\xc5\x99\x21\xd5\xfc\xf9\x61\x10\x90\x3b\ -\x26\x15\x17\xe1\xf5\x7e\xfd\xe8\x78\x9f\xb0\xd0\x13\x3e\x0f\x7b\ -\xd7\xfb\x5f\x6e\xdf\xfe\x74\xb9\xff\x73\x6b\xaf\x39\xe2\xd3\x46\ -\xa7\xd0\xa8\xb5\x47\x9a\x5e\x40\x95\x6a\xbd\x1b\xf1\xe7\xcf\x5f\ -\x73\x1a\x88\x1e\xfc\x0d\x7a\x6d\xa6\x35\xbc\xac\x5e\x4b\xda\xd5\ -\xcd\x9a\x6d\x04\xad\xef\xb9\xdf\x63\x9a\x98\xe7\xeb\xfd\xdf\xff\ -\x30\x8f\xfb\x24\xa4\x03\x76\xbd\x5f\xd8\x09\x0e\x46\x9a\x43\x29\ -\x86\x4c\xea\x71\xf4\x46\x8f\x89\x01\xd3\x72\x6c\x2a\x49\x53\x32\ -\x4f\x9b\x5f\xa4\xf9\xd0\x3a\x6e\xd6\x1e\xa2\x87\x31\x3e\x8c\xa3\ -\x07\x00\x41\xf7\x5b\x67\x57\x50\x64\x7f\xda\xe2\x3e\xe3\xbd\xbe\ -\x6e\x9d\x9f\x34\x9a\xb5\xe8\xb7\xe9\xb3\x16\x77\xda\xac\xc5\x83\ -\xe7\x41\x72\xcf\x43\x5f\xdc\xdf\x72\x1d\xb0\x08\x18\xa5\x25\x00\ -\xdf\x7a\xc7\x42\x26\x69\x40\x54\x34\x99\x66\x2d\xaa\x98\xed\x32\ -\xa0\x63\x31\x9a\x22\xe7\xeb\x2b\xf1\xf0\xd1\x14\x45\x3d\x66\x86\ -\x54\x43\xea\x41\x47\xfb\xd1\x04\xc2\xd1\xa0\xc3\x64\xeb\xbc\x59\ -\x8b\x7e\x59\xf0\x93\x23\xcc\x74\x31\xa0\xb2\xc7\xc3\x4c\x0f\x57\ -\x85\x3d\x70\xcd\x06\x53\x4c\x26\x17\xf3\x9d\x14\xa3\x21\xc0\x1c\ -\x2f\x67\x2f\x7e\xb6\xcd\x67\x06\xd7\x53\x64\xe5\xe0\xcb\x2c\x3a\ -\x69\xe7\x60\x6d\x16\xa8\x42\xdc\x45\xa3\x01\xe1\x6a\xee\xd1\xc0\ -\x96\xfe\xd5\x98\x0e\x3c\x9d\x51\x4e\x47\xef\x67\x3a\xea\x0b\xc9\ -\xff\x11\xa1\x9e\x74\x55\xbf\x9a\xf4\x95\xed\x6d\x16\x49\x1f\x69\ -\x87\x05\x71\x57\x01\x3e\xa4\xdf\xcf\x41\x13\x7b\xd0\xa9\x06\x13\ -\x54\x59\x14\xf1\x50\x33\xd9\xa5\x1e\x23\x03\xe1\xb3\x0c\xa2\xf2\ -\xb1\x65\x0b\x2d\x64\x09\xd0\x6b\x69\xd8\x17\x4c\xc5\x70\xeb\x27\ -\xc9\xba\x37\x62\xd0\x11\xc9\x75\xc7\x8a\x21\x54\x78\x58\xd1\x11\ -\x0f\x7f\x9d\x16\x4f\x50\x88\xe0\x96\x0f\xf3\xe7\x78\xdb\xe7\x8a\ -\xc0\x7f\xdd\x67\xe4\xcb\x07\x33\x45\x98\x31\xb9\xef\x73\xaf\x6f\ -\x0a\x2d\x12\xa0\x7c\x14\x30\x72\xcf\x83\x80\xdc\x0b\xf9\xed\x39\ -\xb9\x85\x5e\x3b\x54\xda\x37\x4c\xf9\x30\x40\x24\xd1\x20\xa6\xad\ -\x98\x23\xb1\x3f\x0a\x4f\x43\x2a\xa9\x66\x44\xdb\x17\x0f\x71\x0c\ -\xe8\x52\x53\xf5\x2d\xdd\xcf\x48\x31\x33\xf2\x5b\xc9\xd8\xcd\xcb\ -\xd7\xe4\x16\x5a\xdc\x71\x76\x4f\xd4\x58\x01\xc6\x48\x57\x48\x33\ -\x0a\xd7\x0a\xdb\x4a\xbb\x42\xd4\xd3\x20\x37\x1f\xbd\x3c\x33\x58\ -\x42\x84\xbe\x09\x51\xd6\x11\xa5\x7d\x80\xfd\x7a\xff\x38\x83\x32\ -\x2f\xea\xfb\x0b\xff\xc5\x50\x82\xe7\x32\xd6\x27\xaa\xfb\x8b\x87\ -\x82\x81\x6a\xb1\x8c\x7f\xf4\x68\x19\xba\x7a\x0c\xc9\x4f\xe9\xc1\ -\xae\x4e\x1e\x1e\xe7\x0d\x57\xcb\x8e\xe7\x06\x40\xb4\xda\x2e\x10\ -\x2c\xe4\xbd\x66\xcd\x8a\xa1\x89\x8c\x4a\x55\x3b\x4b\xac\x86\x9b\ -\xc0\x6a\xac\x2a\xaf\x58\x97\x8e\x02\xe8\x5a\x04\x22\x77\x05\x4b\ -\x17\x54\x30\xee\xab\x91\xd6\x22\xcc\x91\x55\x50\xd7\xb1\x75\x2b\ -\x0b\x2b\x94\x0a\x7e\x72\x92\x46\x16\x84\x20\x1a\x44\xe7\xbf\x60\ -\x46\x64\xd5\x58\x11\xcd\x64\xc6\x35\xdd\x65\x99\x10\xcb\x32\x54\ -\x2a\x99\x8f\xc6\x0e\xfe\x49\x57\xf4\x40\x5a\x85\x58\x65\x7f\xa4\ -\x2b\x3b\xc1\x88\x61\x9d\xf9\x9b\x26\xe8\x99\x41\xd6\x2e\xae\x22\ -\x72\xd8\x4e\x69\xe5\x4c\x7d\x79\x0c\xb4\x40\x1f\xce\x65\xa0\x76\ -\x48\x87\xdb\xce\x3d\x8b\xa4\xc3\xf2\xfc\xa3\x70\xd6\x6a\x0c\xb6\ -\x44\xb0\x63\xa0\x14\xf8\x11\x2e\x10\x41\x3f\x1e\x13\xad\x6a\x35\ -\xdf\x88\x10\x7e\x8d\x8c\x39\xb6\xf5\xcc\x74\xb2\x1e\xcb\x79\x96\ -\xa9\x22\x85\x44\x3a\x0c\xda\x12\x5f\xd2\xfb\x30\x32\x78\x39\x62\ -\x25\x81\x22\x34\x7c\x8f\x36\xc3\x77\xa7\xa7\xf3\x19\xaf\xde\x38\ -\x2b\x60\xbd\xc6\xd9\x59\x65\xda\x6b\x8a\xab\x1f\x8f\x09\x17\xd0\ -\xe7\x42\x53\x30\xe0\x60\x1d\xa1\x17\xa6\x02\x1e\x6c\x0f\x79\x98\ -\xb7\x6d\x55\x50\xde\x99\xba\x2d\xf2\x67\xf6\x58\x35\x36\x99\xe0\ -\xfa\x4c\xc1\x3b\x0a\x74\x9e\x19\x39\x72\xd8\x34\x52\xae\x9b\xa5\ -\x7a\x5d\x82\xe4\x13\x8b\xf6\x44\x49\xbd\xe4\xfd\xd5\x89\xe3\xfe\ -\xea\xd8\x49\xb5\x51\x6e\x84\xf6\x56\x7a\x82\xce\x5c\xf4\x19\x23\ -\x93\x09\xa2\xd2\x82\x39\xf2\x2e\x67\x92\x7c\x63\xe3\x8d\xf8\x55\ -\x60\x40\x2f\x06\x60\x5b\x49\xdf\xcd\xb9\xa1\xfa\x1c\x07\xab\xca\ -\xb7\xe2\x69\x19\x54\x37\x3a\x0d\x9c\xa6\xbe\x02\x1b\xa1\x07\x1f\ -\xe8\x37\x2b\x45\xda\xa6\x78\x01\xaf\x40\x6b\x06\x8d\xd1\xec\xc8\ -\x50\x0f\x03\x15\xd0\xfa\x5d\x3f\x7f\xfe\x7e\xd2\x63\xb3\x66\x0a\ -\x97\x26\x55\xc5\xff\x61\xef\x79\xa8\xe7\x93\x2a\xb6\xc8\xa0\xd3\ -\x46\x55\x4e\xd3\xf1\x95\x49\x6d\x14\x5b\x69\x1c\xa7\xc2\x2c\x53\ -\xb0\xb2\x1d\xce\x11\x59\x16\x75\x6b\xb5\x65\x1a\x75\x97\x6d\xf9\ -\xb6\x4a\xdc\x73\x37\x89\xab\xa2\xb9\xad\x41\xd2\x7a\x23\x29\x81\ -\x64\x3f\x84\x3e\x7b\xc8\x37\x5f\xea\x1b\x31\x5f\x60\x36\x38\xab\ -\x9d\x04\xb7\xa5\x3b\x09\x3e\x2d\x58\xb3\x04\x2f\xe6\xbd\x9d\x04\ -\x5f\xbb\x04\x5f\x35\x32\xf1\x32\xd0\x5b\x2b\xc0\x2f\xdc\x04\x38\ -\xb5\x53\xdb\x88\xfc\xde\xcc\xf6\x13\x66\x63\x18\x7d\x27\xbe\x77\ -\xe2\x7b\x9b\xa2\xaa\xf5\x24\x15\xad\x92\x07\xe2\xb6\xed\x8f\xdc\ -\xb5\x26\xeb\xc6\xbc\x52\x81\x34\xfb\xc8\x43\xf6\xc6\xe7\x7a\x46\ -\x9a\xa1\xcb\x88\x41\x85\x4b\x74\x28\xcf\xa1\x3d\x9d\xad\xf1\xaf\ -\xa5\x1c\xd7\x71\x72\xd8\xea\x12\xef\x71\x28\xdf\x88\xef\x21\x39\ -\x33\x33\x69\xbb\xc2\xdb\x29\x03\xab\xe6\xc4\xd3\xc7\x33\xe2\x54\ -\x11\xf7\x99\xf7\x2d\x57\x11\x63\x85\x93\x3f\xd8\xf4\x00\x64\x8b\ -\xe4\xdb\x25\x00\x21\xb9\xa7\xa1\x26\x5a\x4c\x52\x89\x4c\xe0\xa0\ -\x96\xf0\x15\x4b\x31\x30\x15\x51\x32\x12\xa1\x2a\x26\xf9\x32\xa8\ -\xb9\x4d\xef\x00\x06\xab\xde\xa3\x18\x11\x0d\xfd\x84\xef\x9a\x7a\ -\x52\x28\x45\x14\x53\x98\xfc\xe9\xe0\xbb\x5e\x26\xaa\x09\x40\x89\ -\x90\x3d\xf0\xad\x55\xf5\x55\x93\xf9\x45\x19\x64\xee\xe2\xa2\xfd\ -\xd0\x8d\xa8\x5c\x11\xd3\x1d\xf3\x0f\x81\x9c\x86\xe3\x44\xf2\x5c\ -\x87\x81\x11\x3a\xd4\x31\x45\x81\x95\x3b\x00\x52\x3b\x24\x02\xa8\ -\x5d\xde\x73\xc5\xe2\x22\x65\xdb\xd3\xe0\x9e\x8e\x81\xf2\x34\x95\ -\x98\xea\x48\x42\xf1\xd3\xa4\xc7\x32\x58\xe1\x5d\x20\x3a\x34\x20\ -\x6b\x18\x23\xc2\x40\x66\x98\x0e\xe0\xaf\x05\x82\x1c\x3a\x36\x3f\ -\xcb\xd5\x19\xc3\xf1\x60\x8b\x33\x01\xab\xe6\x9f\xfa\x65\x29\x0c\ -\xe4\x10\xb3\xff\x55\xc8\x01\x0d\x82\xf1\x21\x01\x44\x32\x69\xc8\ -\x10\x43\x1d\x51\xcc\xf0\x30\x52\x16\x43\xce\x14\x41\xe0\x14\x0b\ -\xa0\x9c\xf9\x47\x24\x66\x3d\x31\x34\xb6\x4f\x92\x03\xf1\x9d\x0e\ -\x05\xce\x8a\x63\xfe\x31\x23\xc6\x6f\x03\x5f\x29\xcd\xa8\xef\x10\ -\xe5\x2f\xd0\x2d\x66\x90\x34\x00\xa9\xc9\x6d\x46\x99\x18\x28\x5e\ -\x01\x10\xbf\xc5\xe1\xd7\x1d\x4f\xe4\xf1\xc4\x59\x29\x2c\x71\xb9\ -\x5e\x9d\x62\x4c\xa8\xa4\x76\x40\x27\x35\x98\x53\x60\x2c\x28\x9d\ -\xe0\x97\x28\xa3\x05\xb3\x5b\xa0\xd4\x30\x49\x28\x74\xe2\xfd\x8e\ -\x75\x70\x0f\xcd\x3b\x61\x30\x86\x17\x58\x48\x00\x74\xb0\x73\xa0\ -\xe8\xe6\xf6\xf3\xc7\x52\x98\xe2\x65\x1a\xee\x18\xdc\x03\x9f\x2b\ -\xda\x09\xa6\x5e\x77\x74\xd8\xfc\xeb\x29\xab\x20\xbb\x40\xed\x2d\ -\x76\xb7\xaf\xdd\xe9\x5b\xbc\xc3\xdd\x39\x7d\xd7\xed\xf4\xad\x3b\ -\x3a\x48\x25\xf5\xf9\x48\x4d\x32\x4d\x8d\x2c\x00\x9e\x54\x43\xe6\ -\x71\xb0\x04\x87\x02\x10\xa9\x8e\xf0\x24\x12\x16\x1f\xdb\x3c\x1e\ -\x41\x80\x55\x35\x0d\x3d\x46\x0e\x78\xd8\xe5\x21\xc0\xed\xc0\xa8\ -\x0b\x62\x8b\x92\x86\xbd\x2a\xdc\x39\x0b\x32\xa4\x16\x90\xba\x1a\ -\x75\xbb\x3c\xeb\x29\x8e\xe6\x30\x7c\xd8\x8c\xda\x07\xec\x7d\xb6\ -\xc8\x7b\xa2\xd2\xa7\xec\x93\x20\x4b\xf8\x2c\x97\xd0\xf7\x0e\x07\ -\xbe\xf2\xf4\xfd\x84\x2f\x8d\xd2\x06\x15\x4e\x84\xe7\x8d\x24\xa1\ -\x3d\x8a\xa6\x6b\xc2\xb0\xd5\x7d\x50\x9b\x12\x9d\x2a\x34\x34\x86\ -\x2f\x0f\x7d\xee\x51\x34\x72\x6d\x64\x82\x88\x2e\x61\x30\x2b\x07\ -\x1f\xc6\xa2\x44\x00\xfa\xc0\x07\xa3\x41\x29\x5a\xbb\x4b\x03\xb5\ -\x09\xb5\x0d\x73\xf8\x91\x74\xf6\x4e\x63\xcf\xc7\x74\x19\x61\xda\ -\xe2\x1d\x32\x0b\xd1\x06\x5e\x3f\xfd\x17\x8a\x9d\x5f\x2c\xd7\x66\ -\xa5\x04\xaa\xfc\x0e\x33\x71\x05\xee\x33\x09\x62\x24\x69\x27\x94\ -\x21\x43\xe6\x00\xb2\x85\xda\xbf\x38\xbb\xa1\xac\x55\x8c\xc4\x6b\ -\x7e\x00\xfa\xea\xea\x6a\xf5\x10\x74\x51\x5e\xf5\xe9\x66\x22\xdb\ -\x56\xec\xbe\xb1\x0b\xfe\x44\x65\x6f\xd9\x16\x4b\xbd\x14\x8b\xc5\ -\x61\x13\x01\x16\x4b\xca\xd7\xd6\xb6\xbb\x7a\x1b\xb8\x99\xb8\x19\ -\xfa\xc2\x9c\xb0\x61\x21\xbb\x03\xb6\x46\x0f\x04\x06\x7f\xca\x94\ -\x24\x6d\x18\x32\xbe\x46\x21\x01\xd2\x53\x76\x27\x20\x16\x71\x2e\ -\xaf\xe8\xf7\x7b\xcc\x66\x09\xa2\x5d\xf5\x08\xdc\x7b\xd0\x65\xf1\ -\x25\x08\x49\x62\xb5\x7e\xd9\x91\x72\x88\x7a\x2c\xb1\x98\x7d\x80\ -\xe2\xa9\x2f\x66\xc9\xc2\xae\x9c\x00\x85\x43\x4a\x70\xde\xee\x2c\ -\x15\x56\x00\x71\xc6\x6c\xbc\xba\x0b\x8f\x60\x2f\x4d\x23\xd7\x47\ -\xe4\xb7\x38\xc8\x67\x04\xe5\x38\xfb\xc6\x3d\x07\x28\xe5\x32\x99\ -\x2b\x4b\xd0\xfc\x5b\x1c\x6b\x72\xea\x71\xec\x1e\x4e\x5f\x82\xd2\ -\x11\x15\xbb\x40\xdc\x7c\x32\x77\xbd\x40\xc7\xf5\x42\x0a\xbc\x31\ -\x06\xdd\x0b\xc3\x80\x86\xdb\x79\x83\x4e\xf1\x0c\x97\x20\xc5\x88\ -\xec\xff\xf8\xb4\xad\xb4\xe8\x96\x42\xf8\xab\xc8\x5f\xc0\xcd\x24\ -\x30\xfe\xfb\x4f\x72\x70\x2b\x86\xb9\x8e\xe0\x0d\x41\xf0\x1f\x72\ -\xf0\x56\x02\x6f\x55\x08\xc3\x9f\x00\x43\x1b\x74\xbb\x13\x08\x55\ -\x8b\xa4\x7a\x39\xc9\x35\x0e\xe9\x8f\xc9\x6d\x06\x25\x3d\xc9\xfd\ -\x94\xfe\x34\x91\xcb\x28\xd2\x59\x86\xfe\xfc\x02\xbb\x15\x1c\xf4\ -\x49\xfb\x35\xed\x04\xb6\x53\xf0\xad\x3d\x10\x59\xbc\xa5\xdd\xb9\ -\x35\x5d\xdc\x9a\x4b\xb0\xfc\x82\xb4\xee\x4a\xbc\x9d\x59\x97\x85\ -\xdd\x0b\x26\x64\x8a\xcd\x4f\xe8\x30\x72\xc7\x15\xc7\x8c\x04\x23\ -\x5e\xa6\x4d\xd1\x62\xea\xb0\xd0\xeb\xe3\x4e\x00\xaf\xb6\xbb\x63\ -\x09\xf3\x3e\x91\x4b\x31\x32\x89\x14\x34\xce\xea\x2b\x33\x99\xa2\ -\x2f\x72\x2f\x65\x2b\x2b\xa7\x01\x86\x7b\xf7\x7d\x89\x93\x47\x58\ -\xda\xc5\xc9\xa1\xa5\xd1\xf2\xfc\x74\x4d\x24\xd9\xe8\x22\xd4\x0a\ -\x0c\xf7\xd7\x62\x04\x13\x9e\xe7\x28\xf7\x4d\x6d\xec\x2e\xdf\xc2\ -\xa0\x87\x39\xe0\x6b\x91\x07\xbc\xae\xef\x19\x30\x2c\xa3\xc0\xd4\ -\x46\x12\x60\xfa\xf7\xea\x0c\xe5\x33\x8f\x0f\x00\xf2\x7c\x87\xba\ -\x83\x3f\x3d\x3f\x00\x60\x71\x8d\x01\x80\xab\xa3\xab\xcb\xab\xc9\ -\xbf\x8b\xcb\x46\xb3\x16\x55\x2e\x3d\x54\x5e\x44\x20\xea\xab\x7e\ -\x74\x9c\xfe\xb7\xfa\x28\x4b\xda\x2f\xed\x98\xda\x7f\x24\xb9\x53\ -\x4d\xac\xa9\x28\x4a\xc7\x43\xc3\x20\x8a\xa0\x3f\xff\xf1\x67\x8c\ -\x36\x17\x9e\x2b\xce\xc1\xa8\x28\xc8\xca\x43\x8b\xb4\x38\x2c\x62\ -\x2f\x1e\xd3\x7d\x0e\xb6\x88\x3c\x22\x6d\x4c\xba\xea\x8e\x09\xd8\ -\x11\x8c\x60\xf8\x02\x6c\x86\x31\x51\x7f\x8f\xa8\x64\x6a\x22\xa2\ -\x06\x71\x37\x0e\xb9\x99\x05\xc1\xbe\xfa\xf1\x46\x82\x7d\xc8\xcb\ -\x6f\x2c\xed\x3c\x51\x4e\x2e\x7b\x0b\xee\x78\x8d\xd2\x82\xa4\xe3\ -\xb9\xbc\xfd\x01\xaf\x6b\x0e\x31\xf5\x4f\x02\x35\xe2\x81\x27\x12\ -\x00\x93\xe7\x1e\x8c\xad\x98\xc7\x8b\x6d\x8a\x48\x53\xb6\x61\x47\ -\xf4\xd8\x5d\xd7\x79\xf1\xae\xab\x7e\x7e\x71\x71\xd1\xa8\x9f\xb9\ -\xec\xbd\x96\x37\x51\xa6\xa9\x10\xb1\x51\x81\x27\x81\x78\xbc\x4c\ -\x9e\x10\xd2\xe7\x21\xd5\x0c\x8f\x3f\x30\x69\xf6\xb4\x8a\x1c\x60\ -\xa6\x06\x7b\x38\x22\x27\xe4\x9a\x1c\x83\xba\xae\x3b\x24\x68\x16\ -\x88\x8b\xf3\x8d\x48\x8b\x09\x2d\x3e\x59\x69\xb1\xac\xfb\xa2\x58\ -\x7f\xed\xdc\x17\x6b\xcf\xa3\x5e\x55\x5e\xbe\xe6\x03\x16\x9a\x73\ -\xa1\x4f\x40\x62\x16\x6f\x60\x0b\x93\x8b\x2e\xcb\x49\x2d\xda\x88\ -\xf8\xf0\xf9\xe0\xd3\x93\x97\x20\x65\xdb\x1b\x4b\x9c\x7d\xca\x63\ -\xa0\x05\x29\x44\x73\xf9\xe7\x56\x04\xa0\xb4\x42\xaf\xd4\xc8\x63\ -\xb1\xac\x2d\x66\xfd\x9d\xac\x5d\x8b\xab\x78\x09\x67\xd1\x0f\x60\ -\xd6\x4d\xef\xf2\x30\xc2\x11\xb3\x8e\x7c\xcc\xcb\xe8\x8e\x42\xcf\ -\x1a\x70\xba\x4f\xb5\x49\x92\xa3\x44\xc7\x2c\x72\xb4\xf7\x15\x5b\ -\x47\xa9\xfe\x3e\xef\x76\x61\xa7\x08\xe5\xb8\x39\x0c\x60\xbf\x68\ -\x92\x53\x6c\x87\xf1\x16\x53\x4b\x66\xf2\xff\xa9\x22\x0a\x00\x73\ -\xd8\x33\x16\x1c\x68\xa9\xad\x42\xf0\x61\x0f\xc8\x41\xb3\x2c\x8a\ -\x22\x3f\x12\x98\xac\xf5\x35\x79\x98\x0a\xfc\x58\x30\xca\xd9\xe6\ -\xfd\x58\x7a\x2a\xf2\x76\xba\x28\x4f\x17\x9d\xbb\xa9\xa2\x05\x19\ -\x5e\x0b\x13\x62\xb0\x05\xb1\xb2\xa0\x3a\xa5\x54\x9c\xdd\xb8\x53\ -\x4a\x9b\x56\x4a\x0b\x92\x17\xbe\x07\xb5\x14\xd3\xbf\x1d\xcf\x9c\ -\xf5\x40\x56\x50\xe6\x3a\x1c\x7f\xb2\xcf\x59\xaf\x1f\x61\x22\x89\ -\x1b\x15\x44\x14\x70\x7a\x31\xa3\xef\x44\x71\xee\xb6\xc0\xf1\x6b\ -\x59\x0b\xee\xd3\x79\x9c\x2c\xee\x02\x44\xd5\x49\xe2\x62\x37\xe3\ -\x4e\x12\xaf\x45\x12\x2f\xbc\x3b\x6f\xf5\xd4\xb1\xbc\x9b\xf3\x90\ -\xa2\xcc\xbb\x93\xef\x15\xda\xcc\x8e\x3c\x79\x77\xb4\xf7\x01\xe0\ -\xa5\x21\x9a\xd3\x34\xf1\xa6\x1a\x79\x7d\xb4\xab\x9f\xfd\x3d\x12\ -\xfa\xc5\x4b\xc9\x69\x60\x7f\x62\x86\x5a\x3c\x90\xd2\xe3\x20\xdb\ -\x54\xd1\x50\xc5\x2d\xa3\x12\x26\x79\xd7\xfe\xdc\x03\x78\xec\xaf\ -\x81\x08\x45\xdc\x0c\x81\x24\x5d\x3a\xe0\xc1\x38\x6f\xdc\xc3\xf7\ -\x2c\xb8\x63\xf8\x85\xcf\xc3\x69\xe7\xf6\x25\x03\xaa\xd9\x2f\x50\ -\x0b\xcc\x5e\xce\xfb\xcf\x5f\x89\xc0\xb7\xcf\xa5\xe4\xa8\xe0\x18\ -\xab\x77\x4c\x03\xde\x0b\x61\x35\x66\x7a\x07\x26\x47\xfe\x7a\x89\ -\xf5\x9f\x91\x86\xff\x37\x79\xbc\x95\x94\x03\xe9\xf4\xa6\x25\x5f\ -\x6f\x18\xfa\xcc\x01\x0c\xa6\x97\x87\x61\x49\xa5\x62\x25\xd6\x4e\ -\xa5\xe4\xaa\x94\x25\xce\xb0\xe5\xba\x6a\x57\xbd\xa9\x7e\xaa\x53\ -\x06\xc3\x00\x3f\x76\xaa\xfa\x8c\x55\xa8\x58\x16\x4c\x64\xa7\x59\ -\xd6\xa2\x59\xde\xf2\x80\xdd\xf4\x85\x00\x19\x3b\xa3\x5c\xba\x50\ -\xe7\xd9\xba\x45\xf6\x3d\x0f\x97\xb5\xef\x4f\x8e\x8b\x11\xe4\x84\ -\x9f\xe5\xe3\x88\x7e\x96\xfa\xa3\x1b\x38\x4d\xa2\xa2\x87\x6e\x22\ -\x9b\xab\x88\x5f\x69\x8a\x32\xa9\x97\x64\x10\x37\xa1\x69\xa1\xda\ -\x09\xcd\x39\x42\x73\x89\x5b\x5d\x73\x84\xa6\x7b\x70\xeb\x19\x1d\ -\x0c\x5f\x90\x8f\x8c\xfa\x20\xd0\xa8\x94\xe2\xde\x9a\x13\xdb\x78\ -\x60\x68\x6d\xc7\x85\xf8\xc0\x7e\x79\x73\x5b\xa9\xd2\xed\xa8\xca\ -\x6b\xa1\xc9\x59\x75\x27\x65\x70\xf8\x8b\x6a\x87\xbf\xaa\x6e\xf8\ -\x1b\x2e\x3d\xd8\x19\x54\x88\xff\x08\x82\x0a\x97\x20\x82\xa0\xc2\ -\x55\x68\x83\x68\xe9\x57\xb9\x08\x16\x80\x0a\xd7\xc0\x02\x50\xe1\ -\x12\xbc\xa2\xde\x37\x55\xf5\x32\x4c\x81\xa8\x70\x29\xa6\x40\x38\ -\x2d\x47\xe5\xa6\x8a\x63\xf8\xa6\x5e\x9c\xfb\x34\xdf\x5a\xf9\x0a\ -\xad\xb8\x47\x83\x84\xef\xc6\xfa\x0f\x13\x3b\xa9\x6d\x34\x57\xd6\ -\xf5\x9d\xe3\xc4\x34\x31\x5d\xd0\xf8\xbb\x62\x4c\x44\x9e\xad\xe8\ -\x20\x13\x6c\x78\x92\x48\xa2\x92\x91\xbb\x08\x79\x47\x24\xde\x26\ -\x43\xaf\x01\xeb\xea\x43\xbc\x47\xd6\x1e\x75\xc2\x1e\x3f\xb4\x7f\ -\xc3\xfb\xc8\x43\x9f\x4a\x97\x2b\x93\x97\xb3\xc2\x52\x0b\xf8\x3d\ -\x9a\x62\x1f\x01\xd1\xe4\x20\x89\xdb\x0a\x8f\x30\x7f\x9e\x17\xf9\ -\x7c\x22\x12\xc8\x51\xfc\xac\xfa\x55\xe7\x97\x81\x49\xc9\x85\x9d\ -\x75\xfb\xeb\x3b\x02\x84\x86\x8f\xc0\x43\xc2\x2b\x5d\xf2\x2c\xf0\ -\x33\x15\x9f\xc1\xdc\xf9\x99\x36\xea\x67\x5a\x90\xb5\xfe\xa4\xfd\ -\x4c\xef\xf1\xe4\x0a\xde\xee\x85\xe1\x12\x15\x1d\x67\xa1\xa0\x6a\ -\x24\xf3\xb4\x90\x63\xbc\x4a\x50\x47\x1f\x30\x46\x26\x41\xbc\xa8\ -\x64\xe1\xb3\x40\xbf\x18\x5a\xce\x79\xd6\xd3\x2f\xd0\x69\x85\xb7\ -\x0b\x4f\x33\xa2\xe2\x38\x8c\xef\x33\x1f\x3d\x58\xa8\x92\x62\x91\ -\x19\xc5\x70\xa0\x19\xa8\xab\xa8\x97\xcd\x7c\xad\x25\x1a\x0c\x49\ -\x60\x5b\xf5\x93\x9b\x4c\x4e\x57\xa6\xfa\x9a\xb6\x4b\x34\x4a\xb4\ -\x88\xe4\xf7\x24\x20\x66\x0f\xf0\x5d\xef\x9f\xef\x93\x01\x95\x3d\ -\x1e\x5e\xef\xd7\xeb\xfb\x98\x42\xd6\x1c\xf2\x87\x01\x1d\xc6\x39\ -\x70\xad\xbf\x3f\x99\xe7\xb7\x52\x0c\x7e\x01\x63\xa5\x2d\x46\x12\ -\x73\xa6\x32\xad\xe0\x3d\x6f\xa4\xb4\x18\xd8\x11\x95\x81\x24\x59\ -\x62\xa1\x34\xec\xda\x32\xdc\x9a\xe0\x54\xc0\x9f\x29\x37\x4d\x40\ -\xb2\xb3\xd0\x57\xad\xdf\xff\x30\xef\x81\xa8\x8b\x0a\xf6\x2c\x37\ -\xa1\xeb\x0b\x7b\xa8\x61\x07\xaf\x39\x0d\x44\xef\xa8\x8f\xcc\x65\ -\x2a\x0c\x02\xb2\xe3\x16\x03\x72\x83\x1f\x1b\x7a\x35\xd2\xda\x98\ -\x35\x39\x80\x7c\x1a\xa9\x7e\x5c\x3f\x0f\x18\x0b\xac\x72\x83\x24\ -\x23\xc0\x72\xa1\x99\xc5\xdd\x3c\x90\xb0\xb7\xb5\x81\x15\x65\xe7\ -\xe4\x23\x68\x52\xb9\x11\x50\x16\xad\xd7\xec\xa2\x6e\x06\xac\xe8\ -\x16\x86\x7c\x14\x4d\x6b\x37\x84\x23\xbb\xdb\x99\x03\xcc\xa4\x76\ -\x23\xc0\xc4\x59\x05\xf9\xc0\x4c\x6b\x37\x02\x4c\x2a\xd9\x2c\x1f\ -\xa2\x4c\x13\x77\xb0\xd2\x05\xd8\x53\x53\x32\x65\x04\xa9\x32\x22\ -\x17\x74\x6f\xc8\x6c\xca\xb1\x9d\xc5\xe4\xd9\x8e\xaa\x00\x00\xe8\ -\x3b\xe7\x2e\x1f\x0c\xa4\x87\xd1\xb8\x68\x9d\xf4\x42\x1a\xb4\xbc\ -\x00\xcf\xb2\xfa\x07\x78\x7c\x16\x77\x30\xb6\xd4\xb4\x00\x13\x80\ -\xf1\xbb\x64\x5f\x99\x1b\x02\x9a\xb5\x49\x13\xdb\x65\x20\x74\x0b\ -\xd4\xe0\x1b\x7b\x58\x77\xd2\x27\x16\x5b\x8c\xe0\xb7\x09\x22\x8d\ -\x84\xbf\x89\x1e\x0f\xd1\xd4\x34\xd3\x4b\x85\x3d\x9a\x0f\xad\x2b\ -\x00\xf8\x21\x7e\x1c\xb7\x4e\x2e\xae\x9a\xb5\x71\xac\xce\xf0\xed\ -\xd9\x8e\x7c\x86\xdf\x53\x31\x86\x71\xb6\xb7\xd3\xfa\x45\xba\xbb\ -\xcb\x7a\x5e\x77\xf6\xa7\x8a\x96\x26\x85\xda\x8d\x62\x7a\x72\x2a\ -\xba\x5c\x1c\x23\x4e\x53\x38\x3e\x71\xc1\xf1\xd9\x45\x3d\xd3\xdd\ -\x69\x69\x38\x3e\x5d\x1f\x8e\xcf\xcb\xc5\xf1\x79\x9a\xf0\x1a\x17\ -\xc7\xeb\xc4\x71\xe3\xa2\xb1\x85\x38\x8e\x2f\x4e\x2f\x19\xb3\x8d\ -\xb5\x62\xb6\x7e\xbe\x31\xcc\xae\x2e\x21\xe2\x8b\x6d\xca\xc5\xec\ -\xd9\x65\x9a\x91\xcf\xcf\x5c\x30\x7b\x72\x76\xfa\x04\x64\x6f\x7c\ -\x75\x47\xb9\x98\x3d\x39\xc9\x60\xf6\x62\x9d\x34\x5b\x26\x66\x2f\ -\xdc\x25\xee\xf4\x26\xe8\x72\x91\x5c\xcf\xd0\x6f\xe3\xca\x49\x32\ -\x9c\xa2\xbf\x26\xd5\x5d\xae\x9a\xdc\x16\xdb\x21\x71\x95\x5b\xc9\ -\xd6\x43\xd6\x42\x73\x92\x12\x8d\xc6\xf9\x63\x8c\x91\xf9\x58\x4e\ -\x3e\x42\x7d\xb3\x36\xe2\xad\xbd\xff\x03\x0c\xba\x22\x38\ +\x00\xa3\x4a\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ +\x0f\x45\x0f\xc8\xc6\xb1\xf3\x6e\x1d\x2f\xda\xf4\x09\x74\x77\xbb\ +\x75\xda\xde\xde\x97\x05\x2d\xd1\x36\xaf\xb2\xe8\x8a\x74\x12\x2f\ +\xee\xc7\xdf\x0c\x49\x59\x8f\xc8\x72\x64\x59\x96\xdd\xba\x28\x10\ +\x89\xa4\xc8\xe1\x70\x5e\x9c\x19\xd2\xed\x5f\xef\x47\x1e\xb9\x65\ +\x81\xe4\xc2\xbf\xda\x6f\x1e\x1e\xed\x13\xe6\x3b\xc2\xe5\xfe\xe0\ +\x6a\xff\xf3\xcd\x9b\x5f\x2e\xf6\x7f\xed\xec\xb5\x27\x3c\x6a\x74\ +\x02\x8d\x3a\x7b\xa4\xed\x78\x54\xca\xce\xdb\x09\x7f\xf6\xec\x15\ +\xa7\x9e\x18\xc0\x5f\x6f\xd0\x65\x4a\xc1\xc7\xf2\x55\x40\xfb\xaa\ +\xdd\x30\x8d\xa0\xf5\x1d\x77\x07\x4c\x11\xfd\x7e\xb5\xff\xe7\x57\ +\xfd\xba\x4f\x7c\x3a\x62\x57\xfb\xb9\x9d\xe0\x60\xa4\x3d\x0e\xc4\ +\x98\x05\x6a\x6a\xbf\x18\x30\x31\x62\x2a\x98\xea\x4a\xd2\x0e\x98\ +\xa3\xf4\x13\x69\xdf\x77\x8e\xda\x8d\x7b\xfb\x32\xc5\x97\xa9\x7d\ +\x01\x10\xd4\xb0\x73\x7a\x09\x45\xe6\xd1\x14\x0f\x19\x1f\x0c\x55\ +\xe7\xec\xb8\xd5\x6e\xd8\x67\xdd\x67\x23\xec\xb4\xdd\x08\x07\xcf\ +\x82\xe4\x8e\xfb\xae\xb8\xbb\xe1\xca\x63\x16\x18\xa9\x02\x00\xbe\ +\xf3\x96\xf9\x2c\xa0\x1e\x91\x76\x32\xed\x86\xad\x78\xd8\xa5\x47\ +\xa7\x62\x12\x21\xe7\xcb\x4b\x71\xff\x41\x17\xd9\x1e\x53\x43\xca\ +\x31\x75\xa0\xa3\x7d\x3b\x01\x7f\x32\xea\xb1\xa0\x73\xd6\x6e\xd8\ +\x27\x03\x7e\x7c\x84\x07\x5d\x8c\x68\x30\xe0\x7e\xaa\x87\xcb\xdc\ +\x1e\xb8\x62\xa3\x08\x93\xf1\xc5\x7c\x1b\x88\xc9\x18\x60\x0e\x97\ +\x73\x10\xbe\x9b\xe6\x0f\x06\x57\x11\xb2\x32\xf0\xa5\x17\x9d\x74\ +\x33\xb0\xf6\x10\xa8\x5c\xdc\xd9\xd1\x80\x70\x15\x77\xa8\x67\x4a\ +\xff\x6e\x45\x03\x47\x33\xca\xe8\xe8\xdd\x83\x8e\x86\x22\xe0\xff\ +\x08\x5f\xcd\xba\x6a\x5e\xce\xfa\x4a\xf7\xf6\x10\x49\x1f\x68\x8f\ +\x79\x61\x57\x1e\xbe\x24\xbf\xcf\x40\x13\xbb\x57\x89\x06\x33\x54\ +\x19\x14\x71\x5f\xb1\xa0\x4f\x1d\x46\x46\xc2\x65\x29\x44\x65\x63\ +\xcb\x14\x1a\xc8\x62\xa0\x37\x92\xb0\x2f\x98\x8a\xe6\xd6\x8f\x01\ +\xeb\x5f\x8b\x51\x4f\xc4\xd7\x1d\x2b\xc6\x50\xe1\x60\x45\x4f\xdc\ +\xff\x7d\x92\x3f\x41\x21\xbc\x1b\x3e\xce\x9e\xe3\xcd\x90\x4b\x02\ +\xff\xd5\x90\x91\xcf\xef\xf5\x14\x61\xc6\xe4\x6e\xc8\x9d\xa1\x2e\ +\x34\x48\x80\xf2\x89\xc7\xc8\x1d\xf7\x3c\x72\x27\x82\x6f\xcf\xc8\ +\x0d\xf4\xda\xa3\x81\xf9\x42\x97\x8f\x3d\x44\x12\xf5\x42\xda\x0a\ +\x39\x12\xfb\xa3\xf0\x36\xa6\x01\x55\x8c\x28\xf3\xe1\x01\x8e\x01\ +\x5d\x2a\x2a\xbf\x25\xfb\x99\x48\xa6\x47\x7e\x13\x30\x76\xfd\xe2\ +\x15\xb9\x81\x16\xb7\x9c\xdd\x11\x39\x95\x80\x31\xd2\x17\x81\x1e\ +\x85\x2b\x89\x6d\x03\xb3\x42\xd4\x51\x20\x37\x1f\xbd\x3c\x0f\xb0\ +\x84\x08\x7d\xed\xa3\xac\x23\x52\xb9\x00\xfb\xd5\xfe\x51\x0a\x65\ +\x8e\xed\xfb\x33\xff\x4d\x53\x82\x53\x66\xac\x8f\x54\x0d\x17\x0f\ +\x05\x03\x35\x42\x19\xff\xe8\xd1\x52\x74\xf5\x18\x92\x8f\xe8\xc1\ +\xac\x4e\x16\x1e\xe7\x0d\xd7\x48\x8f\x57\x0e\x00\xbb\xda\x65\x20\ +\x58\xc8\x7b\xed\x86\x11\x43\x33\x19\x95\xa8\x2e\x2d\xb1\x5a\xe5\ +\x04\x56\x6b\x59\x79\xc5\xfa\x74\xe2\x41\xd7\xc2\x13\x99\x2b\x58\ +\xb9\xa0\x82\x71\x5f\x4e\x94\x12\x7e\x86\xac\x82\xba\x9e\xa9\x5b\ +\x5a\x58\xa1\x54\x70\xe3\x93\xd4\xb2\xc0\x07\xd1\x20\x7a\xff\x05\ +\x33\x22\xad\xc6\xf2\x68\x26\x35\xae\xee\x2e\xcd\x84\x58\x96\xa2\ +\xd2\x80\xb9\x68\xec\xe0\x9f\x64\xc5\x00\xa4\x95\x8f\x55\xe6\x21\ +\x59\xd9\xf3\x26\x0c\xeb\xf4\xdf\x24\x41\x3f\x18\x64\xe5\xe2\xca\ +\x92\xc3\x66\x4a\xab\xd2\xd4\x97\xc5\x40\x0b\xf4\xe1\x5c\x06\xea\ +\xfa\x74\xbc\xe9\xdc\xb3\x48\x3a\x14\xe7\x1f\x89\xb3\x96\x53\xb0\ +\x25\xbc\x1d\x03\x25\xc0\xb7\xb8\x40\x04\xfd\x7c\x4c\xb4\xac\xd5\ +\x7c\x2d\x7c\x78\x9a\x68\x73\x6c\xe3\x99\xe9\x78\x35\x96\xf3\x43\ +\xa6\xb2\x0a\x89\xf4\x18\xb4\x25\x6e\x40\xef\x7c\x6b\xf0\x72\xc4\ +\x4a\x0c\x45\x68\xf8\x1e\xae\x87\xef\x4e\x4e\xe6\x33\x5e\xb3\x75\ +\x9a\xc3\x7a\xad\xd3\xd3\xda\xb4\x57\x84\xab\x9f\x8f\x09\x17\xd0\ +\xe7\x42\x53\xd0\xe3\x60\x1d\xa1\x17\xa6\x06\x1e\xec\x8e\xb9\x9f\ +\xb5\x6d\x95\x50\xde\x8b\xdc\x16\xd9\x33\x7b\xac\x1a\x9b\x4d\x70\ +\x75\xa6\xe0\x2d\x05\x3a\x4f\x8d\x6c\x1d\x36\xad\x84\xeb\xa6\x50\ +\xaf\x05\x48\x3e\xb6\x68\x5b\x4a\xea\x15\xef\xaf\x8e\x4b\xee\xaf\ +\x8e\x4a\xa9\x36\xca\xb5\xd0\xde\x48\x4f\xd0\x69\x19\x7d\xc6\xc8\ +\x6c\x82\xa8\xb4\x60\x8e\xbc\xcf\x59\x40\xbe\xb1\xe9\x5a\xfc\x2a\ +\x30\xa0\x13\x02\xb0\xa9\xa4\x5f\xce\xb9\x21\x87\x1c\x07\xab\xcb\ +\xb7\xe2\xa8\xc0\xab\x6f\x74\xea\x95\x9a\xfa\x12\x6c\x84\x1e\x7c\ +\xa0\xdf\xb4\x14\xe9\xea\xe2\x05\xbc\x02\xad\x19\x34\x46\xb3\x23\ +\x45\x3d\x0c\x54\x40\xe7\x4f\xf5\xec\xd9\xbb\x59\x8f\xed\x86\x2e\ +\x2c\x4c\xaa\x92\xff\xc3\xde\x71\x5f\xcd\x27\x55\x6c\x91\x42\xa7\ +\x89\xaa\x9c\x24\xe3\x2b\xb3\x5a\x1b\x5b\x69\x1d\x25\xc2\x2c\x11\ +\x58\xe9\x0e\xe7\x88\x2c\x83\xba\x95\xda\x32\xad\x66\x99\x6d\xf9\ +\xa6\x4a\xdc\xb3\x72\x12\x57\xda\xb9\xad\x40\xd2\x3a\x93\x20\x00\ +\x92\x7d\xef\xbb\xec\x3e\xdb\x7c\x69\xae\xc5\x7c\x81\xd9\xe0\xac\ +\x76\x12\xdc\x94\xee\x24\x78\x54\xb0\x62\x09\x9e\xcf\x7b\x3b\x09\ +\xbe\x72\x09\xbe\x6c\x64\xe2\x85\xa7\x36\x56\x80\x9f\x97\x13\xe0\ +\xd4\x4c\x6d\x2d\xf2\x7b\x3d\xdb\x4f\x98\x8d\x66\xf4\x9d\xf8\xde\ +\x89\xef\x4d\x8a\xaa\x36\xe3\x54\xb4\x4c\x1e\x48\xb9\x6d\xbf\x75\ +\xd7\xea\xac\x1b\xfd\x49\x0d\xd2\xec\x03\xf7\xd9\x6b\x97\xab\x07\ +\xd2\x0c\x5d\x46\x0c\x2a\xca\x44\x87\xb2\x1c\xda\xd1\x6c\xb5\x7f\ +\x2d\xe1\xb8\x0e\x93\xc3\x96\x97\x78\x8f\x43\xf9\x5a\x7c\x0f\xf1\ +\x99\xe9\x49\x9b\x15\xde\x4c\x19\x58\x37\x27\x9e\x3c\x9e\x11\x23\ +\x45\x3c\x64\xce\xb7\x4c\x45\x8c\x15\xa5\xfc\xc1\xba\x07\x20\x5b\ +\x24\xdf\x3e\x01\x08\xc9\x1d\xf5\x15\x51\x62\x96\x4a\xa4\x03\x07\ +\x8d\x98\xaf\x38\x10\x23\x5d\x61\x93\x91\x08\x95\x21\xc9\x57\x41\ +\xcd\x5d\x7a\x0b\x30\x18\xf5\x6e\x63\x44\xd4\x77\x63\xbe\x6b\xea\ +\x04\x42\x4a\x22\x99\xc4\xe4\xcf\x12\xbe\xeb\x22\x51\x4d\x00\x4a\ +\xf8\xec\x9e\x6f\xac\xaa\xaf\x9b\xcc\xcf\xab\x20\xf3\x32\x2e\xda\ +\xf7\x7d\x4b\xe5\x92\xe8\xee\x98\x7b\x00\xe4\x34\x9e\xc6\x92\xe7\ +\x7a\x0c\x8c\xd0\xb1\x0a\x29\x0a\xac\xdc\x11\x90\xda\x01\x11\x40\ +\xed\xc1\x1d\x97\x2c\x2c\x92\xa6\x3d\xf5\xee\xe8\x14\x28\x4f\xd1\ +\x00\x53\x1d\x89\x2f\x7e\x99\xf5\x58\x05\x2b\xbc\xf5\x44\x8f\x7a\ +\x64\x05\x63\x58\x0c\xa4\x86\xe9\x01\xfe\x3a\x20\xc8\xa1\x63\xfd\ +\x58\xad\xce\x18\x4f\x47\x1b\x9c\x09\x58\x37\xff\x34\x2f\x2a\x61\ +\xa0\x12\x31\xfb\xdf\x45\x30\xa2\x9e\x37\x3d\x20\x80\x48\x16\x68\ +\x32\xc4\x50\x87\x8d\x19\x1e\x58\x65\x31\xe6\x4c\x12\x04\x4e\x32\ +\x0f\xca\x99\x7b\x48\x42\xd6\x13\x63\x6d\xfb\xc4\x39\x10\xbf\xe9\ +\x51\xe0\xac\x30\xe6\x1f\x32\x62\xf8\x35\xf0\x95\x54\x8c\xba\x25\ +\xa2\xfc\x39\xba\x45\x0f\x92\x04\x20\x31\xb9\xf5\x28\x13\x0d\xc5\ +\x4b\x00\xe2\x8f\x30\xfc\xba\xe3\x89\x2c\x9e\x38\xad\x84\x25\x2e\ +\x56\xab\x53\xb4\x09\x15\xd7\x0e\xe8\xa4\x06\x73\x0a\x8c\x05\xa9\ +\x62\xfc\x62\x33\x5a\x30\xbb\x05\x4a\x35\x93\xf8\x42\xc5\xbe\xef\ +\x19\x07\xf7\x58\x7f\xe3\x7b\x53\xf8\x80\xf9\x04\x40\x07\x3b\x07\ +\x8a\xae\x6f\x3e\x7d\xa8\x84\x29\x5e\x24\xe1\x0e\xc1\x7d\xea\x72\ +\x49\x7b\x5e\xe4\x75\x47\x87\xcd\xbf\xb6\x59\x05\x99\x05\xea\x6e\ +\xb0\xbb\x7d\xe5\x4e\xdf\xfc\x1d\xee\xce\xe9\xbb\x6a\xa7\x6f\xb3\ +\xa4\x83\x34\xa0\x2e\x9f\xc8\x59\xa6\xa9\x96\x05\xc0\x93\x72\xcc\ +\x1c\x0e\x96\xe0\x58\x00\x22\xe5\x21\x9e\x44\xc2\xe2\x23\x93\xc7\ +\x23\x08\xb0\xaa\xa2\xbe\xc3\xc8\x53\xee\xf7\xb9\x0f\x70\x97\x60\ +\xd4\x05\xb1\xc5\x80\xfa\x83\x3a\xdc\x39\x0b\x32\xa4\x16\x90\xba\ +\x9c\xf4\xfb\x3c\xed\x29\xb6\x73\x18\xdf\xaf\x47\xed\x03\xf6\x3e\ +\x19\xe4\x6d\xa9\xf4\xa9\xfa\x24\x48\x01\x9f\x65\x01\x7d\x5f\xe2\ +\xc0\x57\x96\xbe\x9f\xf1\xa5\x56\xda\xa0\xc2\x89\x70\x9c\x49\x40\ +\xe8\x80\xa2\xe9\x1a\x33\x6c\xd5\x10\xd4\x66\x80\x4e\x15\xea\x6b\ +\xc3\x97\xfb\x2e\x77\x28\x1a\xb9\x26\x32\x41\x44\x9f\x30\x98\x55\ +\x09\x1f\xc6\xa2\x44\x00\x7a\xcf\x47\x93\x51\x25\x5a\xbb\x4f\x3d\ +\xb9\x0e\xb5\x0d\x73\xf8\x99\x74\xf6\x4e\x63\xcf\xc7\x74\x15\x61\ +\xda\xfc\x1d\x32\xf3\xd1\x06\x5e\x3d\xfd\xe7\x8a\x9d\xdf\x0c\xd7\ +\xa6\xa5\x04\xaa\xfc\x1e\xd3\x71\x05\xee\xb2\x00\xc4\x48\xdc\x4e\ +\xa8\x42\x86\xcc\x01\x64\x03\xb5\x7f\x7e\x76\x43\x55\xab\x68\xc5\ +\x6b\x76\x00\xfa\xf2\xf2\x72\xf9\x10\x74\x5e\x5e\xf5\xc9\x7a\x22\ +\xdb\x46\xec\xbe\x36\x0b\xbe\xa5\xb2\xb7\x6a\x8b\xa5\x59\x89\xc5\ +\x52\x62\x13\x01\x16\x4b\xc2\xd7\xd6\x35\xbb\x7a\x13\xb8\x99\xb9\ +\x19\x86\x42\x9f\xb0\x61\x3e\xbb\x05\xb6\x46\x0f\x04\x06\x7f\xaa\ +\x94\x24\x5d\x18\x32\xbc\x46\x21\x06\xd2\x36\xbb\x13\x10\x8b\x38\ +\x97\x97\xf4\xc7\x3d\x66\x53\x80\x68\x97\x3d\x02\xf7\x0e\x74\x59\ +\x78\x09\x42\x9c\x58\x8d\x5f\x76\x22\x4b\x44\x3d\x0a\x2c\xe6\x10\ +\xa0\xd8\xf6\xc5\xac\x3a\x42\x51\xe0\xa4\x7e\x01\xba\x69\x2e\xc8\ +\x74\xce\x93\x76\x3c\x26\xed\x28\xb1\x20\xd8\x5d\x96\x76\x9d\x0c\ +\xa3\x50\x32\xde\xc4\x81\x65\x63\x8f\xfa\x8c\xc4\x0c\x69\x02\x52\ +\x8f\xd1\x40\x12\x77\x82\x9d\x86\x1e\x5a\x82\x60\xe8\x06\xd5\x6c\ +\xcf\x50\x20\x7e\xb5\x30\x7d\xd4\x30\xa9\x80\xc2\x54\x4a\xc8\xc4\ +\x82\xc2\x4b\x8f\x7a\x13\x0e\xba\x23\xfa\x2c\xa2\xaf\x26\x2a\x57\ +\x22\x0f\x3e\xcb\x25\x91\x88\xa5\x19\x6a\xc6\x24\x8d\x3e\xbc\xc2\ +\x26\x21\x4a\xd7\x38\x24\x7f\x84\x91\x6d\x6d\x1d\x4c\xd3\x5f\xdc\ +\x71\x80\x32\x28\x92\xae\x55\x80\xe2\xdf\xe0\x58\xb3\xa3\xbe\xd3\ +\xf2\x39\x24\x05\xc8\x1d\x51\xb1\x8b\x3e\xcf\x27\xf3\xb2\xb7\x46\ +\x95\xbd\x85\x25\x21\x9c\x37\x32\xf3\x39\x7f\x86\x05\x48\xd1\x92\ +\xfd\xd7\x8f\x9b\x4a\x8b\xe5\xf2\x66\x7f\x17\xd9\x0b\xb8\x9e\xac\ +\xdd\x7f\xff\x45\x9e\xde\x88\x71\x66\xf4\x63\x4d\x10\xfc\x87\x3c\ +\x7d\x13\x00\x6f\xd5\x08\xc3\x5f\x00\x43\x17\x0c\xda\x52\x20\xd4\ +\x2d\x92\x9a\xd5\x64\x94\x95\xc8\xf9\x7d\x9f\xb0\x36\x07\x01\x77\ +\x13\xfa\x53\x87\xeb\xad\xf1\x58\x85\xfe\xfc\x0c\x5b\x74\x1c\x74\ +\xab\x9d\xf9\x66\x02\x9b\x29\xf8\x56\x1e\x7d\xcf\xf7\xe3\xec\x7c\ +\xf9\x65\x7c\xf9\x45\x76\x98\xf9\x67\x19\x6a\x71\xf1\xa7\xfd\x74\ +\xc6\x01\x12\x93\x29\x26\x29\xa7\xc7\xc8\x2d\x97\x1c\xd3\x70\xb4\ +\x78\x89\x9a\xa2\xc5\xd4\x63\xbe\x33\xc4\x9d\x00\xde\xe7\x78\xcb\ +\x62\xe6\x7d\x2c\x81\x68\xa2\xb3\x87\x68\x98\xca\x5a\x65\x06\x11\ +\xec\x29\xd7\x62\xcd\xdb\x44\x1e\x18\xee\xed\x8f\x25\x4e\x1e\x61\ +\x69\xe7\x67\x44\x57\x46\xcb\xf3\x73\x94\x91\x64\xed\xed\xbf\x35\ +\x18\xee\xaf\xc4\x04\x26\x3c\x2f\x3a\xe4\xea\xda\x30\x46\xb4\x81\ +\x91\x3e\x7d\xaa\xdd\x20\x0f\x78\x5d\xdd\x31\x60\x58\x46\x81\xa9\ +\xb5\x24\xc0\x33\x0f\xcb\x33\x94\xcb\x1c\x3e\x02\xc8\xb3\xa3\x48\ +\x25\x82\x48\xd9\x51\x2f\x83\x6b\x8c\x7a\x5d\x1e\x5e\x5e\x5c\xce\ +\xfe\x9d\x5f\xb4\xda\x0d\x5b\x59\x78\xa8\xac\x30\x98\xed\xab\x79\ +\x78\x94\xfc\xb7\xfc\x28\x05\xed\x97\x6e\x48\xed\x3f\x93\xdc\xa9\ +\x27\xc0\x9a\x17\x9a\xe6\xbe\x66\x10\x49\x30\x88\xf5\xf8\x83\x75\ +\xeb\x8b\x49\xe7\x27\x1e\xd5\x94\x59\xc0\x7d\x83\xb4\x30\x16\x68\ +\x6e\xdb\x53\x43\x8e\x5e\xe0\x43\xd2\xc5\x4c\xc3\xfe\x94\x80\x1d\ +\xc1\x08\xba\xa8\xc1\x66\x98\x12\xf9\x7d\x42\x03\x26\x67\x22\x6a\ +\x14\x76\x53\x22\x21\x39\x27\xc2\xdd\x3c\x5a\x4b\x84\x1b\x79\xf9\ +\xb5\xa1\x9d\x2d\xe5\xe4\xaa\xb7\xe0\x25\xef\x0e\x5b\x90\x69\x3f\ +\x97\xb7\xdf\xe3\x1d\xe5\x3e\xe6\xbb\x06\x40\x8d\x78\xca\x8f\x78\ +\xc0\xe4\x99\xa7\xc1\x6b\xe6\xf1\x7c\x9b\xc2\x6a\xca\x2e\xec\x88\ +\x1e\xbb\xeb\x3a\xcb\xdf\x75\x35\xcf\xce\xcf\xcf\x5b\xcd\xd3\x32\ +\x7b\xaf\xe2\x26\x4a\x94\xff\x13\x1a\x15\x78\xfc\x8d\x87\xcb\xe4\ +\x08\x11\xb8\xdc\xa7\x8a\xc9\x58\xd4\x8c\x3c\xc5\xf4\x24\x76\x7f\ +\x48\x8e\xc9\x15\x39\x02\x75\xdd\x2c\x91\x95\x9c\x23\x2e\xce\xd6\ +\x22\x2d\x66\xb4\xb8\xb5\xd2\xa2\xa8\xfb\x22\x5f\x7f\xed\xdc\x17\ +\x2b\x3f\x3c\xb0\xac\xbc\x7c\xc5\x47\xcc\xd7\x87\xa1\xb7\x40\x62\ +\xe6\x6f\x60\x73\x33\xea\x2e\xaa\xc9\xa7\x5b\x8b\xf8\x70\xf9\xe8\ +\xe3\xd6\x4b\x90\xaa\xed\x8d\x02\x07\xfe\xb2\x18\x68\x41\xde\xdc\ +\x5c\xfe\xb9\x11\x1e\x28\x2d\xdf\xa9\x34\xf2\x98\x2f\x6b\xf3\x59\ +\x7f\x27\x6b\x57\xe2\x2a\x2e\xe0\x2c\xfa\x09\xcc\xba\xe8\x02\x1b\ +\x2d\x1c\x31\xd5\xce\xc5\xbc\x8c\xfe\xc4\x77\x8c\x01\xa7\x86\x54\ +\xe9\xcc\x50\x4a\x54\xc8\x22\x87\x7b\x5f\xb0\xb5\x3d\xdf\xe2\xf2\ +\x7e\x1f\x76\x8a\x50\x8e\x9b\x43\x0f\xf6\x8b\x3a\x39\xc5\x74\x18\ +\x6e\x31\x55\xc0\xf4\xa1\x17\x2a\x89\x04\xc0\x4a\xec\x19\x73\x4e\ +\x71\x35\x96\x21\x78\x7f\x00\xe4\xa0\x58\x1a\x45\xd6\x8f\x04\x26\ +\x6b\x73\x45\x1e\xa6\x1c\x3f\x16\x8c\x72\xba\x7e\x3f\x96\x8a\x44\ +\xde\x4e\x17\x65\xe9\xa2\xb3\x72\xaa\x68\x41\x86\xd7\xc2\x84\x18\ +\x6c\x41\x8c\x2c\xd8\x70\xaf\x7a\x7e\x40\xfd\x47\x10\x95\xe1\x9a\ +\x98\xf1\xf4\xa1\x1b\x5c\x1e\xa9\xef\x25\x72\x67\xb6\xf7\x6a\xf7\ +\xb6\x33\xe9\xd0\xaa\xc1\xcb\x8d\xd3\x0b\x89\x6f\x4b\xc5\x43\x51\ +\x03\x2c\xdf\x91\xb3\x33\xc0\x56\xbd\xd9\x5d\x70\xb3\xd3\xe3\x04\ +\x64\x1f\xf0\xbd\x89\x37\x0b\x2e\x9f\x63\x94\x75\xaf\x20\xce\x52\ +\x7f\x3b\xfb\x35\x47\x93\x02\x90\x25\x84\x0e\xf7\xde\x03\xbc\xd4\ +\x47\xbb\x8b\xc6\xbe\x94\x13\x67\x88\x06\xd8\x93\xef\x13\xa1\x9e\ +\xbf\x08\x38\xf5\xcc\x23\xa6\x32\x85\x03\x49\x35\xf5\xd2\x4d\x25\ +\xf5\x65\xd8\xd2\x96\xb0\x80\xf7\xcd\xe3\x1e\xc0\x63\x9e\x46\xc2\ +\x17\x61\x33\x04\x92\xf4\xe9\x88\x7b\xd3\xac\x71\x0f\xde\x31\xef\ +\x96\xe1\xef\x9f\x1e\x44\x9d\x9b\x8f\x34\xa8\xda\xb0\xa4\x06\x98\ +\xbd\x8c\xef\x9f\xbd\x14\x9e\x6b\xde\x2b\x49\x66\xc0\x31\x96\xef\ +\x98\x7a\x7c\xe0\xc3\x6a\x3c\xe8\x1d\x08\x0f\xc5\xc4\x0b\xac\xff\ +\x84\xac\xf8\xbf\xd9\xeb\x4d\x40\x39\x90\xce\x20\x2a\xf9\x72\xcd\ +\xd0\xb9\x0a\x60\x30\x55\x1c\x86\x82\x92\xde\x70\xd1\x96\xca\xf9\ +\xaa\x5d\x12\x05\x4e\xf8\x65\xfa\xf4\x96\xbd\xc7\x3f\x92\x73\xa3\ +\xb1\x87\x3f\x05\x2b\x87\x8c\x55\x2a\xec\xf2\xf5\xe3\x82\x89\xec\ +\x14\xe4\x4a\x3c\x14\x6f\xb8\xc7\xae\x87\x42\x80\x8c\x7d\xa0\x5c\ +\xfa\x50\xe7\x98\xba\x45\x46\x37\xf7\x8b\x1a\xdd\xc7\x47\xf9\x08\ +\x2a\x85\x9f\xe2\x01\x27\x37\x4d\xfd\xf6\x7e\x52\x9d\xd1\xe6\xa0\ +\x3f\xc1\x24\xb5\xe1\x6f\x58\x85\xe7\xb5\x8a\x31\x48\x39\xa1\x69\ +\xa0\xda\x09\xcd\x39\x42\xb3\xc0\x9d\xb7\x19\x42\xb3\x7c\x14\xe4\ +\x09\x1d\x8d\x9f\x93\x0f\x8c\xba\x20\xd0\x68\x10\x88\x3b\x63\x4e\ +\x6c\xe2\xc9\x92\x95\x9d\x2b\xe1\x23\xf3\xbb\xa4\x9b\x4a\x95\xe5\ +\xce\x34\xbc\x12\x8a\x9c\xd6\x77\xa4\x02\x87\x3f\xaf\x77\xf8\xcb\ +\xfa\x86\xbf\xe6\x81\x03\x3b\x83\x1a\xf1\x6f\x21\xa8\x71\x09\x2c\ +\x04\x35\xae\x42\x17\x44\xcb\xb0\xce\x45\x30\x00\xd4\xb8\x06\x06\ +\x80\x1a\x97\xe0\x25\x75\xbe\xc9\xba\x97\x21\x02\xa2\xc6\xa5\x88\ +\x80\x28\xb5\x1c\xb5\x9b\x2a\x25\xfd\xfc\xcd\xfc\x24\x99\xf9\xd6\ +\xca\x17\x68\xc5\x1d\xea\xc5\x7c\x37\xc6\xa7\x15\xdb\x49\x6d\xa2\ +\xb9\xb2\xaa\x5f\x81\x8e\x5f\xc0\x20\xfa\xc6\xdf\x15\x62\xc2\x7a\ +\xb6\xec\x89\x17\xd8\xf0\xc4\x91\x44\x03\x46\x6e\x2d\xf2\x0e\x49\ +\xb8\x4d\x86\x5e\x3d\xd6\x57\x07\x78\xcb\xae\x39\x13\x83\x3d\xbe\ +\xef\xfe\x81\xb7\xb5\xfb\x2e\x0d\xca\x5c\x28\x5d\xcc\x0a\x4b\x2c\ +\xe0\x8f\x68\x8a\x7d\x00\x44\x93\xa7\x71\xdc\xd6\x78\xd6\xf5\xd3\ +\xbc\x10\xd9\x96\x48\xa0\x92\xe2\x67\xd9\xdf\xbc\x7e\xe1\xe9\xdc\ +\x4d\xd8\x59\x77\xbf\xbc\x25\x40\x68\xf8\x0a\x3c\x24\x9c\xca\x25\ +\xcf\x02\x3f\x53\xfe\x61\xbd\x9d\x9f\x69\xad\x7e\xa6\x05\xe9\xcd\ +\x5b\xed\x67\x7a\x87\x47\x1c\xf0\xee\x33\x0c\x97\x48\x7b\xee\x81\ +\x82\xaa\x09\x98\xa3\x44\x30\xc5\x8b\x16\x95\xfd\x79\x67\x64\x12\ +\xc4\x8b\x8c\x17\x3e\xf1\xd4\xf3\xb1\xe1\x9c\x27\x03\xf5\x1c\x9d\ +\x56\x78\xf7\x72\x94\x3a\x13\xc6\x61\x5c\x97\xb9\xe8\xc1\x42\x95\ +\x14\x8a\x4c\x1b\xc3\x81\x66\xa0\xae\x6c\x2f\xeb\xf9\x2d\x1b\x3b\ +\x18\x92\xc0\xa6\xea\xa7\x72\x32\x39\x59\x99\xe8\x2b\x6a\x17\x6b\ +\x14\x6b\x61\xe5\xf7\x2c\x20\x66\x4e\x7a\x5d\xed\x9f\xed\x93\x11\ +\x0d\x06\xdc\xbf\xda\x6f\x36\xf7\x31\xd7\xa8\x3d\xe6\xf7\x23\x3a\ +\x0e\x93\xa5\x3a\xdf\x3f\xea\xf7\x37\x81\x18\xfd\x06\xc6\x4a\x57\ +\x4c\x02\x4c\xae\x49\xb5\x82\xef\x9c\x89\x54\x62\x64\x46\x94\x1a\ +\x92\x78\x89\x81\x52\xb3\x6b\x47\x73\x6b\x8c\x53\x01\x7f\xba\x5c\ +\x37\x01\xc9\xce\x7c\x57\x76\xfe\xfc\xaa\xbf\x03\x51\x67\x0b\xf6\ +\x0c\x37\xa1\xeb\x0b\x7b\x68\x60\x07\xaf\x38\xf5\xc4\xe0\x70\x88\ +\xcc\xa5\x2b\x34\x02\xd2\xe3\xe6\x03\x72\x8d\x3f\xc5\xf4\x72\xa2\ +\x94\x36\x6b\x32\x00\xf9\x38\x91\xc3\xb0\x7e\x1e\x30\x06\x58\x59\ +\x0e\x92\x94\x00\xcb\x84\xe6\x21\xee\xe6\x81\x84\xbd\xad\x0c\x2c\ +\x9b\x32\x93\x8d\xa0\x59\xe5\x5a\x40\x59\xb4\x5e\x0f\x17\x75\x3d\ +\x60\xd9\xe3\xfa\xd9\x28\x8a\x6a\xd7\x84\x23\xb3\xdb\x99\x03\xcc\ +\xac\x76\x2d\xc0\x84\x59\x05\xd9\xc0\x44\xb5\x6b\x01\x26\x91\x01\ +\x96\x0d\x51\xaa\x49\x79\xb0\x92\x05\xd8\x53\x3b\x60\x52\x0b\x52\ +\xa9\x45\x2e\xe8\x5e\x9f\x99\xdc\x54\x33\x8b\xd9\xbb\x19\x55\x02\ +\x00\xd0\x77\xc6\xa5\x2f\x18\x48\xf7\xed\xb8\x68\x9d\x0c\x7c\xea\ +\x75\x1c\x0f\x0f\x3d\xba\x4f\xf1\x9c\x25\xee\x60\x4c\xa9\x6e\x01\ +\x26\x00\xe3\xb7\xf1\xbe\x52\x47\xc9\xdb\x8d\x59\x13\xd3\xa5\x27\ +\x54\x07\xd4\xe0\x6b\x73\xaa\x73\xd6\x27\x16\x1b\x8c\xe0\x2f\x37\ +\x58\x8d\x84\xcf\x44\x4d\xc7\x68\x6a\xea\xe9\x25\xc2\x1e\xed\xfb\ +\xce\x25\x00\x7c\x1f\xbe\x4e\x3b\xc7\xe7\x97\xed\xc6\x34\x54\x67\ +\xf8\xf5\xc3\x8e\x5c\x86\xbf\x36\xa3\x0d\xe3\x74\x6f\x27\xcd\xf3\ +\x64\x77\x17\xcd\xac\xee\xcc\xa3\xb4\x4b\x93\x40\xed\x5a\x31\x3d\ +\x3b\x3e\x5b\x2d\x8e\x11\xa7\x09\x1c\x1f\x97\xc1\xf1\xe9\x79\x33\ +\xd5\xdd\x49\x65\x38\x3e\x59\x1d\x8e\xcf\xaa\xc5\xf1\x59\x92\xf0\ +\x5a\xe7\x47\xab\xc4\x71\xeb\xbc\xb5\x81\x38\x0e\xaf\x95\xaf\x18\ +\xb3\xad\x95\x62\xb6\x79\xb6\x36\xcc\x2e\x2f\x21\xc2\x1b\x50\xaa\ +\xc5\xec\xe9\x45\x92\x91\xcf\x4e\xcb\x60\xf6\xf8\xf4\x64\x0b\x64\ +\x6f\x78\xc7\x43\xb5\x98\x3d\x3e\x4e\x61\xf6\x7c\x95\x34\x5b\x25\ +\x66\xcf\xcb\x4b\xdc\xe8\x9e\xec\x6a\x91\xdc\x4c\xd1\x6f\xeb\xb2\ +\x94\x64\x38\x41\x7f\x4d\xa2\xbb\x4c\x35\xb9\x29\xb6\x43\xec\xce\ +\xaf\x8a\xad\x87\xb4\x85\x56\x4a\x4a\xb4\x5a\x67\x8f\x31\x46\xe6\ +\x63\x39\xfe\x0a\xf5\xed\xc6\x84\x77\xf6\xfe\x0f\x9b\x41\x85\x54\ +\ \x00\x00\x07\xb5\ \x00\ \x00\x1a\x6e\x78\x9c\xed\x58\x5d\x6f\xe3\xb8\x15\x7d\xcf\xaf\x50\ @@ -37846,83 +37851,83 @@ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x35\x00\x00\x00\x1b\ \x00\x00\x00\x38\x00\x02\x00\x00\x00\x05\x00\x00\x00\x16\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x05\ -\x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x06\x48\x2f\ -\x00\x00\x02\x02\x00\x01\x00\x00\x00\x01\x00\x05\x44\xb8\ -\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x03\x7e\x56\ -\x00\x00\x02\x56\x00\x01\x00\x00\x00\x01\x00\x05\xe1\x7b\ -\x00\x00\x02\x3a\x00\x01\x00\x00\x00\x01\x00\x05\xac\xbf\ -\x00\x00\x01\x3e\x00\x01\x00\x00\x00\x01\x00\x02\x0b\x3a\ -\x00\x00\x02\x1e\x00\x01\x00\x00\x00\x01\x00\x05\x77\x8d\ -\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x04\ -\x00\x00\x02\x72\x00\x01\x00\x00\x00\x01\x00\x06\x15\x26\ -\x00\x00\x01\x5a\x00\x00\x00\x00\x00\x01\x00\x02\x3d\x78\ -\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x01\x62\xc3\ -\x00\x00\x01\xae\x00\x01\x00\x00\x00\x01\x00\x04\x2e\x7d\ -\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x02\xe8\xa5\ -\x00\x00\x01\x06\x00\x01\x00\x00\x00\x01\x00\x01\x2f\xb4\ -\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x83\xef\ -\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x04\x61\xd1\ -\x00\x00\x01\xe6\x00\x01\x00\x00\x00\x01\x00\x05\x12\xa0\ +\x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x06\x48\x2e\ +\x00\x00\x02\x02\x00\x01\x00\x00\x00\x01\x00\x05\x44\xb7\ +\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x03\x7e\x55\ +\x00\x00\x02\x56\x00\x01\x00\x00\x00\x01\x00\x05\xe1\x7a\ +\x00\x00\x02\x3a\x00\x01\x00\x00\x00\x01\x00\x05\xac\xbe\ +\x00\x00\x01\x3e\x00\x01\x00\x00\x00\x01\x00\x02\x0b\x39\ +\x00\x00\x02\x1e\x00\x01\x00\x00\x00\x01\x00\x05\x77\x8c\ +\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x03\ +\x00\x00\x02\x72\x00\x01\x00\x00\x00\x01\x00\x06\x15\x25\ +\x00\x00\x01\x5a\x00\x00\x00\x00\x00\x01\x00\x02\x3d\x77\ +\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x01\x62\xc2\ +\x00\x00\x01\xae\x00\x01\x00\x00\x00\x01\x00\x04\x2e\x7c\ +\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x02\xe8\xa4\ +\x00\x00\x01\x06\x00\x01\x00\x00\x00\x01\x00\x01\x2f\xb3\ +\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x83\xee\ +\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x04\x61\xd0\ +\x00\x00\x01\xe6\x00\x01\x00\x00\x00\x01\x00\x05\x12\x9f\ \x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x06\x29\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x70\x84\ -\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xc2\x31\ -\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x24\x4e\ -\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xe3\x36\ -\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x0d\x18\ -\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x8d\xce\ -\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe6\x6c\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb7\x9d\ -\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x5d\xdd\ -\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xff\x46\ -\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xdb\x53\ -\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xec\x30\ -\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x7b\x38\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xe0\xd2\ -\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa6\x93\ -\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xd0\xe7\ -\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc5\x7c\ -\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x9c\x7b\ -\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x28\x37\ -\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xb1\x86\ -\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xbb\xe8\ -\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x16\x1e\ -\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x94\xc2\ -\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x0d\x24\ -\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x6e\x25\ -\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x39\xa7\ -\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x84\xd8\ -\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xce\x3f\ -\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xfc\x3a\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xed\xd0\ -\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x50\xe6\ -\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa4\x82\ -\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x0b\x1f\ -\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\xa2\x5f\ -\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb9\xa2\ -\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x2c\xf7\ -\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xce\x09\ -\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x63\x25\ -\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc4\x8e\ -\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x49\x4c\ -\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x07\x02\xd7\ -\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xdf\xf7\ -\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x34\x28\ -\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x64\x52\ -\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x08\x01\xb2\ -\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x14\x78\ -\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd8\xb4\ -\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x97\xaf\ -\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xf3\xf1\ -\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xf1\xe0\ -\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x41\x8c\ -\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x9d\x1f\ -\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x34\x48\ -\x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x7b\xb2\ -\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x85\x1f\ +\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x70\xc5\ +\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xc2\x72\ +\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x24\x8f\ +\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xe3\x77\ +\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x0d\x59\ +\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x8e\x0f\ +\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe6\xad\ +\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb7\xde\ +\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x5e\x1e\ +\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xff\x87\ +\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xdb\x94\ +\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xec\x71\ +\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x7b\x79\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xe1\x13\ +\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa6\xd4\ +\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xd1\x28\ +\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc5\xbd\ +\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x9c\xbc\ +\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x28\x78\ +\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xb1\xc7\ +\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xbc\x29\ +\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x16\x5f\ +\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x95\x03\ +\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x0d\x65\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x6e\x66\ +\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x39\xe8\ +\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x85\x19\ +\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xce\x80\ +\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xfc\x7b\ +\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xee\x11\ +\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x51\x27\ +\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa4\xc3\ +\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x0b\x60\ +\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\xa2\xa0\ +\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb9\xe3\ +\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x2d\x38\ +\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xce\x4a\ +\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x63\x66\ +\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc4\xcf\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x49\x8d\ +\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x07\x03\x18\ +\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xe0\x38\ +\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x34\x69\ +\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x64\x93\ +\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x08\x01\xf3\ +\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x14\xb9\ +\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd8\xf5\ +\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x97\xf0\ +\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xf4\x32\ +\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xf2\x21\ +\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x41\xcd\ +\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x9d\x60\ +\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x34\x89\ +\x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x7b\xb1\ +\x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x85\x1e\ " def qInitResources(): diff --git a/src/Mod/Draft/Resources/ui/userprefs-base.ui b/src/Mod/Draft/Resources/ui/userprefs-base.ui index 192887820..ebf2bdbd9 100755 --- a/src/Mod/Draft/Resources/ui/userprefs-base.ui +++ b/src/Mod/Draft/Resources/ui/userprefs-base.ui @@ -562,6 +562,26 @@ + + + + + + if checked, a widget indicating the current working plane orientation appears during drawing operations + + + Show Working Plane tracker + + + showPlaneTracker + + + Mod/Draft + + + + + @@ -873,19 +893,6 @@ Values with differences below this value will be treated as same. - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -908,17 +915,6 @@ Values with differences below this value will be treated as same. - - - - - - - - Default text font - - - @@ -932,6 +928,13 @@ Values with differences below this value will be treated as same. + + + + Default text font + + + From fb3f051563a79e3ae4095d37a3b9cf093c72a5a8 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 6 Jun 2012 17:04:24 -0300 Subject: [PATCH 298/517] Draft: snap toolbar now appears on WB activation --- src/Mod/Arch/InitGui.py | 8 ++++++-- src/Mod/Draft/DraftSnap.py | 4 ++-- src/Mod/Draft/InitGui.py | 12 +++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 6267d9077..2701e5616 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -85,11 +85,15 @@ class ArchWorkbench(Workbench): Log ('Loading Arch module... done\n') def Activated(self): - FreeCADGui.draftToolBar.Activated() + if hasattr(FreeCADGui,"draftToolBar"): + FreeCADGui.draftToolBar.Activated() + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.show() Msg("Arch workbench activated\n") def Deactivated(self): - FreeCADGui.draftToolBar.Deactivated() + if hasattr(FreeCADGui,"draftToolBar"): + FreeCADGui.draftToolBar.Deactivated() Msg("Arch workbench deactivated\n") def ContextMenu(self, recipient): diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 3918be2b2..746bb7bc9 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -167,7 +167,7 @@ class Snapper: self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) # set the grid - if self.grid and Draft.getParam("grid") and (not self.forceGridOff): + if self.grid and (not self.forceGridOff): self.grid.set() # activate snap @@ -894,7 +894,7 @@ class Snapper: def setGrid(self): "sets the grid, if visible" - if self.grid: + if self.grid and (not self.forceGridOff): if self.grid.Visible: self.grid.set() diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 3e2bd5696..b4b83ee35 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -201,10 +201,16 @@ class DraftWorkbench (Workbench): self.appendMenu([str(DraftTools.translate("draft","&Draft")),str(DraftTools.translate("draft","Wire tools"))],self.lineList) def Activated(self): - FreeCADGui.draftToolBar.Activated() - + if hasattr(FreeCADGui,"draftToolBar"): + FreeCADGui.draftToolBar.Activated() + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.show() + Msg("Draft workbench activated\n") + def Deactivated(self): - FreeCADGui.draftToolBar.Deactivated() + if hasattr(FreeCADGui,"draftToolBar"): + FreeCADGui.draftToolBar.Deactivated() + Msg("Draft workbench deactivated\n") def ContextMenu(self, recipient): if (recipient == "View"): From db8ebb31e63af9aff2073eb1a276e9a82f2e69a3 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 7 Jun 2012 10:42:55 -0300 Subject: [PATCH 299/517] Arch: fixed import error --- src/Mod/Arch/InitGui.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 2701e5616..7f4c51079 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -109,7 +109,8 @@ FreeCAD.addExportType("Wavefront OBJ - Arch module (*.obj)","importOBJ") try: import collada except: - FreeCAD.Console.PrintMessage(str(DraftTools.translate("arch","pycollada not found, collada support will be disabled.\n"))) + from DraftTools import translate + FreeCAD.Console.PrintMessage(str(translate("arch","pycollada not found, collada support will be disabled.\n"))) else: FreeCAD.addImportType("Collada (*.dae)","importDAE") FreeCAD.addExportType("Collada (*.dae)","importDAE") From 04d21035669c99e77e5b2b5c4a01d678e0181456 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 7 Jun 2012 10:43:32 -0300 Subject: [PATCH 300/517] Draft: Made the grid appear on module activation --- src/Mod/Draft/DraftSnap.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 746bb7bc9..846cb522c 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -883,7 +883,7 @@ class Snapper: return False def show(self): - "shows the toolbar" + "shows the toolbar and the grid" if not hasattr(self,"toolbar"): self.makeSnapToolBar() mw = getMainWindow() @@ -891,6 +891,11 @@ class Snapper: if not bt: mw.addToolBar(self.toolbar) self.toolbar.show() + if FreeCADGui.ActiveDocument: + if not self.forceGridOff: + if not self.grid: + self.grid = DraftTrackers.gridTracker() + self.grid.set() def setGrid(self): "sets the grid, if visible" From cfee1c192fad0b323d838181e6b5aeb5747e0131 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 7 Jun 2012 20:17:38 +0200 Subject: [PATCH 301/517] 0000738: Compress stuff in Tree view --- src/Gui/CombiView.cpp | 2 ++ src/Gui/Tree.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/Gui/CombiView.cpp b/src/Gui/CombiView.cpp index 1632c4a74..b7cdb1f7f 100644 --- a/src/Gui/CombiView.cpp +++ b/src/Gui/CombiView.cpp @@ -64,6 +64,8 @@ CombiView::CombiView(Gui::Document* pcDocument, QWidget *parent) // tree widget tree = new TreeWidget(this); //tree->setRootIsDecorated(false); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/TreeView"); + tree->setIndentation(hGrp->GetInt("Indentation", tree->indentation())); splitter->addWidget(tree); // property view diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index c453662a5..48d27f325 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -726,6 +726,8 @@ TreeDockWidget::TreeDockWidget(Gui::Document* pcDocument,QWidget *parent) setWindowTitle(tr("Tree view")); this->treeWidget = new TreeWidget(this); this->treeWidget->setRootIsDecorated(false); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/TreeView"); + this->treeWidget->setIndentation(hGrp->GetInt("Indentation", this->treeWidget->indentation())); QGridLayout* pLayout = new QGridLayout(this); pLayout->setSpacing(0); From 10de9074c6c5d23c7a081485c5ba4c495095a9a2 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 7 Jun 2012 22:14:58 +0200 Subject: [PATCH 302/517] 0000739: Chamfer/Fillet(PartDesign) on whole body produces infinite loop --- src/Mod/PartDesign/Gui/Command.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index c5fa4d2ad..37e02dc6a 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -428,11 +428,15 @@ void CmdPartDesignFillet::activated(int iMsg) SubNames.erase(SubNames.begin()+i); } + // empty name or any other sub-element + else { + SubNames.erase(SubNames.begin()+i); + } } - if(SubNames.size() == 0){ + if (SubNames.size() == 0) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("No Fillet possilbe on seleced faces/edges")); + QObject::tr("No fillet possible on selected faces/edges")); return; } @@ -571,11 +575,15 @@ void CmdPartDesignChamfer::activated(int iMsg) SubNames.erase(SubNames.begin()+i); } + // empty name or any other sub-element + else { + SubNames.erase(SubNames.begin()+i); + } } - if(SubNames.size() == 0){ + if (SubNames.size() == 0) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("No Fillet possilbe on seleced faces/edges")); + QObject::tr("No chamfer possible on selected faces/edges")); return; } From e848b1e96a59a3bf861f640ca7dd70fe5d2ee32f Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 7 Jun 2012 23:19:00 +0200 Subject: [PATCH 303/517] Add missing export macro for Box class --- src/Mod/Part/App/FeaturePartBox.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Part/App/FeaturePartBox.h b/src/Mod/Part/App/FeaturePartBox.h index 0349bb211..086fa40cd 100644 --- a/src/Mod/Part/App/FeaturePartBox.h +++ b/src/Mod/Part/App/FeaturePartBox.h @@ -32,7 +32,7 @@ namespace Part { -class Box :public Part::Primitive +class PartExport Box :public Part::Primitive { PROPERTY_HEADER(Part::Box); From fd29f4aa079ce19d07347e64af5193f138488d69 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 7 Jun 2012 18:20:42 -0300 Subject: [PATCH 304/517] Draft: Huge bugfixing in snap and grid behaviour --- src/Mod/Draft/DraftGui.py | 9 + src/Mod/Draft/DraftSnap.py | 42 ++++- src/Mod/Draft/DraftTools.py | 303 ++++++++++++++++----------------- src/Mod/Draft/DraftTrackers.py | 50 ++++-- src/Mod/Draft/WorkingPlane.py | 57 ++++++- 5 files changed, 275 insertions(+), 186 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 663c57fe9..d68a981a7 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -959,6 +959,10 @@ class DraftToolBar: self.wipeLine() elif txt.endsWith("s"): self.togglesnap() + elif txt.endsWith("["): + self.toggleradius(1) + elif txt.endsWith("]"): + self.toggleradius(-1) elif txt.endsWith("c"): if self.closeButton.isVisible(): self.closeLine() @@ -1158,6 +1162,11 @@ class DraftToolBar: if hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper.toggle() + def toggleradius(self,val): + if hasattr(FreeCADGui,"Snapper"): + par = Draft.getParam("snapRange") + Draft.setParam("snapRange",par+val) + FreeCADGui.Snapper.showradius() #--------------------------------------------------------------------------- # TaskView operations diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 846cb522c..3e1673460 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -70,11 +70,12 @@ class Snapper: self.grid = None self.constrainLine = None self.trackLine = None + self.radiusTracker = None self.snapInfo = None self.lastSnappedObject = None self.active = True self.forceGridOff = False - self.trackers = [[],[],[],[]] # view, grid, snap, extline + self.trackers = [[],[],[],[],[]] # view, grid, snap, extline, radius self.polarAngles = [90,45] @@ -126,10 +127,13 @@ class Snapper: def cstr(point): "constrains if needed" if constrain: - return self.constrain(point,lastpoint) + fpt = self.constrain(point,lastpoint) else: self.unconstrain() - return point + fpt = point + if self.radiusTracker: + self.radiusTracker.update(fpt) + return fpt snaps = [] self.snapInfo = None @@ -150,6 +154,7 @@ class Snapper: self.grid = self.trackers[1][i] self.tracker = self.trackers[2][i] self.extLine = self.trackers[3][i] + self.radiusTracker = self.trackers[4][i] else: if Draft.getParam("grid"): self.grid = DraftTrackers.gridTracker() @@ -157,19 +162,23 @@ class Snapper: self.grid = None self.tracker = DraftTrackers.snapTracker() self.extLine = DraftTrackers.lineTracker(dotted=True) + self.radiusTracker = DraftTrackers.radiusTracker() self.trackers[0].append(v) self.trackers[1].append(self.grid) self.trackers[2].append(self.tracker) self.trackers[3].append(self.extLine) + self.trackers[4].append(self.radiusTracker) # getting current snap Radius - if not self.radius: - self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) + self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) + if self.radiusTracker: + self.radiusTracker.update(self.radius) + self.radiusTracker.off() # set the grid if self.grid and (not self.forceGridOff): self.grid.set() - + # activate snap oldActive = False if Draft.getParam("alwaysSnap"): @@ -195,7 +204,7 @@ class Snapper: eline = None point,eline = self.snapToPolar(point,lastpoint) point,eline = self.snapToExtensions(point,lastpoint,constrain,eline) - + if not self.snapInfo: # nothing has been snapped, check fro grid snap @@ -223,6 +232,9 @@ class Snapper: snaps = [self.snapToVertex(self.snapInfo)] else: + + # first stick to the snapped object + point = self.snapToVertex(self.snapInfo)[0] # active snapping comp = self.snapInfo['Component'] @@ -324,7 +336,12 @@ class Snapper: view = Draft.get3DView() pt = view.getPoint(x,y) if hasattr(FreeCAD,"DraftWorkingPlane"): - dv = view.getViewDirection() + if view.getCameraType() == "Perspective": + camera = view.getCameraNode() + p = camera.getField("position").getValue() + vd = pt.sub(Vector(p[0],p[1],p[2])) + else: + dv = view.getViewDirection() return FreeCAD.DraftWorkingPlane.projectPoint(pt,dv) else: return pt @@ -641,6 +658,8 @@ class Snapper: self.tracker.off() if self.extLine: self.extLine.off() + if self.radiusTracker: + self.radiusTracker.off() if self.grid: if not Draft.getParam("alwaysShowGrid"): self.grid.off() @@ -875,6 +894,13 @@ class Snapper: self.toolbarButtons[i].setEnabled(False) self.saveSnapModes() + def showradius(self): + "shows the snap radius indicator" + self.radius = self.getScreenDist(Draft.getParam("snapRange"),(400,300)) + if self.radiusTracker: + self.radiusTracker.update(self.radius) + self.radiusTracker.on() + def isEnabled(self,but): "returns true if the given button is turned on" for b in self.toolbarButtons: diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 1a55ee3cf..9f31ff1e8 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -143,22 +143,6 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True): cmod = hasMod(args,MODCONSTRAIN) point = FreeCADGui.Snapper.snap(args["Position"],lastpoint=last,active=amod,constrain=cmod) info = FreeCADGui.Snapper.snapInfo - # project onto working plane if needed - if (not plane.weak) and workingplane: - # working plane was explicitely selected - project onto it - viewDirection = view.getViewDirection() - if view.getCameraType() == "Perspective": - camera = view.getCameraNode() - p = camera.getField("position").getValue() - # view is from camera to point: - viewDirection = point.sub(Vector(p[0],p[1],p[2])) - # if we are not snapping to anything, project along view axis, - # otherwise perpendicularly - if view.getObjectInfo((args["Position"][0],args["Position"][1])): - pass - # point = plane.projectPoint(point) - else: - point = plane.projectPoint(point, viewDirection) ctrlPoint = Vector(point) mask = FreeCADGui.Snapper.affinity if target.node: @@ -169,8 +153,19 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True): else: ui.displayPoint(point, plane=plane, mask=mask) return point,ctrlPoint,info -def getSupport(args): +def getSupport(args=None): "returns the supporting object and sets the working plane" + if not args: + sel = FreeCADGui.Selection.getSelectionEx() + if len(sel) == 1: + sel = sel[0] + if sel.HasSubObjects: + if len(sel.SubElementNames) == 1: + if "Face" in sel.SubElementNames[0]: + plane.alignToFace(sel.SubObjects[0]) + return sel.Object + return None + snapped = Draft.get3DView().getObjectInfo((args["Position"][0],args["Position"][1])) if not snapped: return None obj = None @@ -204,11 +199,125 @@ def setMod(args,mod,state): elif mod == "alt": args["AltDown"] = state + + + +#--------------------------------------------------------------------------- +# Base Class +#--------------------------------------------------------------------------- + +class DraftTool: + "The base class of all Draft Tools" + + def __init__(self): + self.commitList = [] + + def IsActive(self): + if FreeCADGui.ActiveDocument: + return True + else: + return False + + def Activated(self,name="None"): + if FreeCAD.activeDraftCommand: + FreeCAD.activeDraftCommand.finish() + + global Part, DraftGeomUtils + import Part, DraftGeomUtils + + self.ui = None + self.call = None + self.support = None + self.commitList = [] + self.doc = FreeCAD.ActiveDocument + if not self.doc: + self.finish() + return + + FreeCAD.activeDraftCommand = self + self.view = Draft.get3DView() + self.ui = FreeCADGui.draftToolBar + self.ui.sourceCmd = self + self.ui.setTitle(name) + self.ui.show() + rot = self.view.getCameraNode().getField("orientation").getValue() + upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) + plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) + self.node = [] + self.pos = [] + self.constrain = None + self.obj = None + self.extendedCopy = False + self.ui.setTitle(name) + self.featureName = name + #self.snap = snapTracker() + #self.extsnap = lineTracker(dotted=True) + self.planetrack = None + if Draft.getParam("showPlaneTracker"): + self.planetrack = PlaneTracker() + + def finish(self): + self.node = [] + #self.snap.finalize() + #self.extsnap.finalize() + FreeCAD.activeDraftCommand = None + if self.ui: + self.ui.offUi() + self.ui.sourceCmd = None + #self.ui.cross(False) + msg("") + if self.planetrack: + self.planetrack.finalize() + if self.support: + plane.restore() + FreeCADGui.Snapper.off() + if self.call: + self.view.removeEventCallback("SoEvent",self.call) + self.call = None + if self.commitList: + todo.delayCommit(self.commitList) + self.commitList = [] + + def commit(self,name,func): + "stores actions to be committed to the FreeCAD document" + # print "committing" + self.commitList.append((name,func)) + + def getStrings(self): + "returns a couple of useful strings fro building python commands" + + # current plane rotation + p = plane.getRotation() + qr = p.Rotation.Q + qr = '('+str(qr[0])+','+str(qr[1])+','+str(qr[2])+','+str(qr[3])+')' + + # support object + if self.support: + sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' + else: + sup = 'None' + + # contents of self.node + points='[' + for n in self.node: + if len(points) > 1: + points += ',' + points += DraftVecUtils.toString(n) + points += ']' + + # fill mode + if self.ui: + fil = str(bool(self.ui.fillmode)) + else: + fil = "True" + + return qr,sup,points,fil + #--------------------------------------------------------------------------- # Helper tools -#--------------------------------------------------------------------------- - -class SelectPlane: +#--------------------------------------------------------------------------- + +class SelectPlane(DraftTool): "The Draft_SelectPlane FreeCAD command definition" def GetResources(self): @@ -216,20 +325,10 @@ class SelectPlane: 'Accel' : "W, P", 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_SelectPlane", "SelectPlane"), 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_SelectPlane", "Select a working plane for geometry creation")} - - def IsActive(self): - if FreeCADGui.ActiveDocument: - return True - else: - return False def Activated(self): - if FreeCAD.activeDraftCommand: - FreeCAD.activeDraftCommand.finish() + DraftTool.Activated(self) self.offset = 0 - self.ui = None - self.call = None - self.doc = FreeCAD.ActiveDocument if self.doc: sel = FreeCADGui.Selection.getSelectionEx() if len(sel) == 1: @@ -242,12 +341,8 @@ class SelectPlane: self.display(plane.axis) self.finish() return - FreeCAD.activeDraftCommand = self - self.view = Draft.get3DView() - self.ui = FreeCADGui.draftToolBar self.ui.selectPlaneUi() msg(translate("draft", "Pick a face to define the drawing plane\n")) - self.ui.sourceCmd = self if plane.alignToSelection(self.offset): FreeCADGui.Selection.clearSelection() self.display(plane.axis) @@ -316,135 +411,25 @@ class SelectPlane: self.ui.wplabel.setText(plv+suffix) FreeCADGui.Snapper.setGrid() - def finish(self): - if self.call: - self.view.removeEventCallback("SoEvent",self.call) - FreeCAD.activeDraftCommand = None - if self.ui: - self.ui.offUi() - #--------------------------------------------------------------------------- # Geometry constructors #--------------------------------------------------------------------------- - -class DraftTool: - "The base class of all Draft Tools" - - def __init__(self): - self.commitList = [] - - def Activated(self,name="None"): - if FreeCAD.activeDraftCommand: - FreeCAD.activeDraftCommand.finish() - - global Part, DraftGeomUtils - import Part, DraftGeomUtils - - self.ui = None - self.call = None - self.support = None - self.commitList = [] - self.doc = FreeCAD.ActiveDocument - if not self.doc: - self.finish() - return - - FreeCAD.activeDraftCommand = self - self.view = Draft.get3DView() - self.ui = FreeCADGui.draftToolBar - self.ui.sourceCmd = self - self.ui.setTitle(name) - self.ui.show() - rot = self.view.getCameraNode().getField("orientation").getValue() - upv = Vector(rot.multVec(coin.SbVec3f(0,1,0)).getValue()) - plane.setup(DraftVecUtils.neg(self.view.getViewDirection()), Vector(0,0,0), upv) - self.node = [] - self.pos = [] - self.constrain = None - self.obj = None - self.extendedCopy = False - self.ui.setTitle(name) - self.featureName = name - #self.snap = snapTracker() - #self.extsnap = lineTracker(dotted=True) - self.planetrack = None - if Draft.getParam("showPlaneTracker"): - self.planetrack = PlaneTracker() - - def finish(self): - self.node = [] - #self.snap.finalize() - #self.extsnap.finalize() - FreeCAD.activeDraftCommand = None - if self.ui: - self.ui.offUi() - self.ui.sourceCmd=None - #self.ui.cross(False) - msg("") - if self.planetrack: - self.planetrack.finalize() - if self.support: - plane.restore() - FreeCADGui.Snapper.off() - if self.call: - self.view.removeEventCallback("SoEvent",self.call) - self.call = None - if self.commitList: - todo.delayCommit(self.commitList) - self.commitList = [] - - def commit(self,name,func): - "stores actions to be committed to the FreeCAD document" - # print "committing" - self.commitList.append((name,func)) - - def getStrings(self): - "returns a couple of useful strings fro building python commands" - - # current plane rotation - p = plane.getRotation() - qr = p.Rotation.Q - qr = '('+str(qr[0])+','+str(qr[1])+','+str(qr[2])+','+str(qr[3])+')' - - # support object - if self.support: - sup = 'FreeCAD.ActiveDocument.getObject("' + self.support.Name + '")' - else: - sup = 'None' - - # contents of self.node - points='[' - for n in self.node: - if len(points) > 1: - points += ',' - points += DraftVecUtils.toString(n) - points += ']' - - # fill mode - if self.ui: - fil = str(bool(self.ui.fillmode)) - else: - fil = "True" - - return qr,sup,points,fil - class Creator(DraftTool): "A generic Draft Creator Tool used by creation tools such as line or arc" def __init__(self): DraftTool.__init__(self) - - def IsActive(self): - if FreeCADGui.ActiveDocument: - return True - else: - return False + def Activated(self,name="None"): + DraftTool.Activated(self) + self.support = getSupport() + class Line(Creator): "The Line FreeCAD command definition" def __init__(self, wiremode=False): + Creator.__init__(self) self.isWire = wiremode def GetResources(self): @@ -508,7 +493,8 @@ class Line(Creator): if (arg["Position"] == self.pos): self.finish(False,cont=True) else: - if not self.node: self.support = getSupport(arg) + if (not self.node) and (not self.support): + self.support = getSupport(arg) point,ctrlPoint,info = getPoint(self,arg) self.pos = arg["Position"] self.node.append(point) @@ -632,7 +618,8 @@ class BSpline(Line): if (arg["Position"] == self.pos): self.finish(False,cont=True) else: - if not self.node: self.support = getSupport(arg) + if (not self.node) and (not self.support): + self.support = getSupport(arg) point,ctrlPoint,info = getPoint(self,arg) self.pos = arg["Position"] self.node.append(point) @@ -822,7 +809,8 @@ class Rectangle(Creator): if (arg["Position"] == self.pos): self.finish() else: - if not self.node: self.support = getSupport(arg) + if (not self.node) and (not self.support): + self.support = getSupport(arg) point,ctrlPoint,info = getPoint(self,arg) self.appendPoint(point) @@ -1019,7 +1007,8 @@ class Arc(Creator): if not DraftVecUtils.isNull(viewdelta): point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center - self.support = getSupport(arg) + if not self.support: + self.support = getSupport(arg) if hasMod(arg,MODALT): snapped=self.view.getObjectInfo((arg["Position"][0],arg["Position"][1])) if snapped: @@ -1288,7 +1277,8 @@ class Polygon(Creator): if not DraftVecUtils.isNull(viewdelta): point = point.add(DraftVecUtils.neg(viewdelta)) if (self.step == 0): # choose center - if not self.node: self.support = getSupport(arg) + if (not self.node) and (not self.support): + self.support = getSupport(arg) if hasMod(arg,MODALT): snapped=self.view.getObjectInfo((arg["Position"][0],arg["Position"][1])) if snapped: @@ -1635,7 +1625,8 @@ class Dimension(Creator): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): point,ctrlPoint,info = getPoint(self,arg) - if not self.node: self.support = getSupport(arg) + if (not self.node) and (not self.support): + self.support = getSupport(arg) if hasMod(arg,MODALT) and (len(self.node)<3): print "snapped: ",info if info: diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 47e378a34..1d9ba2b6c 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -640,24 +640,16 @@ class gridTracker(Tracker): def getClosestNode(self,point): "returns the closest node from the given point" + print "in:",point # get the 2D coords. - point = FreeCAD.DraftWorkingPlane.projectPoint(point) - u = DraftVecUtils.project(point,FreeCAD.DraftWorkingPlane.u) - lu = u.Length - if u.getAngle(FreeCAD.DraftWorkingPlane.u) > 1.5: - lu = -lu - v = DraftVecUtils.project(point,FreeCAD.DraftWorkingPlane.v) - lv = v.Length - if v.getAngle(FreeCAD.DraftWorkingPlane.v) > 1.5: - lv = -lv - # print "u = ",u," v = ",v - # find nearest grid node - pu = (round(lu/self.space,0))*self.space - pv = (round(lv/self.space,0))*self.space - rot = FreeCAD.Rotation() - rot.Q = self.trans.rotation.getValue().getValue() - return rot.multVec(Vector(pu,pv,0)) - + # point = FreeCAD.DraftWorkingPlane.projectPoint(point) + pt = FreeCAD.DraftWorkingPlane.getLocalCoords(point) + pu = (round(pt.x/self.space,0))*self.space + pv = (round(pt.y/self.space,0))*self.space + pt = FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(pu,pv,0)) + print "out:",pt + return pt + class boxTracker(Tracker): "A box tracker, can be based on a line object" def __init__(self,line=None,width=0.1,height=1): @@ -719,3 +711,27 @@ class boxTracker(Tracker): self.update() else: return self.cube.depth.getValue() + +class radiusTracker(Tracker): + "A tracker that displays a transparent sphere to inicate a radius" + def __init__(self,position=FreeCAD.Vector(0,0,0),radius=1): + self.trans = coin.SoTransform() + self.trans.translation.setValue([position.x,position.y,position.z]) + m = coin.SoMaterial() + m.transparency.setValue(0.9) + m.diffuseColor.setValue([0,1,0]) + self.sphere = coin.SoSphere() + self.sphere.radius.setValue(radius) + self.baseline = None + Tracker.__init__(self,children=[self.trans,m,self.sphere]) + + def update(self,arg1,arg2=None): + if isinstance(arg1,FreeCAD.Vector): + self.trans.translation.setValue([arg1.x,arg1.y,arg1.z]) + else: + self.sphere.radius.setValue(arg1) + if arg2 != None: + if isinstance(arg2,FreeCAD.Vector): + self.trans.translation.setValue([arg2.x,arg2.y,arg2.z]) + else: + self.sphere.radius.setValue(arg2) diff --git a/src/Mod/Draft/WorkingPlane.py b/src/Mod/Draft/WorkingPlane.py index e41eaabf7..6c1d6066b 100644 --- a/src/Mod/Draft/WorkingPlane.py +++ b/src/Mod/Draft/WorkingPlane.py @@ -86,8 +86,29 @@ class plane: def projectPoint(self, p, direction=None): '''project point onto plane, default direction is orthogonal''' - if not direction: direction = self.axis + if not direction: + direction = self.axis + lp = self.getLocalCoords(p) + gp = self.getGlobalCoords(Vector(lp.x,lp.y,0)) + a = direction.getAngle(gp.sub(p)) + if a > math.pi/2: + direction = DraftVecUtils.neg(direction) + a = math.pi - a + ld = self.getLocalRot(direction) + gd = self.getGlobalRot(Vector(ld.x,ld.y,0)) + hyp = abs(math.tan(a) * lp.z) + return gp.add(DraftVecUtils.scaleTo(gd,hyp)) + + def projectPointOld(self, p, direction=None): + '''project point onto plane, default direction is orthogonal. Obsolete''' + if not direction: + direction = self.axis t = Vector(direction) + #t.normalize() + a = round(t.getAngle(self.axis),DraftVecUtils.precision()) + pp = round((math.pi)/2,DraftVecUtils.precision()) + if a == pp: + return p t.multiply(self.offsetToPoint(p, direction)) return p.add(t) @@ -196,6 +217,31 @@ class plane: def getLocalCoords(self,point): "returns the coordinates of a given point on the working plane" + pt = point.sub(self.position) + xv = DraftVecUtils.project(pt,self.u) + x = xv.Length + if xv.getAngle(self.u) > 1: + x = -x + yv = DraftVecUtils.project(pt,self.v) + y = yv.Length + if yv.getAngle(self.v) > 1: + y = -y + zv = DraftVecUtils.project(pt,self.axis) + z = zv.Length + if zv.getAngle(self.axis) > 1: + z = -z + return Vector(x,y,z) + + def getGlobalCoords(self,point): + "returns the global coordinates of the given point, taken relatively to this working plane" + vx = DraftVecUtils.scale(self.u,point.x) + vy = DraftVecUtils.scale(self.v,point.y) + vz = DraftVecUtils.scale(self.axis,point.z) + pt = (vx.add(vy)).add(vz) + return pt.add(self.position) + + def getLocalRot(self,point): + "Same as getLocalCoords, but discards the WP position" xv = DraftVecUtils.project(point,self.u) x = xv.Length if xv.getAngle(self.u) > 1: @@ -210,13 +256,14 @@ class plane: z = -z return Vector(x,y,z) - def getGlobalCoords(self,point): - "returns the global coordinates of the given point, taken relatively to this working plane" + def getGlobalRot(self,point): + "Same as getGlobalCoords, but discards the WP position" vx = DraftVecUtils.scale(self.u,point.x) vy = DraftVecUtils.scale(self.v,point.y) vz = DraftVecUtils.scale(self.axis,point.z) - return (vx.add(vy)).add(vz) - + pt = (vx.add(vy)).add(vz) + return pt + def getClosestAxis(self,point): "returns which of the workingplane axes is closest from the given vector" ax = point.getAngle(self.u) From 79db35a6b575305c79cc3cd2b36736f199641242 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 7 Jun 2012 18:23:50 -0300 Subject: [PATCH 305/517] Draft: Removed debug message --- src/Mod/Draft/DraftTrackers.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 1d9ba2b6c..c36d03152 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -640,14 +640,12 @@ class gridTracker(Tracker): def getClosestNode(self,point): "returns the closest node from the given point" - print "in:",point # get the 2D coords. # point = FreeCAD.DraftWorkingPlane.projectPoint(point) pt = FreeCAD.DraftWorkingPlane.getLocalCoords(point) pu = (round(pt.x/self.space,0))*self.space pv = (round(pt.y/self.space,0))*self.space pt = FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(pu,pv,0)) - print "out:",pt return pt class boxTracker(Tracker): From e7644fd3b32e487b915249ac86949495e9401ae6 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 7 Jun 2012 19:58:56 -0300 Subject: [PATCH 306/517] Draft: remaining fixes --- src/Mod/Draft/DraftSnap.py | 22 ++++++++++++---------- src/Mod/Draft/DraftTools.py | 2 ++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 3e1673460..ee2e2aab9 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -339,7 +339,7 @@ class Snapper: if view.getCameraType() == "Perspective": camera = view.getCameraNode() p = camera.getField("position").getValue() - vd = pt.sub(Vector(p[0],p[1],p[2])) + dv = pt.sub(Vector(p[0],p[1],p[2])) else: dv = view.getViewDirection() return FreeCAD.DraftWorkingPlane.projectPoint(pt,dv) @@ -390,15 +390,17 @@ class Snapper: else: if self.isEnabled('parallel'): if last: - de = Part.Line(last,last.add(DraftGeomUtils.vec(e))).toShape() - np = self.getPerpendicular(de,point) - if (np.sub(point)).Length < self.radius: - if self.tracker: - self.tracker.setCoords(np) - self.tracker.setMarker(self.mk['parallel']) - self.tracker.on() - self.setCursor('parallel') - return np,de + ve = DraftGeomUtils.vec(e) + if not DraftVecUtils.isNull(ve): + de = Part.Line(last,last.add(ve)).toShape() + np = self.getPerpendicular(de,point) + if (np.sub(point)).Length < self.radius: + if self.tracker: + self.tracker.setCoords(np) + self.tracker.setMarker(self.mk['parallel']) + self.tracker.on() + self.setCursor('parallel') + return np,de return point,eline def snapToPolar(self,point,last): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 9f31ff1e8..040736927 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3823,6 +3823,8 @@ class ToggleGrid(): else: FreeCADGui.Snapper.grid.on() FreeCADGui.Snapper.forceGridOff=False + else: + FreeCADGui.Snapper.show() #--------------------------------------------------------------------------- # Adds the icons & commands to the FreeCAD command manager, and sets defaults From 8e09607c88a4a2d7f6ee0313138b9fdaabc1170a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 8 Jun 2012 13:49:37 +0200 Subject: [PATCH 307/517] Moved Create Ship to new paradigm. --- src/Mod/Ship/Instance.py | 125 +++-------------------- src/Mod/Ship/shipCreateShip/TaskPanel.py | 67 ++++++------ src/Mod/Ship/shipCreateShip/TaskPanel.ui | 114 ++------------------- 3 files changed, 55 insertions(+), 251 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index adba4d22b..54a262b1d 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -35,9 +35,10 @@ from FreeCAD import Part, Base, Vector from shipUtils import Paths, Translator, Math class Ship: - def __init__(self, obj, faces): + def __init__(self, obj, solids): """ Creates a new ship on active document. - @param faces Ship faces (Part::Shape entities). + @param obj Part::FeaturePython created object. + @param faces Ship solids components. """ # Add uniqueness property to identify Ship instances obj.addProperty("App::PropertyBool","IsShip","Ship", str(Translator.translate("True if is a valid ship instance"))).IsShip=True @@ -46,20 +47,23 @@ class Ship: obj.addProperty("App::PropertyLength","Beam","Ship", str(Translator.translate("Ship beam (B) [m]"))).Beam=0.0 obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes - obj.Shape = Part.makeShell(faces) + obj.Shape = Part.makeCompound(solids) obj.Proxy = self self.obj = obj def onChanged(self, fp, prop): - ''' Print the name of the property that has changed ''' - # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") + """ Called when a ship property is modified + @param fp Part::FeaturePython object. + @param prop Property changed. + """ if prop == "Length" or prop == "Beam" or prop == "Draft": pass - def execute(self, obj): - ''' Print a short message when doing a recomputation, this method is mandatory ''' - # FreeCAD.Console.PrintMessage("Recompute Ship\n") - obj.Shape = Part.makeShell(obj.Shape.Faces) + def execute(self, fp): + """ Called when a recomputation is needed. + @param fp Part::FeaturePython object. + """ + fp.Shape = Part.makeCompound(fp.Shape.Solids) def lineFaceSection(self,line,surface): """ Returns the point of section of a line with a face @@ -92,94 +96,6 @@ class Ship: result.append(points[i]) return result - def discretize(self, nS, nP): - """ Discretize the surface. - @param nS Number of sections - @param nP Number of points per section - """ - self.obj.addProperty("App::PropertyInteger","nSections","Ship", str(Translator.translate("Number of sections"))).nSections=nS - self.obj.addProperty("App::PropertyIntegerList","nPoints","Ship", str(Translator.translate("List of number of points per sections (accumulated histogram)"))).nPoints=[0] - self.obj.addProperty("App::PropertyFloatList","xSection","Ship", str(Translator.translate("List of sections x coordinate"))).xSection=[] - self.obj.addProperty("App::PropertyVectorList","mSections","Ship", str(Translator.translate("List of sections points"))).mSections=[] - nPoints = [0] - xSection = [] - mSections = [] - # Get bounds - shape = self.obj.Shape - bbox = shape.BoundBox - x0 = bbox.XMin - x1 = bbox.XMax - y0 = bbox.YMin - y1 = bbox.YMax - z0 = bbox.ZMin - z1 = bbox.ZMax - # Create a set of planes to perfom edges sections - planes = [] - dz = (z1 - z0) / (nP - 1) - for j in range(0,nP): - z = z0 + j*dz - rX = x1 - x0 - rY = max(y1 - y0, abs(y1), abs(y0)) - planes.append(Part.makePlane(4*rX,4*rY,Base.Vector(-2*rX,-2*rY,z),Base.Vector(0,0,1))) - # Division are performed at x axis - dx = (x1 - x0) / (nS - 1.0) - for i in range(0,nS): - section = [] - x = x0 + i*dx - xSection.append(x) - percen = i*100 / (nS-1) - FreeCAD.Console.PrintMessage('%d%%\n' % (percen)); - # Slice the surface to get curves - wires = shape.slice(Vector(1.0,0.0,0.0), x) - if not wires: - if (i != 0) or (i != nS-1): - msg = 'Found empty section at x=%g\n' % (x) - msg = Translator.translate(msg) - FreeCAD.Console.PrintWarning(msg) - FreeCAD.Console.PrintWarning('\tThis may happens if a bad defined (or really complex) surface has been provided.\n') - FreeCAD.Console.PrintWarning('\tPlease, ensure that this section is correct, or fix surfaces and create a new ship.\n') - nPoints.append(0) - continue - # Desarrollate wires into edges list - edges = [] - for j in range(0,len(wires)): - wire = wires[j].Edges - for k in range(0,len(wire)): - edges.append(wire[k]) - # Slice curves to get points - points = [] - for k in range(0,nP): - planePoints = [] - for j in range(0,len(edges)): - aux = self.lineFaceSection(edges[j], planes[k]) - for l in range(0,len(aux)): - planePoints.append(Vector(aux[l].X, aux[l].Y, aux[l].Z)) - if not planePoints: # No section found, symmetry plane point will used - planePoints.append(Vector(x,0,z0 + k*dz)) - # Get Y coordinates - auxY = [] - for l in range(0,len(planePoints)): - auxY.append(planePoints[l].y) - # Sort them - auxY.sort() - # And store - for l in range(0,len(planePoints)): - points.append(Vector(planePoints[l].x, auxY[l], planePoints[l].z)) - # Store points - section = points[:] - nPoints.append(len(section)) - for j in range(0,len(section)): - mSections.append(section[j]) - # Save data - for i in range(1,len(nPoints)): - nPoints[i] = nPoints[i] + nPoints[i-1] - self.obj.nPoints = nPoints[:] - self.obj.xSection = xSection[:] - self.obj.mSections = mSections[:] - msg = '%d Discretization points performed\n' % (len(mSections)) - msg = Translator.translate(msg) - FreeCAD.Console.PrintMessage(msg) - class ViewProviderShip: def __init__(self, obj): "Set this object to the proxy object of the actual view provider" @@ -660,21 +576,6 @@ class ViewProviderShip: " "}; """ -def sections(obj): - """ Returns the discretization points of sections, with the advantage - that is a list of nSections lists, with the points. - @param obj Ship object - @return Sections points - """ - histogram = obj.nPoints[:] - points = obj.mSections[:] - sections = [] - for i in range(0, len(histogram) - 1): - sections.append([]) - for j in range(histogram[i],histogram[i+1]): - sections[i].append(points[j]) - return sections - def weights(obj): """ Returns Ship weights list. If weights has not been sets, this tool creates it. diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.py b/src/Mod/Ship/shipCreateShip/TaskPanel.py index cbb5319c8..eeb474ccc 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.py +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.py @@ -30,7 +30,6 @@ from PyQt4 import QtGui,QtCore import Preview import Instance from shipUtils import Paths, Translator -from surfUtils import Geometry class TaskPanel: def __init__(self): @@ -41,7 +40,7 @@ class TaskPanel: self.preview.clean() # Create new ship instance obj = App.ActiveDocument.addObject("Part::FeaturePython","Ship") - ship = Instance.Ship(obj, self.faces) + ship = Instance.Ship(obj, self.solids) Instance.ViewProviderShip(obj.ViewObject) # Set main dimensions obj.Length = self.form.length.value() @@ -84,8 +83,6 @@ class TaskPanel: form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") form.draft = form.findChild(QtGui.QDoubleSpinBox, "Draft") - form.nSections = form.findChild(QtGui.QSpinBox, "NSections") - form.nPoints = form.findChild(QtGui.QSpinBox, "NPoints") form.mainLogo = form.findChild(QtGui.QLabel, "MainLogo") iconPath = Paths.iconsPath() + "/Ico.xpm" form.mainLogo.setPixmap(QtGui.QPixmap(iconPath)) @@ -99,8 +96,6 @@ class TaskPanel: QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onData) QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onData) QtCore.QObject.connect(form.draft, QtCore.SIGNAL("valueChanged(double)"), self.onData) - QtCore.QObject.connect(form.nSections, QtCore.SIGNAL("valueChanged(int)"), self.onDiscretization) - QtCore.QObject.connect(form.nPoints, QtCore.SIGNAL("valueChanged(int)"), self.onDiscretization) def getMainWindow(self): "returns the main window" @@ -117,36 +112,36 @@ class TaskPanel: """ Set initial values for fields """ # Get objects - self.faces = None - selObjs = Geometry.getSelectedObjs() + self.solids = None + selObjs = Gui.Selection.getSelection() if not selObjs: - msg = Translator.translate("Ship objects can only be created on top of hull geometry (no object selected).\n") + msg = Translator.translate("Ship objects can only be created on top of hull geometry (any object selected).") App.Console.PrintError(msg) - msg = Translator.translate("Please create or download a ship hull geometry before using this tool\n") + msg = Translator.translate("Please create or load a ship hull geometry before using this tool.") App.Console.PrintError(msg) return True - self.faces = [] + self.solids = [] for i in range(0, len(selObjs)): - faces = Geometry.getFaces(selObjs[i]) - for j in range(0, len(faces)): - self.faces.append(faces[j]) - if not self.faces: - msg = Translator.translate("Ship objects can only be created on top of hull geometry (no face object selected).\n") + solids = self.getSolids(selObjs[i]) + for j in range(0, len(solids)): + self.solids.append(solids[j]) + if not self.solids: + msg = Translator.translate("Ship objects can only be created on top of hull geometry (no solid found at selected objects).\n") App.Console.PrintError(msg) - msg = Translator.translate("Please create or download a ship hull geometry before using this tool\n") + msg = Translator.translate("Please create or load a ship hull geometry before using this tool\n") App.Console.PrintError(msg) return True # Get bounds bounds = [0.0, 0.0, 0.0] - bbox = self.faces[0].BoundBox + bbox = self.solids[0].BoundBox minX = bbox.XMin maxX = bbox.XMax minY = bbox.YMin maxY = bbox.YMax minZ = bbox.ZMin maxZ = bbox.ZMax - for i in range(1,len(self.faces)): - bbox = self.faces[i].BoundBox + for i in range(1,len(self.solids)): + bbox = self.solids[i].BoundBox if minX > bbox.XMin: minX = bbox.XMin if maxX < bbox.XMax: @@ -170,7 +165,7 @@ class TaskPanel: self.form.beam.setMaximum(2.0*bounds[1]) self.form.beam.setMinimum(0.001) self.form.beam.setValue(2.0*bounds[1]) - self.B = 2.0*bounds[1] + self.B = bounds[1] self.form.draft.setMaximum(bounds[2]) self.form.draft.setMinimum(0.001) self.form.draft.setValue(0.5*bounds[2]) @@ -186,8 +181,6 @@ class TaskPanel: self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) self.form.findChild(QtGui.QLabel, "DraftLabel").setText(Translator.translate("Draft")) - self.form.findChild(QtGui.QLabel, "NSectionsLabel").setText(Translator.translate("Number of sections")) - self.form.findChild(QtGui.QLabel, "NPointsLabel").setText(Translator.translate("Points per section")) def onData(self, value): """ Method called when ship data is changed. @@ -199,16 +192,26 @@ class TaskPanel: self.T = self.form.draft.value() self.preview.update(self.L, self.B, self.T) - def onDiscretization(self, value): - """ Method called when discretization data is changed. - Annotations must be showed. - @param value Changed value. - """ - pass - - def close(self): - """ Destroy all dependant objects + def getSolids(self, obj): + """ Returns object solids (list of them) + @param obj Object to extract solids. + @return Solids. None if errors happens """ + if not obj: + return None + if obj.isDerivedFrom('Part::Feature'): + # get shape + shape = obj.Shape + if not shape: + return None + obj = shape + if not obj.isDerivedFrom('Part::TopoShape'): + return None + # get face + solids = obj.Solids + if not solids: + return None + return solids def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.ui b/src/Mod/Ship/shipCreateShip/TaskPanel.ui index 9642e1bd2..5cd6a79b6 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.ui +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.ui @@ -7,9 +7,15 @@ 0 0 260 - 514 + 316 + + + 0 + 316 + + Create new ship @@ -184,112 +190,6 @@ - - - - - 240 - 160 - - - - Qt::LeftToRight - - - Discretization - - - - - 0 - 20 - 241 - 101 - - - - - - - 10 - - - 0 - - - 10 - - - 0 - - - - - Number of sections - - - - - - - 50 - - - 500 - - - 50 - - - 50 - - - - - - - - - 10 - - - 0 - - - 10 - - - 0 - - - - - Points per section - - - - - - - 10 - - - 500 - - - 10 - - - 10 - - - - - - - - - From fdfefcd6bd1aeb0aa59c6629e31ad090e72dfb78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 8 Jun 2012 13:55:35 +0200 Subject: [PATCH 308/517] Moved example file to the new paradigm. --- src/Mod/Ship/Examples/s60.fcstd | Bin 31956 -> 59853 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/Mod/Ship/Examples/s60.fcstd b/src/Mod/Ship/Examples/s60.fcstd index 02bfe49325383585e76b1e9b93a9b608266f55f6..5316923de69fd0f1e093c31b87b0d48a9d62a1bb 100644 GIT binary patch literal 59853 zcmV)yK$5>uO9KQH000080O4)OKpK7%m0SV<0I>%E01N;C07P$Nb!}yCbS`*pY_(NQ zZ`wc*J%?X0^@U6AT^olG3nxmUNU3N`h1zSh*h6rOy{q*)#r^diV=yET6)J@T^3K?A zzTUj;->%XnJfY4LnT2iF;cdVyl5vtfhV8=4?Oyx#rqzFE+btMr#KGMVhB7Kr%*=bp z5n*AB3K*M{(~d;!rNk)&UFcisgoR)19?iLEB(E?NPW0Q#G zTQ{wX{zOZK+9a66Ko*$^t?SC(I7-MwilH@-X_b!!rc`viQz{5H-qx>9XNG*NFmNmeku%1Q2}(o^#a}vd=4IWT{xv- zqhyI+Xe#FhWeb@iQ>f@q%Mv3a^M{I5#Hof{EY}hHEMqoZB#M1piBv5yXL*-9^C&m* zDGA=k=cb0S@6EV}w$D3V+rNstw&?l7_Pe5UdCj}COCe5)JQg!to*SHMI}JNG)R<(R zycMIyVi)0mST)iKd@3@49=M&rzY4flvC2Efs%9r?^(!IxI{Qh4XjH(hRiL(RmVP3% z34#%=RH2D{wJ?0oXazWTEvQz#&o($aNGe2ZwdFbL3xHZb4h3l~RC}(iB%Le#GV; zv3W;qozS9-XFu+#HOu_yIyE(olkC@KKo|Y$@Lc-;-PP$rs7A_aifwO;>QuX%mXZbL zq<^8+IGveRuZ-{o$s2m^F}0#6-I8p3P2RNr0#Hi>1QY-O00;o#ZOA}L1#;AU;s5}` zHv#|+0000`VRCd+Xkl<=E@E3{R@{6$A9|IfB8TD)4%)cf9qfV>!+`O zdHBnx-~ILQ`~Up(`EUOBcR%p`g1`NPf8z)K_7DF5$3uMi^y$l|hyMPDhfkmX(trK- zZ(q)5|K`8{^Z)Yizx+S{>!;Vh^q>9hpMQDYzqa=4r^ip9UVnN0-Cy6n{`-G;`26YX zFR$Mo9-qHGef#|N>G9#QPrp2U`tD%MeQy2aA%fsX2%fpwK z$IqX?K0kkceC{Wnefisy4_+Vo-s_idFVByk9{PcoZ(p9C{lU}gx92Z?_nYs&{O*Up ze0}L2`tHNaQ$OC4m#<$Q-hTJjJN|tBdh}fVfB*aIHJ`3)Zj&Cb4X_2jZNOuHW> ze&+3ey3XfUfAaa4r{C|+*YoN7>z}Ki3%%|2+l3xKeSP}$)eCz3<>~49+ryV{53gTe zUfPJB@ynO~{FJE83d~S=*GxpWTuU{U&wb4&6{mGZdPyg`wm(LHcFJIdF$FI+i zpPwIIzO-|FvyUD=e|h-&{PpYW!-WV z{&-*f`taJ1+3c_V^Lbx<^^#v6d$ex$={dpai;rI(9(tC?Z(lz@bVt7U$lHep1%5GfBO3Rm=utl{&~KbP&|EmYIh#Ky|$hE;`8h0 zzV!9srH^_r_t^XOjGyiNQ#bp~7kkhzug?z&=jX2vPu*Bw{QS%F>+3_p_VTr-?vH)( z>(}RAOzXcre*X6I^5W(6h|isj=a+}qhi`4%zWA-5>v^6ne&`>)o7Z1no<4U*yu+`r z-@YaXeewDE@yqkq&ppX&Ki$pyVn^)T!`G*W{-oFNZQJwu<+Xi%?e|`L{J#9@)5|Zt z%`ZwW!q+9yZRwj!Nzx2Zo-@X#2&kv7@<0mJ(+e_-7KR@*fdr`jEOZ(c*K7VPu zo*$for?#MPw88yRLf@(My*7kgJ|v)>g-@Rze`)Kz-iObxour4hzON;quRT;E%=Tul-+=@b&ALe(#H& zfByX33+^YL9|?8edrgl#J$AgG6aCKk6pVxWr8oQf@ci<4eyGnauO+I_ZP;TEb$;^kA<=sN_R=d)Wcs3q`SOsuc>4B`Ah(s*7dwX?hRAF9BzDx!_qy3{y_j}4P15%!UEP0bHR0;LGKarV zCkgS(LpRR&^hM&D0!i+l6PtA7^`701!`NHtiu+>v?yF6Cc1E*hM<5dP2fx=2wPk&= z^VADYzxToj=($4*G~sw@yLxT*=B3U4nu`7UN-jOyjng-6?seuLQ}-R5ZF;h_?{zkxzVz;1UY{Oc)Am$Iri^?) zF=^eEFQ$MxbKOij^5H36HJ$X-mgYTVdJ_28>x(_X^GlEN{PIM>P8sGPqMAqjo9s`bl4xhflKLswG+*Azx6gh0l%}BRd^3a4 z@lC~KND|;F_hdT-<|TgXtnOv^&7Sai*0VR4!rZ}pNVs_|t;`znntZc$8HygVP0jYq zR(*bW$x`&vQUY!Cc0C*2dG1;Am)QPZ56jzbJb%f&FasHr^Ua6HjAC-zRzLL5S@Um? z8Q!N2y=O$+bD3 zb_V*tUVRql>-jXv>HuVE*v^#5zxecP()5zjPXy-|{n9IWP9t>5e8UdSmzUo@&NWFd zeSS(V+uwaVY;Suh&k5Pf)A`UD%PHz^X^0Ns+o!XuJ#;4H+dk|Krt*8hHkpHa zZq}!5V+L{>@A3RVa-4kffIA{R%-M#0no3B`d}g`Nr@fEuQc8X)>7ulg;h6&nrs5B`D8SZ$~1F_x9=6?!s$Nk6mv*jh`Q5 zuXB}HyM5KCY08eIgZ-Ed+NZe<>5*CJ&gu2Deag$tu(d}I1qJ)A3#9!rL20G_c^=KD z9jVt$Sn4LTaz0H`+nHWE)6+@%?bE!?j3zJd;ruS0l3mZDbQ-cz=LPLk{%p6M?YXur zXQ+!jeVL1rT%XrAH!IQ3VD_3bfBQ7e_tNp~SKUYd^Y-a$);W)=3vv(6r)}&L4?bx~ zCA^+H^Xb=AMZeLj=UVL3RA*YWU+I-3CD(VeiK(@ICKsSTIlGfCZnvNEdz0ae$GKXc z<~BUfkfwAlIZc$lDJuUP)QPFp?=XZfuo3X$v1NnWNnG^1^zyIrL z0qO5!%;yQA9sPZr+M9Z}zT@>TKm0Y8EJXZqEO|xHKZ@(}l6vVG)NDX6k4JF=-J8Jf zU0m16yN&DKg>{8-w_)A8sIG|WHmdtRs7u&ygSvMyT{3eQ)4dDn$`9Oybnha%0-3vr z?p;8)Eqou)y^H4-8NZL`-i34D?92Ob?p-uT)^4J??}NGY<83haE|yE4Z(_Nh4CQ_@ zlKZ(p?kD58pA6%EGK%}TAnqq)xStH+elmjl$pG$Wk1^;%ybU$9<+qAd7H;i{jO=gakKFJIm^pwvc*u5W#$ zL{qlrJimNM|6kP4A}np%E%l``eOZTcr`PpgDz~Y}6Ze-pQa!tCWZ>eZD$T zs}urz{1Q*4jIZTwdHYf7OTGBK_}@g4L?(Gp&2E}QNH_jYU~f{a^*Zr_my@k0V{kj zFumpg%_9prud~?l<<}HEN`ilb5@g%Hx1D0YH20cIxhCRvh3UH7Crv9?a#mEo=bI? z=&$}&%Bk|`mAvbHwfX9@)f7rOUU}4|QM}q@7!&Zgt)VJSPy7IC7VAroI zN4m<1o_uE~vs|zYd&P5gy(KaGOtr1A_d?6Qoli?eKlJ8$qTX_XaZ->M%HdbU0T@Et z-Fr<0`g)nW&du_Cm4QffwL1u%j^9MihTKO^+ z-2=FsO6`6isi?Tok;$j{&7R*0!7Ip2rlg`{PtuNE9)m_1!zkO}P~8{VRAbGu)-Crc``M z^-hE`2$kNe|GT~yKozIB(vshPbc(+H0%FiO}-!Y7>5_jn$8tYo2-4Bf8Kd(AZh7YK;njKe&S|U#`>& z94V7-00@OH0M+ZoU0^KB2fJYyww8ZsbXH=bcrqr2_ zU8=I$Bf(M86JI}2N#`Cq!1*Q#b6zbx!_kV$_*n;-gKYEtvIdl2b1 zG24>=`IM}@{%$M3dl^r^6g%Wo^PIYo>Y>NDrr2`2(r-z_?{DGV5428^yV`RWx>#=F z01xAc=kcdme-J7L+-biG36slqylp>0F#ZGx@YXyn`al+?k{xOPq<#E7~s%cPC0rEfie+=oVg!+B^N_ z9&+rG9?=_D3FM>0%E&zYjURwQ1+Gn`)2DDePFZN5+`hDQhvmzU^dn?b2O@KtV*=)N zd7CL#F?WHU!u*e(p&!T+10N2{TZnk&PI??_zKG~MSLeGErP2wAkakvlFZeib64z*@a9t@EWjavHkDF@wZ#($e&*bE>;)`-BpNtejv?s zAX~Z9Y1kj`LOyqDl_tu(B{-9&u9~3$N-G#hLEQhsQLkWLg=y)O9gKACejz6)r&Yk6 z%KQ9*JYK($hEBKTpDD=0)t+AfY3{Ld!g2#YPz=BR0@HZb6=>uqC&M|6`5GVJ`=5BK zKk-z5=IZ~%Q~eLcQ{BLi{{F1nl8q_Xw6Wxui2SD01jsuT`hChyMyLFJmau4H82kZS zziU3pC;VvfJl(W1e1D$fO+N}$?FU!ZQUMVzUd!*kX;Jz7^3mD?lzbBjUWxJ3-tzmd zl|KC7y2Tk>+*~XU*_vp+Yh?N8o}q5L+e`+)xQOi?5US+gb=lu)E(aTx2V6Eemmzap zn&GC~rQGH1+Om;7YmU9l0C3+;15Dw<2Wz!%Lw%Y4>Y$K4rcOehMUu!EQQd`tWY;i^P2i${@FSUS$PtdTGJ~-Y+fagR$)- zZK<;26Ez);Sz71bW7=+)KBgBH>9nXMlw}03$NhbW((T%^ zB}qeJhkmKjh1KoOWq*f#yIrd1v$tF1R7}~yzuMKl>tp(0DT}Agw%l{4K|pwek-J@6 zYC~bVc&FE^I=oZ+4mWqZR#HQuy7N=fwYu-sDfL|g)CX$?dL0Cf79~5+Eq~t=b-VQC z7hN~-2Q|2qs=dz8_ia+QYwL*8-J+OXHLyVQzIEz@wW8&8)ViU(QTP0=o9g}?@Fao{ z6yFNeGelF#-#1u&wDv0jDo`#nuN<+p-+}nAN5a>`6Z9ivZWvtQg0f+N^@L`|7DSTkibf< z>70@tyrVi{-uHq9A^2#qZnJ76rF3#tsE&8Y!w=kTS1!pd53CDU&i=)e z>YHzAVnh^qoH?r5%Odh%9b1oGBezT~mM1D}p2JgmyK+#4{fFN$hA+qyvX=d$YhF#u zd+zu`GJaV=_^C$VR2G z^GK?}o$D732gnPySXrZM38r@Yebi=^E8y0GR#m)&P_aX~@fCiqX{U&8@VSo5}X)seKnLWU}WoUFj9Yh@q>UbUjcUNVa2&y!x`#KPk zQq%8xW&ahK=|7T~e%Dd^ugFWkV@~?{wDcdyO8@;y=|7N@e%G)2^C{_fExbRUk$%_J z`|}Cuca6S3pO1b=iK;q_RnUX|3KpT59FP1TDX5Q?feI_&Nq$TKbv&EY5xA% zobw+@Isbu-^WUFv{sZ~uKag(zBiZIZl5Bq0mHw~DHUE)R^Sj>le?_MGT|4`~BGLRu z^33mu$^JEI=0CH{f6|xzNniFSecAty=*#{u|MZ{!*Z=TO|M~GBW7NL>{r~)*|L1@H zkAMBo|KY#?r;8W;^I!h$fB)zI*I)l#E%c9nc^$#FzaMczM`RuC+8Ch!2Q<_F*}(Z{ z1LvO&oPRcO{@K9!X9MS-4V-^Aa2}!!OgoXA{Mo?yX9Fji2(OKhp+qZY)bz}FTh6SjpzQ5H-(zQYaIf`^=7~Ks!2{jVFqyG&9v}?zy z9^5KW4GMGk=Pe&F-_#DQ`Dgf!aXf*PV`Y`%--(Kgn@5<5W*2f=si zT9X<@i606FgG+s3XEp8!^O8150}X-IW(HsE1ABYOWfKm3Sl>|?pBRDaoe2Cr0&A@lcv<>-Z9RIveG}hKuPt;~ zshBu`EXUW^<^wwQCb8qiYh8zeI}e2unB2?-%Yy`khmTDnrY-z4+c~gv#A4n?cr&A- zfazjw{v)Aek0!eCcG7L9ub=?$g&&cUINoMFotaFAM z)oX{5-)$j0iE*_^2l34u%y;*b@gN8>YXzon1hx2{!7)=NEHwZ? z&6!iux!CF+&xkxT>-vG-?5-VU6o!~itGBz!1^stme9FMKr6tbt4e#isqJ})mt=0H( zwCPbfgDnQ{={$AoNH9ZPZZweP-SY-|rBiCUxt`o~9E3WDCGbp;GDm|V)X5Me@@k+p zDgyd2Vd{5|hA~bpP%0Lf>D(b+u|o82z4y9`lB4VL)KGkr9f4H*wHhTBd};bFWp)U2 z%mg$GNOS4cMQf(eX2BVu7Vfh|>h;<>eM!!SDIC5X?Ddxip_x{{e7G~Z+oZfO4!6FD~po-ao`O?YR9H4vuvrBjsZ6yEp&|&%YLD`OkehJ z-P3#uO;DQ&8BTp7YEKftgdw>b59l=$tgTP6@nE~*>+UywD78F7Y}1@tZgf&V*{`Hy z!h??j9t{qzKXW02Cu<~}jK&GW(8TQ29nT?3oQOL@w7TK6v2J+-baEbY**s7H&UvCq zQEwy#kmwjn$!v9Ar-4vVEf(hl&sppBZGz^xHe;285=fmi2Pfa^aQ3x!wrv}FdR@D- zm&wW?n7ww%U2YMkT(8P_)?NGX`CzNXP-EmLY`k6QTp{dbV0ZD3j9H(gHdEH|Aocwq zzO`;89iT7u*T#mwzcWJk^oQx2Pl!}-f$90kP5a#8%=_^Ya?r_LetiwGsB8~qnHYe3 zASlt6fXe9zJr1l?=m<|m7o;vdk)rPy=-2M89_s1oKJwPK;<1<)9+3hj1&(Bjt?RVf zgj)Vt!qbmlaa-mr9~eKa(Qj{FblRqS$%5=C?7er{)N-1ES~GZbLvu9tW24q2_@*xK z$7aEih~c2JxJCnWG)IAjP=uM9`=ZuK| zwB0ah!G((iFzj`-ghf+}Da5lg?NrZmURW<1n?c?LN!u)|Z>cqNjnlliGB@DX{JeDL z=mt&dol-2GqS6YAJWY?$me+tU6iTLA?RMvRYc=mxI0-YQm;aZ?jZHg;Cn-pG3zc|S zBg{s1aDoP2czW20Nets{+_lZM%j$dX8h-ge4Le2st2I0s{k8qKBuq4B<%ZY-J!MuW zYQ3qV)P6h>FHowH%3M=QuG>Eok2li}U;U`q-U21MKI7I_b1_e#gjGWLtWyj(zSaF= zpLp9j56BbFyVlu;<(w&{j`X*6KrphP_3QL)b?2vmEx)$3Nz+8H(6*O3?!Kh7x3x$~ zW}-GJlj|@FZm}r2z`S$b-X-kUr4suX`6tG8bIGV#O0FB>|*TBb%YHJ7b3R zZ9p~!ick4mKXsUb!vt>@!0dk$5m}tJ-1x$L>#f$Rrsux?BZLlTbs4>$CRKuFG2vgN z#NZfgNu2UF&cpYYwx`al$-LLrId49h*U$WqLexX17z`gqzF@U5C0_~+B8_&I7jzbc zlQq$#tt(Kd;lw|KP?Q2)>LC^AD!u-RF z)pS=k2|_+pc4^0Xfzrmxi*`Cbm+9v#8j(;ak81bmHulAt#dd9{glPpz1!4tCy`t_7 ziKWxRtJJ{BGey#K40<{uVMhj?bv&zkM)NBZt>nXuPs@9bE|C){aqt#i>j>;@_#5xT z36pw_Wx8Yn=(4kMxXVjO7{Tf+oLE6?X@^7j)Uja*#Yy}>bE%#6?(V1<#Fy<<60y0O zTu`&*7t@=)Ff+O^sqLAc+aI0*>M~!gmg&PPyD%f;ZE%3Tz|Cv$+=8Uec$YA{lIcCm zkCmp{yZ2zIA6&*eYgqc01G)3asF*p_hVZ2;P9+HW|SBQkp zA)P1ZeCFwzC~i=30wjw*Pu06F>B!Sc<(hwe1xTqly1>AR_VO5%%x`W35}lsnyl}%t zO|FnLA!;hhB0PEvZi9wcjoqg9JmlV);C)^+D!gW$8N*UCC-(C^#HMy`J<07-_K_ zh0druLdV2!Dh5Ww)1_$|`jOdVRA^oOuUBMM5-GJ)ib%Kbi7U%3Vf(_g)PXXlluxqR z@v0RvUS@2Z$VmD%=QzWj&EIN{n!v~j=!SOf!Wyq4^Oi400_BOOC_WAN3AX zMuzUnTzX}lkz)3oE^n(;&h^|JBw6;fj_`5IZK}>$rx8y*X^rbG@kRQ-8Mue`S!l$x zZ-lPV;9G9!gT~qHVS29nwcG&pInHgTwAHVX(cj(jy}HsLoJ%9`oast&rL&JkR+=y& zTCkIOLVk8EEh65`U;k1Veu_$~NTD?DbzOP#af4*!WhHUUZm|KwxsFMb`o;;1j2KS{ zv!=PdyRbwJ&gVon%_pa3ZRZgHSYF3t>y+`jbS6=+_0fWuIC9L)LO3`HjlaWfKM zH1`XN7+eoQg&toS6D#B7o$)-q@P241tHiRUrgw^oh`rAD%|^K*nr`3;N!F`q2Tdw0g^4Z~>vCXKFTUSY%9n1Jj=v?7}xx&Id z`MsF}jD!f?Qx_X(ESxIo((6IMC9{w!nqtTs=;w1VHiDtdFI>MGgjBRqOWC0l5}DL) zuy49ps@`HYg`rLumR;QO=zV1^6wf+o&Snu&@yo^-aWT@D$AaZ+Wo<`vpN-nd%zhT+ zX5Wpk>CFj<)FRT(G91awae30=4WjS1xn5E*0u{ktfloJ$xZuP?MJk&Cloy)QWvx8s zGVd~QditqCz4ZNg?<0L~0Jdmo-l>XAH#7dSrL9bNPnC7=blvnQi=WfW(ZgD>!jUSX zE73nRrp4&YI~1i`IzXj$ES5k_Po!BpWm^8lLR@`K=-jL;CtT2wBbcd2CT{Y{tVa=4 zZ(2;yPIFOpPNo$3z4`0O+4j0m&=ZLcF;h;u`Y+sU^8JOXW(h46GCd^uZ_A9In0%>{ znaaI`+|SR)qyEG=iC3?@BeJql?tg($DnrU|f-Mw8d1owm{@q@cS_NOqKzC_1TUIFK zI!3<>pDQ_RbyZlDqG^m2z{xF%0F?-lNDJHCcx5AAES8Ppl1)Is=AR#!iI9NpY+dCO zr97cI4^>HX!H|?6C#mu$Ps!?pQii*#$!_l`fa#d&}$?d7r}R zeRD#vjk)oauGx8j z*!w!mQ;3_zVkFm_Ta7{An3BGi{g{h~{=F?RvK$wBqJ6d=ykRnktU8}{@rc};ye_Vn zZT%)JSZSyhBXwSSQlFpF*K%0X(Py#AavbKO3F_p;LU}0tSPloD{pBndK$Yhu}L6X%#bNRH76ml7tSzs!$(Ub9VY@c8Xz-iHAdfrf8lozMdk{I zSfP*&Jwg(3d_>mUtdb%S8M(8ZMa-^mhLAGm6$};nN*k4b*?5YhWUTFP6fv6?*YcA2 z+1xqTHIkE{pd}EmFex>p8 z&!lXK26Li-n?Zp!nd7uzs0!$2E%30e{BJH&pY^sdpyr_;=N3q*YE|zcPZkiNa?Ly^ z$-Nw~+~b||G*)U+-JbtltYx*DHU*l>947k2LLJ21A4AX#%{W;D!$}O-Gs>@nG)Kvx z8#5M^VtLzJo!rxJc@5oa8t~Zuq!kaayX}vNdLg1gAuA|x!FR^p=FlVXE%KLBI}WL{ zW7j32TdhRg!W@1SnmB$>D5RiVih=WX<>tDzjzlSBuLMyoEyDb9-#OTMBlIHzDEhI*lpRVxz}$0&))0 z#3}tN5;FOyN`qu^8)P+t+!UjWlk^mn<;h*~wxL^SEf-DT$4Sn57YgdVysbvN)SD66 zDQvGUYwF@=QgH4%}Rm&fNUtqjqy`5M!jkl1jKDp+7)gwMgg>PS{M{bslZs1gi0KpPuXs1gvwlRkGnFo|kG3M~BUWxiZ2Cmtf?ds0crY4?)lAj@l z>?lhoaMUgC)$&qc9?sCNg+fE4N%$#5oR`MakmUv91E|_d>u%`p?tA=VS1csYiO)DY zn-@E2&G!`^WD_&8lIq^sd^6>*Jhar*35Hrplc&7h{tn99$df$g3|h5bGhQKX^U~4E)3jQ4ofdnxod$ zd(TQ)D{FN;4@Xy)5Sph0mOhpBG`*20eiiSP%uF^>d66^SmCgH9YEXJ-Z5Ix;ea0jj z653xUu;>$rLrme~|Huhv)LmJ5sMkYPtr~qad4gFU!UIp$%yOTRvtwOLubP#* z>QKs~7{#PEV6QDM%;=7dz(u$=XR*_a$5R!IjPa2bhcc`Vl%cwpmup1TCdnq(3Gad_ z$sn~Qfvd_8oC7V0a_nSvB$N)4c5i$b$4V?63cY zvy?%sE+l`;A?weK{2G;7@tDN4Pc`bsZTQUU-I)>Y zE#?PuO>>1rvK)vWS`jb>n7?TbkL)RA$`*s|P+y=hu(Qkw=4ZYG^H_DIhfamb>Lrcb zTVCQ8U;Cm;28Oc5n4EiH{!RBpk0`MA;*Dg=sBgBg>AtccCe5a+dirzW-Xy?MT04u) zE#y0!LTtF2WY4N$#%r1o3tnW%?kQ(ce^8zhM0sarEv9qC{d0g}E;l}};7hrY8Y?B|T)P;E zPhO=~0sui4R!4K`yT11oz zOgq;ACC;=ex3SDtD^N3Tnajnz3w|K?I$#SbZ=9DAn9?E;#e|6Oq$L0;n`<~E8UZeX{lLYg;L>oy*^{3U%B7K#a3S699Q0tJLNc%cZ(D83Z~m*X%1SuLZpkKQ z-V|lvsH|oO^Li!T^NUU$$S!8OPbm=0Wj3$eND*L%xYyAdYh{0+C(K#omA=J3iLqSf zDj2i22F<2Fz}!@?*q|_Z?4&iN$w`pJokJ%{oGUz> z_kmNK(5GE&w+zB*6YX#3OH()BxEK*U2gieIF^PW+MXNL86p*pDAd zbGRLu@se}^irY1X%l;E6CZoyaJyoFmGDG#Gk$S3mvgIG(Q6>AOwgyemtdLJ4|7k+t z-uHr^rCB84)KZTl45OirnJ9GmtfVrTrV;jQX}cj}jfXRYh;8DhT&)(_JgpW6 z@REI=q}h8c?*Z#vgVRzsTL#7`$2Oj*N>ml#i?`Xy6YdTg@pn`2p6F*e zMmqjvN2JL%;l2&>{(c=r%f(Xs9{6Q=^#w2)QR7ny=v(C2Ar{2X7aogDFmeKYm zgq}K3#%5y*QY0l`ul^qC+GH&OHym$najPLU%wkNJnWwNy5TqhMgE=|=r6v~&I0H$I z%lwTisjm)*b=>AF{$a8>`f2wgu?o>FQwEcYQaYE{H7`+2lV4Wq;=t4hkVh{t@2?ZW z5W$mAGKGi80GI&~D0OF*7ln)pEEUl!1Iz1&F*PXPq6;@wk0#m>mOjZj5 zd@<7kP4Fpsn(Hpb1^+C&V=?CyiLJ7l;?7kI8qhUkNo$@ErXN&*&5uos`yxrtJt;is z|5EI~_7vqY$+%#C?p;qg$@!|Mvv)A|JEU2A#yl+x40Wz7fxR^2hVmUuL5IjFW+=(* z%d&6|0?4&YC3SbIK~ihQpnmKP!&-9J$5QyL!r3qY*wl0Wn7W%>miWj1!4h{6ulLL& zfix(MpQ7)6r&Cq_X9~dhh*nQKW2?8 z9_8DX(%fRfzPd6F?6MwPtOrM3FRLXUUkKw|X@x7sS3I6x*gW-QryHL^^3382*r*lI zdatJ*)D33*#G4Yvv)k!Q(@c75ofunMjcbX`Qa9zRQ@aDkDLr;@OD%8)=Wi%i^uW@% zNy)0(kTeNuRyXfJlhL9dU^?J8sIH?-bQ>jxUA%N#O4(8htn;-44Y2x#ic7o6n5WnE zU7=-5{U*X1pNLm$0imGhy4@86+N)w8zwS-~XewVp|XiQRgb*IzF{4TMGVC2Z9Y^+Kx0|Qz; z0qJCjUpC1kHMMZZIB?LcWL6IF3|GVUT{JHrBjqu{1egN*)uuEgH1s8! zpq~>AHCKysN3qU{$ zb(ZmBA9OsZ5>Y<%%%Mn6HF;zxFdet#NaM~a)5x*FarRoqr9Z7lF2Pzie_Jt19I)X7 z#b=Okig=536!}$T9gI`n@_k5BNsZ2RaA|(Gq&Ih|myiPI02b)bUgB;j(+dm3O@s~8 zs9l6R(Kg~ndOfot%v)(~(*||SX+BaZIyLZ(TNEM_+_kPX~IS);u`&{)&_aA?i#m@NcnZ0ZKxeC{4Yw2Xd?wcJ>VHSI%nb0rkm_a|ZUrNfN7|)!n)nbgRWG339^RrLSQb@-%ut>0`mxiB&+s zwS~&3o*uMbJ=Cx_z5&*|wD|(yjNW+m@ABTbOL+v{zih@?T`ERpice)&#}#ToPQWX| zv0NSLZ457}?dElR3$9H#RjRwm)WTI?>hPMcML!nq9^@2zSRAQi*lo^rOudl$jE`>q zWp0EyJYGRsqIaT{ZVjqUItK)GQYxdR=We5xbjn>pPFYbC?7{!!CQgu}MVBAPnx)At z_ha3*LZuSIwfqmv2U!zPQm&WZuCEj-`o>snljp0y6A zj!t-`U%9KMmlBt2^)O7bB}V6Jmfb5?G059l-y99L5|6-?_7N^$eP<~y4yW$5O#nLr z19C_|dHN#o6XNvtL6yLG-nwK5i3Ws#QayR_B%SZ8BGB*9+KX}E1Pbuqx*<-C1B*s9 zvh~+}4`eC=)fRAqN+lknD*@Tq>~qBACIC$gE=*@_%f=qj>Buix>hr4cQ)@Pdp)k9~AQ285{~aKoKVv6u^w;NWV=mcXpWReaOWbt3kn`FtFq)T2z?sV(Ux z$cBT*{i>5vM!lr8W_KuRwz#bapORVSiVW>m#KDo`v|p{0s{Y(8ww5 z!au+ea5trP(|+`49;o^ZCRg`IjBpgLmV} zd4IjAB^{PWhUtfr;*>8nD6OcPX<}Z1`h|8YFzRi}R6)K?l_XGd_=YNXdMp*&3H^1u z^=^7kpl-1KoJ2{xGu<@noFY-sSJhf@v;^r=6-qg#84c+s>L8?is54DcTF;4)E)+ty z7OY_05WT#-0!@_R+`xpEGton}r5Xv+Cwsmr#FY-$iUq2y^=z?`x_@@WEGE9!o>nt@ zxuVQ0zLOJ2&ShSgcM^RnGpQwwf*K{^^G;q#1z2!|EM{99Cn#4UgD7$ z(AXEOZOt!P9(57%#C2)e04hM$znomkv?_4X?i(~L!A)H!aHl<3rU&$m12RUReP)KJ z*J)=iWO4VUPJGSPT2uxEAd(ix>s7yo(2@nW0UHG7dC)sWxGKN8?dR(^{Yf&CL$4Lv zRrZn@MR^f$&n>ns!WM&af$I+q0)!hQY6O!8f-N>FxW9`&G)Jr;E^n=oygSF@bK;u? zLA_KE8of|Qs^xe9&x&PFraLhQbnM0J70)f%;?%bzRv1bVnt^HL2c0EE{-^*W{5aVpY9!wPa9!j0ViXYCL{=IAS-?CIE4by| z09Ka;3TT6RGaIvu4`YjY0l@W!Mh%)QK{8ZROU+Q7uU)=eJ(6!a9-Rd!Y2L)Wh|x^3 zb1Jk<=4CB@f>oH3Pe{eg-LllwS&O&C$ZW%^)KM22;Uz+;1J=)PId;tuHl3{8M~b@m zg!7}Dmg*6`PtEs8`D5#dQ6rf(RtWF>b(UGzh0ia)NM2BeJn3%uATB$R1G^zE+0-yq za(&~P1{KEVf)rseMR_kk%>bISjO5bL)YQDX_<*vqMrE9HSPOZ3oKuV8Adb62zc=rc zT~%$BECV7CM_JusUBywsaf2TX=ky+ zn6Z=mf$v{<-AV+gR^H`WOFi~ z5GS$+XV(tdjta3tUV3GV3rLnE=#1o;EwCADnQ4{!T2IkU<1e0@^l3&wCz{2`B9inx z2@Gu~t}%3-Gno#M@?Ip15lc^D{!aH@@?dlTvL32{t0SJUX5Q7D7=$2`Qje#?E>-IA zZ0*_#VAs|baH1M0XbcUY|@LH!kBI28lFC!T%R<849xmich^0)j(@gMqJPM< z(ig<7zjALn+D8X+AcPH27su14ER_55t94W#P6RwNdJNVXE88{o3j!m_0*N+zB$SK(O%;rb=8skd=O1t`^sKSnOVA|WTCy~<=nml^ z1Tt9#gFB$&OLL3CjTY4aF;vGK1iAW7Ivc5^Lu0Cn(UD&vL?Slf!gWzPU25-_h z$P{N+=l2hDfgFgopU0XfCqz^rRN+6BS6I#*6S%i7#xlxca^2GuY6+akvs#AUu|y=W zFc1P(SC49t4B;u-2m%Dh`Tm$>Rsg|y(YN86r=_-IC8P(2NyArFKUJIloW#on&;P!{ zG0k)eC8sX!P09DcUg+OBT>#Au1#V5|078P7op%Loxsk2|AxuKRMbs~oakaCp?FDwy z;gcyV4OV(TM|I?x6&QBc%4H=NM1hj`r}8qSSjR#qnaFBVJwH_ZOUbWbB+rO5L5l0t z`z#g^_U5oU0Q=6%-|ejsP<(k5rkpTHwpJ)<cP79|o2#tI5%;w{dd zX^miASLaF?-^zU9UPvq9Q5EaZ0V94&?L!ir`fGovn(kOD;YphTnQ;U>ipDfC-*itK zbM4(C?cOJ>L2(8>sN)wRWHAxkH^j2su2^$Egmb7|qYQoF z%Q{D-A?;I8c@RGtRCyvbuiSDZOf8naf%@1XG9jGOK_E<5^W5rvuyoK*eQ#?kTj;eM zoT8)QuCoSEoM3ezXeS~`TyPVuntOT<@xzUkp$EiUw56CaQ$6?(F|Z!bo{7}uAVqSK zI$#BncZG{qO%u*Qy7K6t-?*7)aaB1AeYLE%$dwU_B16;u>|Xc4!~ju8qXAbf1cRI*MHB z$T>O$H^3N)kz}rSachyb?6oV8E*eoDhA&cYz-D#UCgf&dW49VbFyGjj!3zkGJK)J6fo~0 zvcGjoGv^(?!?|K^+!IfKqCBxvPq3}d96@YTsM3X>!Cz8qj@UkGPveIRH zH)K#*Tf<|=?~SF6!-r9+KguOJkxUoPOH}G81<-?UF$yc$Q^d%SO(Gd7P`P7VI&XoD z=0K&LL>Aq*rD&QmnL@L50dI_@whvXLb$%|65l@5lB0Ym$UVcd)YB*Ts>{Fc4YljY5 z^7?dLOC$qF$h#>oZtZwZd7b>ZH+nXu3~(V?h*O#YWX2E!`KAiKrJ7xYtKxC)tte*P zXM%EgrIQm8OABi?3(zsvqKd)7GyUk-*!k4v-=D@(GIoH;bSQ&cBlNK*3 z???d`v6LyL)m3INpzx=nPWK8|hP&u=$R00u)Tu&qyhP#XRSRC)$aOAo@poPJbS%R# zW_ks#w9`1`bRHujT<8*x9j~_{*pS1_KZ>=_G@dCN;Jgg$q zmLV}003wAr{*oTcvVvHN_@R7)EVXtoDw61mKL9n5WfWCN1)tC*BmvYSek7EFl9IFM zvZT@rl9Gik>b?rMJv3&8IhQK!B0n+Hk^n56yo#a;jtG$pbuCq(A)>1sKORs-7IV=1 zQQuU!LO_RXUbGB0MkZQe|hop$qLpGorMZ_@01D*TSOQtQTP73l0 z0WbyO2^83@Dk|yEjo7&t`1PTB=u!*4i@93oFULLH|VBRgDMl3 zjB-|SJ*(L^$qymh2m+;eu(+eQN*oT{jKP<2IcRuCYm1j^uM zD+Z$rcK+LjOi~-X@I#;TFf3z4x{5*T%0wLrX*Cr5(DE28KrcjJ3qN{X75bc4>;)%k z0?l1RGM$&w+)>2Ei3>nzEPKBe8M(3?ceIF8(W?ciB+;0R?erbcGh9^K2_yO<7wo;v zOgm*r#sT*^v8tZkkp2;C*;(xpNh#3ZVvk}N#jH+D)}R}m`sh5MWp%K4sn*hUv?Yr- ztI}F1Mb&ydY4R{rTT1SEDw@_xX)FiH4^qrrKC3`f?4eA7ni-o~uk`AnQWwbH3jc5} zvu4XSIhsljIz^`v)bD57BpnQ_I4;BZt2OWXqtn%2Y6xr4T9eoKMf!`; zz@10QfBf)68@Cqrl5Z#E(SDwy*5lQ0TvZ^E;UQ7Y|Ht#vV&q6lmvqm9%cURz@KdYc z)~60r#G-VqnN!hV#Sj%*v@BGZR?o9ob%Q`F6<`fxg7GD-NZuO;q(827TTTg~lw7PO z>x#ZiIH!%{pydThl1^a2s>jEZMoF#*4J7o6Jc{#Og#&|Z{`eehAS5(P3=2J51t_tE zgXrywJQRtcNxZyc!ZkR_tjMOSv!4rNh{uee?0!Wpz=RcN#C2JsqW?kngu+V^~AU)ocuG-YGm@_?m%2ut0mDfk5 zhxB4UK+CWI2T}9LW(K$@VXF=$j(($JleN!sqs$f5b7myq#wDol?RDrdAlNi5R6o4m zMjP8UmR=VGC?W4TG?8FE@ruq8-eNf4R!MPDZ+*m)d=T|?ajykyK6RfQpI6A-v??woR9 zjf>+s_eeTMvjz^Ai5dE1%|%!z-sb8^QZItzC0rzI-55mAxB$(L*jgz*;6x~-RYG>! zde$}pVc5mdh(KnP)Oxnc_FH-y);JTIako^BH5uz`IhCi_mCA(w(AFt0IAdsGY-Cq+u!IFCaxTozTFa z1F0<8+sU3`%Q&Hn={Q_o?cOJ2vkVK`s4+!dDoAI8gCkAmaTmJiSI$?2#y=ctMsg$+ z@^|UQPSDiXFmG*jK6mR+?Bd}&WXO(?XbC_zR-*jz<`*E2qP=pb(^k61Pc8pEKz z)^XP~rd*XvEBQ6E2>bzVF*2ZYRgFsed4M72>*Ya^H>FN}$)+u^h~z;d_(&_u zXl@YA_HwoMDp2Qi=_t}>VyOaYx(-GlS(#XH6PzfFDD9u6__;Mnz+#s^I1rX36x%R# zs5;4vG05b=FV5bYWxV`VS0FwOS+R7LYKd8x&Eq}{FRprYpu~$@m@Q5y`15ELGz%6N z>)w##p1OcnG>{=57<_n0vJFnq`^-eIEf%H=6H&ndMVypwDO>?HB|O&@kd{J&Uk)2z z#Hfzv(IVlMjKLE=L_+E#i@Omq9(pAg^|AKN6)~M$6$G*&c+n$hmpD$A z7J@Yo0|G16wp5ISkanC#o0_$tBXcK`19mvs-D}#2MhR+t0ZT6#MP%{vpnm7&_FrWS zkUvQAE`_zcmll$7x4kkMCBT**Vr zH#qe}CLgVsXd^>$3sB+P>2BhttE0o|}*1W!S&N)TNs1h^}8UlAZ zSxYV2nvq)1@sEmycYp<>Bcvy5Ylq=sTpa!5je-H^6Bx*XMrHwrMqwthd*Qlb)5&6ObrQ{MsMq8Q z5}sKD1bDP&M_cT*3sa*#u;d$(kS%5m$44yH4x_*d(Th+h_`>)yEfx_e%_4!MaK~{D&G@%`OKf(V1m&*USsK&0y>P?1I5!7>TnlNRa+H)6$dF(tO#q9 z7`#};0ZK~*BBzjNzG$U4ob*utQhdcfTMU~yLSZPNb)~2m$mH}&dlOq~pa3P0kgr0S zokk}j?3RT}Ag+J|9Vi}tCN!fl&uDE3sY)7oK*xb3Wu)3q5yKnmYn{TnERiZ6Pz=DU zE-M7!ouwHD`jJN~(|09G)*LZj6j0SSnz??7<^^H%=oPG$B2k_p6p<2IwN#};YYWP{ zOyTOZQs7)A=-h5cla0lKV3EFNYEkMIqd0QLbk1co=d?Th^7cIkkvjLixp0OP4Q78u zE2ye*)~(Ct0;@p)VcSE_p%~>PBWGAEt(@&4*X!DVR2y#5(NT|#;!uoPsHwn1Q(xhV z^s49@L;J3C!j-iy(RS+qIsr;B-T722ioMM}!|Xd#|nEVwD}RSCKo1Y$t;>0Yi!su0SURu1stgp`N;} z9kD{UYdm2}tl)WTjT-dz#SN=9gY6jarX34XdDh1O^q3p_#g=6A} zck+mnlMdsCnSdtJms<}xdOP-Zvm8F9y&={S3!S`7zPu!h%E;MT_ zR8g-KQ?^%EV+ICw-LsnvNG7&60Ul4)wEb0PLD{0IOv>wc!a~LoUtyEXY)!n@zAPRB z06$fh6IQn^xGv9D^?)449!^J&4l_$P+HsM*F3MA7Nrc*ww15P}!I^am`QPF=WUTB& z=SdEYJBOt4id72xdaoml?U>FLf|o?ZBuFsF?wm%sBuxvOl=xO=*|ZR9WL!#U#tg9# zM-3BJnZeqz@o8?^Sf<4)Im%MCy+u6bhbT-YEN6I_`Yy7yG7zirLa-mIX!(pxDHP4f zqGu&kD^*ZZewh6CywI}>^vJt)u!>b$Y}TilaR>uup4vDayqnO3@yt^CBM)|24J{7E zDu^jI19$51;1;-BQn85^{?wy+5ZlZBZUFCM72SwQd#A>SC+oQAK1UKsT!AC4GhLy^qp>16bGIZuWU zXu8|dW!{s=G*a(-k%~!^c#U-P%JFdSG>#emV!WvA`>a{(bcSpQ@p}5x1;`TzswBuK zQZaQy%}&`pMaYV_v+}LU!m#swrnx~!7d+o+_ISYzs~&cd#E~S`5uFQ&3W3Vi5FlyN z#p6dkygl?z`MR`(gpw~=T&a=3@ZIEHGM@4GKp)w?;<#O_P{W&+>2h-0flXz<64BdlUKmNSyOWYBT|dn zHVaftN=&V+Qh@7$bYsWNop=j2r1|;TKr9`C$pwP6918tW671Gut>XC4JRXTcb-{A+ z3r=!D!U$0oS6nZ9D{ECb!m=)i4(VBICWhW6gLzL08GE55@)Ch+=nGSFSG3#k!qoYW zBuf;HcV*GW)?(gGJh53EJbkbWD3~z-V{CYfzD^-a5J*Re|hYE`-*x?*YJv)&2 zL(y2At{`?AWBIK7B4>aS-8!mnJqpKxflW@9al%04sFmNRV|b~wnCb0Jf6a=(yy z@B!Et0Iaqanmf;KG}BCW&;Lyse(x~ zOOL5megbah)HYfSj=qMBk(q6Ads@m12aWvlZkv#?iE7@U+k3}r>}OulEFQO;C#S{( zrUJ2lN-`!;84eDr4>r8TDX$G^!+x=1-ym7)7E;P!UI$6GiHUn%$hlHQ7DL+t_`|Qi zfvSKOcp5T)7vGaF$njy6g6p+bw1#pvvDTn+E{VTk{>>(!{)cla#wF=ZnKZDAd@j6REI8XIhY{QA?BFF4m3?ZK2|kh@VJBC%4{N|FRj4 zw~Hs=5=;8Ij8Zv~%92@tY;@EyZ}0CKoP5T%6Cj&5@h+b*_6iyH@gje)RLNttoU~;Z z-^u7ei~ALyo$3!ZOU6>ohaekOaF{rFC^N~R#^8^)*A=ROqYQ`2Ria{8sqzrQ7fD3p{@9Ca}s=t%ql~qh* z(XI{sa?vRxTk4)wN0DSWj_=nBRWx1FDvO>jQQk9l_$Sl zTBySJPWOya@1pbqBmx2GNmOs{mlmu5OpQ@cRpF$vHL3YnQVUSv_NoOdS{(A{z;vZ& z7IA=OU=71D2vKwQtU>p+5Gm?z2H|O;Ss-N2JU97B@^{;`UKV&RvxyL$D}|hBWiSD) zVlW#wH@u}1K*FE&nVQ~7MMH>t(L)F3%iLYHXhj@_l|m=Qc!!1*T7zkOC69f7!#Xpx z0>UaTLOUQMP56?jpdYwT?yjl_K<-x)k+Symjc}p$)ey#jiQ90o=jYf5KYxVfR1L~QYc6|SC zM;|7L2bMMw=W6X2u4INc5daF|gS9q=CK`+_^?Y5IjxuvVrG^2#xo+{w#*w+MZucV? z>S0D-ZcNojmn~eum?7YDn@VJpjPACK1+I36_5QL2ESzJA4Uh;;nAT$YKu4i~3mJBM z%U{=&xYYW1-Y;R+TTP-7gA~%=uPtCt0rDhw z`T*j+H7%@(-2GLb`JTEERLqnqkG{Zps>RTtjzu~*?KsjCJtP%qMFGX8isg+v-cWVM?Kd#ZD=CYM&1in3VSFI7-kXr?NT5v z$wPpu&OpC0Z9aC=?zdG|Flibq`!51I)nypH=9Y*MD=*l9DoufY~yk zC$Tt7v*iCt^mTqpcCU`AzXkkBC+6w^y0X-YP*)jA+w~u4x&@Fzr zmWQl&+~f;13?dc8wov^>MF}`>J)1R;7+|M01bp~(1@tfKL_EljGi2_aTXZm7W*ZwD zuwmC+s(glGTgl9}&y@sPAbJbrl#Ro=PI3srbvBj|(k!D4i|IyrON&09K!5j9VAtLR;^lsV2TYsewN$7xW#y{vG^#94`z zUdW-vK$DN6AqBJ`^LAOim@d9Fz&T+iLR3jYxV6AKvK$Ft!m9K!Ap%}~_#Ib&VS@16m zkTkA|QHPDUU6Wl{dni8O+pB_qWyA_0VS9}D+EN5B8@Xek`H8IFZIn1gmB^%PqI)F{ z#}_ruIQskM2$h`?r>G{VPPJh}`HE9U*`d1@v+YMqDbuxMj|kzyaB=szH1@ z7Zs+A*Kr_Pls6|#k@pdSAV)tg^zR>am66hjn}zP!9a05hN>5;BSXvhe*au6Etx~{0 zERzQ~CZ08kejaJ5sN1Ec{pzAq-$!tAfvI#w$zzjkldbP=xG*K@1A*tVn(KFkDID*# ztybmZ^1pjl{kUrglr#~kUv1o3z-~Ut9Oe1_9ZN#w!z!MFu;tQS;lf-@%_s2L_qWVB zQR;^zJOiZPxj0jW1ynyP$ z%H=JVL*|UYHryPaGt~tc1@uE#tFZoxQ1+5sF?9& zSg&HTc461;*mknis~39TudP>J1=1)OJwt$?P7!v(b@EfKcS_k_6{<)DOjik@&(I-R zR>J_%C;6HC>lUi$xXiv{;NY6>;OhZZk_Por!M-~T_>BP|`EY9Zik;Si;-+e`9FUm% zwTFsjO+^Ye>52s_xZAS)tJohf0t5 z*YV_@)@C=ye{`F-I(>ceE&;%6Xv4t%+xzBf3MBp_0qx+JxIBQU&r5 z5%-?LTIFdM2q>QL8HA$bo4}=n*8MqL(R))g7?-3>N)IRWXx`9&$jDRh1BR|3bide) zMq?#aIZnR{?tp5x=*5;wxOWy-92quS=?3uiphm{KVT8`=avweM0p~!Mt^|L9Rg^Vx zae`?8WPfneG*8)))#z|co&0gh8uo2Gub`hFF3y$P(5Z2_U!5}Au1jy29j~ANX0NYS zch>$io#;M1NGPb}LHEageVT*bd*1)>P{@(lg6o5pfWoudh&a4*_yj;i@BQ|zHv9kx zQb%F0xl<UPOI~qQFi&CMtyPH9(5*er;PM5C zqaGJ7z&D~lyI)IVAZJ_Y|CG>J!?d0$%?3vyue@7ZsN#q52kOB%l>#$4VCPFFL(@*e z-rsWm$GEc19+&kzHI=p(3{pN>5#au5JIS^~(}$tK%UXy!`Z0bmqT~;rH615kuD4jH z#ao@S!cIO%HVXpggDs{j^w`osm}X9gJrFwFy{2{3MsFW=^yxYLCe)eCHK{-f8ZrPS zf?3|n(7fBFq7)_Wd>zC`zzF&$hPRu+Sgk|fcd70&&qQG{+?fa#t zNu{_N=|4!62Dd5Nq*6=kO1khPAFPFZN~vLO0N|a1ugnd@ZiLIglJA~%J@Om;?yM*^ zBgb0`4Ju6fUy1MT?40&`j5LICvsAA6DEV4oyU-4KhBw00Qm`+b^rjk)5c|Nsa1o6X zLh4|;=DU~E(gD8!&oue2QoR@j+Y(+Cb69R)&X)E{6D7r)yjZ=f%Z&mqtK6rnj+6A= zRo9}zF-k4((O`k*=cFck06hwFGB@vaEh-#-qXl7q%yl~M71wB7mHI<(o^?w%h`po> z_dCD$#3&n8s(EP?33s=f1(R=+BtvTO#v2UCWx8Ieic`~j|Db6I#eL1-idw4&%F@$s z`RgV`q?~S-qI4kpD$6pGy0NT1piiR}(=Dr2y}vAY_A>cuEjS`hol7C*R0zvPXlK4# z>x98Xn9eGHoU*yXn~iXlU0&RBzgSNM31n0B6}=Twx&!3Isb`b4Zm)}}7`GM3l(_&W zNC!Q_PX}^VfOw<-L1oZf@@uf~swwglwid=M*=Il2BL04_1Ss0Ty7ZcNMm9NY9=CU; zK0OTgYoBsBv0)f~ZIbmxNA38_mCO4<7u;UA0A=$TyEy;r+T{&l*5`}`=%ZWyT3Mnb z27*B*U}behm@}A)wbW;Re_06)pcFW)Owfg*g50uj6JC4$AFb_rI0we!2GxHKAIuy! zj`Zq>TV>vrmirBi=S`g6vQ9s;F|}Zx!~J!mDBe?I8_ekh_n~UQ4%Z3cP~Pc_Ljxvm z!qE&JiBj=sILNB3O7CY4VRy>W_!K>qn}wN4z7TeDR97wq@8ZopA0jVa1%?Cel4g+; zzl$)|0MPSarC4)A~PdgHKm2b5*6ZX2Iby`wY51|< z-#)J#D9=yJj|Ad1+?d1Bee2|&75{MY$}JleqF?KjV&E&WyO<1SMDK@-4d=r4rGk6W zo{fi2cah}V#*N=N7@`wiK8z6z^5tQyJIvGy6VY_JeYCb?+G&N>+z3i8QI3?nLGds3 zy*AkQrgJ3?BRlo;BCS7QHKfqe3qlY0@|$BQlOsSFeit{94v_hd@IQR-M4lvWM1>W-g!l<_amB^*kJ(x$QbzJhqS+v{%0za>7L>xgyA$v9zME zz9JKfy3IgGZx^$s=s(j2MjLD~l%dKs=ih91qJ6tq7@)bie`JWSZXkVsk`0+9 zQK$|7Zt6%yt}Ajd0WyQ0r>`;BmFh8;_fG;B-5nKAz4xo<+m3 zinrIT9}p4;&3&V6k`b|>T`YlWO!P;@!8}9{7S03OfdL#nIKVbnhzT|G7Yxqnk(DCT1>R;d5 z;f*+v1zeZe2TQquIOQCO#TCpNdb9Kvu6G9H-BP{(c^=x-$|dkgC09?T(EQvXC00DR zU5WunSsmMe#-r27pc4#?7S$|9g%6gFbIQ?$`n!-Lg=RXer2c!J0Wsc-qgo1T;;xB) zFQq(}MH$npMVxzoO+ktrQ?ewf_Qo%(_M#q&5!U?6@2_c-((MMAZ^#{Tn#;B0q-4*z z*5iS>TZ*v*yU?K^$WfY8IHne~>u^o;y?_6p8 zEvs*EGtm3thkyUDWUl?NlWmp$i8rK}&dx)$S&8F*txyoln;{9t7@Pryf|ON0@j03g zaeG}r0O=0o2ij*Y_AMY8;2Atg@b|ZCV`j)?A}j!)+St(rDZSd%vbh}_)pffzSha`3 zo~GA2XXvce_qv|w4B7{RT#reoLl9*^p3>o|-i)&_9g<=kzwqsKn-mF#SGC0Z&{cBQ zwu4C-j>ApJxLvCizId)|vj%z1)muA2T>%oRS4GAT)|z(uJRb#Ao!j=YvrM0FrC2TpV&R|Y+r)k%Shqps?W5vTfsN^0Vq`Dm>fN8=bD z$?YLm6R?;}s+v>s>3%5(45jNrMuYE9TTF&Q>xQ|$IaePY1*u)GV2RE#VPE7XNw-%0 zd@$`49~`4q0AzG^t#?>2OJJy<_GS=|k3<9WmQIF^>jS}KyO2d;d`TuZo#x)|ody&2 z53IUv@|l0KYzK;Jl}bwJPN8oI2`=UB%x+)?7Ymi%zjA`z(#=`mf36CWT2=bfeZQi7 zmLAdtq*1%j1<-zPO4g1Jn8$i48eL>P=sB5T+b{0<;I`#ADiMv)TevaTW^L%$pnu$G0$1ay>+>rK`6F_54 zHq{AQtv67paqr}aRIr$1P{@wUXmyz(d>POY23Y*2k+a&o&?aR=QF zMQ{z&Fw6>N0AfTCbZ)@SS`lu3SRO{H5secQPe*Y$cWt!Bw|%g7a$UU`y7xL4M!fav zir11b6|noYbcPe_Ag^Gx16iDaNkhUy8zJ-b-8~~)-L#esCQaLI>X5ag&DU_Rxg~pX zyVl4mV^+Xg@((lXi&N&Nt&D0^p4(e9D>%jO&Su0QC^Gz{lYcSW6D$9g_2R?oh@x+ z%os|2Zs5<|$|4kml{l=_*B~RUH1^<7E29azeW}$^QoxBTe1?|ixhv3H_)X+@^Rn*W ziw1h5Y|;$|E?hH5#6&c`1hIMUw^uDhIb_b5xp5O6Cm6YaT!?0+j?@QB6*sm1A{Rud zc6>8(Da_U|aie3Bqf-3E!`h~Yhe^R6kI*<_Aj=MbF4x;*qvKz+Fq+hof>(6_hlS3` z#0#?jZYdj$$3B5IZEXXc`Rtp==vnjHmymdWSn;0cCSwEDb!=?e6{9$GuIo+TA9P0q zvON55UVNsY!f8MlGU>A*WBKp~dUD6j5w^LD~% znN)^}-Asw)snlNpvgKY>P=O$RosuZ*o?)EwdREZ)Su`C z^|US^b9N4E#ydT}_V=M*#cP0ZC)YF~HpC^}j&14Ac8qANM5B|Nk4qcQd>BLlbdljl z-gST3A+#_zN|1?qXRwwS^ zuo!PYT-pf(@048LuGEL8tpoBE7@2Z7uN8&-4?j_sNlzDbMxY-BO=J0sVZ|NC&Y9xNck zVSujoRRE?0j1Nh>U$M!1*JiQFWpxnX0%2E7wFmj!yXJNDq{g8oJ{hJD zo|tIs+SWtUwNC(yPm8Ol{TW@*?b<~rDERsgaKdQ|!DG~Iqzf=Bry)LAYXXV(8`Fx@ z?dN2et%nyLz8yQ;?b?m;>s3H?nV2)#HW9p^q4xIvKe(>wWP=gCNg&!CXQVaw(L#k7 z_3`!gx@+!JM(`hcdWAM7Z+f3I#=fP&prsY=uS$$85vZU|=oGIFrH zCoMqHT3;q)6Bt(3=W~?LRRRK6mz%j;dVpS#s0pmzt>byS-{ge(MpS>l())z_S-bCX zI52hNgOIDq(|oTfJgN93|BWwX9-@AT6QAJEYL|`rDkF1u(T!^?h(U-Tw(X3}U&k6O z-7mGD<9xT&;2%@Y)7{#|l*g_B1ww~;b1d#fNq~}DZ$b^Xe#3=!-E@utMw*Rz4R_ZS zpwJQ8b1*G}UAzS-hKu025M13a);ntqDd_#G%WrTkqXvq{bRK4KZZC}26Xr_aC@klh z>NhfC(}4w~sy833)rOJ|Gf;g)D6X}$fW2L`9rw~`{>l1@iNxV<~Mo0R^69oQsz?VTGNXkg>E zdCee$TVaX{-f??fouk5hvjMS8yhS(^S8qol5);+^T71BwvXVa?cNU!i0?*_<<3vIo z_tDxsYcoXkGw@EfmP4|+;yj&?4&WvqQr&0zdQUf_iIxEts=dcP_`ybNUPqZg_8t5 zWv@{Ls{78vIAxH`m%&;I!WC+yNaU<#`_iEwUs)|d*JqF!ux1)M7jhG}Axn7XXgNQ+ zvdK2<5fG}J0XVRT`NL0y}~htvLoElCq&PM^$Tbol7X2QmQeu>SEK ziFFJsB(N>dPYYA-)?ZGawDvTIXKyE)+oG+PH-PEU4#<{ZC0Z7PrQ)TGA zulKiI5e4ECXkSJ0#H}@F zViSlr?&s(}TlM?31Gp<9;Jv9)DAsfw!cCdD6Wntct~% zze?8ct}9AW4&`Qpot$AUa&a3!qC-Y<>GqxrQ`m#e8SVSV-w0DWN=DEorriKKs=MbE zrex)jnj&vJ94Do7MTT8exJ#}aRHv|<90!7zbm_h;YFXf|emkLv` z!6I%_fDmZTYnSy$em*Ge{blJfH1*oR!0z7WJoaPoJ?oY}QOY|BUX%hVRETfPEeQOt zQA+-yN_R2*{XG*q-OnkX&6OX!`yve`)FKeM$-4V)FT5xPC5Aaka^G(ePCsQvn5x?c zVo?o-x3O_ch(lJH-gVJQDSQ_A+`rrfDcUztX(yDw4%93{WK_H#V+?O^`2;E8JbB-; z0&jtpju3TfnfUvqi&0jSzQ!S4fu!+B658e6KG1AcU|76Pte!_4^jCO;(%giz<-YF) zV`UU&OHNPuJ3imRR${*TsTSKl1S!bTIE zEY%O%N})m{x~x^l z{{EI5d17v&aV5BLdZW{gW|ZU6MGImY#;sroQb5?Ts;l;&wE?I$j8Cq>c$p8^0&~Iq znxkPlxV2nb!#_4Z>sLqYceZw=6mvSvjMd$Es zWk0wws1`J|VXg%Y2PBpu9lx~-4IcK7b{f-Eo06ReoXlp=Hv!>aYnFmOwvqd1*5qA! z8#yxw(8;fNe3<@CFVjfzt8D$w-4-ikuF^S`t$0TV!P8qGzm>kcUj9k)y>ohp)l!Ht zFJtVZrv1n5aHy*78p(SoN{;NZu)GLLBV$+NYzKg%_8gI#?^8s$k>!2USlU zp5K+4Gs@VA8>NI#k9{~s>MGt2%{nOdRYhqOc_U4l_!JrfALXWXD(hU?R% zs}0EpcRHVn`io5SNi+ZfyS{x|=2}_;XYlzngV9f83C&QzfByRE#w+$mZGlc6-%Vke z*ITrR1Y2?N`cxBygrDZN^NJE4ZR7aB3-8x)eLgMKZ&VW`{PpI`xfrQuEV-$=mvs9y zGu_FM%NW#%#H#0FUodS==i}R_Mj~rGGaBN0IW9n9m>{YT_B@(T11KQi$jXd;*r#a- zcnJnRp})?@K1HV2&G0VI12Yn1&V!{pQ1Q1RD>Z=ZH%)Gl(; zHT0gtB%1~}~ z?Nfc6{ft?1>j&J?g|k!=F#%|Ze)z7QzWytHg3||m^U*1bhs#Yk85O6Oo%mUvQs_)#^+2AJP`Pg4e!b=q=@(oU@b~j!=Sd;=%-(K{B{lhjr`O9w zh&NR>wXo$_^EWe)@AbR8|8DE$i;cOEAi!?7t;d95-Y@uAI`BsiPw0)u>D&NqBoA=Y zokWusU=}(NKVFZyaKO@$AaX%51g8ho7)-4`t*9St{(*Z4qcuyN+6|K1;G6KVX5oCW z`Fr_tL1o%hxxfNC*4CRwpc~3;rF6#+uK!xRl?#xLD>}7XTYm~?^knYduV?E#B4;-5WlTAg?y|4LqNR0&bZgAPycYex_QA1)X7tV6=>D<7rE7!?u2+11w9%S(# zAl+Cbuqba)=1G9mXHspUY#T(_B9BYcmo!c0PB>V@jp={Sc=xeDof5mImwUIUE zU#~CghwC+uY#5rFX-+yZC~Ie|lEJWWUq4tM4GY38JUMN4J3ckE`~)8gJX;Z?l>a=;37s} z8mEGSzAU}moc+JCz90tJ1(z8J=n(+`8$^aEIUaww1NBTw55le(8&PmX0#H2rXk)K_ zq)D*5tdfJ3y!2bCvoyg0$Z>Afwtsm2FatR&z5R@>eu-pQxz?fLw3~VM<%c(b-mK%U zR){oTf|(m6Fg1@9&EVfyufS(QvG5l{&kp8rXPz{j>*W8DE*#QXf6NNX`Xn?~(pMSUm z+TY2F45u-Cgb2%{fo~Q0@^HRMA$_PxN9V6Rrv%vF-4&)2lwaOJN?*_O|5em+S(d8g>U;rk1GeDU z5*D_E48m~#jOU#@GAlFoXOV@CD>7E>ZZ)$R4Qp9e2LI8GQ;OUK$+#MF6PC(3xHrH) zZ>5R_SwBrasuX#n>2%2(k2AP>YLrf%vYUI9Rb@m%flX>`$7PZl=!iF>UAnNFU8m@x zUw}#nWCQ79IBjIgM@XmJ*vC^aT>qtBA_okGSn!?m4X-pr)5ri&{Zysm0zfGYeH?Sxx9<>2l#~j;g5a| zYz-Yy6qI|VAHs&fcdE<@vQJtiRPd@A02q6fjovm4U#KIfRMeGMCkU8V|5Ew9(e-t3 z{ZxYPGBrsQmk=H?y8JNfEG#1|Ve%qz5AE)I8+>whO81LmG2H~*sv%Mb-7%V#FZ(}G zJCLYjE|Q^JB{4$5B98rH5@rj6X#TB|v(>A5tH!e+RYboc-whU7By=xj*->RM^yya2 z-Vvev6?zOtPT9BSUbv3XxI2<9Yz*ynTKYuG{32h&%`#MQ9tFLNor4L?^Bo`sI!4q| zE%t`yTJ|E_A^f7ei}WX{D$Lq$Xj7agbC%<#RZ5ch{Hr`cF;i^n{dj)u0PF{yzm z!S@|FA4h=PlF?;EOHgLGZ?hMcMFDNvy|x?ejtNxLVCG7no@BtkfOv!q%!>ZnItlUw z!q9y~*$Yoxk{h`DCn(8)7^;Cv)D0G4s~bDAE4CZVo_jx2y<#PLl9IGth|}ziQiZ-{ z#9|C*M}oD(wz)^%UjGdf5Xg|IpsJI zChAM21_mgKx-12g^<$P1MY!Q$@ah^EtT#j1ooH?+HMBVEvZuwU#2jcNEamo_$cyR8 zY|BIveg-Rs?93zh1KfEI#g?AzlOV`eThFaZnqD!-*LJAB*VY@yDEa2)UHY{89V+ki zCHr86wc2RoOFyH*LT#CpG0{e$Ix`R=ir75EdLSOVquh#r-Wv7#=Iz3o<{1$4 zeh3uL4P1oN=&dy_NI-eQoxAfrtR|G1#M!vf(sjr`tZceQjdp~$t?w(4iEl^Q8NbCr zh|7NM&X+Bbdf)OFE8@W33PJkcA3)8)kZrUGL|G2Rk2a0bzz^F(tfZV}8@(pgY9MDF z%!IemFw41hp=Jc$Cah0ru3%JHf1?4LK%)tnKc5?=N`MLaE8^H-NfPl%`7p%$DvkA; z?9m8vn{&2$mlklXw2<2#1Gh$_{cW3C6DQ$sA4idIbQuc|RqQwSx%BhG z5oiM5Q7nkq3)?oK6mDDFaFunXLn#6&e5 z&DJk&`_LB1NLzSuccjjb0^yXWi+iJYNNJE#kc_kGI(p;V2cTHfCFp%@+HDdbnra|F zM#QwyunG3q>w$LbHOjXC)?d?j>`PLv)VkP?vNm^a!tx;%UHD1vBDWWyr8rKO*Yg!^ zmtSI`cL&jozWIz^tB0bb%A`QVXdQ)p3ihL1L)x#l#B8a1W1BlF+Nt9dg=H$~CX96; zE%?BZ#=G5BT6o*zt%bckEAU2>?gCm08gjFZI-+i7Mqk@R4Zf_7m)7|X9F5c)K-yg5 zk$Bk#Kw>8srcV-B;w?+vU@m^44^{j^METh#*D zBr(0ARs*a7Aq*;Pdl|;!WL%OVG8R&AEJ$fYNVLupEkZl4xC3kmHZ=bIOj@u@??3n; z+iZ+oys*XM@uZrKRlrcZSUk;~>cW@>FVa}yy|VCme90^}^J#!WmGAcuthQ8kl%Gy~ zXPWx7in!oX4uPq`v0DtPL0CMtN2>;{UBH$5*_>BOS%L?=YH(u}2~(3U8|WIF<}`U( zjcJNsmdk=1cu4ZF$-C#}@+F1?1*C>sEGJ3;x1*0D{WW%(MC~;2%x$)6E0YFeN5~b> zHznI|775s`ot37+uQu7e>BGE8Ko$9EZgg~*L!d)D@5S;m7u=-9Ev^Mp=eGSJx`=`gC)9kBkz?QXYAq(S!3( z2mDESZ0XFdOfBb%ln0zx0=(ULnPCr1hW&todEMVVL;bE0#2&IDOgv3wKgbHTTk>{j z2m6e+G4+nr9~(@(N`aQbz%k$<-RPU9R<-cUSZOX27b9yZ>gU4y@X{caC~nmIDWkf@ z&Rh-vQ=5j{24hRGD733z2uu?g5|!8sBwR_$G8nxQwN068p`>1x^hj8w|M=Xve9)mF zqN5akP(V2p8=pPpwsD{TOe)6@`>ll`}(*+i)Pw=F6F`5+9qeB5=3vX zl!F8aUX(4TOH+bfHelvU!Y}37d1TuZKIPhDEYleLsbu?=-I zlH7eU0eMm1)28a$DxNBrNnBGP5xE&gdAQO81i=gVt|3 z_z#HhB|Q6nXpqmw)jI<=Sup_$HDSK)TWEwVP2qD1zjwBbM_7l7U~Ll`u%T#Z>?Kj9 zyCWN|XqkbOeEW><>yz;8)fBpNO*B-kiddAKZd*~C!VYKh-VBVk4x#lf-N~Ir`w{%7 z^-)f~%UFd?9Rx=)uL6-?PkFUuXOFgjc5u^!^PBo0dqNckGBUftHh$n9RSuHg_o*a1 zK)c)D)P)C4GFa`(J0ZQY$gNLh8!v>~=E@=XNp&a?gaR_f8og)RpQL|lVcv&^a@$^{ zsGs@Olj-Q*U^$>eU!b^)LZJ|LBRSUI4+-RTwW;$oe3VHS z?qYLS4c_0_g|;ZNE?~eWW>B14vbhPno$hP!{!nttz~NU{6Tzo?WFxQ zcooyJDt+gV)Z{({myF&25k2PfqBMD)ChpmHSAwZcQz(cgQTS5xZ+Mi=eJ_yBuHv9?3Ym zo=<)!`{SU!SI9$V*Tu)AiUG5x{7@RQA0V1Y@<0%-18RQp7TS;0%B_Q?H6WciSlDfg z5%sNLzFWBa;{|WY*-*t%YGBw@GiUMqk{aGkdXf7*869c|%=rShr@kdHMG0S}Vdt*5 zwY0`%@CszWYX}(3O^oq*i;E(kKd+Z>``-WZ7%wcw^SfX>zEHhe%3ZMBY>AbocN`lp;tgFyjFDLX_N?i2I zePk1eVHh=jf<#ZKs-A<{m_f$^OTVc}qP3?~xNp&wxeSA2ZFkwsN0unbpAVJg;l4% zt{nRNkR#c zZEY{Uu})|~@R9?Y$K^HWhC$+IQTSN9=GkdH0>JO5*H>n=hp1QON$2_Uns9=4ECr-{ z;S@As8i-5nGFLhdkF3rlEaWF8HCc4Hl(y6XjKCAZNOVf5U?>sYXdR$^ykus19~v#K z^`V_Uyt`VPBQ};tf^XF%*%>Yv+wtw(*b_Y#$&Q+An00)L{T$BFqsu3h&~CItZ^w2x zZY{+pv03`6+Ox_@z`?c@Lm7PS4Jp+cos2C>&UiYT4P`dladsk;d5S1)uu`;hSnQ#& zwx8*lh#8{F#tO~<_=pJw=8 ztf0Cz?Iwe4fRrdUx<#wfYVp2RiakourES63!eFmYTBEDG3W1>PifJ@&ORCIJ@wLHv z=9&2yhcM^dSfDkQOCgBLLE&!pT%Kkh57A(aL_ln?bY8x+?B z?UB0s0Q^3*c9j;lxj$JA==s_JYPx$l=Ams07*AFOWN4D$tfS|tkrGq7!JFr?+H|z{ z)tbaYTC)|lW2>P{FV+YwC}!K5en#)G7d7o&0Uuv-pT2;u*ZxNkWX?wB))}$1x9hpK zEp&@bi)kzKI^W=gdl*L}dx~~Y9-$VrosmOR8Py_mtH7$_07REZ8%lM)uAG*`SL;R< z6c=A5k7~wVd0CD5t<8*6l>yjk_hKgPVBJrjtVShl;ZwH03vkq$Wi`H^p8>F4=f?3+ zrP4{p78I+^0jGdPsCe7LjRm-(6u)rjwm}|)fNr2t)Ca2qZ*Yy`>)2b>vKkOg%ILH> zTOHgX_P6#flmmp`#_pqvLEsIJD^Xe#=1YlApP=t0kWh{Vk^^1pd+lEA)Oj#$dw%j7 zRY{T)grX~7ZHmBrLs9SDUEP})^VYPM)M78HbR{;V#dp`+r`>xK+=iUWd4eN19c+It`JZ#J%s;9=WYI=OBQM82Y%CJWTHVRTjo z&f2+8$^AT&TngTss>a5z#lhU3E2g@p%??jXNPqM~SL6U(9%&bGkSbd{b7UU+g7Ukk zXQSSzy={l=_cArxO+*%k=`+?E4OP7#gUnpZMpHzX#(KQ%XB&j#KF@O^sMpj(iW8xU zZ}<0dB-21NbvN_*6Bru{UCX!v+H)#HblaC(^)FxWjU!&40*4n>AwAg+} z>RiVPznP*;d&w5a;!ns%@KIGx9UHtW84C9J<~Vg~Xfd)x*lgDWCaWPG6(CUW-Zx6w ziU77lkzy#V@L)2wD(I63jH*uT&208%?YIZtcBKx-6I0D>Q^(lnm1tbSezxnlnyQ(1Q@d`7k{i zYfZF8NjU1VFl)W7)c6-6q<@Xk@>5Dvu}@8ySo4i$AH@1q z52fz}Ew?wegGmAQfEX%m>GUG>S$y61UQ5tvMfu7EqEYHbfOMM`wQWmioQ;rrsaW{P z^pCg03okaqzCa;rWoj5AiA8Xi&zLa#ONy{LG@SG~i;+$1RY$J9B`HU;l;hFcEScF> zm-(nd`x=ryGFYjTR3veW#4T{R-#G_fMkB3kW-lN0Xj_?fI$8IvHM*QJ?GY*s4zZ>7 zy=h#(>ynx6ol(2?%n#lqhoObl4$PUEv)(!sCDhl#^2u7LaP25Mm2e!n_6zIG41Vn&w3V zL;IPc4cr16n^^NJkJ;Q!K3spn{h{mCn-5|}=m ztr6=kT@MTD#Biy+J(Nc03#m|d zgMlRQ!x)PDXyr000dPip$AxN$A@-}>P7bbaiAex88gF9R^qyS>nD1B0y?3Ju9n~I^% zo~&UzKAGki3-{%$D{g!-a25@zmdJm(kl5mb^Ef78XKH*3k{Qje;G22d zU00d8vS1oFb%J=M5`$JrT6BNqF!HLJC>nNK-IvR7b=u?XZ#}?J9%NRo$KUpU?+U1t zLhANe7^0{Cvwl|Vy*(dJ&cs?Svo%9$iIya1ovxAdqf{x| z*!Et57A}sh#kP34Ox`E8>G7v}r*Hw5~0~7j(0Db5wI+Bh?}GF3Ilh zG1@+KK~9E%u}iJs-N+Kgl@{PIl-CSh+eDjnhp3*=9gxEApeCUDz<%bODkc<0imRKG z25%AJm4uAf_7&KQ!wDhSPndjM{<2UX+zaLkyVdi`&0;{rJHMD(ZOEa#7#9#ZG>yH> zAKJ?YDkXHZv6idCoGtf~2$ZRKek?Dnt7o8#P03NE>AZ2YIBVzM& z-{X*CaCq)pmC0i1b%9wPAH(6(n_jgETyPUaxOTK0qNp+psYR1f-BicaDFUP1yr4lv z``g;&+fY$GaK8Luvj@@T`X{O*0Frw>gfu5UY2 zu-849a6Wy$;IKkZV+Gr!R!@QM8n{kEz*Vv=)vQv56>AVh?k<_6sj$P>uy= zj&p+rX*zy&%Bnx4*uQ&F+{x$RvKEVQF{AA3$k8AI`Gk z3ppBWM=|*oKw*@3-xA3NOFVew+IZ0{FMbd8&5F9Tsl)@I8dp-`^LScxazx*Ir4j$T zFs)x$L0@`D+y!Ogpq=-eHPQPUOmYc_2F`k~=Sdu37Jva^M~;-up*;H~3z?5fS2iPc zi&^2tfke)%5oOsIyv1i?5@!&QSGkqrvE_)RhDT^33dH07txBG$|Q-y)+ zY-%b(;iM(Zh)VV(EO}FHD(v)CSSVq^SQVZ*u(o3x?QiX#bq&?`pV1gO*s(Ad9(p?= zO&|r17X3E<5|%A-c&1jRJsU1J(hQ+K3}5L)=gZ!z%@+4zf8rPqf}pcRXDQdeTS`bTG%887WsI)pG%aGcXv&GW6NtA9AHSLgY5wRXdgQz`@JC4GW*qOzB$r!qQF_`TdOkKJCc^a z(hIT;ha2IMq~~%Drc!`GfHMzqG6N+ZGQFE!M9q4^Ch=2X6V_?{fTgJ=j1Ut`lu*pgV(QJwPXy(}=;I)z%i z4QHEMrjKR?nB=n=5RiiYK4JZ*_d-Mix&N5Ss*OaB_P!T{($?Ko#d3liR*?9^Pqwm| zMDEdMa$C^$o_!q_O&QFzeeI<~Dk*{rG(way^~|Xf9lm0Z%ywtF{BiHL#9ojYxOZDK znUV)mrrQltiMZIIfBaCg%Zl!M+s2m6@5$XC*4jbJbT_dEU8hLhmOuQ-kNed7i#2`tO$~Ip{N&G*nHEZ9D1=pJe@`8 zaeF@P4N`-V++;9NIm`3_lFB!cc7`Z<-xhR)Ge*Oni}Gjj?2id`2(jf$8q1bZeiJvGhs{UM?&T$Jfr9 zbu)K&koh4|sxP?Al2i>?bn{|&B44|(2puQcMG_=XZ>e@flCf!lgsIv^s4|k-#zK)f zCP_xY-y6$FVgF%(vbA^hZ8@nbxQ|dMr1GU$@lkn+y{ z9w_Iw@@ruV?6zaOVdvzNYKYd*J21QtQ%f#!t5U(1q2oaUlv?+|DU5Q;D%EiAt7DN} zQ5F{Xs!G8Tq|LPp8B7I&diQoRjuV$_=s<6I5-ZF-LCC#1%xi9oTkoTFB7)nKRn*xL z{y@ZFo%DW8h=))Lyasv+e$A1sDntZ0WxqsJp2o^<#!^|P6D;1&eX79-{K`OoIk`?1 z5PJ?@th=#emZ!k!EZ*9|rV}=@7XlrpJ59k&oQ>{{t5s}faXiV_Ich(S8vQ92ZU-b* zRsxn*Tz7=_!ZSROqdk<_vXrY*%9v#Ty|Po2(W%v0BTa7XvWt>@{zs<@VCzr|$A?#j zFG<;2)(k3wNS2={zgVO=gVNaLD9mTXh+Fl_(sC3UPbhbbW$3pxc7J6PBoXSaQHoOF zRER?V!sPU5dfcj-7ED6}<->;stG^5dqBzMx(*F(Jqb}N#Nb5X2Ly0FyWAUIL!VFw2 z+CtU5Be{dhh=0P1(f(jZ#75h-W&yKAT9 zk_BJ6<;O_oKBaERD%O`d)?-lCdsj z@uzp$e8`x8V$rD(mT2sOgeaQ=fhD~G#q=#~plgu8lP{wzq}%PU6`!eFL>h?4RdxsR zDNW(w3f57EqH)IUMg|Q_z6gt7VDbc%Yua?{*ugMCSY4N48OqTwsAbsJ$`&9C_lk64 zRnGg^x@(In16Lf^B_65`ohHGPW@z&VD@PY-mXJkG_e>}XH@`eXi(DUcfv8NS02m07 z-cj7zaMDb;b5G|TzI;J;FAhLLOo8GcY&+`Z@CY*DEsYeKaY_ra}`6&^6sffSMmtIlCtiV_ko ztPixMGL69$yzs?9OP>xXh~&Z!(6U|1>8Bn z@Ldi>pFN!oZC_J4wj`Yi1O}_h^9do!reFh9;!T$$?C;BMWrOBxXgw{DWsBjZ^XOjA5vLiW94=GWYi2mXGJ63TXp&+ ziMKT>-9k1a4Jr0sOGNR0^A1k1-OS=s1)y+mj$B(&tg<1JZCuCN3x8Utjp)F(AbOwj zmM!_zjM&TCzHW=s2iU@MMxsAH;$n_@&w;!pcMB&iWmfk6d5wUuKQP{y?cJ(*Nfz1l}}k{GMdCwL(n0ydbdbFTCS^@N#ZYTkE zO)L}Xk*~E%vZ$y9Mj&Q`H%Ab8n|s@`Z*b`)DM?xTfscGNy;TB6+uzvKtQ-Js+^bTf zdald?EOkU$plpVDuFH_tRz(Qebb0cUZ3d1+N{+E#pS(nzvz!B58npROj4>#nVd+52 zkiWk@~I$%rZ^l!e(;r!VXqxs6Q;C6lYV zVH~kX()dy&TPhNfa?uG4n3cStW~mCgy2r+rRc{eN@;D8dqLzs`7{J)uks^EuQ$&H* zgBouopRFSTyw&xR0bL@pcNpql$nL6+%mi@ZxB%^+Vo^e9Xt+f5N<)SPr!uW=l~93A zP%r~9vY(2?D+0vP-WdY3w%M>Ogm4POPtBc8Av;l%c@vym$iWAxk^w>QUbHV&x0Z%T zF4T_EZ|K7C`_y`rpy%IJDuwYY`Zv|NV&_hyqOyxxgJfzql$@?29>pEOr89p=F;0~2 z&~%kd07y`WSdO4#TN<)9K0F}hA98pqh#lApnrZ_oh)Y9sU-eJ-z$67WaxYo7uW@-8 zG$?-zu>8UaBgjH*%o2T6f?cGz96UqCG3a^=m$<|x2AL}maIN>9S2_#8Ux}q(RIcc& zWtx+>nYrgTZnMZ<3+kz6<4)tNs&`529+09J)eHUX;)>m%r_Y8k5xrBwTy$ zx(=Jo&Y|kkD;F3`O0n%8qbxuqLr<+A!Pa@y@{h}Y7dsG2aPOevGWD0;8O5f}f`fE9 z(1C>xPi`?8TV*T<1Z+Cy!W&8|5;KF@d_LZ_i)yK3} zOG8roRAw(YYC`3O98ZCyeBDi{bsH;49WB~&3DigXvU>2s_U<{By!wKO`M$5R4z&m! zFQDAU=Bc3#1h}W9Ekl(CnrYg3)tX7!TJC!VJ9hSJ%Oy~L!;Pf%b1j;cSE@gR*Vm)N6fkS`)d+%NwDbd8&9d)xNd+9Mr_2rs!+T@RY2xV1=}o}aC_4vqGX zz0qNMgs&Yf5J=pwQEh}Cv}K(odr3SQg3je|tV4s4a&ftH6whE&6Qr(0V)=;v(iX`! z{VWByvF~qbB2&|WdQuin5LF`-o=N1k9o5?);h#3*g=sq83qsJkR*Yz;6yRtpR)JbF zDUr}ZAQ(&*Y~S)Ca8>)Ar;<2Izz(bmgI1{i#SMk0tv$Xqw}sRGxxc={OTmCa!o>p# zDr2(xSI22*Z*xj*+N-zHmTQ3xrw4z5^+}&a;^q+5NEB?gbi{g|o@8cOr}epTo|uUm zG(-)FVt?|<1#E!$$Ve8aKfUZj^BBWXMZY$MMk(qO~c ztCe`~q=hN&JOWUtSRf0#R6sNDG9Nr}hE3{(5mYx87ZWZgEGPI(MFDl!9rt#* zJ;!s?!U{+SVc9jS&m+8yOEOPRC7i>`s(M2b;V(roHT9j$Bwgj?EoK$7gzzxKe#$@? z^1#Hy)1|>*XJqeY9|Jj3!-fTzpbFSyZ73D+Cj+U+?yZsmB9c)CLe_5$c{2QF`n5)O z;IMrs9{~HhJJ-O)k%Ze%?=-TCg6jpCk41zMlp4Lf9m=8iEeDo|$qp0mmxM@ri;A$G zj&33fk6IG@pmG&vm~CiV3M=o2c8}kzMVEVFs52G3Ex};m7-voEl~I!Zlv9MUH#J3V z)-{mCDGx95QAa^>AXU=z%D#;X`}Tz|+ZKi7GBHuWX^HVa$Au3sPYlXXB{|4Hh@W~C zt*|{OKkNgC)M+HMz7>eu6gXS#kVG2onPZv=DanEOwZ)3HpSC?hT_8Iu;}x7|`?^oW z{{TbdNki1FoC`~H4uz~$5$=t$Cz~Wg6|doxp$?zEh`a$VTp*Xyi9;}(4?aP($Zrkm z5$?0>(4r4nG$w40RtB z(N&jt;S}}_YQ}y|qmoj_hHZv48$lKyxc$3$Yv!WT!>2z3`geh zEYTbno}G>}cMOCrEvve2UnUI6lmKyUh)y@W9Gf)95NzaDRxjK(%>Q zY8X{I(xwcdawB)3Nyxwqt_b`1S|AwMy-Pm!aj64w+AAP0=TT@|Kvvm7Y{>OC?zYkMz#DOr|OmW$)3H{$50 z`mjZVxnyXF83%}!ejz4AEk8`va4yqzFdP=!v3J9w*8{GHpK%}|61F$uCUf!L;v`Ix+kp{k+XlW9^rF zShX^G7>#w@rIf1{e&~R9K(G(eSE3XzK$#^eCi6eW&T;@y243cQCe#z!@}u7=proSR z0jG|KlnlFY1OYh;93Z$`!b`FiA>g%@^}wqGC~Xo0h+Ys-Hzo)AA%tFWe}tla+07Z7 zyn5U+nZ`mqrgaN&6OThNUjc@LWXw8=T3b0aIp)KSr2EIWZZl2Rc1#RaHm!!8kvkfM zJi+(3DcX4-03kwdABGWdrNJX&qzkFI7gkrel%rZ&)LT7m|8_z#slD^p2d@>I)F+L(uF5OZkY9SD)>+S_5#aL;qJRPH0rdifP zxyPzPEZeatoVC~$)%Of0(%p2%VoYzss6Uwp?PQ{Bkx~v025dtrF7H)(qdoB!4_>Lt z>Pf@x%HT?wDQvZ94H6xfDK25uc(Erx%@1`@2{NJZu5+nJBwqW-;@?UR)a|0XhuFxz zxR(~t3#<&t@)8g5RWa~Y#!Ebyc2EmROMQR#Ms5RAXo{QmBrU9;fl*M<&pb)L1&~zg zEz)W^m_=ZQV*V#**;cJt%f=4rth^(=E}EWU1(yFdlu4c6E<5O!>#gY40eDm^!_7^d z3phM6#2ahd1cTcK(sjZ15`u>;@_Z)9)?cm}V1M?;h5{1s^WD+5)qU*`G|_D&3z`nU z3APM4vIj^I>MqJR1$KXn0mY%TL+?;xxYu;>D@xwTq)APi3=Q41O?ato{b_#?Cc(T? zrYg9V_a)>+0C8ti(<&aX%m#}3x*wMrvt{N<=q*uo6St7e+Q^O)?ky)A=47kUqsJ-4 zk(enT1m)Vo6HrUXNQQPqkOl@T%c0S(A@5lBw(ps!=~kxX0T7YAkdU7b+ATm8AaMT- z_P*L5IaAm+NCXkg;+h~K3U?JTLIG4pLw)wEi?P!K?Oa)mV0O?R#jC})LDCtdw{mfr zv|3@nPrX<%Vy7k8O8Ui41ARlCjqP+~4fTC(GpRp>WW}~TI!rm*`+j)8hDFT)#9=ad_=bZUP5yb zl8QC!-YFdQwQsIjMv)q#MSQ!gLy13JpLTE22emBb6ZM!%3TnDB+1XrObWrXfDu8)I zWn0;?nlJITg+*lVG13}YWqgxxyU)IJSqE!Ef<36MDl?VOP%1Zhk=BZ+>|ZgfNcQBP zyFEqhw^XMCev{Wo`ws0rurkaf2PMTs{BqsEdWAz>*mwZyY!2}}Xn?8Sqh#)u8VLP{ zoI;yJDVLM}p-8`ZCv)v9P@^4HrE!y8{f z02xb85IOpxvJ=RHT5><&FWRn46;`;k%wRgw)Q!z7OH0PJoF zJ2;#i`&SrHI0=s%$8{I*t#|*2_YO?y2-vw9~>ad;WKu$z;_8xD>>umjjh;o^GMTklLaqZGR19d#hCELtDz18O#DC zxHm+1yA1^Rgt?t9&}VBXiwOrsH0YyeU=KOzkaT>Z{a*6>=OU?bcKEFwU0aqeV0UjQ z-$Bij6EqKHiOkN51?|R7H&phKzPw504gUp=5Zwp3+5uRhrM843W3lChIwXx8e@Rp<&E6}Krq^tqZoPtJevR_;`00xx6nq4 zQ7K(Pt-rD0+_4za$Dp9`acqyBqk3-Zf3*t)6^r)T@%CyQm&J;|d! z@?5eC?nhf;DMf7~fM%A0*g=&QzETd@^m>lEHA);(j@(gy`sep$eRWJ+(bw%@#ih8r z7c1`W6qgovYZ=^Ki@RHq;_ePZaV=I{2X}|T1|HAyz3=z#{bMKhWSwN6Wbfpzti6uV zIiximw!;5lJy6zJKGOJA6CNZPBt0+bf^9r&%7+=#Rs( z1H<~bYPwm|xkU^s@itJ&eB!vB^AVk<5GAYD{Hnfy^p={peq69FQ(XZ{@%Ypo2h{n5 zXe#pgl<}ktfWTxW*THrA%o<|h@ymXrGJuC`k(X{UANH5tMR;P?N4IY+Jm<4%aFy#R zt>sC9CcsPrhW#XMq4@u-tWd6C56ut#Cc0v~nnHlh%CM zx<6{iUt^(z1BsOY%g;w?7NfEA{=;V2QwJ8CPE$(i=a~K@f@Ga)$aWX>Avg09-Tn?I@FZy(^2TS5~)7abHV$IuZZ z-(FR-m0J+&9Y8+eS3U&<9(*rKuk!_!HNg>ETOXA;_w7>)ZWV~o^W@+)7|XGpVSRC^ zRKPg@S8n2dy9vSdX1<_F_XN-vhnDUdHxq@AtKt>99vRoR55VyR!gZ?%^T^n|3p@o# zM}-07kOR_lvSnFoo|_KdX$@lD9oWt6ZV)jM1kNVv0KFZk90eubgDX)`u({CmBP_S4 zNnYM4?$>E299e;&dw$KihGvZmTS#jWVqqa2hmJ)$w=Wj`d+~2Yag}!#546++dtps$ zi-1{?e7g*B{EZ^<*JX_#vB=}w%D&-ApIPpo;}wKrYiZT5_~0t@rW{MCSVvNH8Kq+3 zH#eGT-PA6ZY)WiJN2Tc8KC2;ATh5n|w&E!N9fx&hQ(qP8nS?;HG15p$4>LB$>Q{=% zg={nn5djYzT9l@%$P6vOho39)jO!`8aUDYvt@0>vaF;!pBgo>}Sdy$5$ zJ|o1??OsTw`|^9kV2#j{YSX^3#Zn{PV77KrGn}X3Rmg$>GxDC!#;64@H>c370DSen zixU%D!gniv=faJvP)1uXujxo*3BVb@leMZ2h!IaA($!M7(qT1fAfybp=`fh%Xw6^s zyRLS8$OfJ6rU$L7^UOJ~D8AHV?jn6b^!c~7EdHd4+TaQ)MW)+7tiY8E)l*0yO^y)! z62Yi{n{ms9#JC57b8V?#Q$o-Qp9M0@*>el4mpJ6Bla_Z!u)DrBCyMQe4vkm4Wh7z| z1+ogbtVxO$4}sJ;=KE22q7aD*TVSWg(J|q{dTz`J6TCku^WosH{RVMw6J5j^ZBNey zsidJ;D7i?^x}csYx?${FFus=QH#hAgQkRWkSVgBUy03XRpZx?Wi{|Z8Jk)$dF%XRB zgl>QMDAwoBl3SK2+oGpJ0!!@&nTxl%aC_$3hAGtNf;rJDuCF>OQUUSSt_HJ-l`p)S zvW%t$Vj}iJXuoChnKNQU!|}lOQRzSPziEt7mW$~8Q#)MuH~NShP6EX zb{;BL^-^2osA(Zj}3UpK^VH55ob@Cy{o+y7e${J z=8luM;#{tkxd%tU0R@7%Emd z|3!m(M3_J_D%=2_RsQK8v}8gu&2FEo>HV>gvh9P7bY7`Y1l>8fPL(Gj566_inyoj{;@|}S>g$VYk+>vY|IxsL^Wuoq@PY3Lb+#$ zi0A~K-sm(6`Kfrjq`T*h*H77)_T-~D)R<)mKrLSzqexQ`qXZBnK)w@t_@ACEBY?Sd zw3OZ}>o>nvUKJ;g`{l{ypAHzJmkg22Flp*B`9R8&)q`D+BA=v@mgG z?dn$$-Uefrh{gY2K(eQVbe);S1yIC7k^SyGeJ%dH&kO5@bIes7m7coUm1s5u?yhV! za2(v3?vY0Fnnf$cVnnqNI))h~e$e_e9xSkm^?>P#%A%_Kh(2#x8Xr4-(_mI(D{wcJgqDd`V*?PUnd*NV6 zbC=&;O}FUv`#P^i?~GdlO@&mlorz1X!6@2Eb{#<+sqaF;-(3@o9X!1d4GOltz!@$& zfe;ruSn--Sg}o@e&1mW!Zq-|OmQW(&&%V{_`xEx3FLHa4r=|gW78vw03N+-Kh4)Pu zP%i~jR0LNFNXxJpsk|Y0XM%t|U-C&cS)f5LL=Mbg?+iuo+ zixYZI5^o`5%ox)WBNM~Sy*QoHvo_$BN*pT;)eLOIEB(aHy53nru+b%?qxSE@9@xR7 zCk!`l0Cnw!AD*#@rG3ybBEvk~5WishOcA^9LkVpK8Nb&3Mz+C_hZ$n!ffcT{Ylk!J zkprWbv|<`We1{M?x)H@VFD_ukfRlZEL9XrLS{PrQ^go4C9!c0KCMql3U-XFUxaJh( zra)&s%BLFFie4ide3%G&KHCMuR#c>s1dvqJV-B@uZ$1k~2~<(B-L0fFT=9a^D~~b2 z+`r@NYts&k16d!!Nom1%qW|zEOsa;S1qK@fXegQ{b-129eK%`5n))~Ce8bxuF<>iL z-6>4kCKFIZ*lDz(i7q@h@c`u|%pSFwuVJrHg;sYLJ%YXr@jX%%AUrAhkbZ|l`j^v> zqxfRrBchtsh6po6oRQJ+^dBzb{LSD5jYva`LG-4$#>u4XyDVEzcK-v1q1{mnN~87` zVIn}u-&CER^)pTk!~Ma}yS@|d`ncKUo;!jfmC8NwMeg)RvCp*`HH0T?>o_bttRhg+ zYk4xInDWUGa?`+NO+K8@!Y5UIcD{rtW=*UyDlq(2xxTShgpT-B5?CM+Yxt`e5Gy8h zLv9HjBR7Dr2+ipkk~l&*(3)Tb{(Jx9J26L{$p_R2qmtP?!G)})1>x$V62KpA*9+4}CfdQmDvuJ@WBl)+K;X3-pJI#3&n^DmehJ{(b}*fh_M+}&b3{Ip~3oBGOC;D+h+KysVVIq zqU?xWtSZT}+1Cl3-*XEA-N#9>Xi#_C#QE;`9#QW%y6W4pDOO`%cMYd2OwwJ_vN7UC zDu8iSwaH$A3xf!IHt-j!XVesKXE$0+fDD?5@bWz@i7f3^Q0c=c_KYt3*(Uk&toB!d za(6il6|bYS+AT?UrM@s&RZ1bda&BC7RATAt*5fwjw@`=9{!!i0z=#iUWY{okYQ*y| zBQtI0U%G)IXo8n0jmm3@J`X(F#ibu4887#KswOH91TL~;NY*Y*!{~H7BXXrrr4wCU zHh3s&gJ`)4EbPiG>kw3OXi^s-BnxHYS|!R1_J_W+O!9qR&z>D8wNn*3Oga5=>Zd}T z`t<|$#Odu^PdiI1lmZ(0+++lypMOqhoP>HDm7ZLCQtKDTde0h0mYISXQ}_6x*uv7| zLpN&W&T4of(s|qQy&9;9r*qTQ=DQyj;v%Zy=cGas z8Fh#gWP7baRYJN&j$$k?5mqa*2O({N`j4ILUh59v^>}hZU*u9Ut}TgLcDs=|DORIdHWuqKz6hr3 zzuw*|ak+!Ch9$igHt26pzNw4EUA!*Ft(gDKA7H{ey-ZZ{UIr2SC=+Qfla*hipod_i z+xWQPeUP+#nsbxLx0@Ur_tFPo1>8i#Qu$~|MgidSmQ^s_*?4SeP9_b`<%Bub8y zDAeG@Mr6=PPP!Rk&!0;TpESahfy3{jDgPX%GHzTL-V&VlT>8;dr5@r}zY`=Q}Qa*6$q z;RW7_WfEO_d+29Q`mb8l?QmSw{$w3ENS{cC_)|-9!i&+S6iFbuGFSc6@bk;ke=1nx z9pr{{59pe(l~^Ki|JlRdMzX8ikFKS};jzStke8 zQj*qBGC3lm^A8vUZVOl4$o=kirpiXLIB5PRP>|f3D0JMbz?85zL+d*T6sx`03C^Q(y2c|6_=Ug{3biVFYV*XfZfq@Hlhf3g`MA>NLpxQr+o{M`gQIu-=xU`3QVN8~ON8lZ@RV`|k z=%jyQB9a5%D0k+1?SAH9M|qja71%$qH!|hy<|C|75ou;;@sY(RkEnpGkK9EZfNM`U z$JHz8=ZO4Kdb1&h3x?ItoZR$>-RF1vb?TYHdJSn{Apa)h?B*X$!cMiT7b3GVT~XWo zg}WI0oUy#FkJ)pnDCu^4+{0g|Hf(u`t}Miz7x(o+cQpqL#@HO3f&%KJl)DW}4vKSK zOEbT0*Wx{l;IwZ`O_5Z;+->|xv#L8iBSW?ESM=@Y*|dl8FS}*_sMiw&t@aX~EXmFl z5L7R^;J+P_u$`|y_%e*!CB3Y{J$8=e#6XE`0=P zm?kL-!3pM|t06(pYx{j{Gt0eiz2kI0@-b%83&y`rn`PRNhLlPFh$s7D7!my8$(H58 zQ&}H=AO4>U^-LYjm*0f1&g<_d1WphF?|W~{XKGkocArA2m_Qp1#}s)JMPNnHVEH+q zAfWk;e&j@rl|X}2=T(63QbsbBVIQ#{2h@j!|H|&LJ>8A%0!6wvm=T z>7QgGR3pGP@;7X;;57c7Y))c1U2O->F}_yhjV{$P??D#1qsSek-GH7G>t)?2o4Gkm zLZ1B9i&2rymWTq@s1Ee8jg~4+d4JgMgSeTC z*3Os^F^qZKW%SO3eD!JsmaXucOJ2_5EgAh(n#xqC{)SdbaE|LX`>+go=~c-vN^0TU zaod`Z>AQ6UCqd@>y%)SApRg@v&jou;C7(<0lwSAmnrlGy-R>^9EU;ItDlOrEtD=R^ zR-Z7`WDq1}2xqjPjf7z$^!K8fEe)eCTpW&uY*95M=-V|7qBUzHg60}|ZcU5WXs}si zgbPh%w_DTce-m}tF?Q;HUqdTvF%Xw)Nhgk&lkwGBMLD=}E6DGNhH73LpkF9LZi%On z`ARWx-=Lp!`?&w{DYd)RLwGnLqEqdRU3z`1@<38u*Wjp}TH>gK%ul~DUwUem9XR?> zBUkYa|!Hg2(VVI?X~i^)g*9 zH?du@pn>NISfX$pJ0D@wlfb!d;Hz)TzcrnN)>@s^&tYq&gR^QSjds*O0uT5XX|*EdCZqvU1sdz0dJ>Sb&)pR7o)6vhQhWos})fqAZH z<9thv8iUS%cT@BF=Y};I@HfnXKUroi1rB8k#y})-xf(LD^kVD8l4JF6F#*a(Mpnz=~x&oUtrABnZ5 zlUmOg4=b3yX~cRp!5Z7ABk^-62WH9j>-FPkt5?a?>|0K$=$h%5(G!U-C+*|pT4;dS zcw{y!UHv>4!dylY^wTs9bnscUGE>0akcfQbjU2y z0+_-o>nv}^9h|#UqFt56DE*Nlzh;)N!PIt4jAKPdH98O{j$hahMmE_y&cVn)y+~Bx zw(74d5gVqd5syF=*va88M3@nik=y>m!BiWTqct`q7z_&h`+MwIZ+I#gh;FBwm1*>z z2m1_Hi(yY(s_nPWg6h!%HRIxY?~*HWhVMTAN;Us@w zfD|yUQ8-F9#X_tQxl<>+8KTzqm6$yHmxENg%^|1SU~)j>M=H@VN3vzR zQsT0;)`Ay_wC^So33KCSg|G=7W9~H=Ncv|dBbLN7S4qqZ64*`1eFHZ|u`RD7+HcM? z?fYFm$-tjnM!b#GQ8YI7gXdBd9kVAVBf^ud^)ec8boF2D%#F1*C}lm4p`Vu#>}&Q* zq{o_5f`$QCxzP5>*Ne@$Zbe>3$M56?l@!F0^(0?|pcJ+S-6DHQ=uOwD92zf+S_JA< z#}%w_=hY?Gyw|;23Ax$Dhst5I_U?`Sk6&n^e)$(j7C2YUj=@H*iA?j-9jy*k zz9TO;ak7Be@XY>n4`2rblH9(DjZF=hox5gmcgojam4&DipnwdMv(eH|&SoC8R&-&;` zw)!X3J(j8l^lVZ%vf4OqLHgi_${lM#g3TM1qCYCF-@&Y?M$LP|bXFG7U14V)R0NB! zvTdsFe9w_RurE$kE0qqEt}<*GPd-E5oJ%hG5)Jp#VC~W0fS&YecgTb%zB5R2UnH0L zF1%8aug*F1_jMKv%s93SJCo|*9@Pb(FpcvueB5sY)?Q`w_5Rg5k5593#(62V>8{8&o#g!GS=u5-~k)k$q~6^zKB|6f&M?68d=w=v-1b{m^OBt1{i`&)pM>Z0 zPc%A>QnwgVp!MDIYvq!imrz}5al%Z*gM?01-<|EDnI&7YCjb^xYLNI*5!F<*x-IA0 zZswr7Th4`fmI@%SqEwmz0plGMekdy$txC+jr$I=dO3OrXIC*I5&Nps+()Ak})leD) zJFx*Py^^c^V*!%VUGKCCY*0BrQM6m?|fL zjW522ZvNczY-b&$k=OeTXk%1=OUNJboB!nz8gbcm=j=?NndbqVk~+M-w2fOQdLV17 zW#trt@^tCW9yckWe@ah`TFECU@0+x-9CRW#VXhCvQk=Wc12iy11E<8`w1N~aIMhED zXf$8Eq&g=YKV{}%)M<`6>HR)T@-l>lCcra9)5ffhHv9;n&>t(r2M8gEdmPZ_k8JYNh*A~bgCFW z#?O0}!kzw_^4POs_hAnOUr5^7Cn8g!BNQVYMc8C?wKCP2($Q>B=d2djcGL>4aRL|Z z1Xz^PZ`5eC^ULMa={qHzH)ymgPFT@}p5kN@arq*pF1Uk8Z@G#eMAT}($)1Vo=B{Gb zJH_65!>~PO#9sW=sw7C?zLP&Z5~<39vO>6+IKxO1v}h^Y#TNes0I#R1I%e9AN}L*F zETR%UBsCFGnr_bv zP6)6hjeg?JN)G~U)@k5laP+&eg){V4iVk2Quu4BX_%Cx}Tw~gKXqDz!SO!Flr;sm& zFV|Vfuq1k6`o-L^7mDYX%)dgwznyQRXXIzSxURMn@v>IX8Y)yks(mXY zg6%(o?8Lm93Y!ih5PK7%VK*&}w-Zq5JLv$jjp#cUI8J?vijp`HTcT9M|0ff{A#F}J)BxGKsVh!0ELA~>h>_zeB4 z88S&Og~rMLoZ>D)J`ZnHZd_;RnTv^y0dTC?5Il?b#4@CT@eR1_kNUk9?9&(+W86<9 zjdQ<}w}RS$_=al?-G+bn+rbFVW*jpHcAa9k$cYQ7`@TAYDAzbbVf74FuF-S)v|$PK zSp)S5uV2efUGAB4{+M!&^DWficc1^yQbdL(5IhV(G@9h~jn*G91e)ZZV|M!y^4(f-N z@~3Wu9fPSC6v$R7(OvYR?ra^6Ey)D2Lf@}m&gUg29@DC`Y-5>oeO&#%0r0~oxZDf3j#RNG6+L&ylf_{SqeN1@51^SQ9dEhvk+_E1o+)Q@br zw}-3F%@=U^t2jN;6G*5X-^VU*HQtRC-*I+s2ep{7InN%S8A(n`Zmv7;dQ;uT@VEHg z`r|=qC|A%Gj;4~Wli0dH(h&HrifxPgehywuqDK2&P`X>%F><>X)ZO~HzN!7i+4Mz8dNj;vQU%pz+`uCu}3`degvBmV|!t$93FOaKN?fzQIziZbvqE)iN z56ZFX;3Ly;;XlVVVH#x7|5GHuRqTBjx-FTsG_oG{Ax;P&AnT^6Go|{8_2$b@_KrNo z&2&q)>)y;n#sH|Rw$(gBQVV1*7wdUWi`9c${OjxOoZaJn?L7(>+{-yHvwzL_D-u_< zW?r7zN5*+@&^p7)?w|Y;weBz7+cQvC9xr-v@x7^ZV{qsvlIZV4l~bqpb7W)sL{ZpO zz7yYAb++MhIuqbP{$p$e%F#@JZk!By?f*Dp%iNMrsv_d%3)laq>!uM~e+4ve32zn! zEXaw`p|oayl-Ph1BGCwhGZ4DGTU1?5|C2_O^2l_6Zh~?I7r4Es+G^!Wgde)ov0)49vAo#*Z&9|wl&8nRpIyWV(42Y{pwCqy8-fzkx2x~1MS$-A4N&R#AI=o^^ zq*9T|Teby}^HYrWUAo59r5e*a#*ZS514Gl(*1g~o943)EvYWpi^4c6Nr{ayj? zKYYd}quSdXPJMQ-gGR~;zS@8IBkb~~^6`*;S=6GY!mvaf0)gwv%6^`@;H>u{(IzrO zz5U3o3w_Od(?J4NcD*)Jygh*4?($yGKyRCGSE_FZ#%~88=(B@AWM^3HwIB2{_x5xU z@HTnz_Ob(dxrr}MHGVrBzu54HFrd&zUcde|{h;-np36gmlGynM*=fy_TkxE!KP>gQ zI;np<0zs$6pWT;zZo4lxdN1x_2#KM00lHh4*<^L1OY0M_L-C;HAMbM7o>2<_x!Bm& z?nk86rRs~w*B6?9h@2-=Qz_``Z>KMhdvopm>7eTybnmW%4}9wWuk6v-qMKV3J@y=2 z;jdR?;Ns5y`ZZn2mtppE;OP`(Z%-J~-28YGu*|YH2fXuinqtSdn*6NFpE#?Vg9cJ(fh9; zd#Cpy(!94?(b>(55716yzrw z6JNjQw?4gZcgY@b_dC_(V7lS$j<4t7b?* z{w??+6fW*X|1&0DC|pzIJAF9AaO{1!RU^zn(yUP{reC5mL&`~fK4X}{$#vO0aY0>X zVnOwQmX#~*ZpKQ^_g?l4B!wWSmmI8E`4%8wmU5GRcCbX+9CEw9pjrEZ(@wtM@L_){ zE*Ec6gDQ8>uMFpPU3tF2-qBF^D*d7jAD)GYPpjw}}GPs_euH@M2#WvYX} z5xk8G>+N;P$yk*qRKpn4zGANIBTmSFmZ|>8gxjpAR9USTAf%}3$SUJRN4R)Q=Jez` zRPn`Oke?lX<}hkDDW9gYuHr_JZTLQCFfX0{Zw<`-vJJO(69WoWtJ&8i)RJFnUl};e z5a?a|2jaZWxU}&t{F#2bemW)^j!TV>VPSTeejVT;(`=9OIKZOwB0TiEdX*=z%lUCS z>L=ywfqoQxm9E&LsK36Yy?nfj;GfeGc|cn$(M6l3C>vD`t`2o;|GuUNuyCGA2xAr# z)WN2=Jw`l)L0j~$GZ$(9P*JqpMCt4`SRbg8p<&m8)ME~g93vXGV+`XqXQvRq!|YB8 ztxS@q9T7OTSM;#cN_BdEa@3JD% zSKQX>W}==8txof(^~T_%$CHI5u_l#Hqo0m%75FU+PmZ`qAtuUKs&#`p4!vKNds zJdI|@u0qX@0m%DyDDw*^za+sbMe7-cn@s3xn_q!U%fn7gkw)wm`-aT(7mk2B8rG5m zwzN9owxvqs0D?5mFLgL9*~Fa^Sx!Biwt`&v$gjCLT#>iUf8Z7mBV%ws;mFdITHS}7 ztg39wnxb6dO#HBIJx+aWyF&f%rG-+GKY;wd3Jm~2dymq#R#t8axk{{gKIQ1t)+ literal 31956 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 From 7795f06c426a8dd014b0e5310f36080410a92e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 8 Jun 2012 13:56:03 +0200 Subject: [PATCH 309/517] Fixed minor bugs --- src/Mod/Ship/shipCreateShip/TaskPanel.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.py b/src/Mod/Ship/shipCreateShip/TaskPanel.py index eeb474ccc..5e2533c54 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.py +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.py @@ -47,13 +47,11 @@ class TaskPanel: obj.Beam = self.form.beam.value() obj.Draft = self.form.draft.value() # Discretize it - ship.discretize(self.form.nSections.value(), self.form.nPoints.value()) App.ActiveDocument.recompute() return True def reject(self): self.preview.clean() - self.close() return True def clicked(self, index): From cf31d43e54063f20ab40710c328f288048e80e4b Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 8 Jun 2012 15:19:53 +0200 Subject: [PATCH 310/517] Add support of number of decimals to unit system --- src/Base/UnitsApi.cpp | 11 ++++++++ src/Base/UnitsApi.h | 6 +++++ src/Gui/Application.cpp | 5 ++++ src/Gui/propertyeditor/PropertyItem.cpp | 35 +++++++++++++++++-------- src/Gui/propertyeditor/PropertyItem.h | 3 +++ 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/Base/UnitsApi.cpp b/src/Base/UnitsApi.cpp index ceb773473..91b71eba8 100644 --- a/src/Base/UnitsApi.cpp +++ b/src/Base/UnitsApi.cpp @@ -85,6 +85,7 @@ UnitsSchema *UnitsApi::UserPrefSystem = new UnitsSchemaInternal(); double UnitsApi::UserPrefFactor [50]; QString UnitsApi::UserPrefUnit [50]; +int UnitsApi::UserPrefDecimals = 2; UnitsApi::UnitsApi(const char* filter) { @@ -196,6 +197,16 @@ const double UnitsApi::getPrefFactorOf(QuantityType t) return UserPrefFactor[t]; } +void UnitsApi::setDecimals(int prec) +{ + UserPrefDecimals = prec; +} + +int UnitsApi::getDecimals() +{ + return UserPrefDecimals; +} + void UnitsApi::setDefaults(void) { setPrefOf( Length ,"mm" ); diff --git a/src/Base/UnitsApi.h b/src/Base/UnitsApi.h index e3beae5d5..1b2fdcd64 100644 --- a/src/Base/UnitsApi.h +++ b/src/Base/UnitsApi.h @@ -101,6 +101,10 @@ public: static const QString getQuantityName(QuantityType t); /// get the translation factor for the default unit of a quantity static const double getPrefFactorOf(QuantityType t); + // set the number of decimals + static void setDecimals(int); + // fet the number of decimals + static int getDecimals(); /// set the application defaults static void setDefaults(void); //@} @@ -119,6 +123,8 @@ protected: static double UserPrefFactor [50] ; /// name of the unit the user wants to use as quantities static QString UserPrefUnit [50] ; + /// number of decimals for floats + static int UserPrefDecimals; // do the real work static double parse(const char*,bool &UsedUnit); diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index a4c3542b3..ad5663902 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include @@ -328,6 +329,10 @@ Application::Application(bool GUIenabled) Translator::instance()->activateLanguage(hPGrp->GetASCII("Language", (const char*)lang.toAscii()).c_str()); GetWidgetFactorySupplier(); + ParameterGrp::handle hUnits = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/Units"); + Base::UnitsApi::setDecimals(hUnits->GetInt("Decimals", Base::UnitsApi::getDecimals())); + // setting up Python binding Base::PyGILStateLocker lock; PyObject* module = Py_InitModule3("FreeCADGui", Application::Methods, diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index 3f0e5b08f..eab7c4c20 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -57,6 +57,7 @@ TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyItem, Base::BaseClass); PropertyItem::PropertyItem() : parentItem(0), readonly(false) { + precision = Base::UnitsApi::getDecimals(); } PropertyItem::~PropertyItem() @@ -130,6 +131,16 @@ bool PropertyItem::isReadOnly() const return readonly; } +void PropertyItem::setDecimals(int prec) +{ + precision = prec; +} + +int PropertyItem::decimals() const +{ + return precision; +} + QVariant PropertyItem::toolTip(const App::Property* prop) const { return QVariant(QString::fromUtf8(prop->getDocumentation())); @@ -574,7 +585,7 @@ void PropertyFloatItem::setValue(const QVariant& value) if (!value.canConvert(QVariant::Double)) return; double val = value.toDouble(); - QString data = QString::fromAscii("%1").arg(val,0,'f',2); + QString data = QString::fromAscii("%1").arg(val,0,'f',decimals()); setPropertyValue(data); } @@ -582,6 +593,7 @@ QWidget* PropertyFloatItem::createEditor(QWidget* parent, const QObject* receive { QDoubleSpinBox *sb = new QDoubleSpinBox(parent); sb->setFrame(false); + sb->setDecimals(decimals()); QObject::connect(sb, SIGNAL(valueChanged(double)), receiver, method); return sb; } @@ -703,13 +715,14 @@ void PropertyFloatConstraintItem::setValue(const QVariant& value) if (!value.canConvert(QVariant::Double)) return; double val = value.toDouble(); - QString data = QString::fromAscii("%1").arg(val,0,'f',2); + QString data = QString::fromAscii("%1").arg(val,0,'f',decimals()); setPropertyValue(data); } QWidget* PropertyFloatConstraintItem::createEditor(QWidget* parent, const QObject* receiver, const char* method) const { QDoubleSpinBox *sb = new QDoubleSpinBox(parent); + sb->setDecimals(decimals()); sb->setFrame(false); QObject::connect(sb, SIGNAL(valueChanged(double)), receiver, method); return sb; @@ -873,9 +886,9 @@ void PropertyVectorItem::setValue(const QVariant& value) return; const Base::Vector3f& val = value.value(); QString data = QString::fromAscii("(%1, %2, %3)") - .arg(val.x,0,'f',2) - .arg(val.y,0,'f',2) - .arg(val.z,0,'f',2); + .arg(val.x,0,'f',decimals()) + .arg(val.y,0,'f',decimals()) + .arg(val.z,0,'f',decimals()); setPropertyValue(data); } @@ -976,9 +989,9 @@ void PropertyDoubleVectorItem::setValue(const QVariant& value) return; const Base::Vector3d& val = value.value(); QString data = QString::fromAscii("(%1, %2, %3)") - .arg(val.x,0,'f',2) - .arg(val.y,0,'f',2) - .arg(val.z,0,'f',2); + .arg(val.x,0,'f',decimals()) + .arg(val.y,0,'f',decimals()) + .arg(val.z,0,'f',decimals()); setPropertyValue(data); } @@ -1503,9 +1516,9 @@ void PropertyColorItem::setValue(const QVariant& value) val.g = (float)col.green()/255.0f; val.b = (float)col.blue()/255.0f; QString data = QString::fromAscii("(%1,%2,%3)") - .arg(val.r,0,'f',2) - .arg(val.g,0,'f',2) - .arg(val.b,0,'f',2); + .arg(val.r,0,'f',decimals()) + .arg(val.g,0,'f',decimals()) + .arg(val.b,0,'f',decimals()); setPropertyValue(data); } diff --git a/src/Gui/propertyeditor/PropertyItem.h b/src/Gui/propertyeditor/PropertyItem.h index d334d8ced..bc247966f 100644 --- a/src/Gui/propertyeditor/PropertyItem.h +++ b/src/Gui/propertyeditor/PropertyItem.h @@ -69,6 +69,8 @@ public: void setReadOnly(bool); bool isReadOnly() const; + void setDecimals(int); + int decimals() const; PropertyItem *child(int row); int childCount() const; @@ -99,6 +101,7 @@ private: PropertyItem *parentItem; QList childItems; bool readonly; + int precision; }; /** From 33ecf9e76844c755bf947f9e6001d2fd8798e6c4 Mon Sep 17 00:00:00 2001 From: jrheinlaender Date: Fri, 8 Jun 2012 19:11:09 +0430 Subject: [PATCH 311/517] Groove feature (code is 99% identical to Revolution feature) --- src/Mod/PartDesign/App/AppPartDesign.cpp | 2 + src/Mod/PartDesign/App/CMakeLists.txt | 2 + src/Mod/PartDesign/App/FeatureGroove.cpp | 207 +++++++++++++ src/Mod/PartDesign/App/FeatureGroove.h | 66 ++++ src/Mod/PartDesign/Gui/AppPartDesignGui.cpp | 2 + src/Mod/PartDesign/Gui/CMakeLists.txt | 7 + src/Mod/PartDesign/Gui/Command.cpp | 77 +++++ .../PartDesign/Gui/TaskGrooveParameters.cpp | 287 ++++++++++++++++++ src/Mod/PartDesign/Gui/TaskGrooveParameters.h | 115 +++++++ .../PartDesign/Gui/TaskGrooveParameters.ui | 93 ++++++ src/Mod/PartDesign/Gui/ViewProviderGroove.cpp | 141 +++++++++ src/Mod/PartDesign/Gui/ViewProviderGroove.h | 59 ++++ src/Mod/PartDesign/Gui/Workbench.cpp | 3 + 13 files changed, 1061 insertions(+) create mode 100644 src/Mod/PartDesign/App/FeatureGroove.cpp create mode 100644 src/Mod/PartDesign/App/FeatureGroove.h create mode 100644 src/Mod/PartDesign/Gui/TaskGrooveParameters.cpp create mode 100644 src/Mod/PartDesign/Gui/TaskGrooveParameters.h create mode 100644 src/Mod/PartDesign/Gui/TaskGrooveParameters.ui create mode 100644 src/Mod/PartDesign/Gui/ViewProviderGroove.cpp create mode 100644 src/Mod/PartDesign/Gui/ViewProviderGroove.h diff --git a/src/Mod/PartDesign/App/AppPartDesign.cpp b/src/Mod/PartDesign/App/AppPartDesign.cpp index debb60f26..16620762f 100644 --- a/src/Mod/PartDesign/App/AppPartDesign.cpp +++ b/src/Mod/PartDesign/App/AppPartDesign.cpp @@ -34,6 +34,7 @@ #include "FeatureFillet.h" #include "FeatureSketchBased.h" #include "FeatureRevolution.h" +#include "FeatureGroove.h" #include "Body.h" #include "FeatureDressUp.h" #include "FeatureChamfer.h" @@ -82,6 +83,7 @@ void PartDesignExport initPartDesign() PartDesign::Pocket ::init(); PartDesign::Fillet ::init(); PartDesign::Revolution ::init(); + PartDesign::Groove ::init(); PartDesign::Chamfer ::init(); PartDesign::Face ::init(); } diff --git a/src/Mod/PartDesign/App/CMakeLists.txt b/src/Mod/PartDesign/App/CMakeLists.txt index 49af69836..837189bb1 100644 --- a/src/Mod/PartDesign/App/CMakeLists.txt +++ b/src/Mod/PartDesign/App/CMakeLists.txt @@ -50,6 +50,8 @@ SET(FeaturesSketchBased_SRCS FeaturePocket.h FeatureRevolution.cpp FeatureRevolution.h + FeatureGroove.cpp + FeatureGroove.h FeatureAdditive.cpp FeatureAdditive.h FeatureSubtractive.h diff --git a/src/Mod/PartDesign/App/FeatureGroove.cpp b/src/Mod/PartDesign/App/FeatureGroove.cpp new file mode 100644 index 000000000..1e7f7d660 --- /dev/null +++ b/src/Mod/PartDesign/App/FeatureGroove.cpp @@ -0,0 +1,207 @@ +/*************************************************************************** + * Copyright (c) 2010 Juergen Riegel * + * * + * 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" +#ifndef _PreComp_ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif + +#include +#include +#include +#include + +#include "FeatureGroove.h" + + +using namespace PartDesign; + +namespace PartDesign { + + +PROPERTY_SOURCE(PartDesign::Groove, PartDesign::SketchBased) + +Groove::Groove() +{ + ADD_PROPERTY(Base,(Base::Vector3f(0.0f,0.0f,0.0f))); + ADD_PROPERTY(Axis,(Base::Vector3f(0.0f,1.0f,0.0f))); + ADD_PROPERTY(Angle,(360.0)); + ADD_PROPERTY_TYPE(ReferenceAxis,(0),"Groove",(App::PropertyType)(App::Prop_None),"Reference axis of Groove"); + ADD_PROPERTY(Midplane,(0)); + ADD_PROPERTY(Reversed, (0)); +} + +short Groove::mustExecute() const +{ + if (Placement.isTouched() || + Sketch.isTouched() || + ReferenceAxis.isTouched() || + Axis.isTouched() || + Base.isTouched() || + Angle.isTouched() || + Midplane.isTouched()) + return 1; + return 0; +} + +App::DocumentObjectExecReturn *Groove::execute(void) +{ + App::DocumentObject* link = Sketch.getValue(); + if (!link) + return new App::DocumentObjectExecReturn("No sketch linked"); + if (!link->getTypeId().isDerivedFrom(Part::Part2DObject::getClassTypeId())) + return new App::DocumentObjectExecReturn("Linked object is not a Sketch or Part2DObject"); + + Part::Part2DObject* pcSketch=static_cast(link); + + TopoDS_Shape shape = pcSketch->Shape.getShape()._Shape; + if (shape.IsNull()) + return new App::DocumentObjectExecReturn("Linked shape object is empty"); + + // this is a workaround for an obscure OCC bug which leads to empty tessellations + // for some faces. Making an explicit copy of the linked shape seems to fix it. + // The error only happens when re-computing the shape. + if (!this->Shape.getValue().IsNull()) { + BRepBuilderAPI_Copy copy(shape); + shape = copy.Shape(); + if (shape.IsNull()) + return new App::DocumentObjectExecReturn("Linked shape object is empty"); + } + + TopExp_Explorer ex; + std::vector wires; + for (ex.Init(shape, TopAbs_WIRE); ex.More(); ex.Next()) { + wires.push_back(TopoDS::Wire(ex.Current())); + } + if (wires.empty()) // there can be several wires + return new App::DocumentObjectExecReturn("Linked shape object is not a wire"); + + // get the Sketch plane + Base::Placement SketchPlm = pcSketch->Placement.getValue(); + + // get reference axis + App::DocumentObject *pcReferenceAxis = ReferenceAxis.getValue(); + const std::vector &subReferenceAxis = ReferenceAxis.getSubValues(); + if (pcReferenceAxis && pcReferenceAxis == pcSketch) { + bool hasValidAxis=false; + Base::Axis axis; + if (subReferenceAxis[0] == "V_Axis") { + hasValidAxis = true; + axis = pcSketch->getAxis(Part::Part2DObject::V_Axis); + } + else if (subReferenceAxis[0] == "H_Axis") { + hasValidAxis = true; + axis = pcSketch->getAxis(Part::Part2DObject::H_Axis); + } + else if (subReferenceAxis[0].size() > 4 && subReferenceAxis[0].substr(0,4) == "Axis") { + int AxId = std::atoi(subReferenceAxis[0].substr(4,4000).c_str()); + if (AxId >= 0 && AxId < pcSketch->getAxisCount()) { + hasValidAxis = true; + axis = pcSketch->getAxis(AxId); + } + } + if (hasValidAxis) { + axis *= SketchPlm; + Base::Vector3d base=axis.getBase(); + Base::Vector3d dir=axis.getDirection(); + Base.setValue(base.x,base.y,base.z); + Axis.setValue(dir.x,dir.y,dir.z); + } + } + + // get revolve axis + Base::Vector3f b = Base.getValue(); + gp_Pnt pnt(b.x,b.y,b.z); + Base::Vector3f v = Axis.getValue(); + gp_Dir dir(v.x,v.y,v.z); + + // get the support of the Sketch if any + App::DocumentObject* pcSupport = pcSketch->Support.getValue(); + Part::Feature *SupportObject = 0; + if (pcSupport && pcSupport->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) + SupportObject = static_cast(pcSupport); + + TopoDS_Shape aFace = makeFace(wires); + if (aFace.IsNull()) + return new App::DocumentObjectExecReturn("Creating a face from sketch failed"); + + // Rotate the face by half the angle to get Groove symmetric to sketch plane + if (Midplane.getValue()) { + gp_Trsf mov; + mov.SetRotation(gp_Ax1(pnt, dir), Base::toRadians(Angle.getValue()) * (-1.0) / 2.0); + TopLoc_Location loc(mov); + aFace.Move(loc); + } + + this->positionBySketch(); + TopLoc_Location invObjLoc = this->getLocation().Inverted(); + pnt.Transform(invObjLoc.Transformation()); + dir.Transform(invObjLoc.Transformation()); + + // Reverse angle if selected + double angle = Base::toRadians(Angle.getValue()); + if (Reversed.getValue() && !Midplane.getValue()) + angle *= (-1.0); + + try { + // revolve the face to a solid + BRepPrimAPI_MakeRevol RevolMaker(aFace.Moved(invObjLoc), gp_Ax1(pnt, dir), angle); + + if (RevolMaker.IsDone()) { + TopoDS_Shape result = RevolMaker.Shape(); + // if the sketch has a support fuse them to get one result object (PAD!) + if (SupportObject) { + const TopoDS_Shape& support = SupportObject->Shape.getValue(); + if (!support.IsNull() && support.ShapeType() == TopAbs_SOLID) { + // Let's call algorithm computing a fuse operation: + BRepAlgoAPI_Cut mkCut(support.Moved(invObjLoc), result); + // Let's check if the fusion has been successful + if (!mkCut.IsDone()) + throw Base::Exception("Cut out of support failed"); + result = mkCut.Shape(); + } + } + + this->Shape.setValue(result); + } + else + return new App::DocumentObjectExecReturn("Could not revolve the sketch!"); + + return App::DocumentObject::StdReturn; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + return new App::DocumentObjectExecReturn(e->GetMessageString()); + } +} + +} diff --git a/src/Mod/PartDesign/App/FeatureGroove.h b/src/Mod/PartDesign/App/FeatureGroove.h new file mode 100644 index 000000000..782e728cb --- /dev/null +++ b/src/Mod/PartDesign/App/FeatureGroove.h @@ -0,0 +1,66 @@ +/*************************************************************************** + * Copyright (c) 2010 Juergen Riegel * + * * + * 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 PARTDESIGN_Groove_H +#define PARTDESIGN_Groove_H + +#include +#include "FeatureSketchBased.h" + +namespace PartDesign +{ + +class Groove : public SketchBased +{ + PROPERTY_HEADER(PartDesign::Groove); + +public: + Groove(); + + App::PropertyVector Base; + App::PropertyVector Axis; + App::PropertyAngle Angle; + App::PropertyBool Midplane; + App::PropertyBool Reversed; + + /** if this property is set to a valid link, both Axis and Base properties + * are calculated according to the linked line + */ + App::PropertyLinkSub ReferenceAxis; + + /** @name methods override feature */ + //@{ + /// recalculate the feature + App::DocumentObjectExecReturn *execute(void); + short mustExecute() const; + /// returns the type name of the view provider + const char* getViewProviderName(void) const { + return "PartDesignGui::ViewProviderGroove"; + } + //@} +}; + +} //namespace PartDesign + + +#endif // PART_Groove_H diff --git a/src/Mod/PartDesign/Gui/AppPartDesignGui.cpp b/src/Mod/PartDesign/Gui/AppPartDesignGui.cpp index d86285fbe..32e718778 100644 --- a/src/Mod/PartDesign/Gui/AppPartDesignGui.cpp +++ b/src/Mod/PartDesign/Gui/AppPartDesignGui.cpp @@ -37,6 +37,7 @@ #include "ViewProviderChamfer.h" #include "ViewProviderFillet.h" #include "ViewProviderRevolution.h" +#include "ViewProviderGroove.h" //#include "resources/qrc_PartDesign.cpp" @@ -83,6 +84,7 @@ void PartDesignGuiExport initPartDesignGui() PartDesignGui::ViewProviderPocket ::init(); PartDesignGui::ViewProviderPad ::init(); PartDesignGui::ViewProviderRevolution::init(); + PartDesignGui::ViewProviderGroove ::init(); PartDesignGui::ViewProviderChamfer ::init(); PartDesignGui::ViewProviderFillet ::init(); diff --git a/src/Mod/PartDesign/Gui/CMakeLists.txt b/src/Mod/PartDesign/Gui/CMakeLists.txt index 8f6e26556..0aa1cb918 100644 --- a/src/Mod/PartDesign/Gui/CMakeLists.txt +++ b/src/Mod/PartDesign/Gui/CMakeLists.txt @@ -32,6 +32,7 @@ set(PartDesignGui_MOC_HDRS TaskFilletParameters.h TaskHoleParameters.h TaskRevolutionParameters.h + TaskGrooveParameters.h ) fc_wrap_cpp(PartDesignGui_MOC_SRCS ${PartDesignGui_MOC_HDRS}) SOURCE_GROUP("Moc" FILES ${PartDesignGui_MOC_SRCS}) @@ -46,6 +47,7 @@ set(PartDesignGui_UIC_SRCS TaskFilletParameters.ui TaskHoleParameters.ui TaskRevolutionParameters.ui + TaskGrooveParameters.ui ) qt4_wrap_ui(PartDesignGui_UIC_HDRS ${PartDesignGui_UIC_SRCS}) @@ -64,6 +66,8 @@ SET(PartDesignGuiViewProvider_SRCS ViewProviderFillet.h ViewProviderRevolution.cpp ViewProviderRevolution.h + ViewProviderGroove.cpp + ViewProviderGroove.h ViewProviderPatternRectangular.cpp ViewProviderPatternRectangular.h ) @@ -88,6 +92,9 @@ SET(PartDesignGuiTaskDlgs_SRCS TaskRevolutionParameters.ui TaskRevolutionParameters.cpp TaskRevolutionParameters.h + TaskGrooveParameters.ui + TaskGrooveParameters.cpp + TaskGrooveParameters.h TaskHoleParameters.ui TaskHoleParameters.cpp TaskHoleParameters.h diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index 37e02dc6a..d671fbe46 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -327,6 +327,82 @@ bool CmdPartDesignRevolution::isActive(void) return hasActiveDocument(); } +//=========================================================================== +// PartDesign_Groove +//=========================================================================== +DEF_STD_CMD_A(CmdPartDesignGroove); + +CmdPartDesignGroove::CmdPartDesignGroove() + : Command("PartDesign_Groove") +{ + sAppModule = "PartDesign"; + sGroup = QT_TR_NOOP("PartDesign"); + sMenuText = QT_TR_NOOP("Groove"); + sToolTipText = QT_TR_NOOP("Revolve a selected sketch"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "PartDesign_Groove"; +} + +void CmdPartDesignGroove::activated(int iMsg) +{ + unsigned int n = getSelection().countObjectsOfType(Part::Part2DObject::getClassTypeId()); + if (n != 1) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Select a sketch or 2D object.")); + return; + } + + std::string FeatName = getUniqueObjectName("Groove"); + + std::vector Sel = getSelection().getObjectsOfType(Part::Part2DObject::getClassTypeId()); + Part::Part2DObject* sketch = static_cast(Sel.front()); + const TopoDS_Shape& shape = sketch->Shape.getValue(); + if (shape.IsNull()) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("The shape of the selected object is empty.")); + return; + } + + // count free wires + int ctWires=0; + TopExp_Explorer ex; + for (ex.Init(shape, TopAbs_WIRE); ex.More(); ex.Next()) { + ctWires++; + } + if (ctWires == 0) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("The shape of the selected object is not a wire.")); + return; + } + + App::DocumentObject* support = sketch->Support.getValue(); + + openCommand("Make Groove"); + doCommand(Doc,"App.activeDocument().addObject(\"PartDesign::Groove\",\"%s\")",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Sketch = App.activeDocument().%s",FeatName.c_str(),sketch->getNameInDocument()); + doCommand(Doc,"App.activeDocument().%s.ReferenceAxis = (App.activeDocument().%s,['V_Axis'])", + FeatName.c_str(), sketch->getNameInDocument()); + doCommand(Doc,"App.activeDocument().%s.Angle = 360.0",FeatName.c_str()); + updateActive(); + if (isActiveObjectValid()) { + doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",sketch->getNameInDocument()); + if (support) + doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",support->getNameInDocument()); + } + doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); + + if (support) { + copyVisual(FeatName.c_str(), "ShapeColor", support->getNameInDocument()); + copyVisual(FeatName.c_str(), "LineColor", support->getNameInDocument()); + copyVisual(FeatName.c_str(), "PointColor", support->getNameInDocument()); + } +} + +bool CmdPartDesignGroove::isActive(void) +{ + return hasActiveDocument(); +} //=========================================================================== // PartDesign_Fillet //=========================================================================== @@ -628,6 +704,7 @@ void CreatePartDesignCommands(void) rcCmdMgr.addCommand(new CmdPartDesignPad()); rcCmdMgr.addCommand(new CmdPartDesignPocket()); rcCmdMgr.addCommand(new CmdPartDesignRevolution()); + rcCmdMgr.addCommand(new CmdPartDesignGroove()); rcCmdMgr.addCommand(new CmdPartDesignFillet()); //rcCmdMgr.addCommand(new CmdPartDesignNewSketch()); rcCmdMgr.addCommand(new CmdPartDesignChamfer()); diff --git a/src/Mod/PartDesign/Gui/TaskGrooveParameters.cpp b/src/Mod/PartDesign/Gui/TaskGrooveParameters.cpp new file mode 100644 index 000000000..79b0278fe --- /dev/null +++ b/src/Mod/PartDesign/Gui/TaskGrooveParameters.cpp @@ -0,0 +1,287 @@ +/*************************************************************************** + * Copyright (c) 2011 Juergen Riegel * + * * + * 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" + +#ifndef _PreComp_ +#endif + +#include "ui_TaskGrooveParameters.h" +#include "TaskGrooveParameters.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace PartDesignGui; +using namespace Gui; + +/* TRANSLATOR PartDesignGui::TaskGrooveParameters */ + +TaskGrooveParameters::TaskGrooveParameters(ViewProviderGroove *GrooveView,QWidget *parent) + : TaskBox(Gui::BitmapFactory().pixmap("PartDesign_Groove"),tr("Groove parameters"),true, parent),GrooveView(GrooveView) +{ + // we need a separate container widget to add all controls to + proxy = new QWidget(this); + ui = new Ui_TaskGrooveParameters(); + ui->setupUi(proxy); + QMetaObject::connectSlotsByName(this); + + connect(ui->doubleSpinBox, SIGNAL(valueChanged(double)), + this, SLOT(onAngleChanged(double))); + connect(ui->axis, SIGNAL(activated(int)), + this, SLOT(onAxisChanged(int))); + connect(ui->checkBoxMidplane, SIGNAL(toggled(bool)), + this, SLOT(onMidplane(bool))); + connect(ui->checkBoxReversed, SIGNAL(toggled(bool)), + this, SLOT(onReversed(bool))); + + this->groupLayout()->addWidget(proxy); + + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + double l = pcGroove->Angle.getValue(); + bool mirrored = pcGroove->Midplane.getValue(); + bool reversed = pcGroove->Reversed.getValue(); + + ui->doubleSpinBox->setValue(l); + + int count=pcGroove->getSketchAxisCount(); + + for (int i=ui->axis->count()-1; i >= count+2; i--) + ui->axis->removeItem(i); + for (int i=ui->axis->count(); i < count+2; i++) + ui->axis->addItem(QString::fromAscii("Sketch axis %1").arg(i-2)); + + int pos=-1; + + App::DocumentObject *pcReferenceAxis = pcGroove->ReferenceAxis.getValue(); + const std::vector &subReferenceAxis = pcGroove->ReferenceAxis.getSubValues(); + if (pcReferenceAxis && pcReferenceAxis == pcGroove->Sketch.getValue()) { + assert(subReferenceAxis.size()==1); + if (subReferenceAxis[0] == "V_Axis") + pos = 0; + else if (subReferenceAxis[0] == "H_Axis") + pos = 1; + else if (subReferenceAxis[0].size() > 4 && subReferenceAxis[0].substr(0,4) == "Axis") + pos = 2 + std::atoi(subReferenceAxis[0].substr(4,4000).c_str()); + } + + if (pos < 0 || pos >= ui->axis->count()) { + ui->axis->addItem(QString::fromAscii("Undefined")); + pos = ui->axis->count()-1; + } + + ui->axis->setCurrentIndex(pos); + + ui->checkBoxMidplane->setChecked(mirrored); + ui->checkBoxReversed->setChecked(reversed); + + setFocus (); +} + +void TaskGrooveParameters::onAngleChanged(double len) +{ + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + pcGroove->Angle.setValue((float)len); + pcGroove->getDocument()->recomputeFeature(pcGroove); +} + +void TaskGrooveParameters::onAxisChanged(int num) +{ + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + Sketcher::SketchObject *pcSketch = static_cast(pcGroove->Sketch.getValue()); + if (pcSketch) { + int maxcount = pcSketch->getAxisCount()+2; + if (num == 0) + pcGroove->ReferenceAxis.setValue(pcSketch, std::vector(1,"V_Axis")); + else if (num == 1) + pcGroove->ReferenceAxis.setValue(pcSketch, std::vector(1,"H_Axis")); + else if (num >= 2 && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-2); + std::string str = buf.toStdString(); + pcGroove->ReferenceAxis.setValue(pcSketch, std::vector(1,str)); + } + if (num < maxcount && ui->axis->count() > maxcount) + ui->axis->setMaxCount(maxcount); + } + pcGroove->getDocument()->recomputeFeature(pcGroove); +} + +void TaskGrooveParameters::onMidplane(bool on) +{ + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + pcGroove->Midplane.setValue(on); + pcGroove->getDocument()->recomputeFeature(pcGroove); +} + +void TaskGrooveParameters::onReversed(bool on) +{ + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + pcGroove->Reversed.setValue(on); + pcGroove->getDocument()->recomputeFeature(pcGroove); +} + + +double TaskGrooveParameters::getAngle(void) const +{ + return ui->doubleSpinBox->value(); +} + +QString TaskGrooveParameters::getReferenceAxis(void) const +{ + // get the support and Sketch + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + Sketcher::SketchObject *pcSketch = static_cast(pcGroove->Sketch.getValue()); + + QString buf; + if (pcSketch) { + buf = QString::fromUtf8("(App.ActiveDocument.%1,[%2])"); + buf = buf.arg(QString::fromUtf8(pcSketch->getNameInDocument())); + if (ui->axis->currentIndex() == 0) + buf = buf.arg(QString::fromUtf8("'V_Axis'")); + else if (ui->axis->currentIndex() == 1) + buf = buf.arg(QString::fromUtf8("'H_Axis'")); + else if (ui->axis->currentIndex() >= 2) { + buf = buf.arg(QString::fromUtf8("'Axis%1'")); + buf = buf.arg(ui->axis->currentIndex()-2); + } + } + else + buf = QString::fromUtf8("''"); + + return buf; +} + +bool TaskGrooveParameters::getMidplane(void) const +{ + return ui->checkBoxMidplane->isChecked(); +} + +bool TaskGrooveParameters::getReversed(void) const +{ + return ui->checkBoxReversed->isChecked(); +} + +TaskGrooveParameters::~TaskGrooveParameters() +{ + delete ui; +} + +void TaskGrooveParameters::changeEvent(QEvent *e) +{ + TaskBox::changeEvent(e); + if (e->type() == QEvent::LanguageChange) { + ui->retranslateUi(proxy); + } +} + +//************************************************************************** +//************************************************************************** +// TaskDialog +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +TaskDlgGrooveParameters::TaskDlgGrooveParameters(ViewProviderGroove *GrooveView) + : TaskDialog(),GrooveView(GrooveView) +{ + assert(GrooveView); + parameter = new TaskGrooveParameters(GrooveView); + + Content.push_back(parameter); +} + +TaskDlgGrooveParameters::~TaskDlgGrooveParameters() +{ + +} + +//==== calls from the TaskView =============================================================== + + +void TaskDlgGrooveParameters::open() +{ + +} + +void TaskDlgGrooveParameters::clicked(int) +{ + +} + +bool TaskDlgGrooveParameters::accept() +{ + std::string name = GrooveView->getObject()->getNameInDocument(); + + //Gui::Command::openCommand("Groove changed"); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Angle = %f",name.c_str(),parameter->getAngle()); + std::string axis = parameter->getReferenceAxis().toStdString(); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.ReferenceAxis = %s",name.c_str(),axis.c_str()); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Midplane = %i",name.c_str(),parameter->getMidplane()?1:0); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Reversed = %i",name.c_str(),parameter->getReversed()?1:0); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); + Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); + Gui::Command::commitCommand(); + + return true; +} + +bool TaskDlgGrooveParameters::reject() +{ + // get the support and Sketch + PartDesign::Groove* pcGroove = static_cast(GrooveView->getObject()); + Sketcher::SketchObject *pcSketch; + App::DocumentObject *pcSupport; + if (pcGroove->Sketch.getValue()) { + pcSketch = static_cast(pcGroove->Sketch.getValue()); + pcSupport = pcSketch->Support.getValue(); + } + + // role back the done things + Gui::Command::abortCommand(); + Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); + + // if abort command deleted the object the support is visible again + if (!Gui::Application::Instance->getViewProvider(pcGroove)) { + if (pcSketch && Gui::Application::Instance->getViewProvider(pcSketch)) + Gui::Application::Instance->getViewProvider(pcSketch)->show(); + if (pcSupport && Gui::Application::Instance->getViewProvider(pcSupport)) + Gui::Application::Instance->getViewProvider(pcSupport)->show(); + } + + //Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); + //Gui::Command::commitCommand(); + + return true; +} + + + +#include "moc_TaskGrooveParameters.cpp" diff --git a/src/Mod/PartDesign/Gui/TaskGrooveParameters.h b/src/Mod/PartDesign/Gui/TaskGrooveParameters.h new file mode 100644 index 000000000..8b82f0187 --- /dev/null +++ b/src/Mod/PartDesign/Gui/TaskGrooveParameters.h @@ -0,0 +1,115 @@ +/*************************************************************************** + * Copyright (c) 2011 Juergen Riegel * + * * + * 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 GUI_TASKVIEW_TaskGrooveParameters_H +#define GUI_TASKVIEW_TaskGrooveParameters_H + +#include +#include +#include + +#include "ViewProviderGroove.h" + +class Ui_TaskGrooveParameters; + +namespace App { +class Property; +} + +namespace Gui { +class ViewProvider; +} + +namespace PartDesignGui { + + + +class TaskGrooveParameters : public Gui::TaskView::TaskBox +{ + Q_OBJECT + +public: + TaskGrooveParameters(ViewProviderGroove *GrooveView,QWidget *parent = 0); + ~TaskGrooveParameters(); + + QString getReferenceAxis(void) const; + double getAngle(void) const; + bool getMidplane(void) const; + bool getReversed(void) const; + +private Q_SLOTS: + void onAngleChanged(double); + void onAxisChanged(int); + void onMidplane(bool); + void onReversed(bool); + +protected: + void changeEvent(QEvent *e); + +private: + +private: + QWidget* proxy; + Ui_TaskGrooveParameters* ui; + ViewProviderGroove *GrooveView; +}; + +/// simulation dialog for the TaskView +class TaskDlgGrooveParameters : public Gui::TaskView::TaskDialog +{ + Q_OBJECT + +public: + TaskDlgGrooveParameters(ViewProviderGroove *GrooveView); + ~TaskDlgGrooveParameters(); + + ViewProviderGroove* getGrooveView() const + { return GrooveView; } + + +public: + /// is called the TaskView when the dialog is opened + virtual void open(); + /// is called by the framework if an button is clicked which has no accept or reject role + virtual void clicked(int); + /// is called by the framework if the dialog is accepted (Ok) + virtual bool accept(); + /// is called by the framework if the dialog is rejected (Cancel) + virtual bool reject(); + /// is called by the framework if the user presses the help button + virtual bool isAllowedAlterDocument(void) const + { return false; } + + /// returns for Close and Help button + virtual QDialogButtonBox::StandardButtons getStandardButtons(void) const + { return QDialogButtonBox::Ok|QDialogButtonBox::Cancel; } + +protected: + ViewProviderGroove *GrooveView; + + TaskGrooveParameters *parameter; +}; + +} //namespace PartDesignGui + +#endif // GUI_TASKVIEW_TASKAPPERANCE_H diff --git a/src/Mod/PartDesign/Gui/TaskGrooveParameters.ui b/src/Mod/PartDesign/Gui/TaskGrooveParameters.ui new file mode 100644 index 000000000..d7a68d6c2 --- /dev/null +++ b/src/Mod/PartDesign/Gui/TaskGrooveParameters.ui @@ -0,0 +1,93 @@ + + + PartDesignGui::TaskGrooveParameters + + + + 0 + 0 + 278 + 158 + + + + Form + + + + + + + + Axis: + + + + + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + + + + + + + + Angle: + + + + + + + 1 + + + 0.000000000000000 + + + 360.000000000000000 + + + 10.000000000000000 + + + 360.000000000000000 + + + + + + + + + true + + + Symmetric to plane + + + + + + + Reversed + + + + + + + + diff --git a/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp b/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp new file mode 100644 index 000000000..af7a24854 --- /dev/null +++ b/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp @@ -0,0 +1,141 @@ +/*************************************************************************** + * Copyright (c) 2011 Juergen Riegel * + * * + * 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" + +#ifndef _PreComp_ +#endif + +#include +#include +#include +#include +#include + +#include "ViewProviderGroove.h" +#include "TaskGrooveParameters.h" + +using namespace PartDesignGui; + +PROPERTY_SOURCE(PartDesignGui::ViewProviderGroove,PartDesignGui::ViewProvider) + +ViewProviderGroove::ViewProviderGroove() +{ +} + +ViewProviderGroove::~ViewProviderGroove() +{ +} + +std::vector ViewProviderGroove::claimChildren(void)const +{ + std::vector temp; + temp.push_back(static_cast(getObject())->Sketch.getValue()); + + return temp; +} + +void ViewProviderGroove::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) +{ + QAction* act; + act = menu->addAction(QObject::tr("Edit Groove"), receiver, member); + act->setData(QVariant((int)ViewProvider::Default)); + PartGui::ViewProviderPart::setupContextMenu(menu, receiver, member); +} + +bool ViewProviderGroove::setEdit(int ModNum) +{ + if (ModNum == ViewProvider::Default ) { + // When double-clicking on the item for this pad the + // object unsets and sets its edit mode without closing + // the task panel + Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog(); + TaskDlgGrooveParameters *padDlg = qobject_cast(dlg); + if (padDlg && padDlg->getGrooveView() != this) + padDlg = 0; // another pad left open its task panel + if (dlg && !padDlg) { + QMessageBox msgBox; + msgBox.setText(QObject::tr("A dialog is already open in the task panel")); + msgBox.setInformativeText(QObject::tr("Do you want to close this dialog?")); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + int ret = msgBox.exec(); + if (ret == QMessageBox::Yes) + Gui::Control().closeDialog(); + else + return false; + } + + // clear the selection (convenience) + Gui::Selection().clearSelection(); + //if (ModNum == 1) + // Gui::Command::openCommand("Change Groove parameters"); + + // start the edit dialog + if (padDlg) + Gui::Control().showDialog(padDlg); + else + Gui::Control().showDialog(new TaskDlgGrooveParameters(this)); + + return true; + } + else { + return PartGui::ViewProviderPart::setEdit(ModNum); + } +} + +void ViewProviderGroove::unsetEdit(int ModNum) +{ + if (ModNum == ViewProvider::Default) { + // and update the pad + //getSketchObject()->getDocument()->recompute(); + + // when pressing ESC make sure to close the dialog + Gui::Control().closeDialog(); + } + else { + PartGui::ViewProviderPart::unsetEdit(ModNum); + } +} + +bool ViewProviderGroove::onDelete(const std::vector &) +{ + // get the support and Sketch + PartDesign::Groove* pcGroove = static_cast(getObject()); + Sketcher::SketchObject *pcSketch; + App::DocumentObject *pcSupport; + if (pcGroove->Sketch.getValue()){ + pcSketch = static_cast(pcGroove->Sketch.getValue()); + pcSupport = pcSketch->Support.getValue(); + } + + // if abort command deleted the object the support is visible again + if (pcSketch && Gui::Application::Instance->getViewProvider(pcSketch)) + Gui::Application::Instance->getViewProvider(pcSketch)->show(); + if (pcSupport && Gui::Application::Instance->getViewProvider(pcSupport)) + Gui::Application::Instance->getViewProvider(pcSupport)->show(); + + return true; +} + + diff --git a/src/Mod/PartDesign/Gui/ViewProviderGroove.h b/src/Mod/PartDesign/Gui/ViewProviderGroove.h new file mode 100644 index 000000000..51b1adca4 --- /dev/null +++ b/src/Mod/PartDesign/Gui/ViewProviderGroove.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (c) 2011 Juergen Riegel * + * * + * 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 PARTGUI_ViewProviderGroove_H +#define PARTGUI_ViewProviderGroove_H + +#include "ViewProvider.h" + + +namespace PartDesignGui { + +class PartDesignGuiExport ViewProviderGroove : public ViewProvider +{ + PROPERTY_HEADER(PartGui::ViewProviderGroove); + +public: + /// constructor + ViewProviderGroove(); + /// destructor + virtual ~ViewProviderGroove(); + + /// grouping handling + std::vector claimChildren(void)const; + + void setupContextMenu(QMenu*, QObject*, const char*); + + virtual bool onDelete(const std::vector &); + +protected: + virtual bool setEdit(int ModNum); + virtual void unsetEdit(int ModNum); + +}; + + +} // namespace PartDesignGui + + +#endif // PARTGUI_ViewProviderGroove_H diff --git a/src/Mod/PartDesign/Gui/Workbench.cpp b/src/Mod/PartDesign/Gui/Workbench.cpp index 50f9f9adf..961393e70 100644 --- a/src/Mod/PartDesign/Gui/Workbench.cpp +++ b/src/Mod/PartDesign/Gui/Workbench.cpp @@ -86,6 +86,7 @@ void Workbench::activated() "PartDesign_Pad", "PartDesign_Pocket", "PartDesign_Revolution", + "PartDesign_Groove", 0}; Watcher.push_back(new Gui::TaskView::TaskWatcherCommands( "SELECT Sketcher::SketchObject COUNT 1", @@ -169,6 +170,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "PartDesign_Pad" << "PartDesign_Pocket" << "PartDesign_Revolution" + << "PartDesign_Groove" << "PartDesign_Fillet" << "PartDesign_Chamfer"; @@ -186,6 +188,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const << "PartDesign_Pad" << "PartDesign_Pocket" << "PartDesign_Revolution" + << "PartDesign_Groove" << "PartDesign_Fillet" << "PartDesign_Chamfer"; From d5c7c1ea45f68ffd96758d81a317ec4d5b4605c3 Mon Sep 17 00:00:00 2001 From: jrheinlaender Date: Fri, 8 Jun 2012 19:51:53 +0430 Subject: [PATCH 312/517] Pad feature: Midplane, two-sided dimensions, up to first/last/face options --- data/tests/PadTest.fcstd | Bin 0 -> 14782 bytes src/Mod/Part/App/PartFeature.cpp | 74 +++++- src/Mod/Part/App/PartFeature.h | 32 +++ src/Mod/PartDesign/App/FeaturePad.cpp | 231 +++++++++++++++---- src/Mod/PartDesign/App/FeaturePad.h | 12 +- src/Mod/PartDesign/Gui/TaskPadParameters.cpp | 156 +++++++++++-- src/Mod/PartDesign/Gui/TaskPadParameters.h | 14 +- src/Mod/PartDesign/Gui/TaskPadParameters.ui | 57 ++++- 8 files changed, 499 insertions(+), 77 deletions(-) create mode 100644 data/tests/PadTest.fcstd diff --git a/data/tests/PadTest.fcstd b/data/tests/PadTest.fcstd new file mode 100644 index 0000000000000000000000000000000000000000..8a7223083d43f88af19d30fa4f4f7e9512152815 GIT binary patch literal 14782 zcmbW8V~`-*)8^Z@ZQHiHr)}G|ZBN_wv~AnAIo&;NyL;!}ci;WrI~%*Pv8O&%L`D57 zPMpefG9&Xz`ES4=C;$Ke5CC!+{Q{3a%P<7M0RZOs0RUirKNYbva*bSg2M$7`9s*WN~nL)OIRA#mIOd~MJM8O;M|cIcP> z07;1F^Et0}ZJM~BIRCVmeUe0DJrU4yLtB6S?nTrQOw=kwJwra~u;&;;IY}~c zn@-Z#YE8k?f;S4~C*yw)*0o|*Q^LHXg`CSpB9OX0T#Vl3u$tp)9UrB3Sm1VACB(xk z(qh%>)1fOzHrBAg`CvdhXH-*i1N$0~iv6r77XhZUss}1uQ`cc*VxFrnb?$Zn3n#7D zha%JWC1ZV$XcxaNzV2RtiL4^rUVd5zXRtDz;2qd9@2q&#r-gWg?J6wk=!+C4Mg)pf zyqabhlHdPe@to6_wA@TTYn{ypf{3? zdLxBt4gljZVm$KNl4*U_UgCg zLyRW#z*i4m$*OSo;wIE*`J5=}jmkg&&01)4S-38C#Ahss`Fw#IiQ|bb4H5r-Dk=p7JTO5~+q&vo!%WbJR!;k61<}ZL@_avBmIm^`LY+;6vTPy#JUFHhJEdL`{h|bG@O{CVn0N;b(x*1Nd2_EwR<+Renufmx>AN(^kg zpffXh%JDinuVk2CgVwUg+wQZ5p7TgMQAh{S>}r!fn~huh$&y%SQPf%h)Kx8@GH(zR z{BRjDjr|IhblS5;8UVq5GjOz{yi;^ZD!D)&5Cu5P*ttDP%&NvhfKuwe!C2XG^WtcrtZIgF!6`<|tfV=q{{=4cP!=XL zLD{$WQ-HIMoIDprtBzCjo!XIM%Kisyc&oE z7zY*zoRboGELre6{EdM^g1fLN2{6lITu@`j^wX#LtsOn^nk zK^r1{_rRODls7v47eU;5p|3~I z-LON?47;0lJ>kkQ6Rc%MguG+dgZ=q5{!hPp5XQ43ghOmh5Sf_-+)Df-MX5x|Rj8BE ztWEJ3^Avl1%&-_#vL20BjhF^+2PvW_j0`1!XLu5UXq`-~hj*>XB9V(P)Qz1E*HeyJ zxIz?Vw2Y`Ar@UnXk11p zAvCOC!i0(^NfYt{J*6WA`uT(U-2z_<5<)-P%+E#fCHh$&$_D_7bOn@Z8f)dRGLm9Q z;du3)G^4jozgZ(1XxJ=gf&f>-*Z? z`!x=xLlt(+N7M((ACBp{XK=y3xKcwM@34;RQe*9Cm3oM(0{r$xxO{3dTc)~m76-I8!@MsOKWyfcS=c&|Y> zroqZDVAp1+0!+)W-iO!HJ%6e<@Ln$FxR%kdx=kNgGb<7f!f#y!PVfNxb)1MpxN;QIFu;Ufc|+l@xI>Ao)h`&KKQ$W+AUTf+e(RzUKmeDW&$r`GXx@-| z^zW4c8bBiTMS4l39)F4?d(g=Myv-kV2fuCYN zH^;+g^SK`jmyH$h*KOO+%w1VYpdhH;3^-KCu`VoRUMK!&yPXt@QEYCMSVr|yMtB~W ziUmf47@hspxkFSTQiV*loh)+6K0FUKlrZQD z@+UjF3JgxncSBnyDM{@3G>!!rPW{k28O#O4N5Nn+JUBTyKUA-BTOJ5$DdD!>RtDPF zUIrfPuax!mT`YXxWQO{%R`qFti0e4q%K)ftpicTBf`J&!<9r#QFQQ(EW@K^_5V9Ck z*a`{{M!YWZ1tXNkA;@DJ`xK6&1dp@!K_gtosce`%yFnG|OM+eVrmpm zqM)LPNtmcq+j`Cj?W`(1wB zKX!axh0)J|KiEGzK3{wsKgr>D^ze4^diUYydht59pP|!t;XDpFRz@=N=|T0P-}8xC zH9~IxGQij@oX?L_tWhjepewA2lWMo#lx^#>t&n8uaikgs>q9z{%C zTw1LB7OWlJmmW-OVWv~R8hxtvI0_!4q`o89G-`g@O1SD_BxZ%61qL4GymwC2EVghp zWuEl}XNw!eCfmE|f3#L;p4FhM6mRWdw|U~t0NDO~f`j=>qfAS@!C?+b5XaV_B2~t# zIn?pg_%)P`o;`Tuh}~MC3Zw7HriDk7)%iY#!Ex?1v93>(m+LGM4-uYDy`Oj4W^~kM zueo)WBP3NzXuy(v+)iC+^UU12Rx^{Ogb)Oznp-SLKC`doI~X=PYcXVSsyHz3x!_xU z>M8bm=O&nK>P{?}XE+}Sf?5q?toY#u`mx*6Y@M{T2-PJX>}8#;3DjjQO}+yZeM_(y z%PK`rpOI?#HmEItt(z3I*_dFEhwqzxt;1Ya1ra{n90;$bmG^8AB(b|rqF~L9hQX5A z7+!3p>EZDqM+ za3OUW?&{%$%IpNQKiE)WD9{rypw*2dIdNGIjN2eiKXh;fd8NEd*5Xnth&ia)L!KZJ z)=Qag7MDn>T8&5@`0bvfJ?EE)a7#y@wHg|Kf$s}+G3quWlKxGx!Xo^yCGtXEWF8$* zzq_#{H1eeD#X_9+6}{XqFZU?*nk~!9 z+`wpeO&bG>s~>j@_3x*|vJj;7S(b)q-3byL%~KyGrseU6ZeG=t*zp>4nQ~3AEA2om zGeMQyQ5no4_S+m}gFq9!%?URWKdo7o4}ml4sAw;g8s~xp^5%trU>BPut-$ZXX3v_> zc~}Y8oX6iW2Y=FO6t;8n?pQLlkRFe*+TM<;YME$lcHh9T6(4i^Z%dHEz9Pp`-VI-D zrPN;qTu(*33?rKlzQcmKGViN2pKV`0Q*m>jooAifiWTY!ake?vGxgZ+4wE2CVS;+jOrsPV`Z<>q zroMtk0gH_I`>2mC1aW{3;20UiB7=B;=@OVc&N8o-Vi6}@-=)(SeeZrd0|fUJVOoKE zm`6gP>|hHdN~{JBY2?P5P0JT}WZ6Z@EUN_-t;++Wx}#x}B2fqhWnX4tL8il?bCnG* z3r^cYqjd95gn^ECZe57;|4CGYAek1I!pamaY3yxCVr*Cz7hqwcFP4$e5tUR(s#p9N zsON^B?u^S+v^Cb`0|tsqe7X@xmLOh6;kxKARt=l2kGS?Nc7R1NNDh4#fdVQ}EiZli zQ1T~4dQm$JtaN-Gr7;s#k!i?OFqF7iu&h4vFcdb1dZ_RSyjO%Vxv68INXT=iev#oo~pCbdG`CxNoH4pOt>L;hME|^Y+?l3_@32PD%5xHiWh`b^Yh5J_gB{TZrrN&RwP1Vh` zeB)^sLWD75Udd4m^0VJ&|0FY3cEHA7X7@z?l7XXks>gv$O zB*+j}$Sbsbh&Ld4%A`C(8EStJtY_XXFCd8cVxVxUGGq;L8Y;l`tfC@rFH!+=QyH(| zV)}97v_@Ms5ecM5+Pc!;-!>cy;)%}AI^f8W6xkDmf!#{40VKI`L4vYE3T2KlLsNhv zHJ4a`A_xfe>o1We@{cQ`_O~a%6xgML_AfH&s$xpuR0DD*f^?3ny$|_D_;Jf?C_^l; zXs%@_SC!xrn+<~y%}f7Xo&e%I1roGyVH$9A$aHYhH$8PFU4noDR%nvYP?joyjJ&G0^~dw$>D|Ie=~GWMe;I#_pZn9uja>)*4EIg#Tm9S1 zz(iQ7+<;#0_C@z@YO2DTAnd`p_!PZ3XAjyED_<^jFZv=INMZ8hGzDd`56ZZjq9$!J zW)qf6fO5U)_d=`?tfQ-oKGl8YgXP^|_TY6-Ohb8vinwJf$at+mfwBm+gR?{TMu^n9mPSg-5Lm|#g|(khW^JN-mRK;;$lO?rDIee_6^_3G$@-AV}-v+G+bnOrj&F@sqd_+*6~Es ztJvTK4T{_Z=k0pXL|@ptyLm;cl*`XnnN)CjGE=-_RUOYyx&wTw5mqC>J3!@%{L=(_ zf|$M!pN{K__vU5L%*p7?E>sppTiq`*{Aw)7rNnC2J)ZYDsfd!QNqGu?4i1!+qejbE z*UM+NSikY-`>EwdMx9K@YB*Am*TPkfGE1e~;}sugl&jG`4)@nhC?Tv%zL zT_*dl_Ec%+mOa60wX4VVyIGKrC2m|`OResKa8HvZ}UZj?+y^+?nrd zKs((_b8c$Lz2%qzL7>0iwt0#IJTY_`Au!*L|0{H)4$gF2%>z@gG@k)n*I((Jb4DFy zZX1HCdp-?LET!%9xQL;c?&Yn&*G?{9JI39(1Z&Wc_Z9efM_>0n&sm-d0$NtKyYJ{* zc(K8L?zoaho=Eb0mUMidUcXI0%xVE0XBIy|jCiS^QB|q?v@)!kD((c&C1s=kIA==kNpKi|o9;iVK-y z)4w;~<>Q|7=d@^HYa7oF7E=rAF(s?*xI`tM8TVzduQ4w3_DPV+(F_cZBzJ_ACB0v-~ttH$2=fSs=`>9rU$lP>mcL&o+A_J)K;w|5`K8vwPtzcCU5NR)WM6wbj zy)Wpw1$_KnA4d;Mkw~LWDir#8ZF+Trk=8uJOO<8KAODcV3#wjAROPC8TLGK>={yqGYF>l=VkgMy6|Jz+sq@?OdUp>9-r zu}^ZKs9IE3MT_#BCDMlP6tH+Vkl3B`E$vR+S#x7A(|b`@5!_kc-MeNmE3tsE(^AZZ#WgGf^r>#!0tRi%pyNPUZuX_C+IWtOrB|^h;87VTD5PRPPDFB-zjLqH0%I)IzU_ zvW!9x8tD{!D(H&8D@ef8iK9?lyFo*b4MimhACgP(nxcb!O$MtFG03N}q3w;IXEZ>L zP}EJ*O-62=k8{Kq(`sWBsrs?s*t(U+GGQ9z2XZIY@r!DFXjp2$VTnoOK?M{809 ziKH~E%TU}ml<1u zZ$wko)%mLg({5irBrq;lbD<-; zw}>sV?a5@PFdCECa=HiXPXtSDwuHnxgV zABH*a%;z?LAbuxN90xQx0&8WaL2;c%&`O6(LlYjuayU^pB6q6V#X z`^lo$KJ*joNpEDZ&>OcM?VR<48=JY6`AkpeD@BL1<*{|!hq}5SgFH~dZ>xO5$EyQ< z<+2rE5OPr?z$E8uwNoX~M!N$f${q)%g9-qnJE292mMrVJPJcx9m>pS6wE)FtZy%=N z5Vcqmx`Te=lopM-6S2!L_5MTU& zics_pYKkAE3pBSGuo{LHf~X4w@5{Ft7xLnOkv74q;qieUnLNpfS?ok`a%#Ca@%sIKs z8@&T}4=ah=1U_mX*PhZKZ4HDLU4{t+M79R62mGQ3mt{3~#{%1x;13!N07afN{lx!w zsL4rV8Y2h@0ATSu>-?{LA@g6MX0k$`Z9fA{*BiC>rv8ufV7AkE1=~zE*uhvOFw6?& zrZP~nPhVN^M1SNNg+mID8G6^7XEZi^(KEkyGgQ+ZUt|EXgEeDqX@_m=jB*Wp`#yO0 zmd+8g9-A(z_vNdJYHLe(%M@Q~$uKMoj=E*@Wev-;a4|uL(Br(j!u^H@L!s6X|6hvN zin|3sMEU!J#wk@3GCA`SXI8mH&{*+Dv`Esf7knowZc^OFZ7RbgNt!lHFIMnDp-4o{ zDR;<4x-cnm;~$afGL^2x&4YnFj(bf%;Lb|eLXtRt(m!<4`gCopjL;!Zx?ZH}g`OP! zg8TUaz|B$%(JL4qva0A(U#w6XF*jW|k?k+o35XB{YlzY747z&v2@@1e-cCA+bOF<` z7{@{<=k#2P2m?E8JIdz&ghXID_HIxX!U2FGR;Bmv#m099xNQLj05JTW+yB>Mv-};` ztIF76vmyXZVkbN<&F$W$$bdfkc{Y`QN#icFd1`;e){a#lWM#Xs>99VNnt-; zCg60l-0b&!P4xG*p!QzTl!S|Fjo&2lWqHDYaU=tKd}xvYs7ksPGp_Luv9 zm9LhZaG2^#4JpudWyN}ft<>R5QkAD+zWdxu2S_Py8iYRmAdzEz+Ci!c^sL2mv=q^V z8k5}gOdPz#ndHt*trB6`B1n3zkYnas+)Z@JM@`)uPhgY}d0#XyBeM+sX7MDx1g?+K zClp6sTRxcIlw}auDw*!7-)CK$@zH^AP#s zBXb^G7xS@L@oi>L$B>^v8Se!nWmdv^tabq#>cxNvxUrg^?2sE?wrN7#H!Qr+ zgB~suP2L*n#ZPxyUSnWy;g6jJQqi4=_~d2Aw{;b87Q4tv&*cW#1YWld*%yRbf`aay zUm`hadzD1>MpaS!0mfADgzxu>En(e*lT}sAYW^!NQs1w+l)5E zlUG@uoHj?z|UbRUA*`P1G>-HC$OnZK@SPM(L2Zcm0@9GNl9fHmmvy{#_u#};S(Yl~lKZzN#1Ao?7uT{AK=E4Aw3 z;f{HXR}rOtq^+-FYp76FeXGyD-8pte=4zdA+=Rd)vAkIZC|e);&McjNEu z!PedWuzy;}gtx=nzW98e%aBLwW>;Yu{WAElK;C5!?`)k@f}VoA?;)P{9#)txT}C# z#!us&$?@!KxT3!Zw(7f0C&0I%#2cdO{?lLYYBq~wrF4y#XnMXd?WWb2SdG7=>)FV5 zqqm-mAZ6fayC?aysf$%buaGOJxhS5|zH9C9Pqo>1+(FF989Zfcc9f}|n4J)lRB@TL{5H{%Muw*e98%z59^omyXYr4b zbKzR94dcLvv9mWqGOTgTssuL$uR;b?6BY59JFRKWnjqP}pK%Kx2sE&4$O2{_RP0vv zApJc2^G^#uGpb7q3k(Fst*Ef}%aYy5H1UIk&g-5(D`{XX6Q<`#ONHb)xivjUd?6<0 zhU0kLBbMYR^gZmQ4p$~CDQKDT z>T?nU`L9|*9+Snp?SY_&;hN1`J1?i)iqA$ul|D$nMhmtyZ=MZYLyCDTf>c-SQ!;uG z6YJo0pl2NPn|E*Gz{pZt7r=5R$|;jvTwo-~s&?%5b}Pps^}8<0zDdjA<~mN&756j>$QZr#(N1cW z9MptK!RP_a5WQBa&llM3>!X-&c_yF36Uc_hD(rwP4e$+lzp>8Ol8|2JtVz6_SJ}>0 znGfqM3ZDG%GaVfn_qtGwHPD}d@ip^il!mi^S7d}8X9~r63Ih%yfrHUQu z1tj$qcn2<`6@_*s6d%>=S%E%#)!kZ2tnSVJgrfv@8D`zKg8;#RB9T`!NQ)ti8dbza zz$4x^=Udn!0*8tqQuX%->tblnj zBCJ)f&};O(}FfFwOwNb$2Wqi379GLqEfv@ zI2$_{8;1}FyLKu+?IaeOy2_uj6mF}Lw}hKQqJ-^n+^vV)D%g2==4>#$^ZGoQdmLpt z&%G9K-g!Ad>j&6PW!YM};rF%3+SWLLn)u(4obkD`?PGZ-6q7XoHkxhA`3#I?`H49QVyq7?KvoKP1)dodzGf}i=8{Ez zvMmSLoVD@VqFe|$M&nmWo}8GR%K(NYpMiSkGx+(rzuldMxjmA~!Y1{6Jzh>c*(tPY2~CO?EwVs4fi7qft`f#-EtMPcHws3T7M4bH5^8dCD~fcIy#8XDUSNuNp4iDqtBY;y8yClpe(nWoyWT_QGD;6gXc z@uf|_quc5Oyq4PQCCnQsSa0vVmsJI^HPh|MPf_Zy5Hhb)bCmAcswT5ZlP6OA6mX|G z->0PyxS8_SLNuh$wK+fTEaru0wZSFzzoy$j_Fy;8s>S7HLJTmaS zi9P-{5bo3jMaUCbivc$b6rQZ@{8SG|u?Mw} zr=c*J<{6i@Y1N~VJGmF#zDhDufrhdMu2e=@!0T9EHaBzpTYdNBN^1T6&z6=f7HM=` z*xTLdH43!u_3}9!=xun@(hsyHgKP2>H0qT+r9&a7Sxjp%8I;F)QA;OcRgfpyQ^P$S z(*o^W@Fu4aENBsn4HE-pwTDRWB#kP}Sq$Zyb1>*}g{zlpg4g})Ql;I_ zOC|);0Rm;nM?-h1Q>=_IRS_J#7)Sa-eb_x8jGJKIn#F=N$;1w9qA4YWzAOfRpgI#e zI3k(Jv0U`UacJ#o%1@6`)ou}1P^^HF5nSxmBLy_E7}LbOzh{|WpQ9E)d_sj|T9;?Z zM_1!ED&;jGg_vL{UWV7tC3;Cp^VFI5v1>vi6cwVz8%WeT7bi~z}xi1wl3IT}}YBUEn1Sb3gialA+!kk0#5jN0L{d zA4QOf)P{IMhgBORHoD-6g$Nl6z(^g#lP*VKku^7uIEBna`kF5jsx+NLB?5v0#AlyW z2%jp)n&|I72X~Vq8C&eLD71qehUjsk#na^JFE58GBA^vFmyM%VT}LTL5^ijhr$~Y! zbk?RL*!&VD&}=@Ki_@ZQlp|EF854dyZxA+a(9Sx?H)bS{<5PHhzbej zJrn_Yx|9IaQ+&?dX4p17w`*%Y?ysGxY+biYa)5_Hl#d_sNyy*`ra4H+fUqCsa6f+K z>ASMf(Gg_EP+X8VB+0|xCwYZQ?)8le$x1;sYf;Tvr`J?>3;11Bt)U$hYD5jje|PtY zgg~8jS(Y6WA67j7o?&#bw87${WX7`2!*~1#BUzS0qvJ16VD8W`VytrDgO7#%%J@mt zkLB-C@HX%7DAfq`qXNMDs6DT=;7pEQul2ljGRGTF_9*dfe6`D8G~zoc@M`n*X+aQM zi&g#v&m;)7E|Q}xKiqkaeaU@7b;F7+Hwl2IU5IJpsltr1*OK58zMJ_{f?^^;5Ym=W zhHX^R4A3AG;)a;$b(U9(rm33H%YWjip$d|E|6I^xZmQECy>bUt3Uu!cNOw;&p~@Nb znc`vtSC%_XSj<2U-d9#;aiqKKhR*AqE4th${UkBZANnnYe^KF{)?dI&Dy+FErvw>N zE)z`>Ue($N5}6{=HmB2(QlC>w{URo4A-Czg~qA&_TjuqMYB5udY5C4Y4VqMaJy({44lKn;D9y&9dn{EL> z*&Ropfdpt$zQp2nT7G%Z2^JYke?TZWIjEz!Ln6c`nM_{Fv7<2vWKcZfVj3hw{ty7D zGYkD>;<*8$BD2!GJQ*VM7IS|(bMFZy`#~x74s$Vl;{~QkY?Mh05*G9NBK%_Tx1$hm&=F+7+(C%<(sUA1E6Kt61$YfEaBWF z*vX;W1lVq@NCBdoNWtDuk%BEA&%9)dGre`P`ES+iffNN`@=l!vBSJw$qh_+YE^4(w z?AYP48wfIlo#sH8b-Xs_GbS8ApDZ_ikcC89$3O?EixPcTQ+4O=Ai+*^<^p zCyA2W?HjGj!)RsP}

PRq*>42O03P1^v|#P$@HIIK6?4UliZ_|#7K$qdn3G;9~A0F zD0_!zIH6~4Re1-^I;CZ1GsZcllr}Kcl_TzeT(SF%Vu*h8Vbk0>7EiB5l=Ou#d|f-& z+1#vc#Qv9S%$1&ic2K!A@XGVzSV~P4>;^Ry3sZIM1fMhl=C)u6Z$hEmJlojxtDiaU z`GGf0moI(K`>U^K4&Hkqd_0)3U!neG8<5sJfGFw=*Ia~fI`CEJ`HFqB7y5;jF>(5+=o2VBRSIc*Acae{@BZevMCN<_eIS%iwfbKgh zfuWJFAzL~pK<6|}9GeB??})YDq95HEF2BWY&KjDv1-@>ig{bT4VReDxqXHCG2a&J5 zE*X-dAF7L2u7-wtN*6n=Z9CoLD{Z}8{O$mpJwU=}_46-oagd?2GeV-?RQ5=7_9`Fb zLgsMkgOKQPhe;&Yl)vEpUQL|8HuC)5Zk+IcA=CYsUKfEKVe_dt;Iuge<7yy>09w42 z*|Bh;LGL~kGHWoQ%z;px;2G7mY2t$GY_XZSyKn`l!R zO&V>Q?7iJ!^9~}zK4OEo+w85+$2k+>c+h|re*Fp# # include # include +// includes for findAllFacesCutBy() +# include +# include +# include // for Precision::Confusion() #endif @@ -139,22 +143,25 @@ ShapeHistory Feature::buildHistory(BRepBuilderAPI_MakeShape& mkShape, TopAbs_Sha history.type = type; TopTools_IndexedMapOfShape newM, oldM; - TopExp::MapShapes(newS, type, newM); - TopExp::MapShapes(oldS, type, oldM); + TopExp::MapShapes(newS, type, newM); // map containing all old objects of type "type" + TopExp::MapShapes(oldS, type, oldM); // map containing all new objects of type "type" + // Look at all objects in the old shape and try to find the modified object in the new shape for (int i=1; i<=oldM.Extent(); i++) { bool found = false; TopTools_ListIteratorOfListOfShape it; + // Find all new objects that are a modification of the old object (e.g. a face was resized) for (it.Initialize(mkShape.Modified(oldM(i))); it.More(); it.Next()) { found = true; - for (int j=1; j<=newM.Extent(); j++) { + for (int j=1; j<=newM.Extent(); j++) { // one old object might create several new ones! if (newM(j).IsPartner(it.Value())) { - history.shapeMap[i-1].push_back(j-1); + history.shapeMap[i-1].push_back(j-1); // adjust indices to start at zero break; } } } + // Find all new objects that were generated from an old object (e.g. a face generated from an edge) for (it.Initialize(mkShape.Generated(oldM(i))); it.More(); it.Next()) { found = true; for (int j=1; j<=newM.Extent(); j++) { @@ -166,10 +173,12 @@ ShapeHistory Feature::buildHistory(BRepBuilderAPI_MakeShape& mkShape, TopAbs_Sha } if (!found) { + // Find all old objects that don't exist any more (e.g. a face was completely cut away) if (mkShape.IsDeleted(oldM(i))) { history.shapeMap[i-1] = std::vector(); } else { + // Mop up the rest (will this ever be reached?) for (int j=1; j<=newM.Extent(); j++) { if (newM(j).IsPartner(oldM(i))) { history.shapeMap[i-1].push_back(j-1); @@ -204,6 +213,15 @@ ShapeHistory Feature::joinHistory(const ShapeHistory& oldH, const ShapeHistory& return join; } +const TopoDS_Shape Feature::findOriginOf(const TopoDS_Shape& reference) { +/* Base::Console().Error("Looking for origin of face in %s\n", this->getName()); + if (reference.ShapeType() == TopAbs_FACE) { + // Find index of reference in the history + } +*/ + return TopoDS_Shape(); +} + /// returns the type name of the ViewProvider const char* Feature::getViewProviderName(void) const { return "PartGui::ViewProviderPart"; @@ -253,3 +271,51 @@ template<> PyObject* Part::FeaturePython::getPyObject(void) { template class PartExport FeaturePythonT; } +// ---------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +std::vector Part::findAllFacesCutBy( + const TopoDS_Shape& shape, const TopoDS_Shape& face, const gp_Dir& dir) +{ + // Find the centre of gravity of the face + GProp_GProps props; + BRepGProp::SurfaceProperties(face,props); + gp_Pnt cog = props.CentreOfMass(); + + // create a line through the centre of gravity + gp_Lin line = gce_MakeLin(cog, dir); + + // Find intersection of line with all faces of the shape + std::vector result; + BRepIntCurveSurface_Inter mkSection; + // TODO: Less precision than Confusion() should be OK? + + for (mkSection.Init(shape, line, Precision::Confusion()); mkSection.More(); mkSection.Next()) { + gp_Pnt iPnt = mkSection.Pnt(); + double dsq = cog.SquareDistance(iPnt); + + if (dsq < Precision::Confusion()) + continue; // intersection with original face + + // Find out which side of the original face the intersection is on + gce_MakeDir mkDir(cog, iPnt); + if (!mkDir.IsDone()) + continue; // some error (appears highly unlikely to happen, though...) + + if (mkDir.Value().IsOpposite(dir, Precision::Confusion())) + continue; // wrong side of face (opposite to extrusion direction) + + cutFaces newF; + newF.face = mkSection.Face(); + newF.distsq = dsq; + result.push_back(newF); + } + + return result; +} +// -------------------------------------------------------------------- diff --git a/src/Mod/Part/App/PartFeature.h b/src/Mod/Part/App/PartFeature.h index 689736a42..ed3de3737 100644 --- a/src/Mod/Part/App/PartFeature.h +++ b/src/Mod/Part/App/PartFeature.h @@ -29,9 +29,16 @@ #include #include #include +// includes for findAllFacesCutBy() +#include +class gp_Dir; class BRepBuilderAPI_MakeShape; +// includes for findAllFacesCutBy() +#include +class gp_Dir; + namespace Part { @@ -63,9 +70,22 @@ public: virtual PyObject* getPyObject(void); virtual std::vector getPySubObjects(const std::vector&) const; + /** + /* Find the origin of a reference, e.g. the vertex or edge in a sketch that + /* produced a face + */ + const TopoDS_Shape findOriginOf(const TopoDS_Shape& reference); + protected: void onChanged(const App::Property* prop); TopLoc_Location getLocation() const; + /** + /* Build a history of changes + /* MakeShape: The operation that created the changes, e.g. BRepAlgoAPI_Common + /* type: The type of object we are interested in, e.g. TopAbs_FACE + /* newS: The new shape that was created by the operation + /* oldS: The original shape prior to the operation + */ ShapeHistory buildHistory(BRepBuilderAPI_MakeShape&, TopAbs_ShapeEnum type, const TopoDS_Shape& newS, const TopoDS_Shape& oldS); ShapeHistory joinHistory(const ShapeHistory&, const ShapeHistory&); @@ -99,6 +119,18 @@ public: } }; +// Utility methods +/** +/* Find all faces cut by a line through the centre of gravity of a given face +/* Useful for the "up to face" options to pocket or pad +*/ +struct cutFaces { + TopoDS_Face face; + double distsq; +}; +std::vector findAllFacesCutBy(const TopoDS_Shape& shape, + const TopoDS_Shape& face, const gp_Dir& dir); + } //namespace Part diff --git a/src/Mod/PartDesign/App/FeaturePad.cpp b/src/Mod/PartDesign/App/FeaturePad.cpp index 1a12c4556..c7742c1f4 100644 --- a/src/Mod/PartDesign/App/FeaturePad.cpp +++ b/src/Mod/PartDesign/App/FeaturePad.cpp @@ -39,23 +39,32 @@ # include # include # include +# include +# include #endif #include #include +#include #include "FeaturePad.h" using namespace PartDesign; +const char* Pad::TypeEnums[]= {"Length","UpToLast","UpToFirst","UpToFace","TwoLengths",NULL}; + PROPERTY_SOURCE(PartDesign::Pad, PartDesign::Additive) Pad::Pad() { + ADD_PROPERTY(Type,((long)0)); + Type.setEnums(TypeEnums); ADD_PROPERTY(Length,(100.0)); ADD_PROPERTY(Reversed,(0)); - ADD_PROPERTY(MirroredExtent,(0)); + ADD_PROPERTY(Midplane,(0)); + ADD_PROPERTY(Length2,(100.0)); + ADD_PROPERTY(FaceName,("")); } short Pad::mustExecute() const @@ -63,8 +72,10 @@ short Pad::mustExecute() const if (Placement.isTouched() || Sketch.isTouched() || Length.isTouched() || - MirroredExtent.isTouched() || - Reversed.isTouched()) + Midplane.isTouched() || + Reversed.isTouched() || + Length2.isTouched() || + FaceName.isTouched()) return 1; return 0; } @@ -74,6 +85,10 @@ App::DocumentObjectExecReturn *Pad::execute(void) double L = Length.getValue(); if (L < Precision::Confusion()) return new App::DocumentObjectExecReturn("Length of pad too small"); + double L2 = Length2.getValue(); + if ((std::string(Type.getValueAsString()) == "TwoLengths") && (L < Precision::Confusion())) + return new App::DocumentObjectExecReturn("Second length of pad too small"); + App::DocumentObject* link = Sketch.getValue(); if (!link) return new App::DocumentObjectExecReturn("No sketch linked"); @@ -103,10 +118,8 @@ App::DocumentObjectExecReturn *Pad::execute(void) // get the Sketch plane Base::Placement SketchPos = static_cast(link)->Placement.getValue(); Base::Rotation SketchOrientation = SketchPos.getRotation(); - Base::Vector3d SketchOrientationVector(0,0,1); - if (Reversed.getValue()) // negative direction - SketchOrientationVector *= -1; - SketchOrientation.multVec(SketchOrientationVector,SketchOrientationVector); + Base::Vector3d SketchVector(0,0,1); + SketchOrientation.multVec(SketchVector,SketchVector); // get the support of the Sketch if any App::DocumentObject* SupportLink = static_cast(link)->Support.getValue(); @@ -118,27 +131,159 @@ App::DocumentObjectExecReturn *Pad::execute(void) if (aFace.IsNull()) return new App::DocumentObjectExecReturn("Creating a face from sketch failed"); - // lengthen the vector - SketchOrientationVector *= L; - this->positionBySketch(); TopLoc_Location invObjLoc = this->getLocation().Inverted(); try { // extrude the face to a solid - gp_Vec vec(SketchOrientationVector.x,SketchOrientationVector.y,SketchOrientationVector.z); - vec.Transform(invObjLoc.Transformation()); - BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),vec,0,1); - if (PrismMaker.IsDone()) { - // if the sketch has a support fuse them to get one result object (PAD!) - if (SupportObject) { - // At this point the prism can be a compound - TopoDS_Shape result = PrismMaker.Shape(); - // set the additive shape property for later usage in e.g. pattern - this->AddShape.setValue(result); + TopoDS_Shape prism; + bool isSolid = false; // support is a solid? + bool isSolidChecked = false; // not checked yet + + if ((std::string(Type.getValueAsString()) == "UpToLast") || + (std::string(Type.getValueAsString()) == "UpToFirst") || + (std::string(Type.getValueAsString()) == "UpToFace")) + { + TopoDS_Face upToFace; + gp_Dir dir(SketchVector.x,SketchVector.y,SketchVector.z); + + if ((std::string(Type.getValueAsString()) == "UpToLast") || + (std::string(Type.getValueAsString()) == "UpToFirst")) + { + // Check for valid support object + if (!SupportObject) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: No support in Sketch!"); const TopoDS_Shape& support = SupportObject->Shape.getValue(); - bool isSolid = false; + if (support.IsNull()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Support shape is invalid"); + TopExp_Explorer xp (support, TopAbs_SOLID); + if (!xp.More()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Support shape is not a solid"); + isSolid = true; + isSolidChecked = true; + + TopoDS_Shape origFace = makeFace(wires); // original sketch face before moving one unit + std::vector cfaces = Part::findAllFacesCutBy(support, origFace, dir); + if (cfaces.empty()) + return new App::DocumentObjectExecReturn("No faces found in this direction"); + + // Find nearest/furthest face + std::vector::const_iterator it, it_near, it_far; + it_near = it_far = cfaces.begin(); + for (it = cfaces.begin(); it != cfaces.end(); it++) + if (it->distsq > it_far->distsq) + it_far = it; + else if (it->distsq < it_near->distsq) + it_near = it; + upToFace = (std::string(Type.getValueAsString()) == "UpToLast" ? it_far->face : it_near->face); + } else { + if (FaceName.getValue() == "") + return new App::DocumentObjectExecReturn("Cannot extrude up to face: No face selected"); + + // Get active object, this is the object that the user referenced when he clicked on the face! + App::DocumentObject* baseLink = this->getDocument()->getActiveObject(); + + if (!baseLink) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: No object linked"); + if (!baseLink->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Linked object is not a Part object"); + Part::Feature *base = static_cast(baseLink); + const Part::TopoShape& baseShape = base->Shape.getShape(); + if (baseShape._Shape.IsNull()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Cannot work on invalid shape"); + + TopoDS_Shape sub = baseShape.getSubShape(FaceName.getValue()); + if (!sub.IsNull() && sub.ShapeType() == TopAbs_FACE) + upToFace = TopoDS::Face(sub); + else + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Selection is not a face"); + + // Validate face + // TODO: This would also exclude faces that are valid but not cut by the line + // So for now we trust to the intelligence of the user when picking the face + /*std::vector cfaces = findAllFacesCutBy(upToFace, origFace, dir); + if (cfaces.empty()) + return new App::DocumentObjectExecReturn("No faces found in this direction");*/ + } + + // Create semi-infinite prism from sketch in direction dir + // Hack, because the two lines commented out below do NOT work!!! + SketchVector *= 1E6; + gp_Vec vec(SketchVector.x,SketchVector.y,SketchVector.z); + vec.Transform(invObjLoc.Transformation()); + BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),vec,0,1); // very long, but finite prism + //dir.Transform(invObjLoc.Transformation()); + //BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),dir,0,0,1); + if (!PrismMaker.IsDone()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Could not extrude the sketch!"); + + // Cut off the prism at the face we found + // Grab any point from the sketch + TopExp_Explorer exp; + exp.Init(aFace, TopAbs_VERTEX); + if (!exp.More()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Sketch without points?"); + gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(exp.Current())); + + // Create a halfspace from the face, extending in direction of sketch plane + BRepPrimAPI_MakeHalfSpace mkHalfSpace(upToFace, aPnt); + if (!mkHalfSpace.IsDone()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: HalfSpace creation failed"); + + // Find common material between halfspace and prism + BRepAlgoAPI_Common mkCommon(PrismMaker.Shape(), mkHalfSpace.Solid().Moved(invObjLoc)); + if (!mkCommon.IsDone()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Common creation failed"); + + prism = this->getSolid(mkCommon.Shape()); + if (prism.IsNull()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Resulting shape is not a solid"); + } else if ((std::string(Type.getValueAsString()) == "Length") || + (std::string(Type.getValueAsString()) == "TwoLengths")) { + if (std::string(Type.getValueAsString()) == "Length") { + if (Midplane.getValue()) { + // Move face by half the extrusion distance to get pad symmetric to sketch plane + gp_Trsf mov; + mov.SetTranslation(gp_Vec(SketchVector.x,SketchVector.y,SketchVector.z) * (-1.0) * L/2.0); + TopLoc_Location loc(mov); + aFace.Move(loc); + } else if (Reversed.getValue()) { // negative direction + SketchVector *= -1.0; + } + + // lengthen the vector + SketchVector *= L; + } else { + // Move face by the second length to get pad extending to both sides of sketch plane + gp_Trsf mov; + mov.SetTranslation(gp_Vec(SketchVector.x,SketchVector.y,SketchVector.z) * (-1.0) * L2); + TopLoc_Location loc(mov); + aFace.Move(loc); + + // lengthen the vector + SketchVector *= (L + L2); + } + + // create the extrusion + gp_Vec vec(SketchVector.x,SketchVector.y,SketchVector.z); + vec.Transform(invObjLoc.Transformation()); + BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),vec,0,1); // finite prism + if (!PrismMaker.IsDone()) + return new App::DocumentObjectExecReturn("Could not extrude the sketch!"); + prism = PrismMaker.Shape(); + } else { + return new App::DocumentObjectExecReturn("Internal error: Unknown type for Pad feature"); + } + + // if the sketch has a support fuse them to get one result object (PAD!) + if (SupportObject) { + // set the additive shape property for later usage in e.g. pattern + this->AddShape.setValue(prism); + + const TopoDS_Shape& support = SupportObject->Shape.getValue(); + + if (!isSolidChecked) { // we haven't checked for solid, yet if (!support.IsNull()) { TopExp_Explorer xp; xp.Init(support,TopAbs_SOLID); @@ -147,32 +292,30 @@ App::DocumentObjectExecReturn *Pad::execute(void) break; } } - if (isSolid) { - // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Fuse mkFuse(support.Moved(invObjLoc), result); - // Let's check if the fusion has been successful - if (!mkFuse.IsDone()) - return new App::DocumentObjectExecReturn("Fusion with support failed"); - result = mkFuse.Shape(); - // we have to get the solids (fuse create seldomly compounds) - TopoDS_Shape solRes = this->getSolid(result); - // lets check if the result is a solid - if (solRes.IsNull()) - return new App::DocumentObjectExecReturn("Resulting shape is not a solid"); - this->Shape.setValue(solRes); - } - else + + if (!isSolid) return new App::DocumentObjectExecReturn("Support is not a solid"); } - else { - TopoDS_Shape result = this->getSolid(PrismMaker.Shape()); - // set the additive shape property for later usage in e.g. pattern - this->AddShape.setValue(result); - this->Shape.setValue(result); - } + + // Let's call algorithm computing a fuse operation: + BRepAlgoAPI_Fuse mkFuse(support.Moved(invObjLoc), prism); + // Let's check if the fusion has been successful + if (!mkFuse.IsDone()) + return new App::DocumentObjectExecReturn("Fusion with support failed"); + TopoDS_Shape result = mkFuse.Shape(); + // we have to get the solids (fuse create seldomly compounds) + TopoDS_Shape solRes = this->getSolid(result); + // lets check if the result is a solid + if (solRes.IsNull()) + return new App::DocumentObjectExecReturn("Resulting shape is not a solid"); + this->Shape.setValue(solRes); + } + else { + TopoDS_Shape result = this->getSolid(prism); + // set the additive shape property for later usage in e.g. pattern + this->AddShape.setValue(result); + this->Shape.setValue(result); } - else - return new App::DocumentObjectExecReturn("Could not extrude the sketch!"); return App::DocumentObject::StdReturn; } diff --git a/src/Mod/PartDesign/App/FeaturePad.h b/src/Mod/PartDesign/App/FeaturePad.h index c758c94f7..91bdeff59 100644 --- a/src/Mod/PartDesign/App/FeaturePad.h +++ b/src/Mod/PartDesign/App/FeaturePad.h @@ -38,10 +38,13 @@ class Pad : public Additive public: Pad(); - App::PropertyLength Length; + App::PropertyEnumeration Type; + App::PropertyLength Length; //App::PropertyEnumeration Side; - App::PropertyBool Reversed; - App::PropertyBool MirroredExtent; + App::PropertyBool Reversed; + App::PropertyBool Midplane; + App::PropertyLength Length2; + App::PropertyString FaceName; /** @name methods override feature */ //@{ @@ -54,7 +57,8 @@ public: } //@} private: - static const char* SideEnums[]; + static const char* TypeEnums[]; + //static const char* SideEnums[]; }; } //namespace PartDesign diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp index 8a902b2b9..d7c37b7b3 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp @@ -59,30 +59,106 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,QWidget *parent) connect(ui->doubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(onLengthChanged(double))); - connect(ui->checkBoxMirrored, SIGNAL(toggled(bool)), - this, SLOT(onMirrored(bool))); + connect(ui->checkBoxMidplane, SIGNAL(toggled(bool)), + this, SLOT(onMidplane(bool))); connect(ui->checkBoxReversed, SIGNAL(toggled(bool)), this, SLOT(onReversed(bool))); + connect(ui->doubleSpinBox2, SIGNAL(valueChanged(double)), + this, SLOT(onLength2Changed(double))); + connect(ui->changeMode, SIGNAL(currentIndexChanged(int)), + this, SLOT(onModeChanged(int))); + connect(ui->lineFaceName, SIGNAL(textEdited(QString)), + this, SLOT(onFaceName(QString))); this->groupLayout()->addWidget(proxy); + // Get the feature data PartDesign::Pad* pcPad = static_cast(PadView->getObject()); double l = pcPad->Length.getValue(); - bool mirrored = pcPad->MirroredExtent.getValue(); + bool midplane = pcPad->Midplane.getValue(); bool reversed = pcPad->Reversed.getValue(); + double l2 = pcPad->Length2.getValue(); + int index = pcPad->Type.getValue(); // must extract value here, clear() kills it! + const char* upToFace = pcPad->FaceName.getValue(); + // Fill data into dialog elements ui->doubleSpinBox->setMinimum(0); + ui->doubleSpinBox->setMaximum(INT_MAX); ui->doubleSpinBox->setValue(l); - ui->doubleSpinBox->selectAll(); - ui->checkBoxMirrored->setChecked(mirrored); + ui->doubleSpinBox2->setMinimum(0); + ui->doubleSpinBox2->setMaximum(INT_MAX); + ui->doubleSpinBox2->setValue(l2); + ui->checkBoxMidplane->setChecked(midplane); // According to bug #0000521 the reversed option // shouldn't be de-activated if the pad has a support face ui->checkBoxReversed->setChecked(reversed); + ui->lineFaceName->setText(upToFace == "" ? tr("No face selected") : tr(upToFace)); + ui->changeMode->clear(); + ui->changeMode->insertItem(0, tr("Dimension")); + ui->changeMode->insertItem(1, tr("To last")); + ui->changeMode->insertItem(2, tr("To first")); + ui->changeMode->insertItem(3, tr("Up to face")); + ui->changeMode->insertItem(4, tr("Two dimensions")); + ui->changeMode->setCurrentIndex(index); - // Make sure that the spin box has the focus to get key events - // Calling setFocus() directly doesn't work because the spin box is not - // yet visible. - QMetaObject::invokeMethod(ui->doubleSpinBox, "setFocus", Qt::QueuedConnection); + // activate and de-activate dialog elements as appropriate + updateUI(index); +} + +void TaskPadParameters::updateUI(int index) +{ + if (index == 0) { // dimension + ui->doubleSpinBox->setEnabled(true); + ui->doubleSpinBox->selectAll(); + // Make sure that the spin box has the focus to get key events + // Calling setFocus() directly doesn't work because the spin box is not + // yet visible. + QMetaObject::invokeMethod(ui->doubleSpinBox, "setFocus", Qt::QueuedConnection); + ui->checkBoxMidplane->setEnabled(true); + ui->checkBoxReversed->setEnabled(true); + ui->doubleSpinBox2->setEnabled(false); + ui->lineFaceName->setEnabled(false); + } else if ((index == 1) || (index == 2)) { // up to first/last + ui->doubleSpinBox->setEnabled(false); + ui->checkBoxMidplane->setEnabled(false); + ui->checkBoxReversed->setEnabled(false); + ui->doubleSpinBox2->setEnabled(false); + ui->lineFaceName->setEnabled(false); + } else if (index == 3) { // up to face + ui->doubleSpinBox->setEnabled(false); + ui->checkBoxMidplane->setEnabled(false); + ui->checkBoxReversed->setEnabled(false); + ui->doubleSpinBox2->setEnabled(false); + ui->lineFaceName->setEnabled(true); + QMetaObject::invokeMethod(ui->lineFaceName, "setFocus", Qt::QueuedConnection); + } else { // two dimensions + ui->doubleSpinBox->setEnabled(true); + ui->doubleSpinBox->selectAll(); + QMetaObject::invokeMethod(ui->doubleSpinBox, "setFocus", Qt::QueuedConnection); + ui->checkBoxMidplane->setEnabled(false); + ui->checkBoxReversed->setEnabled(false); + ui->doubleSpinBox2->setEnabled(true); + ui->lineFaceName->setEnabled(false); + } +} + +void TaskPadParameters::onSelectionChanged(const Gui::SelectionChanges& msg) +{ + PartDesign::Pad* pcPad = static_cast(PadView->getObject()); + if (pcPad->Type.getValue() != 3) // ignore user selections if mode is not upToFace + return; + + if (!msg.pSubName || msg.pSubName[0] == '\0') + return; + std::string element(msg.pSubName); + if (element.substr(0,4) != "Face") + return; + + if (msg.Type == Gui::SelectionChanges::AddSelection) { + pcPad->FaceName.setValue(element); + pcPad->getDocument()->recomputeFeature(pcPad); + ui->lineFaceName->setText(tr(element.c_str())); + } } void TaskPadParameters::onLengthChanged(double len) @@ -92,10 +168,10 @@ void TaskPadParameters::onLengthChanged(double len) pcPad->getDocument()->recomputeFeature(pcPad); } -void TaskPadParameters::onMirrored(bool on) +void TaskPadParameters::onMidplane(bool on) { PartDesign::Pad* pcPad = static_cast(PadView->getObject()); - pcPad->MirroredExtent.setValue(on); + pcPad->Midplane.setValue(on); pcPad->getDocument()->recomputeFeature(pcPad); } @@ -106,6 +182,40 @@ void TaskPadParameters::onReversed(bool on) pcPad->getDocument()->recomputeFeature(pcPad); } +void TaskPadParameters::onLength2Changed(double len) +{ + PartDesign::Pad* pcPad = static_cast(PadView->getObject()); + pcPad->Length2.setValue((float)len); + pcPad->getDocument()->recomputeFeature(pcPad); +} + +void TaskPadParameters::onModeChanged(int index) +{ + PartDesign::Pad* pcPad = static_cast(PadView->getObject()); + + switch (index) { + case 0: pcPad->Type.setValue("Length"); break; + case 1: pcPad->Type.setValue("UpToLast"); break; + case 2: pcPad->Type.setValue("UpToFirst"); break; + case 3: pcPad->Type.setValue("UpToFace"); break; + default: pcPad->Type.setValue("TwoLengths"); + } + + updateUI(index); + + pcPad->getDocument()->recomputeFeature(pcPad); +} + +void TaskPadParameters::onFaceName(const QString& text) +{ + if (text.left(4) != tr("Face")) + return; + + PartDesign::Pad* pcPad = static_cast(PadView->getObject()); + pcPad->FaceName.setValue(text.toUtf8()); + pcPad->getDocument()->recomputeFeature(pcPad); +} + double TaskPadParameters::getLength(void) const { return ui->doubleSpinBox->value(); @@ -116,9 +226,24 @@ bool TaskPadParameters::getReversed(void) const return ui->checkBoxReversed->isChecked(); } -bool TaskPadParameters::getMirroredExtent(void) const +bool TaskPadParameters::getMidplane(void) const { - return ui->checkBoxMirrored->isChecked(); + return ui->checkBoxMidplane->isChecked(); +} + +double TaskPadParameters::getLength2(void) const +{ + return ui->doubleSpinBox2->value(); +} + +int TaskPadParameters::getMode(void) const +{ + return ui->changeMode->currentIndex(); +} + +const QString TaskPadParameters::getFaceName(void) const +{ + return ui->lineFaceName->text(); } TaskPadParameters::~TaskPadParameters() @@ -174,7 +299,10 @@ bool TaskDlgPadParameters::accept() //Gui::Command::openCommand("Pad changed"); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Length = %f",name.c_str(),parameter->getLength()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Reversed = %i",name.c_str(),parameter->getReversed()?1:0); - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.MirroredExtent = %i",name.c_str(),parameter->getMirroredExtent()?1:0); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Midplane = %i",name.c_str(),parameter->getMidplane()?1:0); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Length2 = %f",name.c_str(),parameter->getLength2()); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Type = %u",name.c_str(),parameter->getMode()); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.FaceName = \"%s\"",name.c_str(),parameter->getFaceName().toAscii().data()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); if (!PadView->getObject()->isValid()) throw Base::Exception(PadView->getObject()->getStatusString()); diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.h b/src/Mod/PartDesign/Gui/TaskPadParameters.h index c16493cad..53afdacd0 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.h @@ -44,7 +44,7 @@ namespace PartDesignGui { -class TaskPadParameters : public Gui::TaskView::TaskBox +class TaskPadParameters : public Gui::TaskView::TaskBox, public Gui::SelectionObserver { Q_OBJECT @@ -52,19 +52,27 @@ public: TaskPadParameters(ViewProviderPad *PadView,QWidget *parent = 0); ~TaskPadParameters(); + int getMode(void) const; double getLength(void) const; + double getLength2(void) const; bool getReversed(void) const; - bool getMirroredExtent(void) const; + bool getMidplane(void) const; + const QString getFaceName(void) const; private Q_SLOTS: void onLengthChanged(double); - void onMirrored(bool); + void onMidplane(bool); void onReversed(bool); + void onLength2Changed(double); + void onModeChanged(int); + void onFaceName(const QString& text); protected: void changeEvent(QEvent *e); private: + void onSelectionChanged(const Gui::SelectionChanges& msg); + void updateUI(int index); private: QWidget* proxy; diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.ui b/src/Mod/PartDesign/Gui/TaskPadParameters.ui index d407bbf31..d1f2601cb 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.ui @@ -6,8 +6,8 @@ 0 0 - 158 - 116 + 272 + 238 @@ -19,7 +19,7 @@ - Type: + Type @@ -39,7 +39,7 @@ - Length: + Length @@ -55,19 +55,19 @@ 5.000000000000000 - 20.000000000000000 + 10.000000000000000 - + - false + true - Mirrored extent + Symmetric to plane @@ -78,6 +78,47 @@ + + + + + + 2nd length + + + + + + + -999999999.000000000000000 + + + 999999999.000000000000000 + + + 5.000000000000000 + + + 0.000000000000000 + + + + + + + + + + + Face + + + + + + + + From 3e5c374a9bb84434c129f8d7bc1b721bb3978144 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 8 Jun 2012 18:02:35 +0200 Subject: [PATCH 313/517] Fix build errors on Windows, fix a couple of bugs --- src/Mod/Part/App/PartFeature.cpp | 2 +- src/Mod/Part/App/PartFeature.h | 2 ++ src/Mod/PartDesign/App/FeaturePad.cpp | 5 +++-- src/Mod/PartDesign/App/FeaturePocket.cpp | 1 + src/Mod/PartDesign/Gui/Command.cpp | 5 +++-- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Mod/Part/App/PartFeature.cpp b/src/Mod/Part/App/PartFeature.cpp index ed936a46b..45e0076e9 100644 --- a/src/Mod/Part/App/PartFeature.cpp +++ b/src/Mod/Part/App/PartFeature.cpp @@ -272,6 +272,7 @@ template class PartExport FeaturePythonT; } // ---------------------------------------------------------------- + #include #include #include @@ -318,4 +319,3 @@ std::vector Part::findAllFacesCutBy( return result; } -// -------------------------------------------------------------------- diff --git a/src/Mod/Part/App/PartFeature.h b/src/Mod/Part/App/PartFeature.h index ed3de3737..9bb4bd49a 100644 --- a/src/Mod/Part/App/PartFeature.h +++ b/src/Mod/Part/App/PartFeature.h @@ -128,6 +128,8 @@ struct cutFaces { TopoDS_Face face; double distsq; }; + +PartExport std::vector findAllFacesCutBy(const TopoDS_Shape& shape, const TopoDS_Shape& face, const gp_Dir& dir); diff --git a/src/Mod/PartDesign/App/FeaturePad.cpp b/src/Mod/PartDesign/App/FeaturePad.cpp index c7742c1f4..c5791abcd 100644 --- a/src/Mod/PartDesign/App/FeaturePad.cpp +++ b/src/Mod/PartDesign/App/FeaturePad.cpp @@ -26,6 +26,7 @@ //# include //# include # include +# include # include # include # include @@ -87,7 +88,7 @@ App::DocumentObjectExecReturn *Pad::execute(void) return new App::DocumentObjectExecReturn("Length of pad too small"); double L2 = Length2.getValue(); if ((std::string(Type.getValueAsString()) == "TwoLengths") && (L < Precision::Confusion())) - return new App::DocumentObjectExecReturn("Second length of pad too small"); + return new App::DocumentObjectExecReturn("Second length of pad too small"); App::DocumentObject* link = Sketch.getValue(); if (!link) @@ -178,7 +179,7 @@ App::DocumentObjectExecReturn *Pad::execute(void) it_near = it; upToFace = (std::string(Type.getValueAsString()) == "UpToLast" ? it_far->face : it_near->face); } else { - if (FaceName.getValue() == "") + if (FaceName.isEmpty()) return new App::DocumentObjectExecReturn("Cannot extrude up to face: No face selected"); // Get active object, this is the object that the user referenced when he clicked on the face! diff --git a/src/Mod/PartDesign/App/FeaturePocket.cpp b/src/Mod/PartDesign/App/FeaturePocket.cpp index c7f4fa8ac..b6aec7dcd 100644 --- a/src/Mod/PartDesign/App/FeaturePocket.cpp +++ b/src/Mod/PartDesign/App/FeaturePocket.cpp @@ -27,6 +27,7 @@ # include # include # include +# include # include # include # include diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index d671fbe46..c69df762f 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -338,10 +338,11 @@ CmdPartDesignGroove::CmdPartDesignGroove() sAppModule = "PartDesign"; sGroup = QT_TR_NOOP("PartDesign"); sMenuText = QT_TR_NOOP("Groove"); - sToolTipText = QT_TR_NOOP("Revolve a selected sketch"); + sToolTipText = QT_TR_NOOP("Groove a selected sketch"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; - sPixmap = "PartDesign_Groove"; + //sPixmap = "PartDesign_Groove"; + sPixmap = "PartDesign_Revolution"; } void CmdPartDesignGroove::activated(int iMsg) From 85342cd8ae1eae7673717a3295948178a869038e Mon Sep 17 00:00:00 2001 From: jrheinlaender Date: Fri, 8 Jun 2012 20:00:44 +0430 Subject: [PATCH 314/517] Pocket Feature: up to first/last/face and through all options --- data/tests/PocketTest.fcstd | Bin 0 -> 13766 bytes src/Mod/PartDesign/App/FeaturePocket.cpp | 174 ++++++++++++++---- src/Mod/PartDesign/App/FeaturePocket.h | 1 + .../PartDesign/Gui/TaskPocketParameters.cpp | 102 +++++++++- src/Mod/PartDesign/Gui/TaskPocketParameters.h | 7 +- .../PartDesign/Gui/TaskPocketParameters.ui | 120 ++++++++---- 6 files changed, 329 insertions(+), 75 deletions(-) create mode 100644 data/tests/PocketTest.fcstd diff --git a/data/tests/PocketTest.fcstd b/data/tests/PocketTest.fcstd new file mode 100644 index 0000000000000000000000000000000000000000..6acf91ba055c2b8fd6614aecde44c161b3f5d616 GIT binary patch literal 13766 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ᦼ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 B3F80& literal 0 HcmV?d00001 diff --git a/src/Mod/PartDesign/App/FeaturePocket.cpp b/src/Mod/PartDesign/App/FeaturePocket.cpp index b6aec7dcd..a0ef1cdd4 100644 --- a/src/Mod/PartDesign/App/FeaturePocket.cpp +++ b/src/Mod/PartDesign/App/FeaturePocket.cpp @@ -41,17 +41,20 @@ # include # include # include +# include +# include #endif #include #include +#include #include "FeaturePocket.h" using namespace PartDesign; -const char* Pocket::TypeEnums[]= {"Length","UpToLast","UpToFirst",NULL}; +const char* Pocket::TypeEnums[]= {"Length","UpToLast","UpToFirst","ThroughAll","UpToFace",NULL}; PROPERTY_SOURCE(PartDesign::Pocket, PartDesign::SketchBased) @@ -60,13 +63,15 @@ Pocket::Pocket() ADD_PROPERTY(Type,((long)0)); Type.setEnums(TypeEnums); ADD_PROPERTY(Length,(100.0)); + ADD_PROPERTY(FaceName,("")); } short Pocket::mustExecute() const { if (Placement.isTouched() || Sketch.isTouched() || - Length.isTouched()) + Length.isTouched() || + FaceName.isTouched()) return 1; return 0; } @@ -114,13 +119,22 @@ App::DocumentObjectExecReturn *Pocket::execute(void) if (!SupportObject) return new App::DocumentObjectExecReturn("No support in Sketch!"); + const TopoDS_Shape& support = SupportObject->Shape.getValue(); + if (support.IsNull()) + return new App::DocumentObjectExecReturn("Support shape is invalid"); + TopExp_Explorer xp (support, TopAbs_SOLID); + if (!xp.More()) + return new App::DocumentObjectExecReturn("Support shape is not a solid"); + TopoDS_Shape aFace = makeFace(wires); if (aFace.IsNull()) return new App::DocumentObjectExecReturn("Creating a face from sketch failed"); // This is a trick to avoid problems with the cut operation. Sometimes a cut doesn't - // work as expected if faces or coincident. Thus, we move the face in normal direction + // work as expected if faces are coincident. Thus, we move the face in normal direction // but make it longer by one unit in the opposite direction. + // TODO: Isn't one unit (one millimeter) a lot, assuming someone models a really tiny solid? + // What about using 2 * Precision::Confusion() ? gp_Trsf mov; mov.SetTranslation(gp_Vec(SketchVector.x,SketchVector.y,SketchVector.z)); TopLoc_Location loc(mov); @@ -135,39 +149,133 @@ App::DocumentObjectExecReturn *Pocket::execute(void) this->positionBySketch(); TopLoc_Location invObjLoc = this->getLocation().Inverted(); - // extrude the face to a solid - gp_Vec vec(SketchVector.x,SketchVector.y,SketchVector.z); - vec.Transform(invObjLoc.Transformation()); - BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),vec,0,1); - if (PrismMaker.IsDone()) { - // if the sketch has a support fuse them to get one result object (PAD!) - if (SupportObject) { - const TopoDS_Shape& support = SupportObject->Shape.getValue(); - if (support.IsNull()) - return new App::DocumentObjectExecReturn("Support shape is invalid"); - TopExp_Explorer xp (support, TopAbs_SOLID); - if (!xp.More()) - return new App::DocumentObjectExecReturn("Support shape is not a solid"); - // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Cut mkCut(support.Moved(invObjLoc), PrismMaker.Shape()); - // Let's check if the fusion has been successful - if (!mkCut.IsDone()) - return new App::DocumentObjectExecReturn("Cut with support failed"); + try { + // extrude the face to a solid + TopoDS_Shape prism; - // we have to get the solids (fuse create seldomly compounds) - TopoDS_Shape solRes = this->getSolid(mkCut.Shape()); - if (solRes.IsNull()) - return new App::DocumentObjectExecReturn("Resulting shape is not a solid"); + if ((std::string(Type.getValueAsString()) == "UpToLast") || + (std::string(Type.getValueAsString()) == "UpToFirst") || + (std::string(Type.getValueAsString()) == "UpToFace")) + { + TopoDS_Face upToFace; + gp_Dir dir(SketchVector.x,SketchVector.y,SketchVector.z); - this->Shape.setValue(solRes); - } - else { - return new App::DocumentObjectExecReturn("Cannot create a tool out of sketch with no support"); + if ((std::string(Type.getValueAsString()) == "UpToLast") || + (std::string(Type.getValueAsString()) == "UpToFirst")) + { + TopoDS_Shape origFace = makeFace(wires); // original sketch face before moving one unit + std::vector cfaces = Part::findAllFacesCutBy(support, origFace, dir); + if (cfaces.empty()) + return new App::DocumentObjectExecReturn("No faces found in this direction"); + + // Find nearest/furthest face + std::vector::const_iterator it, it_near, it_far; + it_near = it_far = cfaces.begin(); + for (it = cfaces.begin(); it != cfaces.end(); it++) + if (it->distsq > it_far->distsq) + it_far = it; + else if (it->distsq < it_near->distsq) + it_near = it; + upToFace = (std::string(Type.getValueAsString()) == "UpToLast" ? it_far->face : it_near->face); + } else { + if (FaceName.getValue() == "") + return new App::DocumentObjectExecReturn("Cannot extrude up to face: No face selected"); + + // Get active object, this is the object that the user referenced when he clicked on the face! + App::DocumentObject* baseLink = this->getDocument()->getActiveObject(); + + if (!baseLink) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: No object linked"); + if (!baseLink->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Linked object is not a Part object"); + Part::Feature *base = static_cast(baseLink); + const Part::TopoShape& baseShape = base->Shape.getShape(); + if (baseShape._Shape.IsNull()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Cannot work on invalid shape"); + + TopoDS_Shape sub = baseShape.getSubShape(FaceName.getValue()); + if (!sub.IsNull() && sub.ShapeType() == TopAbs_FACE) + upToFace = TopoDS::Face(sub); + else + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Selection is not a face"); + + // Find the origin of this face (i.e. a vertex or a edge in a sketch) + TopoDS_Shape origin = base->findOriginOf(sub); + + // Validate face + // TODO: This would also exclude faces that are valid but not cut by the line + // So for now we trust to the intelligence of the user when picking the face + /*std::vector cfaces = findAllFacesCutBy(upToFace, origFace, dir); + if (cfaces.empty()) + return new App::DocumentObjectExecReturn("No faces found in this direction");*/ + } + + // Create semi-infinite prism from sketch in direction dir + dir.Transform(invObjLoc.Transformation()); + BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),dir,0,0,1); + if (!PrismMaker.IsDone()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Could not extrude the sketch!"); + + // Cut off the prism at the face we found + // Grab any point from the sketch + TopExp_Explorer exp; + exp.Init(aFace, TopAbs_VERTEX); + if (!exp.More()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Sketch without points?"); + gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(exp.Current())); + + // Create a halfspace from the face, extending in direction of sketch plane + BRepPrimAPI_MakeHalfSpace mkHalfSpace(upToFace, aPnt); + if (!mkHalfSpace.IsDone()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: HalfSpace creation failed"); + + // Find common material between halfspace and prism + BRepAlgoAPI_Common mkCommon(PrismMaker.Shape(), mkHalfSpace.Solid().Moved(invObjLoc)); + if (!mkCommon.IsDone()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Common creation failed"); + + prism = this->getSolid(mkCommon.Shape()); + if (prism.IsNull()) + return new App::DocumentObjectExecReturn("Cannot extrude up to face: Resulting shape is not a solid"); + } else if (std::string(Type.getValueAsString()) == "ThroughAll") { + gp_Dir dir(SketchVector.x,SketchVector.y,SketchVector.z); + dir.Transform(invObjLoc.Transformation()); + BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),dir,1,0,1); // infinite prism (in both directions!) + if (!PrismMaker.IsDone()) + return new App::DocumentObjectExecReturn("Could not extrude the sketch!"); + prism = PrismMaker.Shape(); + } else if (std::string(Type.getValueAsString()) == "Length") { + gp_Vec vec(SketchVector.x,SketchVector.y,SketchVector.z); + vec.Transform(invObjLoc.Transformation()); + BRepPrimAPI_MakePrism PrismMaker(aFace.Moved(invObjLoc),vec,0,1); // finite prism + if (!PrismMaker.IsDone()) + return new App::DocumentObjectExecReturn("Could not extrude the sketch!"); + prism = PrismMaker.Shape(); + } else { + return new App::DocumentObjectExecReturn("Internal error: Unknown type for Pocket feature"); } + + // TODO: Set the subtractive shape property for later usage in e.g. pattern + //this->SubShape.setValue(prism); // This crashes with "Illegal storage access". Why? + + // Cut out the pocket + BRepAlgoAPI_Cut mkCut(support.Moved(invObjLoc), prism); + + // Let's check if the fusion has been successful + if (!mkCut.IsDone()) + return new App::DocumentObjectExecReturn("Cut with support failed"); + + // we have to get the solids (fuse sometimes creates compounds) + TopoDS_Shape solRes = this->getSolid(mkCut.Shape()); + if (solRes.IsNull()) + return new App::DocumentObjectExecReturn("Resulting shape is not a solid"); + + this->Shape.setValue(solRes); + + return App::DocumentObject::StdReturn; + } catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + return new App::DocumentObjectExecReturn(e->GetMessageString()); } - else - return new App::DocumentObjectExecReturn("Could not extrude the sketch!"); - - return App::DocumentObject::StdReturn; } diff --git a/src/Mod/PartDesign/App/FeaturePocket.h b/src/Mod/PartDesign/App/FeaturePocket.h index 7a7d57962..b9b47aa72 100644 --- a/src/Mod/PartDesign/App/FeaturePocket.h +++ b/src/Mod/PartDesign/App/FeaturePocket.h @@ -39,6 +39,7 @@ public: App::PropertyEnumeration Type; App::PropertyLength Length; + App::PropertyString FaceName; /** @name methods override feature */ //@{ diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp index 30618f621..2122bafd1 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp @@ -58,16 +58,39 @@ TaskPocketParameters::TaskPocketParameters(ViewProviderPocket *PocketView,QWidge connect(ui->doubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(onLengthChanged(double))); + connect(ui->changeMode, SIGNAL(currentIndexChanged(int)), + this, SLOT(onModeChanged(int))); + connect(ui->lineFaceName, SIGNAL(textEdited(QString)), + this, SLOT(onFaceName(QString))); this->groupLayout()->addWidget(proxy); PartDesign::Pocket* pcPocket = static_cast(PocketView->getObject()); double l = pcPocket->Length.getValue(); + int index = pcPocket->Type.getValue(); // must extract value here, clear() kills it! + const char* upToFace = pcPocket->FaceName.getValue(); - ui->doubleSpinBox->setMaximum(INT_MAX); - ui->doubleSpinBox->setValue(l); - ui->doubleSpinBox->selectAll(); - QMetaObject::invokeMethod(ui->doubleSpinBox, "setFocus", Qt::QueuedConnection); + ui->changeMode->clear(); + ui->changeMode->insertItem(0, tr("Dimension")); + ui->changeMode->insertItem(1, tr("To last")); + ui->changeMode->insertItem(2, tr("To first")); + ui->changeMode->insertItem(3, tr("Through all")); + ui->changeMode->insertItem(4, tr("Up to face")); + ui->changeMode->setCurrentIndex(index); + + if (index == 0) { // Only this option requires a numeric value + ui->doubleSpinBox->setMaximum(INT_MAX); + ui->doubleSpinBox->setValue(l); + ui->doubleSpinBox->selectAll(); + QMetaObject::invokeMethod(ui->doubleSpinBox, "setFocus", Qt::QueuedConnection); + ui->lineFaceName->setEnabled(false); + } else if (index == 4) { // Only this option requires to select a face + ui->doubleSpinBox->setEnabled(false); + ui->lineFaceName->setText(upToFace == "" ? tr("No face selected") : tr(upToFace)); + } else { // Neither value nor face required + ui->doubleSpinBox->setEnabled(false); + ui->lineFaceName->setEnabled(false); + } //// check if the sketch has support //Sketcher::SketchObject *pcSketch; @@ -81,6 +104,25 @@ TaskPocketParameters::TaskPocketParameters(ViewProviderPocket *PocketView,QWidge //} } +void TaskPocketParameters::onSelectionChanged(const Gui::SelectionChanges& msg) +{ + PartDesign::Pocket* pcPocket = static_cast(PocketView->getObject()); + if (pcPocket->Type.getValue() != 4) // ignore user selections if mode is not upToFace + return; + + if (!msg.pSubName || msg.pSubName[0] == '\0') + return; + std::string element(msg.pSubName); + if (element.substr(0,4) != "Face") + return; + + if (msg.Type == Gui::SelectionChanges::AddSelection) { + pcPocket->FaceName.setValue(element); + pcPocket->getDocument()->recomputeFeature(pcPocket); + ui->lineFaceName->setText(tr(element.c_str())); + } +} + void TaskPocketParameters::onLengthChanged(double len) { PartDesign::Pocket* pcPocket = static_cast(PocketView->getObject()); @@ -88,11 +130,59 @@ void TaskPocketParameters::onLengthChanged(double len) pcPocket->getDocument()->recomputeFeature(pcPocket); } +void TaskPocketParameters::onModeChanged(int index) +{ + PartDesign::Pocket* pcPocket = static_cast(PocketView->getObject()); + + switch (index) { + case 0: pcPocket->Type.setValue("Length"); break; + case 1: pcPocket->Type.setValue("UpToLast"); break; + case 2: pcPocket->Type.setValue("UpToFirst"); break; + case 3: pcPocket->Type.setValue("ThroughAll"); break; + case 4: pcPocket->Type.setValue("UpToFace"); break; + default: pcPocket->Type.setValue("Length"); + } + + if (index == 0) { + ui->doubleSpinBox->setEnabled(true); + ui->lineFaceName->setEnabled(false); + ui->doubleSpinBox->setValue(pcPocket->Length.getValue()); + } else if (index == 4) { + ui->lineFaceName->setEnabled(true); + ui->doubleSpinBox->setEnabled(false); + ui->lineFaceName->setText(tr(pcPocket->FaceName.getValue())); + } else { + ui->doubleSpinBox->setEnabled(false); + ui->lineFaceName->setEnabled(false); + } + + pcPocket->getDocument()->recomputeFeature(pcPocket); +} + +void TaskPocketParameters::onFaceName(const QString& text) +{ + if (text.left(4) != tr("Face")) + return; + + PartDesign::Pocket* pcPocket = static_cast(PocketView->getObject()); + pcPocket->FaceName.setValue(text.toUtf8()); + pcPocket->getDocument()->recomputeFeature(pcPocket); +} + double TaskPocketParameters::getLength(void) const { return ui->doubleSpinBox->value(); } +int TaskPocketParameters::getMode(void) const +{ + return ui->changeMode->currentIndex(); +} + +const QString TaskPocketParameters::getFaceName(void) const +{ + return ui->lineFaceName->text(); +} TaskPocketParameters::~TaskPocketParameters() { @@ -145,6 +235,8 @@ bool TaskDlgPocketParameters::accept() //Gui::Command::openCommand("Pocket changed"); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Length = %f",name.c_str(),parameter->getLength()); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Type = %u",name.c_str(),parameter->getMode()); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.FaceName = \"%s\"",name.c_str(),parameter->getFaceName().toAscii().data()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); Gui::Command::commitCommand(); @@ -163,7 +255,7 @@ bool TaskDlgPocketParameters::reject() pcSupport = pcSketch->Support.getValue(); } - // role back the done things + // roll back the done things Gui::Command::abortCommand(); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.h b/src/Mod/PartDesign/Gui/TaskPocketParameters.h index 077a9ef0c..bbb6bbb3f 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.h @@ -44,7 +44,7 @@ namespace PartDesignGui { -class TaskPocketParameters : public Gui::TaskView::TaskBox +class TaskPocketParameters : public Gui::TaskView::TaskBox, public Gui::SelectionObserver { Q_OBJECT @@ -53,14 +53,19 @@ public: ~TaskPocketParameters(); double getLength(void) const; + int getMode(void) const; + const QString getFaceName(void) const; private Q_SLOTS: void onLengthChanged(double); + void onModeChanged(int); + void onFaceName(const QString& text); protected: void changeEvent(QEvent *e); private: + void onSelectionChanged(const Gui::SelectionChanges& msg); private: QWidget* proxy; diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.ui b/src/Mod/PartDesign/Gui/TaskPocketParameters.ui index 34c8979a1..4f313be76 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.ui @@ -6,49 +6,97 @@ 0 0 - 137 - 68 + 241 + 134 + + + 0 + 0 + + + + + 233 + 134 + + Form - - - - - + + + + 10 + 10 + 211 + 34 + + + + + + + Type + + + + + + - Type: + Dimension - - - - - - - Dimension - - - - - - - - - - - - Length - - - - - - - - - + + + + + + + + + 10 + 90 + 211 + 34 + + + + + + + Face + + + + + + + + + + + + 10 + 50 + 211 + 34 + + + + + + + Length + + + + + + + + From 58a02d24ae2ad93a6d8a7321d44a37fc88c105b7 Mon Sep 17 00:00:00 2001 From: jrheinlaender Date: Fri, 8 Jun 2012 20:07:18 +0430 Subject: [PATCH 315/517] Revolution feature: Midplane and Reversed options --- src/Mod/PartDesign/App/FeatureRevolution.cpp | 62 +++++++++++++------ src/Mod/PartDesign/App/FeatureRevolution.h | 4 +- .../Gui/TaskRevolutionParameters.cpp | 35 +++++++++++ .../PartDesign/Gui/TaskRevolutionParameters.h | 4 ++ .../Gui/TaskRevolutionParameters.ui | 23 ++++++- 5 files changed, 104 insertions(+), 24 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureRevolution.cpp b/src/Mod/PartDesign/App/FeatureRevolution.cpp index 317aa52d1..1a14783ae 100644 --- a/src/Mod/PartDesign/App/FeatureRevolution.cpp +++ b/src/Mod/PartDesign/App/FeatureRevolution.cpp @@ -56,6 +56,8 @@ Revolution::Revolution() ADD_PROPERTY(Axis,(Base::Vector3f(0.0f,1.0f,0.0f))); ADD_PROPERTY(Angle,(360.0)); ADD_PROPERTY_TYPE(ReferenceAxis,(0),"Revolution",(App::PropertyType)(App::Prop_None),"Reference axis of revolution"); + ADD_PROPERTY(Midplane,(0)); + ADD_PROPERTY(Reversed, (0)); } short Revolution::mustExecute() const @@ -65,7 +67,8 @@ short Revolution::mustExecute() const ReferenceAxis.isTouched() || Axis.isTouched() || Base.isTouched() || - Angle.isTouched()) + Angle.isTouched() || + Midplane.isTouched()) return 1; return 0; } @@ -151,35 +154,54 @@ App::DocumentObjectExecReturn *Revolution::execute(void) if (aFace.IsNull()) return new App::DocumentObjectExecReturn("Creating a face from sketch failed"); + // Rotate the face by half the angle to get revolution symmetric to sketch plane + if (Midplane.getValue()) { + gp_Trsf mov; + mov.SetRotation(gp_Ax1(pnt, dir), Base::toRadians(Angle.getValue()) * (-1.0) / 2.0); + TopLoc_Location loc(mov); + aFace.Move(loc); + } + this->positionBySketch(); TopLoc_Location invObjLoc = this->getLocation().Inverted(); pnt.Transform(invObjLoc.Transformation()); dir.Transform(invObjLoc.Transformation()); - // revolve the face to a solid - BRepPrimAPI_MakeRevol RevolMaker(aFace.Moved(invObjLoc), gp_Ax1(pnt, dir), Base::toRadians(Angle.getValue())); + // Reverse angle if selected + double angle = Base::toRadians(Angle.getValue()); + if (Reversed.getValue() && !Midplane.getValue()) + angle *= (-1.0); - if (RevolMaker.IsDone()) { - TopoDS_Shape result = RevolMaker.Shape(); - // if the sketch has a support fuse them to get one result object (PAD!) - if (SupportObject) { - const TopoDS_Shape& support = SupportObject->Shape.getValue(); - if (!support.IsNull() && support.ShapeType() == TopAbs_SOLID) { - // Let's call algorithm computing a fuse operation: - BRepAlgoAPI_Fuse mkFuse(support.Moved(invObjLoc), result); - // Let's check if the fusion has been successful - if (!mkFuse.IsDone()) - throw Base::Exception("Fusion with support failed"); - result = mkFuse.Shape(); + try { + // revolve the face to a solid + BRepPrimAPI_MakeRevol RevolMaker(aFace.Moved(invObjLoc), gp_Ax1(pnt, dir), angle); + + if (RevolMaker.IsDone()) { + TopoDS_Shape result = RevolMaker.Shape(); + // if the sketch has a support fuse them to get one result object (PAD!) + if (SupportObject) { + const TopoDS_Shape& support = SupportObject->Shape.getValue(); + if (!support.IsNull() && support.ShapeType() == TopAbs_SOLID) { + // Let's call algorithm computing a fuse operation: + BRepAlgoAPI_Fuse mkFuse(support.Moved(invObjLoc), result); + // Let's check if the fusion has been successful + if (!mkFuse.IsDone()) + throw Base::Exception("Fusion with support failed"); + result = mkFuse.Shape(); + } } + + this->Shape.setValue(result); } + else + return new App::DocumentObjectExecReturn("Could not revolve the sketch!"); - this->Shape.setValue(result); + return App::DocumentObject::StdReturn; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + return new App::DocumentObjectExecReturn(e->GetMessageString()); } - else - return new App::DocumentObjectExecReturn("Could not revolve the sketch!"); - - return App::DocumentObject::StdReturn; } } diff --git a/src/Mod/PartDesign/App/FeatureRevolution.h b/src/Mod/PartDesign/App/FeatureRevolution.h index 4d6677d54..ed11adc06 100644 --- a/src/Mod/PartDesign/App/FeatureRevolution.h +++ b/src/Mod/PartDesign/App/FeatureRevolution.h @@ -39,7 +39,9 @@ public: App::PropertyVector Base; App::PropertyVector Axis; - App::PropertyAngle Angle; + App::PropertyAngle Angle; + App::PropertyBool Midplane; + App::PropertyBool Reversed; /** if this property is set to a valid link, both Axis and Base properties * are calculated according to the linked line diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp index 05b01058f..f78134b74 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp @@ -60,11 +60,18 @@ TaskRevolutionParameters::TaskRevolutionParameters(ViewProviderRevolution *Revol this, SLOT(onAngleChanged(double))); connect(ui->axis, SIGNAL(activated(int)), this, SLOT(onAxisChanged(int))); + connect(ui->checkBoxMidplane, SIGNAL(toggled(bool)), + this, SLOT(onMidplane(bool))); + connect(ui->checkBoxReversed, SIGNAL(toggled(bool)), + this, SLOT(onReversed(bool))); this->groupLayout()->addWidget(proxy); PartDesign::Revolution* pcRevolution = static_cast(RevolutionView->getObject()); double l = pcRevolution->Angle.getValue(); + bool mirrored = pcRevolution->Midplane.getValue(); + bool reversed = pcRevolution->Reversed.getValue(); + ui->doubleSpinBox->setValue(l); int count=pcRevolution->getSketchAxisCount(); @@ -95,6 +102,9 @@ TaskRevolutionParameters::TaskRevolutionParameters(ViewProviderRevolution *Revol ui->axis->setCurrentIndex(pos); + ui->checkBoxMidplane->setChecked(mirrored); + ui->checkBoxReversed->setChecked(reversed); + setFocus (); } @@ -126,6 +136,19 @@ void TaskRevolutionParameters::onAxisChanged(int num) pcRevolution->getDocument()->recomputeFeature(pcRevolution); } +void TaskRevolutionParameters::onMidplane(bool on) +{ + PartDesign::Revolution* pcRevolution = static_cast(RevolutionView->getObject()); + pcRevolution->Midplane.setValue(on); + pcRevolution->getDocument()->recomputeFeature(pcRevolution); +} + +void TaskRevolutionParameters::onReversed(bool on) +{ + PartDesign::Revolution* pcRevolution = static_cast(RevolutionView->getObject()); + pcRevolution->Reversed.setValue(on); + pcRevolution->getDocument()->recomputeFeature(pcRevolution); +} double TaskRevolutionParameters::getAngle(void) const { @@ -157,6 +180,16 @@ QString TaskRevolutionParameters::getReferenceAxis(void) const return buf; } +bool TaskRevolutionParameters::getMidplane(void) const +{ + return ui->checkBoxMidplane->isChecked(); +} + +bool TaskRevolutionParameters::getReversed(void) const +{ + return ui->checkBoxReversed->isChecked(); +} + TaskRevolutionParameters::~TaskRevolutionParameters() { delete ui; @@ -210,6 +243,8 @@ bool TaskDlgRevolutionParameters::accept() Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Angle = %f",name.c_str(),parameter->getAngle()); std::string axis = parameter->getReferenceAxis().toStdString(); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.ReferenceAxis = %s",name.c_str(),axis.c_str()); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Midplane = %i",name.c_str(),parameter->getMidplane()?1:0); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Reversed = %i",name.c_str(),parameter->getReversed()?1:0); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); Gui::Command::commitCommand(); diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h index dcafbd618..1d9eb71a8 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h @@ -54,10 +54,14 @@ public: QString getReferenceAxis(void) const; double getAngle(void) const; + bool getMidplane(void) const; + bool getReversed(void) const; private Q_SLOTS: void onAngleChanged(double); void onAxisChanged(int); + void onMidplane(bool); + void onReversed(bool); protected: void changeEvent(QEvent *e); diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui index a80c300fe..dac292f99 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui @@ -6,8 +6,8 @@ 0 0 - 182 - 68 + 278 + 158 @@ -54,7 +54,7 @@ 1 - -360.000000000000000 + 0.000000000000000 360.000000000000000 @@ -69,6 +69,23 @@ + + + + true + + + Symmetric to plane + + + + + + + Reversed + + + From 2e89e0015d0fc426cd264234d4243679d348d783 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 8 Jun 2012 21:33:37 +0200 Subject: [PATCH 316/517] Cleanup, add method getStrValue() --- src/App/PropertyStandard.h | 6 ++---- src/Mod/PartDesign/App/FeaturePad.cpp | 3 --- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/App/PropertyStandard.h b/src/App/PropertyStandard.h index bff973cb2..fc2989379 100644 --- a/src/App/PropertyStandard.h +++ b/src/App/PropertyStandard.h @@ -394,9 +394,6 @@ protected: const Constraints* _ConstStruct; }; - - - class AppExport PropertyFloatList: public PropertyLists { TYPESYSTEM_HEADER(); @@ -470,10 +467,11 @@ public: */ virtual ~PropertyString(); - void setValue(const char* sString); void setValue(const std::string &sString); const char* getValue(void) const; + const std::string& getStrValue(void) const + { return _cValue; } bool isEmpty(void){return _cValue.empty();} virtual const char* getEditorName(void) const { return "Gui::PropertyEditor::PropertyStringItem"; } diff --git a/src/Mod/PartDesign/App/FeaturePad.cpp b/src/Mod/PartDesign/App/FeaturePad.cpp index c5791abcd..8335668ae 100644 --- a/src/Mod/PartDesign/App/FeaturePad.cpp +++ b/src/Mod/PartDesign/App/FeaturePad.cpp @@ -23,15 +23,12 @@ #include "PreCompiled.h" #ifndef _PreComp_ -//# include -//# include # include # include # include # include # include # include -//# include # include # include # include From 7144890c93c084fae8eedc4e7c595ce5bc0d05b5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 Jun 2012 11:21:56 +0200 Subject: [PATCH 317/517] Add groove icon --- src/Mod/PartDesign/Gui/Command.cpp | 3 +- src/Mod/PartDesign/Gui/Resources/Makefile.am | 1 + .../PartDesign/Gui/Resources/PartDesign.qrc | 1 + .../Gui/Resources/icons/PartDesign_Groove.svg | 144 ++++++++++++++++++ 4 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index c69df762f..335d6d5dd 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -341,8 +341,7 @@ CmdPartDesignGroove::CmdPartDesignGroove() sToolTipText = QT_TR_NOOP("Groove a selected sketch"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; - //sPixmap = "PartDesign_Groove"; - sPixmap = "PartDesign_Revolution"; + sPixmap = "PartDesign_Groove"; } void CmdPartDesignGroove::activated(int iMsg) diff --git a/src/Mod/PartDesign/Gui/Resources/Makefile.am b/src/Mod/PartDesign/Gui/Resources/Makefile.am index 332007335..79bee0639 100644 --- a/src/Mod/PartDesign/Gui/Resources/Makefile.am +++ b/src/Mod/PartDesign/Gui/Resources/Makefile.am @@ -37,6 +37,7 @@ EXTRA_DIST = \ translations/PartDesign_uk.ts \ translations/PartDesign_zh.qm \ translations/PartDesign_zh.ts \ + icons/PartDesign_Groove.svg \ icons/PartDesign_Pad.svg \ icons/PartDesign_Pocket.svg \ icons/PartDesign_Revolution.svg \ diff --git a/src/Mod/PartDesign/Gui/Resources/PartDesign.qrc b/src/Mod/PartDesign/Gui/Resources/PartDesign.qrc index caff25cab..37804e403 100644 --- a/src/Mod/PartDesign/Gui/Resources/PartDesign.qrc +++ b/src/Mod/PartDesign/Gui/Resources/PartDesign.qrc @@ -1,5 +1,6 @@ + icons/PartDesign_Groove.svg icons/PartDesign_Pad.svg icons/PartDesign_Pocket.svg icons/PartDesign_Revolution.svg diff --git a/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg b/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg new file mode 100644 index 000000000..2c1ca60aa --- /dev/null +++ b/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + From 0bf33b646694e28c3604d4dc118cfc7c6d09a267 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 Jun 2012 11:50:02 +0200 Subject: [PATCH 318/517] 0000740: work bench initiation from in fcstd file --- src/Mod/Arch/ArchAxis.py | 3 ++- src/Mod/Arch/ArchBuilding.py | 1 + src/Mod/Arch/ArchCell.py | 1 + src/Mod/Arch/ArchFloor.py | 1 + src/Mod/Arch/ArchRoof.py | 3 ++- src/Mod/Arch/ArchSectionPlane.py | 1 + src/Mod/Arch/ArchSite.py | 1 + src/Mod/Arch/ArchStructure.py | 3 ++- src/Mod/Arch/ArchWall.py | 3 ++- src/Mod/Arch/ArchWindow.py | 3 ++- 10 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index d165e69ea..a2ea31033 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -109,7 +109,8 @@ class _ViewProviderAxis: vobj.LineColor = (0.13,0.15,0.37) vobj.DrawStyle = "Dashdot" - def getIcon(self): + def getIcon(self): + import Arch_rc return ":/icons/Arch_Axis_Tree.svg" def claimChildren(self): diff --git a/src/Mod/Arch/ArchBuilding.py b/src/Mod/Arch/ArchBuilding.py index 0d6d5cc40..968165527 100644 --- a/src/Mod/Arch/ArchBuilding.py +++ b/src/Mod/Arch/ArchBuilding.py @@ -86,6 +86,7 @@ class _ViewProviderBuilding(ArchFloor._ViewProviderFloor): ArchFloor._ViewProviderFloor.__init__(self,vobj) def getIcon(self): + import Arch_rc return ":/icons/Arch_Building_Tree.svg" FreeCADGui.addCommand('Arch_Building',_CommandBuilding()) diff --git a/src/Mod/Arch/ArchCell.py b/src/Mod/Arch/ArchCell.py index 8783602cc..6c4527ce5 100644 --- a/src/Mod/Arch/ArchCell.py +++ b/src/Mod/Arch/ArchCell.py @@ -121,6 +121,7 @@ class _ViewProviderCell(ArchComponent.ViewProviderComponent): self.Object = vobj.Object def getIcon(self): + import Arch_rc return ":/icons/Arch_Cell_Tree.svg" def updateData(self,obj,prop): diff --git a/src/Mod/Arch/ArchFloor.py b/src/Mod/Arch/ArchFloor.py index f7ccab17a..be9956107 100644 --- a/src/Mod/Arch/ArchFloor.py +++ b/src/Mod/Arch/ArchFloor.py @@ -114,6 +114,7 @@ class _ViewProviderFloor: vobj.Proxy = self def getIcon(self): + import Arch_rc return ":/icons/Arch_Floor_Tree.svg" def attach(self,vobj): diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 4c8d6964c..e85581e60 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -148,7 +148,8 @@ class _ViewProviderRoof(ArchComponent.ViewProviderComponent): def __init__(self,vobj): ArchComponent.ViewProviderComponent.__init__(self,vobj) - def getIcon(self): + def getIcon(self): + import Arch_rc return ":/icons/Arch_Roof_Tree.svg" FreeCADGui.addCommand('Arch_Roof',_CommandRoof()) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index aa1d8bb99..460d3a7d1 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -123,6 +123,7 @@ class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent): self.Object = vobj.Object def getIcon(self): + import Arch_rc return ":/icons/Arch_SectionPlane_Tree.svg" def claimChildren(self): diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index 69cfda8ba..f6c6e9acb 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -89,6 +89,7 @@ class _ViewProviderSite(ArchFloor._ViewProviderFloor): ArchFloor._ViewProviderFloor.__init__(self,vobj) def getIcon(self): + import Arch_rc return ":/icons/Arch_Site_Tree.svg" diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index d257c4d92..1a9f51c07 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -193,7 +193,8 @@ class _ViewProviderStructure(ArchComponent.ViewProviderComponent): def __init__(self,vobj): ArchComponent.ViewProviderComponent.__init__(self,vobj) - def getIcon(self): + def getIcon(self): + import Arch_rc return ":/icons/Arch_Structure_Tree.svg" FreeCADGui.addCommand('Arch_Structure',_CommandStructure()) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 1d6f8e5e0..e8236af3f 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -423,7 +423,8 @@ class _ViewProviderWall(ArchComponent.ViewProviderComponent): def __init__(self,vobj): ArchComponent.ViewProviderComponent.__init__(self,vobj) - def getIcon(self): + def getIcon(self): + import Arch_rc return ":/icons/Arch_Wall_Tree.svg" def getDisplayModes(self,vobj): diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 2f593257f..ad9d49369 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -179,7 +179,8 @@ class _ViewProviderWindow(ArchComponent.ViewProviderComponent): def __init__(self,vobj): ArchComponent.ViewProviderComponent.__init__(self,vobj) - def getIcon(self): + def getIcon(self): + import Arch_rc return ":/icons/Arch_Window_Tree.svg" def setEdit(self,vobj,mode): From 245cae03ef6c1f30a2a1c89d955c0a383fd22f29 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 Jun 2012 13:50:33 +0200 Subject: [PATCH 319/517] 0000144: Add several tools to Part module --- src/Gui/SelectionObject.h | 6 +- src/Mod/Part/App/AppPart.cpp | 1 + src/Mod/Part/App/PartFeatures.cpp | 95 ++++++++++++ src/Mod/Part/App/PartFeatures.h | 23 +++ src/Mod/Part/Gui/CMakeLists.txt | 5 + src/Mod/Part/Gui/Command.cpp | 27 ++++ src/Mod/Part/Gui/TaskSweep.cpp | 243 ++++++++++++++++++++++++++++++ src/Mod/Part/Gui/TaskSweep.h | 81 ++++++++++ src/Mod/Part/Gui/TaskSweep.ui | 60 ++++++++ src/Mod/Part/Gui/Workbench.cpp | 2 +- 10 files changed, 539 insertions(+), 4 deletions(-) create mode 100644 src/Mod/Part/Gui/TaskSweep.cpp create mode 100644 src/Mod/Part/Gui/TaskSweep.h create mode 100644 src/Mod/Part/Gui/TaskSweep.ui diff --git a/src/Gui/SelectionObject.h b/src/Gui/SelectionObject.h index 784b89f27..5c871594c 100644 --- a/src/Gui/SelectionObject.h +++ b/src/Gui/SelectionObject.h @@ -55,11 +55,11 @@ public: /// are there any SubNames selected bool hasSubNames(void)const { return SubNames.size() != 0; } /// get the name of the Document of this SelctionObject - inline const char* getDocName(void) { return DocName.c_str(); } + inline const char* getDocName(void) const { return DocName.c_str(); } /// get the name of the Document Object of this SelectionObject - inline const char* getFeatName(void) { return FeatName.c_str(); } + inline const char* getFeatName(void) const { return FeatName.c_str(); } /// get the Type of the selcted Object - inline const char* getTypeName(void) { return TypeName.c_str(); } + inline const char* getTypeName(void) const { return TypeName.c_str(); } /// returns the selected DocumentObject or NULL if the object is already deleted const App::DocumentObject *getObject(void) const; diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 716597e2b..4980b0be1 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -179,6 +179,7 @@ void PartExport initPart() Part::Part2DObjectPython ::init(); Part::RuledSurface ::init(); Part::Loft ::init(); + Part::Sweep ::init(); // Geometry types Part::Geometry ::init(); diff --git a/src/Mod/Part/App/PartFeatures.cpp b/src/Mod/Part/App/PartFeatures.cpp index 1f2088874..c50c854bb 100644 --- a/src/Mod/Part/App/PartFeatures.cpp +++ b/src/Mod/Part/App/PartFeatures.cpp @@ -196,3 +196,98 @@ App::DocumentObjectExecReturn *Loft::execute(void) return new App::DocumentObjectExecReturn(e->GetMessageString()); } } + +// ---------------------------------------------------------------------------- + +PROPERTY_SOURCE(Part::Sweep, Part::Feature) + +Sweep::Sweep() +{ + ADD_PROPERTY_TYPE(Sections,(0),"Sweep",App::Prop_None,"List of sections"); + Sections.setSize(0); + ADD_PROPERTY_TYPE(Spine,(0),"Sweep",App::Prop_None,"Path to sweep along"); + ADD_PROPERTY_TYPE(Solid,(false),"Sweep",App::Prop_None,"Create solid"); + ADD_PROPERTY_TYPE(Fresnet,(false),"Sweep",App::Prop_None,"Fresnet"); +} + +short Sweep::mustExecute() const +{ + if (Sections.isTouched()) + return 1; + if (Spine.isTouched()) + return 1; + if (Solid.isTouched()) + return 1; + if (Fresnet.isTouched()) + return 1; + return 0; +} + +void Sweep::onChanged(const App::Property* prop) +{ + Part::Feature::onChanged(prop); +} + +App::DocumentObjectExecReturn *Sweep::execute(void) +{ + if (Sections.getSize() == 0) + return new App::DocumentObjectExecReturn("No sections linked."); + App::DocumentObject* spine = Spine.getValue(); + if (!(spine && spine->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId()))) + return new App::DocumentObjectExecReturn("No shape linked."); + const std::vector& subedge = Spine.getSubValues(); + if (subedge.size() != 1) + return new App::DocumentObjectExecReturn("Not exactly one sub-shape linked."); + + TopoDS_Shape edge; + const Part::TopoShape& shape = static_cast(spine)->Shape.getValue(); + if (!shape._Shape.IsNull()) { + if (!subedge[0].empty()) { + edge = shape.getSubShape(subedge[0].c_str()); + } + else { + if (shape._Shape.ShapeType() == TopAbs_EDGE) + edge = shape._Shape; + else if (shape._Shape.ShapeType() == TopAbs_WIRE) + edge = shape._Shape; + } + } + + try { + TopTools_ListOfShape profiles; + const std::vector& shapes = Sections.getValues(); + std::vector::const_iterator it; + for (it = shapes.begin(); it != shapes.end(); ++it) { + if (!(*it)->isDerivedFrom(Part::Feature::getClassTypeId())) + return new App::DocumentObjectExecReturn("Linked object is not a shape."); + const TopoDS_Shape& shape = static_cast(*it)->Shape.getValue(); + if (shape.IsNull()) + return new App::DocumentObjectExecReturn("Linked shape is invalid."); + if (shape.ShapeType() == TopAbs_WIRE) { + profiles.Append(shape); + } + else if (shape.ShapeType() == TopAbs_EDGE) { + BRepBuilderAPI_MakeWire mkWire(TopoDS::Edge(shape)); + profiles.Append(mkWire.Wire()); + } + else if (shape.ShapeType() == TopAbs_VERTEX) { + profiles.Append(shape); + } + else { + return new App::DocumentObjectExecReturn("Linked shape is not a vertex, edge nor wire."); + } + } + + Standard_Boolean isSolid = Solid.getValue() ? Standard_True : Standard_False; + Standard_Boolean isFresnet = Fresnet.getValue() ? Standard_True : Standard_False; + + BRepBuilderAPI_MakeWire mkWire(TopoDS::Edge(edge)); + TopoShape myShape(mkWire.Wire()); + this->Shape.setValue(myShape.makePipeShell(profiles, isSolid, isFresnet)); + return App::DocumentObject::StdReturn; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + return new App::DocumentObjectExecReturn(e->GetMessageString()); + } +} diff --git a/src/Mod/Part/App/PartFeatures.h b/src/Mod/Part/App/PartFeatures.h index f01fde575..25d2050a5 100644 --- a/src/Mod/Part/App/PartFeatures.h +++ b/src/Mod/Part/App/PartFeatures.h @@ -73,6 +73,29 @@ protected: void onChanged (const App::Property* prop); }; +class Sweep : public Part::Feature +{ + PROPERTY_HEADER(Part::Sweep); + +public: + Sweep(); + + App::PropertyLinkList Sections; + App::PropertyLinkSub Spine; + App::PropertyBool Solid; + App::PropertyBool Fresnet; + + /** @name methods override feature */ + //@{ + /// recalculate the feature + App::DocumentObjectExecReturn *execute(void); + short mustExecute() const; + //@} + +protected: + void onChanged (const App::Property* prop); +}; + } //namespace Part diff --git a/src/Mod/Part/Gui/CMakeLists.txt b/src/Mod/Part/Gui/CMakeLists.txt index d9ff99f95..ec068eb95 100644 --- a/src/Mod/Part/Gui/CMakeLists.txt +++ b/src/Mod/Part/Gui/CMakeLists.txt @@ -41,6 +41,7 @@ set(PartGui_MOC_HDRS TaskFaceColors.h TaskShapeBuilder.h TaskLoft.h + TaskSweep.h ) fc_wrap_cpp(PartGui_MOC_SRCS ${PartGui_MOC_HDRS}) SOURCE_GROUP("Moc" FILES ${PartGui_MOC_SRCS}) @@ -65,6 +66,7 @@ set(PartGui_UIC_SRCS TaskFaceColors.ui TaskShapeBuilder.ui TaskLoft.ui + TaskSweep.ui ) qt4_wrap_ui(PartGui_UIC_HDRS ${PartGui_UIC_SRCS}) @@ -155,6 +157,9 @@ SET(PartGui_SRCS TaskLoft.cpp TaskLoft.h TaskLoft.ui + TaskSweep.cpp + TaskSweep.h + TaskSweep.ui ) SET(PartGui_Scripts diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 33cd008ee..5020e4872 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -61,6 +61,7 @@ #include "ViewProvider.h" #include "TaskShapeBuilder.h" #include "TaskLoft.h" +#include "TaskSweep.h" //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -960,6 +961,31 @@ bool CmdPartLoft::isActive(void) //-------------------------------------------------------------------------------------- +DEF_STD_CMD_A(CmdPartSweep); + +CmdPartSweep::CmdPartSweep() + : Command("Part_Sweep") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Sweep..."); + sToolTipText = QT_TR_NOOP("Advanced utility to sweep"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; +} + +void CmdPartSweep::activated(int iMsg) +{ + Gui::Control().showDialog(new PartGui::TaskSweep()); +} + +bool CmdPartSweep::isActive(void) +{ + return (hasActiveDocument() && !Gui::Control().activeDialog()); +} + +//-------------------------------------------------------------------------------------- + DEF_STD_CMD_A(CmdShapeInfo); CmdShapeInfo::CmdShapeInfo() @@ -1194,5 +1220,6 @@ void CreatePartCommands(void) rcCmdMgr.addCommand(new CmdPartRuledSurface()); rcCmdMgr.addCommand(new CmdPartBuilder()); rcCmdMgr.addCommand(new CmdPartLoft()); + rcCmdMgr.addCommand(new CmdPartSweep()); } diff --git a/src/Mod/Part/Gui/TaskSweep.cpp b/src/Mod/Part/Gui/TaskSweep.cpp new file mode 100644 index 000000000..0639c28a2 --- /dev/null +++ b/src/Mod/Part/Gui/TaskSweep.cpp @@ -0,0 +1,243 @@ +/*************************************************************************** + * Copyright (c) 2011 Werner Mayer * + * * + * 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" + +#ifndef _PreComp_ +# include +# include +#endif + +#include "ui_TaskSweep.h" +#include "TaskSweep.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +using namespace PartGui; + +class SweepWidget::Private +{ +public: + Ui_TaskSweep ui; + std::string document; + Private() + { + } + ~Private() + { + } +}; + +/* TRANSLATOR PartGui::SweepWidget */ + +SweepWidget::SweepWidget(QWidget* parent) + : d(new Private()) +{ + Gui::Application::Instance->runPythonCode("from FreeCAD import Base"); + Gui::Application::Instance->runPythonCode("import Part"); + + d->ui.setupUi(this); + d->ui.selector->setAvailableLabel(tr("Vertex/Wire")); + d->ui.selector->setSelectedLabel(tr("Sweep")); + + connect(d->ui.selector->availableTreeWidget(), SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + connect(d->ui.selector->selectedTreeWidget(), SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + + findShapes(); +} + +SweepWidget::~SweepWidget() +{ + delete d; +} + +void SweepWidget::findShapes() +{ + App::Document* activeDoc = App::GetApplication().getActiveDocument(); + Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); + if (!activeGui) return; + d->document = activeDoc->getName(); + + std::vector objs = activeDoc->getObjectsOfType(); + + for (std::vector::iterator it = objs.begin(); it!=objs.end(); ++it) { + const TopoDS_Shape& shape = (*it)->Shape.getValue(); + if (shape.IsNull()) continue; + + if (shape.ShapeType() == TopAbs_WIRE || + shape.ShapeType() == TopAbs_EDGE || + shape.ShapeType() == TopAbs_VERTEX) { + QString label = QString::fromUtf8((*it)->Label.getValue()); + QString name = QString::fromAscii((*it)->getNameInDocument()); + + QTreeWidgetItem* child = new QTreeWidgetItem(); + child->setText(0, label); + child->setToolTip(0, label); + child->setData(0, Qt::UserRole, name); + Gui::ViewProvider* vp = activeGui->getViewProvider(*it); + if (vp) child->setIcon(0, vp->getIcon()); + d->ui.selector->availableTreeWidget()->addTopLevelItem(child); + } + } +} + +bool SweepWidget::accept() +{ + Gui::SelectionFilter edgeFilter ("SELECT Part::Feature SUBELEMENT Edge COUNT 1"); + if (!edgeFilter.match()) { + QMessageBox::critical(this, tr("Sweep path"), tr("Select an edge you want to sweep along.")); + return false; + } + + // get the selected object + const std::vector& result = edgeFilter.Result[0]; + const std::vector& edges = result[0].getSubNames(); + + QString list, solid, fresnet; + if (d->ui.checkSolid->isChecked()) + solid = QString::fromAscii("True"); + else + solid = QString::fromAscii("False"); + + if (d->ui.checkFresnet->isChecked()) + fresnet = QString::fromAscii("True"); + else + fresnet = QString::fromAscii("False"); + + QTextStream str(&list); + + int count = d->ui.selector->selectedTreeWidget()->topLevelItemCount(); + if (count < 1) { + QMessageBox::critical(this, tr("Too few elements"), tr("At least one edge or wire is required.")); + return false; + } + for (int i=0; iui.selector->selectedTreeWidget()->topLevelItem(i); + QString name = child->data(0, Qt::UserRole).toString(); + str << "App.getDocument('" << d->document.c_str() << "')." << name << ", "; + } + + try { + QString cmd; + cmd = QString::fromAscii( + "App.getDocument('%6').addObject('Part::Sweep','Sweep')\n" + "App.getDocument('%6').ActiveObject.Sections=[%1]\n" + "App.getDocument('%6').ActiveObject.Spine=(FreeCAD.ActiveDocument.%2,['%3'])\n" + "App.getDocument('%6').ActiveObject.Solid=%4\n" + "App.getDocument('%6').ActiveObject.Fresnet=%5\n" + ) + .arg(list).arg(QLatin1String(result.front().getFeatName())) + .arg(QLatin1String(edges.front().c_str())) + .arg(solid).arg(fresnet).arg(QString::fromAscii(d->document.c_str())); + + Gui::Document* doc = Gui::Application::Instance->getDocument(d->document.c_str()); + if (!doc) throw Base::Exception("Document doesn't exist anymore"); + doc->openCommand("Sweep"); + Gui::Application::Instance->runPythonCode((const char*)cmd.toAscii(), false, false); + doc->commitCommand(); + doc->getDocument()->recompute(); + } + catch (const Base::Exception& e) { + Base::Console().Error("%s\n", e.what()); + return false; + } + + return true; +} + +bool SweepWidget::reject() +{ + return true; +} + +void SweepWidget::onCurrentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous) +{ + if (previous) { + Gui::Selection().rmvSelection(d->document.c_str(), + (const char*)previous->data(0,Qt::UserRole).toByteArray()); + } + if (current) { + Gui::Selection().addSelection(d->document.c_str(), + (const char*)current->data(0,Qt::UserRole).toByteArray()); + } +} + +void SweepWidget::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + if (e->type() == QEvent::LanguageChange) { + d->ui.retranslateUi(this); + d->ui.selector->setAvailableLabel(tr("Vertex/Wire")); + d->ui.selector->setSelectedLabel(tr("Sweep")); + } +} + + +/* TRANSLATOR PartGui::TaskSweep */ + +TaskSweep::TaskSweep() +{ + widget = new SweepWidget(); + taskbox = new Gui::TaskView::TaskBox( + QPixmap(), widget->windowTitle(), true, 0); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); +} + +TaskSweep::~TaskSweep() +{ +} + +void TaskSweep::open() +{ +} + +void TaskSweep::clicked(int) +{ +} + +bool TaskSweep::accept() +{ + return widget->accept(); +} + +bool TaskSweep::reject() +{ + return widget->reject(); +} + +#include "moc_TaskSweep.cpp" diff --git a/src/Mod/Part/Gui/TaskSweep.h b/src/Mod/Part/Gui/TaskSweep.h new file mode 100644 index 000000000..f0c6fc592 --- /dev/null +++ b/src/Mod/Part/Gui/TaskSweep.h @@ -0,0 +1,81 @@ +/*************************************************************************** + * Copyright (c) 2011 Werner Mayer * + * * + * 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 PARTGUI_TASKSWEEP_H +#define PARTGUI_TASKSWEEP_H + +#include +#include + +class QTreeWidgetItem; + +namespace PartGui { + +class SweepWidget : public QWidget +{ + Q_OBJECT + +public: + SweepWidget(QWidget* parent = 0); + ~SweepWidget(); + + bool accept(); + bool reject(); + +private Q_SLOTS: + void onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*); + +private: + void changeEvent(QEvent *e); + void findShapes(); + +private: + class Private; + Private* d; +}; + +class TaskSweep : public Gui::TaskView::TaskDialog +{ + Q_OBJECT + +public: + TaskSweep(); + ~TaskSweep(); + +public: + void open(); + bool accept(); + bool reject(); + void clicked(int); + + QDialogButtonBox::StandardButtons getStandardButtons() const + { return QDialogButtonBox::Ok|QDialogButtonBox::Cancel; } + +private: + SweepWidget* widget; + Gui::TaskView::TaskBox* taskbox; +}; + +} //namespace PartGui + +#endif // PARTGUI_TASKSWEEP_H diff --git a/src/Mod/Part/Gui/TaskSweep.ui b/src/Mod/Part/Gui/TaskSweep.ui new file mode 100644 index 000000000..f91e754f5 --- /dev/null +++ b/src/Mod/Part/Gui/TaskSweep.ui @@ -0,0 +1,60 @@ + + + PartGui::TaskSweep + + + + 0 + 0 + 336 + 326 + + + + Sweep + + + + + + + + + Create solid + + + + + + + Qt::Horizontal + + + + 130 + 20 + + + + + + + + Fresnet + + + + + + + + Gui::ActionSelector + QWidget +

Gui/Widgets.h
+ + + + + + + diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index ea42cb9f3..9997750b2 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -72,7 +72,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Part_RefineShape" << "Separator" << "Part_Boolean" << "Part_CrossSections" << "Part_Extrude" << "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer" - << "Part_RuledSurface" << "Part_Loft" + << "Part_RuledSurface" << "Part_Loft" << "Part_Sweep" << "Part_Builder"; //Gui::MenuItem* partSimple = new Gui::MenuItem; From 2a7e6f3e96995bb1a7871b4574a96979f93f3a8b Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 Jun 2012 15:55:11 +0200 Subject: [PATCH 320/517] 0000144: Add several tools to Part module --- src/Mod/Part/App/PartFeatures.cpp | 58 +++++++++++++++++++++++++------ src/Mod/Part/App/PartFeatures.h | 6 +++- src/Mod/Part/Gui/TaskSweep.cpp | 36 ++++++++++++------- src/Mod/Part/Gui/TaskSweep.ui | 4 +-- 4 files changed, 78 insertions(+), 26 deletions(-) diff --git a/src/Mod/Part/App/PartFeatures.cpp b/src/Mod/Part/App/PartFeatures.cpp index c50c854bb..1bf2ce874 100644 --- a/src/Mod/Part/App/PartFeatures.cpp +++ b/src/Mod/Part/App/PartFeatures.cpp @@ -28,6 +28,8 @@ # include # include # include +# include +# include #endif @@ -199,6 +201,8 @@ App::DocumentObjectExecReturn *Loft::execute(void) // ---------------------------------------------------------------------------- +const char* Part::Sweep::TransitionEnums[]= {"Transformed","Right corner", "Round corner",NULL}; + PROPERTY_SOURCE(Part::Sweep, Part::Feature) Sweep::Sweep() @@ -207,7 +211,9 @@ Sweep::Sweep() Sections.setSize(0); ADD_PROPERTY_TYPE(Spine,(0),"Sweep",App::Prop_None,"Path to sweep along"); ADD_PROPERTY_TYPE(Solid,(false),"Sweep",App::Prop_None,"Create solid"); - ADD_PROPERTY_TYPE(Fresnet,(false),"Sweep",App::Prop_None,"Fresnet"); + ADD_PROPERTY_TYPE(Frenet,(false),"Sweep",App::Prop_None,"Frenet"); + ADD_PROPERTY_TYPE(Transition,(long(0)),"Sweep",App::Prop_None,"Transition mode"); + Transition.setEnums(TransitionEnums); } short Sweep::mustExecute() const @@ -218,7 +224,9 @@ short Sweep::mustExecute() const return 1; if (Solid.isTouched()) return 1; - if (Fresnet.isTouched()) + if (Frenet.isTouched()) + return 1; + if (Transition.isTouched()) return 1; return 0; } @@ -234,22 +242,24 @@ App::DocumentObjectExecReturn *Sweep::execute(void) return new App::DocumentObjectExecReturn("No sections linked."); App::DocumentObject* spine = Spine.getValue(); if (!(spine && spine->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId()))) - return new App::DocumentObjectExecReturn("No shape linked."); + return new App::DocumentObjectExecReturn("No spine linked."); const std::vector& subedge = Spine.getSubValues(); if (subedge.size() != 1) return new App::DocumentObjectExecReturn("Not exactly one sub-shape linked."); - TopoDS_Shape edge; + TopoDS_Shape path; const Part::TopoShape& shape = static_cast(spine)->Shape.getValue(); if (!shape._Shape.IsNull()) { if (!subedge[0].empty()) { - edge = shape.getSubShape(subedge[0].c_str()); + path = shape.getSubShape(subedge[0].c_str()); } else { if (shape._Shape.ShapeType() == TopAbs_EDGE) - edge = shape._Shape; + path = shape._Shape; else if (shape._Shape.ShapeType() == TopAbs_WIRE) - edge = shape._Shape; + path = shape._Shape; + else + return new App::DocumentObjectExecReturn("Spine is neither an edge nor a wire."); } } @@ -279,11 +289,37 @@ App::DocumentObjectExecReturn *Sweep::execute(void) } Standard_Boolean isSolid = Solid.getValue() ? Standard_True : Standard_False; - Standard_Boolean isFresnet = Fresnet.getValue() ? Standard_True : Standard_False; + Standard_Boolean isFrenet = Frenet.getValue() ? Standard_True : Standard_False; + BRepBuilderAPI_TransitionMode transMode; + switch (Transition.getValue()) { + case 1: transMode = BRepBuilderAPI_RightCorner; + break; + case 2: transMode = BRepBuilderAPI_RoundCorner; + break; + default: transMode = BRepBuilderAPI_Transformed; + break; + } - BRepBuilderAPI_MakeWire mkWire(TopoDS::Edge(edge)); - TopoShape myShape(mkWire.Wire()); - this->Shape.setValue(myShape.makePipeShell(profiles, isSolid, isFresnet)); + if (path.ShapeType() == TopAbs_EDGE) { + BRepBuilderAPI_MakeWire mkWire(TopoDS::Edge(path)); + path = mkWire.Wire(); + } + + BRepOffsetAPI_MakePipeShell mkPipeShell(TopoDS::Wire(path)); + mkPipeShell.SetMode(isFrenet); + mkPipeShell.SetTransitionMode(transMode); + TopTools_ListIteratorOfListOfShape iter; + for (iter.Initialize(profiles); iter.More(); iter.Next()) { + mkPipeShell.Add(TopoDS_Shape(iter.Value())); + } + + if (!mkPipeShell.IsReady()) + Standard_Failure::Raise("shape is not ready to build"); + mkPipeShell.Build(); + if (isSolid) + mkPipeShell.MakeSolid(); + + this->Shape.setValue(mkPipeShell.Shape()); return App::DocumentObject::StdReturn; } catch (Standard_Failure) { diff --git a/src/Mod/Part/App/PartFeatures.h b/src/Mod/Part/App/PartFeatures.h index 25d2050a5..ddaae9627 100644 --- a/src/Mod/Part/App/PartFeatures.h +++ b/src/Mod/Part/App/PartFeatures.h @@ -83,7 +83,8 @@ public: App::PropertyLinkList Sections; App::PropertyLinkSub Spine; App::PropertyBool Solid; - App::PropertyBool Fresnet; + App::PropertyBool Frenet; + App::PropertyEnumeration Transition; /** @name methods override feature */ //@{ @@ -94,6 +95,9 @@ public: protected: void onChanged (const App::Property* prop); + +private: + static const char* TransitionEnums[]; }; } //namespace Part diff --git a/src/Mod/Part/Gui/TaskSweep.cpp b/src/Mod/Part/Gui/TaskSweep.cpp index 0639c28a2..effd5c28b 100644 --- a/src/Mod/Part/Gui/TaskSweep.cpp +++ b/src/Mod/Part/Gui/TaskSweep.cpp @@ -118,25 +118,37 @@ void SweepWidget::findShapes() bool SweepWidget::accept() { Gui::SelectionFilter edgeFilter ("SELECT Part::Feature SUBELEMENT Edge COUNT 1"); - if (!edgeFilter.match()) { - QMessageBox::critical(this, tr("Sweep path"), tr("Select an edge you want to sweep along.")); + Gui::SelectionFilter partFilter ("SELECT Part::Feature COUNT 1"); + bool matchEdge = edgeFilter.match(); + bool matchPart = partFilter.match(); + if (!matchEdge && !matchPart) { + QMessageBox::critical(this, tr("Sweep path"), tr("Select an edge or wire you want to sweep along.")); return false; } // get the selected object - const std::vector& result = edgeFilter.Result[0]; - const std::vector& edges = result[0].getSubNames(); + std::string objectName, subShape; + if (matchEdge) { + const std::vector& result = edgeFilter.Result[0]; + const std::vector& edges = result[0].getSubNames(); + objectName = result.front().getFeatName(); + subShape = edges.front(); + } + else { + const std::vector& result = partFilter.Result[0]; + objectName = result.front().getFeatName(); + } - QString list, solid, fresnet; + QString list, solid, frenet; if (d->ui.checkSolid->isChecked()) solid = QString::fromAscii("True"); else solid = QString::fromAscii("False"); - if (d->ui.checkFresnet->isChecked()) - fresnet = QString::fromAscii("True"); + if (d->ui.checkFrenet->isChecked()) + frenet = QString::fromAscii("True"); else - fresnet = QString::fromAscii("False"); + frenet = QString::fromAscii("False"); QTextStream str(&list); @@ -158,11 +170,11 @@ bool SweepWidget::accept() "App.getDocument('%6').ActiveObject.Sections=[%1]\n" "App.getDocument('%6').ActiveObject.Spine=(FreeCAD.ActiveDocument.%2,['%3'])\n" "App.getDocument('%6').ActiveObject.Solid=%4\n" - "App.getDocument('%6').ActiveObject.Fresnet=%5\n" + "App.getDocument('%6').ActiveObject.Frenet=%5\n" ) - .arg(list).arg(QLatin1String(result.front().getFeatName())) - .arg(QLatin1String(edges.front().c_str())) - .arg(solid).arg(fresnet).arg(QString::fromAscii(d->document.c_str())); + .arg(list).arg(QLatin1String(objectName.c_str())) + .arg(QLatin1String(subShape.c_str())) + .arg(solid).arg(frenet).arg(QString::fromAscii(d->document.c_str())); Gui::Document* doc = Gui::Application::Instance->getDocument(d->document.c_str()); if (!doc) throw Base::Exception("Document doesn't exist anymore"); diff --git a/src/Mod/Part/Gui/TaskSweep.ui b/src/Mod/Part/Gui/TaskSweep.ui index f91e754f5..898596365 100644 --- a/src/Mod/Part/Gui/TaskSweep.ui +++ b/src/Mod/Part/Gui/TaskSweep.ui @@ -38,9 +38,9 @@ - + - Fresnet + Frenet From 6a2a72627635d9b72d24fa90312586e7967e6f8c Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 Jun 2012 16:37:06 +0200 Subject: [PATCH 321/517] Fix bugs in Groove and Revolution --- src/Mod/PartDesign/App/FeatureGroove.cpp | 13 +++++++------ src/Mod/PartDesign/App/FeatureRevolution.cpp | 15 ++++++++------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureGroove.cpp b/src/Mod/PartDesign/App/FeatureGroove.cpp index 1e7f7d660..1cf17541d 100644 --- a/src/Mod/PartDesign/App/FeatureGroove.cpp +++ b/src/Mod/PartDesign/App/FeatureGroove.cpp @@ -52,12 +52,12 @@ PROPERTY_SOURCE(PartDesign::Groove, PartDesign::SketchBased) Groove::Groove() { - ADD_PROPERTY(Base,(Base::Vector3f(0.0f,0.0f,0.0f))); - ADD_PROPERTY(Axis,(Base::Vector3f(0.0f,1.0f,0.0f))); - ADD_PROPERTY(Angle,(360.0)); + ADD_PROPERTY_TYPE(Base,(Base::Vector3f(0.0f,0.0f,0.0f)),"Groove", App::Prop_ReadOnly, "Base"); + ADD_PROPERTY_TYPE(Axis,(Base::Vector3f(0.0f,1.0f,0.0f)),"Groove", App::Prop_ReadOnly, "Axis"); + ADD_PROPERTY_TYPE(Angle,(360.0),"Groove", App::Prop_None, "Angle"); ADD_PROPERTY_TYPE(ReferenceAxis,(0),"Groove",(App::PropertyType)(App::Prop_None),"Reference axis of Groove"); - ADD_PROPERTY(Midplane,(0)); - ADD_PROPERTY(Reversed, (0)); + ADD_PROPERTY_TYPE(Midplane,(0),"Groove", App::Prop_None, "Mid plane"); + ADD_PROPERTY_TYPE(Reversed, (0),"Groove", App::Prop_None, "Reversed"); } short Groove::mustExecute() const @@ -68,7 +68,8 @@ short Groove::mustExecute() const Axis.isTouched() || Base.isTouched() || Angle.isTouched() || - Midplane.isTouched()) + Midplane.isTouched() || + Reversed.isTouched()) return 1; return 0; } diff --git a/src/Mod/PartDesign/App/FeatureRevolution.cpp b/src/Mod/PartDesign/App/FeatureRevolution.cpp index 1a14783ae..a31bebf43 100644 --- a/src/Mod/PartDesign/App/FeatureRevolution.cpp +++ b/src/Mod/PartDesign/App/FeatureRevolution.cpp @@ -52,12 +52,12 @@ PROPERTY_SOURCE(PartDesign::Revolution, PartDesign::SketchBased) Revolution::Revolution() { - ADD_PROPERTY(Base,(Base::Vector3f(0.0f,0.0f,0.0f))); - ADD_PROPERTY(Axis,(Base::Vector3f(0.0f,1.0f,0.0f))); - ADD_PROPERTY(Angle,(360.0)); - ADD_PROPERTY_TYPE(ReferenceAxis,(0),"Revolution",(App::PropertyType)(App::Prop_None),"Reference axis of revolution"); - ADD_PROPERTY(Midplane,(0)); - ADD_PROPERTY(Reversed, (0)); + ADD_PROPERTY_TYPE(Base,(Base::Vector3f(0.0f,0.0f,0.0f)),"Revolution", App::Prop_ReadOnly, "Base"); + ADD_PROPERTY_TYPE(Axis,(Base::Vector3f(0.0f,1.0f,0.0f)),"Revolution", App::Prop_ReadOnly, "Axis"); + ADD_PROPERTY_TYPE(Angle,(360.0),"Revolution", App::Prop_None, "Angle"); + ADD_PROPERTY_TYPE(ReferenceAxis,(0),"Revolution",(App::Prop_None),"Reference axis of revolution"); + ADD_PROPERTY_TYPE(Midplane,(0),"Revolution", App::Prop_None, "Mid plane"); + ADD_PROPERTY_TYPE(Reversed, (0),"Revolution", App::Prop_None, "Reversed"); } short Revolution::mustExecute() const @@ -68,7 +68,8 @@ short Revolution::mustExecute() const Axis.isTouched() || Base.isTouched() || Angle.isTouched() || - Midplane.isTouched()) + Midplane.isTouched() || + Reversed.isTouched()) return 1; return 0; } From 55a205062a9660f7c9bef116505a2e7a8c342d00 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 Jun 2012 17:16:41 +0200 Subject: [PATCH 322/517] Show some help text in sweep panel --- src/Mod/Part/Gui/TaskSweep.ui | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Mod/Part/Gui/TaskSweep.ui b/src/Mod/Part/Gui/TaskSweep.ui index 898596365..6cfab459d 100644 --- a/src/Mod/Part/Gui/TaskSweep.ui +++ b/src/Mod/Part/Gui/TaskSweep.ui @@ -14,17 +14,17 @@ Sweep - + - + Create solid - + Qt::Horizontal @@ -37,13 +37,21 @@ - + Frenet + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + From 74e7aab8e61ff4c499f37fea6156016d7ede6c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 9 Jun 2012 17:37:28 +0200 Subject: [PATCH 323/517] Moved exampl,es to new paradigm (Deleted combatant) --- src/Mod/Ship/Examples/barehull5415.fcstd | Bin 18069 -> 0 bytes src/Mod/Ship/Examples/s60_katamaran.fcstd | Bin 59901 -> 112481 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/Mod/Ship/Examples/barehull5415.fcstd diff --git a/src/Mod/Ship/Examples/barehull5415.fcstd b/src/Mod/Ship/Examples/barehull5415.fcstd deleted file mode 100644 index e6f36ae4bdb1cd9970ccee58cfe112f474a16979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18069 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

3B9!S) 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 literal 59901 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 Date: Sat, 9 Jun 2012 17:37:48 +0200 Subject: [PATCH 324/517] Added wigley examples --- src/Mod/Ship/Examples/wigley.fcstd | Bin 0 -> 51491 bytes src/Mod/Ship/Examples/wigley_katamaran.fcstd | Bin 0 -> 96204 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Mod/Ship/Examples/wigley.fcstd create mode 100644 src/Mod/Ship/Examples/wigley_katamaran.fcstd diff --git a/src/Mod/Ship/Examples/wigley.fcstd b/src/Mod/Ship/Examples/wigley.fcstd new file mode 100644 index 0000000000000000000000000000000000000000..ae84cd39f1dda4010db891a0604b1daa3293c4a5 GIT binary patch literal 51491 zcmY(q18go#&^BCKr?zdIr*?a4+qUo8xa;=RZlBt=ZQHip|Ge+_=S#k1lg-Q|yR*C3 zT$z=UEI0%@2nYxa$U@|pFchMIl`I$tNCh+q2*N+Dn1hL%oteEWqo-~L*Ih_w^$>jXeXP5B)8jDkLU?!;xU4N!~a!Res%e)djoH zf5a(gEnI2;MQybd)_sP3j7gph~NN5z4l# z2AjL#tAU+BYwE#sxJJ{GDYU%j%wN^&kC@mL*+DYuGtX1C6F_&VivE;x-Eg94s zNo|ApgKGn&{|9t4r#5T5eIOud*5DwB|3If?Yvzdz^x z+%oyUo(O#&_2(C3q*jQg`dxG|JNgf zw~5^DE1-~_|GWE(h0jmT4yXU~j)p-k=IevOt3~(jjQ`%wu>57W-v;2r>%;D$#fi@# zYG``R_k(VgfO^@88q?pWQ|RXTO#o4(}o;@7g#dAGB}*fC(<^YwIcb@vUk3-`RE`0?fLv2NSqu+g&B4LF;z z_WnG-dKq|obZ^t0KAAeJ=kfd4s0DO4*VsK(bNgd#oWCKu)V%p)a0QxQadItmb#?wc zJ=(AL;79hbEJ>vTNeNDb!YzBRJ2w8tVy+i$6?|i=+ z0Jgq%{!IY?PsoIt(1wFh_Bqq1-9%3TXyy&Hg0aHf)U}<*+6^%6tL5rt>&}^1pRx2| zuX9V!-Qj!t+m%0iXS?}h0Po};vL|5Y;3na5J@uR zO+ex8z{o=|*W+Ws%j51v)3Jev@Fje~X@rZ2NfO}H!AGQJ>T%fcVAk^Ud}ZMmy7k?; z;gsERVE>{{=g@pIVbrlvKkx1#ylk*}GhK>S-D}?di^cXG9N<-4Y@fK{Dy^Au>;Jo0r` z+i^=!`Vb0z?2v<83jfl)_x|=+dm{3H4RpW)cw%l`eRsalwmp7rups+|7nFZFvXSW}NV+Z+#eKUY`60k>bBJ$WG=T#8^oAzF^pWDx|7SZ$it5mV3{tJ09Fw9#ow}Xx0PaD>s<{hn}?p z_z?oyjuA55?i*k8z==IO|IK^n*LKA3i*IM1?)=x2mH{t%AASO^PQUNEhpqF1oVnPR zFQ^o!y`z^_l5YQjk8NAVC!cTu9caBRT_oG=?BggzcOKhK7t7u6tAO&Wo*M;dcbJtX ziwOdyt#<)eIEHn{rA;!R*$t-1n;&flc=h9JcMBVyNlVp8@Ad)A>-6`ALrYmzbREm^ zjooS(|LVeXf0q%6`}JS6Z|?EQ)E@kin=6mbFf?Eo@~eTrL%0*S!!uwHr;rr@G&sE0 zI(6hF350x~t{AefHQ+$C&3qRy^_2JFJj!Va&0pQ$$AhTl@mjWM_WaroJ2e{7>3prw z$(eZm*f~D3#!M@*L2;^*6)y3WVS| zCn`A|UHH#okv^x6#eyF3<%Y>#OXo@Owv{P!;yzaAlISK4s05nR^K9hO>w0U;nMSrU zKv%XQa@fj~qlh)Rf^@)DdGI_6Stx~VoHKu)Nks_7nN`(Kus4+A#(#ICKXZH^#_Dnh zI0^LOdk|wb!%DW$6lkW5>Jm?3!kzxZI!T+T^LWzVurIzCenN)TB9Oy=I8yhmFb70&b@msNyKj?yyCImFUrzvI27x|jE5u(!m=&85NiaU`PqG5rhVU1m2up#$WqkG{$m<;v8GG5GfOD{Wi^ zFZEgm{(pRgAkTq%?^h>W?i2qy4qnDvKdMK%)UEXU zqFnFaI~!`iL@ouOu`K%dEA`F3v@7VRrv+g;nqlMQp5QrP6CK7N-QCumx@ALeLd%h- ziWR;$KgA(kwlGBH+vn8s;tL;<-X7VbBhap^-JJIR7b&#&b@#}^?Uvn{#rg{`?uiQ_ z=3lAn<1`0vIX&AkZ{9AQ-|;?pDJ$jBz>&50clM57Qc4LR`p9)%^QmEH2{ z6@?03b|#o_?=-*UKqZbsADQV4QC4F+H+O%)aM)3g+om@8Kt&GSSr_9bV&?ARGhXzx zR)kN$y|wzT$v33jj(gk_zjNQoMO$5Oo`H%1?|0gwA`|siW;l0R^Ij9ei9`7|1@Sid@Ls*| z`CZ#VT|#F$o6#rZ%x>#RXTSNS*X%@T>ntxo^Bn%>14s*B^KlpP8 zFp#vsfb9U*rRJo0GWh(vX}DCAVQLre<BYW|AkxQM(Dl>a$Po@;NOap!A`Q( zEmt@8?Q9edWk}eTyy%LgWDIS)iOnx%F~AM8gm?QNDumGx#whi_cIL z#?+gv0W%=iS$nVAmt!ddb{OuDH6IIw^p z_g$QmdwZ{q8|ZD!tApax+89KYxx8-@1x!5oq=tXy^nE>_V4Dc=3aruxnN82w<6zQGRR;@kv_yWX^C|2?ES zl6&#d50Uh_&%-c8FGu?wlEkt(ddXY%r6!>i#<7L-0VdRUN%7#bX|-4$&F9;e7FHf@ z5h8hZ1xD^9Jz+WsT1;U_gX5uN(+uFJ-YcYS z&REedPU~>*>+_|xo#c#>C&6~@4gYiOyCsbjJD)u%qfF*7a$77s!Ftk_BD9q{OXug9 zQSOnZj53KQjv|X^HV^TF0558rEIqgRE4ReOWfh(~fkeK;_FIykWeo#>w*s4MU8#_m zBn(?99}+kaBy{{Y5;~B_WWkvlZ8F)VUv1avtQLj(;Lj3ltV=*ctjo-pqO;K<2mP~i z{6Qg#LjoZQ(w!HIZmLDVgQRzvI@M)g_~60`&t4?<=qXCl_7VDR?`{0b@kd4LD?dfH zWDdATakwR}(V#)t+lp-@4>uA@4oS~=@h+nA?$g7Y8<^pO#Z&R?ar8p@8mF3xc~H?W z8s38-IP}!r*u1}%tGalwri4m3iZxhFs17@i$V{0Ix}Ofd()Ktz@xqFV6#%Re)Rz=2 z6B!_MofsEC+9KFY{B01t?r-=`(eA(a6h8x34Ed0Oe1yMR`X_pW;uP;<9hv4hlA|D= z?mJ$O4qdp{xG!IGDYE$Rz;M`Z-CuLt>nYr1M?d!%-4u#@0fOu~|#Ndwgy_Uqg*6P9~3EQ&6{m)d3?@B9y*m$p6tAKbfXj$g@RPZN3q_tyssEtxo;xmGU1XMP@O=y?& zORMDw)Zw-Q=|wHPqhio+X|Ma-(ZH>>hIdng;QD{nALRr8SB<^YrTl!Jx%=1XcC1g#(&F*fK{rhM`yx_T?R_#2QhWxE=DRQabnJ5{*JesJNuM zx7UllLF{y4JE(8Nogr>@1!iPw04Bvfr$^Dw&IfmN6qKoU_Eg{l)0jRVarpXjz*|7!1^%xR~YnFaB;wC&V(mvZmDF&T>7Id<`1i>YDh)phhOHV35 z6S!Zm0A^=G{?-8gr%iWNC$4z<=Su7>tRS-B9aCx8TW&>N)-cs}1q?k5zGMiYHYc`& zlf(OzhS!_vYNH5okg}M5{0`w3#g-^Fu%WdbSAval$Na-Ue3qE5F5XwzJO0 zqr{ON52Qn_O?o}q@)TrnFzi1cy?2g4Yd8iwF`#8OLwzr2n=*4;5PuCp7UxSqqFnPB zmd~fX2AfU@pUNM45tu?#m$5QGA~$c#~B_+KbN>#1Y?BM3HPq!qK4c(<_7hDin`d z+Obkb$t!Xq8hicmGfS8IvEe4S^v;Jk541A|BGYi2l_Es=A^SNMQd z#-s;*DkOQ@bcOD(H_09=H8tIp*S@O-SvP+xMpWP8V<&cm<5*ujFbepy;>^UbA8h@&yMFJHji z2GS@NBw;XlFZt@kNWJi&W_aPPx$!ZsWn~e;()k}r2(t1s6iJorBQQ&gj}iz|shg3U z_2#`mu;TH$-nvN>tOx(81A38vviSZ&x>y(`TjP=Sziz);AP!?f{OU|O&EmhXzB4=X z5u6T9c<3%n7K_Lyjb&mVMNQjaFpC49aYXUlUbmv#?$@aVk~7u*MCZjo(O*YK8`QM$ zFkd7E-u_4g{|qKAy$eqDaY)j!yIX1dWg%pikm2 zVFhYByF&Q`Zb%NP+}XoLVSaz+K>)Md$qIh?JW~|q7|9gx}})|GCm z9;TZ$;H=MgvhaoXR6fsteeYGamI}Vsuit20F;xgS%LtX!`|PL`&b>6`#CQCagSGqA zbhCseUm>2PSTc`NXwIhm>A(0LWQ(a~c&f!LN_bQf!C+zJTO^u6FL24A-=Kihre{ka zy(<%f<)0^!<;G&b8eORvnMrR{E?@3Sx!@)HQPx-FD;6?Fo|2FBx8{wK&r?!L=l7}T zO;5dQ_&7Z(0Bc3HgAqq2UHJ6$sBV_J`~}pFm>i~P@oE(DZO=?kQT4v#Q40;2B=x9e zBrmBD7t=Jkbyn13&iDG131YKbxSJ)WOFdICPS z=X>`l>oP!|eskJjM6Jtaqt$ zp(5kTrxi7W2fi&V&*Dp(jA`k^L8A6fJ{HXhaI8 zn~)5EPYK6pK~$p1>ixaHvAp^wNQ&36K=~A5(Lq&6%pO1sTUFEckYa`{@=tD{cvv~S zf|^j$21S?-R&--d1$^dgz?764kB&owm(Uwha(o!$6Lf|oclM=%N~8QhJc>AzB__Cx z-}ynIx7kY%!%!(OgC{O?!h-aaeI`vbXhZ$coofj$`Q#Nn*V{%82X=o3a<8?Dtr^hr=Ywm%Wqvswon@DaZqW`@_aJr$Y=Oo1_vAiA+ZEFn zE+!KTxDeyIM_=K%h5Nl7Ae6B9t`P%vcR)v- zmlg>7`&34ucqhGNOcBX%v^-3TbeV)$o1ci*6nD)qt2&+uV4J~E@k}rt9>5YcY1t&~ zQF6AbkahL(P|rb#xrUB@fPd9t6^??w6OQRY0CSar_`8)SHl^)R#y{T*2-N6|Xxqf;Uy@s{AwKdHS+yc9yAam`w z^?7BOSIsxI>HO-QiFWM^g}5Jce*^4!z~}=|-wI1Br>~pw(_{a9CIaT6eV*IH7&M?oNMaWZ+2#^qS90cD__R z3Sg#TN$e$n@4tf|6wjk*@UF$*FvXly$#uk#;W+B{Mo0xebbkdvy~L^!ZfN~FrIY^5 zd}J*$6**jv$0E9U8sQ<7iT7^^_-i%r3nV57?s;hehfJY*bQ5=&?Cs$mT!&Ed=vR1<0Qg^_QgsZ$ zn)#RAO>LduUl%}2&Z0YB;p)IN7j~ozrg=JF#uFy~g;v=Xq7is}H|?zY!0KD;T1SmD zz6eJ8JSlicT|k!p{(61*Z|*1)Yofk4NAiI))OG+FN6q_{v-jLB? zxC|k$8u}FU0zU2QUS)*cPzMUD*AVU*Jv_3A@7Nop zS~cV76|19J;Dz^rWO9b@^Zme`@3FUOrJFWF6N1%`!~O(%>QFVS^{}L`g-&{S?^S?p z$s8Po8>>c2x6PB!Y;~8sqy((*EH-EbtI3KlS$v8D&T6bqu49KF&*Qu3ffLX1AZlEJ zBk)f?SOq`AAa1+tNWwn)(~ke`6^h5?Ft+=#ZNR~5vCSjno5fIH+BP7-y0twlB#KZ6 zQu99ViSf>CcLHpe0P6;#bOU&*wu^!E8{7q%6fL+Ji$Ga(-3)FrXzyt*8!~ni5P)!r zf>m{sMUD%_OclK>$E=?>8Bus}BjlUVk!AvRtr>oDdtV{ULgv-SL~W0A{XU>#-j2nY zjy251{c#`)@Iy#w%l9I|lgv7K_&yMcS*ve^9nIttb~3F4+6Xf_JmGB<+g1@xlQ$|n zJIV2VKB-xn)=oR$(aABXpZ}H}f)*A1_-oQ0aL2pT3$h5e-NfnyJP*YsauP_{K<;vg z@JWX28#-OkeE0eBoX+ z*CYDLB9JmSRhZi)82pdR$S&jrK|U)aDf9$FJ}WLM^yY!h6f@QD!FO7q2uo zrNwbRua;{d0{!2=#ZF$h4M}Fux_gXFNl-VYdyo?EDd{xjpU7u)!dePCF8BQmexcxJ zdDs>JLYM-W?f}7AoDf;t&2iN(E3`j+h;uY-NOBO@MqG46S2g;5&a6AJ7i~zF zUO$AJd_iDAw@VQC@BR2U3%f1^;!Zy!g!Oc2-(ZT~Gn4z`>IH*FS=0FINa1e#YI$_s z;0L(W%Dl`n=opd;0aRokPAu-5_^BHvP7-96nqZhpO|9OI*vOi$4-qyYQ}0N&OT{Pf z;r;?yCF_}!-sG28*7(z`wr>*|jNOOn3isb5BvuB?jl=1FS_>9|&AB^jjrcnNkS^Zl z2|-W1f7_qNU_aPDv;-8 zLQ8m|xT7NI4_W~70E3gy6@h-or)rNcVprW)FG&RUv$${QV3iHmn%w*0yU9>wS^NAi z)4!wroq7*&FPgewD~Tm!k6#wE_>L4Y^vw{X+=~=?{C!TaW*DVhUnZo}mf2Jytz%Bd zhop$^DFx~gy51Vt`ik9ej1|U=lhwZW;R?Ql(w&LjBZs(nN%r3;xC2c_cu=uu(<0@K zD6mQ5-l5}FMysQISN8+CPOdSW%R9&Xc{Hx0Gt>ed*l66W>m}Zq+F5eih{6Y3Rk?l$ z@UzGg+{z`yCXgt2m+!#ClhJ@qK~Kk0xrAI-{b%6d$pS(Y+`Vro9hII`yA^q8=0xrQ zxC9~}_*MyBC-1!ynF#igXo#=^uH+bt!eK?8q2{D8nV>kVIX#P!tvGhFGzOzup@c6S z`t-D7qOA-Zn1$-k?wbFSV;W3__s_EM+Dscb$BBzuYnLQ}KPRVb_(szH#ljWM-J7e= zA78h20h%tstsHcNTzkdHnbQ9;K3qxPjSUL6$@eJqfqH(e_jqidsc3V1l`6{kU+s9n z{|pv>$otgIm?aAH2Pm5$adIP{`!1SD&N@Pt8;esU)z9nvR~ll~C9D5c?Bc{_fpbh= zZwS)jyj<6naDjhXvGBF$)BdRapm%fDblB(8iQikWZ><6`Y^9%5NbrhS@E9cwi4NWs zzz-nP&WbMqvVxn+tjw^qKhFbE+5u5BPf4!Tv9ANR)m5LtrqxxQYc3rz{*y=RQ9ER^ zID{MEU6P84lFq|tPLFEylf4Ne@*FrT8)t83U=yA^iddHpXg z9;=!`x(2u3dA%+!Hmhn>TDqq<-+7%bE;_4f7Mj5{eG-~5iZ-K*s%l)C6FYno>Yv<( z)uS?)P@4fkHBV@+Rk?;XUl3XsRIS>e$vrYlaPL2ACCg~oS6GqSLVXMGyz&=Rn%Y7l z^Y5^6%Zf^k^VW}~qI6pMSg_htR9&Mp891oY|I#`0e0_;3l?ZFYfRBC`z#dP}ZI(Zo z=k(tm!b=wPMtBa8kr^*c6$4Z2@) z3I~jTF%KAxjdBbiC*_GO(Pd3(hP8hD{9ROL`92s3xzNz4y5|*N7U}p3M0ZUg<<6H}c z`JW_><}bgLz!dG>3W&;x?(rU6>;l3PgQ=KY@eg^6q7XF472mp=p!P2C{y&;aT`2a!L>UWIz-?0Olz^K>H4rVWe9 z3+$4Vqnk2SoAn3l@=)?Zp?H6Ymv`_tjO_BS>IcB=(_ zrS?*WW2Y+-?>jCSAJz2dDK4RC@Aob$;b3p`j^mAVZ<=ORqydklE$5(K%;eV|Qa~ZF zJAf|5sR4Y2Thk?S;@fPQU5*4rJID)J#TUARCA&1>42KYA57$3b#?JOTJVZlN^H@LS zRx)vE{jEYd(BudM|C#nP!5D+Hj+!6T7%S;1!H`29sfLA>PKw@VG`jml1Mwj-oF4o+ z9kk2kaVd^RBl=R(eaY(`o!^>bBAGgb*di1XBr$=+N3j}LR#&|0cTIayN=!E@fK7}< zUo@**%L+tWxs_`Vt5+w$G70d3+Eu7lyh0{;#KG>adn-_CO$A#8qA`La>?8Ei&G{ve zZyj5T9L17v5`HO=ZT$eC^u1)}^e`>A!d+)Bynh#=s_h#HqE1XJxfDpTW}EenO)ztz zn_zc1+2Cu@vyTW#cLo%a5B(uFnGv@|)XE`n87E;kJ>}JmQgBz?;h-zMGwR+6NK<>x5oq$7 zwi&$KRck*{xRMyJVQFymp!ONbT9;pgFVmt)xb{*>s!JRY*fq!KwvgW%v8sd<^@A{A zAjh#xY$VLs!myw{tOgw|WhT|3F55i|HBMtI2zlenT8@Vm9XemEp~s(XfDw%!1O#+K zL1_t0ONf90)Qvm?tP%^4;JvBK;I#LAAQ&3U;C5V!pVRz+`AfF)a{q0C!&7UAu61s* zZ}xRUa?53CU^q6yvFRe4dOJ5E?hTF%1W zn2sKuqW^;Pk`TDW5IE=8jX%dKC%A2d;X8}BkT}4cEDf;CSiwhW`qyV6XPCqAB5k`! zU9V!{#FYwx_vN-0(+!Ry=`!*3}BdB5{orO6WC562W?d_lob zZha`KV@!TrThOB z2(I%7EF6nk4p0qSE%YNV*HAnUe$nTS;{d_>1aBZ5Jj4H;?3jZHpOMehnLrPhCc=sa zB58H0;{@fuqaR!SjbCN4RU5{MQDln23_L)7CdKt8L99_E$U{Va2(!Y9hps<=P3}oB zyg$Ard6c_Qp-FV*lt$p*X%Y-(myRQ-L|x8u$rn80j@QVXV?^z5xPMiB7x*;INjWex z^Sf7pCG#}wBuQ@-VE>wxp9!uKfZ5r2O>UXNhRET${LaFZ{f38g)1{#HX@&94b%NIA zSqI%t*2USmdalyNIdFi?ALs2cDO@ULwQ@=DTtMktNE8q>jUba#pXDfo)7^g6F5AwB z?C0#QnrYA_ga zVz3^!sJxHIpPygss&(3fY}i8$o_tq0Sn80{6nI3Oz)aVjVb8wXRp$;0g{KeaPHe77 zYCGHm98*{!`?W~)Kj3U9LPFoeq&m*U`Lph0VMD`Q+@Lm)^gEyYc6OU5u&wpuAVRWu zy7Rbqub_enHFa)?mIWsL?g;F$Q3Dp#O@t$wq-W6os{%$d2a9Y`#qDq%e(qktJW5f*;MpOCa?^obo#F;wZdl|1L+W;jYoOR?Zj=!d|2{fal@GaY?b)%TJ( zr1e$okqN3s(>IAg(XXqqSJ>*vsLPwsas@wPJQkw=&NT1L0QS%D%ec#<8U#8E>_5S& z7n?jt{=z*^rn1b>-YAx(&adBxx1*68xTb`DF}uT{_VE03(eH!-7&u3vMMKQ!>?H{` z@#iyNu7)4U35fk9p!R5G;re!IX1^Q&8Kz6jB+3pxo!mNDXJv_u|Kenhu)9p2D>mH} zZ0D1*2L-kMv%o3=Zmm7fV!~<}_L$gC{7g;|OvK2yLfR9fMR6&lp1i}~ncEYT>E_sA z?)e2j7;+S-5Ps+a?Cv(%s=GhDn2f^*5>oZYe5nMDXTqMYw$t18Nxi8P)W1F;x##Qrr|g8@4)O;uIE{R%mQgq zaF$KBGgXNg8!7j$_cq z(4z5tR-B6W?Tl-J?bl5W!OWSoQAk&BcjSz%84I!hxXb@HUw1 z1VxFOys430EzU<**9-*(TK_M&9+7`h%ccpE`n3G`}6`r3Q(-|zYS>iN3+c{?Hkd@Zzm-BF>GPXLRl zg*i$jU_bkO`NwN+$zqrq)Cqbgh;?$DidTmwS)9N*<%DI1--Uu+CGJLkbxVIb1vn%E zpmz8sgkW#v4Q`1$>|XBS>TW^0?3jMgn?1UNEiyv@tdijCcTx)tLoyc2TB-nSn~c!x z7&(EgC_%IH{{JA7y;@ig2B(sglhIx+mRwV)4Ih;~*2;*+L~6k&7sy03Tv~a^Uqutb z62b9mQYaE4{uXrlxjK7*cBHj2COiBs8NtW<%JN(*_U(Z&s}hkh&%CV|LPYly zBUUFrGxtv`^+#T}_!{&Q!lBc1m%EluNS zLod~os@$fWVXdv2^WSVW*@FEQN7n!xo>skJY&&g~&{VK8R!hO*L_}uQMoW>z0ay5P z=rS4rc5lXVj(mNwkx~w;F@cb}s-?|T5d9aToFw$-ph>~=%=NXc7K%jAXljt-CUXYp zuCT*+P;CUQk{tS_BDauXueK;BY)^qc6I(buseI)@NmQUM91>Jz(E%24idt3$cDote z;=gv2D?CKmdVZ%YZ)8G!&WKfsp+xEvBx$QG=)3^AhYL4bO!YBgMD#cu#FwrX?bITx zc96sTyVffA@HK z0=<8&PcJjXrAI)(+=`+CRk$e$s7B~V%S}`*nQ6^DK^v`66Ads!`;vLVW}DK;)EccNf1hfIdpOMjxH|BUkP;*B*t zUq_v>&c-|CDbv~Od+o{g4pnQxcgBN~1NtMGK~f5TA8V5@z5ox=ebTO zlyx{`%DFuzeO=En#JomY-A)rhnI!E>^`+4fAYVD7R`F9~c&!)dr0(5olXvTxIvKy$ z|2ab!fIBe&q6EfA{M=ct-W9~$q*q_0(7JDUBJGhqZd4L+J|w#`TpoxC;wC{6< zgR-?3=6;UBh`nL70G1lv07Y$8s4wydFB&a)!X~j}N;?Ezy{lGtldLahjOh7~2e$%z zrjy4yP97;^7P$b<=Cvb2|8xn(&;V2ke9C+aEh_Q|ar6e5smLPDHvGo#39LJWie-KF z1Ft7l~OB6gUkgd@{+^{jL^QPgl{sWlyNYVS&E?oW^SheGj<4rh?Y$r1LbrWbT%L; zEmlaaz=cNgP%qkR&;uEUH|5RB-x}i2D8Lq1(1zoaBbg`akg-NNDnF;bX{o*lDs{0E z>4z;h^SB*+w+8;1sd$;LZM47=JD<<9$Sgp|yU6xB-z>bkU*%+7(x@3s?}gC!F^8pW z?j>3GgSyi0gymPqTzps}@VS~#PJPZ(%xDu@8_1cA+wy8BaX#lQu9b6>z-UrV-DZHjpov}_BkV%l zvFgxkXR~P2uD=97Aff`z*lr6Qnl&*@2jdcOA*7|$Ynn)IxkLw}5<>ac!2kls3y!4g z4zB-jO4TaJ4BSBH688zNo*fF!`aE#8QWkv~KW9oVDG$HCpvDg~g`|O~|QjH*cymG;zX#5-NPvt{Xho)ctTasARvv@xSqsbY0r+-q5}=E2PCbG}17 zNqL14JHmmx;@Kc{k`EZ8^8Fewn-Z9jVhN~f1?vm<#f@X=pya^(^?-_6i4X~9c}?GNR8?DyztlY;C*Fa5=?zy>qq?JwjGUs zw)GRiZV2vy@(5O=K=4Y_L|o~ll=%-rM7^e#c^Li^eO>&UptQz#IsR|N#l8>v7C1Db zytb}Kh5o`n=D-5f3Ao~0=j^Ms_{40|A_FNr#J5tb`XWUyxBk{N(poT_$vbN}ItpXX z{fn^nzMxS{@Mvfp`Za1&l0$MD6VyA}V#xw-w#wCwYfps!A=g2hp{K zfd(Q5aol91?B#~>OaG`eR2>x~NQhWG8M#SVxhtp=F(idx(9@WUgyO7nh5WPAyGxML zb6)`*7-DV=!wj8T>eSRRDW;oJDwYu-jPM(KI#Z&n{uCEH;UAHXO9oX)>Vsz0ac`&E zu)`e~B@u)^gq4%2a$cQbhXPgUN&cEBCb=Z>70uO9$NY|B>&yS;8U8i?j$xM1Sj1d0 zMwy&wP(1g)ydh8S1#~&2nCk$OKiM4lwM?E{F4i9?E?-5vK=P0xK2^HEr-FIHq^6vq zVj%KoniJcVxH5rajQ>xXW^8{*rKXK{U>_YO@V7}%K`o#llK0aE%shW(4IpmBii=)6 zWgkHhV8xbEL*2fC79~s_(IX{dQWq%-Eo26HwzgG{79Uc2SySaPuTqC|1VBQ4c%!0~mc+|cr)_Sh- zc(K&>c&dSVG>QUas1czr{`@ZxmuFQu89~!K3SwiAZM2sV)Q?>5n#Rr}(k9+9$g8L( zhQq*z(ZUOA?z;Oiu)au#M+RbZOyMT=js@X@5nJ3T+i;qkDwQh?_Ub|TdliQD3pA~_ zSbMwaZALmhaP$QXQC&eMCSQ%(HkIistD^E@9`cy5(O|pgWl{T*W(I3GnD9Lb zjcYZ$foc4E)J}~M3CXt)6V_)eh!ZB!RZwfGe*C(J?1b|wE{Z+o)mw)RxRV(gx6NMK^C{gPSLxr8Ifk_ycP#DU4#LnJaCIE4jy3Pia+$NsbJSB7$#8lo3^a9V`TAmcXa}uxm7k z4hoGf>4x)!B_`IRJS>3Q%jzF#WewFbHUn|4L}Km~-cs)C?=Mhed4#A|)fnZV&BU<% zmu>WoQaYw5q%2NmbOExKc_J}mDU%aA*|*(F4U&p1@O@JtE-Wd9!}iJKPYyC7+UKv( zWn#dkyE`hhy6Oy#wA!E@YsOS%oM@|@OASTRO>ml3WJ<(fxTjJ|b$JYjVJx9>{Vfdt(;!WbAs%h*bwTh%D4v@0wQTl{7X;)pBYN)Yg<57uc&3Hg8 zAa(pBK76L|;w(Y+%3Y8t&<;8sq?Z(IetC~Z+;;+@lJ&tBD9 zk9+8+pQeJbl$`!6nir+4ZwgosrD_=|&NIIBJ1Z$pT$#0RepO~wdQ(<&=~NRP^FthA z>?%XKfN&$djymQeW6+M^el6k)~YB9tzMWMwN6@NHct0aV-ZZ|)bl{a zgI?VGoY*KxW$QFfp4;+O^iS7n&GdG||1!!Do*}AW&09C0T>nTIUC)DHgM=A6KTA}Y z?9~^uH&jAFfHw%dhX&JOVl{7!U7KsGIGT?la+uS@^c0x9fK$=_cYoU%Nlv%N;6;NM zC_G8QM(JuVa9XfzX7Wde6f&~aJ zB7jY7BU4u4DW}rd$S8($%q*RhpffnigZT5c)>BxlE?vKi#@14WKB~TP!0{C(vAHSN zq+6}-tlU7k?xT*JeO!n?#Z+Lv$dtz|B4EruX{8{zN~x~G_(iF%mQh-}?>6;$mc742 zYbfTsfj%CKy&~Z5xy&?NC<+xF?3QK65SlV_7m0q{u4Qf+U`(CU@jgz55Grmee z!!vbF!_>yhu?hpeADg&dJMmIQp1Jk1QZqg!Ty-SL6Sb45)VIPo>GpvZGi-&Qr2~o# z7)v?V7mPW1*3ouT>Lnjh;7+yIC0YKr=My4@Pu-#k%}*E&bSDl)jS`7HM;@ z$IEv&m2^X;l}hraTMnjevrK5Ehf~+_vL`LqD zsaMsnwV)&%omW{uRiz)DzcmBq4&%Wq9CPF*QVoxCyN~b^OG4I#N}|R?|EFef8M0-TUiCi-|dWWGeiN zMz|lcvz*sBxQ1xu$lc0lUx^D%7-jS5>Hl~`7aJ*q43yzZ$jytls2cg8C@ro;moqet z+`k(ohqG50BbU7jb0|-cR13RSr5}^QjJ5vvjN+`<#zvJs!Win&)KSK=u@DM#G$+l3 z6~?7(f;Y63@i>Fu>mYI{dy{L<*ySa1bP>)4n_wkT zn>n_N+#yvOt2kV;(~mmW;3s<*wAMd|df=v-`WYTRS^a7L)il--Mw7(hl<+91FG!>6 z+OX}i{BK#15E%t)V%Wyz%mQN|6z!(UFDJ8iFp{tSEt#?NsCna z8J!RH<`;^S4nJIf4Rv}XUnO50qhCxXN%dpjT9#35DWVp{4Xc^cTTrJqUg|Of03dSm z+^|3E_Ro*vMo@84@G747k}ooS)-nqVp2S9qcGAuC2aJJ#V~;}s8L`kefM3r}R9@~T zo+n4Ip@}w(`@QUzUhCLn*@TFo03YmPUE~u?hG`}}5KA!Gt8EF?&KMy6>t8QMczNf2ha&_LArQvk2L~hNp}?PC=9QR-AtpKT$dTll7IE^@E(S(hm}5Kiv&4r$L;oJdya1 zl*2&_7cQn*F>*gf12gfTF8K(^Jq>nS+=q|Bq}tZrn|fR(dYTqC zRq;4cF=IBFW+N^2OsXpaOSjMC%QH#oF{mgo{KtgPoou|+P^~!fy8n-YtBh;1i{f;5 zcaH8(3CYnlV03qvgd*Jx7!3pI25FFxj#1JuLZw?JMHGGaetYho54*p6{&CKI?zt0A z1X9<5jrMzy@TN@OeXlNAAUBK{-utaDmEE$HTPtJ|x1*gI^%wt%%r86T2g>_>lh#K& zS#0gOs%x%eB@HlCMfIDc&p)AGhtNgZOmvBnQB{m&@1gein#1F18T= zj4UW?2hTTSl?0-eO`O_Z5T2k=G@gx`)7ym9aDl-J2LnEXC=#YgK`gF4YXxxuc^$g^ z4odFQ4kaGv0yJ-|Z!X{kNdnaE!rld$k&=XX?e*NwDN84&r3iGDv{|&5IWORxWQ7xG zs52m>w+G?2$?%ZU%_f_93z(A$u1g23ZVIzC#WbiB;Cx80!YhyqOpOJWN3>SHxDP{^k5tb|C0C!a4 zaa3BxPXVa~RQ{>N{OCwm$%mk_3M95!s3yxAGta~MrR(ps!*k#m@gmv?`bFq99wn(F zmRQA74t-&dXZ#kiOyiu~)1vc?KUDr56th)1UbRN)$yo+1&`Mp2Z@HO-E^STTeKYSc z@$p5J%YjP0CgLh&_aIdI`-c7zXH9$>EXh9}YeWCK%1`^pFYnkEQ&h!?4;}H#5Y2x4 zsTY1`{1`zb!yVtMo$)aRx3K&yb@6d7`B+@m&mvXyPsrvh1=7-R9HTW}ofZy6R z&s%c6@%cT2l@GEC9JXc&+WXpxk&m=xx@Y6456YM+S#|m{3RgzaGI9Hrt&7(@bQ)a= z#S%;%i?;6q&cWPY3HOc*-u+ZbEV{8vM);lcd48%Lcw?LhsBvzz?W~dhY!KL4MCP0B z{9tD2_$}v$cG+HWT2o}o7Bzd%YvmB|YOU<36#!)OI@HAPwWg67X728yyYqo3f)*Bb zV+6)NXq>9`BKifJxBp6!4|!UYNl#_d*(B>T&H*WY@K+?@XdZeJxYs>XY{mTcFYV`< z0W9O~WUYgc!e3e`<3O*^|B`qgcANk5e^*JkC4M_8#v_wH|N+%NGPhfVg#V(q3^P^u5_z={0&xrAK7HDw-fqgJ{t zxN}ImpKn?f)hHdWq$6F{6uRHbq7`lKCoNyLsJK_e-d9WU5hmDm^12#;8BMC@bevsFTFIF2xm7n+W zrBmFBN>^SxO(ITbpneksT8Cbjq!!hAGN0_Ntt~SdAGsg;YD{?of7^5RLpB&~y6j=| z6)v?$g6uCV@)&7cePtzWJJy+!P$6Qg^b94|K#7*Lz>#q2+g|Y>rrFHj9rnZQ7u5dH zF_;@!4nz6;q0@h_$*yM^+sh+}(c-_vdYnSE8buGYuHNQFDo@S5CAI&0PKL4N`K=ml zwc=X><5+>6xh!L9`v5zPag=8tbG3S?M(C+o znnj?=!U2MBkM*s@2*vuB(+{9Fzxm!DqwzAH^UBTkJS``J9!xIZF6xS9r`rd%AS~X%l=++0 zk@VQG(b{#VO(%I%14z^~YGVZJuA*9Iw?b5zfywR-ce-OxeyQOD2W>}e8F>q&g^zar z0D9d?@qdSjK(2lj`RnO0m)nL)eck4yY>XZlXaVQxWLRsPK%MLWr6tXqps5()zWDj- zaiy77gJANPKO3Bs3rtaEvT)1cm4;VddNV<5Ozo1gZPdELgr>tmChGQF&(Y@l0{~r) zd!P5t7qgMT*(&Lg{IA1#W35kgn``4|Rw!F9jr@2Gb~^dt6_!rF;MdV;DV6?tmF&~| zo0&Zm*YD4;??Qq!oHOHZOy3R4wjlsw@Xw&xn5G}n!y22mw4bvTL)O|^=2+neY_85p zV^JwKvoWpcm8w{&3#5~uJrMkePN zDXh*>3+)@=BoAAXh%)S658mE1rz`IlFeWa{k#}I!&Y!Bap{dTt)+>_^RRaeIlc?m_1T>UqqO|qdj`_CGxWOeH9ob*~xzS@`iIy zFMHs?wvX1<-#G%>ykg`tOk;3%<%QsXh87tHjaY%JvH%Ts`r+{pEQOrM2lb^xo1)9G z?543)j`h99DhIj`8977Kqw)eqYYSODuGG*qulb4}+=e(+O(Azho!JrsR+56k3mrR; zQTs0xB0%`dY*qkE{}A!aDhfNBU;)j*mEKsJ{y<6TAxmrg(Z_NsoZV%pKIn#{r1&~3 zOD-xp-t}set{ud9N+@9~^bBpG{7Gz21hlupl-NcL?56`KivWAJMe+%b5izX*hVDW? z=0oHm@Mg4HZm(-&QBdD*S{a>_GkXN~@?=wYA5{z8qZ+A%^k-PJk@!YB7=L+(ug(O! z3;0T1PT6-OMjTU-&yPsGZTO3e*gpBe>fZ3fxKti!LF8kRJoOF^N@uq373n_!BWIr+h#9sC9XZU}C}Qb$@oiZK z@G>w^$eVQQzTaTZx5>U4!JR#{V|vG^j0gJDfFI1|8H#4Q35!g=tbKb~0~!!b-U&)*+(C9~z2^v?pTzRFO0M39 z9MtnyjSE=NXjdC`M`efB!bbY!?=@I&F*OXnyb|PDLYXkLcK}Tv3(S^J);E3RADZnX z(rFRN{*&4CdV<6cZ$Hk?@$nsIc#N^*U(oWQR*_lBN00l3;y-@*k&pECYeUpDZzI;e zXert)T%YS&6XQsQ4=Cw-=q0)(T7qLbENm)Qq);AnY?JBZ8?r-o(ux#2$E&8Qv`E*0 zoFIJg34P&v;k%VM_FKOrY^7I!#r-p(bWJu-e0tPpX=3P z-x#mDSE+RLwV%J%e=RHfj3JyszK9he2>sV-1yhJx1V_0-yu{~=4xbnO6M7VtDuZT$ z29%kq=q|wOT$`p_l*vp9Zg(PQl;uBiw1&oY&39x$gv06Q`;HU-<|L6}&Ycq1&4hZz7Go|%vF6loU!;ue_ZXvRR z|E3ueD&Q5TJI+6dOgMZ(2vj++nE|AiRKyBog4schu7`HN1U>yX#k}0uVfS-qR4|UO zG(Y-6n*G+rRtSk|vKGd~I=~-fL>r$p%PF-d!K=7Z;gi4AKEAZDF}zC;s&pOaQQXJed;Q?zZ&ejZnQqRSrTE4GDrQ@8#aglx1!({ zr~>$HU+i{nr34=uDwj#7g~*G{cbft!;lq67&H9BWPq7C!9xkE2;l(rjp>@T1h&1&_ zKw^V8NndYvP_1(nLd_w&ALXA0$}+C21p8;U+|x3GfT3oubyHA>Yu(dh& zx8^|VgEJq4I}&3nL3`(#J2qPw&B8_3(;h4 zcdVIVDLtexxNVp( zD>?mbx>u)-RX`g|24qQL%1)o2pT5=_f{1m+8puY@;LgiOF@&?i`mxTgn?_zW2Fq$6 z)bFL-No^8C!k^NpzuX+2^^h5sn*DOshKqh}7RVH{>L1Y-S>m=TC?eV&xV(l7Yv`1< z4ph8~AfKO!N3^Rk7=KM_IS!#eicyZkaa@csn4ia&s?q)-5ScWn4bzxc zld8f0Qgkeg=Rku>FL=-qKKXAeQe*7P+fYL8{9%WB8%-0-nEsNqwHvMKDTIsDg7q8d zx18A*$}*G@S3d@~sDP5Z`LSLywTNUClxc4%&;6`A)v%s+bF%&vW;)f4MdF~-({?4?VZxi6SgM%x&w-RUm zi=WJ|Ww^hJoGs{~064xc=?)67Ed%@%{6*;&FwXP_-AIGcgaq3s3i@u`ot-MfNvEM6 z55298HKifY^d}HGV3RTuGcla2_#VF+x|_K2vf|xCMP+2U<(j{KO0=(ta#oA%MgDq` zN^E6wT}5%D&t0l{Vcv6!!<|WgaP}_;kii7Zj>hY^g)G8#j`}?Ew?9??(@_r4Akj#Z zPQhlLS_tS=#3E5YZ}kT1b9ccc%c~kF7XN`uygKX zZ*wGs@e@(mx=R!9qtd^qq3hNn>|HnNuclK{GbK820|V#h&&&f$F5Ot|QEr<0kEhn~ zC(*H2`4yik>Zn~mvZ&nZ97$V^Fo&`;oZVDr#s%nOB7;=-8IN|@>Y(zrwF60|UPp#7 zL4_y=;i5w4$`H7{>Jwb|C9onlee3Ad7ZwmEEiYs+Kj612XjH6cc=(PYV!TIfPkm5Y zdfJQ1l3*Cm1RwxgYfOkB`%cZ3eR`%YNh_q>^wbdg5O=;6HSkUBT&?TmVa(mvqM|SD zD;#xrA7i9A+^~&?oZ&~V;R~~ORdV+M+$feaR18?98;x4X03D9!+E2S1&XQ{*2ReUA zd>u(zf2ym5?bg{|;;`y8^jKF`v$^lp*;aAXw~|U|B_0iTbHnaaZE!>irB62nTZXcA z-GxL=7q>ekl=R5eB&bW~sWX5~yuTxKnY-FQo#xx`-zT;X-D$Uc+CL;?cpaMve>;^$~&pEiduq-QNXLhP>fRYXQzrM)PsOF`gb5P}sqiMeU{{o(NKcn}Ql;hG&Cyfi| z6VaoAAp-X8|Pe-e?i;*`jW!CanujdU1HA%L*=le%zLpId+nrzfk-5G@R65b%-ocDbvuOt-< z1!dnss$|-(xgEoV=XAZC-Wdw9HykA%;A_8*E5MXHit@gA85d!80m{m}cP3DLzrDtF zram~s`n8F*ke^cem~U47zWukE6Ojz#w;}S9uGH234xRd8)EyUXsK8}hc6innMs1w0 z?ZKr}fv=$KdH%guMODRY)#kE%bCYdVd9*rhU##`m{Ve{;$`Uli(Et{#9BL>lI#i83 zQ0gr^2VsW!Tm|R7Q6F;R82n4|w2iv1^b!z^>6~Qit#8_;N$!LmBf6qF7;Gjh3Vihx zPf3BMvsgP(zNF04nKbyj7J_KGw= zzA^?(d{Va`8fa1IRsn!fUY3@R>jdTLVx^7E@3WRsFQp#`b$H1#8v@br&PHG@Jklbw z3N3cn)2TcqHgBu0Uqo^_DJN^~yz*E4^ppglEb08ck4pIN&&nMgekQ_P#9DZ2k6M#yg{0}oA&ihA z0v-%BA(wL9tFwa)i&gKz@LVl}D}Y0q3G6X1RXXkC7LgQbzeyAuo~c?Kcc@9c*YQqL z=Z&(OB~I4^5J7$%_Z@j`%zSyfBE&{3DNclYCU?@eozRu{?Jo74Q3SXn)XcdEdiFz|5}Uf+>|?rt9Btvj*5bGh2#~8;)rr_;9BevMw~hJx5iCd&}{l zg3!;QhTy3KlkxN3W?Ab__L4*J5^B#_xaN}n*5RfM1gr{QZ_=OK)#y=r{{| zE>+jH?0Vgtvl9w=dmIY^u>`=b{FOf7Sg%da)M!pNhaBAXF12d;s@CEL@@1Yjo77I= zE90N%a0Te?n2#ZKMTtd>eoF)t@&sbZ_gGb#!a4f!D2t2)+hWS!;yy>`40|^TOn`Jzrhea!dFSX z4ShJ}?l(rzlb!OwipZ{>jU--$R6?W+qRv4{5O&Xvj*hFpo5IfkN(-Igc?dOtbg%xN z9R*HEJ5Hxcw{}e;!a9*Sa#+okCQP_*En&rXr94O)wH;aO?)}C;(CcR^qM_`TQnzof zdVjN`b|MU&GKp0(@h4v?xfJ77KfZk!vuqu+PK>7p7I@VLcD3cF*vGP5w!%kEE3Rv} zuJtAuZcgiblq6wHlYhX{=LO!QR8t%YWl8YztoTZZ|E2-qVUko!V45jALvWgvq<&2P z#AF#@8?H`Snduf0cN{0SZlT|I-sBJ^<;C}&ola%lD#%nM@r86SO2-xY6zS{*C!eV+ z!J=lRoaGGNlB@XKpXK|+p4OF`luPDp0E0-tim+oy1zo`V(rl(5<1o)_y)gzCJHBdi z43wSK1HDn;*k*2y3WpKqJ@=6-7lXuQ=@;FvZ*62eXio7R@ZH&!0yM7>I2x42voG9_ znjA1bO8iBw)%?=6>J(`Mo=|dI zS*tPCT0-;8~gJuq^_bq$`HG=LWc0IqRL(MsKRUy(s%O;xQy z>ndvu^4mBXj4Ow-t$9Wmg9d0AH#3G)N|p}9p`SwRWhoj+A+pCP#@zV)-#g?`$~5+x z9MLv32@oW1j8$Oi3mQ7kx2!A*i7bTAuy?`oJkGjnSBDemzbZi=vfo%u)xC%;*mcY! zVkFl(<+hK;8UKjx$^9OCGJi3t%2a|Ua2pAxwhxV*_!^At`9}a{G^=yP_=!)Wz^U<& z_gYfmN1G{WSZaEl&c~)B^$m&I3b4#MO{wgW&h6WmvATIxxs?#0fzIWE-Xt1|wGY*T zY=WZNjrzjxawu0;C5EeHaZjgJ?y$adSDLFapGJPp0@6`q*PWOAFlq`oU4l3s$FR3T8}sxw^<7eti< zm1fw|)_1y0i z5MCyXvt7eaW)&SP{U&WGvhQ;qXd21Ta>`TeoJ|=>R))?SdLbS|zv_%|6(=A*de#W% zOz2u7I{WjYWqITt^1PfP!#ejmfqku);Kg6^p?)%7aWA!D!hU~t1`xq-+_I`kk*ySv zkZdypXzrYfD(N&oyoKF~9?5cwSkIO!!dD-!^`skU)-__JPYB=z>sBG_B0H3;sX6bH z4M-Nlkn5G>0PZvAbawXH(3MT-nB_^A8tn*D_2~I_ARCgfG>|Z{M*Q7A5mIg=nXYXb z^S3?S_!)(H$%6Ew{|n93~TtclfOeGt)3dmCS&wPUEr@+Var(?zH$H zX{nBLvlI4~zaFD+9hY93A1CRJg2%?AWH)A1)&p#~ipA&lG%>1F#|qfVP)oc_L}0!^ zY(M6D-w^00w}PFu4dx1s#N?S@dTjA0@QAQl%9?Q;7R*Ixl)OokPdGAM1QaayXl#ap zCHwiLMpO_wQ@|A3CvSI-^V7J>1VoY=$2+Igu<*g6{~e61=kfKS4{mGK#u@Tu76@a( zHN=*_fjQq4Lgx}ef{hcU-KrgzSK?+Q+$6!8qSFkytgm#5)J1G)h&c;YaII2ZnBLK1 zj=g*PFRKr3-?|_}8u=<>pY1&;J8 z7=zB2f|~iiK@D(#E=z+X>~C>TF)Yp3~h-1w}(0Uu73nm~LA62aWR68}736 z2IgrC6*c9fD_s_LNb4?|ol6XTaV3$b?t7sSfSrk`-H6J;=|;pZSM2K!R;}maEzlmp zpkKa5mmq6qs1%BMk_+=`&Z-?)+TBc~!d|luKnaY8~$}f?aBXW}@ucu`)=NMlGxe^}8Ti^RTA=&EmLnp!L z4*MsZ{QLTwofvDH$Y<1J59yCwZJ#Xn9yY&KL8wUX(Y~@1gWGtOfGkkVqB1|$Pl5+X28|{;i$x{V;K-~W!GaJyN4+`o|5>RzbR<#mdY>-Y;Oe_8-T3|PNnALnH-L$gBW z9gc^!SI^ZR>ViZ)RpffI>Q~r_^s_<-d|VpfxFCe#6jmy97l83yt)L`68?q#z+P4;> zgtxplRqWJ}QeR3YZ8we50uhk0MVe|DY4jAF=o_ry*w9rmt$|RP(oX#wtzv7K`KS5< z^6K|*r-A25dm#nuwHYfGr)L)Et}5BS!!icX(r-MFi)AR1UBlh zy_P(CtuiiqdLyvcQ8LP66PsY1WMomqFKZa%ucta8o$h5Kgs-6VROfy3&%}WqQDxoz zhva9f`cssZY@DbfonM3)BTTE;Z=sX|52@oNK8=bT0{F;U; zzyBf1A;znp(9yU^=)X2)Ej)fiKAF*#ZD58v5s+Bi&f@wAFRWW|XL_LoWl}!O5DS z)_2lxG(Y#^_MQr`QzEnoDyH@!=ITyhQPi&)QBf2x?cUPo;Pi1iVkdboMjogvum`3o zSk(J_EK*TSKq{)ttH78;3Lo>8VCeJ(DHMDdXtS9Dm$}BFBLjAadz?*hORDb8m2Sj= zW7;q4p!R~-6HG=n+^?5Js~dl4_x_Yr*p37Zr7|aSsmEt&vp?Cmydw3!_>znt&;ozN zdU7_=Ene~VsU=?|=9xNE(w-F<+qJ4!*M z0&(AVXo(#S#Zun_;K-N)3hKV({)smp^~f)IJNwuga3NfGEMDR*n~*}g)RtP`L8I>A zd0{-utnRetf_k?2*f|q|5xv81+bS>0v)Lf9%7kjx{N>&kEeST8^sY@uJ|j-yNcr_il=a-t*1O$g$3g&zXT=r_w=I zGqD0gkV?~T z2gNeYI!5xw`ETNvX{YX=^;&M3g5=58I#eIK2l7^_u5e6G-gYDMyeLg;LXsKPVP7l@ zDb#vZZd5oKi6hW`3yf!ylon-0$+rK)p4WB-!r1u-Z z2oX9?z5rB4p~k^7eCtVd)eYBU>#sMuTBbhOqYRSmklEKRf=pe_R`eT_rdsA}H7#;qMh4ht|JXxzU@-t7w)3$6hroRfJyL@vQw`akOx0 z^H&em%Suswl}DbJnmw6*8gGf6>v`F*;=V${p>=*$>}&vgI>`9T_ zw7dLIQu5YJfAT*iYQ!r)YX5$%*FP@T|9ARv24=TInMfZXJUi~+%;bmn;Y$})fHsx( z9slPEN>TV;v;kgFxc-uZ#vX;)*H`D4r;__BgpxnF84mC?OdQ^6&e%ctVsnudl6}lQ z?)B=Cb)5)~{}F{5PKUoLt3c3Gry3<=T%c9-`zTx0UVd{;>W(bJBmF;>bT*EGeV1+} zZYg}d#4_2KQfC;!-_PJM9KF@w#MI+I{6Bu7Qoi=dA<3I-391a8kUq65X7I7h|Cr}v zGRI`4u{t}D*7IVto`qgQXNrOZ3ztsL7`Y#7_fk*wYXFm``!b#erdameg~SVw_s$Vh zh9gNgCHnd-4u<|-(`S&5NXkH72*u|_!C`|-mg2kA%tQ+(fg zY($nw2`g%+Xuyo}?AVflAAD+Tas)!+GrZUxn)?~_p4PbC= zU!t8~0G3Pes-#xcCSEG})p9Z?V>WXEL3}j#X~VhT%!NX=BO9NOB1964&14Wo(yrXz zY+SN5liaT)+-q=Xt|z!t?o4lNx|2q(y_}T8esx+MlUyGp_72{-Hs0Qgbh{lgV?}Q2 zNL``g&Q$(%LUr|@e_X};!BV``S{%x}KGC{wC3HL@O~5@$=rcB68yO^>170Qq8D>Dy z52oZQcBe(o**>(lv142usv*f1{*iO~zwC7I`-)M^eGJ8v2&HFuVhlBVi-a0fU_~@! zu2n_4b$qs|QZpP!=>uYiN5kg@&0cZYAz9OblccqdggkX@hE_6X)UoSyb>{V5{`8w)R8aY zu*AR(d9I_3WPLqO^5Iz0Pde;J9_?cxBB9e}*1l9oj-if;e!<}##&5iRfyYHDhEVFx zGT!1DrkayGt8$E24Mb};#>L33ck;iga=PiYTXk;5UQ=6ZvX-ka6iRksdcmgr1GXM^ z)#SP(@$KElw~^@f;8E6wPWMeH(^N@uKyT(=OGibPu-zgG@%EW$*_kY&_HJ%wU4tJR z@h1Co02x^BP(~m{orHgVi4@GeRn~a8wQ*C@P^fbpc2MR=j&ai*v?`IBD=(?T&x4{7 z8RDs7Jr)KyiOxgKD9h^|`0jUPxS{!);$2MkbffQprQA8)PkfQM+g0w*cy$ZQ;Eg#w zLomv;QT)#vwK4WjlIdcJ9b01`r4KyP94Yj;YTvxwM^tURs`BLflhY3F{PUw$3(aQr z>9$T)o=xeDv)pMhP*{1QBK=R3I&v4@FO=lrx_)`xl( z3ZBc`uZX3DvxGfv78k3T;h*|~9*Kff6L6uOrKrBKK~gQuowzgFgQ!ryINFe&e_y}F zDj*v8Y$Y@4qst%X6)oN@*LAFkk&C@N@OQ|kot>XhY%xavq@06w03FHJ_=+NDvIl-Z zF~ETUj^Fxlgnf>VLs4CEig9M;8%77qh4gN}_PUEUv%@xhOZ-K^Y%xZ%EbZHX{yuf5 za$n~t-Vdv4t^@v~w*)I1&CEkR4h&W@wS~6Y_b{to!cEM-uF9cb;|n-*(|bj?K}7GN zz1a+kJJrm8CAId4b}jhz0KYLmnV7s2u$l5z>`0wZL8SylC(sI?XfF-;sp4ObmD51w zo?riheAm+=w>5u~`s@5_H-g>kI?h9|zB#})+VH@_u&GRvurHT@K-R|=4=-$V|7Lzg z=vHKCP*Atndi#d)mDxz}&di^(;?1rF9E@}`_ji>Nr$40x%_x5Y%U^)XXe)-@TW&QK zK0P-9_eKA{#-vl?rgR(OktEBS9XrV9Aee#>1Xwe38rX@R$-)SQvTQ$^jxZ9lTfI%w z^QeNOQxd2gsMv)T(|aHKF58sO*ldkhEw4mb?!UR!;YQ$VqZ48p;Ac?lm*pN0$#rCD z0T!@vgp(0%8br+g)9C+xqVF|uY2s+mV0Zy{Ef&~*{qX4IT`=qDj#HI(b9(=SNjU4F zZx?Tyvrph(0jI~2jMUi)*#tn-&=tQwMOSJ=TZtbUDvOnQBG(;xZpygH=gqja`r}=tO(-u&g!aJh+{+5S&cCSFqL;TEdS@XWa5QW2ETR z<>^GNkVOYmEp4trZOUyS#pG5cA=F9FQhIEdkQpEHheVou;I_iUHo|;GscIwgS^bS? z+?u3=zQ{ew-<=x6ZMrj%rr3prh?4lI8(lH^TN7=FF`xsq*vb7IQ@R(bwKAN(&jV+9 z?k!SVn(E|FQK)eO-ia`3Lo*sS`G5B&a3B&X`EeB+Y=IB<_eJrxi-Nqjun8~Qg>J1u z_c0W@8xhXebD%j%e&E&;P;De7Uu<-L$vt~}pr%A8W(x&hbASnX8wbxPw2woPD6Tm; z$4-NzP=;bQQ}>_&m~8A6%0huEW=qPnJn&Ju01jQ7HY@ZQDpCR zG|z%m1zq^2Q=+g;v;+#mKcuCWEEPG~8u0SHvXh64gnJk_@HAUUN7tMAJ3TIu@kjd2 z;NiSTweWABD3avm*`n`Csenx^N5Bt1VUmnszT$u1V7mbSPO!}z=scm7+U|)$1pLP0 zMb9-TL+J_zX`_W&u`E7>taSF}#`$}l`KV`FiM2(Z#8m%w_C>q^P4oA=1iP*iZB|&j zJ7dH>WbgYK$yDW)gwK!aU*ywU)$r^Ph!s1TXboNtvn^(+uZl1L2ipM%%B7h@8h%W7 zC3UjH%At20M`L@M>TMjg+}kq0o(#!y1CkhIK&bYTFXzyuEudQQWLLJWaDDw6BXt6f<19&Nn|r-6UEka?Zij#}{%0XJr*HDmzTFFY&c7IY-XPB61%TmAXIbS|(qD`G28V^?G7Wz&&Q8ta1>*6w`DR`8l!#e2u+)i6D2^mc z{Qi7I-!0ztzBE%SKDT|ZuvvdHVRyy6fhF||FeItUs?AC>jUt=S-41>6~%d+K$bO1B7t;Doxc4N9hWC0F|!U z)7&&GW=QZfvsG|Wr~A$udh?sSCqJ^=xbU*XcJJf`5}9OYPM|eARpZ5==r8eH-?>SC zYBX$M!8J+HVfKZSd8knud*t|J-RsJF;L?0Vp*$}zjiS?dF=H{71Dwk0M_~~;UNTYx z>xN1sPv2acx9Zi7O5n$Bi0$7^Fp4ecP1#!Iaq+GBMMLI4_Q*;I{EpFE+GBAP_(cw} zFq!R1HbVURq&$9|{~RPc6~ki3;5xnkWFdPN#H*RI#({s?rj%xYctYrBctXFvdPKc| zcepmo@T_%KX@LN&6g>p(GBR>1lujIc4GaFF=&ynKW;oPo`qjF}1)O5+VySWS0frp~Px_Qo+( zG4A4wk$h~|=c5djukUXKihsnHqOA+*TZVb^bi|yzY|+IA?s!AUMc&z&rC6{&n)vH( zf0X$yGjho@E3?RrgQq)_sfE96xRg^_>zOM#dOABU*o{{gOU1rk5zC*8&TvKdNi6nb{e`LOve$XyqF*l_~O%~j1Bf!UA>)awr@d6J~|bW=R$x17gI0We~)W^NOZUg zvq0)jMVGo=_TXRXm(J{(wFjk@p6&n2z0!?1fHNrz92`ueCkiLG#0_Juoc@`{A8@a( z5h4q;rzC(88`AhJudx>~*D^H}qfjDhabZ>ouBm1fTDj&TDz)F!%Ch?zZygwUID;%G zozzqd;`klNTP)_2kRuK_xncr>6;n%^S{F26{UFVwI-tK3^wK-UA>CAW_G1}HUN?lG zrE>S)ZOB4Rz+Q)H_!(1D+7o&1;Q1$j2mIpqbPc)X9ldcbfKiK^ln6*L^(byZ34jX@ z{gh~@UqPi23?cbqSIkNYy#+GWPMYebYAwcMr4F{wv7cDgf|NrhYIb37uc0ME zHDPbHlE4SC6xk1kMSutk=>py!D&4i92_bGuNJ|a@%#vvt^wM#=1>^|A;;+_%0*bx5 zf{UU+rT^>mRBK>ey(f5krX}1eaBXeB2sJ}OAlZmiDVeBY=`!z7wi>V9G{?KKl{r&B z{J#5X5V}fjgCo%8XP2tCh?P zwA#R}^|bUEI}A}$pr*{{0m^)%+^A_x_J9cV${*FEZjj%+U_K#qY1V?iQp=tM)i&DM zWCs~i3c@S|A{^xZwO4`l{{+)Yhn+4p;>FyEqhtqf#@>F@d=@|Z#NA(ng}{t5G(CAw zM_#9KkP!^L=ho(pDQb1c^?V=zXxH#+p$*kksMhq#XJ=g!*6>b$EHim{0T(G(aU_n{ z0!62**`&$8Z$OF{7+WDRC2-nl3v$BD?{ixun9d{@k>A@BfF9Vut6AjF#*Q*i6hXLy)oCIXQ1+_EBV32X zkctEUIR|3m*K1S>QeG{blMqg44yc2%BazuIg z|KEy?B@l7GCHd!8@lsm}oW^rM!^Y9RpI&qYrFxAqO(kEShH0etVsb-Eb{j(B4Xi@O z3YuZ^MOEP>NDnGtN#*H6CRZrM3!z*Ez>wwB*jKVfMh*NtKY3{cQnYu%*6aCk*o<`& zj2CDsi^hgn+eWYoo7~>HL-Md@LdxrJlJ8Ot zZRVSiHPD?T9^hl6hoXb)E1G(ZofxLIdecTyv?$f0XZCgdS35+1wY=PoLl;KI3e+nq z&t`FPSUTLjuDvI}#|U>ZlwNHD0ijxS9ItQC9`xY}^kijs76}sd3p2}*aB3NMagg$| zG=u>Qp@XKWP4WSahJzwm z#?q9Ii!xlFWcPdqyb*?qFNk|k=28Aie!)dld8cP;uvBM?OdLGa*rIMz?#drlFGW2- zwk)O~1yNbiO*C$Zj(j|BDGh)cSI4t$W&vsYc7u>EnaQ(&$t2VG0~<{x8NV5Pb8YCtC?NvfmTx2%j201#;5%<@=0 zBggWw+==`2nSq=2zqjyqLyVr{jPnRZGm_{#*l8;{- zP3=ci)2spXCw|JmImzu9=VvOyvj<%6@R?&O zyjPp}c?FUJX$M{fIMd?Lsil?{y-xcYKA>ESH)j)(0{~xa66K5;;p`c%H*xcI&+zn_ zM&MlWw&HQ}&FoXl%;0@NY=!&^9&tcsF3vE~S)Jk0D(0jVO0{IKq~-XZl^d`c-Sz(o zZ=TTfvQQxJYiHv)S*r@j-WUyJfE~((o$7PPaxSfOB6EQ$_p!;a36SD{Cm+BN?0x9g zzTaSyyoyKU{hQuhc|HYsFJ7FRCCc}tH^ce|4ig~nM28d7$MD^_r4onu;3K)tPkj*k zZlBo1GN^Ad92CMf!Q?Jy=z^UgQIxCtJ#+%cr^5vkh`mJ0 zjq((H%ScdVH(!%7~$+2j8T5Q zF5I?aP1kONx*4i~atWW=G>a+m-*KdRfJ^LV7FtW#`@S1Orx%voFeTVIo!G^TC7~kpj4^Cj!h$7@ zr11@#xceGvRR?Ecytq4)ReFc3F+KZ#etsczQ{f`T!%L-17Z$tdU3trtpZj2X46boE zB-8~ENVge6UB`19d@w$~_n($m}O_`~))XRT zfyif-x9NNijqHBa?o<#UL-C}WX!9QccR+~01=#|P)JQOsZqE6e>{TgN5T!%lRP!h;y92&rJkbOb1WDxLmIwZITU5X~s({YX>u99;>;yHL?+Sn{gIRvw3 z&VUrUbG5U%3ZisF+4!cBb_QmlCsyUbdQC|b73Z^Gfa1mtgP8euDnsKuq+NYxm7OQ@Rx3boNS1zN;JV4OqC9A4*Y%7 zARlC(RxC%4v3DF2D2tr~n5(GjJO>;^Ta)Sii54r1a>rotXxNb(V1VOi&pnIE_jLOq z>mL;>idtG^R}5IIK2K7tEJlnm@UWsR{4|te%zl-JT0wt^38U<4u2sR| zSFSrpVHCAcrmaIO%``L?D~dYv(*0-Z48<4ArJW?t-k!4kEASRplH0zEfNL`i_d&JQNDN|Z$C zFlQPTy$Y*Jl?Xu2oV&KNIS1piHqVgWpmt251KSgFqor42Rfk&>Z4jVHoitLibD|-N zI-a?9Y|V_v+356YTJ~wZx=<4ouK|P*8;L6GVBKT+x%;SBS@aIFT|WPO3}#77?z|s8 zBvSTumd$DvMV%*NOBiZwvp?+Q!Ew)$yk1UFut5|EECl6aFv{MOxetI{I0mCE8DLlr z$htdWmQqvz_Mul%)G`h=Hi9eC&$z!?ucD}QIJ{eP_M*JI1XhrJL9d{DkjIWI#l@h^ zu3q7L(?hgY zQBn$b(%(|~0HG{LI`~#W^aZ8D_FEOG0X_zBdXL40E2a+x(W7mYDvFZOA#7*=*?y5g z$T(LJM~77bGda4R=-VoAHIpW5l|*fUqZUQyyJ2Kbx5q`v50NkrnDaX~Ok9{tI7s1id-Lk(~%$wA@5#Amb1==SQkR2C<-2|20DHv9zm4@9&vCfE0 z@Mou2Nw&z&NFqxefP>cQRS?DXl$@JE3A`GfbIvlvyA{YwWJKx5`AmjXjlr6heOj+z zkQeulDc8TiiBzoyJwDi6c7+@+(OxCV6`>bFPI9iIB-jFC6?|{tm(ub_t%{QOttrKt zH04C2pwkCUFGzVt)vO5wljypb(!h|DDA^o3CS>9xX$FcaXWEmbPz^S|q%mwgt))zz^XN+Y(@-WRF#*H1YyCj)74b1bJ*psfwg%Q^I$v0ufe1gFud?xR7iaY3~*k zD;smPe06@>hxuysL?T5|=r4{$&H-MOYfmJcPnM9d(iPeY3IGzQI#E>fhf=(%fY4}* zgo$rO1dDH?rFcAMXC=cMW^7sS0G=Ifjeuz=A+6KP#u_8`O|B%Jgs!+1V5&b8xkC0G z#LHqsJQ!zuFQzruG%yj%iJg&pi7F~0rR|K4 z7qv1|Msp|f_N^6ZeyWv<#=9tP<`tSJXxiOu`9xhi6*`J-pnY?sMk6SjI^hB1Sxoar zfchqm8+BzH#apOte63i1OWuG~W%2dx_^!1os}v$KpIE0EcfM=MO^Wal2{El?>o3I` zXg#aEkYgj7(a&1zgqz2}lx1dS*QrwFkgqx=t&cu>Q4wG?+l#P>R-(ug-!)=k#(QNe zSn{FXt>79Fa-Pu&?_*}D5%8=rHw*$t9q;mg0(fj(j;f)2@?ASqDz7ZlXm5$?dnLe7 zmxJ|N5f7v9mCd9H$9ZoT@_4)p$02`sSWPS}`0=i7;cTZRc7Q(0YqUU36~WDtRT&2;M2=_FqUt zFG@m^&LqYFV@Z?|jp$$wn&en2-CE8ZA9L`0zp^JV)e|dQ3&~f1 zzVD7_nP-zuQIvsf)Nn5@!B{fbPWZ7<7or06=laA<;#V;na%UJs#~2@Jl3$SdF5QK(evL@xpz^Tj8G}#-atsLmbW@D_t`FX`cD_0!J7jIaC#AOR%5CrPqW99onf663s94P`FLI5mC;yw+m-Q|^TS*? z@f~{6{3GXkP14&C0g3ca`q*C;$ZOxIa?54q^REhI-<6CNQ-Ip#7rAA@F%1)RK+7;$ z*h|GM=SDW9cu>(=h(o9-lc_c$>a@` zJhlp?{uBIFq3p!QSSzgn8mtR^kfr~2x!iG`tp9)xg{dtFi2JcKP1a#irK;(QN#HnB znpEyMs{L@S6f9;5eQC5%3z39C{IF@lcfe0*kQS|G$SO-^@l89Zqh|tfg>A}$GNloLGv`&=PK^v}X9;`9> zC_QJL$90@6|le`3XE&WfaL4$2JH66OG0(r{KJHTwm< zmS8GsoT4JitVHUdoMNH7c8saMEvw9mlwb}m>x`O+qKxU-cvB*+y#@3&vBj7wAw*T} zzY{47ZfPPTa^?`$uxp4alPaFErEF4))NC?BBB>d^h8{_*#C{T*(uk~e%Fi&C{cNo3 z&F#hRIF`{hJKf>WAcUz>98`K&ERkZzxJTBd6(N={!$^v2&dxgANhT{+fu1$^nMXw} zuRggre{d^EnfNM9*CKxAMcUB|uUU{-_$~9JR%1N$23vv%AzHn3ldslcvDsN{d?Q3n zMag8mVtiB%f8igv84x-ohGg$=T3~S5)}99RVXfi z%NEA6TX38(9vc&Xi2ZmuV3)2EYjV~)V`FLvSAqk0{tD2xIDjW>1zG_3R`10S#v5ig z;znexq~4;Y3UT=K5{)W%pWdZpcQ4b^^*p`$LXI z%UXd{Rlxx**PtxRf>B9

INnzva>Sr8dl-3Na6-lj|sIzwTf~ouacpnyPMbcwi22xp;cxbU!q&-#w zE`9hEw<@ufXf4@_E8Tn?@e?BrHmF*W7QeVfg1FT1xABjreN?1%NMosl2RQo#V;i}( z5Si{N>{p}7pJ-++*; zHFp3$+Z3u}uRuGZ31Sy3QM-`5k-rix<`(Nr00_Lf7i7y|fmpnWl}2nW3^FJgiIc+u zF%OKA=frLE!2R5DSfE9>G>+#Hw#ZWXOv23=R~oyY@*}LWeNyl*HHb5g#d+XoIIODO zV6fo3MG=sj?f)vOmk@(KFaD9$dHc%*S}ReQv%y2)MhQ`OAjQl*&>Eh!mM3{)nnD@O z*pT8-M*PVNq z_XhHVtBM*(-W=YS0~S#sYBT@AE7)VV%2CbWJ(IBzJPd*Yij#fhptR^JwZ?BbwkvR6!E>7y?w-;&efDa&z5BU5dHMyBzvIt%aI~w#&v@7B0sEhU z1gH+h*B=uM1wNd9CYS;BeE%~52D{qu{x4VV=5oyAV|nU$*?qy{T`} z<5DUVhoZ{j`l;sSEqd-ZM?LF{s5)UNRQmejv~MR)92IW?xHy{e zpfNXHJ{$7lLHtPQ&0w@l8E#lGPrcaHY$>D`5TQE5u~b+)yzF(zrl%ce_^1 z$H@hY%IJU!yG-6@_$OG8xVd#5%taA<_-HohKE-grA^8OYU-2FC$A_rP#8|Cp=jf=M zT+Fn5>vqIuRoS8mbOJIq_p$0m#xmB_prC>!Gpej-l5=s^T(%WvB$^61p=!;CdeeF2 zVmKg`_%f_iizd@bxiGdu4$}r5h-(LkYFl)=8ytqiEJc;oO$i{n7jkiQk=hvLCi9>t z*#jZQlk(_KaGYU9g3jhMVNkQ=gX3m}V8Ur;`<#6m)()5BGO>oaFj3t8)hRscc^xrV zI-W}54w#1A22sgth_xJ0G3_s_DZ096$K?`d&B;R7wYY>(^MWm8jtkUsoJHWRS_;d{ z04>W!a@LciYe?|}5qxPCyEu1~AoWUDET4G5Xfd1b)i^pNrX|>=0fmg%Y0Gkf{9%?; z3Ru)i{51X}>O2mPGoQ>hYj$r)70>0kh8ADE*lJuK7Wl}OsXJQhCUdphFoJkQ?*7rx z!e#a@$4M+yE!U=QNUPzw?S!#Zff|Pz!bYkhvCJmAh71mcvNd2DW=pH3cq7EF$xPU& zuoTtp^!atM+Tc)+Co0-+)?+T>`3tHCyb^GN*!pMm@`tyP>N>`i2^_>AlpZUYK6@IRfi1m;V$ z*2^PiWdV6MJ-5hWj6_?FV{o++pTzx@3c-FYxe{p)ohdW2x*^q>fQh6@3;Zus?6h!q z9@o?@VOit_Vr7}%-d&z)*7BKN9Yey_9bvaydA2^Y$#=}Vs*c$rnowsa&k`}0mdT2y zRT4!ZOwe4MY2r`t888e3Z5(8>9(D7}XC@k&@o9ArTpFD`i?qNckPPCbSi)2Uh&&6% zNVH<`EyjVVVhpLhHzTcZ8nZTe43k+Kd6q~Oyl6Qn$Ho*|_eYwue1!{ovcCoVbI6wl* zPsB?zlU68+xEG@u9F9B|D62OUIw?Rx1{Jc>G!98KhQ%-gY)gZevRcD+4z@V5y)4k_ zU=h?LcDd8cA~7~AQXffFx(OzKX0S+$*@Ur-XfcdpCF6#_0`U{grxnZOKB!n!dFg=1*+{o)`+h-vUvb% zR2GgNHht9kBQ5J|#pHru8#3sbYgyNVvpmG;t!+Je#w$%U{ zbw3Pi=K||ES)y7r4Ss~?c8tWtK8XsLHBWGXuu3nw!nExD!#68u^0O!!cDLn&e>LWCE6qCv~gU3APK|TQVZv- z1)*&G-58Xame3O_7)3AiFIp=ld1e!-eJ!ib25OU-C2BjhEVfP>9^1FLuqJuSV~LvB zKcGuE4G)G0|6YV8Y7{@$3{urUJnWqeOT?ISl$ti9&|)K_g-T|#mHJ^m`vee1Zy0Jh zXga&=6rXWA)Hm67++78WK9#2Oj?A=Z>s&cPW&!hzeu5{EnVNn>i(-IkU@Zmi%Elp^ zNkR5maix5d1=mk}mPoC;p*4q1h^52rQE3&)ADgL(bfBk;4>KJLk=XEArpE7Vn@rr3 z;Okhf0GQ<#%j<=vZw(haAzJMiKx1Q3=Aq4&EkVlBMAt4)ZsM~<{RE$pej)NpU?chy zrn7-~R1|J$>!YxWDIt73d!!{&%DQV?p|w{&TI91xi%n%`aJ&cT{Rr{~-jQg*sA1KK zJjFN!Vbw6&N@`0)v_JfkR^s4<6#hOlTB0_I)CPt8jT|ND(K1@1773y^vxW&Al|=JVh;YK+Q;)?&BT8nSJZ-DMg^OXK48zNUzBQX58F zNk@Gl90$~Hvb2`vvN}df)W{*B^g6o;Re+gm87)yCOOTiUAh|BmddX*&-GR+;-J=#Z znU`^+B1%{RRRx z;)lS{7H8f9A~W@=hD3XDW@>`PIKd63;iR*UOe4@Tb>&gx$3Rgro3``$XJR~|_(B!r z)o6@pTo!1F`UytEWs0F`@;6tH1zu$|731w^BuEB<_W3uF_7LOgEP+gm&#Gc9cI>v| zWxhBYTHUai1J);F{j-LaNbLX%;FxlI7T?eT)j4D{^{H!SYjS34)k%GP=<=4*Xr2C< z8g~exZe1e+6Ds9zO)x#1fQ9&X2}orBGdMZ&&q%@ za?PD!x0Z&_5^X6A+(Y$r{&dxLexXk-Q*pRKgIz;H?s&cjE;0j-{6 zE9fi@YpqBdfM5qyKRP1r&Bd9iD^iYYwQ6hPuL*6u@EVvekfv>~7{Gm2A^g78<7P2${5_cS>ZmL~MDg>PyEToV?sU9iy$(PcWKE4={&_1e_RVa#-%r(y8_m z6Iot}u_(|YEjNi618h~xdNsjvsyL=`Ie7ZSF}^_iRoEdoX%nrEuyPGs{DDcA1(FzT z9adZg#*qEe3Dt9XhY}eh2#^QXYO+=oF<&v6DHnJ$S{nOU3I*}hGFqZGr(g9NK`6Ge ze8iE_60y9==33>nKL$u8sNRmeAdufP8Z-B z(J>aFVY7x5Sfwx&`<{?L+8CUPR`-O(`gGF}(tzDEpJiIB^V;UlUJ|07I`mJbrV|B* zX7z(1rbvuzwKy$I_L8Y>b!QbPdsrBR4V8Y%hnA_u?Lvh@O|1{^kzDG%AvULz@ID2W zO;)i~bQWl7=qDHrjfkZpC(^C98&KBo~?W^K!7HEl9yAfv!ZdZ&}11U{ZGt(0IAv~yCqO8s;Op}~wnVOV!1dDBt z?0Ov~+T^r#y-Y}jO%y^Z64n=PBw8NZbTBau_@NM|q}OJNmWf5oBL6Y_Kp5b;Y$_bU zr|ZO@;51wj+;X@$mAoir#c9<$5Vf35=YLy~7HO+oxZN-K){-p2S^I^=*YmL6er7!q z!^U@vS0{A=6KB>C3vLjn#`!dfDH{Ws)-pLZdP1z=yCZ(za$1@;cQ$!Egl4fPP_N7D z89EF!^R_Yq_C2d_-&FR#<+L=mjmHIcz$cuu;g<<_XMSu`wNZ(TesR3b3+ZIqI`k8q zX1&3x)z5J9T5%fwbz~W#CldvlLb0seN?Vwk$~%PH#9LRBuE=YV*uv3OS)9McjdxNl z5gULvm}B72iZ9udmSn`0XZZVXJN&PCjL(-QR)yr!WnF5JM6{dtPlkV@1cF$08vFQ4dm zEfU)s(#GAY*S5CHg6->XA~9mrOU$n0bss`y%~vNS=@ueMoPiS43b8mPSsOr&0! zZ5-1?%qb;)Wwlp$+}?E^vqj=#k-E>>3e5xC$Pin^3K;-NsxsF}uEF@-tW!iO^IDoV zq8yJkC6+{OS?9OqwM5M-Vf`YHRk)C=O*|?;wN0$doq-vrlO-90u+_k z$ZEjyCd3bb-3W5y!fl9;`9JnpO1#z(;})}nA+AtDOiV5FS|&aPhcc@*q#QOFj2pb* zx?N@VmrSi2me46ni0>d~Je6&biLI}U$&a=toV;mE-O!%9fi{em2R5f(-?fJ9$ezrM zmZ+a#G+|ljlpqL6epEe@(QGtFxSIk|HZJNJEfVkHr+!bzXpva^9b7_LN9;tBb~k7qTZA=+^Q=>2A*xi( zv3Y0!8B`OtYp?k&=$!ci%_H;3=;K`ZIw34w-^#W1sh{9As$Jr67RsQ9!H59{6gMc! z2i#}J@zyZ-hUYa9A8U+Lyt=tSBQX+{iBz-5ihOsx7KtrB3Xg$Y!ezncHN2K+kqW9h zC@rK15|?Yb=CI+3nk!#ODO$bwaI5TQD>PGMv#TEBMAoTl1FDAC($Hx0ID(nJhBtX1 zjmIO8Y?%=*aKeyihh#u>^<5J6!@Txgsez{h#S)MhCPK+IA{MqALE|*hoUE*D7&OE@ zIABI{sjLEFzk|qY4Y4)DE`NwyWM0d}22eRK12U}c6nU+o#m{8lKV&M8JXSs3p_!U0 zMnsnM%a!6=UWa6bX6jRmwb8bo5Q5!akdrpX^$yL%Mgf(Hu&VBkPOfEQ8@GBmb?d?J z1$0Y>L85+w*O;e{4zs{8-;5gA7#64ko+83LJVzIw`c8gyptW_8WnBoSnzfyK>acK$ zn8)P~RbjOoPc@WHS7<}*q7g9w4rM-V4O@N%9+@1ugVWN;f=>l{V?ZOFfZXL9G!tWga=tQLta z-~*HgFOAOsCU@mKy_DBS2A^$u zSqgvK`jvjW7Q7)Q3$wHSmE9Y{Qw_0st_VZ{f5fO7U9F)NaKL7%YY}p&D=^pvnb_tz zX7a(^Hf^rIISsbLCnBL%0$=#Hd0p0 z#KxrvA!5nd+Xk02_Md>-meta{ zjq?L#LA%G(fx6eSS|UcFwcfl9c)1F35_M875et^a2qT(hYcuV)POPoe53?E#lFhw9 z@T;PrmKLXtMiPLZIV~3Y$*dM>PnF>?rlO-G(}J+TB0{kT&T2Q@%xIbRm^4(iwpRCT zCbea!J`Sts5fSW6&q#cZ40U+#NQ{38eb$PPIP}1rHF1JSD|iLbV2L5lwWa)XNzt^y z7^;{61Y_V(Zm@>I!m!WqR~1R7agK;td>k?ux|MyfbsFQHL8!G1mWa7;4Ob%`Mfz2S z@Y=@ih1n-!V_8IY?8t#7)OgYwS_4TS3-Lc$E*K4g3+p+})Rm`vjC5KVav)V%bD65UuV&s~N zuC^t&(yV%8jn-l~#H=i0`7|^h)Q8a_%i{Dv7)ph!I#i>b7XAgRV^{zdJ;x(68YOtWrbHYZmF?*xok2C5$Iv@BZ&Lb6XlvfkFbus#`Sw4IN zs9zRe|5EiOQ&+U&Cbt4{TmYJ*TN%~{MIH&`nBTLtX=4qv)Kz-Oc@hZfXDx-p?PPq- zf<&`ucE(*NX|s(c5V z!`0TGw_vj$g^hVqj5MMbEdN-U(FWFhBin@|mg`-WWQ!&lvuEOCVJ!M0gIe;@rg`IQ zt>9ICit*#ImUF?)`?c(~P7n0u;!zi!yO}Mh8bR7Dg@*qN>5FHPRg%i^Y+04invSE5 znkmD$wuFtt&L(}0c5Ijcsx|ED@Fw6wtBa1XK3i?7E%(>!_>NcmTicGzpa%+pjoa3@ zIdJoB9DwGR!S+D?*o@I_)6AID*V`J-s-}!U-Uz5$ZmtSs{jf*nS9`#j+KVwIvXpBc z0SeIK6}CVMaU={yph}PVgl?j=oYNIr8GiOX_`%b2y|Gx#QNI_grobL8HC=&PFqlrv zwul~>l2&)0-Z$SwgG=rmEEs_lxE^h6YIbxtgimz6M!m8G-SR|*@Ydapz(5jiJwipF zYxtX}k0NJ@;d9eH9{>F(^M;tLcaoJYtIuXVCl+ntdNHsV;^Wx;?)_Sp>(;Rlv(@Oa z&7UJu9;SvAjlqc(4>E?V&79vtOcBNG%lH-^-Hv%y7A2HX?Lc1#1K2p*-DmYQ1_`y_ z>gmUQJ6AU`*~j<(IX%dg2j8I>%|Er-{Kxkp7)=pu)WN^%lC9nHS6#9!jz@J#SxsST zvu$LUHR;N1K_Rpz7qZ0ion7K!M~s&iC5AAFdP6yIvWXlk zA+#R*#Tx?bx*^0z#=uo?;4Zf$1ya4Yk;Alw1z~yM;w-heO}x+Zwwwpb752FRCrrN9 zMh-)xWmOv?bM|q_bb0rAWSe+fpITHF%GBsCn8Fx|{26Am6{HYo)j%*0GMklMxi2iE z38;@7Cf%PU6eBUNS=2cTU2BFk`85r(YA%ow^c7QdQ!IXA ziqxzQMwh8|C;(ePj|Qj1ecFX)8)^&IsNAFEP~5v|{N6k?>KD2W8ZEvrfYIer2`GR( zGF6q(o=Y_Vj7^5m4Q5-m`f+B{KZebLae-NAzI-v8P5JOJfCV5zi{aZaTP9|w(1I|r zupwZZj@dG?DMc7(D8{INIvBEKi^LAh85h-TC#32{6dcT%7S+fS<7k-Z*jSyNWXsg{ zz|eEWj$`M9kQqt~XCxA{`WC1%QfLxq4IM&e4Y9%;W6ajS$k#5vCKH=~ZD^DXS4=Rm zHl1J#6Mu%+?A2t!dG0)Rs&D{?{A>w{SA-a=+I27tYUv^|_K+K9HDuv%%`KXV@%Y&~ zii^yA(W=fA;>mG@1xQ2_)l7-e;Y*{T4iv~kyv1Ebf zd#AAFkx^cBGr?%6KVaz=UK=f_A~7x@v#N+fd7EJSu5xW-wlHraeF$RW5;zwN!?(Da zH*QPRWG+}e8iN~`8!^*Xumxf-U^B5enL49Jb;NXw#>cKsjG&^pO7Uq~p15bXW$zcZuN`TX? z<+ng=2WiU(@nsgC8ora{{=n0^4z23~M~>x|0EgQSt>w5xJ)#_bh=o(D?Iu;Mla!s*ok>^LvW;Lk8!)i}Z`!q1K#QO1IOmBl*~2hkbFKU%KK)D{;p z`-LaLp%btI1vIdy(mJ+rR4c`jm8Z$oz&ShO15zAO+cI4o8cW>D6ZW0w*i>2Y6U=TC zbcvkj1rTd1JS)AC-Ox+AL{9wBfS&zkL=3dfki2YMN8IM>0~+PHOk1W)W19y_*piFE zW`~HHUeYb(&oEuJj4>x1;h9Epsqwo-VrCizL& zO}0CezdE`Zj%K48hZ&Kt?tWd#xrcwTjj5uBOo0*F>BQZc{1-+S$6)Jpiv2Kw8DDBx zZ>3iaKuy7IOl2y=L?IVv6L)9oZ-^%AbhBs_8Ng@zqryzxCA&Vm!8#iaqm-NM;IlVH zAvm*Va$;^e)++%DB@5MRqmPc?@CA=@-$1NznNjx2d&OIIz&R?kZixnP7B;M|Vq_C^ zz-(+%0E?i$5>1#u4`cSAE{Gv3FeapfV_b<*e79AaCY}PIfNftf6Tq(sJu5T>TWqa3 zZfCE?`B}=KAab>*tc=OX8yJDB5OoCc!pp?4px@}awUBgq-7DZl_;J7o zzF4lu?wevoal9%T>tZ_wzpMAx5AZJDpa@XhD1cx%%T}3PK8)FS{@$+!y(>@-rU00h z<-Xv4>vax+cA6hEtoa@H+p^(^5QFDNk<2j1>nH^0*NdJ1?mzzY`+xoC|NfWX|JR@X z?O*@%{l|Cje)roy{{G+p@SpENC%pTIKfELC&XsB+wkyZguMd;gSt9AmSt?>_K!?@7l%?(s5bqAL(H6YW=)8xOhzc39fVt7$`` z3R1CS+BsDy&wTyz>(rgzoI0Z9`VTaV_vkX+)cy6GI*W&>h4XQ%2sAlPT@R<4c(uD&V%yv}dDnk@Wo8%_%iNq4%lcY#8=Drtp09G(d_2D70@J`o#Le#}in!^1#|eDT zR;+Z#Ep~4&bNRim{c&wR?X}T}dSXlCAti;TCNUE=OyMt#GR0i+hf4u^t0GJ&ZGb03tmoMjw`_24lCd}T~35jbesiVKe&*- z`gOb>zmJ2vlc80MjZggckK3K@y{dZU*L`B2`IhgTcU}N^I>k>MX9)hS2>f}+@4WpE zH?ZJhfy~P_h89=3qVonek_`}GP1cQi#<+zHr;5aHugL2BWKw_?9YwIBdwt1Q`udGK zZDc?ahdT13F01*k*NR5P`rG3me*0x14+;{#9KPX$rElxS z(fFh@=f$-=>PdWTFKWIIP3q_ANr2f%#JHte@1@3WtFodrmg(De63^<;`1SXB2-e>o zo>i>2!p*aBRC)KpW;dn#)uq=TbB1rLKuq}4$H`o8e>y$D6g-DJMmB)kKM=O`73UcC zj*q$5nNUpjdym$85$M|~(l`87pt>g2`CLA)FnOHEF})73Tj)(=njy|A=kfa8y(LmG zP~#U(eEa43fQSmgIr*N~vAMVPauePPNP1k{ab%0< zPFK076J?LR@|5y|u~7eH%RZmBjECRf^YF~ZA&)c;@ z`R()Xj|)3QIO`f7V~8B

!dl7x(hWcKm+NcB0yL+Q?8YtUo3-$Z4}Q?5nOKVnXAh zh}bsbhOQr79$YB@mp%`4iL2+J6u9d@*>xDeMLAvK=HBV6(le{hTwa*q`&e8byDZ$F z==<0yA!ga^9|76J9Noh15%|sJ5rPlo`Uukn@`)lWLcWL<0r~o@b51s5(7j*khTFnV zVt!jPv!*52!&JLjf3D<{+L`mLYqqG9JeRY6+dCp6$?pkQIh2a=D*i_FAF$Kg46NiGXGj-9ZY8`uB!d8U_S2GGcx0Dq1b;TS%9+DT%e zOaBBfiA5>qF2!FXFedBWbd?ZioqJk`>aIO4jpXes8qP9da!m5RkC&i#)8GF1L3D~! z+%x7;1u&OQp-GOxc*PoiJ;`D<;=M5bve*BD|2R5M{v0m2;Wx1-kLMuxMvUid5+?nc zgSyGkTh0?)u44hsd)>I;w)+I#vpv~$Ne!_Vjy6ks-_hQ7b(_?2S9x@#3%g0Up~Wbi1+oTb`QZ)N6;Xm)~(wkax%o z7JjnR3yH=K)S5PDHKLIu7y9jY`AAX9n z1vBY#8_V^>=Bvxu>~hw=f(1ukh7};40XWQy4pEBiG0<;@>k-|NupRffTQJYA(_+y5 zESbv`2+btt^>T5!oF_@Xq5weyq*jSBB3F#@oEOF#e3unOMs8C*Fuv%~T0nU4qJ*t( zlgoNu{4l^KY{_G{7hnZg3YWRw>3F;4n-TU@QYZLkRJ=BSK>9U;_q$$!M1Fkq;u$R2 zqKN((RwsPTU`mySp#{9*pc&tPUE-s5X00e>Ks_-pJ~mS-|0`gmRY^OzZ$DJ8x(Ags z3!#zLKuXy+W750Wr}^wpIcVx3Rvm4u6Pz^8rY$o0De7ZFgdUf0CcczwWI^J@TA zN;Tcw9>YYL|0-pC#j03^aZDd9#%22Vcxw3O$K5if8*Vc~a_r`ZfEG=#E^p0?`2l%w zesB9^>?`2+WXQ@KGW?SBKH^ym<#E4jpRW@-UirkuJsq}F_QeClN5|PXIAjhEUOu@$ zDJyPeamYOHlE3X9HARGI z{r-=c=k2cz7peHY{x*7biuWJwbQ9}th)0Zr|3&ml`3$lbMjzJ{9u0nFO2(T$m?>!h zC0w@twhP9lNzFm_)|oTP7?yjE^4!X8LI-sXB!sE~=a?7v)4z?mpZ4?UYA}QAdhefM zlh?S{fco9#M^Wvl#l7#-n+$vV(+8feExBG{N5xh2E>Hi-zX?Gu7#1&rD{iyG(q{$4 za)b!N0a^LLLi)mYEdUmklAR`1!R;e}g;~lJA3&_&zagfJ8wk9?E8iz>>7;>FSiHxs zEDn~R2VGhGD-VGiZXs7}vUE{Va4SuOW<|td6|U74yMph?9R?S0x#XiO<)=YcY_7LW zl9PIvB!V}=M&=xe2;QFK^VpSgdT%J7@*IwT?)i5N|3WzPst(=bGkIuxZ}~?o-%;Wr zV^=OAll1G-#qU6`3_f@P2ynfHkLVTrx7qzM&?{pWZ+J(>*I$)6)my~it3 zUg-PuAFS9p$Gg-etoF%UZ-4x-UGov9U9pq=LFFZe=_64RB>L+w$AP+RoEj z`*pg&g=c_Nv9$w#<4*G*Y}YyT;*;;LZws{D!|@OD+#XDC^N zXLme;e-FU%KGfqlJASLU`q2UMQh1jaT~NR96*xdqJ*-)9Rz2#Odf!LR(D^@xtJHIB z?gK89{XY@;wZ{B@L%H3~+9_N}i%Z$Y%(xVe&fB<@vE7#$9q#tJ89$UB z^P%*>mr_}e4iM+CJ85MSJ%UF)SDU@t)qUIlQ6ek*KX8p~yVD?2Huk#d0-1YdlzA}Q zX&i@t8sdmmEgG$omUX2Ep{;7^AYr4?BEl{z>PXxTLF&pTqS&OZ#!*L!>e8Zh)Kw+x zT2*%(-BQ((y25Jdy0fme*X*u+-M+9#JWyZI{hpQ2vHK7CFiqiB_Kaew(9Y8f2(=W__iCqusqb1 zz|l;B0B+q=i|ROC0k>AdO}Mvm7?|&x)8zPdF*`~ zs0OKS^Oq$FyOqPi7H$r~6{qB~W8zGrB0R)W>k5%mbaAMe@OKjL<^4UJ0p>HD<`D&r}nSQs{g1 zxOUp~iK}fCw;vK)^$DwC>_s_g5-*+haIZgkD#?FdEAl#;dKII2KnB~AexrB#fskHz z`)5RQ!m0_oDVNsioHys-gur%VC5uj!s7Jf575goQd*d%XnFz?j*Gs6FjhmSj1V)>F znB5Y$!GJ{N0RWHyUNPHEN`)o42oL}?LI7az&h1yBJ}8n$XaM0_$jPt(|49c7>8*+E zg?LxQax4b%EgiP+OI7y8;{B(kd?Jd@5F3wWxcFT^`oMlWvK1^>fJS=vV``peXK+aP z^ZJ}u@jl>S+&xTRG549BxIFW45MpM)i}>!lpYt`VcwCEIFihUP!GIoZMYNNjGWJHH zZ@1sc>_#AzB$bAocsPbfp@ui)l!<2g#n?tM<@_$$q=4ZniW;o)iZ75K~fryGrlUC_-N!)I5)1x<4aoU}IK@2Rv0GSqyi_68k-cBt#O)9Gm zw|ERG?U{%XBPJ%7D@1gja_YW2KvZu~dZ-g?tH({c zqPQ7%7L>K9*MA;y!87Tgp1D#>8@tL`y>6ki%-Bn~IMy~a*dzkG<8^3VFWFa<(q6;= zbzkVEXhe@zjx&7a)+~M2$m1r)@JCL8fB|A$KO9GHQLo3pd9tpO zI&qYku1Hx$ks`=(2Tu=2-ngr_QYzI>5`H?n1R5Q#c1}s(ew1|PR-{kET7Y}~#fIlY z(}w4rUn=xJt3ovI<@i=#Sv;Q|R1r4hv=HAvgX@(2ZY+Gtg@4}mcaMxrAhV6k!gZK<1qnt(R~8x z8TsjmjE8rxHmkW8)I+Ijl-!_Cj37S7gox*#nl$*?|0)uABWZy8KydvGsv6)KrL)=|$Ah;AUnFypCzantfgU8(V> zPvI@@8%Y1J%4W?)M7D2?HHF-JJrIRm7yGYWQjc<8NdDm(07&m7%7;h{4JIH-{v@)8 zC&1A6;sJmSMr4mX=pQA)Ul{vf_5i>W@jsy*?vGU&{d@e|&fR3swBHcF2>{Z3LBJP( zLVuB=JOA0Zkwfgf-2w?G-N}Kw(cN?4Z@My?{^EaAVK=winzV8p<`zl!ec Wk2|@q4FF^T3o?O#G({cxyW4LCQXt;| literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Examples/wigley_katamaran.fcstd b/src/Mod/Ship/Examples/wigley_katamaran.fcstd new file mode 100644 index 0000000000000000000000000000000000000000..f6fc364c7901578bda42be7ca2358fefbc1649d9 GIT binary patch literal 96204 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

MPh0uKmdzxowIBGUgC;z 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

n_TY#02~CQ7Y+mj>HDszqp7g9zN4j~ zl>?oNrNx1gg!L*vGHU4H$k_tmnF zIMpiZYjXnJS;mvTap&j2kSnOfJdlEe{Xz2zU8c~CYTv@9wOTbTLo2=Mb!znjqkTFg zZwG6TN^@Lx^+*SqxT%r*%z^P&qdc!;q}nk$Q-SfZcs)OP3UwqADgM!V9NChi`UUHW zr9uzsgze-NYZQB@{U+zh7OY3}f*ECD@zA;*R!LyJKg$CEn>1^$``>=M@YLA?Jh>+- zovgaA5%uU|KCNX#Y&+?K;(YRH9=MZYT&=EZW`?CgIb9+ZYcBc6DR@%53bOJboWGQD zUc=n=RTHD!teN6E6>-H&xYJ-Wx?|zfs*5az)yPkM7IM)>-GwJfjZ9pZGwm3Lt7(v- zUt<_hqNOr!RTrstwBu}LYq-P00yWQL#K|w#YB#it^^F@ z;-(t{yxc=1v^J{G&H{75812J;4e?8GkOS?0m3X71`rP(+_ndvlKCRulZhh$*mp)pv zp74$x%TUP{oHhi|=Xb4X^wJM3b{ah~RHqT}l*{|=?w3QH6x2D9o(EvRJ;+fnR*eQU zpUv^$zMvdyL=Irjih%z^RLhJ`a)bq8_~#98A;EI7V&PVJ$wahwN{?*NS?pc7@k_9| zM%p`JxCS&YO4g%vh=1Xgtw^ShZ^^+EUy3B(x~>vEqL%JM*hdBMN1JZKeJ?vaVg^RT zg!h~n*CdalmPZrdYq;H|jmiEoDngyKzM-x!dc(}QH^f~Qrp*n9=0)u69+yG*xeUr8 zLz7<_v|SYQXKxvuXuv)*xrJ%jhNwN(c0*%Js;SoDuZ`cS$eZZe7}Dw4+59*3zwN;P zLD&0I+JpYLRrqi4f2;X_!NE?T|Buo#5|B{;kwSc*=ih7Vw;UM+XlH0BBp^)me{}m_ DnRG7* literal 0 HcmV?d00001 From 493be7b2a2c87632569625a248887774bbcfe7f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 9 Jun 2012 17:41:05 +0200 Subject: [PATCH 325/517] Updated example ships loader --- src/Mod/Ship/shipLoadExample/TaskPanel.py | 6 ++++-- src/Mod/Ship/shipLoadExample/TaskPanel.ui | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Mod/Ship/shipLoadExample/TaskPanel.py b/src/Mod/Ship/shipLoadExample/TaskPanel.py index 3c9b483c1..2ab325d7d 100644 --- a/src/Mod/Ship/shipLoadExample/TaskPanel.py +++ b/src/Mod/Ship/shipLoadExample/TaskPanel.py @@ -38,10 +38,12 @@ class TaskPanel: path = Paths.modulePath() + "/Examples/" if(self.form.ship.currentIndex() == 0): # s60 from Iowa University App.open(path + "s60.fcstd") - elif(self.form.ship.currentIndex() == 1): # Barehull 5415 - App.open(path + "barehull5415.fcstd") + elif(self.form.ship.currentIndex() == 1): # Wigley canonical ship + App.open(path + "wigley.fcstd") elif(self.form.ship.currentIndex() == 2): # s60 (Katamaran) App.open(path + "s60_katamaran.fcstd") + elif(self.form.ship.currentIndex() == 2): # Wigley (Katamaran) + App.open(path + "wigley_katamaran.fcstd") return True def reject(self): diff --git a/src/Mod/Ship/shipLoadExample/TaskPanel.ui b/src/Mod/Ship/shipLoadExample/TaskPanel.ui index 3c875d905..19a2c8da9 100644 --- a/src/Mod/Ship/shipLoadExample/TaskPanel.ui +++ b/src/Mod/Ship/shipLoadExample/TaskPanel.ui @@ -81,7 +81,7 @@ - Barehull 5145 + Wigley canonical ship @@ -89,6 +89,11 @@ Series 60 (Katamaran) + + + Wigley (Katamaran) + + From 83567e94b4616599c23bf5ede121810ffd07a82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 9 Jun 2012 18:19:30 +0200 Subject: [PATCH 326/517] Added new examples to autotools --- src/Mod/Ship/CMakeLists.txt | 3 ++- src/Mod/Ship/Makefile.am | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 7944e4c38..006226966 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -44,8 +44,9 @@ SOURCE_GROUP("shipicons" FILES ${ShipIcons_SRCS}) SET(ShipExamples_SRCS Examples/s60.fcstd - Examples/barehull5415.fcstd Examples/s60_katamaran.fcstd + Examples/wigley.fcstd + Examples/wigley_katamaran.fcstd ) SOURCE_GROUP("shipexamples" FILES ${ShipExamples_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index a6d38f500..d1c50cfe3 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -41,8 +41,9 @@ nobase_data_DATA = \ Icons/Tank.xcf \ Icons/Tank.xpm \ Examples/s60.fcstd \ - Examples/barehull5415.fcstd \ Examples/s60_katamaran.fcstd \ + Examples/wigley.fcstd \ + Examples/wigley_katamaran.fcstd \ shipLoadExample/__init__.py \ shipLoadExample/TaskPanel.py \ shipLoadExample/TaskPanel.ui \ From 4e3e7566c34ca9c20e0ef25ee4924eb8aa78a1ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 9 Jun 2012 18:19:53 +0200 Subject: [PATCH 327/517] Fixed bad ship beam initialization --- src/Mod/Ship/shipCreateShip/TaskPanel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.py b/src/Mod/Ship/shipCreateShip/TaskPanel.py index 5e2533c54..080cba400 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.py +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.py @@ -160,9 +160,9 @@ class TaskPanel: self.form.length.setMinimum(0.001) self.form.length.setValue(bounds[0]) self.L = bounds[0] - self.form.beam.setMaximum(2.0*bounds[1]) + self.form.beam.setMaximum(bounds[1]) self.form.beam.setMinimum(0.001) - self.form.beam.setValue(2.0*bounds[1]) + self.form.beam.setValue(bounds[1]) self.B = bounds[1] self.form.draft.setMaximum(bounds[2]) self.form.draft.setMinimum(0.001) From 8e70fda2278d3f4e03027d4e34b04a55a0462240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 9 Jun 2012 18:25:25 +0200 Subject: [PATCH 328/517] Fixed screen messages --- src/Mod/Ship/shipCreateShip/TaskPanel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/shipCreateShip/TaskPanel.py b/src/Mod/Ship/shipCreateShip/TaskPanel.py index 080cba400..de2676450 100644 --- a/src/Mod/Ship/shipCreateShip/TaskPanel.py +++ b/src/Mod/Ship/shipCreateShip/TaskPanel.py @@ -113,9 +113,9 @@ class TaskPanel: self.solids = None selObjs = Gui.Selection.getSelection() if not selObjs: - msg = Translator.translate("Ship objects can only be created on top of hull geometry (any object selected).") + msg = Translator.translate("Ship objects can only be created on top of hull geometry (any object selected).\n") App.Console.PrintError(msg) - msg = Translator.translate("Please create or load a ship hull geometry before using this tool.") + msg = Translator.translate("Please create or load a ship hull geometry before using this tool.\n") App.Console.PrintError(msg) return True self.solids = [] From 706e9ead7ebb14d7cc5a922eaf86ba9c6e10628e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sat, 9 Jun 2012 18:26:22 +0200 Subject: [PATCH 329/517] Outline drawing tool updated to new paradigm --- src/Mod/Ship/shipOutlineDraw/Preview.py | 69 ++++++++++++++++--------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/src/Mod/Ship/shipOutlineDraw/Preview.py b/src/Mod/Ship/shipOutlineDraw/Preview.py index cf615db05..2b323b47e 100644 --- a/src/Mod/Ship/shipOutlineDraw/Preview.py +++ b/src/Mod/Ship/shipOutlineDraw/Preview.py @@ -63,48 +63,67 @@ class Preview(object): sections = [] for i in range(0,nL): pos = sectionsL[i] + # Cut ship section = shape.slice(Vector(1.0,0.0,0.0), pos) for j in range(0,len(section)): edges = section[j].Edges - if pos == 0.0: - section[j] = section[j].mirror(Vector(0.0, 0.0, 0.0),Vector(0.0, 1.0, 0.0)) - edges2 = section[j].Edges - for k in range(0,len(edges2)): - edges.append(edges2[k]) - elif pos < 0: - section[j] = section[j].mirror(Vector(0.0, 0.0, 0.0),Vector(0.0, 1.0, 0.0)) - edges = section[j].Edges - for k in range(0,len(edges)): - sections.append(edges[k]) + # We have 3 cases, + # * when section is before midship, then only starboard section will be considered + # * When section is midship, then all section must be preserved + # * When section is after midship, then only board will be considered + if pos > 0.01: + # Look for edges at the wrong side and delete it + for k in range(len(edges)-1,-1,-1): + edge = edges[k] + bbox = edge.BoundBox + if bbox.YMin < -0.001: + del edges[k] + elif pos < -0.01: + # Look for edges at the wrong side and delete it + for k in range(len(edges)-1,-1,-1): + edge = edges[k] + bbox = edge.BoundBox + if bbox.YMax > 0.001: + del edges[k] + sections.extend(edges) for i in range(0,nB): pos = sectionsB[i] section = shape.slice(Vector(0.0,1.0,0.0), pos) for j in range(0,len(section)): edges = section[j].Edges + # Longitudinal sections will preserve board and starboard ever. Since we take from one side, + # we nned to mirror it. section[j] = section[j].mirror(Vector(0.0, 0.0, 0.0),Vector(0.0, 1.0, 0.0)) edges2 = section[j].Edges - for k in range(0,len(edges2)): - edges.append(edges2[k]) - for k in range(0,len(edges)): - sections.append(edges[k]) + sections.extend(edges) + sections.extend(edges2) for i in range(0,nT): pos = sectionsT[i] section = shape.slice(Vector(0.0,0.0,1.0), pos) for j in range(0,len(section)): edges = section[j].Edges - if pos == T: - section[j] = section[j].mirror(Vector(0.0, 0.0, 0.0),Vector(0.0, 1.0, 0.0)) - edges2 = section[j].Edges - for k in range(0,len(edges2)): - edges.append(edges2[k]) - elif pos > T: - section[j] = section[j].mirror(Vector(0.0, 0.0, 0.0),Vector(0.0, 1.0, 0.0)) - edges = section[j].Edges - for k in range(0,len(edges)): - sections.append(edges[k]) + # We have 3 cases, + # * when section is below draft, then only board section will be considered + # * When section is draft, then all section must be preserved + # * When section is above draft, then only starboard will be considered + if pos > T + 0.01: + # Look for edges at the wrong side and delete it + for k in range(len(edges)-1,-1,-1): + edge = edges[k] + bbox = edge.BoundBox + if bbox.YMax > 0.001: + del edges[k] + elif pos < T - 0.01: + # Look for edges at the wrong side and delete it + for k in range(len(edges)-1,-1,-1): + edge = edges[k] + bbox = edge.BoundBox + if bbox.YMin < -0.001: + del edges[k] + sections.extend(edges) # Convert all BSplines into a shape if not sections: - msg = Translator.translate('Any valid ship section found\n') + msg = Translator.translate('Any valid ship section found') FreeCAD.Console.PrintWarning(msg) return obj = sections[0] From 152ed0f77cb3ca9af31216a07b385dbdddff4612 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 9 Jun 2012 15:19:57 -0300 Subject: [PATCH 330/517] Start: Small fixes to the start page --- src/Mod/Start/Gui/CMakeLists.txt | 2 ++ src/Mod/Start/StartPage/CMakeLists.txt | 2 ++ src/Mod/Start/StartPage/Makefile.am | 4 +++- src/Mod/Start/StartPage/StartPage.py | 19 ++++++++++++------- src/Mod/Start/StartPage/blank.png | Bin 0 -> 302 bytes src/Mod/Start/StartPage/complete.jpg | Bin 0 -> 12532 bytes 6 files changed, 19 insertions(+), 8 deletions(-) create mode 100755 src/Mod/Start/StartPage/blank.png create mode 100644 src/Mod/Start/StartPage/complete.jpg diff --git a/src/Mod/Start/Gui/CMakeLists.txt b/src/Mod/Start/Gui/CMakeLists.txt index 54bdc5c5e..339c9ad50 100644 --- a/src/Mod/Start/Gui/CMakeLists.txt +++ b/src/Mod/Start/Gui/CMakeLists.txt @@ -54,6 +54,8 @@ SET(StartPage_Resources StartPage/PartDesignExample.png StartPage/ArchExample.png StartPage/web.png + StartPage/blank.png + StartPage/complete.jpg ) add_library(StartGui SHARED ${StartGui_SRCS}) diff --git a/src/Mod/Start/StartPage/CMakeLists.txt b/src/Mod/Start/StartPage/CMakeLists.txt index 19c59fcf3..7a798c98e 100644 --- a/src/Mod/Start/StartPage/CMakeLists.txt +++ b/src/Mod/Start/StartPage/CMakeLists.txt @@ -24,6 +24,8 @@ SET(StartPage_DATA PartDesignExample.png ArchExample.png web.png + blank.png + complete.jpg ) INSTALL(FILES ${StartPage_SRCS} diff --git a/src/Mod/Start/StartPage/Makefile.am b/src/Mod/Start/StartPage/Makefile.am index de35b6d45..57ffd74ee 100644 --- a/src/Mod/Start/StartPage/Makefile.am +++ b/src/Mod/Start/StartPage/Makefile.am @@ -28,7 +28,9 @@ data_DATA = \ Complete.png \ PartDesignExample.png \ ArchExample.png \ - web.png + web.png \ + blank.png \ + complete.jpg EXTRA_DIST = \ $(data_DATA) $(python_DATA) diff --git a/src/Mod/Start/StartPage/StartPage.py b/src/Mod/Start/StartPage/StartPage.py index c3983a86f..978cae6b7 100644 --- a/src/Mod/Start/StartPage/StartPage.py +++ b/src/Mod/Start/StartPage/StartPage.py @@ -309,10 +309,10 @@ def getWebExamples(): def getExamples(): return """

""" def getLinks(): @@ -366,7 +366,7 @@ def getWorkbenches():
  •   \

    This is the """ + text31 + """, \ - """ + text32 + """

    ')" + """ + text32 + """

    ')" onMouseout="show('')" href="DefaultWorkbench.py">""" + text31 + """
  • @@ -399,7 +399,7 @@ def getInfo(filename): html += text35 + " " + getLocalTime(s.st_mtime) + "
    " html += "" + text36 + " " + filename + "

    " # get additional info from fcstd files - if os.path.splitext(filename)[1] in [".fcstd",".FcStd"]: + if os.path.splitext(filename)[1].upper() in [".FCSTD"]: zfile=zipfile.ZipFile(filename) files=zfile.namelist() # check for meta-file if it's really a FreeCAD document @@ -429,7 +429,12 @@ def getRecentFiles(): if i < ct: mr = rf.GetString("MRU%d" % (i)) fn = os.path.basename(mr) - html += '
  • ' diff --git a/src/Mod/Start/StartPage/blank.png b/src/Mod/Start/StartPage/blank.png new file mode 100755 index 0000000000000000000000000000000000000000..4b794044844fceb5d8172c69f0cdf2b0c6fac6e0 GIT binary patch literal 302 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 hTb+dXd?WjVZdccZ^gNO;4na{w4^R4K8B Date: Sat, 9 Jun 2012 15:57:09 -0300 Subject: [PATCH 331/517] Draft: Added exttension X perpendicular snap location --- src/Mod/Draft/DraftSnap.py | 79 ++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index ee2e2aab9..c4bacf77a 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -148,26 +148,7 @@ class Snapper: return None # setup trackers if needed - v = Draft.get3DView() - if v in self.trackers[0]: - i = self.trackers[0].index(v) - self.grid = self.trackers[1][i] - self.tracker = self.trackers[2][i] - self.extLine = self.trackers[3][i] - self.radiusTracker = self.trackers[4][i] - else: - if Draft.getParam("grid"): - self.grid = DraftTrackers.gridTracker() - else: - self.grid = None - self.tracker = DraftTrackers.snapTracker() - self.extLine = DraftTrackers.lineTracker(dotted=True) - self.radiusTracker = DraftTrackers.radiusTracker() - self.trackers[0].append(v) - self.trackers[1].append(self.grid) - self.trackers[2].append(self.tracker) - self.trackers[3].append(self.extLine) - self.trackers[4].append(self.radiusTracker) + self.setTrackers() # getting current snap Radius self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) @@ -175,10 +156,6 @@ class Snapper: self.radiusTracker.update(self.radius) self.radiusTracker.off() - # set the grid - if self.grid and (not self.forceGridOff): - self.grid.set() - # activate snap oldActive = False if Draft.getParam("alwaysSnap"): @@ -362,6 +339,19 @@ class Snapper: self.extLine.on() self.setCursor(tsnap[1]) return tsnap[2],eline + else: + tsnap = self.snapToExtPerpendicular(last) + if tsnap: + if (tsnap[0].sub(point)).Length < self.radius: + if self.tracker: + self.tracker.setCoords(tsnap[2]) + self.tracker.setMarker(self.mk[tsnap[1]]) + self.tracker.on() + if self.extLine: + self.extLine.p2(tsnap[2]) + self.extLine.on() + self.setCursor(tsnap[1]) + return tsnap[2],eline for o in [self.lastObj[1],self.lastObj[0]]: if o: @@ -541,6 +531,14 @@ class Snapper: return None return None + def snapToExtPerpendicular(self,last): + "returns a perpendicular X extension snap location" + if self.isEnabled("extension") and self.isEnabled("perpendicular"): + if last and self.extLine: + tmpEdge = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() + np = self.getPerpendicular(tmpEdge,last) + return [np,'perpendicular',np] + def snapToElines(self,e1,e2): "returns a snap location at the infinite intersection of the given edges" snaps = [] @@ -920,16 +918,31 @@ class Snapper: mw.addToolBar(self.toolbar) self.toolbar.show() if FreeCADGui.ActiveDocument: - if not self.forceGridOff: - if not self.grid: - self.grid = DraftTrackers.gridTracker() - self.grid.set() + self.setTrackers() - def setGrid(self): - "sets the grid, if visible" - if self.grid and (not self.forceGridOff): - if self.grid.Visible: - self.grid.set() + def setTrackers(self): + v = Draft.get3DView() + if v in self.trackers[0]: + i = self.trackers[0].index(v) + self.grid = self.trackers[1][i] + self.tracker = self.trackers[2][i] + self.extLine = self.trackers[3][i] + self.radiusTracker = self.trackers[4][i] + else: + if Draft.getParam("grid"): + self.grid = DraftTrackers.gridTracker() + else: + self.grid = None + self.tracker = DraftTrackers.snapTracker() + self.extLine = DraftTrackers.lineTracker(dotted=True) + self.radiusTracker = DraftTrackers.radiusTracker() + self.trackers[0].append(v) + self.trackers[1].append(self.grid) + self.trackers[2].append(self.tracker) + self.trackers[3].append(self.extLine) + self.trackers[4].append(self.radiusTracker) + if not self.forceGridOff: + self.grid.set() if not hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper = Snapper() From f2c63b90ab03778d038ff393cee2882a999da12f Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 10 Jun 2012 10:18:54 +0200 Subject: [PATCH 332/517] Add icons for loft and sweep --- src/Mod/Part/App/PartFeatures.cpp | 2 +- src/Mod/Part/Gui/Command.cpp | 2 + src/Mod/Part/Gui/Makefile.am | 2 + src/Mod/Part/Gui/Resources/Part.qrc | 2 + .../Part/Gui/Resources/icons/Part_Loft.svg | 280 ++++++++++++++++++ .../Part/Gui/Resources/icons/Part_Sweep.svg | 226 ++++++++++++++ src/Mod/Part/Gui/TaskLoft.cpp | 4 +- src/Mod/Part/Gui/TaskSweep.cpp | 4 +- 8 files changed, 519 insertions(+), 3 deletions(-) create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_Loft.svg create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg diff --git a/src/Mod/Part/App/PartFeatures.cpp b/src/Mod/Part/App/PartFeatures.cpp index 1bf2ce874..431e15741 100644 --- a/src/Mod/Part/App/PartFeatures.cpp +++ b/src/Mod/Part/App/PartFeatures.cpp @@ -212,7 +212,7 @@ Sweep::Sweep() ADD_PROPERTY_TYPE(Spine,(0),"Sweep",App::Prop_None,"Path to sweep along"); ADD_PROPERTY_TYPE(Solid,(false),"Sweep",App::Prop_None,"Create solid"); ADD_PROPERTY_TYPE(Frenet,(false),"Sweep",App::Prop_None,"Frenet"); - ADD_PROPERTY_TYPE(Transition,(long(0)),"Sweep",App::Prop_None,"Transition mode"); + ADD_PROPERTY_TYPE(Transition,(long(1)),"Sweep",App::Prop_None,"Transition mode"); Transition.setEnums(TransitionEnums); } diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 5020e4872..e713331d9 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -947,6 +947,7 @@ CmdPartLoft::CmdPartLoft() sToolTipText = QT_TR_NOOP("Advanced utility to lofts"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; + sPixmap = "Part_Loft"; } void CmdPartLoft::activated(int iMsg) @@ -972,6 +973,7 @@ CmdPartSweep::CmdPartSweep() sToolTipText = QT_TR_NOOP("Advanced utility to sweep"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; + sPixmap = "Part_Sweep"; } void CmdPartSweep::activated(int iMsg) diff --git a/src/Mod/Part/Gui/Makefile.am b/src/Mod/Part/Gui/Makefile.am index ca433d86f..15a2a094a 100644 --- a/src/Mod/Part/Gui/Makefile.am +++ b/src/Mod/Part/Gui/Makefile.am @@ -200,12 +200,14 @@ EXTRA_DIST = \ Resources/icons/Part_Fillet.svg \ Resources/icons/Part_Revolve.svg \ Resources/icons/Part_Import.svg \ + Resources/icons/Part_Loft.svg \ Resources/icons/Part_Mirror.svg \ Resources/icons/Part_MirrorPNG.png \ Resources/icons/Part_RuledSurface.svg \ Resources/icons/Part_Shapebuilder.png \ Resources/icons/Part_Shapebuilder.svg \ Resources/icons/Part_ShapeInfo.svg \ + Resources/icons/Part_Sweep.svg \ Resources/icons/Tree_Part.svg \ Resources/icons/preferences-part_design.svg \ Resources/icons/PartFeature.svg \ diff --git a/src/Mod/Part/Gui/Resources/Part.qrc b/src/Mod/Part/Gui/Resources/Part.qrc index 82c60f77a..f6fbdf0c3 100644 --- a/src/Mod/Part/Gui/Resources/Part.qrc +++ b/src/Mod/Part/Gui/Resources/Part.qrc @@ -16,6 +16,7 @@ icons/Part_Fillet.svg icons/Part_Fuse.svg icons/Part_Import.svg + icons/Part_Loft.svg icons/Part_Mirror.svg icons/Part_MirrorPNG.png icons/Part_Revolve.svg @@ -24,6 +25,7 @@ icons/Part_Shapebuilder.png icons/Part_ShapeInfo.svg icons/Part_Sphere.svg + icons/Part_Sweep.svg icons/Part_Torus.svg icons/preferences-part_design.svg icons/Tree_Part.svg diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Loft.svg b/src/Mod/Part/Gui/Resources/icons/Part_Loft.svg new file mode 100644 index 000000000..72df9ab92 --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_Loft.svg @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg new file mode 100644 index 000000000..33a9f428a --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/TaskLoft.cpp b/src/Mod/Part/Gui/TaskLoft.cpp index 96c3417a2..7192c27c4 100644 --- a/src/Mod/Part/Gui/TaskLoft.cpp +++ b/src/Mod/Part/Gui/TaskLoft.cpp @@ -32,6 +32,7 @@ #include "TaskLoft.h" #include +#include #include #include #include @@ -198,7 +199,8 @@ TaskLoft::TaskLoft() { widget = new LoftWidget(); taskbox = new Gui::TaskView::TaskBox( - QPixmap(), widget->windowTitle(), true, 0); + Gui::BitmapFactory().pixmap("Part_Loft"), + widget->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(widget); Content.push_back(taskbox); } diff --git a/src/Mod/Part/Gui/TaskSweep.cpp b/src/Mod/Part/Gui/TaskSweep.cpp index effd5c28b..64e9995e4 100644 --- a/src/Mod/Part/Gui/TaskSweep.cpp +++ b/src/Mod/Part/Gui/TaskSweep.cpp @@ -32,6 +32,7 @@ #include "TaskSweep.h" #include +#include #include #include #include @@ -225,7 +226,8 @@ TaskSweep::TaskSweep() { widget = new SweepWidget(); taskbox = new Gui::TaskView::TaskBox( - QPixmap(), widget->windowTitle(), true, 0); + Gui::BitmapFactory().pixmap("Part_Sweep"), + widget->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(widget); Content.push_back(taskbox); } From 0e1d4fb8cdb1ade915aa0c354e15ca25ffaecaaa Mon Sep 17 00:00:00 2001 From: jriegel Date: Sun, 10 Jun 2012 10:26:57 +0200 Subject: [PATCH 333/517] Add LibPack 8.x detection from Assembly --- CMakeLists.txt | 8 + cMake/UseLibPack8x.cmake | 331 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 cMake/UseLibPack8x.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index b52555629..5ac2f98e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,7 @@ if(FREECAD_LIBPACK_USE) # checking for a unique file in LibPack location to make sure the right version of the LibPack is there find_file(FREECAD_LIBPACK_CHECKFILE6X boost_program_options-vc80-mt-gd.lib ${FREECAD_LIBPACK_DIR}/lib ) find_file(FREECAD_LIBPACK_CHECKFILE7X boost_program_options-vc90-mt-gd-1_39.lib ${FREECAD_LIBPACK_DIR}/lib ) + find_file(FREECAD_LIBPACK_CHECKFILE8X boost_program_options-vc90-mt-gd-1_48.lib ${FREECAD_LIBPACK_DIR}/lib ) find_file(FREECAD_LIBPACK_CHECKCUSTOM boost_program_options-vc90-mt-gd-1_41.lib ${FREECAD_LIBPACK_DIR}/lib ) IF(FREECAD_LIBPACK_CHECKFILE6X) include(cMake/UseLibPack6x.cmake) @@ -115,6 +116,13 @@ if(FREECAD_LIBPACK_USE) set(FREECAD_LIBPACK6 NOTFOUND CACHE STRING "Displays if the libpack has been found") MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK6) set(FREECAD_LIBPACK7 FOUND CACHE STRING "Displays if the libpack has been found") + ELSEIF(FREECAD_LIBPACK_CHECKFILE8X) + include(cMake/UseLibPack8x.cmake) + set(FREECAD_LIBPACK6 NOTFOUND CACHE STRING "Displays if the libpack has been found") + set(FREECAD_LIBPACK7 NOTFOUND CACHE STRING "Displays if the libpack has been found") + set(SWIG_EXECUTABLE ${FREECAD_LIBPACK_DIR}/tools/swigwin-1.3.40/swig.exe) + MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK6) + set(FREECAD_LIBPACK8 FOUND CACHE STRING "Displays if the libpack has been found") ELSEIF(FREECAD_LIBPACK_CHECKCUSTOM) include(cMake/UseLibPackCustom.cmake) set(FREECAD_LIBPACKX FOUND CACHE STRING "Displays if the libpack has been found") diff --git a/cMake/UseLibPack8x.cmake b/cMake/UseLibPack8x.cmake new file mode 100644 index 000000000..d75740064 --- /dev/null +++ b/cMake/UseLibPack8x.cmake @@ -0,0 +1,331 @@ +# ================================================================================ +# == Win32 is default behaviour use the LibPack copied in Source tree ============ + +# -------------------------------------------------------------------------------- +# General includes + +link_directories(${FREECAD_LIBPACK_DIR}/lib) +include_directories(${FREECAD_LIBPACK_DIR}/include) + +# OpenGL +set(OPENGL_gl_LIBRARY opengl32 glu32) + +# Python +set(PYTHON_DEBUG_LIBRARY python26_d.lib) +set(PYTHON_LIBRARY python26.lib) +set(PYTHON_INCLUDE_PATH ${FREECAD_LIBPACK_DIR}/include/python) +set(PYTHON_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/python.exe) +set(PYTHONLIBS_FOUND TRUE) + +# XercesC +set(XERCESC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/xercesc) +set(XERCESC_LIBRARIES xerces-c_2.lib) +set(XERCESC_DEBUG_LIBRARIES xerces-c_2D.lib) +set(XERCESC_FOUND TRUE) + +# Boost +set(Boost_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/boost) +set(Boost_LIBRARIES + optimized boost_filesystem-vc90-mt-1_48.lib + optimized boost_system-vc90-mt-1_48.lib + optimized boost_graph-vc90-mt-1_48.lib + optimized boost_program_options-vc90-mt-1_48.lib + optimized boost_regex-vc90-mt-1_48.lib + optimized boost_signals-vc90-mt-1_48.lib + optimized boost_thread-vc90-mt-1_48.lib +) +set(Boost_DEBUG_LIBRARIES + debug boost_filesystem-vc90-mt-gd-1_48.lib + debug boost_date_time-vc90-mt-gd-1_48.lib + debug boost_filesystem-vc90-mt-gd-1_48.lib + debug boost_iostreams-vc90-mt-gd-1_48.lib + debug boost_math_c99f-vc90-mt-gd-1_48.lib + debug boost_math_tr1f-vc90-mt-gd-1_48.lib + debug boost_thread-vc90-mt-gd-1_48.lib + debug boost_system-vc90-mt-gd-1_48.lib + debug boost_graph-vc90-mt-gd-1_48.lib + debug boost_program_options-vc90-mt-gd-1_48.lib + debug boost_regex-vc90-mt-gd-1_48.lib + debug boost_signals-vc90-mt-gd-1_48.lib +) +set(Boost_FOUND TRUE) + +# Zlib +set(ZLIB_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/zlib) +set(ZLIB_LIBRARIES zdll.lib) +set(ZLIB_FOUND TRUE) + +# SMESH +set(SMESH_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/smesh) +set(SMESH_LIBRARIES + StdMeshers.lib + MEFISTO2.lib + SMESH.lib + DriverUNV.lib + SMESHDS.lib + DriverSTL.lib + DriverDAT.lib + Driver.lib + SMDS.lib + ) + +set(SMESH_FOUND TRUE) + +# Coin3D +set(COIN3D_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/coin) +set(COIN3D_LIBRARY_DEBUG coin3d.lib) +set(COIN3D_LIBRARY_RELEASE coin3.lib) +set(COIN3D_FOUND TRUE) + + +# QT +set(QT_INCLUDE_DIR + ${FREECAD_LIBPACK_DIR}/include/QT/ + ${FREECAD_LIBPACK_DIR}/include/QT/Qt + ${FREECAD_LIBPACK_DIR}/include/QT/QtCore + ${FREECAD_LIBPACK_DIR}/include/QT/QtGui + ${FREECAD_LIBPACK_DIR}/include/QT/QtDesigner + ${FREECAD_LIBPACK_DIR}/include/QT/QtSvg + ${FREECAD_LIBPACK_DIR}/include/QT/QtNetwork + ${FREECAD_LIBPACK_DIR}/include/QT/QtSql + ${FREECAD_LIBPACK_DIR}/include/QT/QtTest + ${FREECAD_LIBPACK_DIR}/include/QT/QtUiTools + ${FREECAD_LIBPACK_DIR}/include/QT/QtXml + ${FREECAD_LIBPACK_DIR}/include/QT/QtOpenGl + ${FREECAD_LIBPACK_DIR}/include/QT/QtWebKit + ) + +set(QT_QTCORE_INCLUDE_DIR + ${FREECAD_LIBPACK_DIR}/include/QT/ + ${FREECAD_LIBPACK_DIR}/include/QT/QtCore + ) + +set(QT_LIBRARIES + optimized QtCore4.lib + optimized QtGui4.lib + optimized QtDesigner4.lib + optimized QtSvg4.lib + optimized QtNetwork4.lib + optimized QtSql4.lib + optimized QtTest4.lib + optimized QtXml4.lib + optimized QtOpenGl4.lib + optimized QtWebKit4.lib +) +set(QT_DEBUG_LIBRARIES + debug QtCored4.lib + debug QtGuid4.lib + debug QtDesignerd4.lib + debug QtSvgd4.lib + debug QtNetworkd4.lib + debug QtSqld4.lib + debug QtTestd4.lib + debug QtXmld4.lib + debug QtOpenGld4.lib + debug QtWebKitd4.lib +) + +set(QT_QTCORE_LIBRARY_DEBUG + debug QtCored4.lib + ) + +set(QT_QTCORE_LIBRARY + optimized QtCore4.lib +) + +set(QT_UIC_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/uic.exe) +set(QT_MOC_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/moc.exe) +set(QT_RCC_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/rcc.exe) +set(QT_HELPCOMPILER_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/qhelpgenerator.exe) +set(QT_COLLECTIOMGENERATOR_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/qcollectiongenerator.exe) + + + +MACRO (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options) + SET(${_qt4_files}) + SET(${_qt4_options}) + #SET(_QT4_DOING_OPTIONS FALSE) + FOREACH(_currentArg ${ARGN}) + # IF ("${_currentArg}" STREQUAL "OPTIONS") + # SET(_QT4_DOING_OPTIONS TRUE) + # ELSE ("${_currentArg}" STREQUAL "OPTIONS") + # IF(_QT4_DOING_OPTIONS) + # LIST(APPEND ${_qt4_options} "${_currentArg}") + # ELSE(_QT4_DOING_OPTIONS) + LIST(APPEND ${_qt4_files} "${_currentArg}") + # ENDIF(_QT4_DOING_OPTIONS) + # ENDIF ("${_currentArg}" STREQUAL "OPTIONS") + ENDFOREACH(_currentArg) +ENDMACRO (QT4_EXTRACT_OPTIONS) + +# macro used to create the names of output files preserving relative dirs +MACRO (QT4_MAKE_OUTPUT_FILE infile prefix ext outfile ) + STRING(LENGTH ${CMAKE_CURRENT_BINARY_DIR} _binlength) + STRING(LENGTH ${infile} _infileLength) + SET(_checkinfile ${CMAKE_CURRENT_SOURCE_DIR}) + IF(_infileLength GREATER _binlength) + STRING(SUBSTRING "${infile}" 0 ${_binlength} _checkinfile) + IF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_BINARY_DIR} ${infile}) + ELSE(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile}) + ENDIF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + ELSE(_infileLength GREATER _binlength) + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile}) + ENDIF(_infileLength GREATER _binlength) + SET(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${rel}") + STRING(REPLACE ".." "__" _outfile ${_outfile}) + GET_FILENAME_COMPONENT(outpath ${_outfile} PATH) + GET_FILENAME_COMPONENT(_outfile ${_outfile} NAME_WE) + FILE(MAKE_DIRECTORY ${outpath}) + SET(${outfile} ${outpath}/${prefix}${_outfile}.${ext}) +ENDMACRO (QT4_MAKE_OUTPUT_FILE ) + +MACRO (QT4_WRAP_CPP outfiles ) + QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) + SET(ARGN) + foreach(it ${moc_files}) + get_filename_component(it ${it} ABSOLUTE) + QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_options} ${it} -o ${outfile} + MAIN_DEPENDENCY ${it} + ) + SET(${outfiles} ${${outfiles}} ${outfile}) + endforeach(it) +ENDMACRO (QT4_WRAP_CPP) + + +# This is a special version of the built in macro qt4_wrap_cpp +# It is required since moc'ed files are now included instead of being added to projects directly +# It adds a reverse dependency to solve this +# This has the unfortunate side effect that some files are always rebuilt +# There is probably a cleaner solution than this + +include(AddFileDependencies) + +macro(fc_wrap_cpp outfiles ) + QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) + SET(ARGN) + foreach(it ${moc_files}) + get_filename_component(it ${it} ABSOLUTE) + QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_options} ${it} -o ${outfile} + MAIN_DEPENDENCY ${it} + ) + SET(${outfiles} ${${outfiles}} ${outfile}) + add_file_dependencies(${it} ${outfile}) + endforeach(it) +endmacro(fc_wrap_cpp) + + +MACRO (QT4_ADD_RESOURCES outfiles ) + QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN}) + SET(ARGN) + FOREACH (it ${rcc_files}) + GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + GET_FILENAME_COMPONENT(rc_path ${infile} PATH) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx) + # parse file for dependencies + # all files are absolute paths or relative to the location of the qrc file + FILE(READ "${infile}" _RC_FILE_CONTENTS) + STRING(REGEX MATCHALL "]*>" "" _RC_FILE "${_RC_FILE}") + STRING(REGEX MATCH "^/|([A-Za-z]:/)" _ABS_PATH_INDICATOR "${_RC_FILE}") + IF(NOT _ABS_PATH_INDICATOR) + SET(_RC_FILE "${rc_path}/${_RC_FILE}") + ENDIF(NOT _ABS_PATH_INDICATOR) + SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}") + ENDFOREACH(_RC_FILE) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_RCC_EXECUTABLE} + ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile} + DEPENDS ${_RC_DEPENDS}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) +ENDMACRO (QT4_ADD_RESOURCES) + +MACRO (QT4_WRAP_UI outfiles ) +QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN}) + +FOREACH (it ${ui_files}) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) +ENDMACRO (QT4_WRAP_UI) + + +set(QT4_FOUND TRUE) + +# SoQt +set(SOQT_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/soqt) +set(SOQT_LIBRARY_RELEASE soqt1.lib) +set(SOQT_LIBRARY_DEBUG soqt1d.lib) +set(SOQT_FOUND TRUE) + +# OpenCV +set(OPENCV_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/opencv) +set(OPENCV_LIBRARIES cv.lib cvaux.lib cxcore.lib cxts.lib highgui.lib) +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 + TKXSBase + TKXCAF + TKLCAF + TKCAF + TKSTEP + TKIGES + TKXDESTEP + TKXDEIGES + TKBO + TKBRep + TKTopAlgo + TKGeomAlgo + TKGeomBase + TKOffset + TKPrim + TKSTEP + TKSTEPBase + TKSTEPAttr + TKHLR +) +set(OCC_LIBRARY_DIR + ${FREECAD_LIBPACK_DIR}/lib +) +set(OCC_FOUND TRUE) + +SET(EIGEN2_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/eigen2) +set(EIGEN2_FOUND TRUE) + +SET(EIGEN3_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/eigen3) +set(EIGEN3_FOUND TRUE) + + + + From 180691db4f68f1bf3e2f8d33250793164c4d2dbd Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 11:12:30 +0200 Subject: [PATCH 334/517] 0000226: Minor Bug with Box and Sphere not drawn correctly, update Sweep icon --- src/Gui/CommandDoc.cpp | 5 ++ src/Mod/Part/Gui/Command.cpp | 6 ++- .../Part/Gui/Resources/icons/Part_Sweep.svg | 48 +++++++++++-------- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index b9d0ea68b..a445f68c1 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -192,6 +192,11 @@ void StdCmdImport::activated(int iMsg) getActiveGuiDocument()->getDocument()->getName(), it.value().toAscii()); } + + std::list views = getActiveGuiDocument()->getMDIViewsOfType(Gui::View3DInventor::getClassTypeId()); + for (std::list::iterator it = views.begin(); it != views.end(); ++it) { + (*it)->viewAll(); + } } bool StdCmdImport::isActive(void) diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index e713331d9..444f5b1e0 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -442,7 +442,6 @@ CmdPartImport::CmdPartImport() sPixmap = "Part_Import"; } - void CmdPartImport::activated(int iMsg) { QStringList filter; @@ -471,6 +470,11 @@ void CmdPartImport::activated(int iMsg) doCommand(Doc, "Part.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } commitCommand(); + + std::list views = getActiveGuiDocument()->getMDIViewsOfType(Gui::View3DInventor::getClassTypeId()); + for (std::list::iterator it = views.begin(); it != views.end(); ++it) { + (*it)->viewAll(); + } } } diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg index 33a9f428a..c5b8ca3c2 100644 --- a/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg +++ b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg @@ -16,7 +16,7 @@ id="svg3364" sodipodi:version="0.32" inkscape:version="0.48.3.1 r9886" - sodipodi:docname="Part_Sweep2.svg" + sodipodi:docname="Part_Sweep_red_thickened_path.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.1"> @@ -184,7 +184,7 @@ image/svg+xml - + @@ -193,34 +193,40 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> + + - - + From 6c16628f4e0ed88ca12c05877c43602d71219134 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 11:46:05 +0200 Subject: [PATCH 335/517] Write current date and version number to MIBA --- src/Gui/SoFCOffscreenRenderer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Gui/SoFCOffscreenRenderer.cpp b/src/Gui/SoFCOffscreenRenderer.cpp index 6ca265ab9..8af4a831b 100644 --- a/src/Gui/SoFCOffscreenRenderer.cpp +++ b/src/Gui/SoFCOffscreenRenderer.cpp @@ -252,6 +252,12 @@ QStringList SoFCOffscreenRenderer::getWriteImageFiletypeInfo() std::string SoFCOffscreenRenderer::createMIBA() const { std::stringstream com; + const std::map& cfg = App::Application::Config(); + std::map::const_iterator it; + it = cfg.find("BuildVersionMajor"); + std::string major = (it != cfg.end() ? it->second : ""); + it = cfg.find("BuildVersionMinor"); + std::string minor = (it != cfg.end() ? it->second : ""); com << setw(7) << setfill(' ') << fixed; com << " \n" ; @@ -266,8 +272,8 @@ std::string SoFCOffscreenRenderer::createMIBA() const com << " \n" ; com << " \n" ; com << " Unknown\n" ; - com << " 2006-07-05T01:11:00\n" ; - com << " FreeCAD 0.5\n" ; + com << " " << QDateTime::currentDateTime().toString().toAscii().constData() << "\n" ; + com << " " << App::GetApplication().getExecutableName() << " " << major << "." << minor << "\n" ; com << " Unknown\n"; com << " 1.0\n"; com << " \n" ; From 5d7061a5b044747ff940e98ea58f64c6477f0bf7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 13:22:11 +0200 Subject: [PATCH 336/517] Workaround for weird sweeping problem, allow to select several edges as path --- src/Mod/Part/App/PartFeatures.cpp | 19 +++++++++++++------ src/Mod/Part/Gui/TaskSweep.cpp | 28 ++++++++++++++-------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Mod/Part/App/PartFeatures.cpp b/src/Mod/Part/App/PartFeatures.cpp index 431e15741..45aec90d8 100644 --- a/src/Mod/Part/App/PartFeatures.cpp +++ b/src/Mod/Part/App/PartFeatures.cpp @@ -244,16 +244,19 @@ App::DocumentObjectExecReturn *Sweep::execute(void) if (!(spine && spine->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId()))) return new App::DocumentObjectExecReturn("No spine linked."); const std::vector& subedge = Spine.getSubValues(); - if (subedge.size() != 1) - return new App::DocumentObjectExecReturn("Not exactly one sub-shape linked."); TopoDS_Shape path; const Part::TopoShape& shape = static_cast(spine)->Shape.getValue(); if (!shape._Shape.IsNull()) { - if (!subedge[0].empty()) { - path = shape.getSubShape(subedge[0].c_str()); + try { + BRepBuilderAPI_MakeWire mkWire; + for (std::vector::const_iterator it = subedge.begin(); it != subedge.end(); ++it) { + TopoDS_Shape subshape = shape.getSubShape(it->c_str()); + mkWire.Add(TopoDS::Edge(subshape)); + } + path = mkWire.Wire(); } - else { + catch (Standard_Failure) { if (shape._Shape.ShapeType() == TopAbs_EDGE) path = shape._Shape; else if (shape._Shape.ShapeType() == TopAbs_WIRE) @@ -273,8 +276,12 @@ App::DocumentObjectExecReturn *Sweep::execute(void) const TopoDS_Shape& shape = static_cast(*it)->Shape.getValue(); if (shape.IsNull()) return new App::DocumentObjectExecReturn("Linked shape is invalid."); + // There is a weird behaviour of BRepOffsetAPI_MakePipeShell when trying to add the wire as is. + // If we re-create the wire then everything works fine. + // https://sourceforge.net/apps/phpbb/free-cad/viewtopic.php?f=10&t=2673&sid=fbcd2ff4589f0b2f79ed899b0b990648#p20268 if (shape.ShapeType() == TopAbs_WIRE) { - profiles.Append(shape); + BRepBuilderAPI_MakeWire mkWire(TopoDS::Wire(shape)); + profiles.Append(mkWire.Wire()); } else if (shape.ShapeType() == TopAbs_EDGE) { BRepBuilderAPI_MakeWire mkWire(TopoDS::Edge(shape)); diff --git a/src/Mod/Part/Gui/TaskSweep.cpp b/src/Mod/Part/Gui/TaskSweep.cpp index 64e9995e4..63839c514 100644 --- a/src/Mod/Part/Gui/TaskSweep.cpp +++ b/src/Mod/Part/Gui/TaskSweep.cpp @@ -118,7 +118,7 @@ void SweepWidget::findShapes() bool SweepWidget::accept() { - Gui::SelectionFilter edgeFilter ("SELECT Part::Feature SUBELEMENT Edge COUNT 1"); + Gui::SelectionFilter edgeFilter ("SELECT Part::Feature SUBELEMENT Edge COUNT 1.."); Gui::SelectionFilter partFilter ("SELECT Part::Feature COUNT 1"); bool matchEdge = edgeFilter.match(); bool matchPart = partFilter.match(); @@ -128,16 +128,14 @@ bool SweepWidget::accept() } // get the selected object - std::string objectName, subShape; + std::string selection; if (matchEdge) { const std::vector& result = edgeFilter.Result[0]; - const std::vector& edges = result[0].getSubNames(); - objectName = result.front().getFeatName(); - subShape = edges.front(); + selection = result.front().getAsPropertyLinkSubString(); } else { const std::vector& result = partFilter.Result[0]; - objectName = result.front().getFeatName(); + selection = result.front().getAsPropertyLinkSubString(); } QString list, solid, frenet; @@ -167,15 +165,17 @@ bool SweepWidget::accept() try { QString cmd; cmd = QString::fromAscii( - "App.getDocument('%6').addObject('Part::Sweep','Sweep')\n" - "App.getDocument('%6').ActiveObject.Sections=[%1]\n" - "App.getDocument('%6').ActiveObject.Spine=(FreeCAD.ActiveDocument.%2,['%3'])\n" - "App.getDocument('%6').ActiveObject.Solid=%4\n" - "App.getDocument('%6').ActiveObject.Frenet=%5\n" + "App.getDocument('%5').addObject('Part::Sweep','Sweep')\n" + "App.getDocument('%5').ActiveObject.Sections=[%1]\n" + "App.getDocument('%5').ActiveObject.Spine=%2\n" + "App.getDocument('%5').ActiveObject.Solid=%3\n" + "App.getDocument('%5').ActiveObject.Frenet=%4\n" ) - .arg(list).arg(QLatin1String(objectName.c_str())) - .arg(QLatin1String(subShape.c_str())) - .arg(solid).arg(frenet).arg(QString::fromAscii(d->document.c_str())); + .arg(list) + .arg(QLatin1String(selection.c_str())) + .arg(solid) + .arg(frenet) + .arg(QString::fromAscii(d->document.c_str())); Gui::Document* doc = Gui::Application::Instance->getDocument(d->document.c_str()); if (!doc) throw Base::Exception("Document doesn't exist anymore"); From 769528e86e10938351ef1f5fc7d9f58ffa20f5df Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 18:25:56 +0200 Subject: [PATCH 337/517] Set number if decimals in property editor according to user settings --- src/Gui/propertyeditor/PropertyItem.cpp | 20 ++++++++++---------- src/Mod/Drawing/App/FeatureViewPart.cpp | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index eab7c4c20..52b5733ec 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -544,7 +544,7 @@ PropertyFloatItem::PropertyFloatItem() QVariant PropertyFloatItem::toString(const QVariant& prop) const { double value = prop.toDouble(); - QString data = QLocale::system().toString(value, 'f', 2); + QString data = QLocale::system().toString(value, 'f', decimals()); const std::vector& props = getPropertyData(); if (!props.empty()) { if (props.front()->getTypeId().isDerivedFrom(App::PropertyDistance::getClassTypeId())) { @@ -698,7 +698,7 @@ PropertyFloatConstraintItem::PropertyFloatConstraintItem() QVariant PropertyFloatConstraintItem::toString(const QVariant& prop) const { double value = prop.toDouble(); - QString data = QLocale::system().toString(value, 'f', 2); + QString data = QLocale::system().toString(value, 'f', decimals()); return QVariant(data); } @@ -791,7 +791,7 @@ QVariant PropertyAngleItem::toString(const QVariant& prop) const { double value = prop.toDouble(); QString data = QString::fromUtf8("%1 \xc2\xb0") - .arg(QLocale::system().toString(value, 'f', 2)); + .arg(QLocale::system().toString(value, 'f', decimals())); return QVariant(data); } @@ -1246,13 +1246,13 @@ QVariant PropertyPlacementItem::toolTip(const App::Property* prop) const QString data = QString::fromAscii("Axis: (%1 %2 %3)\n" "Angle: %4\n" "Move: (%5 %6 %7)") - .arg(QLocale::system().toString(dir.x,'f',2)) - .arg(QLocale::system().toString(dir.y,'f',2)) - .arg(QLocale::system().toString(dir.z,'f',2)) - .arg(QLocale::system().toString(angle,'f',2)) - .arg(QLocale::system().toString(pos.x,'f',2)) - .arg(QLocale::system().toString(pos.y,'f',2)) - .arg(QLocale::system().toString(pos.z,'f',2)); + .arg(QLocale::system().toString(dir.x,'f',decimals())) + .arg(QLocale::system().toString(dir.y,'f',decimals())) + .arg(QLocale::system().toString(dir.z,'f',decimals())) + .arg(QLocale::system().toString(angle,'f',decimals())) + .arg(QLocale::system().toString(pos.x,'f',decimals())) + .arg(QLocale::system().toString(pos.y,'f',decimals())) + .arg(QLocale::system().toString(pos.z,'f',decimals())); return QVariant(data); } diff --git a/src/Mod/Drawing/App/FeatureViewPart.cpp b/src/Mod/Drawing/App/FeatureViewPart.cpp index f4f755338..0eee19f3a 100644 --- a/src/Mod/Drawing/App/FeatureViewPart.cpp +++ b/src/Mod/Drawing/App/FeatureViewPart.cpp @@ -82,7 +82,7 @@ FeatureViewPart::FeatureViewPart(void) ADD_PROPERTY_TYPE(Source ,(0),group,App::Prop_None,"Shape to view"); ADD_PROPERTY_TYPE(ShowHiddenLines ,(false),group,App::Prop_None,"Control the appearance of the dashed hidden lines"); ADD_PROPERTY_TYPE(ShowSmoothLines ,(false),group,App::Prop_None,"Control the appearance of the smooth lines"); - ADD_PROPERTY_TYPE(LineWidth,(0.35),vgroup,App::Prop_None,"The thickness of the resulting lines"); + ADD_PROPERTY_TYPE(LineWidth,(0.35f),vgroup,App::Prop_None,"The thickness of the resulting lines"); } FeatureViewPart::~FeatureViewPart() From 2efc4915a1579af49fefca98f1d4ae2119520c0a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 11 Jun 2012 14:31:27 -0300 Subject: [PATCH 338/517] 0000715: Draft snap --- src/Mod/Draft/DraftGui.py | 58 ++++++++++++++++++++++++++++---------- src/Mod/Draft/DraftSnap.py | 29 ++++++++++++++----- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index d68a981a7..d97a7d474 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -137,7 +137,7 @@ class DraftLineEdit(QtGui.QLineEdit): self.emit(QtCore.SIGNAL("up()")) elif event.key() == QtCore.Qt.Key_Down: self.emit(QtCore.SIGNAL("down()")) - elif (event.key() == QtCore.Qt.Key_Z) and QtCore.Qt.ControlModifier: + elif (event.key() == QtCore.Qt.Key_Z) and (int(event.modifiers()) == QtCore.Qt.ControlModifier): self.emit(QtCore.SIGNAL("undo()")) else: QtGui.QLineEdit.keyPressEvent(self, event) @@ -184,6 +184,7 @@ class DraftToolBar: self.crossedViews = [] self.isTaskOn = False self.fillmode = Draft.getParam("fillmode") + self.mask = None if self.taskmode: # add only a dummy widget, since widgets are created on demand @@ -593,6 +594,7 @@ class DraftToolBar: self.cancel = None self.sourceCmd = None self.pointcallback = None + self.mask = None if self.taskmode: self.isTaskOn = False self.baseWidget = QtGui.QWidget() @@ -882,15 +884,16 @@ class DraftToolBar: last = self.sourceCmd.node[0] else: last = self.sourceCmd.node[-1] - numx = last.x + numx - numy = last.y + numy - numz = last.z + numz + print "last:",last + v = FreeCAD.Vector(numx,numy,numz) + print "orig:",v if FreeCAD.DraftWorkingPlane: v = FreeCAD.Vector(numx,numy,numz) - v = FreeCAD.DraftWorkingPlane.getGlobalCoords(v) - numx = v.x - numy = v.y - numz = v.z + v = FreeCAD.DraftWorkingPlane.getGlobalRot(v) + print "rotated:",v + numx = last.x + v.x + numy = last.y + v.y + numz = last.z + v.z self.sourceCmd.numericInput(numx,numy,numz) def finish(self): @@ -963,6 +966,12 @@ class DraftToolBar: self.toggleradius(1) elif txt.endsWith("]"): self.toggleradius(-1) + elif txt.endsWith("x"): + self.constrain("x") + elif txt.endsWith("y"): + self.constrain("y") + elif txt.endsWith("z"): + self.constrain("z") elif txt.endsWith("c"): if self.closeButton.isVisible(): self.closeLine() @@ -1025,29 +1034,38 @@ class DraftToolBar: dp = point if self.relativeMode and (last != None): if plane: - dp = plane.getLocalCoords(FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z)) + dp = plane.getLocalRot(FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z)) else: dp = FreeCAD.Vector(point.x-last.x, point.y-last.y, point.z-last.z) # set widgets - self.xValue.setText("%.2f" % dp.x) - self.yValue.setText("%.2f" % dp.y) - self.zValue.setText("%.2f" % dp.z) + if self.mask in ['y','z']: + self.xValue.setText("0.00") + else: + self.xValue.setText("%.2f" % dp.x) + if self.mask in ['x','z']: + self.yValue.setText("0.00") + else: + self.yValue.setText("%.2f" % dp.y) + if self.mask in ['x','y']: + self.zValue.setText("0.00") + else: + self.zValue.setText("%.2f" % dp.z) # set masks - if mask == "x": + if (mask == "x") or (self.mask == "x"): self.xValue.setEnabled(True) self.yValue.setEnabled(False) self.zValue.setEnabled(False) self.xValue.setFocus() self.xValue.selectAll() - elif mask == "y": + elif (mask == "y") or (self.mask == "y"): self.xValue.setEnabled(False) self.yValue.setEnabled(True) self.zValue.setEnabled(False) self.yValue.setFocus() self.yValue.selectAll() - elif mask == "z": + elif (mask == "z") or (self.mask == "z"): self.xValue.setEnabled(False) self.yValue.setEnabled(False) self.zValue.setEnabled(True) @@ -1168,6 +1186,16 @@ class DraftToolBar: Draft.setParam("snapRange",par+val) FreeCADGui.Snapper.showradius() + def constrain(self,val): + if self.mask == val: + self.mask = None + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.mask = None + else: + self.mask = val + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.mask = val + #--------------------------------------------------------------------------- # TaskView operations #--------------------------------------------------------------------------- diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index c4bacf77a..b906c7188 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -60,6 +60,7 @@ class Snapper: self.constraintAxis = None self.basepoint = None self.affinity = None + self.mask = None self.cursorMode = None if Draft.getParam("maxSnap"): self.maxEdges = Draft.getParam("maxSnapEdges") @@ -126,7 +127,7 @@ class Snapper: def cstr(point): "constrains if needed" - if constrain: + if constrain or self.mask: fpt = self.constrain(point,lastpoint) else: self.unconstrain() @@ -211,7 +212,9 @@ class Snapper: else: # first stick to the snapped object - point = self.snapToVertex(self.snapInfo)[0] + s = self.snapToVertex(self.snapInfo) + if s: + point = s[0] # active snapping comp = self.snapInfo['Component'] @@ -278,7 +281,7 @@ class Snapper: self.lastObj[1] = obj.Name if not snaps: - return point + return cstr(point) # calculating the nearest snap point shortest = 1000000000000000000 @@ -395,7 +398,7 @@ class Snapper: def snapToPolar(self,point,last): "snaps to polar lines from the given point" - if self.isEnabled('ortho'): + if self.isEnabled('ortho') and (not self.mask): if last: vecs = [] if hasattr(FreeCAD,"DraftWorkingPlane"): @@ -535,9 +538,11 @@ class Snapper: "returns a perpendicular X extension snap location" if self.isEnabled("extension") and self.isEnabled("perpendicular"): if last and self.extLine: - tmpEdge = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() - np = self.getPerpendicular(tmpEdge,last) - return [np,'perpendicular',np] + if self.extLine.p1() != self.extLine.p2(): + tmpEdge = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() + np = self.getPerpendicular(tmpEdge,last) + return [np,'perpendicular',np] + return None def snapToElines(self,e1,e2): "returns a snap location at the infinite intersection of the given edges" @@ -668,6 +673,7 @@ class Snapper: self.setCursor() if Draft.getParam("hideSnapBar"): self.toolbar.hide() + self.mask = None def constrain(self,point,basepoint=None,axis=None): '''constrain(point,basepoint=None,axis=None: Returns a @@ -696,6 +702,8 @@ class Snapper: delta = point.sub(self.basepoint) # setting constraint axis + if self.mask: + self.affinity = self.mask if not self.affinity: self.affinity = FreeCAD.DraftWorkingPlane.getClosestAxis(delta) if isinstance(axis,FreeCAD.Vector): @@ -920,6 +928,13 @@ class Snapper: if FreeCADGui.ActiveDocument: self.setTrackers() + def setGrid(self): + "sets the grid, if visible" + if self.grid and (not self.forceGridOff): + if self.grid.Visible: + self.grid.set() + self.setTrackers() + def setTrackers(self): v = Draft.get3DView() if v in self.trackers[0]: From 231786f5792ffa2ac32b38d00ca444b6f92fa92f Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 11 Jun 2012 14:56:38 -0300 Subject: [PATCH 339/517] 0000737: Draft selection --- src/Mod/Draft/DraftGui.py | 4 +-- src/Mod/Draft/DraftTools.py | 55 +++++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index d97a7d474..1e84dbce8 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -697,7 +697,7 @@ class DraftToolBar: if not self.taskmode: self.labelx.setText(translate("draft", "Pick Object")) self.labelx.show() - self.makeDumbTask() + self.makeDumbTask() def editUi(self): self.taskUi(translate("draft", "Edit")) @@ -769,7 +769,7 @@ class DraftToolBar: def __init__(self): pass def getStandardButtons(self): - return 0 + return int(QtGui.QDialogButtonBox.Cancel) panel = TaskPanel() FreeCADGui.Control.showDialog(panel) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 040736927..9f3b6fde0 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -111,15 +111,15 @@ def selectObject(arg): if (arg["Key"] == "ESCAPE"): FreeCAD.activeDraftCommand.finish() # TODO : this part raises a coin3D warning about scene traversal, to be fixed. - if (arg["Type"] == "SoMouseButtonEvent"): - if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): - cursor = arg["Position"] - snapped = Draft.get3DView().getObjectInfo((cursor[0],cursor[1])) - if snapped: - obj = FreeCAD.ActiveDocument.getObject(snapped['Object']) - FreeCADGui.Selection.addSelection(obj) - FreeCAD.activeDraftCommand.component=snapped['Component'] - FreeCAD.activeDraftCommand.proceed() + elif (arg["Type"] == "SoMouseButtonEvent"): + if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): + cursor = arg["Position"] + snapped = Draft.get3DView().getObjectInfo((cursor[0],cursor[1])) + if snapped: + obj = FreeCAD.ActiveDocument.getObject(snapped['Object']) + FreeCADGui.Selection.addSelection(obj) + FreeCAD.activeDraftCommand.component=snapped['Component'] + FreeCAD.activeDraftCommand.proceed() def getPoint(target,args,mobile=False,sym=False,workingplane=True): ''' @@ -1726,12 +1726,6 @@ class Modifier(DraftTool): def __init__(self): DraftTool.__init__(self) - def IsActive(self): - if Draft.getSelection(): - return True - else: - return False - class Move(Modifier): "The Draft_Move FreeCAD command definition" @@ -1771,9 +1765,11 @@ class Move(Modifier): self.ui.cross(True) def finish(self,closed=False,cont=False): - if self.ui: + if self.ghost: self.ghost.finalize() + if self.linetrack: self.linetrack.finalize() + if self.constraintrack: self.constraintrack.finalize() Modifier.finish(self) if cont and self.ui: @@ -1941,11 +1937,15 @@ class Rotate(Modifier): def finish(self,closed=False,cont=False): "finishes the arc" Modifier.finish(self) - if self.ui: + if self.linetrack: self.linetrack.finalize() + if self.constraintrack: self.constraintrack.finalize() + if self.arctrack: self.arctrack.finalize() + if self.ghost: self.ghost.finalize() + if self.doc: self.doc.recompute() if cont and self.ui: if self.ui.continueMode: @@ -2248,10 +2248,13 @@ class Offset(Modifier): self.finish() def finish(self,closed=False): - if self.ui and self.running: - self.linetrack.finalize() - self.constraintrack.finalize() - self.ghost.finalize() + if self.running: + if self.linetrack: + self.linetrack.finalize() + if self.constraintrack: + self.constraintrack.finalize() + if self.ghost: + self.ghost.finalize() Modifier.finish(self) def numericRadius(self,rad): @@ -2924,8 +2927,10 @@ class Trimex(Modifier): Modifier.finish(self) self.force = None if self.ui: - self.linetrack.finalize() - self.constraintrack.finalize() + if self.linetrack: + self.linetrack.finalize() + if self.constraintrack: + self.constraintrack.finalize() if self.ghost: for g in self.ghost: g.finalize() @@ -2980,9 +2985,11 @@ class Scale(Modifier): def finish(self,closed=False,cont=False): Modifier.finish(self) - if self.ui: + if self.ghost: self.ghost.finalize() + if self.linetrack: self.linetrack.finalize() + if self.constraintrack: self.constraintrack.finalize() if cont and self.ui: if self.ui.continueMode: From ceae465c6c1ae1eb594ce59f4f8c1cdcfcd51e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 11 Jun 2012 20:03:16 +0200 Subject: [PATCH 340/517] Moved transversal areas ploter to new paradigm --- src/Mod/Ship/shipAreasCurve/TaskPanel.py | 20 ++-- src/Mod/Ship/shipHydrostatics/Tools.py | 144 +++++++++++++++++++++++ 2 files changed, 156 insertions(+), 8 deletions(-) diff --git a/src/Mod/Ship/shipAreasCurve/TaskPanel.py b/src/Mod/Ship/shipAreasCurve/TaskPanel.py index dbd3271bb..01389551a 100644 --- a/src/Mod/Ship/shipAreasCurve/TaskPanel.py +++ b/src/Mod/Ship/shipAreasCurve/TaskPanel.py @@ -45,11 +45,15 @@ class TaskPanel: return False self.save() # Plot data - data = Hydrostatics.Displacement(self.ship,self.form.draft.value(),self.form.trim.value()) - x = self.ship.xSection[:] - y = data[0] - disp = data[1] - xcb = data[2] + data = Hydrostatics.displacement(self.ship,self.form.draft.value(),0.0,self.form.trim.value()) + disp = data[0] + xcb = data[1].x + data = Hydrostatics.areas(self.ship,self.form.draft.value(),0.0,self.form.trim.value()) + x = [] + y = [] + for i in range(0,len(data)): + x.append(data[i][0]) + y.append(data[i][1]) Plot.Plot(x,y,disp,xcb, self.ship) self.preview.clean() return True @@ -194,7 +198,7 @@ class TaskPanel: if draftFP < 0.0: draftFP = 0.0 # Calculate hydrostatics involved - data = Hydrostatics.Displacement(self.ship,self.form.draft.value(),self.form.trim.value()) + data = Hydrostatics.displacement(self.ship,self.form.draft.value(),0.0,self.form.trim.value()) # Prepare the string in html format string = 'L = %g [m]
    ' % (self.ship.Length) string = string + 'B = %g [m]
    ' % (self.ship.Beam) @@ -202,8 +206,8 @@ class TaskPanel: string = string + 'Trim = %g [degrees]
    ' % (self.form.trim.value()) string = string + 'TAP = %g [m]
    ' % (draftAP) string = string + 'TFP = %g [m]
    ' % (draftFP) - string = string + Translator.translate('Displacement') + ' = %g [ton]
    ' % (data[1]) - string = string + 'XCB = %g [m]' % (data[2]) + string = string + Translator.translate('Displacement') + ' = %g [ton]
    ' % (data[0]) + string = string + 'XCB = %g [m]' % (data[1].x) # Set the document self.form.output.setHtml(string) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 2c0e5aa36..e4a20c0e5 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -23,12 +23,156 @@ import math # FreeCAD modules +from FreeCAD import Vector, Part import FreeCAD as App import FreeCADGui as Gui # Module import Instance from shipUtils import Math +def areas(ship, draft, roll=0.0, trim=0.0, yaw=0.0, n=30): + """ Compute ship transversal areas. + @param ship Ship instance. + @param draft Ship draft. + @param roll Ship roll angle. + @param trim Ship trim angle. + @param yaw Ship yaw angle. Ussually you don't want to use this + value. + @param n Number of sections to perform. + @return Transversal areas (every area value is composed by x + coordinate and computed area) + """ + if n < 2: + return [] + # We will take a duplicate of ship shape in order to place it + shape = ship.Shape.copy() + shape.translate(Vector(0.0,0.0,-draft)) + # Rotations composition is Roll->Trim->Yaw + shape.rotate(Vector(0.0,0.0,0.0), Vector(1.0,0.0,0.0), roll) + shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,-1.0,0.0), trim) + shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,0.0,1.0), yaw) + # Now we need to know the x range of values + bbox = shape.BoundBox + xmin = bbox.XMin + xmax = bbox.XMax + dx = (xmax - xmin) / (n-1.0) + # First area is equal to zero. + areas = [[xmin, 0.0]] + # Since we need face entities, in order to compute sections we will + # create boxes with front face at transversal area position, + # compute solid common, divide by faces, and preserve only desired + # ones. + App.Console.PrintMessage("Computing transversal areas...\n") + App.Console.PrintMessage("Some Inventor representation errors can be shown, ignore it please.\n") + for i in range(1,n-1): + App.Console.PrintMessage("%d / %d\n" % (i, n-2)) + x = xmin + i*dx + area = 0.0 + # Create the box + L = xmax - xmin + B = bbox.YMax - bbox.YMin + p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) + box = Part.makeBox(1.5*L + x, 3.0*B, - bbox.ZMin + 1.0, p) + # Compute common part with ship + for s in shape.Solids: + # Get solids intersection + try: + common = box.common(s) + except: + continue + if common.Volume == 0.0: + continue + # Recompute object adding it to the scene, when we have + # computed desired data we can remove it. + try: + Part.show(common) + except: + continue + # Divide by faces and compute only section placed ones + faces = common.Faces + for f in faces: + faceBounds = f.BoundBox + # Orientation filter + if faceBounds.XMax - faceBounds.XMin > 0.00001: + continue + # Place filter + if abs(faceBounds.XMax - x) > 0.00001: + continue + # Valid face, compute area + area = area + f.Area + # Destroy last object generated + App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) + # Append transversal area + areas.append([x, area]) + # Last area is equal to zero + areas.append([xmax, 0.0]) + App.Console.PrintMessage("Done!\n") + return areas + +def displacement(ship, draft, roll=0.0, trim=0.0, yaw=0.0): + """ Compute ship displacement. + @param ship Ship instance. + @param draft Ship draft. + @param roll Ship roll angle. + @param trim Ship trim angle. + @param yaw Ship yaw angle. Ussually you don't want to use this + value. + @return [disp, B, Cb], \n + disp = Ship displacement [ton]. + B = Bouyance center [m]. + Cb = Block coefficient. + @note Bouyance center will returned as FreeCAD.Vector class. + @note Returned Bouyance center is in non modified ship coordinates + """ + # We will take a duplicate of ship shape in order to place it + shape = ship.Shape.copy() + shape.translate(Vector(0.0,0.0,-draft)) + # Rotations composition is Roll->Trim->Yaw + shape.rotate(Vector(0.0,0.0,0.0), Vector(1.0,0.0,0.0), roll) + shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,-1.0,0.0), trim) + shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,0.0,1.0), yaw) + # Now we need to know box dimensions + bbox = shape.BoundBox + xmin = bbox.XMin + xmax = bbox.XMax + # Create the box + L = xmax - xmin + B = bbox.YMax - bbox.YMin + p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) + box = Part.makeBox(3.0*L, 3.0*B, -bbox.ZMin + 1.0, p) + # Compute common part with ship + try: + common = box.common(shape) + except: + return [0.0, Vector(), 0.0] + # Get data + vol = common.Volume + cog = Vector() + for s in common.Solids: + sCoG = s.CenterOfMass + cog.x = cog.x + sCoG.x*s.Volume + cog.y = cog.y + sCoG.y*s.Volume + cog.z = cog.z + sCoG.z*s.Volume + cog.x = cog.x / vol + cog.y = cog.y / vol + cog.z = cog.z / vol + Vol = L*B*abs(bbox.ZMin) + # Undo transformations + B = Vector() + B.x = cog.x*math.cos(math.radians(-yaw)) - cog.y*math.sin(math.radians(-yaw)) + B.y = cog.x*math.sin(math.radians(-yaw)) + cog.y*math.cos(math.radians(-yaw)) + B.z = cog.z + cog.x = B.x*math.cos(math.radians(-trim)) - B.z*math.sin(math.radians(-trim)) + cog.y = B.y + cog.z = B.x*math.sin(math.radians(-trim)) + B.z*math.cos(math.radians(-trim)) + B.x = cog.x + B.y = cog.y*math.cos(math.radians(-roll)) - cog.z*math.sin(math.radians(-roll)) + B.z = cog.y*math.sin(math.radians(-roll)) + cog.z*math.cos(math.radians(-roll)) + B.z = B.z + draft + # Return data + dens = 1.025 # [tons/m3], salt water + return [dens*vol, B, vol/Vol] + def convertSection(section, x, z): """ Transform linear points distribution of full section into double list, where points are gropued by height, and From 104f9d522589b1f8e713b75d31c54e8b3193c21e Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 21:19:49 +0200 Subject: [PATCH 341/517] Fix build errors with autotools, fix a couple of grave bugs --- src/Mod/Drawing/App/FeaturePage.cpp | 11 +++++++---- src/Mod/Part/App/PartFeature.h | 25 +++++++++++++------------ src/Mod/Part/Gui/Makefile.am | 5 +++++ src/Mod/PartDesign/App/Makefile.am | 2 ++ src/Mod/PartDesign/Gui/Makefile.am | 6 ++++++ 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/Mod/Drawing/App/FeaturePage.cpp b/src/Mod/Drawing/App/FeaturePage.cpp index c1730ebc4..0af2e7f4d 100644 --- a/src/Mod/Drawing/App/FeaturePage.cpp +++ b/src/Mod/Drawing/App/FeaturePage.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include "FeaturePage.h" #include "FeatureView.h" @@ -86,10 +87,11 @@ void FeaturePage::onChanged(const App::Property* prop) App::DocumentObjectExecReturn *FeaturePage::execute(void) { - if(Template.getValue() == "") + std::string temp = Template.getValue(); + if (temp.empty()) return App::DocumentObject::StdReturn; - Base::FileInfo fi(Template.getValue()); + Base::FileInfo fi(temp); if (!fi.isReadable()) { // if there is a old absolute template file set use a redirect fi.setFile(App::Application::getResourceDir() + "Mod/Drawing/Templates/" + fi.fileName()); @@ -186,8 +188,9 @@ std::vector FeaturePage::getEditableTextsFromTemplate(void) const { std::vector eds; - if (Template.getValue() != "") { - Base::FileInfo tfi(Template.getValue()); + std::string temp = Template.getValue(); + if (!temp.empty()) { + Base::FileInfo tfi(temp); if (!tfi.isReadable()) { // if there is a old absolute template file set use a redirect tfi.setFile(App::Application::getResourceDir() + "Mod/Drawing/Templates/" + tfi.fileName()); diff --git a/src/Mod/Part/App/PartFeature.h b/src/Mod/Part/App/PartFeature.h index 9bb4bd49a..5c08151bc 100644 --- a/src/Mod/Part/App/PartFeature.h +++ b/src/Mod/Part/App/PartFeature.h @@ -71,21 +71,21 @@ public: virtual std::vector getPySubObjects(const std::vector&) const; /** - /* Find the origin of a reference, e.g. the vertex or edge in a sketch that - /* produced a face - */ + * Find the origin of a reference, e.g. the vertex or edge in a sketch that + * produced a face + */ const TopoDS_Shape findOriginOf(const TopoDS_Shape& reference); protected: void onChanged(const App::Property* prop); TopLoc_Location getLocation() const; /** - /* Build a history of changes - /* MakeShape: The operation that created the changes, e.g. BRepAlgoAPI_Common - /* type: The type of object we are interested in, e.g. TopAbs_FACE - /* newS: The new shape that was created by the operation - /* oldS: The original shape prior to the operation - */ + * Build a history of changes + * MakeShape: The operation that created the changes, e.g. BRepAlgoAPI_Common + * type: The type of object we are interested in, e.g. TopAbs_FACE + * newS: The new shape that was created by the operation + * oldS: The original shape prior to the operation + */ ShapeHistory buildHistory(BRepBuilderAPI_MakeShape&, TopAbs_ShapeEnum type, const TopoDS_Shape& newS, const TopoDS_Shape& oldS); ShapeHistory joinHistory(const ShapeHistory&, const ShapeHistory&); @@ -121,9 +121,9 @@ public: // Utility methods /** -/* Find all faces cut by a line through the centre of gravity of a given face -/* Useful for the "up to face" options to pocket or pad -*/ + * Find all faces cut by a line through the centre of gravity of a given face + * Useful for the "up to face" options to pocket or pad + */ struct cutFaces { TopoDS_Face face; double distsq; @@ -137,3 +137,4 @@ std::vector findAllFacesCutBy(const TopoDS_Shape& shape, #endif // PART_FEATURE_H + diff --git a/src/Mod/Part/Gui/Makefile.am b/src/Mod/Part/Gui/Makefile.am index 15a2a094a..f214d928d 100644 --- a/src/Mod/Part/Gui/Makefile.am +++ b/src/Mod/Part/Gui/Makefile.am @@ -19,6 +19,7 @@ BUILT_SOURCES=\ ui_TaskFaceColors.h \ ui_TaskShapeBuilder.h \ ui_TaskLoft.h \ + ui_TaskSweep.h \ moc_CrossSections.cpp \ moc_DlgBooleanOperation.cpp \ moc_DlgExtrusion.cpp \ @@ -35,6 +36,7 @@ BUILT_SOURCES=\ moc_TaskFaceColors.cpp \ moc_TaskShapeBuilder.cpp \ moc_TaskLoft.cpp \ + moc_TaskSweep.cpp \ qrc_Part.cpp libPartGui_la_SOURCES=\ @@ -73,6 +75,8 @@ libPartGui_la_SOURCES=\ TaskShapeBuilder.h \ TaskLoft.cpp \ TaskLoft.h \ + TaskSweep.cpp \ + TaskSweep.h \ PreCompiled.cpp \ PreCompiled.h \ SoBrepShape.cpp \ @@ -230,6 +234,7 @@ EXTRA_DIST = \ TaskFaceColors.ui \ TaskShapeBuilder.ui \ TaskLoft.ui \ + TaskSweep.ui \ Resources/Part.qrc \ Resources/translations/Part_af.qm \ Resources/translations/Part_af.ts \ diff --git a/src/Mod/PartDesign/App/Makefile.am b/src/Mod/PartDesign/App/Makefile.am index 54d59e3bd..a3b251dec 100644 --- a/src/Mod/PartDesign/App/Makefile.am +++ b/src/Mod/PartDesign/App/Makefile.am @@ -17,6 +17,8 @@ libPartDesign_la_SOURCES=\ FeatureChamfer.h \ FeatureDressUp.cpp \ FeatureDressUp.h \ + FeatureGroove.cpp \ + FeatureGroove.h \ Body.cpp \ Body.h \ FeatureSketchBased.cpp \ diff --git a/src/Mod/PartDesign/Gui/Makefile.am b/src/Mod/PartDesign/Gui/Makefile.am index f7bbf7054..9977ac0c1 100644 --- a/src/Mod/PartDesign/Gui/Makefile.am +++ b/src/Mod/PartDesign/Gui/Makefile.am @@ -8,8 +8,10 @@ BUILT_SOURCES=\ moc_TaskPocketParameters.cpp \ moc_TaskChamferParameters.cpp \ moc_TaskFilletParameters.cpp \ + moc_TaskGrooveParameters.cpp \ moc_TaskHoleParameters.cpp \ moc_TaskRevolutionParameters.cpp \ + ui_TaskGrooveParameters.h \ ui_TaskPadParameters.h \ ui_TaskPatternRectangularParameters.h \ ui_TaskPocketParameters.h \ @@ -32,6 +34,8 @@ libPartDesignGui_la_SOURCES=\ Command.cpp \ PreCompiled.cpp \ PreCompiled.h \ + TaskGrooveParameters.cpp \ + TaskGrooveParameters.h \ TaskPadParameters.cpp \ TaskPadParameters.h \ TaskPatternRectangularParameters.cpp \ @@ -58,6 +62,8 @@ libPartDesignGui_la_SOURCES=\ ViewProviderChamfer.h \ ViewProviderFillet.cpp \ ViewProviderFillet.h \ + ViewProviderGroove.cpp \ + ViewProviderGroove.h \ ViewProviderRevolution.cpp \ ViewProviderRevolution.h \ ViewProviderPatternRectangular.cpp \ From 041dd32a006fe1b9b1b77a85e39fc54df3915f54 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 11 Jun 2012 17:14:40 -0300 Subject: [PATCH 342/517] 0000742: Draft grid --- src/Mod/Draft/DraftSnap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index b906c7188..55a4d7a23 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -956,7 +956,7 @@ class Snapper: self.trackers[2].append(self.tracker) self.trackers[3].append(self.extLine) self.trackers[4].append(self.radiusTracker) - if not self.forceGridOff: + if self.grid and (not self.forceGridOff): self.grid.set() if not hasattr(FreeCADGui,"Snapper"): From 291dbfa0548209f130daeff3dc1a7ec8c4ae0fa1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 23:06:09 +0200 Subject: [PATCH 343/517] Fix issues in autotools --- configure.ac | 6 +++--- src/Gui/Icons/Makefile.am | 1 + src/Mod/Drawing/Gui/Makefile.am | 1 + src/Mod/PartDesign/Gui/Makefile.am | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 6883a2f39..05010ef14 100644 --- a/configure.ac +++ b/configure.ac @@ -1082,10 +1082,10 @@ AC_MSG_NOTICE([ RTTI enabled (forced): true Compiler warnings enabled: $fc_set_warn installation prefix: $prefix - eneble-assembly: $fc_set_assembly - eneble-cam: $fc_set_cam + enable-assembly: $fc_set_assembly + enable-cam: $fc_set_cam enable-sandbox: $fc_set_sandbox - eneble-template: $fc_set_template + enable-template: $fc_set_template Now, run 'make' to build FreeCAD. ************************************************************************** diff --git a/src/Gui/Icons/Makefile.am b/src/Gui/Icons/Makefile.am index 9be01aa6c..66c1c3548 100644 --- a/src/Gui/Icons/Makefile.am +++ b/src/Gui/Icons/Makefile.am @@ -56,6 +56,7 @@ EXTRA_DIST = \ edit-copy.svg \ edit-cut.svg \ edit-delete.svg \ + edit-edit.svg \ edit-paste.svg \ edit-select-all.svg \ edit-select-box.svg \ diff --git a/src/Mod/Drawing/Gui/Makefile.am b/src/Mod/Drawing/Gui/Makefile.am index 3cca838d3..84253f31f 100644 --- a/src/Mod/Drawing/Gui/Makefile.am +++ b/src/Mod/Drawing/Gui/Makefile.am @@ -91,5 +91,6 @@ libdir = $(prefix)/Mod/Drawing CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ + $(ibDrawingGui_la_UI) CMakeLists.txt diff --git a/src/Mod/PartDesign/Gui/Makefile.am b/src/Mod/PartDesign/Gui/Makefile.am index 9977ac0c1..e3b32574c 100644 --- a/src/Mod/PartDesign/Gui/Makefile.am +++ b/src/Mod/PartDesign/Gui/Makefile.am @@ -21,6 +21,7 @@ BUILT_SOURCES=\ ui_TaskRevolutionParameters.h libPartDesignGui_la_UI=\ + TaskGrooveParameters.ui \ TaskPadParameters.ui \ TaskPatternRectangularParameters.ui \ TaskPocketParameters.ui \ From a2710d2e15718eb58a82b96caaf61649ff050ec4 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 11 Jun 2012 19:16:02 -0300 Subject: [PATCH 344/517] Draft: Made the grid unpickable --- src/Mod/Draft/DraftTrackers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index c36d03152..c655c62bd 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -468,6 +468,8 @@ class PlaneTracker(Tracker): p1 = Draft.get3DView().getPoint((100,100)) p2 = Draft.get3DView().getPoint((110,100)) bl = (p2.sub(p1)).Length * (Draft.getParam("snapRange")/2) + pick = coin.SoPickStyle() + pick.style.setValue(coin.SoPickStyle.UNPICKABLE) self.trans = coin.SoTransform() self.trans.translation.setValue([0,0,0]) m1 = coin.SoMaterial() @@ -486,6 +488,7 @@ class PlaneTracker(Tracker): l = coin.SoLineSet() l.numVertices.setValues([3,3,3]) s = coin.SoSeparator() + s.addChild(pick) s.addChild(self.trans) s.addChild(m1) s.addChild(c1) @@ -542,6 +545,9 @@ class gridTracker(Tracker): self.mainlines = Draft.getParam("gridEvery") self.numlines = 100 col = [0.2,0.2,0.3] + + pick = coin.SoPickStyle() + pick.style.setValue(coin.SoPickStyle.UNPICKABLE) self.trans = coin.SoTransform() self.trans.translation.setValue([0,0,0]) @@ -595,6 +601,7 @@ class gridTracker(Tracker): lines3 = coin.SoLineSet() lines3.numVertices.setValues(aidx) s = coin.SoSeparator() + s.addChild(pick) s.addChild(self.trans) s.addChild(mat1) s.addChild(self.coords1) From 178010bb39e679f0d09be2a231b6b387bad1150b Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 12 Jun 2012 01:00:17 +0200 Subject: [PATCH 345/517] Fix build errors with autotools --- src/Mod/Drawing/Gui/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Drawing/Gui/Makefile.am b/src/Mod/Drawing/Gui/Makefile.am index 84253f31f..a434c80f0 100644 --- a/src/Mod/Drawing/Gui/Makefile.am +++ b/src/Mod/Drawing/Gui/Makefile.am @@ -91,6 +91,6 @@ libdir = $(prefix)/Mod/Drawing CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ - $(ibDrawingGui_la_UI) + $(libDrawingGui_la_UI) \ CMakeLists.txt From ad6ae5e2bcd1ddd49bc21d28b22d05da6d33e920 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 12 Jun 2012 10:10:21 +0200 Subject: [PATCH 346/517] Fix Makefile --- src/Mod/Drawing/Gui/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Drawing/Gui/Makefile.am b/src/Mod/Drawing/Gui/Makefile.am index 84253f31f..a434c80f0 100644 --- a/src/Mod/Drawing/Gui/Makefile.am +++ b/src/Mod/Drawing/Gui/Makefile.am @@ -91,6 +91,6 @@ libdir = $(prefix)/Mod/Drawing CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ - $(ibDrawingGui_la_UI) + $(libDrawingGui_la_UI) \ CMakeLists.txt From 6621c00c10bcebb9a56108b23373a23685ad54a9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 12 Jun 2012 10:52:49 +0200 Subject: [PATCH 347/517] Add sweep and loft to toolbar --- src/Mod/Part/Gui/Command.cpp | 4 ++-- src/Mod/Part/Gui/Workbench.cpp | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 444f5b1e0..60d199d9c 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -948,7 +948,7 @@ CmdPartLoft::CmdPartLoft() sAppModule = "Part"; sGroup = QT_TR_NOOP("Part"); sMenuText = QT_TR_NOOP("Loft..."); - sToolTipText = QT_TR_NOOP("Advanced utility to lofts"); + sToolTipText = QT_TR_NOOP("Utility to loft"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; sPixmap = "Part_Loft"; @@ -974,7 +974,7 @@ CmdPartSweep::CmdPartSweep() sAppModule = "Part"; sGroup = QT_TR_NOOP("Part"); sMenuText = QT_TR_NOOP("Sweep..."); - sToolTipText = QT_TR_NOOP("Advanced utility to sweep"); + sToolTipText = QT_TR_NOOP("Utility to sweep"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; sPixmap = "Part_Sweep"; diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index 9997750b2..d6b6b113a 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -67,18 +67,12 @@ Gui::MenuItem* Workbench::setupMenuBar() const root->insertItem(item, part); part->setCommand("&Part"); *part << "Part_Import" << "Part_Export" << "Separator"; - *part << prim << "Part_Primitives" << "Separator" << "Part_ShapeFromMesh" - << "Part_MakeSolid" << "Part_ReverseShape" << "Part_SimpleCopy" - << "Part_RefineShape" << "Separator" + *part << prim << "Part_Primitives" << "Part_Builder" << "Separator" + << "Part_ShapeFromMesh" << "Part_MakeSolid" << "Part_ReverseShape" + << "Part_SimpleCopy" << "Part_RefineShape" << "Separator" << "Part_Boolean" << "Part_CrossSections" << "Part_Extrude" << "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer" - << "Part_RuledSurface" << "Part_Loft" << "Part_Sweep" - << "Part_Builder"; - - //Gui::MenuItem* partSimple = new Gui::MenuItem; - //root->insertItem(item, partSimple); - //partSimple->setCommand("&Simple"); - //*partSimple << "Part_SimpleCylinder"; + << "Part_RuledSurface" << "Part_Loft" << "Part_Sweep"; return root; } @@ -89,15 +83,18 @@ Gui::ToolBarItem* Workbench::setupToolBars() const Gui::ToolBarItem* solids = new Gui::ToolBarItem(root); solids->setCommand("Solids"); - *solids << "Part_Box" << "Part_Cylinder" << "Part_Sphere" << "Part_Cone" << "Part_Torus" << "Part_Primitives"; + *solids << "Part_Box" << "Part_Cylinder" << "Part_Sphere" << "Part_Cone" + << "Part_Torus" << "Part_Primitives" << "Part_Builder"; Gui::ToolBarItem* tool = new Gui::ToolBarItem(root); tool->setCommand("Part tools"); - *tool << "Part_Extrude" << "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer" << "Part_RuledSurface"; + *tool << "Part_Extrude" << "Part_Revolve" << "Part_Mirror" << "Part_Fillet" + << "Part_Chamfer" << "Part_RuledSurface" << "Part_Loft" << "Part_Sweep"; Gui::ToolBarItem* boolop = new Gui::ToolBarItem(root); boolop->setCommand("Boolean"); - *boolop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common" << "Part_Section"; + *boolop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common" + << "Part_Section" << "Part_CrossSections"; return root; } From 9170bfe0451cea8dd63650995af2db4575b3ad4d Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 12 Jun 2012 19:03:29 +0200 Subject: [PATCH 348/517] Export object dependencies to graphviz file --- src/App/Document.cpp | 25 ++++++++++ src/App/Document.h | 1 + src/App/DocumentPy.xml | 5 ++ src/App/DocumentPyImp.cpp | 19 ++++++++ src/Gui/CommandDoc.cpp | 76 ++++++++++++++++++++++++++++++ src/Gui/Workbench.cpp | 5 +- src/Mod/Complete/Gui/Workbench.cpp | 3 +- 7 files changed, 131 insertions(+), 3 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 61d1b7921..cba2e757b 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -847,6 +847,31 @@ unsigned int Document::getMemSize (void) const return size; } +void Document::exportGraphviz(std::ostream& out) +{ + std::vector names; + names.reserve(d->objectMap.size()); + DependencyList DepList; + std::map VertexObjectList; + + // Filling up the adjacency List + for (std::map::const_iterator It = d->objectMap.begin(); It != d->objectMap.end();++It) { + // add the object as Vertex and remember the index + VertexObjectList[It->second] = add_vertex(DepList); + names.push_back(It->second->Label.getValue()); + } + // add the edges + for (std::map::const_iterator It = d->objectMap.begin(); It != d->objectMap.end();++It) { + std::vector OutList = It->second->getOutList(); + for (std::vector::const_iterator It2=OutList.begin();It2!=OutList.end();++It2) { + if (*It2) + add_edge(VertexObjectList[It->second],VertexObjectList[*It2],DepList); + } + } + + boost::write_graphviz(out, DepList, boost::make_label_writer(&(names[0]))); +} + // Save the document under the name it has been opened bool Document::save (void) { diff --git a/src/App/Document.h b/src/App/Document.h index 38b247a20..9b705e8c9 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -114,6 +114,7 @@ public: /// Restore the document from the file in Property Path void restore (void); void exportObjects(const std::vector&, std::ostream&); + void exportGraphviz(std::ostream&); std::vector importObjects(std::istream&); /// Opens the document from its file name //void open (void); diff --git a/src/App/DocumentPy.xml b/src/App/DocumentPy.xml index 3897af801..4a996e111 100644 --- a/src/App/DocumentPy.xml +++ b/src/App/DocumentPy.xml @@ -23,6 +23,11 @@ Restore the document from disc + + + Export the dependencies of the objects as graph + + Open a new Undo/Redo transaction. diff --git a/src/App/DocumentPyImp.cpp b/src/App/DocumentPyImp.cpp index 64b04d8b9..4b5d805d4 100644 --- a/src/App/DocumentPyImp.cpp +++ b/src/App/DocumentPyImp.cpp @@ -92,6 +92,25 @@ PyObject* DocumentPy::restore(PyObject * args) Py_Return; } +PyObject* DocumentPy::exportGraphviz(PyObject * args) +{ + char* fn=0; + if (!PyArg_ParseTuple(args, "|s",&fn)) // convert args: Python->C + return NULL; // NULL triggers exception + if (fn) { + Base::FileInfo fi(fn); + Base::ofstream str(fi); + getDocumentPtr()->exportGraphviz(str); + str.close(); + Py_Return; + } + else { + std::stringstream str; + getDocumentPtr()->exportGraphviz(str); + return PyString_FromString(str.str().c_str()); + } +} + PyObject* DocumentPy::addObject(PyObject *args) { char *sType,*sName=0; diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index a445f68c1..a83d5ea5e 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -24,12 +24,16 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include # include # include +# include +# include #endif #include #include +#include #include #include #include @@ -311,6 +315,77 @@ bool StdCmdMergeProjects::isActive(void) return this->hasActiveDocument(); } +//=========================================================================== +// Std_ExportGraphviz +//=========================================================================== + +DEF_STD_CMD_A(StdCmdExportGraphviz); + +StdCmdExportGraphviz::StdCmdExportGraphviz() + : Command("Std_ExportGraphviz") +{ + // seting the + sGroup = QT_TR_NOOP("Tools"); + sMenuText = QT_TR_NOOP("Dependency graph..."); + sToolTipText = QT_TR_NOOP("Show the dependency graph of the objects in the active document"); + sStatusTip = QT_TR_NOOP("Show the dependency graph of the objects in the active document"); + sWhatsThis = "Std_ExportGraphviz"; + eType = 0; +} + +void StdCmdExportGraphviz::activated(int iMsg) +{ + App::Document* doc = App::GetApplication().getActiveDocument(); + Base::FileInfo fi(Base::FileInfo::getTempFileName()); + Base::ofstream str(fi); + doc->exportGraphviz(str); + str.close(); + + Base::FileInfo out(Base::FileInfo::getTempFileName()); + QProcess proc; + QEventLoop loop; + QObject::connect(&proc, SIGNAL(finished(int, QProcess::ExitStatus)), + &loop, SLOT(quit())); + QStringList args; + args << QLatin1String("-Tpng") << QString::fromUtf8(fi.filePath().c_str()) + << QLatin1String("-o") << QString::fromUtf8(out.filePath().c_str()); + QString exe = QLatin1String("dot"); + QStringList env = QProcess::systemEnvironment(); + proc.setEnvironment(env); + proc.start(exe, args); + if (proc.state() == QProcess::Running) { + loop.exec(); + fi.deleteFile(); + } + else { + QMessageBox::warning(getMainWindow(), + qApp->translate("Std_ExportGraphviz","Graphviz not found"), + qApp->translate("Std_ExportGraphviz","Graphviz couldn't be found on your system")); + fi.deleteFile(); + return; + } + + if (out.exists()) { + QPixmap px(QString::fromUtf8(out.filePath().c_str()), "PNG"); + out.deleteFile(); + QLabel* label = new QLabel(0); + label->setAttribute(Qt::WA_DeleteOnClose); + label->setPixmap(px); + label->resize(px.size()); + label->show(); + } + else { + QMessageBox::warning(getMainWindow(), + qApp->translate("Std_ExportGraphviz","Graphviz failed"), + qApp->translate("Std_ExportGraphviz","Graphviz failed to create an image file")); + } +} + +bool StdCmdExportGraphviz::isActive(void) +{ + return (getActiveGuiDocument() ? true : false); +} + //=========================================================================== // Std_New //=========================================================================== @@ -1126,6 +1201,7 @@ void CreateDocCommands(void) rcCmdMgr.addCommand(new StdCmdImport()); rcCmdMgr.addCommand(new StdCmdExport()); rcCmdMgr.addCommand(new StdCmdMergeProjects()); + rcCmdMgr.addCommand(new StdCmdExportGraphviz()); rcCmdMgr.addCommand(new StdCmdSave()); rcCmdMgr.addCommand(new StdCmdSaveAs()); diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index 26ca5d698..f055c2443 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -490,8 +490,9 @@ MenuItem* StdWorkbench::setupMenuBar() const MenuItem* tool = new MenuItem( menuBar ); tool->setCommand("&Tools"); *tool << "Std_DlgParameter" << "Separator" - << "Std_ViewScreenShot" << "Std_SceneInspector" << "Std_DemoMode" - << "Separator" << "Std_DlgCustomize"; + << "Std_ViewScreenShot" << "Std_SceneInspector" + << "Std_ExportGraphviz" << "Std_ProjectUtil" + << "Std_DemoMode" << "Separator" << "Std_DlgCustomize"; // Macro MenuItem* macro = new MenuItem( menuBar ); diff --git a/src/Mod/Complete/Gui/Workbench.cpp b/src/Mod/Complete/Gui/Workbench.cpp index 9b0b0fcf0..707e32131 100644 --- a/src/Mod/Complete/Gui/Workbench.cpp +++ b/src/Mod/Complete/Gui/Workbench.cpp @@ -183,7 +183,8 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Std_DlgMacroRecord" << "Std_MacroStopRecord" << "Std_DlgMacroExecute" << "Std_DlgMacroExecuteDirect" << "Separator" << "Std_ViewScreenShot" << "Std_SceneInspector" - << "Std_ProjectUtil" << "Std_DemoMode" << "Separator" << "Std_DlgCustomize"; + << "Std_ExportGraphviz" << "Std_ProjectUtil" + << "Std_DemoMode" << "Separator" << "Std_DlgCustomize"; // Mesh **************************************************************************************************** Gui::MenuItem* mesh = new Gui::MenuItem( menuBar ); From 28b663c9144ac8c54fa3b35e7772e2f80058ef04 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 12 Jun 2012 17:02:55 -0300 Subject: [PATCH 349/517] Arch: Fixes in structure and roof --- src/Mod/Arch/ArchRoof.py | 82 +++++++++++++++--------------- src/Mod/Arch/ArchStructure.py | 95 ++++++++++++++++++----------------- 2 files changed, 90 insertions(+), 87 deletions(-) diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index e85581e60..2ac0c7604 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -70,20 +70,15 @@ class _CommandRoof: FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+","+str(idx)+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() - elif obj.isDerivedFrom("Part::Feature"): - if len(obj.Shape.Faces) == 1: - FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Roof"))) - FreeCADGui.doCommand("import Arch") - FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+",1)") - FreeCAD.ActiveDocument.commitTransaction() - FreeCAD.ActiveDocument.recompute() - elif obj.isDerivedFrom("Part::Feature"): - if len(obj.Shape.Faces) == 1: + return + if obj.isDerivedFrom("Part::Feature"): + if obj.Shape.Wires: FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Roof"))) FreeCADGui.doCommand("import Arch") - FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+",1)") + FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() + return else: FreeCAD.Console.PrintMessage(str(translate("Arch","Unable to create a roof"))) else: @@ -110,37 +105,42 @@ class _Roof(ArchComponent.Component): import Part, math, DraftGeomUtils pl = obj.Placement - if obj.Base and obj.Face and obj.Angle: - if len(obj.Base.Shape.Faces) >= obj.Face: - f = obj.Base.Shape.Faces[obj.Face-1] - if len(f.Wires) == 1: - if f.Wires[0].isClosed(): - c = round(math.tan(math.radians(obj.Angle)),Draft.precision()) - norm = f.normalAt(0,0) - d = f.BoundBox.DiagonalLength - edges = DraftGeomUtils.sortEdges(f.Edges) - l = len(edges) - edges.append(edges[0]) - shps = [] - for i in range(l): - v = DraftGeomUtils.vec(DraftGeomUtils.angleBisection(edges[i],edges[i+1])) - v.normalize() - bis = v.getAngle(DraftGeomUtils.vec(edges[i])) - delta = 1/math.cos(bis) - v.multiply(delta) - n = (FreeCAD.Vector(norm)).multiply(c) - dv = v.add(n) - dv.normalize() - dv.scale(d,d,d) - shps.append(f.extrude(dv)) - c = shps.pop() - for s in shps: - c = c.common(s) - c = c.removeSplitter() - if not c.isNull(): - obj.Shape = c - if not DraftGeomUtils.isNull(pl): - obj.Placement = pl + if obj.Base and obj.Angle: + w = None + if obj.Base.isDerivedFrom("Part::Feature"): + if (obj.Base.Shape.Faces and obj.Face): + w = obj.Base.Shape.Faces[obj.Face-1].Wires[0] + elif obj.Base.Shape.Wires: + w = obj.Base.Shape.Wires[0] + if w: + if w.isClosed(): + f = Part.Face(w) + norm = f.normalAt(0,0) + c = round(math.tan(math.radians(obj.Angle)),Draft.precision()) + d = f.BoundBox.DiagonalLength + edges = DraftGeomUtils.sortEdges(f.Edges) + l = len(edges) + edges.append(edges[0]) + shps = [] + for i in range(l): + v = DraftGeomUtils.vec(DraftGeomUtils.angleBisection(edges[i],edges[i+1])) + v.normalize() + bis = v.getAngle(DraftGeomUtils.vec(edges[i])) + delta = 1/math.cos(bis) + v.multiply(delta) + n = (FreeCAD.Vector(norm)).multiply(c) + dv = v.add(n) + dv.normalize() + dv.scale(d,d,d) + shps.append(f.extrude(dv)) + c = shps.pop() + for s in shps: + c = c.common(s) + c = c.removeSplitter() + if not c.isNull(): + obj.Shape = c + if not DraftGeomUtils.isNull(pl): + obj.Placement = pl class _ViewProviderRoof(ArchComponent.ViewProviderComponent): "A View Provider for the Roof object" diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 1a9f51c07..e30c14106 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -30,7 +30,7 @@ __title__="FreeCAD Structure" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -def makeStructure(baseobj=None,length=None,width=None,height=None,name=str(translate("Arch","Structure"))): +def makeStructure(baseobj=None,length=1,width=1,height=1,name=str(translate("Arch","Structure"))): '''makeStructure([obj],[length],[width],[heigth],[swap]): creates a structure element based on the given profile object and the given extrusion height. If no base object is given, you can also specify @@ -38,16 +38,12 @@ def makeStructure(baseobj=None,length=None,width=None,height=None,name=str(trans obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name) _Structure(obj) _ViewProviderStructure(obj.ViewObject) - if baseobj: obj.Base = baseobj - if length: obj.Length = length - if width: obj.Width = width - if height: obj.Height = height - if obj.Base: + if baseobj: + obj.Base = baseobj obj.Base.ViewObject.hide() - else: - if (not obj.Width) and (not obj.Length): - obj.Width = 1 - obj.Height = 1 + 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 @@ -116,43 +112,45 @@ class _Structure(ArchComponent.Component): def createGeometry(self,obj): import Part, DraftGeomUtils + # getting default values - height = normal = None - if obj.Length: - length = obj.Length - else: - length = 1 - width = 1 + height = width = length = 1 + if hasattr(obj,"Length"): + if obj.Length: + length = obj.Length if hasattr(obj,"Width"): if obj.Width: width = obj.Width - if obj.Height: - height = obj.Height - else: - for p in obj.InList: - if Draft.getType(p) == "Floor": - height = p.Height - if not height: height = 1 - if obj.Normal == Vector(0,0,0): - normal = Vector(0,0,1) - else: - normal = Vector(obj.Normal) + if hasattr(obj,"Height"): + if obj.Height: + height = obj.Height - # creating shape + # creating base shape pl = obj.Placement - norm = normal.multiply(height) base = None if obj.Base: if obj.Base.isDerivedFrom("Part::Feature"): + if obj.Normal == Vector(0,0,0): + p = FreeCAD.Placement(obj.Base.Placement) + normal = p.Rotation.multVec(Vector(0,0,1)) + else: + normal = Vector(obj.Normal) + normal = normal.multiply(height) base = obj.Base.Shape.copy() if base.Solids: pass elif base.Faces: base = base.extrude(normal) - elif (len(base.Wires) == 1) and base.Wires[0].isClosed(): - base = Part.Face(base.Wires[0]) - base = base.extrude(normal) + elif (len(base.Wires) == 1): + if base.Wires[0].isClosed(): + base = Part.Face(base.Wires[0]) + base = base.extrude(normal) else: + if obj.Normal == Vector(0,0,0): + normal = Vector(0,0,1) + else: + normal = Vector(obj.Normal) + normal = normal.multiply(height) l2 = length/2 or 0.5 w2 = width/2 or 0.5 v1 = Vector(-l2,-w2,0) @@ -162,17 +160,20 @@ class _Structure(ArchComponent.Component): base = Part.makePolygon([v1,v2,v3,v4,v1]) base = Part.Face(base) base = base.extrude(normal) - for app in obj.Additions: - if hasattr(app,"Shape"): - if not app.Shape.isNull(): - base = base.fuse(app.Shape) - app.ViewObject.hide() # to be removed - for hole in obj.Subtractions: - if hasattr(hole,"Shape"): - if not hole.Shape.isNull(): - base = base.cut(hole.Shape) - hole.ViewObject.hide() # to be removed + if base: + # applying adds and subs + if not base.isNull(): + for app in obj.Additions: + if hasattr(app,"Shape"): + if not app.Shape.isNull(): + base = base.fuse(app.Shape) + app.ViewObject.hide() # to be removed + for hole in obj.Subtractions: + if hasattr(hole,"Shape"): + if not hole.Shape.isNull(): + base = base.cut(hole.Shape) + hole.ViewObject.hide() # to be removed pts = self.getAxisPoints(obj) if pts: fsh = [] @@ -182,10 +183,12 @@ class _Structure(ArchComponent.Component): fsh.append(sh) obj.Shape = Part.makeCompound(fsh) else: - if not base.isNull(): - base = base.removeSplitter() - obj.Shape = base - if not DraftGeomUtils.isNull(pl): obj.Placement = pl + if base: + if not base.isNull(): + base = base.removeSplitter() + obj.Shape = base + if not DraftGeomUtils.isNull(pl): + obj.Placement = pl class _ViewProviderStructure(ArchComponent.ViewProviderComponent): "A View Provider for the Structure object" From 5691866433686a55f7eea222fde5c3b9853adea8 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 12 Jun 2012 22:06:35 -0300 Subject: [PATCH 350/517] Arch: Fixes in windows --- src/Mod/Arch/ArchWall.py | 24 +++++++++++++++++------- src/Mod/Arch/ArchWindow.py | 6 +++--- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index e8236af3f..4983d77e7 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -271,7 +271,7 @@ class _Wall(ArchComponent.Component): if prop in ["Base","Height","Width","Align","Additions","Subtractions"]: self.createGeometry(obj) - def getSubVolume(self,base,width,delta=None): + def getSubVolume(self,base,width,plac=None): "returns a subvolume from a base object" import Part max_length = 0 @@ -288,8 +288,8 @@ class _Wall(ArchComponent.Component): v2 = DraftVecUtils.neg(v1) v2 = DraftVecUtils.scale(v1,-2) f = f.extrude(v2) - if delta: - f.translate(delta) + if plac: + f.Placement = plac return f return None @@ -384,12 +384,22 @@ class _Wall(ArchComponent.Component): if base: for app in obj.Additions: - if hasattr(app,"Shape"): + if Draft.getType(app) == "Window": + # window + if app.Base and obj.Width: + f = self.getSubVolume(app.Base,width) + if f: + base = base.cut(f) + elif Draft.isClone(app,"Window"): + if app.Objects[0].Base and width: + f = self.getSubVolume(app.Objects[0].Base,width,app.Placement) + if f: + base = base.cut(f) + elif app.isDerivedFrom("Part::Feature"): if app.Shape: if not app.Shape.isNull(): base = base.fuse(app.Shape) app.ViewObject.hide() #to be removed - for hole in obj.Subtractions: if Draft.getType(hole) == "Window": # window @@ -399,10 +409,10 @@ class _Wall(ArchComponent.Component): base = base.cut(f) elif Draft.isClone(hole,"Window"): if hole.Objects[0].Base and width: - f = self.getSubVolume(hole.Objects[0].Base,width,hole.Placement.Base) + f = self.getSubVolume(hole.Objects[0].Base,width,hole.Placement) if f: base = base.cut(f) - elif hasattr(hole,"Shape"): + elif hole.isDerivedFrom("Part::Feature"): if hole.Shape: if not hole.Shape.isNull(): base = base.cut(hole.Shape) diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index ad9d49369..9c540e7be 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -107,9 +107,9 @@ class _CommandWindow: s = obj.Support w = FreeCAD.ActiveDocument.Objects[-1] # last created object FreeCADGui.doCommand("Arch.removeComponents(FreeCAD.ActiveDocument."+w.Name+",host=FreeCAD.ActiveDocument."+s.Name+")") - elif Draft.isClone(w,"Window"): - if w.Objects[0].Inlist: - FreeCADGui.doCommand("Arch.removeComponents(FreeCAD.ActiveDocument."+w.Name+",host=FreeCAD.ActiveDocument."+w.Objects[0].Inlist[0].Name+")") + elif Draft.isClone(obj,"Window"): + if obj.Objects[0].Inlist: + FreeCADGui.doCommand("Arch.removeComponents(FreeCAD.ActiveDocument."+obj.Name+",host=FreeCAD.ActiveDocument."+obj.Objects[0].Inlist[0].Name+")") FreeCAD.ActiveDocument.commitTransaction() class _Window(ArchComponent.Component): From be4500046c9576470fc6ec536487c9d2ad954059 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Tue, 12 Jun 2012 16:54:07 +0200 Subject: [PATCH 351/517] Matrix4D::analyse function it returns a textual description of the transformation --- src/Base/Matrix.cpp | 95 +++++++++++++++++++++++++++++++++++++++++++++ src/Base/Matrix.h | 2 + 2 files changed, 97 insertions(+) diff --git a/src/Base/Matrix.cpp b/src/Base/Matrix.cpp index 4ea986415..ba936e13f 100644 --- a/src/Base/Matrix.cpp +++ b/src/Base/Matrix.cpp @@ -691,3 +691,98 @@ void Matrix4D::fromString(const std::string &str) input >> dMtrx4D[i][j]; } } + +// Analyse the a transformation Matrix and describe the transformation +std::string Matrix4D::analyse(void) const +{ + const double eps=1.0e-06; + bool hastranslation = (dMtrx4D[0][3] != 0.0 || + dMtrx4D[1][3] != 0.0 || dMtrx4D[2][3] != 0.0); + const Base::Matrix4D unityMatrix = Base::Matrix4D(); + std::string text; + if (*this == unityMatrix) + { + text = "Unity Matrix"; + } + else + { + if (dMtrx4D[3][0] != 0.0 || dMtrx4D[3][1] != 0.0 || + dMtrx4D[3][2] != 0.0 || dMtrx4D[3][3] != 1.0) + { + text = "Projection"; + } + else //translation and affine + { + if (dMtrx4D[0][1] == 0.0 && dMtrx4D[0][2] == 0.0 && + dMtrx4D[1][0] == 0.0 && dMtrx4D[1][2] == 0.0 && + dMtrx4D[2][0] == 0.0 && dMtrx4D[2][1] == 0.0) //scaling + { + std::ostringstream stringStream; + stringStream << "Scale [" << dMtrx4D[0][0] << ", " << + dMtrx4D[1][1] << ", " << dMtrx4D[2][2] << "]"; + text = stringStream.str(); + } + else + { + Base::Matrix4D sub; + sub[0][0] = dMtrx4D[0][0]; sub[0][1] = dMtrx4D[0][1]; + sub[0][2] = dMtrx4D[0][2]; sub[1][0] = dMtrx4D[1][0]; + sub[1][1] = dMtrx4D[1][1]; sub[1][2] = dMtrx4D[1][2]; + sub[2][0] = dMtrx4D[2][0]; sub[2][1] = dMtrx4D[2][1]; + sub[2][2] = dMtrx4D[2][2]; + + Base::Matrix4D trp = sub; + trp.transpose(); + trp = trp * sub; + bool ortho = true; + for (int i=0; i<4 && ortho; i++) { + for (int j=0; j<4 && ortho; j++) { + if (i != j) { + if (fabs(trp[i][j]) > eps) { + ortho = false; + break; + } + } + } + } + + double determinant = sub.determinant(); + if (ortho) + { + if (fabs(determinant-1.0) Date: Tue, 12 Jun 2012 16:55:20 +0200 Subject: [PATCH 352/517] Add PropertyMatrixItem --- src/App/PropertyGeo.h | 3 + src/Gui/SoFCDB.cpp | 1 + src/Gui/propertyeditor/PropertyItem.cpp | 352 ++++++++++++++++++++++++ src/Gui/propertyeditor/PropertyItem.h | 88 ++++++ 4 files changed, 444 insertions(+) diff --git a/src/App/PropertyGeo.h b/src/App/PropertyGeo.h index 280deedea..f8f839b47 100644 --- a/src/App/PropertyGeo.h +++ b/src/App/PropertyGeo.h @@ -185,6 +185,9 @@ public: /** This method returns a string representation of the property */ const Base::Matrix4D &getValue(void) const; + const char* getEditorName(void) const { + return "Gui::PropertyEditor::PropertyMatrixItem"; + } virtual PyObject *getPyObject(void); virtual void setPyObject(PyObject *); diff --git a/src/Gui/SoFCDB.cpp b/src/Gui/SoFCDB.cpp index ddf074ca1..5769248c4 100644 --- a/src/Gui/SoFCDB.cpp +++ b/src/Gui/SoFCDB.cpp @@ -111,6 +111,7 @@ void Gui::SoFCDB::init() PropertyBoolItem ::init(); PropertyVectorItem ::init(); PropertyDoubleVectorItem ::init(); + PropertyMatrixItem ::init(); PropertyPlacementItem ::init(); PropertyEnumItem ::init(); PropertyStringListItem ::init(); diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index 52b5733ec..ef772af2b 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -1050,6 +1050,358 @@ void PropertyDoubleVectorItem::setZ(double z) setData(QVariant::fromValue(Base::Vector3d(x(), y(), z))); } +// --------------------------------------------------------------- + +TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyMatrixItem, Gui::PropertyEditor::PropertyItem); + +PropertyMatrixItem::PropertyMatrixItem() +{ + const int decimals=16; + m_a11 = static_cast(PropertyFloatItem::create()); + m_a11->setParent(this); + m_a11->setPropertyName(QLatin1String("A11")); + m_a11->setDecimals(decimals); + this->appendChild(m_a11); + m_a12 = static_cast(PropertyFloatItem::create()); + m_a12->setParent(this); + m_a12->setPropertyName(QLatin1String("A12")); + m_a12->setDecimals(decimals); + this->appendChild(m_a12); + m_a13 = static_cast(PropertyFloatItem::create()); + m_a13->setParent(this); + m_a13->setPropertyName(QLatin1String("A13")); + m_a13->setDecimals(decimals); + this->appendChild(m_a13); + m_a14 = static_cast(PropertyFloatItem::create()); + m_a14->setParent(this); + m_a14->setPropertyName(QLatin1String("A14")); + m_a14->setDecimals(decimals); + this->appendChild(m_a14); + m_a21 = static_cast(PropertyFloatItem::create()); + m_a21->setParent(this); + m_a21->setPropertyName(QLatin1String("A21")); + m_a21->setDecimals(decimals); + this->appendChild(m_a21); + m_a22 = static_cast(PropertyFloatItem::create()); + m_a22->setParent(this); + m_a22->setPropertyName(QLatin1String("A22")); + m_a22->setDecimals(decimals); + this->appendChild(m_a22); + m_a23 = static_cast(PropertyFloatItem::create()); + m_a23->setParent(this); + m_a23->setPropertyName(QLatin1String("A23")); + m_a23->setDecimals(decimals); + this->appendChild(m_a23); + m_a24 = static_cast(PropertyFloatItem::create()); + m_a24->setParent(this); + m_a24->setPropertyName(QLatin1String("A24")); + m_a24->setDecimals(decimals); + this->appendChild(m_a24); + m_a31 = static_cast(PropertyFloatItem::create()); + m_a31->setParent(this); + m_a31->setPropertyName(QLatin1String("A31")); + m_a31->setDecimals(decimals); + this->appendChild(m_a31); + m_a32 = static_cast(PropertyFloatItem::create()); + m_a32->setParent(this); + m_a32->setPropertyName(QLatin1String("A32")); + m_a32->setDecimals(decimals); + this->appendChild(m_a32); + m_a33 = static_cast(PropertyFloatItem::create()); + m_a33->setParent(this); + m_a33->setPropertyName(QLatin1String("A33")); + m_a33->setDecimals(decimals); + this->appendChild(m_a33); + m_a34 = static_cast(PropertyFloatItem::create()); + m_a34->setParent(this); + m_a34->setPropertyName(QLatin1String("A34")); + m_a34->setDecimals(decimals); + this->appendChild(m_a34); + m_a41 = static_cast(PropertyFloatItem::create()); + m_a41->setParent(this); + m_a41->setPropertyName(QLatin1String("A41")); + m_a41->setDecimals(decimals); + this->appendChild(m_a41); + m_a42 = static_cast(PropertyFloatItem::create()); + m_a42->setParent(this); + m_a42->setPropertyName(QLatin1String("A42")); + m_a42->setDecimals(decimals); + this->appendChild(m_a42); + m_a43 = static_cast(PropertyFloatItem::create()); + m_a43->setParent(this); + m_a43->setPropertyName(QLatin1String("A43")); + m_a43->setDecimals(decimals); + this->appendChild(m_a43); + m_a44 = static_cast(PropertyFloatItem::create()); + m_a44->setParent(this); + m_a44->setPropertyName(QLatin1String("A44")); + m_a44->setDecimals(decimals); + this->appendChild(m_a44); +} + +QVariant PropertyMatrixItem::toString(const QVariant& prop) const +{ + const Base::Matrix4D& value = prop.value(); + QString text = QString::fromAscii("[%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16]") + .arg(QLocale::system().toString(value[0][0], 'f', 2)) //(unsigned short usNdx) + .arg(QLocale::system().toString(value[0][1], 'f', 2)) + .arg(QLocale::system().toString(value[0][2], 'f', 2)) + .arg(QLocale::system().toString(value[0][3], 'f', 2)) + .arg(QLocale::system().toString(value[1][0], 'f', 2)) + .arg(QLocale::system().toString(value[1][1], 'f', 2)) + .arg(QLocale::system().toString(value[1][2], 'f', 2)) + .arg(QLocale::system().toString(value[1][3], 'f', 2)) + .arg(QLocale::system().toString(value[2][0], 'f', 2)) + .arg(QLocale::system().toString(value[2][1], 'f', 2)) + .arg(QLocale::system().toString(value[2][2], 'f', 2)) + .arg(QLocale::system().toString(value[2][3], 'f', 2)) + .arg(QLocale::system().toString(value[3][0], 'f', 2)) + .arg(QLocale::system().toString(value[3][1], 'f', 2)) + .arg(QLocale::system().toString(value[3][2], 'f', 2)) + .arg(QLocale::system().toString(value[3][3], 'f', 2)); + return QVariant(text); +} + +QVariant PropertyMatrixItem::value(const App::Property* prop) const +{ + assert(prop && prop->getTypeId().isDerivedFrom(App::PropertyMatrix::getClassTypeId())); + + const Base::Matrix4D& value = static_cast(prop)->getValue(); + return QVariant::fromValue(value); +} + +QVariant PropertyMatrixItem::toolTip(const App::Property* prop) const +{ + assert(prop && prop->getTypeId().isDerivedFrom(App::PropertyMatrix::getClassTypeId())); + + const Base::Matrix4D& value = static_cast(prop)->getValue(); + return QVariant(QString::fromStdString(value.analyse())); +} + +void PropertyMatrixItem::setValue(const QVariant& value) +{ + if (!value.canConvert()) + return; + const Base::Matrix4D& val = value.value(); + const int decimals=16; + QString data = QString::fromAscii("FreeCAD.Matrix(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16)") + .arg(val[0][0],0, 'f', decimals) + .arg(val[0][1],0, 'f', decimals) + .arg(val[0][2],0, 'f', decimals) + .arg(val[0][3],0, 'f', decimals) + .arg(val[1][0],0, 'f', decimals) + .arg(val[1][1],0, 'f', decimals) + .arg(val[1][2],0, 'f', decimals) + .arg(val[1][3],0, 'f', decimals) + .arg(val[2][0],0, 'f', decimals) + .arg(val[2][1],0, 'f', decimals) + .arg(val[2][2],0, 'f', decimals) + .arg(val[2][3],0, 'f', decimals) + .arg(val[3][0],0, 'f', decimals) + .arg(val[3][1],0, 'f', decimals) + .arg(val[3][2],0, 'f', decimals) + .arg(val[3][3],0, 'f', decimals); + setPropertyValue(data); +} + +QWidget* PropertyMatrixItem::createEditor(QWidget* parent, const QObject* /*receiver*/, const char* /*method*/) const +{ + QLineEdit *le = new QLineEdit(parent); + le->setFrame(false); + le->setReadOnly(true); + return le; +} + +void PropertyMatrixItem::setEditorData(QWidget *editor, const QVariant& data) const +{ + QLineEdit* le = qobject_cast(editor); + const Base::Matrix4D& value = data.value(); + QString text = QString::fromAscii("[%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16]") + .arg(QLocale::system().toString(value[0][0], 'f', 2)) //(unsigned short usNdx) + .arg(QLocale::system().toString(value[0][1], 'f', 2)) + .arg(QLocale::system().toString(value[0][2], 'f', 2)) + .arg(QLocale::system().toString(value[0][3], 'f', 2)) + .arg(QLocale::system().toString(value[1][0], 'f', 2)) + .arg(QLocale::system().toString(value[1][1], 'f', 2)) + .arg(QLocale::system().toString(value[1][2], 'f', 2)) + .arg(QLocale::system().toString(value[1][3], 'f', 2)) + .arg(QLocale::system().toString(value[2][0], 'f', 2)) + .arg(QLocale::system().toString(value[2][1], 'f', 2)) + .arg(QLocale::system().toString(value[2][2], 'f', 2)) + .arg(QLocale::system().toString(value[2][3], 'f', 2)) + .arg(QLocale::system().toString(value[3][0], 'f', 2)) + .arg(QLocale::system().toString(value[3][1], 'f', 2)) + .arg(QLocale::system().toString(value[3][2], 'f', 2)) + .arg(QLocale::system().toString(value[3][3], 'f', 2)); + le->setText(text); +} + +QVariant PropertyMatrixItem::editorData(QWidget *editor) const +{ + QLineEdit *le = qobject_cast(editor); + return QVariant(le->text()); +} + +double PropertyMatrixItem::getA11() const +{ + return data(1,Qt::EditRole).value()[0][0]; +} + +void PropertyMatrixItem::setA11(double A11) +{ + setData(QVariant::fromValue(Base::Matrix4D(A11,getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA12() const +{ + return data(1,Qt::EditRole).value()[0][1]; +} + +void PropertyMatrixItem::setA12(double A12) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),A12,getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA13() const +{ + return data(1,Qt::EditRole).value()[0][2]; +} + +void PropertyMatrixItem::setA13(double A13) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),A13,getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA14() const +{ + return data(1,Qt::EditRole).value()[0][3]; +} + +void PropertyMatrixItem::setA14(double A14) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),A14,getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA21() const +{ + return data(1,Qt::EditRole).value()[1][0]; +} + +void PropertyMatrixItem::setA21(double A21) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),A21,getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA22() const +{ + return data(1,Qt::EditRole).value()[1][1]; +} + +void PropertyMatrixItem::setA22(double A22) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),A22,getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA23() const +{ + return data(1,Qt::EditRole).value()[1][2]; +} + +void PropertyMatrixItem::setA23(double A23) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),A23,getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA24() const +{ + return data(1,Qt::EditRole).value()[1][3]; +} + +void PropertyMatrixItem::setA24(double A24) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),A24,getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA31() const +{ + return data(1,Qt::EditRole).value()[2][0]; +} + +void PropertyMatrixItem::setA31(double A31) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),A31,getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA32() const +{ + return data(1,Qt::EditRole).value()[2][1]; +} + +void PropertyMatrixItem::setA32(double A32) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),A32,getA33(),getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA33() const +{ + return data(1,Qt::EditRole).value()[2][2]; +} + +void PropertyMatrixItem::setA33(double A33) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),A33,getA34(),getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA34() const +{ + return data(1,Qt::EditRole).value()[2][3]; +} + +void PropertyMatrixItem::setA34(double A34) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),A34,getA41(),getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA41() const +{ + return data(1,Qt::EditRole).value()[3][0]; +} + +void PropertyMatrixItem::setA41(double A41) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),A41,getA42(),getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA42() const +{ + return data(1,Qt::EditRole).value()[3][1]; +} + +void PropertyMatrixItem::setA42(double A42) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),A42,getA43(),getA44() ))); +} + +double PropertyMatrixItem::getA43() const +{ + return data(1,Qt::EditRole).value()[3][2]; +} + +void PropertyMatrixItem::setA43(double A43) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),A43,getA44() ))); +} + +double PropertyMatrixItem::getA44() const +{ + return data(1,Qt::EditRole).value()[3][3]; +} + +void PropertyMatrixItem::setA44(double A44) +{ + setData(QVariant::fromValue(Base::Matrix4D(getA11(),getA12(),getA13(),getA14(),getA21(),getA22(),getA23(),getA24(),getA31(),getA32(),getA33(),getA34(),getA41(),getA42(),getA43(),A44 ))); +} + // -------------------------------------------------------------------- PlacementEditor::PlacementEditor(const QString& name, QWidget * parent) diff --git a/src/Gui/propertyeditor/PropertyItem.h b/src/Gui/propertyeditor/PropertyItem.h index bc247966f..e9990136d 100644 --- a/src/Gui/propertyeditor/PropertyItem.h +++ b/src/Gui/propertyeditor/PropertyItem.h @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -38,6 +39,7 @@ Q_DECLARE_METATYPE(Base::Vector3f) Q_DECLARE_METATYPE(Base::Vector3d) +Q_DECLARE_METATYPE(Base::Matrix4D) Q_DECLARE_METATYPE(Base::Placement) namespace Gui { @@ -366,6 +368,92 @@ private: PropertyFloatItem* m_z; }; +class GuiExport PropertyMatrixItem: public PropertyItem +{ + Q_OBJECT + Q_PROPERTY(double A11 READ getA11 WRITE setA11 DESIGNABLE true USER true) + Q_PROPERTY(double A12 READ getA12 WRITE setA12 DESIGNABLE true USER true) + Q_PROPERTY(double A13 READ getA13 WRITE setA13 DESIGNABLE true USER true) + Q_PROPERTY(double A14 READ getA14 WRITE setA14 DESIGNABLE true USER true) + Q_PROPERTY(double A21 READ getA21 WRITE setA21 DESIGNABLE true USER true) + Q_PROPERTY(double A22 READ getA22 WRITE setA22 DESIGNABLE true USER true) + Q_PROPERTY(double A23 READ getA23 WRITE setA23 DESIGNABLE true USER true) + Q_PROPERTY(double A24 READ getA24 WRITE setA24 DESIGNABLE true USER true) + Q_PROPERTY(double A31 READ getA31 WRITE setA31 DESIGNABLE true USER true) + Q_PROPERTY(double A32 READ getA32 WRITE setA32 DESIGNABLE true USER true) + Q_PROPERTY(double A33 READ getA33 WRITE setA33 DESIGNABLE true USER true) + Q_PROPERTY(double A34 READ getA34 WRITE setA34 DESIGNABLE true USER true) + Q_PROPERTY(double A41 READ getA41 WRITE setA41 DESIGNABLE true USER true) + Q_PROPERTY(double A42 READ getA42 WRITE setA42 DESIGNABLE true USER true) + Q_PROPERTY(double A43 READ getA43 WRITE setA43 DESIGNABLE true USER true) + Q_PROPERTY(double A44 READ getA44 WRITE setA44 DESIGNABLE true USER true) + TYPESYSTEM_HEADER(); + + virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; + virtual void setEditorData(QWidget *editor, const QVariant& data) const; + virtual QVariant editorData(QWidget *editor) const; + + double getA11() const; + void setA11(double A11); + double getA12() const; + void setA12(double A12); + double getA13() const; + void setA13(double A13); + double getA14() const; + void setA14(double A14); + double getA21() const; + void setA21(double A21); + double getA22() const; + void setA22(double A22); + double getA23() const; + void setA23(double A23); + double getA24() const; + void setA24(double A24); + double getA31() const; + void setA31(double A31); + double getA32() const; + void setA32(double A32); + double getA33() const; + void setA33(double A33); + double getA34() const; + void setA34(double A34); + double getA41() const; + void setA41(double A41); + double getA42() const; + void setA42(double A42); + double getA43() const; + void setA43(double A43); + double getA44() const; + void setA44(double A44); + +protected: + virtual QVariant toString(const QVariant&) const; + virtual QVariant value(const App::Property*) const; + virtual void setValue(const QVariant&); + +protected: + PropertyMatrixItem(); + virtual QVariant toolTip(const App::Property*) const; + +private: + PropertyFloatItem* m_a11; + PropertyFloatItem* m_a12; + PropertyFloatItem* m_a13; + PropertyFloatItem* m_a14; + PropertyFloatItem* m_a21; + PropertyFloatItem* m_a22; + PropertyFloatItem* m_a23; + PropertyFloatItem* m_a24; + PropertyFloatItem* m_a31; + PropertyFloatItem* m_a32; + PropertyFloatItem* m_a33; + PropertyFloatItem* m_a34; + PropertyFloatItem* m_a41; + PropertyFloatItem* m_a42; + PropertyFloatItem* m_a43; + PropertyFloatItem* m_a44; +}; + class PlacementEditor : public Gui::LabelButton { Q_OBJECT From 11620c4f4191f01716f09a5eb15d8e757b95df22 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 13 Jun 2012 11:02:24 +0200 Subject: [PATCH 353/517] Expose Matrix4D::analyse to python --- src/Base/MatrixPy.xml | 8 ++++++++ src/Base/MatrixPyImp.cpp | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/Base/MatrixPy.xml b/src/Base/MatrixPy.xml index 23b5b15e4..2ab7326b2 100644 --- a/src/Base/MatrixPy.xml +++ b/src/Base/MatrixPy.xml @@ -125,6 +125,14 @@ Get the sub-matrix. The parameter must be in the range [1,4]. + + + +analyze() -> string +Analyzes the type of transformation. + + + The matrix elements diff --git a/src/Base/MatrixPyImp.cpp b/src/Base/MatrixPyImp.cpp index a5408bb18..b7d594f54 100644 --- a/src/Base/MatrixPyImp.cpp +++ b/src/Base/MatrixPyImp.cpp @@ -474,6 +474,18 @@ PyObject* MatrixPy::transpose(PyObject * args) PY_CATCH; } +PyObject* MatrixPy::analyze(PyObject * args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + + PY_TRY { + std::string type = getMatrixPtr()->analyse(); + return PyString_FromString(type.c_str()); + } + PY_CATCH; +} + Py::Float MatrixPy::getA11(void) const { double val = (*this->getMatrixPtr())[0][0]; From 3259a16c298cb5a7b0bfb3ec4bfaad585133ec5a Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 13 Jun 2012 12:52:17 +0200 Subject: [PATCH 354/517] Improve grapgviz integration --- src/Gui/CommandDoc.cpp | 99 ++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index a83d5ea5e..ae1be98eb 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -25,6 +25,8 @@ #ifndef _PreComp_ # include # include +# include +# include # include # include # include @@ -319,6 +321,28 @@ bool StdCmdMergeProjects::isActive(void) // Std_ExportGraphviz //=========================================================================== +namespace Gui { +class ImageView : public MDIView +{ +public: + ImageView(const QPixmap& p, QWidget* parent=0) : MDIView(0, parent) + { + scene = new QGraphicsScene(); + scene->addPixmap(p); + view = new QGraphicsView(scene, this); + view->show(); + setCentralWidget(view); + } + ~ImageView() + { + delete scene; + delete view; + } + QGraphicsScene* scene; + QGraphicsView* view; +}; +} + DEF_STD_CMD_A(StdCmdExportGraphviz); StdCmdExportGraphviz::StdCmdExportGraphviz() @@ -336,48 +360,57 @@ StdCmdExportGraphviz::StdCmdExportGraphviz() void StdCmdExportGraphviz::activated(int iMsg) { App::Document* doc = App::GetApplication().getActiveDocument(); - Base::FileInfo fi(Base::FileInfo::getTempFileName()); - Base::ofstream str(fi); + std::stringstream str; doc->exportGraphviz(str); - str.close(); - Base::FileInfo out(Base::FileInfo::getTempFileName()); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Paths"); QProcess proc; - QEventLoop loop; - QObject::connect(&proc, SIGNAL(finished(int, QProcess::ExitStatus)), - &loop, SLOT(quit())); QStringList args; - args << QLatin1String("-Tpng") << QString::fromUtf8(fi.filePath().c_str()) - << QLatin1String("-o") << QString::fromUtf8(out.filePath().c_str()); - QString exe = QLatin1String("dot"); - QStringList env = QProcess::systemEnvironment(); - proc.setEnvironment(env); - proc.start(exe, args); - if (proc.state() == QProcess::Running) { - loop.exec(); - fi.deleteFile(); - } - else { - QMessageBox::warning(getMainWindow(), - qApp->translate("Std_ExportGraphviz","Graphviz not found"), - qApp->translate("Std_ExportGraphviz","Graphviz couldn't be found on your system")); - fi.deleteFile(); - return; + args << QLatin1String("-Tpng"); + QString path = QString::fromUtf8(hGrp->GetASCII("Graphviz").c_str()); + bool pathChanged = false; + QString exe = QString::fromAscii("\"%1/dot\"").arg(path); + proc.setEnvironment(QProcess::systemEnvironment()); + do { + proc.start(exe, args); + if (!proc.waitForStarted()) { + int ret = QMessageBox::warning(getMainWindow(), + qApp->translate("Std_ExportGraphviz","Graphviz not found"), + qApp->translate("Std_ExportGraphviz","Graphviz couldn't be found on your system.\n" + "Do you want to specify its installation path if it's already installed?"), + QMessageBox::Yes, QMessageBox::No); + if (ret == QMessageBox::No) + return; + path = QFileDialog::getExistingDirectory(Gui::getMainWindow(), + qApp->translate("Std_ExportGraphviz","Graphviz installation path")); + if (path.isEmpty()) + return; + pathChanged = true; + exe = QString::fromAscii("\"%1/dot\"").arg(path); + } + else { + if (pathChanged) + hGrp->SetASCII("Graphviz", (const char*)path.toUtf8()); + break; + } } + while(true); - if (out.exists()) { - QPixmap px(QString::fromUtf8(out.filePath().c_str()), "PNG"); - out.deleteFile(); - QLabel* label = new QLabel(0); - label->setAttribute(Qt::WA_DeleteOnClose); - label->setPixmap(px); - label->resize(px.size()); - label->show(); + proc.write(str.str().c_str(), str.str().size()); + proc.closeWriteChannel(); + if (!proc.waitForFinished()) + return; + + QPixmap px; + if (px.loadFromData(proc.readAll(), "PNG")) { + Gui::ImageView* view = new Gui::ImageView(px); + view->setWindowTitle(qApp->translate("Std_ExportGraphviz","Dependency graph")); + getMainWindow()->addWindow(view); } else { QMessageBox::warning(getMainWindow(), - qApp->translate("Std_ExportGraphviz","Graphviz failed"), - qApp->translate("Std_ExportGraphviz","Graphviz failed to create an image file")); + qApp->translate("Std_ExportGraphviz","Graphviz failed"), + qApp->translate("Std_ExportGraphviz","Graphviz failed to create an image file")); } } From de4e9a1d115fc2ca7dea3291d968cc724e38645e Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 13 Jun 2012 14:07:47 +0200 Subject: [PATCH 355/517] Support sample buffers --- src/Gui/CommandDoc.cpp | 2 ++ src/Gui/View3DInventor.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index ae1be98eb..c7ea796cb 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -26,6 +26,8 @@ # include # include # include +# include +# include # include # include # include diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index 8d354c937..e1f035a4a 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -32,6 +32,8 @@ # include # include # include +# include +# include # include # include # include @@ -299,6 +301,29 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M else if (strcmp(Reason,"UseAntialiasing") == 0) { _viewer->getGLRenderAction()->setSmoothing(rGrp.GetBool("UseAntialiasing",false)); } + else if (strcmp(Reason,"SampleBuffers") == 0) { +#if SOQT_MAJOR_VERSION > 1 || (SOQT_MAJOR_VERSION == 1 && SOQT_MINOR_VERSION >= 5) + _viewer->setSampleBuffers(rGrp.GetInt("SampleBuffers",4)); +#else + // http://stackoverflow.com/questions/4207506/where-is-gl-multisample-defined + //int sb = rGrp.GetInt("SampleBuffers",4); + //QGLWidget* gl = static_cast(_viewer->getGLWidget()); + //QGLFormat fmt = gl->format(); + //if (sb > 0) { + // fmt.setSampleBuffers(true); + // fmt.setSamples(sb); + // gl->setFormat(fmt); + // gl->makeCurrent(); + // //glEnable(GL_MULTISAMPLE); + //} + //else { + // fmt.setSampleBuffers(false); + // gl->setFormat(fmt); + // gl->makeCurrent(); + // //glDisable(GL_MULTISAMPLE); + //} +#endif + } else if (strcmp(Reason,"ShowFPS") == 0) { _viewer->setEnabledFPSCounter(rGrp.GetBool("ShowFPS",false)); } From b4aff85333b62ca6381b50cf3b3f828191ef16c0 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 13 Jun 2012 18:49:10 +0200 Subject: [PATCH 356/517] Fix critical warnings --- src/Base/BoundBoxPyImp.cpp | 2 +- src/Gui/CommandView.cpp | 5 +- src/Mod/Drawing/App/ProjectionAlgos.cpp | 14 +- src/Mod/Drawing/Gui/TaskOrthoViews.cpp | 31 +- src/Mod/Fem/App/FemMesh.cpp | 2 +- src/Mod/Import/Gui/AppImportGuiPy.cpp | 2 +- src/Mod/Mesh/App/Core/Algorithm.cpp | 27 +- src/Mod/Mesh/App/Core/Curvature.cpp | 2 +- src/Mod/Mesh/App/Core/MeshIO.cpp | 2 +- src/Mod/Mesh/App/Core/Trim.cpp | 2 +- src/Mod/Part/App/ImportIges.cpp | 2 +- src/Mod/Part/App/TopoShape.cpp | 4 +- src/Mod/Part/Gui/Command.cpp | 3 + src/Mod/Part/Gui/DlgPrimitives.cpp | 295 +++++++++--------- src/Mod/PartDesign/App/FeaturePocket.cpp | 2 +- src/Mod/PartDesign/Gui/TaskPadParameters.cpp | 2 +- .../PartDesign/Gui/TaskPocketParameters.cpp | 2 +- src/Mod/Sketcher/App/ConstraintPyImp.cpp | 2 +- src/Mod/Web/Gui/BrowserView.cpp | 2 +- 19 files changed, 204 insertions(+), 199 deletions(-) diff --git a/src/Base/BoundBoxPyImp.cpp b/src/Base/BoundBoxPyImp.cpp index 63dc76378..8a6d4e132 100644 --- a/src/Base/BoundBoxPyImp.cpp +++ b/src/Base/BoundBoxPyImp.cpp @@ -192,7 +192,6 @@ PyObject* BoundBoxPy::getIntersectionPoint(PyObject *args) *(static_cast(object2)->getVectorPtr()), point, epsilon); // IsInBox() doesn't handle border points correctly - BoundBoxPy::PointerType bb = getBoundBoxPtr(); if (ok) { return new VectorPy(point); } @@ -209,6 +208,7 @@ PyObject* BoundBoxPy::move(PyObject *args) { double x,y,z; PyObject *object; + Base::Vector3d vec; if (PyArg_ParseTuple(args, "ddd", &x,&y,&z)) { diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 33da94c7c..4399325dd 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -452,6 +452,7 @@ void StdCmdFreezeViews::languageChange() } } + //=========================================================================== // Std_ToggleClipPlane //=========================================================================== @@ -522,8 +523,8 @@ Gui::Action * StdCmdDrawStyle::createAction(void) pcAction->setDropDownMenu(true); applyCommandData(pcAction); - QAction* a0 = pcAction->addAction(QString()); - QAction* a1 = pcAction->addAction(QString()); + pcAction->addAction(QString()); + pcAction->addAction(QString()); _pcAction = pcAction; languageChange(); return pcAction; diff --git a/src/Mod/Drawing/App/ProjectionAlgos.cpp b/src/Mod/Drawing/App/ProjectionAlgos.cpp index a5f844619..b37c6cb48 100644 --- a/src/Mod/Drawing/App/ProjectionAlgos.cpp +++ b/src/Mod/Drawing/App/ProjectionAlgos.cpp @@ -263,7 +263,7 @@ std::string ProjectionAlgos::getDXF(SvgExtractionType type, float scale) << "ENTITIES" << endl; if (!H.IsNull() && (type & WithHidden)) { - float width = 0.15f/scale; + //float width = 0.15f/scale; BRepMesh::Mesh(H,0.1); result //<< "" << endl; } if (!HO.IsNull() && (type & WithHidden)) { - float width = 0.15f/scale; + //float width = 0.15f/scale; BRepMesh::Mesh(HO,0.1); result //<< "" << endl; } if (!VO.IsNull()) { - float width = 0.35f/scale; + //float width = 0.35f/scale; BRepMesh::Mesh(VO,0.1); result //<< "" << endl; } if (!V.IsNull()) { - float width = 0.35f/scale; - + //float width = 0.35f/scale; BRepMesh::Mesh(V,0.1); result //<< "" << endl; } if (!H1.IsNull() && (type & WithSmooth) && (type & WithHidden)) { - - float width = 0.15f/scale; + //float width = 0.15f/scale; BRepMesh::Mesh(H1,0.1); result //<< " #include #include -#include +#include #include #include @@ -301,7 +301,7 @@ TaskOrthoViews::TaskOrthoViews(QWidget *parent) App::Document* doc = App::GetApplication().getActiveDocument(); std::vector pages = doc->getObjectsOfType(Drawing::FeaturePage::getClassTypeId()); - std::string PageName = pages.front()->getNameInDocument(); + std::string PageName = pages.front()->getNameInDocument(); const char * page = PageName.c_str(); App::DocumentObject * this_page = doc->getObject(page); @@ -409,7 +409,7 @@ TaskOrthoViews::TaskOrthoViews(QWidget *parent) data[1] = &x_pos; data[2] = &y_pos; data[3] = &horiz; - data[4] = | + data[4] = | // Command::doCommand(Command::Doc,"#%d", map1[2][2][1]); @@ -636,24 +636,24 @@ void TaskOrthoViews::compute() void TaskOrthoViews::validate_cbs() { - for (int i=0; i < 5; i++) - for (int j=0; j < 5; j++) - if ((abs(i-2) + abs(j-2)) < 3) //if i,j combination corresponds to valid check box, then proceed with: + for (int i=0; i < 5; i++) { + for (int j=0; j < 5; j++) { + if ((abs(i-2) + abs(j-2)) < 3) { //if i,j combination corresponds to valid check box, then proceed with: if (view_count == 0) { c_boxes[i][j]->setEnabled(false); c_boxes[i][j]->setChecked(false); } - else if (!c_boxes[i][j]->isChecked()) //only questions boxes 'enableability' if it's not checked - if (view_count == 4) + else if (!c_boxes[i][j]->isChecked()) { //only questions boxes 'enableability' if it's not checked + if (view_count == 4) { c_boxes[i][j]->setEnabled(false); //if there are four checked boxes then all others are disabled - else - { - if ((abs(i-2) + abs(j-2)) == 1) //only true for boxes immediately up/down/left/right of centre + } + else { + if ((abs(i-2) + abs(j-2)) == 1) { //only true for boxes immediately up/down/left/right of centre c_boxes[i][j]->setEnabled(c_boxes[2][2]->isChecked()); //which are enabled if centre box is checked - else - { + } + else { int di = ((i-2) < 0) - ((i-2) > 0); //which direction is towards centre? int dj = ((j-2) < 0) - ((j-2) > 0); @@ -668,9 +668,12 @@ void TaskOrthoViews::validate_cbs() c_boxes[i][j]->setEnabled(false); } } + } + } + } + } } - void TaskOrthoViews::cb_toggled(bool toggle) { QString name = sender()->objectName().right(2); diff --git a/src/Mod/Fem/App/FemMesh.cpp b/src/Mod/Fem/App/FemMesh.cpp index 440b5cb01..a3c98e586 100644 --- a/src/Mod/Fem/App/FemMesh.cpp +++ b/src/Mod/Fem/App/FemMesh.cpp @@ -99,7 +99,7 @@ FemMesh &FemMesh::operator=(const FemMesh& mesh) void FemMesh::copyMeshData(const FemMesh& mesh) { - const SMDS_MeshInfo& info = mesh.myMesh->GetMeshDS()->GetMeshInfo(); + //const SMDS_MeshInfo& info = mesh.myMesh->GetMeshDS()->GetMeshInfo(); //int numPoly = info.NbPolygons(); //int numVolu = info.NbVolumes(); //int numTetr = info.NbTetras(); diff --git a/src/Mod/Import/Gui/AppImportGuiPy.cpp b/src/Mod/Import/Gui/AppImportGuiPy.cpp index 8edbcada5..d98a299d3 100644 --- a/src/Mod/Import/Gui/AppImportGuiPy.cpp +++ b/src/Mod/Import/Gui/AppImportGuiPy.cpp @@ -26,8 +26,8 @@ # define WNT // avoid conflict with GUID #endif #ifndef _PreComp_ -# include # include +# include # include # include # include diff --git a/src/Mod/Mesh/App/Core/Algorithm.cpp b/src/Mod/Mesh/App/Core/Algorithm.cpp index 281fba7f7..f72bba760 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.cpp +++ b/src/Mod/Mesh/App/Core/Algorithm.cpp @@ -641,8 +641,8 @@ bool MeshAlgorithm::FillupHole(const std::vector& boundary, bool ready = false; for (MeshFacetArray::_TConstIterator it = _rclMesh._aclFacetArray.begin(); it != _rclMesh._aclFacetArray.end(); ++it) { for (int i=0; i<3; i++) { - if ((it->_aulPoints[i] == refPoint0) && (it->_aulPoints[(i+1)%3] == refPoint1) || - (it->_aulPoints[i] == refPoint1) && (it->_aulPoints[(i+1)%3] == refPoint0)) { + if (((it->_aulPoints[i] == refPoint0) && (it->_aulPoints[(i+1)%3] == refPoint1)) || + ((it->_aulPoints[i] == refPoint1) && (it->_aulPoints[(i+1)%3] == refPoint0))) { rFace = *it; rTriangle = _rclMesh.GetFacet(*it); ready = true; @@ -1527,6 +1527,7 @@ bool MeshAlgorithm::ConnectLines (std::list_aulPoints[0]]; - const MeshPoint &p1 = rPoints[pF->_aulPoints[1]]; - const MeshPoint &p2 = rPoints[pF->_aulPoints[2]]; - float l2p01 = Base::DistanceP2(p0,p1); - float l2p12 = Base::DistanceP2(p1,p2); - float l2p20 = Base::DistanceP2(p2,p0); - - Base::Vector3f facenormal = _rclMesh.GetFacet(*pF).GetNormal(); - _norm[pF->_aulPoints[0]] += facenormal * (1.0f / (l2p01 * l2p20)); - _norm[pF->_aulPoints[1]] += facenormal * (1.0f / (l2p12 * l2p01)); - _norm[pF->_aulPoints[2]] += facenormal * (1.0f / (l2p20 * l2p12)); + const MeshPoint &p0 = rPoints[pF->_aulPoints[0]]; + const MeshPoint &p1 = rPoints[pF->_aulPoints[1]]; + const MeshPoint &p2 = rPoints[pF->_aulPoints[2]]; + float l2p01 = Base::DistanceP2(p0,p1); + float l2p12 = Base::DistanceP2(p1,p2); + float l2p20 = Base::DistanceP2(p2,p0); + + Base::Vector3f facenormal = _rclMesh.GetFacet(*pF).GetNormal(); + _norm[pF->_aulPoints[0]] += facenormal * (1.0f / (l2p01 * l2p20)); + _norm[pF->_aulPoints[1]] += facenormal * (1.0f / (l2p12 * l2p01)); + _norm[pF->_aulPoints[2]] += facenormal * (1.0f / (l2p20 * l2p12)); } for (std::vector::iterator it = _norm.begin(); it != _norm.end(); ++it) it->Normalize(); diff --git a/src/Mod/Mesh/App/Core/Curvature.cpp b/src/Mod/Mesh/App/Core/Curvature.cpp index d0371da4b..93a0234e4 100644 --- a/src/Mod/Mesh/App/Core/Curvature.cpp +++ b/src/Mod/Mesh/App/Core/Curvature.cpp @@ -151,7 +151,7 @@ private: // -------------------------------------------------------- FacetCurvature::FacetCurvature(const MeshKernel& kernel, const MeshRefPointToFacets& search, float r, unsigned long pt) - : myKernel(kernel), mySearch(search), myRadius(r), myMinPoints(pt) + : myKernel(kernel), mySearch(search), myMinPoints(pt), myRadius(r) { } diff --git a/src/Mod/Mesh/App/Core/MeshIO.cpp b/src/Mod/Mesh/App/Core/MeshIO.cpp index 4003e019c..7d7024771 100644 --- a/src/Mod/Mesh/App/Core/MeshIO.cpp +++ b/src/Mod/Mesh/App/Core/MeshIO.cpp @@ -544,7 +544,6 @@ bool MeshInput::LoadOFF (std::istream &rstrIn) if (!buf) return false; - bool readvertices=false; std::getline(rstrIn, line); boost::algorithm::to_lower(line); if (line.find("off") == std::string::npos) @@ -2315,6 +2314,7 @@ bool MeshVRML::Save (std::ostream &rstrOut, const std::vector &raclC MeshFacetIterator pFIter(_rclMesh); pFIter.Transform(this->_transform); i = 0, k = _rclMesh.CountFacets(); + for (pFIter.Init(); pFIter.More(); pFIter.Next()) { MeshFacet clFacet = pFIter.GetIndices(); rstrOut << " " diff --git a/src/Mod/Mesh/App/Core/Trim.cpp b/src/Mod/Mesh/App/Core/Trim.cpp index 7d94592a8..27a64c156 100644 --- a/src/Mod/Mesh/App/Core/Trim.cpp +++ b/src/Mod/Mesh/App/Core/Trim.cpp @@ -32,7 +32,7 @@ using namespace MeshCore; MeshTrimming::MeshTrimming(MeshKernel &rclM, const Base::ViewProjMethod* pclProj, const Base::Polygon2D& rclPoly) - : myMesh(rclM), myProj(pclProj), myPoly(rclPoly), myInner(true) + : myMesh(rclM), myInner(true), myProj(pclProj), myPoly(rclPoly) { } diff --git a/src/Mod/Part/App/ImportIges.cpp b/src/Mod/Part/App/ImportIges.cpp index 98cb5393f..e8030ee22 100644 --- a/src/Mod/Part/App/ImportIges.cpp +++ b/src/Mod/Part/App/ImportIges.cpp @@ -95,7 +95,7 @@ int Part::ImportIgesParts(App::Document *pcDoc, const char* FileName) // make model aReader.ClearShapes(); - Standard_Integer nbRootsForTransfer = aReader.NbRootsForTransfer(); + //Standard_Integer nbRootsForTransfer = aReader.NbRootsForTransfer(); aReader.TransferRoots(); pi->EndScope(); diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index 9bf487074..f40916e5b 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1403,7 +1403,7 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdeg { // http://opencascade.blogspot.com/2009/11/surface-modeling-part3.html Standard_Real theTol = tol; - Standard_Boolean theIsPolynomial = Standard_True; + //Standard_Boolean theIsPolynomial = Standard_True; Standard_Boolean myIsElem = Standard_True; GeomAbs_Shape theContinuity = GeomAbs_Shape(cont); Standard_Integer theMaxDegree = maxdegree; @@ -1445,7 +1445,7 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdeg mkSweep.Build (aSec, GeomFill_Location, theContinuity, theMaxDegree, theMaxSegment); if (mkSweep.IsDone()) { Handle_Geom_Surface mySurface = mkSweep.Surface(); - Standard_Real myError = mkSweep.ErrorOnSurface(); + //Standard_Real myError = mkSweep.ErrorOnSurface(); Standard_Real u1,u2,v1,v2; mySurface->Bounds(u1,u2,v1,v2); diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 60d199d9c..edd0c41e6 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -664,6 +664,7 @@ DEF_STD_CMD_A(CmdPartReverseShape); CmdPartReverseShape::CmdPartReverseShape() :Command("Part_ReverseShape") { + sAppModule = "Part"; sGroup = QT_TR_NOOP("Part"); sMenuText = QT_TR_NOOP("Reverse shapes"); @@ -1008,6 +1009,7 @@ CmdShapeInfo::CmdShapeInfo() void CmdShapeInfo::activated(int iMsg) { +#if 0 static const char * const part_pipette[]={ "32 32 17 1", "# c #000000", @@ -1062,6 +1064,7 @@ void CmdShapeInfo::activated(int iMsg) Gui::Document* doc = Gui::Application::Instance->activeDocument(); Gui::View3DInventor* view = static_cast(doc->getActiveView()); +#endif //if (view) { // Gui::View3DInventorViewer* viewer = view->getViewer(); // viewer->setEditing(true); diff --git a/src/Mod/Part/Gui/DlgPrimitives.cpp b/src/Mod/Part/Gui/DlgPrimitives.cpp index 3665dd196..3e4628646 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.cpp +++ b/src/Mod/Part/Gui/DlgPrimitives.cpp @@ -47,7 +47,7 @@ #include #include #include -#include +#include #include #include "DlgPrimitives.h" @@ -55,43 +55,43 @@ using namespace PartGui; namespace PartGui { - -const char* gce_ErrorStatusText(gce_ErrorType et) -{ - switch (et) - { - case gce_Done: - return "Construction was successful"; - case gce_ConfusedPoints: - return "Two points are coincident"; - case gce_NegativeRadius: - return "Radius value is negative"; - case gce_ColinearPoints: - return "Three points are collinear"; - case gce_IntersectionError: - return "Intersection cannot be computed"; - case gce_NullAxis: - return "Axis is undefined"; - case gce_NullAngle: - return "Angle value is invalid (usually null)"; - case gce_NullRadius: - return "Radius is null"; - case gce_InvertAxis: - return "Axis value is invalid"; - case gce_BadAngle: - return "Angle value is invalid"; - case gce_InvertRadius: - return "Radius value is incorrect (usually with respect to another radius)"; - case gce_NullFocusLength: - return "Focal distance is null"; - case gce_NullVector: - return "Vector is null"; - case gce_BadEquation: - return "Coefficients are incorrect (applies to the equation of a geometric object)"; - default: - return "Creation of geometry failed"; - } -} + +const char* gce_ErrorStatusText(gce_ErrorType et) +{ + switch (et) + { + case gce_Done: + return "Construction was successful"; + case gce_ConfusedPoints: + return "Two points are coincident"; + case gce_NegativeRadius: + return "Radius value is negative"; + case gce_ColinearPoints: + return "Three points are collinear"; + case gce_IntersectionError: + return "Intersection cannot be computed"; + case gce_NullAxis: + return "Axis is undefined"; + case gce_NullAngle: + return "Angle value is invalid (usually null)"; + case gce_NullRadius: + return "Radius is null"; + case gce_InvertAxis: + return "Axis value is invalid"; + case gce_BadAngle: + return "Angle value is invalid"; + case gce_InvertRadius: + return "Radius value is incorrect (usually with respect to another radius)"; + case gce_NullFocusLength: + return "Focal distance is null"; + case gce_NullVector: + return "Vector is null"; + case gce_BadEquation: + return "Coefficients are incorrect (applies to the equation of a geometric object)"; + default: + return "Creation of geometry failed"; + } +} void Picker::createPrimitive(QWidget* widget, const QString& descr, Gui::Document* doc) { @@ -113,17 +113,17 @@ void Picker::createPrimitive(QWidget* widget, const QString& descr, Gui::Documen QString Picker::toPlacement(const gp_Ax2& axis) const { - gp_Dir dir = axis.Direction(); - gp_Pnt pnt = gp_Pnt(0.0,0.0,0.0); - gp_Ax3 ax3(pnt, dir, axis.XDirection()); - - gp_Trsf Trf; - Trf.SetTransformation(ax3); - Trf.Invert(); - - gp_XYZ theAxis(0,0,1); - Standard_Real theAngle = 0.0; - Trf.GetRotation(theAxis,theAngle); + gp_Dir dir = axis.Direction(); + gp_Pnt pnt = gp_Pnt(0.0,0.0,0.0); + gp_Ax3 ax3(pnt, dir, axis.XDirection()); + + gp_Trsf Trf; + Trf.SetTransformation(ax3); + Trf.Invert(); + + gp_XYZ theAxis(0,0,1); + Standard_Real theAngle = 0.0; + Trf.GetRotation(theAxis,theAngle); Base::Rotation rot(Base::convertTo(theAxis), theAngle); gp_Pnt loc = axis.Location(); @@ -153,10 +153,10 @@ public: QString command(App::Document* doc) const { GC_MakeArcOfCircle arc(points[0], points[1], points[2]); - if (!arc.IsDone()) - throw Base::Exception(gce_ErrorStatusText(arc.Status())); - Handle_Geom_TrimmedCurve trim = arc.Value(); - Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(trim->BasisCurve()); + if (!arc.IsDone()) + throw Base::Exception(gce_ErrorStatusText(arc.Status())); + Handle_Geom_TrimmedCurve trim = arc.Value(); + Handle_Geom_Circle circle = Handle_Geom_Circle::DownCast(trim->BasisCurve()); QString name = QString::fromAscii(doc->getUniqueObjectName("Circle").c_str()); return QString::fromAscii( @@ -270,7 +270,6 @@ DlgPrimitives::~DlgPrimitives() void DlgPrimitives::pickCallback(void * ud, SoEventCallback * n) { const SoMouseButtonEvent * mbe = static_cast(n->getEvent()); - Gui::View3DInventorViewer* view = reinterpret_cast(n->getUserData()); // Mark all incoming mouse button events as handled, especially, to deactivate the selection node n->setHandled(); @@ -569,18 +568,18 @@ void DlgPrimitives::createPrimitive(const QString& placement) .arg(ui.comboBox1->currentText()), QString::fromLatin1(e.what())); } } - -// ---------------------------------------------- - -/* TRANSLATOR PartGui::Location */ - -Location::Location(QWidget* parent) -{ - ui.setupUi(this); -} - -Location::~Location() -{ + +// ---------------------------------------------- + +/* TRANSLATOR PartGui::Location */ + +Location::Location(QWidget* parent) +{ + ui.setupUi(this); +} + +Location::~Location() +{ // no need to delete child widgets, Qt does it all for us if (!this->activeView.isNull()) { Gui::View3DInventorViewer* viewer = static_cast @@ -589,7 +588,7 @@ Location::~Location() viewer->setRedirectToSceneGraph(false); viewer->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback,this); } -} +} void Location::on_viewPositionButton_clicked() { @@ -643,46 +642,46 @@ void Location::pickCallback(void * ud, SoEventCallback * n) QString Location::toPlacement() const { Base::Vector3f d = ui.loc->getDirection(); - gp_Dir dir = gp_Dir(d.x,d.y,d.z); - gp_Pnt pnt = gp_Pnt(0.0,0.0,0.0); - gp_Ax3 ax3; - - double cosNX = dir.Dot(gp::DX()); - double cosNY = dir.Dot(gp::DY()); - double cosNZ = dir.Dot(gp::DZ()); - std::vector cosXYZ; - cosXYZ.push_back(fabs(cosNX)); - cosXYZ.push_back(fabs(cosNY)); - cosXYZ.push_back(fabs(cosNZ)); - - int pos = std::max_element(cosXYZ.begin(), cosXYZ.end()) - cosXYZ.begin(); - - // +X/-X - if (pos == 0) { - if (cosNX > 0) - ax3 = gp_Ax3(pnt, dir, gp_Dir(0,1,0)); - else - ax3 = gp_Ax3(pnt, dir, gp_Dir(0,-1,0)); - } - // +Y/-Y - else if (pos == 1) { - if (cosNY > 0) - ax3 = gp_Ax3(pnt, dir, gp_Dir(0,0,1)); - else - ax3 = gp_Ax3(pnt, dir, gp_Dir(0,0,-1)); - } - // +Z/-Z - else { - ax3 = gp_Ax3(pnt, dir, gp_Dir(1,0,0)); - } - - gp_Trsf Trf; - Trf.SetTransformation(ax3); - Trf.Invert(); - - gp_XYZ theAxis(0,0,1); - Standard_Real theAngle = 0.0; - Trf.GetRotation(theAxis,theAngle); + gp_Dir dir = gp_Dir(d.x,d.y,d.z); + gp_Pnt pnt = gp_Pnt(0.0,0.0,0.0); + gp_Ax3 ax3; + + double cosNX = dir.Dot(gp::DX()); + double cosNY = dir.Dot(gp::DY()); + double cosNZ = dir.Dot(gp::DZ()); + std::vector cosXYZ; + cosXYZ.push_back(fabs(cosNX)); + cosXYZ.push_back(fabs(cosNY)); + cosXYZ.push_back(fabs(cosNZ)); + + int pos = std::max_element(cosXYZ.begin(), cosXYZ.end()) - cosXYZ.begin(); + + // +X/-X + if (pos == 0) { + if (cosNX > 0) + ax3 = gp_Ax3(pnt, dir, gp_Dir(0,1,0)); + else + ax3 = gp_Ax3(pnt, dir, gp_Dir(0,-1,0)); + } + // +Y/-Y + else if (pos == 1) { + if (cosNY > 0) + ax3 = gp_Ax3(pnt, dir, gp_Dir(0,0,1)); + else + ax3 = gp_Ax3(pnt, dir, gp_Dir(0,0,-1)); + } + // +Z/-Z + else { + ax3 = gp_Ax3(pnt, dir, gp_Dir(1,0,0)); + } + + gp_Trsf Trf; + Trf.SetTransformation(ax3); + Trf.Invert(); + + gp_XYZ theAxis(0,0,1); + Standard_Real theAngle = 0.0; + Trf.GetRotation(theAxis,theAngle); Base::Rotation rot(Base::convertTo(theAxis), theAngle); Base::Vector3f loc = ui.loc->getPosition(); @@ -696,52 +695,52 @@ QString Location::toPlacement() const .arg(rot[2],0,'f',2) .arg(rot[3],0,'f',2); } - -// ---------------------------------------------- - -/* TRANSLATOR PartGui::TaskPrimitives */ - -TaskPrimitives::TaskPrimitives() -{ - Gui::TaskView::TaskBox* taskbox; - widget = new DlgPrimitives(); - taskbox = new Gui::TaskView::TaskBox(QPixmap(), widget->windowTitle(),true, 0); - taskbox->groupLayout()->addWidget(widget); - Content.push_back(taskbox); - - location = new Location(); - taskbox = new Gui::TaskView::TaskBox(QPixmap(), location->windowTitle(),true, 0); - taskbox->groupLayout()->addWidget(location); - taskbox->hideGroupBox(); - Content.push_back(taskbox); -} - -TaskPrimitives::~TaskPrimitives() -{ - // automatically deleted in the sub-class -} - -QDialogButtonBox::StandardButtons TaskPrimitives::getStandardButtons() const -{ - return QDialogButtonBox::Close| - QDialogButtonBox::Ok; -} + +// ---------------------------------------------- + +/* TRANSLATOR PartGui::TaskPrimitives */ + +TaskPrimitives::TaskPrimitives() +{ + Gui::TaskView::TaskBox* taskbox; + widget = new DlgPrimitives(); + taskbox = new Gui::TaskView::TaskBox(QPixmap(), widget->windowTitle(),true, 0); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); + + location = new Location(); + taskbox = new Gui::TaskView::TaskBox(QPixmap(), location->windowTitle(),true, 0); + taskbox->groupLayout()->addWidget(location); + taskbox->hideGroupBox(); + Content.push_back(taskbox); +} + +TaskPrimitives::~TaskPrimitives() +{ + // automatically deleted in the sub-class +} + +QDialogButtonBox::StandardButtons TaskPrimitives::getStandardButtons() const +{ + return QDialogButtonBox::Close| + QDialogButtonBox::Ok; +} void TaskPrimitives::modifyStandardButtons(QDialogButtonBox* box) { QPushButton* btn = box->button(QDialogButtonBox::Ok); btn->setText(QApplication::translate("PartGui::DlgPrimitives", "&Create")); } - -bool TaskPrimitives::accept() -{ - widget->createPrimitive(location->toPlacement()); - return false; -} - -bool TaskPrimitives::reject() -{ - return true; -} + +bool TaskPrimitives::accept() +{ + widget->createPrimitive(location->toPlacement()); + return false; +} + +bool TaskPrimitives::reject() +{ + return true; +} #include "moc_DlgPrimitives.cpp" diff --git a/src/Mod/PartDesign/App/FeaturePocket.cpp b/src/Mod/PartDesign/App/FeaturePocket.cpp index a0ef1cdd4..beec62191 100644 --- a/src/Mod/PartDesign/App/FeaturePocket.cpp +++ b/src/Mod/PartDesign/App/FeaturePocket.cpp @@ -178,7 +178,7 @@ App::DocumentObjectExecReturn *Pocket::execute(void) it_near = it; upToFace = (std::string(Type.getValueAsString()) == "UpToLast" ? it_far->face : it_near->face); } else { - if (FaceName.getValue() == "") + if (FaceName.isEmpty()) return new App::DocumentObjectExecReturn("Cannot extrude up to face: No face selected"); // Get active object, this is the object that the user referenced when he clicked on the face! diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp index d7c37b7b3..c28e35f5a 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp @@ -92,7 +92,7 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,QWidget *parent) // According to bug #0000521 the reversed option // shouldn't be de-activated if the pad has a support face ui->checkBoxReversed->setChecked(reversed); - ui->lineFaceName->setText(upToFace == "" ? tr("No face selected") : tr(upToFace)); + ui->lineFaceName->setText(pcPad->FaceName.isEmpty() ? tr("No face selected") : tr(upToFace)); ui->changeMode->clear(); ui->changeMode->insertItem(0, tr("Dimension")); ui->changeMode->insertItem(1, tr("To last")); diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp index 2122bafd1..cfa9f7155 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp @@ -86,7 +86,7 @@ TaskPocketParameters::TaskPocketParameters(ViewProviderPocket *PocketView,QWidge ui->lineFaceName->setEnabled(false); } else if (index == 4) { // Only this option requires to select a face ui->doubleSpinBox->setEnabled(false); - ui->lineFaceName->setText(upToFace == "" ? tr("No face selected") : tr(upToFace)); + ui->lineFaceName->setText(pcPocket->FaceName.isEmpty() ? tr("No face selected") : tr(upToFace)); } else { // Neither value nor face required ui->doubleSpinBox->setEnabled(false); ui->lineFaceName->setEnabled(false); diff --git a/src/Mod/Sketcher/App/ConstraintPyImp.cpp b/src/Mod/Sketcher/App/ConstraintPyImp.cpp index 7dad2b759..3a9ee1782 100644 --- a/src/Mod/Sketcher/App/ConstraintPyImp.cpp +++ b/src/Mod/Sketcher/App/ConstraintPyImp.cpp @@ -51,7 +51,7 @@ int ConstraintPy::PyInit(PyObject* args, PyObject* /*kwd*/) int SecondIndex= Constraint::GeoUndef; int SecondPos = none; int ThirdIndex = Constraint::GeoUndef; - int ThirdPos = none; + //int ThirdPos = none; double Value = 0; // Note: In Python 2.x PyArg_ParseTuple prints a warning if a float is given but an integer is expected. // This means we must use a PyObject and check afterwards if it's a float or integer. diff --git a/src/Mod/Web/Gui/BrowserView.cpp b/src/Mod/Web/Gui/BrowserView.cpp index 7410edc1d..81c02dd8b 100644 --- a/src/Mod/Web/Gui/BrowserView.cpp +++ b/src/Mod/Web/Gui/BrowserView.cpp @@ -182,7 +182,7 @@ bool BrowserView::chckHostAllowed(const QString& host) void BrowserView::onDownloadRequested(const QNetworkRequest & request) { Dialog::DownloadDialog dlg (request.url(),this); - int result = dlg.exec(); + dlg.exec(); } void BrowserView::load(const char* URL) From 02bbb1f12d554ed9d424eb04a70c3ec95544a4c2 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 13 Jun 2012 19:39:37 +0200 Subject: [PATCH 357/517] Fix issue with non-starting executable --- src/Gui/CommandDoc.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index c7ea796cb..3d728e394 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -369,9 +369,17 @@ void StdCmdExportGraphviz::activated(int iMsg) QProcess proc; QStringList args; args << QLatin1String("-Tpng"); +#ifdef FC_OS_LINUX + QString path = QString::fromUtf8(hGrp->GetASCII("Graphviz", "/usr/bin").c_str()); +#else QString path = QString::fromUtf8(hGrp->GetASCII("Graphviz").c_str()); +#endif bool pathChanged = false; +#ifdef FC_OS_WIN32 QString exe = QString::fromAscii("\"%1/dot\"").arg(path); +#else + QString exe = QString::fromAscii("%1/dot").arg(path); +#endif proc.setEnvironment(QProcess::systemEnvironment()); do { proc.start(exe, args); @@ -388,7 +396,11 @@ void StdCmdExportGraphviz::activated(int iMsg) if (path.isEmpty()) return; pathChanged = true; +#ifdef FC_OS_WIN32 exe = QString::fromAscii("\"%1/dot\"").arg(path); +#else + exe = QString::fromAscii("%1/dot").arg(path); +#endif } else { if (pathChanged) From f6cf5227ed98979dda9abd7d8b0b80a5f6413d97 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Jun 2012 13:01:07 +0200 Subject: [PATCH 358/517] 0000749: PI was not declared in this scope - compile error --- src/Mod/Drawing/App/PreCompiled.h | 1 - src/Mod/Fem/App/AppFemPy.cpp | 17 +++++++++-------- src/Mod/Part/App/FeatureRevolution.cpp | 4 ++-- src/Mod/Part/App/PrimitiveFeature.cpp | 16 ++++++++-------- src/Mod/Part/App/TopoShape.cpp | 16 ++++++++++------ src/Mod/Part/Gui/DlgSettingsGeneral.ui | 2 +- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/Mod/Drawing/App/PreCompiled.h b/src/Mod/Drawing/App/PreCompiled.h index 2bffecf1d..bb3d325c9 100644 --- a/src/Mod/Drawing/App/PreCompiled.h +++ b/src/Mod/Drawing/App/PreCompiled.h @@ -104,7 +104,6 @@ #include #include #include -#include #include #include #include diff --git a/src/Mod/Fem/App/AppFemPy.cpp b/src/Mod/Fem/App/AppFemPy.cpp index 551e07eb6..838a5aeab 100644 --- a/src/Mod/Fem/App/AppFemPy.cpp +++ b/src/Mod/Fem/App/AppFemPy.cpp @@ -28,6 +28,7 @@ #endif #include +#include #include #include #include @@ -498,12 +499,12 @@ static PyObject * minBoundingBox(PyObject *self, PyObject *args) //Do a Monte Carlo approach and start from the Principal Axis System //and rotate +/- 60 around each axis in a first iteration - double angle_range_min_x=-PI/3.0,angle_range_max_x=PI/3.0, - angle_range_min_y=-PI/3.0,angle_range_max_y=PI/3.0, - angle_range_min_z=-PI/3.0,angle_range_max_z=PI/3.0; + double angle_range_min_x=-M_PI/3.0,angle_range_max_x=M_PI/3.0, + angle_range_min_y=-M_PI/3.0,angle_range_max_y=M_PI/3.0, + angle_range_min_z=-M_PI/3.0,angle_range_max_z=M_PI/3.0; //We rotate until we are 0.1 sure to be in the right position - for (step_size = (2.0*PI/it_steps);step_size>(2.0*PI/3600.0);step_size=(2.0*PI/it_steps)) + for (step_size = (2.0*M_PI/it_steps);step_size>(2.0*M_PI/3600.0);step_size=(2.0*M_PI/it_steps)) { for(alpha_x=angle_range_min_x;alpha_x(2.0*PI/360.0);step_size=(2.0*PI/it_steps)) + for (step_size = (2.0*M_PI/it_steps);step_size>(2.0*M_PI/360.0);step_size=(2.0*M_PI/it_steps)) { for(alpha_x=angle_range_min_x;alpha_x using namespace Part; @@ -72,7 +72,7 @@ App::DocumentObjectExecReturn *Revolution::execute(void) try { // Now, let's get the TopoDS_Shape TopoDS_Shape revolve = base->Shape.getShape().revolve(gp_Ax1(pnt, dir), - Angle.getValue()/180.0f*Standard_PI); + Angle.getValue()/180.0f*M_PI); if (revolve.IsNull()) return new App::DocumentObjectExecReturn("Resulting shape is null"); this->Shape.setValue(revolve); diff --git a/src/Mod/Part/App/PrimitiveFeature.cpp b/src/Mod/Part/App/PrimitiveFeature.cpp index 5673ddd42..c2e818a52 100644 --- a/src/Mod/Part/App/PrimitiveFeature.cpp +++ b/src/Mod/Part/App/PrimitiveFeature.cpp @@ -333,9 +333,9 @@ App::DocumentObjectExecReturn *Sphere::execute(void) return new App::DocumentObjectExecReturn("Radius of sphere too small"); try { BRepPrimAPI_MakeSphere mkSphere(Radius.getValue(), - Angle1.getValue()/180.0f*Standard_PI, - Angle2.getValue()/180.0f*Standard_PI, - Angle3.getValue()/180.0f*Standard_PI); + Angle1.getValue()/180.0f*M_PI, + Angle2.getValue()/180.0f*M_PI, + Angle3.getValue()/180.0f*M_PI); TopoDS_Shape ResultShape = mkSphere.Shape(); this->Shape.setValue(ResultShape); } @@ -391,9 +391,9 @@ App::DocumentObjectExecReturn *Ellipsoid::execute(void) gp_Ax2 ax2(pnt,dir); BRepPrimAPI_MakeSphere mkSphere(ax2, Radius2.getValue(), - Angle1.getValue()/180.0f*Standard_PI, - Angle2.getValue()/180.0f*Standard_PI, - Angle3.getValue()/180.0f*Standard_PI); + Angle1.getValue()/180.0f*M_PI, + Angle2.getValue()/180.0f*M_PI, + Angle3.getValue()/180.0f*M_PI); Standard_Real scale = Radius1.getValue()/Radius2.getValue(); gp_Dir xDir = ax2.XDirection(); gp_Dir yDir = ax2.YDirection(); @@ -450,7 +450,7 @@ App::DocumentObjectExecReturn *Cylinder::execute(void) try { BRepPrimAPI_MakeCylinder mkCylr(Radius.getValue(), Height.getValue(), - Angle.getValue()/180.0f*Standard_PI); + Angle.getValue()/180.0f*M_PI); TopoDS_Shape ResultShape = mkCylr.Shape(); this->Shape.setValue(ResultShape); } @@ -499,7 +499,7 @@ App::DocumentObjectExecReturn *Cone::execute(void) BRepPrimAPI_MakeCone mkCone(Radius1.getValue(), Radius2.getValue(), Height.getValue(), - Angle.getValue()/180.0f*Standard_PI); + Angle.getValue()/180.0f*M_PI); TopoDS_Shape ResultShape = mkCone.Shape(); this->Shape.setValue(ResultShape); } diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index f40916e5b..a42a3ec08 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1432,7 +1432,7 @@ TopoDS_Shape TopoShape::makeTube(double radius, double tol, int cont, int maxdeg //circular profile Handle(Geom_Circle) aCirc = new Geom_Circle (gp::XOY(), radius); - aCirc->Rotate (gp::OZ(), Standard_PI/2.); + aCirc->Rotate (gp::OZ(), M_PI/2.); //perpendicular section Handle(Law_Function) myEvol = ::CreateBsFunction (myPath->FirstParameter(), myPath->LastParameter(), radius); @@ -1540,18 +1540,18 @@ TopoDS_Shape TopoShape::makeHelix(Standard_Real pitch, Standard_Real height, } gp_Pnt2d aPnt(0, 0); - gp_Dir2d aDir(2. * PI, pitch); + gp_Dir2d aDir(2. * M_PI, pitch); if (leftHanded) { //aPnt.SetCoord(0.0, height); //aDir.SetCoord(2.0 * PI, -pitch); - aPnt.SetCoord(2. * PI, 0.0); - aDir.SetCoord(-2. * PI, pitch); + aPnt.SetCoord(2. * M_PI, 0.0); + aDir.SetCoord(-2. * M_PI, pitch); } gp_Ax2d aAx2d(aPnt, aDir); Handle(Geom2d_Line) line = new Geom2d_Line(aAx2d); gp_Pnt2d beg = line->Value(0); - gp_Pnt2d end = line->Value(sqrt(4.0*PI*PI+pitch*pitch)*(height/pitch)); + gp_Pnt2d end = line->Value(sqrt(4.0*M_PI*M_PI+pitch*pitch)*(height/pitch)); Handle(Geom2d_TrimmedCurve) segm = GCE2d_MakeSegment(beg , end); TopoDS_Edge edgeOnSurf = BRepBuilderAPI_MakeEdge(segm , surf); @@ -1944,7 +1944,11 @@ void TopoShape::getFaces(std::vector &aPoints, Standard_Real x3, y3, z3; Handle_StlMesh_Mesh aMesh = new StlMesh_Mesh(); - StlTransfer::BuildIncrementalMesh(this->_Shape, accuracy, aMesh); + StlTransfer::BuildIncrementalMesh(this->_Shape, accuracy, +#if OCC_VERSION_HEX >= 0x060503 + Standard_True, +#endif + aMesh); StlMesh_MeshExplorer xp(aMesh); for (Standard_Integer nbd=1;nbd<=aMesh->NbDomains();nbd++) { for (xp.InitTriangle (nbd); xp.MoreTriangle (); xp.NextTriangle ()) { diff --git a/src/Mod/Part/Gui/DlgSettingsGeneral.ui b/src/Mod/Part/Gui/DlgSettingsGeneral.ui index 4ea3f5222..535d0f1d3 100644 --- a/src/Mod/Part/Gui/DlgSettingsGeneral.ui +++ b/src/Mod/Part/Gui/DlgSettingsGeneral.ui @@ -71,7 +71,7 @@ - Boolean operation + Model refinement From 6c9f670dcb57866aac075ebd0e14bb9a310fa3e9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Jun 2012 13:42:40 +0200 Subject: [PATCH 359/517] 0000749: PI was not declared in this scope - compile error --- src/Mod/Import/Gui/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/Import/Gui/CMakeLists.txt b/src/Mod/Import/Gui/CMakeLists.txt index 7cd962a92..d5029eca8 100644 --- a/src/Mod/Import/Gui/CMakeLists.txt +++ b/src/Mod/Import/Gui/CMakeLists.txt @@ -22,6 +22,7 @@ link_directories(${OCC_LIBRARY_DIR}) set(ImportGui_LIBS FreeCADGui PartGui + TKCAF TKXCAF TKLCAF TKXDESTEP From a60cd565699a77de344919de898a2e033cf075c5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Jun 2012 14:03:46 +0200 Subject: [PATCH 360/517] Extend filter list for release script --- src/WindowsInstaller/BuildInstaller.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WindowsInstaller/BuildInstaller.bat b/src/WindowsInstaller/BuildInstaller.bat index d779137f6..f84c4de89 100644 --- a/src/WindowsInstaller/BuildInstaller.bat +++ b/src/WindowsInstaller/BuildInstaller.bat @@ -24,7 +24,7 @@ SET /P M=Reebuild and press enter rem making of the bin zip file -"c:\Program Files\7-Zip\7z.exe" a -t7z FreeCAD.7z "-xr!*.idb" "-xr!*.pdb" "-xr!*.ilk" "-xr!*.rule" "-xr!*.svn-base" "-xr!*.pyc" "-xr!*.stamp" "-xr!*.cmake" "-xr!*.svn*" "-xr!*.vcproj" "-xr!*.am" ..\..\bin ..\..\Mod ..\..\Doc ..\..\data +"c:\Program Files\7-Zip\7z.exe" a -t7z FreeCAD.7z "-xr!*.idb" "-xr!*.pdb" "-xr!*.ilk" "-xr!*.rule" "-xr!*.svn-base" "-xr!*.pyc" "-xr!*.stamp" "-xr!*.cmake" "-xr!*.svn*" "-xr!*.vcproj" "-xr!*.am" "-xr!CMakeFiles" "-xr!*.dir" ..\..\bin ..\..\Mod ..\..\Doc ..\..\data call CopyRelease.bat From 4fcc518eb807504476a975705b00a05d032ee7c1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Jun 2012 14:39:06 +0200 Subject: [PATCH 361/517] Use lsb_release to show used distribution --- src/Gui/Splashscreen.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index fbfaca519..7a40dc7be 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -26,6 +26,7 @@ # include # include # include +# include # include # include # include @@ -241,6 +242,18 @@ static QString getPlatform() #elif defined (Q_OS_MAC) return QString::fromAscii("Mac OS X"); #elif defined (Q_OS_LINUX) + QString exe(QLatin1String("lsb_release")); + QStringList args; + args << QLatin1String("-ds"); + QProcess proc; + proc.setEnvironment(QProcess::systemEnvironment()); + proc.start(exe, args); + if (proc.waitForStarted() && proc.waitForFinished()) { + QByteArray info = proc.readAll(); + info.replace('\n',""); + return QString::fromAscii((const char*)info); + } + return QString::fromAscii("Linux"); #elif defined (Q_OS_UNIX) return QString::fromAscii("UNIX"); @@ -326,6 +339,7 @@ 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 << "Version: " << major << "." << minor << "." << build << endl; it = config.find("BuildRevisionBranch"); if (it != config.end()) From f7b200c20499b3ea30fe0e60b338de5d9ccb4728 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Jun 2012 15:03:21 +0200 Subject: [PATCH 362/517] Copy version numbers of libraries in About dialog --- src/Gui/Splashscreen.cpp | 11 +++++++++++ src/Mod/Part/App/AppPart.cpp | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 7a40dc7be..d127e13bb 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -30,6 +30,9 @@ # include # include # include +# include +# include +# include #endif #include "Splashscreen.h" @@ -347,6 +350,14 @@ void AboutDialog::on_copyButton_clicked() it = config.find("BuildRevisionHash"); if (it != config.end()) str << "Hash: " << it->second.c_str() << endl; + // report also the version numbers of the most important libraries in FreeCAD + str << "Python version: " << PY_VERSION << endl; + str << "Qt version: " << QT_VERSION_STR << endl; + str << "Coin version: " << COIN_VERSION << endl; + str << "SoQt version: " << SOQT_VERSION << endl; + it = config.find("OCC_VERSION"); + if (it != config.end()) + str << "OCC version: " << it->second.c_str() << endl; QClipboard* cb = QApplication::clipboard(); cb->setText(data); diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 4980b0be1..4e521342c 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -13,6 +13,7 @@ #ifndef _PreComp_ # include # include +# include #endif #include @@ -86,6 +87,10 @@ PyDoc_STRVAR(module_part_doc, extern "C" { void PartExport initPart() { + std::stringstream str; + str << OCC_VERSION_MAJOR << "." << OCC_VERSION_MINOR << "." << OCC_VERSION_MAINTENANCE; + App::Application::Config()["OCC_VERSION"] = str.str(); + PyObject* partModule = Py_InitModule3("Part", Part_methods, module_part_doc); /* mod name, table ptr */ Base::Console().Log("Loading Part module... done\n"); From 1912ba66cc7ca381bfc1bd6cdd28bd094e099e05 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Jun 2012 15:04:52 +0200 Subject: [PATCH 363/517] Fix path to merge module in FreeCAD.wxs --- src/WindowsInstaller/FreeCAD.wxs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WindowsInstaller/FreeCAD.wxs b/src/WindowsInstaller/FreeCAD.wxs index a9c15ed40..ee21354a8 100644 --- a/src/WindowsInstaller/FreeCAD.wxs +++ b/src/WindowsInstaller/FreeCAD.wxs @@ -78,7 +78,7 @@ - + From c524a0268a6e8c1d64cce04c1d4fd420c8874d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 15 Jun 2012 09:05:20 +0200 Subject: [PATCH 364/517] New paradigm first hydrostatics approach --- src/Mod/Ship/shipHydrostatics/Plot.py | 1 + src/Mod/Ship/shipHydrostatics/TaskPanel.ui | 8 +- src/Mod/Ship/shipHydrostatics/Tools.py | 972 +++++---------------- 3 files changed, 216 insertions(+), 765 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Plot.py b/src/Mod/Ship/shipHydrostatics/Plot.py index 8d5338e10..0d3fdf93e 100644 --- a/src/Mod/Ship/shipHydrostatics/Plot.py +++ b/src/Mod/Ship/shipHydrostatics/Plot.py @@ -109,6 +109,7 @@ class Plot(object): Output.write(" #################################################################\n") # Print data for i in range(0,len(drafts)): + FreeCAD.Console.PrintMessage("%d / %d" % (i+1, len(drafts))) draft = drafts[i] point = Tools.Point(ship,draft,trim) string = "%f %f %f %f %f %f %f %f %f %f %f\n" % (point.disp, point.draft, point.wet, point.mom, point.xcb, point.farea, point.KBt, point.BMt, point.Cb, point.Cf, point.Cm) diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui index d4b4f0639..3c3d88a58 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui @@ -7,9 +7,15 @@ 0 0 260 - 256 + 260 + + + 0 + 260 + + Create new ship diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index e4a20c0e5..7c58f9a0b 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -140,19 +140,21 @@ def displacement(ship, draft, roll=0.0, trim=0.0, yaw=0.0): B = bbox.YMax - bbox.YMin p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) box = Part.makeBox(3.0*L, 3.0*B, -bbox.ZMin + 1.0, p) - # Compute common part with ship - try: - common = box.common(shape) - except: - return [0.0, Vector(), 0.0] - # Get data - vol = common.Volume + vol = 0.0 cog = Vector() - for s in common.Solids: - sCoG = s.CenterOfMass - cog.x = cog.x + sCoG.x*s.Volume - cog.y = cog.y + sCoG.y*s.Volume - cog.z = cog.z + sCoG.z*s.Volume + for solid in shape.Solids: + # Compute common part with ship + try: + common = box.common(solid) + except: + continue + # Get data + vol = vol + common.Volume + for s in common.Solids: + sCoG = s.CenterOfMass + cog.x = cog.x + sCoG.x*s.Volume + cog.y = cog.y + sCoG.y*s.Volume + cog.z = cog.z + sCoG.z*s.Volume cog.x = cog.x / vol cog.y = cog.y / vol cog.z = cog.z / vol @@ -173,330 +175,85 @@ def displacement(ship, draft, roll=0.0, trim=0.0, yaw=0.0): dens = 1.025 # [tons/m3], salt water return [dens*vol, B, vol/Vol] -def convertSection(section, x, z): - """ Transform linear points distribution of full section - into double list, where points are gropued by height, and - reachs z maximum height. - @param section Ship section. - @param x Ship section x coordinate. - @param z Maximum section height. - @return Converted section, None if no valid section (i.e.- All section are over z) - """ - # Convert into array with n elements (Number of points by sections) - # with m elements into them (Number of points with the same height, - # that is typical of multibody) - points = [] - nPoints = 0 - j = 0 - while j < len(section)-1: - points.append([section[j]]) - k = j+1 - last=False # In order to identify if last point has been append - while(k < len(section)): - if not Math.isAprox(section[j].z, section[k].z): - break - points[nPoints].append(section[k]) - last=True - k = k+1 - nPoints = nPoints + 1 - j = k - if not last: # Last point has not been added - points.append([section[len(section)-1]]) - # Count the number of valid points - n = 0 - for j in range(0,len(points)): - Z = points[j][0].z - if Z > z: - break - n = n+1 - # Discard invalid sections - if n == 0: - return None - # Truncate only valid points - l = points[0:n] - # Study if additional point is needed - if n < len(points): - # Get last sections - pts1 = points[n] - pts0 = points[n-1] - if len(pts1) == len(pts0): - # Simple interpolation between points - # \----\-----|--------| - # \ | | / - # \ \ | | - # \----|--|-----/ - pts = [] - for i in range(0,len(pts1)): - y0 = pts0[i].y - z0 = pts0[i].z - y1 = pts1[i].y - z1 = pts1[i].z - factor = (z - z0) / (z1 - z0) - y = y0 + factor*(y1 - y0) - pts.append(App.Base.Vector(x,y,z)) - l.append(pts) - if len(pts1) > len(pts0): - # pts0 has been multiplied - # \---|---| - # \ | | - # \ | | - # \|---| - # @todo Only katamaran are involved, multiple points multiplication must be study - pts = [] - for i in range(0,len(pts1)): - y0 = pts0[min(len(pts0)-1,i)].y - z0 = pts0[min(len(pts0)-1,i)].z - y1 = pts1[i].y - z1 = pts1[i].z - factor = (z - z0) / (z1 - z0) - y = y0 + factor*(y1 - y0) - pts.append(App.Base.Vector(x,y,z)) - l.append(pts) - # @todo Only katamaran are involved, multiple points creation/destruction must be study - return l - -def Displacement(ship, draft, trim): - """ Calculate ship displacement. - @param ship Selected ship instance - @param draft Draft. - @param trim Trim in degrees. - @return [areas,disp,xcb,Cb]: \n - areas : Area of each section \n - disp: Ship displacement \n - xcb: X bouyance center coordinate - Cb: Block coefficient - """ - angle = math.radians(trim) - sections = Instance.sections(ship) - xCoord = ship.xSection[:] - minX = None - maxX = None - maxY = 0.0 - areas = [] - vol = 0.0 - moment = 0.0 - if not sections: - return [[],0.0,0.0,0.0] - for i in range(0, len(sections)): - # Get the section - section = sections[i] - if len(section) < 2: # Empty section - areas.append(0.0) - continue - # Get the position of the section - x = xCoord[i] - # Get the maximum Z value - Z = draft - x*math.tan(angle) - # Format section - section = convertSection(section, x, Z) - if not section: - areas.append(0.0) - continue - maxX = x - if not minX: - minX = x - # Integrate area - area = 0.0 - for j in range(0, len(section)-1): - for k in range(0, min(len(section[j])-1, len(section[j+1])-1)): - # y11,z11 ------- y01,z01 - # | | - # | | - # | | - # y10,z10 ------- y00,z00 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = 0.5*((y00 - y10) + (y01 - y11)) - dz = 0.5*((z01 - z00) + (z11 - z10)) - area = area + dy*dz - maxY = max([maxY,y00,y10,y01,y11]) - if(len(section[j]) < len(section[j+1])): - # y01,z01 ------- y11,z11 - # | __/ - # | __/ - # | / - # y00,z00 - k = len(section[j])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = y01 - y11 - dz = z01 - z00 - area = area + 0.5*dy*dz - maxY = max([maxY,y00,y01,y11]) - elif(len(section[j]) > len(section[j+1])): - # y01,z01 - # | \__ - # | \__ - # | \ - # y00,z00 ------- y10,z10 - k = len(section[j+1])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - dy = y00 - y10 - dz = z01 - z00 - area = area + 0.5*dy*dz - maxY = max([maxY,y00,y10,y01]) - elif(len(section[j]) == 1): - # y1,z1 ------- - # | - # | - # | - # y0,z0 ------- - k = 0 - y0 = abs(section[j][k].y) - z0 = section[j][k].z - y1 = abs(section[j+1][k].y) - z1 = section[j+1][k].z - dy = 0.5 * (y0 + y1) - dz = z1 - z0 - area = area + dy*dz - maxY = max([maxY,y0,y1]) - areas.append(2.0*area) # 2x because only half ship is represented - # Add volume & moment if proceed - if i > 0: - dx = xCoord[i] - xCoord[i-1] - x = 0.5*(xCoord[i] + xCoord[i-1]) - area = 0.5*(areas[i] + areas[i-1]) - vol = vol + area*dx - moment = moment + area*dx*x - # Compute displacement and xcb - disp = vol / 1.025 # rho = 1.025 ton/m3 (salt water density) - xcb = 0.0 - cb = 0.0 - if vol > 0.0: - xcb = moment / vol - block = (maxX-minX)*2.0*maxY*draft - cb = vol / block - return [areas,disp,xcb,cb] - -def WettedArea(ship, draft, trim): +def wettedArea(ship, draft, trim): """ Calculate wetted ship area. @param ship Selected ship instance @param draft Draft. @param trim Trim in degrees. @return Wetted ship area. """ - angle = math.radians(trim) - sections = Instance.sections(ship) - xCoord = ship.xSection[:] - lines = [] + return 0.0 + faces = [] area = 0.0 - if not sections: - return 0.0 - for i in range(0, len(sections)): - # Get the section - section = sections[i] - if len(section) < 2: # Empty section - lines.append(0.0) + nObjects = 0 + # We will take a duplicate of ship shape in order to place it + shape = ship.Shape.copy() + shape.translate(Vector(0.0,0.0,-draft)) + shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,-1.0,0.0), trim) + # Now we need to know the x range of values + bbox = shape.BoundBox + xmin = bbox.XMin + xmax = bbox.XMax + # Create the box + L = xmax - xmin + B = bbox.YMax - bbox.YMin + p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) + box = Part.makeBox(3.0*L, 3.0*B, - bbox.ZMin + 1.0, p) + # Compute common part with ship + for s in shape.Solids: + # Get solids intersection + try: + common = box.common(s) + except: continue - # Get the position of the section - x = xCoord[i] - # Get the maximum Z value - Z = draft - x*math.tan(angle) - # Format section - section = convertSection(section, x, Z) - if not section: - lines.append(0.0) - continue - # Integrate line area - line = 0.0 - for j in range(0, len(section)-1): - for k in range(0, min(len(section[j])-1, len(section[j+1])-1)): - # y11,z11 ------- y01,z01 - # | | - # | | - # | | - # y10,z10 ------- y00,z00 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = y11 - y10 - dz = z11 - z10 - line = line + math.sqrt(dy*dy + dz*dz) - dy = y01 - y00 - dz = z01 - z00 - line = line + math.sqrt(dy*dy + dz*dz) - if(len(section[j]) < len(section[j+1])): - # y01,z01 ------- y11,z11 - # | __/ - # | __/ - # | / - # y00,z00 - k = len(section[j])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = y11 - y00 - dz = z11 - z00 - line = line + math.sqrt(dy*dy + dz*dz) - dy = y01 - y00 - dz = z01 - z00 - line = line + math.sqrt(dy*dy + dz*dz) - elif(len(section[j]) > len(section[j+1])): - # y01,z01 - # | \__ - # | \__ - # | \ - # y00,z00 ------- y10,z10 - k = len(section[j+1])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - dy = y01 - y00 - dz = z01 - z00 - line = line + math.sqrt(dy*dy + dz*dz) - dy = y01 - y10 - dz = z01 - z10 - line = line + math.sqrt(dy*dy + dz*dz) - elif(len(section[j]) == 1): - # y1,z1 ------- - # | - # | - # | - # y0,z0 ------- - k = 0 - y0 = abs(section[j][k].y) - z0 = section[j][k].z - y1 = abs(section[j+1][k].y) - z1 = section[j+1][k].z - dy = y1 - y0 - dz = z1 - z0 - line = line + math.sqrt(dy*dy + dz*dz) - lines.append(2.0*line) # 2x because only half ship is represented - # Add area if proceed - if i > 0: - dx = xCoord[i] - xCoord[i-1] - x = 0.5*(xCoord[i] + xCoord[i-1]) - line = 0.5*(lines[i] + lines[i-1]) - area = area + line*dx + if common.Volume == 0.0: + continue + # Recompute object adding it to the scene, when we have + # computed desired data we can remove it. + try: + Part.show(common) + except: + continue + nObjects = nObjects + 1 + # Divide by faces and discard free surface faces + faces = common.Faces + for f in faces: + fbox = f.BoundBox + # Orientation filter + if (fbox.ZMax-fbox.ZMin > 0.00001) and (abs(fbox.ZMax) > 0.00001): + continue + # Valid face, append it + faces.append(f) + # Study repeated faces, if a face is repeated, both of them must be + # discarded. + i = 0; + while(i < len(faces)): + j = i+1 + while(j < len(faces)): + f0 = faces[i] + f1 = faces[j] + # We will consider same face if share all their vertexes + nVertex = len(f0.Vertexes) + for v0 in f0.Vertexes: + for v1 in f1.Vertexes: + if Math.isSameVertex(v0,v1): + nVertex = nVertex - 1 + if nVertex <= 0: + del faces[j] + del faces[i] + i = i-1 + break + j = j+1 + i = i+1 + # Integrate areas + for f in faces: + area = area + f.Area + # Destroy generated objects + for i in range(0,nObjects): + App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) return area -def Moment(ship, draft, trim, disp, xcb): +def moment(ship, draft, trim, disp, xcb): """ Calculate triming 1cm ship moment. @param ship Selected ship instance @param draft Draft. @@ -508,9 +265,9 @@ def Moment(ship, draft, trim, disp, xcb): """ angle = math.degrees(math.atan2(0.01,0.5*ship.Length)) newTrim = trim + angle - data = Displacement(ship,draft,newTrim) + data = displacement(ship,draft,0.0,newTrim,0.0) mom0 = -disp*xcb - mom1 = -data[1]*data[2] + mom1 = -data[0]*data[1].x return mom1 - mom0 def FloatingArea(ship, draft, trim): @@ -520,458 +277,146 @@ def FloatingArea(ship, draft, trim): @param trim Trim in degrees. @return Ship floating area, and floating coefficient. """ - angle = math.radians(trim) - sections = Instance.sections(ship) - xCoord = ship.xSection[:] - lines = [] area = 0.0 - minX = None - maxX = None - maxY = 0.0 cf = 0.0 - if not sections: - return [0.0, 0.0] - for i in range(0, len(sections)): - # Get the section - section = sections[i] - if len(section) < 2: # Empty section - lines.append(0.0) + maxX = 0.0 + minX = 0.0 + maxY = 0.0 + minY = 0.0 + # We will take a duplicate of ship shape in order to place it + shape = ship.Shape.copy() + shape.translate(Vector(0.0,0.0,-draft)) + shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,-1.0,0.0), trim) + # Now we need to know the x range of values + bbox = shape.BoundBox + xmin = bbox.XMin + xmax = bbox.XMax + # Create the box + L = xmax - xmin + B = bbox.YMax - bbox.YMin + p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) + box = Part.makeBox(3.0*L, 3.0*B, - bbox.ZMin + 1.0, p) + # Compute common part with ship + for s in shape.Solids: + # Get solids intersection + try: + common = box.common(s) + except: continue - # Get the position of the section - x = xCoord[i] - # Get the maximum Z value - Z = draft - x*math.tan(angle) - # Format section - section = convertSection(section, x, Z) - if not section: - lines.append(0.0) - continue - maxX = x - if not minX: - minX = x - # Get floating line length - line = 0.0 - flag = True # Even lines compute for floating areas, odd no - j = len(section)-1 - k = len(section[j])-1 - while k>0: - k = k-1 - if flag: - y0 = abs(section[j][k-1].y) - y1 = abs(section[j][k].y) - line = line + (y1 - y0) - maxY = max([maxY,y1,y0]) - flag = not flag - if flag: # Central body computation lefts - y = abs(section[j][0].y) - line = line + y - maxY = max([maxY,y]) - lines.append(2.0*line) # 2x because only half ship is represented - # Add area if proceed - if i > 0: - dx = xCoord[i] - xCoord[i-1] - x = 0.5*(xCoord[i] + xCoord[i-1]) - line = 0.5*(lines[i] + lines[i-1]) - area = area + line*dx - if area: - cf = area / ( (maxX-minX) * 2.0*maxY ) + if common.Volume == 0.0: + continue + # Recompute object adding it to the scene, when we have + # computed desired data we can remove it. + try: + Part.show(common) + except: + continue + # Divide by faces and compute only section placed ones + faces = common.Faces + for f in faces: + faceBounds = f.BoundBox + # Orientation filter + if faceBounds.ZMax - faceBounds.ZMin > 0.00001: + continue + # Place filter + if abs(faceBounds.ZMax) > 0.00001: + continue + # Valid face, compute area + area = area + f.Area + maxX = max(maxX, faceBounds.XMax) + minX = max(minX, faceBounds.XMin) + maxY = max(maxY, faceBounds.YMax) + minY = max(minY, faceBounds.YMin) + # Destroy last object generated + App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) + dx = maxX - minX + dy = maxY - minY + if dx*dy > 0.0: + cf = area / (dx*dy) return [area, cf] -def KBT(ship, draft, trim, roll=0.0): - """ Calculate ship Keel to Bouyance center transversal distance. - @param ship Selected ship instance - @param draft Draft. - @param trim Trim in degrees. - @param roll Roll angle in degrees. - @return [KBTy, KBTz]: \n - KBTy : Transversal KB y coordinate \n - KBTz : Transversal KB z coordinate - """ - angle = math.radians(trim) - rAngle = math.radians(roll) - sections = Instance.sections(ship) - xCoord = ship.xSection[:] - areas = [] - vol = 0.0 - vMy = 0.0 - vMz = 0.0 - My = [] - Mz = [] - kb = [0.0,0.0] - if not sections: - return [[],0.0,0.0] - for i in range(0, len(sections)): - # ------------------------------------ - # Board - # ------------------------------------ - # Get the section - section = sections[i] - if len(section) < 2: # Empty section - areas.append(0.0) - continue - # Get the position of the section - x = xCoord[i] - # Get the maximum Z value - Z = draft - x*math.tan(angle) - # Format section - aux = convertSection(section, x, Z) - if not aux: - areas.append(0.0) - My.append(0.0) - Mz.append(0.0) - continue - # Correct by roll angle - pts = aux[len(aux)-1] - beam = pts[0].y - for i in range(1,len(pts)): - beam = max(beam, pts[i].y) - Z = Z - beam*math.tan(rAngle) - # Format section - section = convertSection(section, x, Z) - if not section: - areas.append(0.0) - My.append(0.0) - Mz.append(0.0) - continue - # Integrate area - area = 0.0 - momy = 0.0 - momz = 0.0 - for j in range(0, len(section)-1): - for k in range(0, min(len(section[j])-1, len(section[j+1])-1)): - # y11,z11 ------- y01,z01 - # | | - # | | - # | | - # y10,z10 ------- y00,z00 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = 0.5*((y00 - y10) + (y01 - y11)) - dz = 0.5*((z01 - z00) + (z11 - z10)) - y = 0.25*(y00 + y10 + y01 + y11) - z = 0.25*(z01 + z00 + z11 + z10) - area = area + dy*dz - momy = momy + y*dy*dz - momz = momz + z*dy*dz - if(len(section[j]) < len(section[j+1])): - # y01,z01 ------- y11,z11 - # | __/ - # | __/ - # | / - # y00,z00 - k = len(section[j])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = y01 - y11 - dz = z01 - z00 - y = 0.33*(y00 + y01 + y11) - z = 0.33*(z01 + z00 + z11) - area = area + 0.5*dy*dz - momy = momy + y*0.5*dy*dz - momz = momz + z*0.5*dy*dz - elif(len(section[j]) > len(section[j+1])): - # y01,z01 - # | \__ - # | \__ - # | \ - # y00,z00 ------- y10,z10 - k = len(section[j+1])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - dy = y00 - y10 - dz = z01 - z00 - y = 0.33*(y00 + y01 + y10) - z = 0.33*(z01 + z00 + z10) - area = area + 0.5*dy*dz - momy = momy + y*0.5*dy*dz - momz = momz + z*0.5*dy*dz - elif(len(section[j]) == 1): - # y1,z1 ------- - # | - # | - # | - # y0,z0 ------- - k = 0 - y0 = abs(section[j][k].y) - z0 = section[j][k].z - y1 = abs(section[j+1][k].y) - z1 = section[j+1][k].z - dy = 0.5 * (y0 + y1) - dz = z1 - z0 - y = 0.25*(y1 + y0) - z = 0.25*(z1 + z0) - area = area + dy*dz - momy = momy + y*dy*dz - momz = momz + z*dy*dz - # ------------------------------------ - # StarBoard - # ------------------------------------ - # Get the section - section = sections[i] - # Get the maximum Z value - Z = draft - x*math.tan(angle) - # Format section - aux = convertSection(section, x, Z) - if not aux: - areas.append(0.0) - My.append(0.0) - Mz.append(0.0) - continue - # Correct by roll angle - pts = aux[len(aux)-1] - beam = pts[0].y - for i in range(1,len(pts)): - beam = max(beam, pts[i].y) - Z = Z + beam*math.tan(rAngle) - # Format section - section = convertSection(section, x, Z) - if not section: - areas.append(0.0) - My.append(0.0) - Mz.append(0.0) - continue - # Integrate area - for j in range(0, len(section)-1): - for k in range(0, min(len(section[j])-1, len(section[j+1])-1)): - # y11,z11 ------- y01,z01 - # | | - # | | - # | | - # y10,z10 ------- y00,z00 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = 0.5*((y00 - y10) + (y01 - y11)) - dz = 0.5*((z01 - z00) + (z11 - z10)) - y = 0.25*(y00 + y10 + y01 + y11) - z = 0.25*(z01 + z00 + z11 + z10) - area = area + dy*dz - momy = momy - y*dy*dz - momz = momz + z*dy*dz - if(len(section[j]) < len(section[j+1])): - # y01,z01 ------- y11,z11 - # | __/ - # | __/ - # | / - # y00,z00 - k = len(section[j])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = y01 - y11 - dz = z01 - z00 - y = 0.33*(y00 + y01 + y11) - z = 0.33*(z01 + z00 + z11) - area = area + 0.5*dy*dz - momy = momy - y*0.5*dy*dz - momz = momz + z*0.5*dy*dz - elif(len(section[j]) > len(section[j+1])): - # y01,z01 - # | \__ - # | \__ - # | \ - # y00,z00 ------- y10,z10 - k = len(section[j+1])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - dy = y00 - y10 - dz = z01 - z00 - y = 0.33*(y00 + y01 + y10) - z = 0.33*(z01 + z00 + z10) - area = area + 0.5*dy*dz - momy = momy - y*0.5*dy*dz - momz = momz + z*0.5*dy*dz - elif(len(section[j]) == 1): - # y1,z1 ------- - # | - # | - # | - # y0,z0 ------- - k = 0 - y0 = abs(section[j][k].y) - z0 = section[j][k].z - y1 = abs(section[j+1][k].y) - z1 = section[j+1][k].z - dy = 0.5 * (y0 + y1) - dz = z1 - z0 - y = 0.25*(y1 + y0) - z = 0.25*(z1 + z0) - area = area + dy*dz - momy = momy - y*dy*dz - momz = momz + z*dy*dz - areas.append(area) - My.append(momy) - Mz.append(momz) - # Add volume & moment if proceed - if i > 0: - dx = xCoord[i] - xCoord[i-1] - x = 0.5*(xCoord[i] + xCoord[i-1]) - area = 0.5*(areas[i] + areas[i-1]) - momy = 0.5*(My[i] + My[i-1]) - momz = 0.5*(Mz[i] + Mz[i-1]) - vol = vol + area*dx - vMy = vMy + momy*dx - vMz = vMz + momz*dx - # Compute KBT - kb[0] = vMy / vol - kb[1] = vMz / vol - return kb - -def BMT(ship, draft, trim): +def BMT(ship, draft, trim=0.0): """ Calculate ship Bouyance center transversal distance. - @param ship Selected ship instance - @param draft Draft. - @param trim Trim in degrees. - @return BM Bouyance to metacenter height. + @param ship Ship instance. + @param draft Ship draft. + @param trim Ship trim angle. + @return BM Bouyance to metacenter height [m]. """ nRoll = 2 maxRoll = 7.0 - kb0 = KBT(ship,draft,trim) + B0 = displacement(ship,draft,0.0,trim,0.0)[1] BM = 0.0 for i in range(0,nRoll): roll = (maxRoll/nRoll)*(i+1) - kb = KBT(ship,draft,trim,roll) + B1 = displacement(ship,draft,roll,trim,0.0)[1] # * M # / \ # / \ BM ==|> BM = (BB/2) / tan(alpha/2) # / \ # *-------* # BB - BB = [kb[0] - kb0[0], kb[1] - kb0[1]] + BB = [B1.x - B0.x, B1.y - B0.y] BB = math.sqrt(BB[0]*BB[0] + BB[1]*BB[1]) BM = BM + 0.5*BB/math.tan(math.radians(0.5*roll)) / nRoll # nRoll is the weight function return BM -def MainFrameCoeff(ship, draft): +def mainFrameCoeff(ship, draft): """ Calculate main frame coefficient. @param ship Selected ship instance @param draft Draft. @return Main frame coefficient """ - sections = Instance.sections(ship) - xCoord = ship.xSection[:] cm = 0.0 - if not sections: - return 0.0 - # Look for nearest to main frame section - sectionID = 0 - X = xCoord[0] - for i in range(1, len(sections)): - # Get the position of the section - x = xCoord[i] - if abs(x) < abs(X): - sectionID = i - X = x - # Get the section - section = sections[sectionID] - if len(section) < 2: # Empty section - return 0.0 - x = X - # Get the maximum Z value - Z = draft - # Format section - section = convertSection(section, x, Z) - if not section: - return 0.0 - # Integrate area - area = 0.0 maxY = 0.0 - for j in range(0, len(section)-1): - for k in range(0, min(len(section[j])-1, len(section[j+1])-1)): - # y11,z11 ------- y01,z01 - # | | - # | | - # | | - # y10,z10 ------- y00,z00 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = 0.5*((y00 - y10) + (y01 - y11)) - dz = 0.5*((z01 - z00) + (z11 - z10)) - area = area + dy*dz - maxY = max([maxY,y00,y10,y01,y11]) - if(len(section[j]) < len(section[j+1])): - # y01,z01 ------- y11,z11 - # | __/ - # | __/ - # | / - # y00,z00 - k = len(section[j])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - y11 = abs(section[j+1][k+1].y) - z11 = section[j+1][k+1].z - dy = y01 - y11 - dz = z01 - z00 - area = area + 0.5*dy*dz - maxY = max([maxY,y00,y01,y11]) - elif(len(section[j]) > len(section[j+1])): - # y01,z01 - # | \__ - # | \__ - # | \ - # y00,z00 ------- y10,z10 - k = len(section[j+1])-1 - y00 = abs(section[j][k].y) - z00 = section[j][k].z - y10 = abs(section[j][k+1].y) - z10 = section[j][k+1].z - y01 = abs(section[j+1][k].y) - z01 = section[j+1][k].z - dy = y00 - y10 - dz = z01 - z00 - area = area + 0.5*dy*dz - maxY = max([maxY,y00,y10,y01]) - elif(len(section[j]) == 1): - # y1,z1 ------- - # | - # | - # | - # y0,z0 ------- - k = 0 - y0 = abs(section[j][k].y) - z0 = section[j][k].z - y1 = abs(section[j+1][k].y) - z1 = section[j+1][k].z - dy = 0.5 * (y0 + y1) - dz = z1 - z0 - area = area + dy*dz - maxY = max([maxY,y0,y1]) - if maxY*draft > 0.0: - cm = area / (maxY*draft) + minY = 0.0 + # We will take a duplicate of ship shape in order to place it + shape = ship.Shape.copy() + shape.translate(Vector(0.0,0.0,-draft)) + x = 0.0 + area = 0.0 + # Now we need to know the x range of values + bbox = shape.BoundBox + xmin = bbox.XMin + xmax = bbox.XMax + # Create the box + L = xmax - xmin + B = bbox.YMax - bbox.YMin + p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) + box = Part.makeBox(1.5*L + x, 3.0*B, - bbox.ZMin + 1.0, p) + # Compute common part with ship + for s in shape.Solids: + # Get solids intersection + try: + common = box.common(s) + except: + continue + if common.Volume == 0.0: + continue + # Recompute object adding it to the scene, when we have + # computed desired data we can remove it. + try: + Part.show(common) + except: + continue + # Divide by faces and compute only section placed ones + faces = common.Faces + for f in faces: + faceBounds = f.BoundBox + # Orientation filter + if faceBounds.XMax - faceBounds.XMin > 0.00001: + continue + # Place filter + if abs(faceBounds.XMax - x) > 0.00001: + continue + # Valid face, compute area + area = area + f.Area + maxY = max(maxY, faceBounds.YMax) + minY = max(minY, faceBounds.YMin) + # Destroy last object generated + App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) + dy = maxY - minY + if dy*draft > 0.0: + cm = area / (dy*draft) return cm class Point: @@ -998,23 +443,22 @@ class Point: @param trim Trim in degrees. """ # Hydrostatics computation - areasData = Displacement(ship,draft,trim) - wettedArea = WettedArea(ship,draft,trim) - moment = Moment(ship,draft,trim,areasData[1],areasData[2]) + dispData = displacement(ship,draft,0.0,trim,0.0) + wet = wettedArea(ship,draft,trim) + mom = moment(ship,draft,trim,dispData[0],dispData[1].x) farea = FloatingArea(ship,draft,trim) - kb = KBT(ship,draft,trim) bm = BMT(ship,draft,trim) - cm = MainFrameCoeff(ship,draft) + cm = mainFrameCoeff(ship,draft) # Store final data self.draft = draft self.trim = trim - self.disp = areasData[1] - self.xcb = areasData[2] - self.wet = wettedArea + self.disp = dispData[0] + self.xcb = dispData[1].x + self.wet = wet self.farea = farea[0] - self.mom = moment - self.KBt = kb[1] + self.mom = mom + self.KBt = dispData[1].y self.BMt = bm - self.Cb = areasData[3] - self.Cf = farea[1] - self.Cm = cm + self.Cb = dispData[2] + self.Cf = farea[1] + self.Cm = cm From 6c1158e2e923348368b1d32935f79421b8fac91d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 15 Jun 2012 11:35:30 +0200 Subject: [PATCH 365/517] External faces detection implemented that allows to compute wetted area. --- src/Mod/Ship/Instance.py | 33 +-------- src/Mod/Ship/TankInstance.py | 1 - src/Mod/Ship/shipHydrostatics/Plot.py | 98 +++++++++++++++++++++++++- src/Mod/Ship/shipHydrostatics/Tools.py | 66 ++++------------- 4 files changed, 109 insertions(+), 89 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 96045141d..27cb36056 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -22,6 +22,7 @@ #*************************************************************************** import time +from math import * # COIN from pivy.coin import * @@ -48,6 +49,7 @@ class Ship: obj.addProperty("App::PropertyLength","Draft","Ship", str(Translator.translate("Ship draft (T) [m]"))).Draft=0.0 # Add shapes obj.Shape = Part.makeCompound(solids) + obj.addProperty("Part::PropertyPartShape","ExternalFaces","Ship", str(Translator.translate("Ship only external faces"))) obj.Proxy = self def onChanged(self, fp, prop): @@ -64,37 +66,6 @@ class Ship: """ fp.Shape = Part.makeCompound(fp.Shape.Solids) - def lineFaceSection(self,line,surface): - """ Returns the point of section of a line with a face - @param line Line object, that can be a curve. - @param surface Surface object (must be a Part::Shape) - @return Section points array, [] if line don't cut surface - """ - # Get initial data - result = [] - vertexes = line.Vertexes - nVertex = len(vertexes) - # Perform the cut - section = line.cut(surface) - # Filter all old points - points = section.Vertexes - nPoint = len(points) - if nPoint <= nVertex: - # Any valid point - return result - for i in range(0,nPoint): - disp = len(result) - flag = 0 - if not Math.isAprox(points[i].X,vertexes[i-disp].X,0.0001): - flag = flag+1 - if not Math.isAprox(points[i].Y,vertexes[i-disp].Y,0.0001): - flag = flag+1 - if not Math.isAprox(points[i].Z,vertexes[i-disp].Z,0.0001): - flag = flag+1 - if flag > 0: - result.append(points[i]) - return result - class ViewProviderShip: def __init__(self, obj): "Set this object to the proxy object of the actual view provider" diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py index 6e44795f8..19288ffe8 100644 --- a/src/Mod/Ship/TankInstance.py +++ b/src/Mod/Ship/TankInstance.py @@ -52,7 +52,6 @@ class ShipTank: if not shape: obj.IsShipTank=False return - # obj.addProperty("Part::PropertyPartShape","Shape","ShipTank", str(Translator.translate("Tank solid"))).Shape = shape obj.Shape = shape obj.Proxy = self self.obj = obj diff --git a/src/Mod/Ship/shipHydrostatics/Plot.py b/src/Mod/Ship/shipHydrostatics/Plot.py index 0d3fdf93e..d953b5ddf 100644 --- a/src/Mod/Ship/shipHydrostatics/Plot.py +++ b/src/Mod/Ship/shipHydrostatics/Plot.py @@ -22,9 +22,10 @@ #*************************************************************************** import os +import math # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base +from FreeCAD import Part, Base, Vector from FreeCAD import Image, ImageGui # FreeCADShip modules from shipUtils import Paths, Translator @@ -107,11 +108,19 @@ class Plot(object): Output.write(" # 11: Cm (Main frame coefficient)\n") Output.write(" #\n") Output.write(" #################################################################\n") + # Get external faces + faces = self.externalFaces(ship.Shape) + if len(faces) == 0: + msg = Translator.translate("Can't detect external faces from ship object.\n") + FreeCAD.Console.PrintError(msg) + else: + faces = Part.makeShell(faces) # Print data + FreeCAD.Console.PrintMessage("Computing hydrostatics...\n") for i in range(0,len(drafts)): - FreeCAD.Console.PrintMessage("%d / %d" % (i+1, len(drafts))) + FreeCAD.Console.PrintMessage("\t%d / %d\n" % (i+1, len(drafts))) draft = drafts[i] - point = Tools.Point(ship,draft,trim) + point = Tools.Point(ship,faces,draft,trim) string = "%f %f %f %f %f %f %f %f %f %f %f\n" % (point.disp, point.draft, point.wet, point.mom, point.xcb, point.farea, point.KBt, point.BMt, point.Cb, point.Cf, point.Cm) Output.write(string) # Close file @@ -251,3 +260,86 @@ class Plot(object): FreeCAD.Console.PrintError(msg) return True return False + + def lineFaceSection(self,line,surface): + """ Returns the point of section of a line with a face + @param line Line object, that can be a curve. + @param surface Surface object (must be a Part::Shape) + @return Section points array, [] if line don't cut surface + """ + # Get initial data + result = [] + vertexes = line.Vertexes + nVertex = len(vertexes) + # Perform the cut + section = line.cut(surface) + # Filter all old points + points = section.Vertexes + return points + + def externalFaces(self, shape): + """ Returns detected external faces. + @param shape Shape where external faces wanted. + @return List of external faces detected. + """ + result = [] + faces = shape.Faces + bbox = shape.BoundBox + L = bbox.XMax - bbox.XMin + B = bbox.YMax - bbox.YMin + T = bbox.ZMax - bbox.ZMin + dist = math.sqrt(L*L + B*B + T*T) + FreeCAD.Console.PrintMessage("Computing external faces...\n") + # Valid/unvalid faces detection loop + for i in range(0,len(faces)): + FreeCAD.Console.PrintMessage("\t%d / %d\n" % (i+1, len(faces))) + f = faces[i] + # Create a line normal to surface at middle point + u = 0.0 + v = 0.0 + try: + surf = f.Surface + u = 0.5*(surf.getUKnots()[0]+surf.getUKnots()[-1]) + v = 0.5*(surf.getVKnots()[0]+surf.getVKnots()[-1]) + except: + cog = f.CenterOfMass + [u,v] = f.Surface.parameter(cog) + p0 = f.valueAt(u,v) + try: + n = f.normalAt(u,v).normalize() + except: + continue + p1 = p0 + n.multiply(1.5*dist) + line = Part.makeLine(p0, p1) + # Look for faces in front of this + nPoints = 0 + for j in range(0,len(faces)): + f2 = faces[j] + section = self.lineFaceSection(line, f2) + if len(section) <= 2: + continue + # Add points discarding start and end + nPoints = nPoints + len(section) - 2 + # In order to avoid special directions we can modify line + # normal a little bit. + angle = 5 + line.rotate(p0,Vector(1,0,0),angle) + line.rotate(p0,Vector(0,1,0),angle) + line.rotate(p0,Vector(0,0,1),angle) + nPoints2 = 0 + for j in range(0,len(faces)): + if i == j: + continue + f2 = faces[j] + section = self.lineFaceSection(line, f2) + if len(section) <= 2: + continue + # Add points discarding start and end + nPoints2 = nPoints + len(section) - 2 + # If the number of intersection points is pair, is a + # external face. So if we found an odd points intersection, + # face must be discarded. + if (nPoints % 2) or (nPoints2 % 2): + continue + result.append(f) + return result diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 7c58f9a0b..591df4603 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -175,19 +175,17 @@ def displacement(ship, draft, roll=0.0, trim=0.0, yaw=0.0): dens = 1.025 # [tons/m3], salt water return [dens*vol, B, vol/Vol] -def wettedArea(ship, draft, trim): +def wettedArea(shape, draft, trim): """ Calculate wetted ship area. - @param ship Selected ship instance + @param shape Ship external faces instance. @param draft Draft. @param trim Trim in degrees. @return Wetted ship area. """ - return 0.0 - faces = [] area = 0.0 nObjects = 0 # We will take a duplicate of ship shape in order to place it - shape = ship.Shape.copy() + shape = shape.copy() shape.translate(Vector(0.0,0.0,-draft)) shape.rotate(Vector(0.0,0.0,0.0), Vector(0.0,-1.0,0.0), trim) # Now we need to know the x range of values @@ -200,57 +198,13 @@ def wettedArea(ship, draft, trim): p = Vector(-1.5*L, -1.5*B, bbox.ZMin - 1.0) box = Part.makeBox(3.0*L, 3.0*B, - bbox.ZMin + 1.0, p) # Compute common part with ship - for s in shape.Solids: + for f in shape.Faces: # Get solids intersection try: - common = box.common(s) + common = box.common(f) except: continue - if common.Volume == 0.0: - continue - # Recompute object adding it to the scene, when we have - # computed desired data we can remove it. - try: - Part.show(common) - except: - continue - nObjects = nObjects + 1 - # Divide by faces and discard free surface faces - faces = common.Faces - for f in faces: - fbox = f.BoundBox - # Orientation filter - if (fbox.ZMax-fbox.ZMin > 0.00001) and (abs(fbox.ZMax) > 0.00001): - continue - # Valid face, append it - faces.append(f) - # Study repeated faces, if a face is repeated, both of them must be - # discarded. - i = 0; - while(i < len(faces)): - j = i+1 - while(j < len(faces)): - f0 = faces[i] - f1 = faces[j] - # We will consider same face if share all their vertexes - nVertex = len(f0.Vertexes) - for v0 in f0.Vertexes: - for v1 in f1.Vertexes: - if Math.isSameVertex(v0,v1): - nVertex = nVertex - 1 - if nVertex <= 0: - del faces[j] - del faces[i] - i = i-1 - break - j = j+1 - i = i+1 - # Integrate areas - for f in faces: - area = area + f.Area - # Destroy generated objects - for i in range(0,nObjects): - App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) + area = area + common.Area return area def moment(ship, draft, trim, disp, xcb): @@ -435,16 +389,20 @@ class Point: Cm Main frame coefficient. @note Moment is positive when produce positive trim. """ - def __init__(self, ship, draft, trim): + def __init__(self, ship, faces, draft, trim): """ Use all hydrostatics tools to define a hydrostatics point. @param ship Selected ship instance + @param faces Ship external faces @param draft Draft. @param trim Trim in degrees. """ # Hydrostatics computation dispData = displacement(ship,draft,0.0,trim,0.0) - wet = wettedArea(ship,draft,trim) + if not faces: + wet = 0.0 + else: + wet = wettedArea(faces,draft,trim) mom = moment(ship,draft,trim,dispData[0],dispData[1].x) farea = FloatingArea(ship,draft,trim) bm = BMT(ship,draft,trim) From d453ff4d1f2133ae6c5e6122b3039a99fc74e42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 15 Jun 2012 11:59:08 +0200 Subject: [PATCH 366/517] Moved ship weights intialization to the new paradigm. --- src/Mod/Ship/Instance.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index 27cb36056..ca601ddaa 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -570,15 +570,15 @@ def weights(obj): except ValueError: # Compute mass aproximation from shipHydrostatics import Tools - disp = Tools.Displacement(obj,obj.Draft,0.0) - obj.addProperty("App::PropertyFloatList","WeightMass","Ship", str(Translator.translate("Ship Weights masses"))).WeightMass=[1000.0 * disp[1]] + disp = Tools.displacement(obj,obj.Draft) + obj.addProperty("App::PropertyFloatList","WeightMass","Ship", str(Translator.translate("Ship Weights masses"))).WeightMass=[1000.0 * disp[0]] try: props.index("WeightPos") except ValueError: # Compute mass aproximation from shipHydrostatics import Tools - disp = Tools.Displacement(obj,obj.Draft,0.0) - obj.addProperty("App::PropertyVectorList","WeightPos","Ship", str(Translator.translate("Ship Weights centers of gravity"))).WeightPos=[Vector(disp[2],0.0,obj.Draft)] + disp = Tools.displacement(obj,obj.Draft) + obj.addProperty("App::PropertyVectorList","WeightPos","Ship", str(Translator.translate("Ship Weights centers of gravity"))).WeightPos=[Vector(disp[1].x,0.0,obj.Draft)] # Setup list weights = [] for i in range(0,len(obj.WeightNames)): From 21add8911d082d9b3044507cff4e0c240f243461 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 15 Jun 2012 13:04:07 +0200 Subject: [PATCH 367/517] First draft of makeThread --- src/Mod/Part/App/AppPartPy.cpp | 21 ++++++++++++ src/Mod/Part/App/TopoShape.cpp | 63 ++++++++++++++++++++++++++++++++++ src/Mod/Part/App/TopoShape.h | 2 ++ src/Mod/Part/MakeBottle.py | 8 +++-- 4 files changed, 92 insertions(+), 2 deletions(-) diff --git a/src/Mod/Part/App/AppPartPy.cpp b/src/Mod/Part/App/AppPartPy.cpp index 2132042df..342c59069 100644 --- a/src/Mod/Part/App/AppPartPy.cpp +++ b/src/Mod/Part/App/AppPartPy.cpp @@ -785,6 +785,24 @@ static PyObject * makeHelix(PyObject *self, PyObject *args) } } +static PyObject * makeThread(PyObject *self, PyObject *args) +{ + double pitch, height, depth, radius; + if (!PyArg_ParseTuple(args, "dddd", &pitch, &height, &depth, &radius)) + return 0; + + try { + TopoShape helix; + TopoDS_Shape wire = helix.makeThread(pitch, height, depth, radius); + return new TopoShapeWirePy(new TopoShape(wire)); + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; + } +} + static PyObject * makeLine(PyObject *self, PyObject *args) { PyObject *obj1, *obj2; @@ -1475,6 +1493,9 @@ struct PyMethodDef Part_methods[] = { "By default a cylindrical surface is used to create the helix. If the fourth parameter is set\n" "(the apex given in degree) a conical surface is used instead"}, + {"makeThread" ,makeThread,METH_VARARGS, + "makeThread(pitch,depth,height,radius) -- Make a thread with a given pitch, depth, height and radius"}, + {"makeRevolution" ,makeRevolution,METH_VARARGS, "makeRevolution(Curve,[vmin,vmax,angle,pnt,dir]) -- Make a revolved shape\n" "by rotating the curve or a portion of it around an axis given by (pnt,dir).\n" diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index a42a3ec08..8ebac8242 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -105,6 +105,7 @@ # include # include # include +# include # include # include # include @@ -1560,6 +1561,68 @@ TopoDS_Shape TopoShape::makeHelix(Standard_Real pitch, Standard_Real height, return wire; } +TopoDS_Shape TopoShape::makeThread(Standard_Real pitch, + Standard_Real depth, + Standard_Real height, + Standard_Real radius) const +{ + if (pitch < Precision::Confusion()) + Standard_Failure::Raise("Pitch of thread too small"); + + if (depth < Precision::Confusion()) + Standard_Failure::Raise("Depth of thread too small"); + + if (height < Precision::Confusion()) + Standard_Failure::Raise("Height of thread too small"); + + if (radius < Precision::Confusion()) + Standard_Failure::Raise("Radius of thread too small"); + + //Threading : Create Surfaces + gp_Ax2 cylAx2(gp_Pnt(0.0,0.0,0.0) , gp::DZ()); + Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(cylAx2 , radius); + Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(cylAx2 , radius+depth); + + //Threading : Define 2D Curves + gp_Pnt2d aPnt(2. * M_PI , height / 2.); + gp_Dir2d aDir(2. * M_PI , height / 4.); + gp_Ax2d aAx2d(aPnt , aDir); + + Standard_Real aMajor = 2. * M_PI; + Standard_Real aMinor = pitch; + + Handle(Geom2d_Ellipse) anEllipse1 = new Geom2d_Ellipse(aAx2d , aMajor , aMinor); + Handle(Geom2d_Ellipse) anEllipse2 = new Geom2d_Ellipse(aAx2d , aMajor , aMinor / 4); + + Handle(Geom2d_TrimmedCurve) aArc1 = new Geom2d_TrimmedCurve(anEllipse1 , 0 , M_PI); + Handle(Geom2d_TrimmedCurve) aArc2 = new Geom2d_TrimmedCurve(anEllipse2 , 0 , M_PI); + + gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0); + gp_Pnt2d anEllipsePnt2 = anEllipse1->Value(M_PI); + + Handle(Geom2d_TrimmedCurve) aSegment = GCE2d_MakeSegment(anEllipsePnt1 , anEllipsePnt2); + + //Threading : Build Edges and Wires + TopoDS_Edge aEdge1OnSurf1 = BRepBuilderAPI_MakeEdge(aArc1 , aCyl1); + TopoDS_Edge aEdge2OnSurf1 = BRepBuilderAPI_MakeEdge(aSegment , aCyl1); + TopoDS_Edge aEdge1OnSurf2 = BRepBuilderAPI_MakeEdge(aArc2 , aCyl2); + TopoDS_Edge aEdge2OnSurf2 = BRepBuilderAPI_MakeEdge(aSegment , aCyl2); + + TopoDS_Wire threadingWire1 = BRepBuilderAPI_MakeWire(aEdge1OnSurf1 , aEdge2OnSurf1); + TopoDS_Wire threadingWire2 = BRepBuilderAPI_MakeWire(aEdge1OnSurf2 , aEdge2OnSurf2); + + BRepLib::BuildCurves3d(threadingWire1); + BRepLib::BuildCurves3d(threadingWire2); + + BRepOffsetAPI_ThruSections aTool(Standard_True); + + aTool.AddWire(threadingWire1); + aTool.AddWire(threadingWire2); + aTool.CheckCompatibility(Standard_False); + + return aTool.Shape(); +} + TopoDS_Shape TopoShape::makeLoft(const TopTools_ListOfShape& profiles, Standard_Boolean isSolid, Standard_Boolean isRuled) const diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index 1d16b9e07..aaf521e05 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -163,6 +163,8 @@ public: TopoDS_Shape makeTube(double radius, double tol, int cont, int maxdeg, int maxsegm) const; TopoDS_Shape makeHelix(Standard_Real pitch, Standard_Real height, Standard_Real radius, Standard_Real angle=0, Standard_Boolean left=Standard_False) const; + TopoDS_Shape makeThread(Standard_Real pitch, Standard_Real depth, + Standard_Real height, Standard_Real radius) const; TopoDS_Shape makeLoft(const TopTools_ListOfShape& profiles, Standard_Boolean isSolid, Standard_Boolean isRuled) const; TopoDS_Shape makeOffset(double offset, double tol, diff --git a/src/Mod/Part/MakeBottle.py b/src/Mod/Part/MakeBottle.py index 65fb20971..1f4c2babf 100644 --- a/src/Mod/Part/MakeBottle.py +++ b/src/Mod/Part/MakeBottle.py @@ -47,7 +47,8 @@ def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0): aTrsf=Base.Matrix() aTrsf.rotateZ(math.pi) # rotate around the z-axis - aMirroredWire=aWire.transformGeometry(aTrsf) + aMirroredWire=aWire.copy() + aMirroredWire.transformShape(aTrsf) myWireProfile=Part.Wire([aWire,aMirroredWire]) myFaceProfile=Part.Face(myWireProfile) @@ -80,8 +81,11 @@ def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0): # This doesn't work for any reason myBody = myBody.makeThickness([faceToRemove],-myThickness/50 , 1.e-3) + myThreading = Part.makeThread(myNeckHeight/10, myNeckRadius*0.06, myHeight/10, myNeckRadius*0.99) + myThreading.translate(Base.Vector(0,0,myHeight)) + myCompound = Part.Compound([myBody, myThreading]) - return myBody + return myCompound def makeBoreHole(): # create a document if needed From 812c731421a3fd91961eef2b72289fd4b561b1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 15 Jun 2012 13:32:13 +0200 Subject: [PATCH 368/517] Deleted object storage at class (PropertyPythonObject::fromString warning) --- src/Mod/Ship/TankInstance.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py index 19288ffe8..e35b7f520 100644 --- a/src/Mod/Ship/TankInstance.py +++ b/src/Mod/Ship/TankInstance.py @@ -54,7 +54,6 @@ class ShipTank: return obj.Shape = shape obj.Proxy = self - self.obj = obj def onChanged(self, fp, prop): """ Property changed, tank must be recomputed """ From 8ab57d85a02aa4c5350021b4f83e85d9362d409d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 15 Jun 2012 13:40:08 +0200 Subject: [PATCH 369/517] Moved GZ tool to the new paradigm. --- src/Mod/Ship/tankGZ/TaskPanel.py | 33 ++++++++++++++++---------------- src/Mod/Ship/tankGZ/TaskPanel.ui | 2 +- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 5fefccafb..07b84abc9 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -54,7 +54,10 @@ class TaskPanel: dRoll = (roll1 - roll0) / (nRoll - 1) roll = [] GZ = [] + msg = Translator.translate("Computing GZ...\n") + App.Console.PrintMessage(msg) for i in range(0, nRoll): + App.Console.PrintMessage("\t%d/%d\n" % (i+1,nRoll)) roll.append(i*dRoll) GZ.append(self.computeGZ(draft[0], trim, roll[-1])) Plot(roll, GZ, disp[0]/1000.0, draft[0], trim) @@ -194,7 +197,7 @@ class TaskPanel: self.form.findChild(QtGui.QGroupBox, "AnglesGroup").setTitle(Translator.translate("Roll angles.")) self.form.findChild(QtGui.QLabel, "TrimLabel").setText(Translator.translate("Trim") + " [deg]") self.form.findChild(QtGui.QLabel, "StartAngleLabel").setText(Translator.translate("Start") + " [deg]") - self.form.findChild(QtGui.QLabel, "EndAngleLabel").setText(Translator.translate("Start") + " [deg]") + self.form.findChild(QtGui.QLabel, "EndAngleLabel").setText(Translator.translate("End") + " [deg]") self.form.findChild(QtGui.QLabel, "NAngleLabel").setText(Translator.translate("Number of points")) def onTanksSelection(self): @@ -224,10 +227,8 @@ class TaskPanel: disp = disp[0] # Get bouyancy center draft = self.computeDraft(disp) - xcb = draft[1] + B = [draft[1].x, draft[1].y, draft[1].z] draft = draft[0] - KBT = Hydrostatics.KBT(self.ship, draft, trim) - B = [xcb, KBT[0], KBT[1]] # Get stability initial condition BG = [G[0]-B[0], G[1]-B[1], G[2]-B[2]] x = BG[0]*math.cos(math.radians(trim)) - BG[2]*math.sin(math.radians(trim)) @@ -246,10 +247,8 @@ class TaskPanel: disp = disp[0] # Get bouyancy center draft = self.computeDraft(disp, trim) - xcb = draft[1] + B = [draft[1].x, draft[1].y, draft[1].z] draft = draft[0] - KBT = Hydrostatics.KBT(self.ship, draft, trim) - B = [xcb, KBT[0], KBT[1]] # Get stability initial condition BG = [G[0]-B[0], G[1]-B[1], G[2]-B[2]] x = BG[0]*math.cos(math.radians(trim)) - BG[2]*math.sin(math.radians(trim)) @@ -321,7 +320,7 @@ class TaskPanel: """ Computes ship draft. @param disp Ship displacement. @param trim Trim angle [degrees]. - @return Ship draft, and longitudinal bouyance center position. None if errors detected. + @return Ship draft, and bouyance center position. None if errors detected. """ if not self.ship: return None @@ -335,10 +334,10 @@ class TaskPanel: xcb = 0.0 while(abs(disp - w)/disp > 0.01): draft = draft + (disp - w) / (dens*dx*dy) - ww = Hydrostatics.Displacement(self.ship, draft, trim) - w = 1000.0*ww[1] - xcb = ww[2] - return [draft,xcb] + ww = Hydrostatics.displacement(self.ship, draft, 0.0, trim, 0.0) + w = 1000.0*ww[0] + B = ww[1] + return [draft,B] def computeGZ(self, draft, trim, roll): """ Compute GZ value. @@ -352,13 +351,13 @@ class TaskPanel: G = [disp[2], disp[3]] disp = disp[0] # Get bouyancy center (x coordinate not relevant) - KBT = Hydrostatics.KBT(self.ship, draft, trim, roll) - B = [KBT[0], KBT[1]] + disp = Hydrostatics.displacement(self.ship, draft, roll, trim, 0.0) + B = [disp[1].y, disp[1].z] # GZ computation BG = [G[0] - B[0], G[1] - B[1]] - y = BG[0]*math.cos(math.radians(-roll)) - BG[1]*math.sin(math.radians(-roll)) - z = BG[0]*math.sin(math.radians(-roll)) + BG[1]*math.cos(math.radians(-roll)) - return -y + y = BG[0]*math.cos(math.radians(roll)) - BG[1]*math.sin(math.radians(roll)) + z = BG[0]*math.sin(math.radians(roll)) + BG[1]*math.cos(math.radians(roll)) + return y def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index ce59e5d2b..80439d94d 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -182,7 +182,7 @@ - 89.000000000000000 + 180.000000000000000 45.000000000000000 From 00132dd2ef580da6ffaacf25dbe9688b46816ffc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 15 Jun 2012 10:19:23 -0300 Subject: [PATCH 370/517] Draft: Fixes in the clone object --- src/Mod/Draft/Draft.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index fc2596beb..4fd8258fb 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2857,9 +2857,13 @@ class _Clone: if hasattr(obj,"Scale") and not sh.isNull(): m.scale(obj.Scale) sh = sh.transformGeometry(m) - shapes.append(sh) + if not sh.isNull(): + shapes.append(sh) if shapes: - obj.Shape = Part.makeCompound(shapes) + if len(shapes) == 1: + obj.Shape = shapes[0] + else: + obj.Shape = Part.makeCompound(shapes) if not DraftGeomUtils.isNull(pl): obj.Placement = pl From 943d24cfa1118512d3b96011b182528172d77045 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 15 Jun 2012 18:33:05 +0200 Subject: [PATCH 371/517] Fix OCC6.5.3 build errors --- src/3rdParty/salomesmesh/src/Controls/SMESH_Controls.cpp | 5 +++++ src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp | 4 ++++ src/3rdParty/salomesmesh/src/SMESH/SMESH_Pattern.cpp | 5 +++++ .../src/StdMeshers/StdMeshers_AutomaticLength.cpp | 5 +++++ .../src/StdMeshers/StdMeshers_CompositeHexa_3D.cpp | 5 +++++ .../src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cpp | 5 +++++ .../src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cpp | 5 +++++ 7 files changed, 34 insertions(+) diff --git a/src/3rdParty/salomesmesh/src/Controls/SMESH_Controls.cpp b/src/3rdParty/salomesmesh/src/Controls/SMESH_Controls.cpp index d03237fd4..bba92104e 100644 --- a/src/3rdParty/salomesmesh/src/Controls/SMESH_Controls.cpp +++ b/src/3rdParty/salomesmesh/src/Controls/SMESH_Controls.cpp @@ -63,6 +63,11 @@ #include "SMESHDS_Mesh.hxx" #include "SMESHDS_GroupBase.hxx" +#include + +#ifndef PI +#define PI M_PI +#endif /* AUXILIARY METHODS diff --git a/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp b/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp index 2d81e9a47..c0bb7e0f1 100644 --- a/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp +++ b/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp @@ -82,6 +82,10 @@ #include #include +#ifndef PI +#define PI M_PI +#endif + #define cast2Node(elem) static_cast( elem ) using namespace std; diff --git a/src/3rdParty/salomesmesh/src/SMESH/SMESH_Pattern.cpp b/src/3rdParty/salomesmesh/src/SMESH/SMESH_Pattern.cpp index 5c090d632..135e24d64 100644 --- a/src/3rdParty/salomesmesh/src/SMESH/SMESH_Pattern.cpp +++ b/src/3rdParty/salomesmesh/src/SMESH/SMESH_Pattern.cpp @@ -74,6 +74,11 @@ #include "SMESH_subMesh.hxx" #include "utilities.h" +#include + +#ifndef PI +#define PI M_PI +#endif using namespace std; diff --git a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_AutomaticLength.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_AutomaticLength.cpp index 95710c94e..d77560e0e 100644 --- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_AutomaticLength.cpp +++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_AutomaticLength.cpp @@ -37,6 +37,11 @@ #include #include #include +#include + +#ifndef PI +#define PI M_PI +#endif using namespace std; diff --git a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_CompositeHexa_3D.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_CompositeHexa_3D.cpp index 953081fb3..b294f8aa5 100644 --- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_CompositeHexa_3D.cpp +++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_CompositeHexa_3D.cpp @@ -56,6 +56,11 @@ #include #include #include +#include + +#ifndef PI +#define PI M_PI +#endif #ifdef _DEBUG_ diff --git a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cpp index f3e0517d5..50eef649d 100644 --- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cpp +++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cpp @@ -47,6 +47,11 @@ typedef NCollection_Array1 StdMeshers_Array1OfSequenc #include typedef SMESH_Array1 StdMeshers_Array1OfSequenceOfInteger; #endif +#include + +#ifndef PI +#define PI M_PI +#endif //======================================================================= //function : StdMeshers_QuadToTriaAdaptor diff --git a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cpp index 8d21195db..0ce2382e1 100644 --- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cpp +++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cpp @@ -54,6 +54,11 @@ #include #include #include +#include + +#ifndef PI +#define PI M_PI +#endif using namespace std; From 9ae96083d37d0952307fda2ad3cc3764d3ff793c Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 15 Jun 2012 18:20:52 -0300 Subject: [PATCH 372/517] Draft: Small fix to wire object --- src/Mod/Draft/Draft.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 4fd8258fb..9f2eef25d 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2416,16 +2416,17 @@ class _Wire: for v in shape.Vertexes: p.append(v.Point) if fp.Points != p: fp.Points = p elif fp.Base and fp.Tool: - if ('Shape' in fp.Base.PropertiesList) and ('Shape' in fp.Tool.PropertiesList): - sh1 = fp.Base.Shape.copy() - sh2 = fp.Tool.Shape.copy() - shape = sh1.fuse(sh2) - if DraftGeomUtils.isCoplanar(shape.Faces): - shape = DraftGeomUtils.concatenate(shape) - fp.Shape = shape - p = [] - for v in shape.Vertexes: p.append(v.Point) - if fp.Points != p: fp.Points = p + if fp.Base.isDerivedFrom("Part::Feature") and fp.Tool.isDerivedFrom("Part::Feature"): + if (not fp.Base.Shape.isNull()) and (not fp.Tool.Shape.isNull()): + sh1 = fp.Base.Shape.copy() + sh2 = fp.Tool.Shape.copy() + shape = sh1.fuse(sh2) + if DraftGeomUtils.isCoplanar(shape.Faces): + shape = DraftGeomUtils.concatenate(shape) + fp.Shape = shape + p = [] + for v in shape.Vertexes: p.append(v.Point) + if fp.Points != p: fp.Points = p elif fp.Points: if fp.Points[0] == fp.Points[-1]: if not fp.Closed: fp.Closed = True From 107b784d13d5ec56f97c929039e223be1011c8d0 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Thu, 7 Jun 2012 19:50:03 +0200 Subject: [PATCH 373/517] 0000684: Check Shape after boolean before refine --- src/Mod/Part/App/FeaturePartBoolean.cpp | 12 ++++++++++-- src/Mod/Part/App/FeaturePartCommon.cpp | 7 +++++++ src/Mod/Part/App/FeaturePartFuse.cpp | 7 +++++++ src/Mod/Part/Gui/DlgSettingsGeneral.cpp | 2 ++ src/Mod/Part/Gui/DlgSettingsGeneral.ui | 13 +++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/Mod/Part/App/FeaturePartBoolean.cpp b/src/Mod/Part/App/FeaturePartBoolean.cpp index 2a1781b6c..0d63d309c 100644 --- a/src/Mod/Part/App/FeaturePartBoolean.cpp +++ b/src/Mod/Part/App/FeaturePartBoolean.cpp @@ -24,6 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include # include #endif @@ -82,13 +83,20 @@ App::DocumentObjectExecReturn *Boolean::execute(void) if (resShape.IsNull()) { return new App::DocumentObjectExecReturn("Resulting shape is invalid"); } + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); + + if (hGrp->GetBool("CheckModel", false)) { + BRepCheck_Analyzer aChecker(resShape); + if (! aChecker.IsValid() ) { + return new App::DocumentObjectExecReturn("Resulting shape is invalid"); + } + } std::vector history; history.push_back(buildHistory(*mkBool.get(), TopAbs_FACE, resShape, BaseShape)); history.push_back(buildHistory(*mkBool.get(), TopAbs_FACE, resShape, ToolShape)); - Base::Reference hGrp = App::GetApplication().GetUserParameter() - .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); if (hGrp->GetBool("RefineModel", false)) { TopoDS_Shape oldShape = resShape; BRepBuilderAPI_RefineModel mkRefine(oldShape); diff --git a/src/Mod/Part/App/FeaturePartCommon.cpp b/src/Mod/Part/App/FeaturePartCommon.cpp index 01ef09e41..cb1338e05 100644 --- a/src/Mod/Part/App/FeaturePartCommon.cpp +++ b/src/Mod/Part/App/FeaturePartCommon.cpp @@ -25,6 +25,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include # include #endif @@ -112,6 +113,12 @@ App::DocumentObjectExecReturn *MultiCommon::execute(void) Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); + if (hGrp->GetBool("CheckModel", false)) { + BRepCheck_Analyzer aChecker(resShape); + if (! aChecker.IsValid() ) { + return new App::DocumentObjectExecReturn("Resulting shape is invalid"); + } + } if (hGrp->GetBool("RefineModel", false)) { TopoDS_Shape oldShape = resShape; BRepBuilderAPI_RefineModel mkRefine(oldShape); diff --git a/src/Mod/Part/App/FeaturePartFuse.cpp b/src/Mod/Part/App/FeaturePartFuse.cpp index ba73877ea..9444524c3 100644 --- a/src/Mod/Part/App/FeaturePartFuse.cpp +++ b/src/Mod/Part/App/FeaturePartFuse.cpp @@ -24,6 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include # include #endif @@ -111,6 +112,12 @@ App::DocumentObjectExecReturn *MultiFuse::execute(void) Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean"); + if (hGrp->GetBool("CheckModel", false)) { + BRepCheck_Analyzer aChecker(resShape); + if (! aChecker.IsValid() ) { + return new App::DocumentObjectExecReturn("Resulting shape is invalid"); + } + } if (hGrp->GetBool("RefineModel", false)) { TopoDS_Shape oldShape = resShape; BRepBuilderAPI_RefineModel mkRefine(oldShape); diff --git a/src/Mod/Part/Gui/DlgSettingsGeneral.cpp b/src/Mod/Part/Gui/DlgSettingsGeneral.cpp index a9c917a86..aee0f17a5 100644 --- a/src/Mod/Part/Gui/DlgSettingsGeneral.cpp +++ b/src/Mod/Part/Gui/DlgSettingsGeneral.cpp @@ -70,6 +70,7 @@ void DlgSettingsGeneral::saveSettings() break; } ui->checkBooleanRefine->onSave(); + ui->checkBooleanCheck->onSave(); } void DlgSettingsGeneral::loadSettings() @@ -79,6 +80,7 @@ void DlgSettingsGeneral::loadSettings() int unit = hGrp->GetInt("Unit", 0); ui->comboBoxUnits->setCurrentIndex(unit); ui->checkBooleanRefine->onRestore(); + ui->checkBooleanCheck->onRestore(); } /** diff --git a/src/Mod/Part/Gui/DlgSettingsGeneral.ui b/src/Mod/Part/Gui/DlgSettingsGeneral.ui index 535d0f1d3..276f4acd7 100644 --- a/src/Mod/Part/Gui/DlgSettingsGeneral.ui +++ b/src/Mod/Part/Gui/DlgSettingsGeneral.ui @@ -87,6 +87,19 @@ + + + + Automatically check model after boolean operation + + + CheckModel + + + Mod/Part/Boolean + + + From e05fcc7daf7d806c9766cfe75ca2b4880c3dccf0 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 16 Jun 2012 16:31:05 +0200 Subject: [PATCH 374/517] Fix warning --- src/Gui/Splashscreen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index d127e13bb..9464a5da1 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -23,6 +23,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include @@ -30,7 +31,6 @@ # include # include # include -# include # include # include #endif From 0286a2602e6dbdafe5cd1af18fce05d1f6fc1329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 17 Jun 2012 12:48:47 +0200 Subject: [PATCH 375/517] Added update button for displacement and draft --- src/Mod/Ship/tankGZ/TaskPanel.py | 13 +++++++++++-- src/Mod/Ship/tankGZ/TaskPanel.ui | 7 +++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 07b84abc9..5408cb61f 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -95,6 +95,7 @@ class TaskPanel: form.tanks = form.findChild(QtGui.QListWidget, "Tanks") form.disp = form.findChild(QtGui.QLabel, "DisplacementLabel") form.draft = form.findChild(QtGui.QLabel, "DraftLabel") + form.update = form.findChild(QtGui.QPushButton, "UpdateData") form.trim = form.findChild(QtGui.QDoubleSpinBox, "Trim") form.autoTrim = form.findChild(QtGui.QPushButton, "TrimAutoCompute") form.roll0 = form.findChild(QtGui.QDoubleSpinBox, "StartAngle") @@ -105,9 +106,9 @@ class TaskPanel: if self.initValues(): return True self.retranslateUi() - self.onTanksSelection() # Connect Signals and Slots QtCore.QObject.connect(form.tanks,QtCore.SIGNAL("itemSelectionChanged()"),self.onTanksSelection) + QtCore.QObject.connect(form.update,QtCore.SIGNAL("pressed()"),self.onUpdate) QtCore.QObject.connect(form.trim,QtCore.SIGNAL("valueChanged(double)"),self.onTrim) QtCore.QObject.connect(form.autoTrim,QtCore.SIGNAL("pressed()"),self.onAutoTrim) QtCore.QObject.connect(form.roll0,QtCore.SIGNAL("valueChanged(double)"),self.onRoll) @@ -199,10 +200,18 @@ class TaskPanel: self.form.findChild(QtGui.QLabel, "StartAngleLabel").setText(Translator.translate("Start") + " [deg]") self.form.findChild(QtGui.QLabel, "EndAngleLabel").setText(Translator.translate("End") + " [deg]") self.form.findChild(QtGui.QLabel, "NAngleLabel").setText(Translator.translate("Number of points")) + self.form.disp.setText(Translator.translate("Displacement = Press update to compute")) + self.form.draft.setText(Translator.translate("Draft = Press update to compute")) + self.form.update.setText(Translator.translate("Update displacement and draft")) def onTanksSelection(self): """ Called when tanks are selected or deselected. """ + pass + + def onUpdate(self): + """ Called when update displacement and draft is requested. + """ # Set displacement label disp = self.computeDisplacement() self.form.disp.setText(Translator.translate("Displacement") + ' = %g [kg]' % (disp[0])) @@ -236,7 +245,7 @@ class TaskPanel: z = BG[0]*math.sin(math.radians(trim)) + BG[2]*math.cos(math.radians(trim)) var = math.degrees(math.atan2(x,z)) # Iterate looking stability point - dVar = math.copysign(0.0033, var) + dVar = math.copysign(0.01, var) while True: if (dVar*math.copysign(dVar, var) < 0.0): break diff --git a/src/Mod/Ship/tankGZ/TaskPanel.ui b/src/Mod/Ship/tankGZ/TaskPanel.ui index 80439d94d..6f2da22e2 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.ui +++ b/src/Mod/Ship/tankGZ/TaskPanel.ui @@ -71,6 +71,13 @@ + + + + Update displacement and draft + + + From 3f7cad32f05a37a2427ab332a83eab560615a612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 17 Jun 2012 12:58:11 +0200 Subject: [PATCH 376/517] Improved trim detection algorithm --- src/Mod/Ship/tankGZ/TaskPanel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/tankGZ/TaskPanel.py b/src/Mod/Ship/tankGZ/TaskPanel.py index 5408cb61f..a27b5a033 100644 --- a/src/Mod/Ship/tankGZ/TaskPanel.py +++ b/src/Mod/Ship/tankGZ/TaskPanel.py @@ -247,9 +247,9 @@ class TaskPanel: # Iterate looking stability point dVar = math.copysign(0.01, var) while True: - if (dVar*math.copysign(dVar, var) < 0.0): + if (dVar*var < 0.0) or (abs(var) < 0.1): break - trim = trim - math.copysign(dVar, var) + trim = trim - math.copysign(max(dVar, abs(var)/200.0), var) # Get center of gravity disp = self.computeDisplacement(trim) G = [disp[1], disp[2], disp[3]] From 5b92ec13d49c9a11b83b8dd306e892ca6960a90e Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 21 Jun 2012 12:09:52 +0200 Subject: [PATCH 377/517] Fix a couple of dfsg issues --- CMakeLists.txt | 4 +++- src/Mod/Idf/CMakeLists.txt | 1 + src/Mod/Robot/App/CMakeLists.txt | 2 ++ src/Tools/makedist.py | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f44c39c25..602f37de4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -353,7 +353,9 @@ endif(FREECAD_LIBPACK_USE) # copy build convenient files for M$ if(WIN32) - configure_file(BuildAll.bat ${CMAKE_BINARY_DIR}/BuildAll.bat COPYONLY) + if (EXISTS BuildAll.bat) + configure_file(BuildAll.bat ${CMAKE_BINARY_DIR}/BuildAll.bat COPYONLY) + endif (EXISTS BuildAll.bat) #configure_file(BuildAllNice.bat ${CMAKE_BINARY_DIR}/BuildAllNice.bat COPYONLY) endif(WIN32) diff --git a/src/Mod/Idf/CMakeLists.txt b/src/Mod/Idf/CMakeLists.txt index d27534127..ff8d895e2 100644 --- a/src/Mod/Idf/CMakeLists.txt +++ b/src/Mod/Idf/CMakeLists.txt @@ -6,6 +6,7 @@ SET(Idf_SRCS SOURCE_GROUP("" FILES ${Idf_SRCS}) SET(IdfLibs_SRCS + lib/License.txt lib/0603_SMD.stp lib/0805_SMD.stp lib/1206_SMD.stp diff --git a/src/Mod/Robot/App/CMakeLists.txt b/src/Mod/Robot/App/CMakeLists.txt index 6af950f3c..c3aec5530 100644 --- a/src/Mod/Robot/App/CMakeLists.txt +++ b/src/Mod/Robot/App/CMakeLists.txt @@ -108,6 +108,7 @@ SET(Robot_Scripts RobotExampleTrajectoryOutOfShapes.py ) +if (EXISTS Lib/Kuka) SET(Robot_Resources Lib/Kuka/kr500_1.wrl Lib/Kuka/kr500_1.csv @@ -122,6 +123,7 @@ SET(Robot_Resources Lib/Kuka/kr_125.csv Lib/Kuka/kr125_2.pdf ) +endif (EXISTS Lib/Kuka) add_library(Robot SHARED ${Robot_SRCS}) target_link_libraries(Robot ${Robot_LIBS}) diff --git a/src/Tools/makedist.py b/src/Tools/makedist.py index a30550e2c..e42c69a33 100644 --- a/src/Tools/makedist.py +++ b/src/Tools/makedist.py @@ -34,6 +34,7 @@ def main(): gitattr.write("zipios++ export-ignore\n") gitattr.write("Pivy-0.5 export-ignore\n") gitattr.write("Pivy export-ignore\n") + gitattr.write("Kuka export-ignore\n") gitattr.close() # revision number From 2828a91b7bded9757a96a93905b815ccdc5a1a50 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 21 Jun 2012 12:25:53 +0200 Subject: [PATCH 378/517] Fix a couple of dfsg issues, make git the default vcs --- src/Mod/Robot/App/CMakeLists.txt | 4 ++-- src/Tools/SubWCRev.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Robot/App/CMakeLists.txt b/src/Mod/Robot/App/CMakeLists.txt index c3aec5530..a2a2d12e8 100644 --- a/src/Mod/Robot/App/CMakeLists.txt +++ b/src/Mod/Robot/App/CMakeLists.txt @@ -108,7 +108,7 @@ SET(Robot_Scripts RobotExampleTrajectoryOutOfShapes.py ) -if (EXISTS Lib/Kuka) +if (EXISTS ${CMAKE_SOURCE_DIR}/src/Mod/Robot/Lib/Kuka) SET(Robot_Resources Lib/Kuka/kr500_1.wrl Lib/Kuka/kr500_1.csv @@ -123,7 +123,7 @@ SET(Robot_Resources Lib/Kuka/kr_125.csv Lib/Kuka/kr125_2.pdf ) -endif (EXISTS Lib/Kuka) +endif () add_library(Robot SHARED ${Robot_SRCS}) target_link_libraries(Robot ${Robot_LIBS}) diff --git a/src/Tools/SubWCRev.py b/src/Tools/SubWCRev.py index 53b8a2eb6..b79a3e61d 100644 --- a/src/Tools/SubWCRev.py +++ b/src/Tools/SubWCRev.py @@ -250,7 +250,7 @@ def main(): if o in ("-b", "--bindir"): bindir = a - vcs=[Subversion(), BazaarControl(), GitControl(), MercurialControl(), DebianChangelog(), UnknownControl()] + vcs=[GitControl(), BazaarControl(), Subversion(), MercurialControl(), DebianChangelog(), UnknownControl()] for i in vcs: if i.extractInfo(srcdir): # Open the template file and the version file From 94d389ae1ca065af8070aa2373c79d7c93ff09d9 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Wed, 20 Jun 2012 10:12:46 +0200 Subject: [PATCH 379/517] importSVG: fixes in preserveAspectRatio and sweepflag handling --- src/Mod/Draft/importSVG.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index 099041d0a..6c7b4eb2e 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -448,8 +448,7 @@ class svgHandler(xml.sax.ContentHandler): abh = getsize(h,unitmode) sx=abw/vbw sy=abh/vbh - preservearstr=data.get('preserveAspectRatio',\ - '').lower() + preservearstr=' '.join(data.get('preserveAspectRatio',[])).lower() uniformscaling = round(sx/sy,5) == 1 if uniformscaling: m.scale(Vector(sx,sy,1)) @@ -624,7 +623,8 @@ class svgHandler(xml.sax.ContentHandler): if sweepflag: #angledelta=-(-angledelta % (math.pi *2)) # Step4 #angledelta=(-angledelta % (math.pi *2)) # Step4 - angle1 = angle1-angledelta + angle1 = angle1+angledelta + angledelta = -angledelta #angle1 = math.pi - angle1 e1a = Part.Arc(e1,angle1-swapaxis*math.radians(90),\ From 7147f3dd55ae1661d6fee431cafccd4e7e536f8a Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Thu, 21 Jun 2012 15:11:16 +0200 Subject: [PATCH 380/517] importSVG: create Face only if path is closed --- src/Mod/Draft/importSVG.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index 6c7b4eb2e..7a7c7056f 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -51,8 +51,8 @@ if open.__module__ == '__builtin__': pythonopen = open svgcolors = { - 'Pink': (255, 192, 203), - 'Blue': (0, 0, 255), + 'Pink': (255, 192, 203), + 'Blue': (0, 0, 255), 'Honeydew': (240, 255, 240), 'Purple': (128, 0, 128), 'Fuchsia': (255, 0, 255), @@ -269,7 +269,7 @@ def makewire(path,checkclosed=False,donttry=False): #ToDo Do not catch all exceptions if not donttry: try: - sh = Part.Wire(DraftGeomUtils.sortEdges(path)) + sh = Part.Wire(DraftGeomUtils.sortEdges(path)) #sh = Part.Wire(path) isok = (not checkclosed) or sh.isClosed() except:# BRep_API:command not done @@ -533,7 +533,8 @@ class svgHandler(xml.sax.ContentHandler): if path: #sh = Part.Wire(path) sh = makewire(path) - if self.fill: sh = Part.Face(sh) + if self.fill and sh.isClosed(): + sh = Part.Face(sh) sh = self.applyTrans(sh) obj = self.doc.addObject("Part::Feature",pathname) obj.Shape = sh @@ -750,7 +751,8 @@ class svgHandler(xml.sax.ContentHandler): if path: sh=makewire(path,checkclosed=False) #sh = Part.Wire(path) - if self.fill: sh = Part.Face(sh) + if self.fill and sh.isClosed(): + sh = Part.Face(sh) sh = self.applyTrans(sh) obj = self.doc.addObject("Part::Feature",pathname) obj.Shape = sh @@ -828,7 +830,6 @@ class svgHandler(xml.sax.ContentHandler): obj = self.doc.addObject("Part::Feature",pathname) obj.Shape = sh self.format(obj) - # processing lines if name == "line": @@ -864,7 +865,8 @@ class svgHandler(xml.sax.ContentHandler): path.append(seg) if path: sh = Part.Wire(path) - if self.fill: sh = Part.Face(sh) + if self.fill and sh.isClosed(): + sh = Part.Face(sh) sh = self.applyTrans(sh) obj = self.doc.addObject("Part::Feature",pathname) obj.Shape = sh From 8c0211b7015967890f010581b009643bff1ed39b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 22 Jun 2012 16:29:06 +0200 Subject: [PATCH 381/517] Added a trim factor multiplier at moment to trim 1cm computation (In order to reduce noise). --- src/Mod/Ship/shipHydrostatics/Tools.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 591df4603..58fbb3d15 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -217,12 +217,13 @@ def moment(ship, draft, trim, disp, xcb): @return Moment to trim ship 1cm (ton m). @note Moment is positive when produce positive trim. """ - angle = math.degrees(math.atan2(0.01,0.5*ship.Length)) + factor = 10.0 + angle = factor*math.degrees(math.atan2(0.01,0.5*ship.Length)) newTrim = trim + angle data = displacement(ship,draft,0.0,newTrim,0.0) mom0 = -disp*xcb mom1 = -data[0]*data[1].x - return mom1 - mom0 + return (mom1 - mom0) / factor def FloatingArea(ship, draft, trim): """ Calculate ship floating area. From c5b2f377a420a14dd8e630793e1f8caa3d6479fc Mon Sep 17 00:00:00 2001 From: mrlukeparry Date: Sun, 24 Jun 2012 16:30:48 +0200 Subject: [PATCH 382/517] Sketcher: improve position hints on arc and circle creation --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 33 +++++++++++++++++++-- src/Mod/Sketcher/Gui/DrawSketchHandler.cpp | 6 ++++ src/Mod/Sketcher/Gui/DrawSketchHandler.h | 1 + src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 6 ++++ src/Mod/Sketcher/Gui/ViewProviderSketch.h | 1 + 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 02e508e76..fa9679fe2 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -731,9 +731,8 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { - setPositionText(onSketchPos); - if (Mode==STATUS_SEEK_First) { + setPositionText(onSketchPos); if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr1); return; @@ -750,6 +749,16 @@ public: EditCurve[17+i] = Base::Vector2D(EditCurve[0].fX - dx, EditCurve[0].fY - dy); } EditCurve[33] = EditCurve[1]; + + // Display radius and start angle + float radius = (onSketchPos - EditCurve[0]).Length(); + float angle = atan2f(dy_ , dx_) * 180 / M_PI; + + char buf[40]; + sprintf( buf, " (R%.1f,%.1f)", radius, angle); + std::string text = buf; + setPositionText(onSketchPos, text); + sketchgui->drawEdit(EditCurve); if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr2); @@ -767,6 +776,15 @@ public: float dy = rx * sin(angle) + ry * cos(angle); EditCurve[i] = Base::Vector2D(CenterPoint.fX + dx, CenterPoint.fY + dy); } + + // Display radius and end angle + float radius = (onSketchPos - EditCurve[0]).Length(); + + char buf[40]; + sprintf( buf, " (R%.1f,%.1f)", radius, arcAngle * 180 / M_PI); + std::string text = buf; + setPositionText(onSketchPos, text); + sketchgui->drawEdit(EditCurve); if (seekAutoConstraint(sugConstr3, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr3); @@ -950,8 +968,8 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { - setPositionText(onSketchPos); if (Mode==STATUS_SEEK_First) { + setPositionText(onSketchPos); if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr1); return; @@ -968,6 +986,15 @@ public: EditCurve[17+i] = Base::Vector2D(EditCurve[0].fX - rx, EditCurve[0].fY - ry); } EditCurve[33] = EditCurve[1]; + + // Display radius for user + float radius = (onSketchPos - EditCurve[0]).Length(); + + char buf[40]; + sprintf( buf, "R%.1f", radius); + std::string text = buf; + setPositionText(onSketchPos, text); + sketchgui->drawEdit(EditCurve); if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f), CURVE)) { renderSuggestConstraintsCursor(sugConstr2); diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp index f75cc8329..06018b5ca 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp @@ -385,6 +385,12 @@ void DrawSketchHandler::renderSuggestConstraintsCursor(std::vectorsetPositionText(Pos, text); +} + + void DrawSketchHandler::setPositionText(const Base::Vector2D &Pos) { sketchgui->setPositionText(Pos); diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.h b/src/Mod/Sketcher/Gui/DrawSketchHandler.h index f5ccfa975..68ba93d2a 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.h @@ -87,6 +87,7 @@ public: void createAutoConstraints(const std::vector &autoConstrs, int geoId, Sketcher::PointPos pointPos=Sketcher::none); + void setPositionText(const Base::Vector2D &Pos, const std::string &text); void setPositionText(const Base::Vector2D &Pos); void resetPositionText(void); void renderSuggestConstraintsCursor(std::vector &suggestedConstraints); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 4b6cc1988..36c22a0db 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -3026,6 +3026,12 @@ void ViewProviderSketch::unsetEditViewer(Gui::View3DInventorViewer* viewer) static_cast(root)->selectionRole.setValue(TRUE); } +void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos, const std::string &text) +{ + edit->textX->string = text.c_str(); + edit->textPos->translation = SbVec3f(Pos.fX,Pos.fY,zText); +} + void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos) { char buf[40]; diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 2c98d71eb..356d4414d 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -200,6 +200,7 @@ protected: /// build up the visual of the constraints void rebuildConstraintsVisual(void); + void setPositionText(const Base::Vector2D &Pos, const std::string &txt); void setPositionText(const Base::Vector2D &Pos); void resetPositionText(void); From e8b37fdd2aa557326f6367fead422adc5fe529be Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 25 Jun 2012 10:55:06 +0200 Subject: [PATCH 383/517] fix linker error when using latest OCC version --- src/Mod/PartDesign/App/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/PartDesign/App/CMakeLists.txt b/src/Mod/PartDesign/App/CMakeLists.txt index 837189bb1..d33676379 100644 --- a/src/Mod/PartDesign/App/CMakeLists.txt +++ b/src/Mod/PartDesign/App/CMakeLists.txt @@ -15,6 +15,7 @@ include_directories( link_directories(${OCC_LIBRARY_DIR}) set(PartDesign_LIBS + ${OCC_LIBRARIES} Part FreeCADApp ) From 1c55838f695d414b97dedc89012ef0ef995dae39 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 25 Jun 2012 11:48:43 +0200 Subject: [PATCH 384/517] Apply patch to add interpolate() method to B-Spline surface class --- src/Mod/Part/App/BSplineSurfacePy.xml | 5 +++ src/Mod/Part/App/BSplineSurfacePyImp.cpp | 51 ++++++++++++++++++++++++ src/Mod/Part/App/Geometry.cpp | 5 +++ src/Mod/Part/App/Geometry.h | 1 + 4 files changed, 62 insertions(+) diff --git a/src/Mod/Part/App/BSplineSurfacePy.xml b/src/Mod/Part/App/BSplineSurfacePy.xml index 413e94247..6bfebdb44 100644 --- a/src/Mod/Part/App/BSplineSurfacePy.xml +++ b/src/Mod/Part/App/BSplineSurfacePy.xml @@ -677,5 +677,10 @@ Returns a reparametrized copy of this surface + + + Replaces this B-Spline surface by interpolating a set of points. + + diff --git a/src/Mod/Part/App/BSplineSurfacePyImp.cpp b/src/Mod/Part/App/BSplineSurfacePyImp.cpp index c016f277a..f642662f4 100644 --- a/src/Mod/Part/App/BSplineSurfacePyImp.cpp +++ b/src/Mod/Part/App/BSplineSurfacePyImp.cpp @@ -31,6 +31,8 @@ # include # include # include +# include +# include #endif #include @@ -1242,6 +1244,55 @@ PyObject* BSplineSurfacePy::reparametrize(PyObject * args) } } +PyObject* BSplineSurfacePy::interpolate(PyObject *args) +{ + PyObject* obj; + double tol3d = Precision::Approximation(); + PyObject* closed = Py_False; + PyObject* t1=0; PyObject* t2=0; + if (!PyArg_ParseTuple(args, "O!",&(PyList_Type), &obj)) + return 0; + try { + Py::List list(obj); + Standard_Integer lu = list.size(); + Py::List col(list.getItem(0)); + Standard_Integer lv = col.size(); + TColgp_Array2OfPnt interpolationPoints(1, lu, 1, lv); + + Standard_Integer index1 = 0; + Standard_Integer index2 = 0; + for (Py::List::iterator it1 = list.begin(); it1 != list.end(); ++it1) { + index1++; + index2=0; + Py::List row(*it1); + for (Py::List::iterator it2 = row.begin(); it2 != row.end(); ++it2) { + index2++; + Py::Vector v(*it2); + Base::Vector3d pnt = v.toVector(); + gp_Pnt newPoint(pnt.x,pnt.y,pnt.z); + interpolationPoints.SetValue(index1, index2, newPoint); + } + } + + if (interpolationPoints.RowLength() < 2 || interpolationPoints.ColLength() < 2) { + Standard_Failure::Raise("not enough points given"); + } + + GeomAPI_PointsToBSplineSurface surInterpolation; + surInterpolation.Interpolate (interpolationPoints); + Handle_Geom_BSplineSurface sur(surInterpolation.Surface()); + this->getGeomBSplineSurfacePtr()->setHandle(sur); + Py_Return; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + std::string err = e->GetMessageString(); + if (err.empty()) err = e->DynamicType()->Name(); + PyErr_SetString(PyExc_Exception, err.c_str()); + return 0; + } +} + Py::Int BSplineSurfacePy::getUDegree(void) const { Handle_Geom_BSplineSurface surf = Handle_Geom_BSplineSurface::DownCast diff --git a/src/Mod/Part/App/Geometry.cpp b/src/Mod/Part/App/Geometry.cpp index 7f3b9f71b..2f8450d3a 100644 --- a/src/Mod/Part/App/Geometry.cpp +++ b/src/Mod/Part/App/Geometry.cpp @@ -1362,6 +1362,11 @@ GeomBSplineSurface::~GeomBSplineSurface() { } +void GeomBSplineSurface::setHandle(const Handle_Geom_BSplineSurface& s) +{ + mySurface = Handle_Geom_BSplineSurface::DownCast(s->Copy()); +} + const Handle_Geom_Geometry& GeomBSplineSurface::handle() const { return mySurface; diff --git a/src/Mod/Part/App/Geometry.h b/src/Mod/Part/App/Geometry.h index f8a8efa5e..d04797083 100644 --- a/src/Mod/Part/App/Geometry.h +++ b/src/Mod/Part/App/Geometry.h @@ -448,6 +448,7 @@ public: // Base implementer ---------------------------- virtual PyObject *getPyObject(void); + void setHandle(const Handle_Geom_BSplineSurface&); const Handle_Geom_Geometry& handle() const; private: From efcd60ce0f2228e0c16e42137a779b3b7e920288 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 26 Jun 2012 13:59:16 +0200 Subject: [PATCH 385/517] Add a method to sync internal button stages after mouse selection --- src/Gui/NavigationStyle.cpp | 68 +++++++++++++++++++++++++++++++++++++ src/Gui/NavigationStyle.h | 1 + 2 files changed, 69 insertions(+) diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index 30f5ecf40..50dba3cf2 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -1118,11 +1118,13 @@ SbBool NavigationStyle::processEvent(const SoEvent * const ev) pcPolygon = mouseSelection->getPositions(); clipInner = mouseSelection->isInner(); delete mouseSelection; mouseSelection = 0; + syncWithEvent(ev); return NavigationStyle::processSoEvent(ev); } else if (hd==AbstractMouseSelection::Cancel) { pcPolygon.clear(); delete mouseSelection; mouseSelection = 0; + syncWithEvent(ev); return NavigationStyle::processSoEvent(ev); } } @@ -1150,6 +1152,72 @@ SbBool NavigationStyle::processSoEvent(const SoEvent * const ev) return viewer->processSoEventBase(ev); } +void NavigationStyle::syncWithEvent(const SoEvent * const ev) +{ + // Events when in "ready-to-seek" mode are ignored, except those + // which influence the seek mode itself -- these are handled further + // up the inheritance hierarchy. + if (this->isSeekMode()) { return; } + + const SoType type(ev->getTypeId()); + + // Mismatches in state of the modifier keys happens if the user + // presses or releases them outside the viewer window. + if (this->ctrldown != ev->wasCtrlDown()) { + this->ctrldown = ev->wasCtrlDown(); + } + if (this->shiftdown != ev->wasShiftDown()) { + this->shiftdown = ev->wasShiftDown(); + } + if (this->altdown != ev->wasAltDown()) { + this->altdown = ev->wasAltDown(); + } + + // Keyboard handling + if (type.isDerivedFrom(SoKeyboardEvent::getClassTypeId())) { + const SoKeyboardEvent * const event = (const SoKeyboardEvent *) ev; + const SbBool press = event->getState() == SoButtonEvent::DOWN ? TRUE : FALSE; + switch (event->getKey()) { + case SoKeyboardEvent::LEFT_CONTROL: + case SoKeyboardEvent::RIGHT_CONTROL: + this->ctrldown = press; + break; + case SoKeyboardEvent::LEFT_SHIFT: + case SoKeyboardEvent::RIGHT_SHIFT: + this->shiftdown = press; + break; + case SoKeyboardEvent::LEFT_ALT: + case SoKeyboardEvent::RIGHT_ALT: + this->altdown = press; + break; + default: + break; + } + } + + // Mouse Button / Spaceball Button handling + if (type.isDerivedFrom(SoMouseButtonEvent::getClassTypeId())) { + const SoMouseButtonEvent * const event = (const SoMouseButtonEvent *) ev; + const int button = event->getButton(); + const SbBool press = event->getState() == SoButtonEvent::DOWN ? TRUE : FALSE; + + // SoDebugError::postInfo("processSoEvent", "button = %d", button); + switch (button) { + case SoMouseButtonEvent::BUTTON1: + this->button1down = press; + break; + case SoMouseButtonEvent::BUTTON2: + this->button2down = press; + break; + case SoMouseButtonEvent::BUTTON3: + this->button3down = press; + break; + default: + break; + } + } +} + SbBool NavigationStyle::processMotionEvent(const SoMotion3Event * const ev) { SoCamera * const camera = viewer->getCamera(); diff --git a/src/Gui/NavigationStyle.h b/src/Gui/NavigationStyle.h index b6d4e20e6..cf7a1cdbc 100644 --- a/src/Gui/NavigationStyle.h +++ b/src/Gui/NavigationStyle.h @@ -175,6 +175,7 @@ protected: SbBool handleEventInForeground(const SoEvent* const e); virtual SbBool processSoEvent(const SoEvent * const ev); + void syncWithEvent(const SoEvent * const ev); virtual void openPopupMenu(const SbVec2s& position); void clearLog(void); From bbafe9cb005a297e26a54b352169122017add243 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 26 Jun 2012 14:58:05 +0200 Subject: [PATCH 386/517] Add First/LastParameter attributes to TopoEdge --- src/Mod/Part/App/TopoShapeEdgePy.xml | 16 ++++++++++++++-- src/Mod/Part/App/TopoShapeEdgePyImp.cpp | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/Mod/Part/App/TopoShapeEdgePy.xml b/src/Mod/Part/App/TopoShapeEdgePy.xml index 40def1030..fe0b5b0f7 100644 --- a/src/Mod/Part/App/TopoShapeEdgePy.xml +++ b/src/Mod/Part/App/TopoShapeEdgePy.xml @@ -88,11 +88,23 @@ - Returns a 4 tuple with the parameter range + Returns a 2 tuple with the parameter range - + + + Returns the start value of the parameter range + + + + + + Returns the end value of the parameter range + + + + Returns the 3D curve of the edge diff --git a/src/Mod/Part/App/TopoShapeEdgePyImp.cpp b/src/Mod/Part/App/TopoShapeEdgePyImp.cpp index 329c6bd6c..16807df2e 100644 --- a/src/Mod/Part/App/TopoShapeEdgePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeEdgePyImp.cpp @@ -660,6 +660,22 @@ Py::Tuple TopoShapeEdgePy::getParameterRange(void) const return t; } +Py::Float TopoShapeEdgePy::getFirstParameter(void) const +{ + const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); + BRepAdaptor_Curve adapt(e); + double t = adapt.FirstParameter(); + return Py::Float(t); +} + +Py::Float TopoShapeEdgePy::getLastParameter(void) const +{ + const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); + BRepAdaptor_Curve adapt(e); + double t = adapt.LastParameter(); + return Py::Float(t); +} + Py::Object TopoShapeEdgePy::getCenterOfMass(void) const { GProp_GProps props; From 013b5f0dcef42816796d4da9cc210deb5a17ef52 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 28 Jun 2012 18:29:48 +0200 Subject: [PATCH 387/517] 0000764: Serialize Shape to python String --- src/Mod/Part/App/TopoShape.cpp | 5 +++ src/Mod/Part/App/TopoShape.h | 1 + src/Mod/Part/App/TopoShapePy.xml | 10 ++++++ src/Mod/Part/App/TopoShapePyImp.cpp | 54 +++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index 8ebac8242..d8a5a13e2 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -726,6 +726,11 @@ void TopoShape::exportBrep(const char *filename) const throw Base::Exception("Writing of BREP failed"); } +void TopoShape::exportBrep(std::ostream& out) +{ + BRepTools::Write(this->_Shape, out); +} + void TopoShape::exportStl(const char *filename) const { StlAPI_Writer writer; diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index aaf521e05..26e891a9c 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -126,6 +126,7 @@ public: void exportIges(const char *FileName) const; void exportStep(const char *FileName) const; void exportBrep(const char *FileName) const; + void exportBrep(std::ostream&); void exportStl (const char *FileName) const; void exportFaceSet(double, double, std::ostream&) const; void exportLineSet(std::ostream&) const; diff --git a/src/Mod/Part/App/TopoShapePy.xml b/src/Mod/Part/App/TopoShapePy.xml index 34522f5f9..c144c1986 100644 --- a/src/Mod/Part/App/TopoShapePy.xml +++ b/src/Mod/Part/App/TopoShapePy.xml @@ -43,6 +43,11 @@ Sub-elements such as vertices, edges or faces are accessible as: Export the content of this shape to an BREP file. BREP is a CasCade native format. + + + Export the content of this shape to a string in BREP format. BREP is a CasCade native format. + + Export the content of this shape to an STL mesh file. @@ -53,6 +58,11 @@ Sub-elements such as vertices, edges or faces are accessible as: Import the content to this shape of a string in BREP format. + + + Import the content to this shape from a string in BREP format. + + Extrude the shape along a direction. diff --git a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp index 8f641a2f7..1dc8bfc3a 100644 --- a/src/Mod/Part/App/TopoShapePyImp.cpp +++ b/src/Mod/Part/App/TopoShapePyImp.cpp @@ -311,6 +311,32 @@ PyObject* TopoShapePy::exportBrep(PyObject *args) Py_Return; } +PyObject* TopoShapePy::exportBrepToString(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + + try { + // write brep file + std::stringstream str; + getTopoShapePtr()->exportBrep(str); + return Py::new_reference_to(Py::String(str.str())); + } + catch (const Base::Exception& e) { + PyErr_SetString(PyExc_Exception,e.what()); + return NULL; + } + catch (const std::exception& e) { + PyErr_SetString(PyExc_Exception,e.what()); + return NULL; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; + } +} + PyObject* TopoShapePy::importBrep(PyObject *args) { PyObject* input; @@ -335,6 +361,34 @@ PyObject* TopoShapePy::importBrep(PyObject *args) Py_Return; } +PyObject* TopoShapePy::importBrepFromString(PyObject *args) +{ + char* input; + if (!PyArg_ParseTuple(args, "s", &input)) + return NULL; + + try { + // read brep + std::stringstream str(input); + getTopoShapePtr()->importBrep(str); + } + catch (const Base::Exception& e) { + PyErr_SetString(PyExc_Exception,e.what()); + return NULL; + } + catch (const std::exception& e) { + PyErr_SetString(PyExc_Exception,e.what()); + return NULL; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + PyErr_SetString(PyExc_Exception, e->GetMessageString()); + return 0; + } + + Py_Return; +} + PyObject* TopoShapePy::exportStl(PyObject *args) { char* filename; From 487a041c898c20f6037c144646450be8a43686db Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 29 Jun 2012 13:57:22 +0200 Subject: [PATCH 388/517] Allow to run script in global environment --- src/Gui/DlgSettingsMacro.ui | 192 +++++++++++++++++--------------- src/Gui/DlgSettingsMacroImp.cpp | 2 + src/Gui/Macro.cpp | 3 +- src/Gui/Macro.h | 1 + 4 files changed, 110 insertions(+), 88 deletions(-) diff --git a/src/Gui/DlgSettingsMacro.ui b/src/Gui/DlgSettingsMacro.ui index 75d84a396..e22998a27 100644 --- a/src/Gui/DlgSettingsMacro.ui +++ b/src/Gui/DlgSettingsMacro.ui @@ -1,45 +1,62 @@ - - - - + + Gui::Dialog::DlgSettingsMacro - - + + 0 0 - 384 - 388 + 391 + 407 - + Macro - - - 9 - - - 6 - - - - + + + + + General macro settings + + + + + + Run macros in local environment + + + true + + + LocalEnvironment + + + Macro + + + + + + + + + Macro recording settings - - + + 9 - + 6 - + - + Qt::Vertical - + 20 40 @@ -47,56 +64,56 @@ - - - + + + Logging Commands - - - 11 - - + + 6 + + 11 + - - + + Show script commands in python console - - true - - + + true + + ScriptToPyConsole - + Macro - - + + Log all commands issued by menus to file: - + ScriptToFile - + Macro - - + + FullScript.FCScript - + ScriptFile - + Macro @@ -104,46 +121,46 @@ - - - + + + Gui commands - - + + 11 - + 6 - - - + + + Recording GUI commands - + true - + RecordGui - + Macro - - - + + + Record as comment - + true - + GuiAsComment - + Macro @@ -151,27 +168,27 @@ - - - + + + Macro path - - + + 11 - + 6 - - - + + + Gui::FileChooser::Directory - + MacroPath - + Macro @@ -184,21 +201,22 @@ - + - Gui::PrefCheckBox - QCheckBox -
    Gui/PrefWidgets.h
    - 0 - + Gui::FileChooser + QWidget +
    Gui/FileDialog.h
    Gui::PrefFileChooser Gui::FileChooser
    Gui/PrefWidgets.h
    - 0 - +
    + + Gui::PrefCheckBox + QCheckBox +
    Gui/PrefWidgets.h
    @@ -209,11 +227,11 @@ PrefCheckBox_GuiAsComment setEnabled(bool) - + 20 20 - + 20 20 diff --git a/src/Gui/DlgSettingsMacroImp.cpp b/src/Gui/DlgSettingsMacroImp.cpp index bccacfd7f..ce79fba28 100644 --- a/src/Gui/DlgSettingsMacroImp.cpp +++ b/src/Gui/DlgSettingsMacroImp.cpp @@ -54,6 +54,7 @@ DlgSettingsMacroImp::~DlgSettingsMacroImp() void DlgSettingsMacroImp::saveSettings() { + PrefCheckBox_LocalEnv->onSave(); MacroPath->onSave(); PrefCheckBox_RecordGui->onSave(); PrefCheckBox_GuiAsComment->onSave(); @@ -64,6 +65,7 @@ void DlgSettingsMacroImp::saveSettings() void DlgSettingsMacroImp::loadSettings() { + PrefCheckBox_LocalEnv->onRestore(); MacroPath->onRestore(); PrefCheckBox_RecordGui->onRestore(); PrefCheckBox_GuiAsComment->onRestore(); diff --git a/src/Gui/Macro.cpp b/src/Gui/Macro.cpp index f0d6658d9..89f9fab1a 100644 --- a/src/Gui/Macro.cpp +++ b/src/Gui/Macro.cpp @@ -71,6 +71,7 @@ void MacroManager::OnChange(Base::Subject &rCaller, const char * sR this->recordGui = this->params->GetBool("RecordGui", true); this->guiAsComment = this->params->GetBool("GuiAsComment", true); this->scriptToPyConsole = this->params->GetBool("ScriptToPyConsole", true); + this->localEnv = this->params->GetBool("LocalEnvironment", true); } void MacroManager::open(MacroType eType,const char *sName) @@ -228,7 +229,7 @@ void MacroManager::run(MacroType eType,const char *sName) PythonRedirector std_out("stdout",pyout); PythonRedirector std_err("stderr",pyerr); //The given path name is expected to be Utf-8 - Base::Interpreter().runFile(sName, true); + Base::Interpreter().runFile(sName, this->localEnv); } catch (const Base::SystemExitException&) { Base::PyGILStateLocker lock; diff --git a/src/Gui/Macro.h b/src/Gui/Macro.h index cba009d2b..bbd4266b1 100644 --- a/src/Gui/Macro.h +++ b/src/Gui/Macro.h @@ -98,6 +98,7 @@ protected: bool recordGui; bool guiAsComment; bool scriptToPyConsole; + bool localEnv; PythonConsole* pyConsole; // link to the python console PythonDebugger* pyDebugger; Base::Reference params; // link to the Macro parameter group From dfca264acfa6fc7c58d4ca695c5ac76507568073 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 29 Jun 2012 16:30:22 +0200 Subject: [PATCH 389/517] Change title in settings panel --- src/Mod/Part/Gui/DlgSettingsGeneral.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Part/Gui/DlgSettingsGeneral.ui b/src/Mod/Part/Gui/DlgSettingsGeneral.ui index 276f4acd7..26a04f6bf 100644 --- a/src/Mod/Part/Gui/DlgSettingsGeneral.ui +++ b/src/Mod/Part/Gui/DlgSettingsGeneral.ui @@ -71,7 +71,7 @@ - Model refinement + Model settings From 9a269907aaf0f274ddea66c576b9a429258bdf1e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 30 Jun 2012 18:44:16 -0300 Subject: [PATCH 390/517] 0000765: Z axis in Draft Array --- src/Mod/Draft/Draft.py | 65 +++++++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 9f2eef25d..380373a33 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2714,29 +2714,35 @@ class _Array: obj.addProperty("App::PropertyEnumeration","ArrayType","Base", "The type of array to create") obj.addProperty("App::PropertyVector","Axis","Base", - "The axis direction for polar arrays") + "The axis direction") obj.addProperty("App::PropertyInteger","NumberX","Base", - "Number of copies in X direction (ortho arrays)") + "Number of copies in X direction") obj.addProperty("App::PropertyInteger","NumberY","Base", - "Number of copies in Y direction (ortho arrays)") + "Number of copies in Y direction") + obj.addProperty("App::PropertyInteger","NumberZ","Base", + "Number of copies in Z direction") obj.addProperty("App::PropertyInteger","NumberPolar","Base", - "Number of copies (polar arrays)") + "Number of copies") obj.addProperty("App::PropertyVector","IntervalX","Base", - "Distance and orientation of intervals in X direction (ortho arrays)") + "Distance and orientation of intervals in X direction") obj.addProperty("App::PropertyVector","IntervalY","Base", - "Distance and orientation of intervals in Y direction (ortho arrays)") + "Distance and orientation of intervals in Y direction") + obj.addProperty("App::PropertyVector","IntervalZ","Base", + "Distance and orientation of intervals in Z direction") obj.addProperty("App::PropertyVector","Center","Base", - "Center point (polar arrays)") + "Center point") obj.addProperty("App::PropertyAngle","Angle","Base", - "Angle to cover with copies (polar arrays)") + "Angle to cover with copies") obj.Proxy = self self.Type = "Array" obj.ArrayType = ['ortho','polar'] obj.NumberX = 1 obj.NumberY = 1 + obj.NumberZ = 1 obj.NumberPolar = 1 obj.IntervalX = Vector(1,0,0) obj.IntervalY = Vector(0,1,0) + obj.IntervalZ = Vector(0,0,1) obj.Angle = 360 obj.Axis = Vector(0,0,1) @@ -2744,7 +2750,32 @@ class _Array: self.createGeometry(obj) def onChanged(self,obj,prop): - if prop in ["ArrayType","NumberX","NumberY","NumberPolar","IntervalX","IntervalY","Angle","Center","Axis"]: + if prop == "ArrayType": + if obj.ViewObject: + if obj.ArrayType == "ortho": + obj.ViewObject.setEditorMode('Axis',2) + obj.ViewObject.setEditorMode('NumberPolar',2) + obj.ViewObject.setEditorMode('Center',2) + obj.ViewObject.setEditorMode('Angle',2) + obj.ViewObject.setEditorMode('NumberX',0) + obj.ViewObject.setEditorMode('NumberY',0) + obj.ViewObject.setEditorMode('NumberZ',0) + obj.ViewObject.setEditorMode('IntervalX',0) + obj.ViewObject.setEditorMode('IntervalY',0) + obj.ViewObject.setEditorMode('IntervalZ',0) + else: + obj.ViewObject.setEditorMode('Axis',0) + obj.ViewObject.setEditorMode('NumberPolar',0) + obj.ViewObject.setEditorMode('Center',0) + obj.ViewObject.setEditorMode('Angle',0) + obj.ViewObject.setEditorMode('NumberX',2) + obj.ViewObject.setEditorMode('NumberY',2) + obj.ViewObject.setEditorMode('NumberY',2) + obj.ViewObject.setEditorMode('IntervalX',2) + obj.ViewObject.setEditorMode('IntervalY',2) + obj.ViewObject.setEditorMode('IntervalZ',2) + if prop in ["ArrayType","NumberX","NumberY","NumberZ","NumberPolar", + "IntervalX","IntervalY","IntervalZ","Angle","Center","Axis"]: self.createGeometry(obj) def createGeometry(self,obj): @@ -2752,14 +2783,15 @@ class _Array: if obj.Base: pl = obj.Placement if obj.ArrayType == "ortho": - sh = self.rectArray(obj.Base.Shape,obj.IntervalX,obj.IntervalY,obj.NumberX,obj.NumberY) + sh = self.rectArray(obj.Base.Shape,obj.IntervalX,obj.IntervalY, + obj.IntervalZ,obj.NumberX,obj.NumberY,obj.NumberZ) else: sh = self.polarArray(obj.Base.Shape,obj.Center,obj.Angle,obj.NumberPolar,obj.Axis) obj.Shape = sh if not DraftGeomUtils.isNull(pl): obj.Placement = pl - def rectArray(self,shape,xvector,yvector,xnum,ynum): + def rectArray(self,shape,xvector,yvector,zvector,xnum,ynum,znum): import Part base = [shape.copy()] for xcount in range(xnum): @@ -2769,12 +2801,19 @@ class _Array: nshape.translate(currentxvector) base.append(nshape) for ycount in range(ynum): - currentxvector=FreeCAD.Vector(currentxvector) - currentyvector=currentxvector.add(DraftVecUtils.scale(yvector,ycount)) + currentyvector=FreeCAD.Vector(currentxvector) + currentyvector=currentyvector.add(DraftVecUtils.scale(yvector,ycount)) if not ycount==0: nshape = shape.copy() nshape.translate(currentyvector) base.append(nshape) + for zcount in range(znum): + currentzvector=FreeCAD.Vector(currentyvector) + currentzvector=currentzvector.add(DraftVecUtils.scale(zvector,zcount)) + if not zcount==0: + nshape = shape.copy() + nshape.translate(currentzvector) + base.append(nshape) return Part.makeCompound(base) def polarArray(self,shape,center,angle,num,axis): From e882b8c35c1206962ee4fed6aa68556a35d942aa Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 1 Jul 2012 13:01:25 -0300 Subject: [PATCH 391/517] Arch: fixed bugs in vector renderer --- src/Mod/Arch/ArchCommands.py | 23 ++++---- src/Mod/Arch/ArchSectionPlane.py | 2 +- src/Mod/Arch/ArchVRM.py | 91 +++++++++++++++++++++----------- src/Mod/Draft/Draft.py | 21 +++++++- 4 files changed, 95 insertions(+), 42 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 2025a6f30..674f6eb50 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -154,31 +154,35 @@ def splitMesh(obj,mark=True): def makeFace(wires,method=2,cleanup=False): '''makeFace(wires): makes a face from a list of wires, finding which ones are holes''' - + #print "makeFace: start" import Part if not isinstance(wires,list): + if len(wires.Vertexes) < 3: + raise return Part.Face(wires) elif len(wires) == 1: + if len(wires[0].Vertexes) < 3: + raise return Part.Face(wires[0]) wires = wires[:] - print "inner wires found" + #print "makeFace: inner wires found" ext = None max_length = 0 # cleaning up rubbish in wires if cleanup: for i in range(len(wires)): wires[i] = DraftGeomUtils.removeInterVertices(wires[i]) - print "garbage removed" + #print "makeFace: garbage removed" for w in wires: # we assume that the exterior boundary is that one with # the biggest bounding box if w.BoundBox.DiagonalLength > max_length: max_length = w.BoundBox.DiagonalLength ext = w - print "exterior wire",ext + #print "makeFace: exterior wire",ext wires.remove(ext) if method == 1: @@ -186,23 +190,22 @@ def makeFace(wires,method=2,cleanup=False): # all interior wires mark a hole and must reverse # their orientation, otherwise Part.Face fails for w in wires: - print "reversing",w + #print "makeFace: reversing",w w.reverse() - print "reversed" # make sure that the exterior wires comes as first in the list wires.insert(0, ext) - print "done sorting", wires + #print "makeFace: done sorting", wires if wires: return Part.Face(wires) else: # method 2: use the cut method mf = Part.Face(ext) - print "external face:",mf + #print "makeFace: external face:",mf for w in wires: f = Part.Face(w) - print "internal face:",f + #print "makeFace: internal face:",f mf = mf.cut(f) - print "final face:",mf.Faces + #print "makeFace: final face:",mf.Faces return mf.Faces[0] def meshToShape(obj,mark=True): diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 460d3a7d1..2fe408e61 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -215,7 +215,7 @@ class _ArchDrawingView: import ArchVRM render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) - render.addObjects(objs) + render.addObjects(Draft.getGroupContents(objs)) render.cut(obj.Source.Shape) svg += render.getViewSVG(linewidth=linewidth) svg += render.getSectionSVG(linewidth=linewidth*2) diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index 2eefd8f27..b920acc4e 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -145,12 +145,14 @@ class Renderer: def reorient(self): "reorients the faces on the WP" + #print "VRM: start reorient" if not self.faces: return self.faces = [self.projectFace(f) for f in self.faces] if self.sections: self.sections = [self.projectFace(f) for f in self.sections] self.oriented = True + #print "VRM: end reorient" def removeHidden(self): "removes faces pointing outwards" @@ -166,7 +168,11 @@ class Renderer: def projectFace(self,face): "projects a single face on the WP" + #print "VRM: projectFace start" wires = [] + if not face[0].Wires: + if DEBUG: print "Error: Unable to project face on the WP" + return None norm = face[0].normalAt(0,0) for w in face[0].Wires: verts = [] @@ -177,7 +183,9 @@ class Renderer: verts.append(v) verts.append(verts[0]) if len(verts) > 2: + print verts wires.append(Part.makePolygon(verts)) + print "wires:",wires try: sh = ArchCommands.makeFace(wires) except: @@ -188,6 +196,7 @@ class Renderer: vnorm = self.wp.getLocalCoords(norm) if vnorm.getAngle(sh.normalAt(0,0)) > 1: sh.reverse() + #print "VRM: projectFace end" return [sh]+face[1:] def flattenFace(self,face): @@ -211,6 +220,7 @@ class Renderer: def cut(self,cutplane): "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: return if not self.shapes: @@ -277,6 +287,7 @@ class Renderer: self.trimmed = False self.sorted = False self.joined = False + if DEBUG: print "\n\n======> Finished cut\n\n" def isInside(self,vert,face): "Returns True if the vert is inside the face in Z projection" @@ -319,6 +330,15 @@ class Renderer: def compare(self,face1,face2): "zsorts two faces. Returns 1 if face1 is closer, 2 if face2 is closer, 0 otherwise" + #print face1,face2 + + if not face1: + if DEBUG: print "Warning, undefined face!" + return 31 + elif not face2: + if DEBUG: print "Warning, undefined face!" + return 32 + # theory from # http://www.siggraph.org/education/materials/HyperGraph/scanline/visibility/painter.htm # and practical application http://vrm.ao2.it/ (blender vector renderer) @@ -456,14 +476,17 @@ class Renderer: def sort(self): "projects a shape on the WP" + if DEBUG: print "\n\n======> Starting sort\n\n" if len(self.faces) <= 1: return if not self.trimmed: self.removeHidden() + if DEBUG: print "Done hidden face removal" if len(self.faces) == 1: return if not self.oriented: self.reorient() + if DEBUG: print "Done reorientation" faces = self.faces[:] if DEBUG: print "sorting ",len(self.faces)," faces" sfaces = [] @@ -492,6 +515,7 @@ class Renderer: for f2 in faces[1:]: if DEBUG: print "comparing face",str(self.faces.index(f1))," with face",str(self.faces.index(f2)) r = self.compare(f1,f2) + print "comparison result:",r if r == 1: faces.remove(f2) sfaces.append(f2) @@ -506,6 +530,10 @@ class Renderer: sfaces.append(f2) notfoundstack = 0 break + elif r == 31: + faces.remove(f1) + elif r == 32: + faces.remove(f2) else: # nothing found, move the face to the end of the pile faces.remove(f1) @@ -518,6 +546,7 @@ class Renderer: if DEBUG: print "done Z sorting. ", len(sfaces), " faces retained, ", len(self.faces)-len(sfaces), " faces lost." self.faces = sfaces self.sorted = True + if DEBUG: print "\n\n======> Finished sort\n\n" def buildDummy(self): "Builds a dummy object with faces spaced on the Z axis, for visual check" @@ -566,21 +595,22 @@ class Renderer: self.sort() svg = '' for f in self.faces: - fill = self.getFill(f[1]) - svg +=' Date: Mon, 2 Jul 2012 00:13:34 +0200 Subject: [PATCH 392/517] Sketcher: support arcs in the polyline tool (jonasthomas) --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 230 ++++++++++++++++---- src/Mod/Sketcher/Gui/DrawSketchHandler.h | 1 + src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 5 + 3 files changed, 199 insertions(+), 37 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index fa9679fe2..7ba72897a 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -488,8 +488,10 @@ class DrawSketchHandlerLineSet: public DrawSketchHandler { public: DrawSketchHandlerLineSet() - : Mode(STATUS_SEEK_First),EditCurve(2),firstPoint(-1),previousCurve(-1){} - virtual ~DrawSketchHandlerLineSet(){} + : Mode(STATUS_SEEK_First),LineMode(LINE_MODE_Line),EditCurve(2), + firstCurve(-1),firstPoint(-1),previousCurve(-1),previousPoint(-1), + isTangent(false) {} + virtual ~DrawSketchHandlerLineSet() {} /// mode table enum SelectMode { STATUS_SEEK_First, /**< enum value ----. */ @@ -498,6 +500,41 @@ public: STATUS_Close }; + enum SelectLineMode + { + LINE_MODE_Arc, + LINE_MODE_Line + }; + + virtual void registerPressedKey(bool pressed, int key) + { + if (key == SoKeyboardEvent::A && pressed) { + if (LineMode != LINE_MODE_Arc) { + Base::Vector2D onSketchPos = EditCurve[isTangent ? 2 : 1]; + LineMode = LINE_MODE_Arc; + if (previousCurve != -1) + isTangent = true; + else + isTangent = false; + EditCurve.resize(32); + mouseMove(onSketchPos); // trigger an update of EditCurve + } + else { + Base::Vector2D onSketchPos = EditCurve[29]; + LineMode = LINE_MODE_Line; + if (previousCurve != -1) { + const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(previousCurve); + if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) + isTangent = true; + else + isTangent = false; + } + EditCurve.resize(isTangent ? 3 : 2); + mouseMove(onSketchPos); // trigger an update of EditCurve + } + } + } + virtual void activated(ViewProviderSketch *sketchgui) { setCursor(QPixmap(cursor_createlineset),7,7); @@ -513,11 +550,72 @@ public: } } else if (Mode==STATUS_SEEK_Second){ - EditCurve[1] = onSketchPos; - sketchgui->drawEdit(EditCurve); - if (seekAutoConstraint(sugConstr2, onSketchPos, onSketchPos - EditCurve[0])) { - renderSuggestConstraintsCursor(sugConstr2); - return; + if (LineMode == LINE_MODE_Line) { + EditCurve[isTangent ? 2 : 1] = onSketchPos; + if (isTangent) { + Base::Vector2D Tangent(dirVec.x,dirVec.y); + EditCurve[1].ProjToLine(EditCurve[2] - EditCurve[0], Tangent); + EditCurve[1] = EditCurve[0] + EditCurve[1]; + } + sketchgui->drawEdit(EditCurve); + if (!isTangent) { + sugConstr2 = sugConstr1; // Copy the previously found constraints + if (seekAutoConstraint(sugConstr2, onSketchPos, onSketchPos - EditCurve[0])) { + renderSuggestConstraintsCursor(sugConstr2); + return; + } + } + } + else if (LineMode == LINE_MODE_Arc) { + Base::Vector2D Tangent(dirVec.x,dirVec.y); + float theta = Tangent.GetAngle(onSketchPos - EditCurve[0]); + arcRadius = (onSketchPos - EditCurve[0]).Length()/(2.0*sin(theta)); + // At this point we need a unit normal vector pointing torwards + // the center of the arc we are drawing. Derivation of the formula + // used here can be found at http://people.richland.edu/james/lecture/m116/matrices/area.html + float x1 = EditCurve[0].fX; + float y1 = EditCurve[0].fY; + float x2 = x1 + Tangent.fX; + float y2 = y1 + Tangent.fY; + float x3 = onSketchPos.fX; + float y3 = onSketchPos.fY; + if ((x2*y3-x3*y2)-(x1*y3-x3*y1)+(x1*y2-x2*y1) > 0) + arcRadius *= -1; + + Base::Vector3d centerVec = dirVec % Base::Vector3d(0.f,0.f,1.0); + centerVec.Normalize(); // this step should actually be redundant + + CenterPoint = EditCurve[0] + Base::Vector2D(arcRadius * centerVec.x, arcRadius * centerVec.y); + + float rx = EditCurve[0].fX - CenterPoint.fX; + float ry = EditCurve[0].fY - CenterPoint.fY; + + startAngle = atan2(ry,rx); + + float rxe = onSketchPos.fX - CenterPoint.fX; + float rye = onSketchPos.fY - CenterPoint.fY; + float arcAngle = atan2(-rxe*ry + rye*rx, rxe*rx + rye*ry); + if (arcRadius >= 0 && arcAngle > 0) + arcAngle -= 2*M_PI; + if (arcRadius < 0 && arcAngle < 0) + arcAngle += 2*M_PI; + endAngle = startAngle + arcAngle; + + for (int i=1; i <= 29; i++) { + float angle = i*arcAngle/29.0; + float dx = rx * cos(angle) - ry * sin(angle); + float dy = rx * sin(angle) + ry * cos(angle); + EditCurve[i] = Base::Vector2D(CenterPoint.fX + dx, CenterPoint.fY + dy); + } + + EditCurve[30] = CenterPoint; + EditCurve[31] = EditCurve[0]; + + sketchgui->drawEdit(EditCurve); + if (seekAutoConstraint(sugConstr3, onSketchPos, Base::Vector2D(0.f,0.f))) { + renderSuggestConstraintsCursor(sugConstr3); + return; + } } } applyCursor(); @@ -529,15 +627,31 @@ public: // remember our first point firstPoint = getHighestVertexIndex() + 1; firstCurve = getHighestCurveIndex() + 1; + // TODO: here we should check if there is a preselected point + // and set up a transition from the neighbouring segment. + // (peviousCurve, previousPoint, dirVec, isTangent) + if (LineMode == LINE_MODE_Line) + EditCurve.resize(isTangent ? 3 : 2); + else if (LineMode == LINE_MODE_Arc) + EditCurve.resize(32); EditCurve[0] = onSketchPos; Mode = STATUS_SEEK_Second; } else if (Mode==STATUS_SEEK_Second) { - EditCurve[1] = onSketchPos; + if (LineMode == LINE_MODE_Line) { + EditCurve[isTangent ? 2 : 1] = onSketchPos; + if (isTangent) { + Base::Vector2D Tangent(dirVec.x,dirVec.y); + EditCurve[1].ProjToLine(EditCurve[2] - EditCurve[0], Tangent); + EditCurve[1] = EditCurve[0] + EditCurve[1]; + } + } + else if (LineMode == LINE_MODE_Arc) + EditCurve[29] = onSketchPos; // not so important sketchgui->drawEdit(EditCurve); applyCursor(); // exit on clicking exactly at the same position (e.g. double click) - if (EditCurve[1] == EditCurve[0]) { + if (onSketchPos == EditCurve[0]) { unsetCursor(); EditCurve.clear(); resetPositionText(); @@ -554,32 +668,46 @@ public: virtual bool releaseButton(Base::Vector2D onSketchPos) { - if (Mode==STATUS_Do || Mode==STATUS_Close) { - // open the transaction - Gui::Command::openCommand("add sketch wire"); - // issue the geometry - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addGeometry(Part.Line(App.Vector(%f,%f,0),App.Vector(%f,%f,0)))", - sketchgui->getObject()->getNameInDocument(), - EditCurve[0].fX,EditCurve[0].fY,EditCurve[1].fX,EditCurve[1].fY); + if (Mode == STATUS_Do || Mode == STATUS_Close) { + if (LineMode == LINE_MODE_Line) { + // open the transaction + Gui::Command::openCommand("Add sketch wire"); + // issue the geometry + Gui::Command::doCommand(Gui::Command::Doc, + "App.ActiveDocument.%s.addGeometry(Part.Line(App.Vector(%f,%f,0),App.Vector(%f,%f,0)))", + sketchgui->getObject()->getNameInDocument(), + EditCurve[0].fX,EditCurve[0].fY,EditCurve[1].fX,EditCurve[1].fY); + } + else if (LineMode == LINE_MODE_Arc) { // We're dealing with an Arc + Gui::Command::openCommand("Add sketch wire"); + Gui::Command::doCommand(Gui::Command::Doc, + "App.ActiveDocument.%s.addGeometry(Part.ArcOfCircle" + "(Part.Circle(App.Vector(%f,%f,0),App.Vector(0,0,1),%f),%f,%f))", + sketchgui->getObject()->getNameInDocument(), + CenterPoint.fX, CenterPoint.fY, std::abs(arcRadius), + std::min(startAngle,endAngle), std::max(startAngle,endAngle)); + } // issue the constraint if (previousCurve != -1) { - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%i,2,%i,1)) " - ,sketchgui->getObject()->getNameInDocument() - ,previousCurve-1,previousCurve - ); - } - - if (Mode==STATUS_Close) { - // close the loop by constrain to the first curve point - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%i,2,%i,1)) " - ,sketchgui->getObject()->getNameInDocument() - ,previousCurve,firstCurve - ); - + int coincidentPoint = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 2 : 1; + // in case of a tangency constraint, the coincident constraint is redundant + Gui::Command::doCommand(Gui::Command::Doc, + "App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('%s',%i,%i,%i,%i)) ", + sketchgui->getObject()->getNameInDocument(), + isTangent ? "Tangent" : "Coincident", + previousCurve, previousPoint /* == 2 */, previousCurve+1, coincidentPoint); + if (Mode == STATUS_Close) + // close the loop by constrain to the first curve point + Gui::Command::doCommand(Gui::Command::Doc, + "App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%i,%i,%i,%i)) ", + sketchgui->getObject()->getNameInDocument(), + previousCurve+1,coincidentPoint,firstCurve,firstPoint); Gui::Command::commitCommand(); Gui::Command::updateActive(); + } + if (Mode == STATUS_Close) { if (sugConstr2.size() > 0) { // exclude any coincidence constraints std::vector sugConstr; @@ -612,35 +740,63 @@ public: sugConstr2.clear(); } - //remember the vertex for the next rounds constraint... - previousCurve = getHighestCurveIndex() + 1; + // remember the vertex for the next rounds constraint.. + previousCurve = getHighestCurveIndex(); + previousPoint = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 1 : 2; // setup for the next line segment // Use updated endPoint as autoconstraints can modify the position + // Need to determine if the previous element was a line or an arc or ??? const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(getHighestCurveIndex()); if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { const Part::GeomLineSegment *lineSeg = dynamic_cast(geom); EditCurve[0] = Base::Vector2D(lineSeg->getEndPoint().x, lineSeg->getEndPoint().y); + dirVec.Set(lineSeg->getEndPoint().x - lineSeg->getStartPoint().x, + lineSeg->getEndPoint().y - lineSeg->getStartPoint().y, + 0.f); } - else - EditCurve[0] = onSketchPos; + else if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) { + assert(LineMode == LINE_MODE_Arc); + const Part::GeomArcOfCircle *arcSeg = dynamic_cast(geom); + if (startAngle > endAngle) { + EditCurve[0] = Base::Vector2D(arcSeg->getStartPoint().x,arcSeg->getStartPoint().y); + dirVec = Base::Vector3d(0.f,0.f,-1.0) % (arcSeg->getStartPoint()-arcSeg->getCenter()); + } + else { // cw arcs are rendered in reverse + EditCurve[0] = Base::Vector2D(arcSeg->getEndPoint().x,arcSeg->getEndPoint().y); + dirVec = Base::Vector3d(0.f,0.f,1.0) % (arcSeg->getEndPoint()-arcSeg->getCenter()); + } + } + dirVec.Normalize(); - sketchgui->drawEdit(EditCurve); applyCursor(); - Mode = STATUS_SEEK_Second; + isTangent = (LineMode == LINE_MODE_Arc); + LineMode = LINE_MODE_Line; + EditCurve.resize(isTangent ? 3 : 2); + EditCurve[1] = EditCurve[0]; + if (isTangent) + EditCurve[2] = EditCurve[0]; + sketchgui->drawEdit(EditCurve); } } return true; } protected: SelectMode Mode; + SelectLineMode LineMode; + std::vector EditCurve; - Base::Vector2D lastPos; int firstPoint; int firstCurve; + int previousPoint; int previousCurve; - std::vector sugConstr1, sugConstr2; + std::vector sugConstr1, sugConstr2, sugConstr3; + + Base::Vector2D CenterPoint; + Base::Vector3d dirVec; + bool isTangent; + float startAngle, endAngle, arcRadius; }; diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.h b/src/Mod/Sketcher/Gui/DrawSketchHandler.h index 68ba93d2a..980ebdf75 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.h @@ -72,6 +72,7 @@ public: virtual bool pressButton(Base::Vector2D onSketchPos)=0; virtual bool releaseButton(Base::Vector2D onSketchPos)=0; virtual bool onSelectionChanged(const Gui::SelectionChanges& msg) { return false; }; + virtual void registerPressedKey(bool pressed, int key){}; virtual void quit(void); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 36c22a0db..235b4c45a 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -281,6 +281,11 @@ bool ViewProviderSketch::keyPressed(bool pressed, int key) } return false; } + default: + { + if (edit && edit->sketchHandler) + edit->sketchHandler->registerPressedKey(pressed,key); + } } return true; // handle all other key events From 8fdcaa0db8ac670227920573c986696df091957b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 2 Jul 2012 09:54:41 -0300 Subject: [PATCH 393/517] Draft: small fix to dimensions --- src/Mod/Draft/Draft.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index c384fef91..5e680c116 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -253,7 +253,7 @@ def shapify(obj): FreeCAD.ActiveDocument.recompute() return newobj -def getGroupContents(objectslist): +def getGroupContents(objectslist,walls=False): '''getGroupContents(objectlist): if any object of the given list is a group, its content is appened to the list, which is returned''' newlist = [] @@ -262,13 +262,20 @@ def getGroupContents(objectslist): newlist.extend(getGroupContents(obj.Group)) else: newlist.append(obj) + if walls: + if getType(obj) == "Wall": + for o in obj.OutList: + if (getType(o) == "Window") or isClone(o,"Window"): + newlist.append(o) return newlist def printShape(shape): """prints detailed information of a shape""" print "solids: ", len(shape.Solids) print "faces: ", len(shape.Faces) - print "wires: ",len(shape.Wires) + print "wires: ", len(shape.Wires) + print "edges: ", len(shape.Edges) + print "verts: ", len(shape.Vertexes) if shape.Faces: for f in range(len(shape.Faces)): print "face ",f,":" @@ -1964,7 +1971,7 @@ class _ViewProviderDimension: [p2.x,p2.y,p2.z], [p3.x,p3.y,p3.z], [p4.x,p4.y,p4.z]]) - self.line.numVertices.setValues([4]) + self.line.numVertices.setValue(4) else: ts = (len(text)*obj.ViewObject.FontSize)/4 rm = ((p3.sub(p2)).Length/2)-ts From 7032f5f329f17aaf599cb0b8d5225c2a8bc80eec Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 2 Jul 2012 15:31:23 +0200 Subject: [PATCH 394/517] 0000762: cPickle allows to trigger arbitrary code execution from FCStd file --- src/App/PropertyPythonObject.cpp | 57 +++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/src/App/PropertyPythonObject.cpp b/src/App/PropertyPythonObject.cpp index c335dabf5..b461075ca 100644 --- a/src/App/PropertyPythonObject.cpp +++ b/src/App/PropertyPythonObject.cpp @@ -82,10 +82,20 @@ std::string PropertyPythonObject::toString() const std::string repr; Base::PyGILStateLocker lock; try { - Py::Module pickle(PyImport_ImportModule("cPickle"),true); + Py::Module pickle(PyImport_ImportModule("json"),true); Py::Callable method(pickle.getAttr(std::string("dumps"))); + Py::Object dump; + if (this->object.hasAttr("__getstate__")) { + Py::Tuple args(0); + Py::Callable state(this->object.getAttr("__getstate__")); + dump = state.apply(args); + } + else if (this->object.hasAttr("__dict__")) { + dump = this->object.getAttr("__dict__"); + } + Py::Tuple args(1); - args.setItem(0, this->object); + args.setItem(0, dump); Py::Object res = method.apply(args); Py::String str(res); repr = str.as_std_string(); @@ -102,12 +112,21 @@ void PropertyPythonObject::fromString(const std::string& repr) { Base::PyGILStateLocker lock; try { - Py::Module pickle(PyImport_ImportModule("cPickle"),true); + Py::Module pickle(PyImport_ImportModule("json"),true); Py::Callable method(pickle.getAttr(std::string("loads"))); Py::Tuple args(1); args.setItem(0, Py::String(repr)); Py::Object res = method.apply(args); - this->object = res; + + if (this->object.hasAttr("__setstate__")) { + Py::Tuple args(1); + args.setItem(0, res); + Py::Callable state(this->object.getAttr("__setstate__")); + state.apply(args); + } + else { + this->object.setAttr("__dict__", res); + } } catch (Py::Exception&) { Base::PyException e; // extract the Python error text @@ -210,7 +229,24 @@ void PropertyPythonObject::Save (Base::Writer &writer) const repr = Base::base64_encode((const unsigned char*)repr.c_str(), repr.size()); std::string val = /*encodeValue*/(repr); writer.Stream() << writer.ind() << "object.hasAttr("__module__") && this->object.hasAttr("__class__")) { + Py::String mod(this->object.getAttr("__module__")); + Py::Object cls(this->object.getAttr("__class__")); + if (cls.hasAttr("__name__")) { + Py::String name(cls.getAttr("__name__")); + writer.Stream() << " module=\"" << (std::string)mod << "\"" + << " class=\"" << (std::string)name << "\""; + } + } + } + catch (Py::Exception&) { + Base::PyException e; // extract the Python error text + Base::Console().Warning("PropertyPythonObject::Save: %s\n", e.what()); + } + saveObject(writer); writer.Stream() << "/>" << std::endl; //} @@ -237,6 +273,17 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader) buffer = decodeValue(buffer); } + try { + 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); + } + } + catch (Py::Exception&) { + Base::PyException e; // extract the Python error text + Base::Console().Warning("PropertyPythonObject::Restore: %s\n", e.what()); + } + aboutToSetValue(); this->fromString(buffer); restoreObject(reader); From 920fc39999a30ede29c869b6d5fa3697ce5da194 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 2 Jul 2012 15:40:08 +0200 Subject: [PATCH 395/517] Add TKFeat --- cMake/FindOpenCasCade.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cMake/FindOpenCasCade.cmake b/cMake/FindOpenCasCade.cmake index 678d4f722..1b04f709d 100644 --- a/cMake/FindOpenCasCade.cmake +++ b/cMake/FindOpenCasCade.cmake @@ -78,6 +78,7 @@ IF(OCC_LIBRARY) TKSTEPBase TKSTEPAttr TKHLR + TKFeat ) ENDIF(OCC_LIBRARY) From 1b45282e902a89e62e02219a6aff8ee68de133de Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 2 Jul 2012 17:04:13 +0200 Subject: [PATCH 396/517] Enhance Branding --- src/Gui/Application.cpp | 12 +++++++++--- src/Gui/CommandDoc.cpp | 2 +- src/Gui/CommandStd.cpp | 16 ++-------------- src/Gui/Document.cpp | 2 +- src/Gui/MainWindow.cpp | 5 +---- src/Gui/Splashscreen.cpp | 6 ++---- src/Gui/Thumbnail.cpp | 2 +- 7 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index ad5663902..5fdc7ed29 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -1545,8 +1545,16 @@ void Application::runApplication(void) int argc = App::Application::GetARGC(); GUIApplication mainApp(argc, App::Application::GetARGV()); // set application icon and window title + const std::map& cfg = App::Application::Config(); + std::map::const_iterator it; + it = cfg.find("Application"); + if (it != cfg.end()) { + mainApp.setApplicationName(QString::fromUtf8(it->second.c_str())); + } + else { + mainApp.setApplicationName(QString::fromUtf8(App::GetApplication().getExecutableName())); + } mainApp.setWindowIcon(Gui::BitmapFactory().pixmap(App::Application::Config()["AppIcon"].c_str())); - mainApp.setApplicationName(QString::fromAscii(App::GetApplication().getExecutableName())); QString plugin; plugin = QString::fromUtf8(App::GetApplication().GetHomePath()); plugin += QLatin1String("/plugins"); @@ -1606,8 +1614,6 @@ void Application::runApplication(void) QString home = QString::fromUtf8(App::GetApplication().GetHomePath()); - const std::map& cfg = App::Application::Config(); - std::map::const_iterator it; it = cfg.find("WindowTitle"); if (it != cfg.end()) { QString title = QString::fromUtf8(it->second.c_str()); diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 3d728e394..9520b80b3 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -292,7 +292,7 @@ StdCmdMergeProjects::StdCmdMergeProjects() void StdCmdMergeProjects::activated(int iMsg) { - QString exe = QString::fromUtf8(App::GetApplication().getExecutableName()); + QString exe = qApp->applicationName(); QString project = QFileDialog::getOpenFileName(Gui::getMainWindow(), QString::fromUtf8(QT_TR_NOOP("Merge project")), QDir::homePath(), QString::fromUtf8(QT_TR_NOOP("%1 document (*.fcstd)")).arg(exe)); diff --git a/src/Gui/CommandStd.cpp b/src/Gui/CommandStd.cpp index 3861e1e64..dba6d5f71 100644 --- a/src/Gui/CommandStd.cpp +++ b/src/Gui/CommandStd.cpp @@ -193,13 +193,7 @@ Action * StdCmdAbout::createAction(void) { Action *pcAction; - QString exe; - std::map& cfg = App::Application::Config(); - std::map::iterator it = cfg.find("Application"); - if (it != cfg.end()) - exe = QString::fromUtf8(it->second.c_str()); - else - exe = QString::fromUtf8(App::GetApplication().getExecutableName()); + QString exe = qApp->applicationName(); pcAction = new Action(this,getMainWindow()); pcAction->setText(QCoreApplication::translate( this->className(), sMenuText, 0, @@ -235,13 +229,7 @@ void StdCmdAbout::activated(int iMsg) void StdCmdAbout::languageChange() { if (_pcAction) { - QString exe; - std::map& cfg = App::Application::Config(); - std::map::iterator it = cfg.find("Application"); - if (it != cfg.end()) - exe = QString::fromUtf8(it->second.c_str()); - else - exe = QString::fromUtf8(App::GetApplication().getExecutableName()); + QString exe = qApp->applicationName(); _pcAction->setText(QCoreApplication::translate( this->className(), sMenuText, 0, QCoreApplication::CodecForTr).arg(exe)); diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 0192d3e86..3b339bff4 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -504,7 +504,7 @@ bool Document::saveAs(void) { getMainWindow()->statusBar()->showMessage(QObject::tr("Save document under new filename...")); - QString exe = QString::fromUtf8(App::GetApplication().getExecutableName()); + QString exe = qApp->applicationName(); QString fn = QFileDialog::getSaveFileName(getMainWindow(), QObject::tr("Save %1 Document").arg(exe), FileDialog::getWorkingDirectory(), QObject::tr("%1 document (*.FCStd)").arg(exe)); if (!fn.isEmpty()) { diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 8c129d761..365fc7605 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -1318,10 +1318,7 @@ QPixmap MainWindow::splashImage() const // include application name and version number std::map::const_iterator tc = App::Application::Config().find("SplashInfoColor"); if (tc != App::Application::Config().end()) { - QString title = QString::fromAscii(App::Application::Config()["ExeName"].c_str()); - std::map::iterator it = App::Application::Config().find("Application"); - if (it != App::Application::Config().end()) - title = QString::fromUtf8(it->second.c_str()); + QString title = qApp->applicationName(); QString major = QString::fromAscii(App::Application::Config()["BuildVersionMajor"].c_str()); QString minor = QString::fromAscii(App::Application::Config()["BuildVersionMinor"].c_str()); QString version = QString::fromAscii("%1.%2").arg(major).arg(minor); diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 9464a5da1..7956a634f 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -267,11 +267,9 @@ static QString getPlatform() void AboutDialog::setupLabels() { + QString exeName = qApp->applicationName(); std::map& config = App::Application::Config(); - QString exeName = QString::fromAscii(config["ExeName"].c_str()); - std::map::iterator it = config.find("WindowTitle"); - if (it != config.end()) - exeName = QString::fromUtf8(it->second.c_str()); + std::map::iterator it; QString banner = QString::fromUtf8(config["CopyrightInfo"].c_str()); banner = banner.left( banner.indexOf(QLatin1Char('\n')) ); QString major = QString::fromAscii(config["BuildVersionMajor"].c_str()); diff --git a/src/Gui/Thumbnail.cpp b/src/Gui/Thumbnail.cpp index e6f362ad0..354c0e357 100644 --- a/src/Gui/Thumbnail.cpp +++ b/src/Gui/Thumbnail.cpp @@ -97,7 +97,7 @@ void Thumbnail::SaveDocFile (Base::Writer &writer) const // according to specification add some meta-information to the image uint mt = QDateTime::currentDateTime().toTime_t(); QString mtime = QString::fromAscii("%1").arg(mt); - img.setText(QLatin1String("Software"), QString::fromUtf8(App::GetApplication().getExecutableName())); + img.setText(QLatin1String("Software"), qApp->applicationName()); img.setText(QLatin1String("Thumb::Mimetype"), QLatin1String("application/x-extension-fcstd")); img.setText(QLatin1String("Thumb::MTime"), mtime); img.setText(QLatin1String("Thumb::URI"), this->uri.toString()); From de1543b5fef425af8c3292823c9f0d78f33a613a Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 3 Jul 2012 01:18:44 +0200 Subject: [PATCH 397/517] Fix build error --- src/Gui/Thumbnail.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Gui/Thumbnail.cpp b/src/Gui/Thumbnail.cpp index 354c0e357..df5cbdf3a 100644 --- a/src/Gui/Thumbnail.cpp +++ b/src/Gui/Thumbnail.cpp @@ -24,6 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include From b7ed88ad771728f7221ba6b6093bb56169ae2d91 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 3 Jul 2012 11:11:01 +0200 Subject: [PATCH 398/517] Add TKFeat --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 602f37de4..b1e35ec11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,7 +206,7 @@ MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK_CHECKFILE6X FREECAD_LIBPACK_CHECKFILE7X) if( ${OCE_FOUND} ) message("-- OpenCASCADE Community Edition has been found.") add_definitions ( -DHAVE_CONFIG_H ) - 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" ) #lib list copied from FreeCAD's FindOpenCasCade.cmake + set( OCC_LIBRARIES "TKFeat;TKFillet;TKMesh;TKernel;TKG2d;TKG3d;TKMath;TKIGES;TKSTL;TKShHealing;TKXSBase;TKBool;TKBO;TKBRep;TKTopAlgo;TKGeomAlgo;TKGeomBase;TKOffset;TKPrim;TKSTEP;TKSTEPBase;TKSTEPAttr;TKHLR" ) #lib list copied from FreeCAD's FindOpenCasCade.cmake set( OCC_INCLUDE_DIR ${OCE_INCLUDE_DIRS} ) set( OCC_FOUND ${OCE_FOUND} ) else() #look for OpenCASCADE From f8c299c85865f192a4b122238d07a0574e263c32 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 3 Jul 2012 14:32:19 +0200 Subject: [PATCH 399/517] 0000762: cPickle allows to trigger arbitrary code execution from FCStd file --- src/App/PropertyPythonObject.cpp | 49 +++++++++++++++++++++++++++++++- src/App/PropertyPythonObject.h | 1 + 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/App/PropertyPythonObject.cpp b/src/App/PropertyPythonObject.cpp index b461075ca..611122f2a 100644 --- a/src/App/PropertyPythonObject.cpp +++ b/src/App/PropertyPythonObject.cpp @@ -35,6 +35,7 @@ #include #include #include +#include using namespace App; @@ -134,6 +135,31 @@ void PropertyPythonObject::fromString(const std::string& repr) } } +void PropertyPythonObject::loadPickle(const std::string& str) +{ + // find the custom attributes and restore them + try { + std::string buffer = str; + boost::regex pickle("S'(\\w+)'.+S'(\\w+)'\\n"); + boost::match_results what; + std::string::const_iterator start, end; + start = buffer.begin(); + end = buffer.end(); + while (boost::regex_search(start, end, what, pickle)) { + std::string key = std::string(what[1].first, what[1].second); + std::string val = std::string(what[2].first, what[2].second); + this->object.setAttr(key, Py::String(val)); + buffer = std::string(what[2].second, end); + start = buffer.begin(); + end = buffer.end(); + } + } + catch (Py::Exception&) { + Base::PyException e; // extract the Python error text + Base::Console().Warning("PropertyPythonObject::loadPickle: %s\n", e.what()); + } +} + std::string PropertyPythonObject::encodeValue(const std::string& str) const { std::string tmp; @@ -264,6 +290,8 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader) reader.addFile(file.c_str(),this); } else { + bool load_json=false; + bool load_pickle=false; std::string buffer = reader.getAttribute("value"); if (reader.hasAttribute("encoded") && strcmp(reader.getAttribute("encoded"),"yes") == 0) { @@ -274,9 +302,23 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader) } try { + boost::regex pickle("^\\(i(\\w+)\\n(\\w+)\\n"); + boost::match_results what; + std::string::const_iterator start, end; + start = buffer.begin(); + 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); + load_json = true; + } + else if (boost::regex_search(start, end, what, pickle)) { + std::string nam = std::string(what[1].first, what[1].second); + std::string cls = std::string(what[2].first, what[2].second); + Py::Module mod(PyImport_ImportModule(nam.c_str()),true); + this->object = PyInstance_NewRaw(mod.getAttr(cls).ptr(), 0); + load_pickle = true; + buffer = std::string(what[2].second, end); } } catch (Py::Exception&) { @@ -285,7 +327,12 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader) } aboutToSetValue(); - this->fromString(buffer); + if (load_json) + this->fromString(buffer); + else if (load_pickle) + this->loadPickle(buffer); + else + Base::Console().Warning("PropertyPythonObject::Restore: unsupported serialisation: %s\n", buffer); restoreObject(reader); hasSetValue(); } diff --git a/src/App/PropertyPythonObject.h b/src/App/PropertyPythonObject.h index 381929995..bd4bec933 100644 --- a/src/App/PropertyPythonObject.h +++ b/src/App/PropertyPythonObject.h @@ -77,6 +77,7 @@ private: void restoreObject(Base::XMLReader &reader); std::string encodeValue(const std::string& str) const; std::string decodeValue(const std::string& str) const; + void loadPickle(const std::string& str); Py::Object object; }; From 322260c61b374069d25ffb5c25ec229813d4bf93 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 3 Jul 2012 11:07:54 -0300 Subject: [PATCH 400/517] Arch: Lots of bugfixes in vector rendering --- src/Mod/Arch/ArchCommands.py | 3 +- src/Mod/Arch/ArchComponent.py | 3 +- src/Mod/Arch/ArchSectionPlane.py | 4 +- src/Mod/Arch/ArchVRM.py | 30 ++-- src/Mod/Draft/Draft.py | 38 ++--- src/Mod/Draft/DraftGeomUtils.py | 252 +++++++++++++++++-------------- 6 files changed, 171 insertions(+), 159 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 674f6eb50..1ddf46495 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -154,7 +154,7 @@ def splitMesh(obj,mark=True): def makeFace(wires,method=2,cleanup=False): '''makeFace(wires): makes a face from a list of wires, finding which ones are holes''' - #print "makeFace: start" + #print "makeFace: start:", wires import Part if not isinstance(wires,list): @@ -162,6 +162,7 @@ def makeFace(wires,method=2,cleanup=False): raise return Part.Face(wires) elif len(wires) == 1: + import Draft;Draft.printShape(wires[0]) if len(wires[0].Vertexes) < 3: raise return Part.Face(wires[0]) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 5e0206fe9..7b220f588 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -62,7 +62,8 @@ def addToComponent(compobject,addobject,mod=None): l = getattr(compobject,mod) l.append(addobject) setattr(compobject,mod,l) - addobject.ViewObject.hide() + if mod != "Objects": + addobject.ViewObject.hide() else: for a in attribs[:3]: if hasattr(compobject,a): diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 2fe408e61..f71828a96 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,math,Draft,ArchCommands, DraftVecUtils +import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,math,Draft,ArchCommands,DraftVecUtils from FreeCAD import Vector from PyQt4 import QtCore from pivy import coin @@ -215,7 +215,7 @@ class _ArchDrawingView: import ArchVRM render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) - render.addObjects(Draft.getGroupContents(objs)) + render.addObjects(Draft.getGroupContents(objs,walls=True)) render.cut(obj.Source.Shape) svg += render.getViewSVG(linewidth=linewidth) svg += render.getSectionSVG(linewidth=linewidth*2) diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index b920acc4e..0fe897aa1 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -168,7 +168,7 @@ class Renderer: def projectFace(self,face): "projects a single face on the WP" - #print "VRM: projectFace start" + #print "VRM: projectFace start: ",len(face[0].Vertexes)," verts, ",len(face[0].Edges)," edges" wires = [] if not face[0].Wires: if DEBUG: print "Error: Unable to project face on the WP" @@ -177,15 +177,16 @@ class Renderer: for w in face[0].Wires: verts = [] edges = DraftGeomUtils.sortEdges(w.Edges) + #print len(edges)," edges after sorting" for e in edges: v = e.Vertexes[0].Point + #print v v = self.wp.getLocalCoords(v) verts.append(v) verts.append(verts[0]) if len(verts) > 2: - print verts + #print "new wire with ",len(verts) wires.append(Part.makePolygon(verts)) - print "wires:",wires try: sh = ArchCommands.makeFace(wires) except: @@ -196,7 +197,7 @@ class Renderer: vnorm = self.wp.getLocalCoords(norm) if vnorm.getAngle(sh.normalAt(0,0)) > 1: sh.reverse() - #print "VRM: projectFace end" + #print "VRM: projectFace end: ",len(sh.Vertexes)," verts" return [sh]+face[1:] def flattenFace(self,face): @@ -272,12 +273,8 @@ class Renderer: shapes.append([c]+sh[1:]) for f in c.Faces: faces.append([f]+sh[1:]) - sec = sol.section(cutface) - if sec.Edges: - wires = DraftGeomUtils.findWires(sec.Edges) - for w in wires: - sec = Part.Face(w) - sections.append([sec,fill]) + if DraftGeomUtils.isCoplanar([f,cutface]): + sections.append([f,fill]) self.shapes = shapes self.faces = faces self.sections = sections @@ -573,19 +570,21 @@ class Renderer: def getPathData(self,w): "Returns a SVG path data string from a 2D wire" + def tostr(val): + return str(round(val,DraftVecUtils.precision())) edges = DraftGeomUtils.sortEdges(w.Edges) v = edges[0].Vertexes[0].Point - svg = 'M '+ str(v.x) +' '+ str(v.y) + ' ' + svg = 'M '+ tostr(v.x) +' '+ tostr(v.y) + ' ' for e in edges: if isinstance(e.Curve,Part.Line) or isinstance(e.Curve,Part.BSplineCurve): v = e.Vertexes[-1].Point - svg += 'L '+ str(v.x) +' '+ str(v.y) + ' ' + svg += 'L '+ tostr(v.x) +' '+ tostr(v.y) + ' ' elif isinstance(e.Curve,Part.Circle): r = e.Curve.Radius v = e.Vertexes[-1].Point - svg += 'A '+ str(r) + ' '+ str(r) +' 0 0 1 '+ str(v.x) +' ' - svg += str(v.y) + ' ' - svg += 'z ' + svg += 'A '+ tostr(r) + ' '+ tostr(r) +' 0 0 1 '+ tostr(v.x) +' ' + svg += tostr(v.y) + ' ' + svg += 'Z ' return svg def getViewSVG(self,linewidth=0.01): @@ -625,6 +624,7 @@ class Renderer: svg +=' a2: + a1,a2 = a2,a1 + + #print "creating sketch arc from ",cu, ", p1=",v1, " (",math.degrees(a1), "d) p2=",v2," (", math.degrees(a2),"d)" + p= Part.ArcOfCircle(cu,a1,a2) + return p + else: + return edge.Curve def mirror (point, edge): "finds mirror point relative to an edge" @@ -445,98 +451,91 @@ def isLine(bsp): return True def sortEdges(lEdges, aVertex=None): - "an alternative, more accurate version of Part.__sortEdges__" + "an alternative, more accurate version of Part.__sortEdges__" - #There is no reason to limit this to lines only because every non-closed edge always - #has exactly two vertices (wmayer) - #for e in lEdges: - # if not isinstance(e.Curve,Part.Line): - # print "Warning: sortedges cannot treat wired containing curves yet." - # return lEdges - - def isSameVertex(V1, V2): - ''' Test if vertexes have same coordinates with precision 10E(-precision)''' - if round(V1.X-V2.X,1)==0 and round(V1.Y-V2.Y,1)==0 and round(V1.Z-V2.Z,1)==0 : - return True - else : - return False - - def lookfor(aVertex, inEdges): - ''' Look for (aVertex, inEdges) returns count, the position of the instance - the position in the instance and the instance of the Edge''' - count = 0 - linstances = [] #lists the instances of aVertex - for i in range(len(inEdges)) : - for j in range(2) : - if isSameVertex(aVertex,inEdges[i].Vertexes[j-1]): - instance = inEdges[i] - count += 1 - linstances += [i,j-1,instance] - return [count]+linstances - - if (len(lEdges) < 2): - if aVertex == None: - return lEdges + #There is no reason to limit this to lines only because every non-closed edge always + #has exactly two vertices (wmayer) + #for e in lEdges: + # if not isinstance(e.Curve,Part.Line): + # print "Warning: sortedges cannot treat wired containing curves yet." + # return lEdges + + def lookfor(aVertex, inEdges): + ''' Look for (aVertex, inEdges) returns count, the position of the instance + the position in the instance and the instance of the Edge''' + count = 0 + linstances = [] #lists the instances of aVertex + for i in range(len(inEdges)) : + for j in range(2) : + if aVertex.Point == inEdges[i].Vertexes[j-1].Point: + instance = inEdges[i] + count += 1 + linstances += [i,j-1,instance] + return [count]+linstances + + if (len(lEdges) < 2): + if aVertex == None: + return lEdges + else: + result = lookfor(aVertex,lEdges) + if result[0] != 0: + if aVertex.Point == result[3].Vertexes[0].Point: + return lEdges else: - result = lookfor(aVertex,lEdges) - if result[0] != 0: - if isSameVertex(aVertex,result[3].Vertexes[0]): - return lEdges - else: - if isinstance(result[3].Curve,Part.Line): - return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()] - elif isinstance(result[3].Curve,Part.Circle): - mp = findMidpoint(result[3]) - return [Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape()] - elif isinstance(result[3].Curve,Part.BSplineCurve): - if isLine(result[3].Curve): - return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()] - else: - return lEdges - else: - return lEdges - - olEdges = [] # ol stands for ordered list - if aVertex == None: - for i in range(len(lEdges)*2) : - if len(lEdges[i/2].Vertexes) > 1: - result = lookfor(lEdges[i/2].Vertexes[i%2],lEdges) - if result[0] == 1 : # Have we found an end ? - olEdges = sortEdges(lEdges, result[3].Vertexes[result[2]]) - return olEdges - # if the wire is closed there is no end so choose 1st Vertex - #print "closed wire, starting from ",lEdges[0].Vertexes[0].Point - return sortEdges(lEdges, lEdges[0].Vertexes[0]) - else : - #print "looking ",aVertex.Point - result = lookfor(aVertex,lEdges) - if result[0] != 0 : - del lEdges[result[1]] - next = sortEdges(lEdges, result[3].Vertexes[-((-result[2])^1)]) - #print "result ",result[3].Vertexes[0].Point," ",result[3].Vertexes[1].Point, " compared to ",aVertex.Point - if isSameVertex(aVertex,result[3].Vertexes[0]): - #print "keeping" - olEdges += [result[3]] + next + if isinstance(result[3].Curve,Part.Line): + return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()] + elif isinstance(result[3].Curve,Part.Circle): + mp = findMidpoint(result[3]) + return [Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape()] + elif isinstance(result[3].Curve,Part.BSplineCurve): + if isLine(result[3].Curve): + return [Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape()] else: - #print "inverting", result[3].Curve - if isinstance(result[3].Curve,Part.Line): - newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape() - olEdges += [newedge] + next - elif isinstance(result[3].Curve,Part.Circle): - mp = findMidpoint(result[3]) - newedge = Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape() - olEdges += [newedge] + next - elif isinstance(result[3].Curve,Part.BSplineCurve): - if isLine(result[3].Curve): - newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape() - olEdges += [newedge] + next - else: - olEdges += [result[3]] + next - else: - olEdges += [result[3]] + next - return olEdges - else : - return [] + return lEdges + else: + return lEdges + + olEdges = [] # ol stands for ordered list + if aVertex == None: + for i in range(len(lEdges)*2) : + if len(lEdges[i/2].Vertexes) > 1: + result = lookfor(lEdges[i/2].Vertexes[i%2],lEdges) + if result[0] == 1 : # Have we found an end ? + olEdges = sortEdges(lEdges, result[3].Vertexes[result[2]]) + return olEdges + # if the wire is closed there is no end so choose 1st Vertex + # print "closed wire, starting from ",lEdges[0].Vertexes[0].Point + return sortEdges(lEdges, lEdges[0].Vertexes[0]) + else : + #print "looking ",aVertex.Point + result = lookfor(aVertex,lEdges) + if result[0] != 0 : + del lEdges[result[1]] + next = sortEdges(lEdges, result[3].Vertexes[-((-result[2])^1)]) + #print "result ",result[3].Vertexes[0].Point," ",result[3].Vertexes[1].Point, " compared to ",aVertex.Point + if aVertex.Point == result[3].Vertexes[0].Point: + #print "keeping" + olEdges += [result[3]] + next + else: + #print "inverting", result[3].Curve + if isinstance(result[3].Curve,Part.Line): + newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape() + olEdges += [newedge] + next + elif isinstance(result[3].Curve,Part.Circle): + mp = findMidpoint(result[3]) + newedge = Part.Arc(aVertex.Point,mp,result[3].Vertexes[0].Point).toShape() + olEdges += [newedge] + next + elif isinstance(result[3].Curve,Part.BSplineCurve): + if isLine(result[3].Curve): + newedge = Part.Line(aVertex.Point,result[3].Vertexes[0].Point).toShape() + olEdges += [newedge] + next + else: + olEdges += [result[3]] + next + else: + olEdges += [result[3]] + next + return olEdges + else : + return [] def findWires(edgeslist): @@ -787,6 +786,31 @@ def getNormal(shape): if n.getAngle(vdir) < 0.78: n = DraftVecUtils.neg(n) return n +def getRotation(v1,v2=FreeCAD.Vector(0,0,1)): + '''Get the rotation Quaternion between 2 vectors''' + if (v1.dot(v2) > 0.999999) or (v1.dot(v2) < -0.999999): + # vectors are opposite + return None + axis = v1.cross(v2) + axis.normalize() + angle = math.degrees(math.sqrt((v1.Length ^ 2) * (v2.Length ^ 2)) + v1.dot(v2)) + return FreeCAD.Rotation(axis,angle) + +def calculatePlacement(shape): + '''calculatePlacement(shape): if the given shape is planar, this function + returns a placement located at the center of gravity of the shape, and oriented + towards the shape's normal. Otherwise, it returns a null placement.''' + if not isPlanar(shape): + return FreeCAD.Placement() + pos = shape.BoundBox.Center + norm = getNormal(shape) + pla = FreeCAD.Placement() + pla.Base = pos + r = getRotation(norm) + if r: + pla.Rotation = r + return pla + def offsetWire(wire,dvec,bind=False,occ=False): ''' offsetWire(wire,vector,[bind]): offsets the given wire along the @@ -982,11 +1006,13 @@ def isCoplanar(faces): "checks if all faces in the given list are coplanar" if len(faces) < 2: return True - base =faces[0].normalAt(.5,.5) + base =faces[0].normalAt(0,0) for i in range(1,len(faces)): - normal = faces[i].normalAt(.5,.5) - if (normal.getAngle(base) > .0001) and (normal.getAngle(base) < 3.1415): - return False + for v in faces[i].Vertexes: + chord = v.Point.sub(faces[0].Vertexes[0].Point) + dist = DraftVecUtils.project(chord,base) + if dist.Length > 0: + return False return True def isPlanar(shape): From feeaac9ecbde8f841c420992a8bf2d863ecf20da Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 3 Jul 2012 18:27:10 +0200 Subject: [PATCH 401/517] 0000774: merge project with these files instantly crashes FreeCAD --- src/App/PropertyPythonObject.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/App/PropertyPythonObject.cpp b/src/App/PropertyPythonObject.cpp index 611122f2a..d9af45dcd 100644 --- a/src/App/PropertyPythonObject.cpp +++ b/src/App/PropertyPythonObject.cpp @@ -138,6 +138,7 @@ void PropertyPythonObject::fromString(const std::string& repr) void PropertyPythonObject::loadPickle(const std::string& str) { // find the custom attributes and restore them + Base::PyGILStateLocker lock; try { std::string buffer = str; boost::regex pickle("S'(\\w+)'.+S'(\\w+)'\\n"); @@ -257,6 +258,7 @@ void PropertyPythonObject::Save (Base::Writer &writer) const writer.Stream() << writer.ind() << "object.hasAttr("__module__") && this->object.hasAttr("__class__")) { Py::String mod(this->object.getAttr("__module__")); @@ -301,6 +303,7 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader) buffer = decodeValue(buffer); } + Base::PyGILStateLocker lock; try { boost::regex pickle("^\\(i(\\w+)\\n(\\w+)\\n"); boost::match_results what; From c7a2488da85a822310cebff2b78a33be615075de Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 3 Jul 2012 22:41:29 -0300 Subject: [PATCH 402/517] Arch: Mode bugfixes --- src/Mod/Arch/ArchCommands.py | 2 +- src/Mod/Arch/ArchVRM.py | 4 +++- src/Mod/Draft/DraftGeomUtils.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 1ddf46495..83ceb4a96 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -162,7 +162,7 @@ def makeFace(wires,method=2,cleanup=False): raise return Part.Face(wires) elif len(wires) == 1: - import Draft;Draft.printShape(wires[0]) + #import Draft;Draft.printShape(wires[0]) if len(wires[0].Vertexes) < 3: raise return Part.Face(wires[0]) diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index 0fe897aa1..91edfed56 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -273,7 +273,9 @@ class Renderer: shapes.append([c]+sh[1:]) for f in c.Faces: faces.append([f]+sh[1:]) + print "iscoplanar:",f.Vertexes[0].Point,f.normalAt(0,0),cutface.Vertexes[0].Point,cutface.normalAt(0,0) if DraftGeomUtils.isCoplanar([f,cutface]): + print "COPLANAR" sections.append([f,fill]) self.shapes = shapes self.faces = faces @@ -614,7 +616,7 @@ class Renderer: def getSectionSVG(self,linewidth=0.02): "Returns a SVG fragment from cut faces" - if DEBUG: print "Printing ", len(self.sections), " cutfaces" + if DEBUG: print "Printing ", len(self.sections), " sections" if not self.oriented: self.reorient() svg = '' diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index 30cba202a..f47ae0f09 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -1011,7 +1011,7 @@ def isCoplanar(faces): for v in faces[i].Vertexes: chord = v.Point.sub(faces[0].Vertexes[0].Point) dist = DraftVecUtils.project(chord,base) - if dist.Length > 0: + if round(dist.Length,DraftVecUtils.precision()) > 0: return False return True From 16788eea21235df1fb4a800c275f4147d25007e3 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 4 Jul 2012 10:43:23 +0200 Subject: [PATCH 403/517] Fix build error --- src/App/PropertyPythonObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/PropertyPythonObject.cpp b/src/App/PropertyPythonObject.cpp index d9af45dcd..aa5534e61 100644 --- a/src/App/PropertyPythonObject.cpp +++ b/src/App/PropertyPythonObject.cpp @@ -335,7 +335,7 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader) else if (load_pickle) this->loadPickle(buffer); else - Base::Console().Warning("PropertyPythonObject::Restore: unsupported serialisation: %s\n", buffer); + Base::Console().Warning("PropertyPythonObject::Restore: unsupported serialisation: %s\n", buffer.c_str()); restoreObject(reader); hasSetValue(); } From b6b575759a3be064d1ed662102cf565d05fe5209 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 4 Jul 2012 16:59:01 -0300 Subject: [PATCH 404/517] 0000776: Draft icons missing at startup --- src/Mod/Draft/Draft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index ac13a3ac1..aa5aeb18e 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -72,7 +72,7 @@ How it works / how to extend: ''' # import FreeCAD modules -import FreeCAD, math, sys, os, DraftVecUtils +import FreeCAD, math, sys, os, DraftVecUtils, Draft_rc from FreeCAD import Vector from pivy import coin From 4cc896f11c4e75a007e653855bc22fb2470df4d9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 Jul 2012 10:44:35 +0200 Subject: [PATCH 405/517] Suppress warnings and error messages in splash screen --- src/Gui/Splashscreen.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 7956a634f..769af1a07 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -88,23 +88,31 @@ public: textColor = col; } } - virtual ~SplashObserver() { Base::Console().DetachObserver(this); } - + const char* Name() + { + return "SplashObserver"; + } void Warning(const char * s) { +#ifdef FC_DEBUG Log(s); +#endif } void Message(const char * s) { +#ifdef FC_DEBUG Log(s); +#endif } void Error (const char * s) { +#ifdef FC_DEBUG Log(s); +#endif } void Log (const char * s) { From d9971311ed2efb6f68fb92002f51a2bce0e67ef4 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 Jul 2012 13:27:17 +0200 Subject: [PATCH 406/517] Fix problems with picking callback function --- src/Mod/Part/Gui/DlgPrimitives.cpp | 47 ++++++++++++++++++++++-------- src/Mod/Part/Gui/DlgPrimitives.h | 4 ++- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/Mod/Part/Gui/DlgPrimitives.cpp b/src/Mod/Part/Gui/DlgPrimitives.cpp index 3e4628646..7ef822edf 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.cpp +++ b/src/Mod/Part/Gui/DlgPrimitives.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include @@ -270,6 +271,9 @@ DlgPrimitives::~DlgPrimitives() void DlgPrimitives::pickCallback(void * ud, SoEventCallback * n) { const SoMouseButtonEvent * mbe = static_cast(n->getEvent()); + Picker* pick = reinterpret_cast(ud); + if (pick->exitCode >= 0) + pick->loop.exit(pick->exitCode); // Mark all incoming mouse button events as handled, especially, to deactivate the selection node n->setHandled(); @@ -277,16 +281,14 @@ void DlgPrimitives::pickCallback(void * ud, SoEventCallback * n) if (mbe->getState() == SoButtonEvent::DOWN) { const SoPickedPoint * point = n->getPickedPoint(); if (point) { - Picker* pick = reinterpret_cast(ud); if (pick->pickedPoint(point)) { - pick->loop.exit(0); + pick->exitCode = 0; } } } } else if (mbe->getButton() == SoMouseButtonEvent::BUTTON2) { if (mbe->getState() == SoButtonEvent::UP) { - Picker* pick = reinterpret_cast(ud); pick->loop.exit(1); } } @@ -305,9 +307,17 @@ void DlgPrimitives::executeCallback(Picker* p) if (!viewer->isEditing()) { viewer->setEditing(true); viewer->setRedirectToSceneGraph(true); + SoNode* root = viewer->getSceneGraph(); + int mode; + if (root && root->getTypeId().isDerivedFrom(Gui::SoFCUnifiedSelection::getClassTypeId())) { + mode = static_cast(root)->selectionMode.getValue(); + static_cast(root)->selectionMode.setValue(Gui::SoFCUnifiedSelection::OFF); + } viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback, p); this->setDisabled(true); int ret = p->loop.exec(); + if (root && root->getTypeId().isDerivedFrom(Gui::SoFCUnifiedSelection::getClassTypeId())) + static_cast(root)->selectionMode.setValue(mode); this->setEnabled(true); viewer->setEditing(false); viewer->setRedirectToSceneGraph(false); @@ -587,6 +597,9 @@ Location::~Location() viewer->setEditing(false); viewer->setRedirectToSceneGraph(false); viewer->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback,this); + SoNode* root = viewer->getSceneGraph(); + if (root && root->getTypeId().isDerivedFrom(Gui::SoFCUnifiedSelection::getClassTypeId())) + static_cast(root)->selectionMode.setValue(this->mode); } } @@ -605,6 +618,11 @@ void Location::on_viewPositionButton_clicked() viewer->setEditing(true); viewer->setRedirectToSceneGraph(true); viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback, this); + SoNode* root = viewer->getSceneGraph(); + if (root && root->getTypeId().isDerivedFrom(Gui::SoFCUnifiedSelection::getClassTypeId())) { + this->mode = static_cast(root)->selectionMode.getValue(); + static_cast(root)->selectionMode.setValue(Gui::SoFCUnifiedSelection::OFF); + } } } } @@ -617,15 +635,7 @@ void Location::pickCallback(void * ud, SoEventCallback * n) // Mark all incoming mouse button events as handled, especially, to deactivate the selection node n->getAction()->setHandled(); if (mbe->getButton() == SoMouseButtonEvent::BUTTON1) { - if (mbe->getState() == SoButtonEvent::UP) { - n->setHandled(); - view->setEditing(false); - view->setRedirectToSceneGraph(false); - Location* dlg = reinterpret_cast(ud); - dlg->activeView = 0; - view->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback,ud); - } - else if (mbe->getState() == SoButtonEvent::DOWN) { + if (mbe->getState() == SoButtonEvent::DOWN) { const SoPickedPoint * point = n->getPickedPoint(); if (point) { SbVec3f pnt = point->getPoint(); @@ -637,6 +647,19 @@ void Location::pickCallback(void * ud, SoEventCallback * n) } } } + else if (mbe->getButton() == SoMouseButtonEvent::BUTTON2) { + if (mbe->getState() == SoButtonEvent::UP) { + n->setHandled(); + view->setEditing(false); + view->setRedirectToSceneGraph(false); + Location* dlg = reinterpret_cast(ud); + dlg->activeView = 0; + view->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), pickCallback,ud); + SoNode* root = view->getSceneGraph(); + if (root && root->getTypeId().isDerivedFrom(Gui::SoFCUnifiedSelection::getClassTypeId())) + static_cast(root)->selectionMode.setValue(static_cast(ud)->mode); + } + } } QString Location::toPlacement() const diff --git a/src/Mod/Part/Gui/DlgPrimitives.h b/src/Mod/Part/Gui/DlgPrimitives.h index 178dff08a..4be65c31a 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.h +++ b/src/Mod/Part/Gui/DlgPrimitives.h @@ -39,7 +39,7 @@ namespace PartGui { class Picker { public: - Picker() + Picker() : exitCode(-1) { } virtual ~Picker() @@ -51,6 +51,7 @@ public: void createPrimitive(QWidget* widget, const QString&, Gui::Document*); QString toPlacement(const gp_Ax2&) const; + int exitCode; QEventLoop loop; }; @@ -88,6 +89,7 @@ private Q_SLOTS: private: static void pickCallback(void * ud, SoEventCallback * n); + int mode; QPointer activeView; Ui_Location ui; }; From 857454aad5333dce594d36c1dac5cf0d450c1024 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 Jul 2012 15:24:28 +0200 Subject: [PATCH 407/517] 0000777: Shared libraries call exit --- src/App/Application.cpp | 42 +++++++------ src/Base/Exception.cpp | 34 +++++++++++ src/Base/Exception.h | 32 ++++++++++ src/Base/Interpreter.cpp | 1 - src/Gui/Macro.cpp | 5 +- src/Gui/MainWindow.cpp | 9 ++- src/Gui/PythonConsole.cpp | 8 ++- src/Gui/View3DInventorExamples.cpp | 6 +- src/Main/MainCmd.cpp | 9 +++ src/Main/MainGui.cpp | 94 +++++------------------------- src/Mod/Raytracing/Gui/Command.cpp | 2 - 11 files changed, 132 insertions(+), 110 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 17b99601f..e6a399926 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1188,13 +1188,13 @@ void Application::processCmdLineFiles(void) Application::_pcSingleton->openDocument(File.filePath().c_str()); } else if (File.hasExtension("fcscript")||File.hasExtension("fcmacro")) { - Base::Interpreter().runFile(File.filePath().c_str(), false); + Base::Interpreter().runFile(File.filePath().c_str(), true); } else if (File.hasExtension("py")) { //FIXME: Does this make any sense? I think we should do the ame as for // fcmacro or fcscript. //Base::Interpreter().loadModule(File.fileNamePure().c_str()); - Base::Interpreter().runFile(File.filePath().c_str(), false); + Base::Interpreter().runFile(File.filePath().c_str(), true); } else { std::vector mods = App::GetApplication().getImportModules(Ext.c_str()); @@ -1210,8 +1210,7 @@ void Application::processCmdLineFiles(void) } } catch (const Base::SystemExitException&) { - Base::PyGILStateLocker locker; - Base::Interpreter().systemExit(); + throw; // re-throw to main() function } catch (const Base::Exception& e) { Console().Error("Exception while processing file: %s [%s]\n", File.filePath().c_str(), e.what()); @@ -1523,20 +1522,23 @@ void Application::ParseOptions(int ac, char ** av) notify(vm); } catch (const std::exception& e) { - cerr << e.what() << endl << endl << visible << endl; - exit(1); + std::stringstream str; + str << e.what() << endl << endl << visible << endl; + throw UnknownProgramOption(str.str()); } catch (...) { - cerr << "Wrong or unknown option, bailing out!" << endl << endl << visible << endl; - exit(1); + std::stringstream str; + str << "Wrong or unknown option, bailing out!" << endl << endl << visible << endl; + throw UnknownProgramOption(str.str()); } if (vm.count("help")) { - cout << mConfig["ExeName"] << endl << endl; - cout << "For detailed descripton see http://free-cad.sf.net" << endl<().c_str()); if (!ifs) { Base::Console().Error("Could no open the response file\n"); - cerr << "Could no open the response file: '" - << vm["response-file"].as() << "'" << endl; - exit(1); + std::stringstream str; + str << "Could no open the response file: '" + << vm["response-file"].as() << "'" << endl; + throw Base::UnknownProgramOption(str.str()); } // Read the whole file into a string stringstream ss; @@ -1562,9 +1565,10 @@ void Application::ParseOptions(int ac, char ** av) } if (vm.count("version")) { - std::cout << mConfig["ExeName"] << " " << mConfig["ExeVersion"] - << " Revision: " << mConfig["BuildRevision"] << std::endl; - exit(0); + std::stringstream str; + str << mConfig["ExeName"] << " " << mConfig["ExeVersion"] + << " Revision: " << mConfig["BuildRevision"] << std::endl; + throw Base::ProgramInformation(str.str()); } if (vm.count("console")) { diff --git a/src/Base/Exception.cpp b/src/Base/Exception.cpp index e573c2735..4ca62890c 100644 --- a/src/Base/Exception.cpp +++ b/src/Base/Exception.cpp @@ -202,6 +202,40 @@ AbnormalProgramTermination::AbnormalProgramTermination(const AbnormalProgramTerm // --------------------------------------------------------- +UnknownProgramOption::UnknownProgramOption(const char * sMessage) + : Exception(sMessage) +{ +} + +UnknownProgramOption::UnknownProgramOption(const std::string& sMessage) + : Exception(sMessage) +{ +} + +UnknownProgramOption::UnknownProgramOption(const UnknownProgramOption &inst) + : Exception(inst) +{ +} + +// --------------------------------------------------------- + +ProgramInformation::ProgramInformation(const char * sMessage) + : Exception(sMessage) +{ +} + +ProgramInformation::ProgramInformation(const std::string& sMessage) + : Exception(sMessage) +{ +} + +ProgramInformation::ProgramInformation(const ProgramInformation &inst) + : Exception(inst) +{ +} + +// --------------------------------------------------------- + #if defined(__GNUC__) && defined (FC_OS_LINUX) #include #include diff --git a/src/Base/Exception.h b/src/Base/Exception.h index f50fdb7d3..19bd9155c 100644 --- a/src/Base/Exception.h +++ b/src/Base/Exception.h @@ -174,6 +174,38 @@ public: virtual ~AbnormalProgramTermination() throw() {} }; +/** + * The UnknownProgramOption can be used to indicate an unknown program option. + * @author Werner Mayer + */ +class BaseExport UnknownProgramOption : public Exception +{ +public: + /// Construction + UnknownProgramOption(const char * sMessage); + UnknownProgramOption(const std::string& sMessage); + /// Construction + UnknownProgramOption(const UnknownProgramOption &inst); + /// Destruction + virtual ~UnknownProgramOption() throw() {} +}; + +/** + * The ProgramInformation can be used to show information about the program. + * @author Werner Mayer + */ +class BaseExport ProgramInformation : public Exception +{ +public: + /// Construction + ProgramInformation(const char * sMessage); + ProgramInformation(const std::string& sMessage); + /// Construction + ProgramInformation(const ProgramInformation &inst); + /// Destruction + virtual ~ProgramInformation() throw() {} +}; + inline void Exception::setMessage(const char * sMessage) { diff --git a/src/Base/Interpreter.cpp b/src/Base/Interpreter.cpp index 0a8c4b9e8..a1ddd5a7a 100644 --- a/src/Base/Interpreter.cpp +++ b/src/Base/Interpreter.cpp @@ -190,7 +190,6 @@ void InterpreterSingleton::runInteractiveString(const char *sCmd) presult = PyRun_String(sCmd, Py_single_input, dict, dict); /* eval direct */ if (!presult) { if (PyErr_ExceptionMatches(PyExc_SystemExit)) { - //systemExit(); throw SystemExitException(); } /* get latest python exception information */ diff --git a/src/Gui/Macro.cpp b/src/Gui/Macro.cpp index 89f9fab1a..1ac796478 100644 --- a/src/Gui/Macro.cpp +++ b/src/Gui/Macro.cpp @@ -26,6 +26,7 @@ #ifndef _PreComp_ # include # include +# include # include # include #endif @@ -232,9 +233,7 @@ void MacroManager::run(MacroType eType,const char *sName) Base::Interpreter().runFile(sName, this->localEnv); } catch (const Base::SystemExitException&) { - Base::PyGILStateLocker lock; - PyErr_Clear(); - Base::Interpreter().systemExit(); + qApp->quit(); } catch (const Base::PyException& e) { Base::Console().Error("%s%s: %s\n", diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 365fc7605..a13a16c2c 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -1152,7 +1153,13 @@ void MainWindow::showMainWindow() void MainWindow::delayedStartup() { // processing all command line files - App::Application::processCmdLineFiles(); + try { + App::Application::processCmdLineFiles(); + } + catch (const Base::SystemExitException&) { + QApplication::quit(); + return; + } const std::map& cfg = App::Application::Config(); std::map::const_iterator it = cfg.find("StartHidden"); diff --git a/src/Gui/PythonConsole.cpp b/src/Gui/PythonConsole.cpp index edccd488a..8364ae4e9 100644 --- a/src/Gui/PythonConsole.cpp +++ b/src/Gui/PythonConsole.cpp @@ -23,6 +23,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include @@ -700,12 +701,13 @@ void PythonConsole::runSource(const QString& line) catch (const Base::SystemExitException&) { ParameterGrp::handle hPrefGrp = getWindowParameter(); bool check = hPrefGrp->GetBool("CheckSystemExit",true); - if (!check) Base::Interpreter().systemExit(); + if (!check) qApp->quit(); int ret = QMessageBox::question(this, tr("System exit"), tr("The application is still running.\nDo you want to exit without saving your data?"), QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default); if (ret == QMessageBox::Yes) { - Base::Interpreter().systemExit(); - } else { + qApp->quit(); + } + else { PyErr_Clear(); } } diff --git a/src/Gui/View3DInventorExamples.cpp b/src/Gui/View3DInventorExamples.cpp index 99510a005..c7e5a1b4f 100644 --- a/src/Gui/View3DInventorExamples.cpp +++ b/src/Gui/View3DInventorExamples.cpp @@ -311,7 +311,7 @@ void LightManip(SoSeparator * root) in.setBuffer((void *)scenegraph, std::strlen(scenegraph)); SoSeparator * _root = SoDB::readAll( &in ); root->addChild(_root); - if ( root == NULL ) exit( 1 ); // Shouldn't happen. + if ( root == NULL ) return; // Shouldn't happen. root->ref(); const char * pointlightnames[3] = { "RedLight", "GreenLight", "BlueLight" }; @@ -323,7 +323,7 @@ void LightManip(SoSeparator * root) sa.setSearchingAll( FALSE ); sa.apply( root ); SoPath * path = sa.getPath(); - if ( path == NULL) exit( 1 ); // Shouldn't happen. + if ( path == NULL) return; // Shouldn't happen. SoPointLightManip * manip = new SoPointLightManip; manip->replaceNode( path ); @@ -446,7 +446,7 @@ void AnimationTexture(SoSeparator * root) texturetimer->schedule(); // Scene graph - if ( root == NULL ) exit( 1 ); // Shouldn't happen. + if ( root == NULL ) return; // Shouldn't happen. root->ref(); // prevent from being deleted because of the still running timer sensor // SoSeparator * root = new SoSeparator; // root->ref(); diff --git a/src/Main/MainCmd.cpp b/src/Main/MainCmd.cpp index f42d7598b..4fcae2687 100644 --- a/src/Main/MainCmd.cpp +++ b/src/Main/MainCmd.cpp @@ -37,6 +37,7 @@ #include #include +#include // FreeCAD Base header #include @@ -89,6 +90,14 @@ int main( int argc, char ** argv ) // Inits the Application App::Application::init(argc,argv); } + catch (const Base::UnknownProgramOption& e) { + std::cerr << e.what(); + exit(1); + } + catch (const Base::ProgramInformation& e) { + std::cout << e.what(); + exit(0); + } catch (const Base::Exception& e) { std::string appName = App::Application::Config()["ExeName"]; std::stringstream msg; diff --git a/src/Main/MainGui.cpp b/src/Main/MainGui.cpp index 83c4487f4..5552bd6b4 100644 --- a/src/Main/MainGui.cpp +++ b/src/Main/MainGui.cpp @@ -161,83 +161,6 @@ private: QDomDocument domDocument; }; -class ProgramOptions -{ -public: - ProgramOptions() - { - newcout = new ProgramOptionsStream(out); - oldcout = std::cout.rdbuf(newcout); - out.reserve(80); - newcerr = new ProgramOptionsStream(err); - oldcerr = std::cerr.rdbuf(newcerr); - err.reserve(80); - - error = true; - ::atexit(ProgramOptions::failure); - } - ~ProgramOptions() - { - std::cout.rdbuf(oldcout); - delete newcout; - std::cerr.rdbuf(oldcerr); - delete newcerr; - error = false; - } - static void failure() - { - if (error) { - int argc=0; - QApplication app(argc,0); - QString appName = QString::fromAscii(App::Application::Config()["ExeName"].c_str()); - if (!err.empty()) { - QString msg = QString::fromAscii(err.c_str()); - QString s = QLatin1String("
    ") + msg + QLatin1String("
    "); - QMessageBox::critical(0, appName, s); - } - else if (!out.empty()) { - QString msg = QString::fromAscii(out.c_str()); - QString s = QLatin1String("
    ") + msg + QLatin1String("
    "); - QMessageBox::information(0, appName, s); - } - } - } - -private: - class ProgramOptionsStream : public std::streambuf - { - public: - ProgramOptionsStream(std::string& s) : buf(s) - { - } - int overflow(int c = EOF) - { - if (c != EOF) - buf.push_back((char)c); - return c; - } - int sync() - { - return 0; - } - private: - std::string& buf; - }; - -private: - friend class ProgramOptionsStream; - std::streambuf* oldcout; - std::streambuf* newcout; - std::streambuf* oldcerr; - std::streambuf* newcerr; - static std::string out, err; - static bool error; -}; - -bool ProgramOptions::error = false; -std::string ProgramOptions::out; -std::string ProgramOptions::err; - #if defined (FC_OS_LINUX) || defined(FC_OS_BSD) QString myDecoderFunc(const QByteArray &localFileName) { @@ -300,10 +223,25 @@ int main( int argc, char ** argv ) App::Application::Config()["RunMode"] = "Gui"; // Inits the Application - ProgramOptions po; App::Application::init(argc,argv); Gui::Application::initApplication(); } + catch (const Base::UnknownProgramOption& e) { + QApplication app(argc,argv); + QString appName = QString::fromAscii(App::Application::Config()["ExeName"].c_str()); + QString msg = QString::fromAscii(e.what()); + QString s = QLatin1String("
    ") + msg + QLatin1String("
    "); + QMessageBox::critical(0, appName, s); + exit(1); + } + catch (const Base::ProgramInformation& e) { + QApplication app(argc,argv); + QString appName = QString::fromAscii(App::Application::Config()["ExeName"].c_str()); + QString msg = QString::fromAscii(e.what()); + QString s = QLatin1String("
    ") + msg + QLatin1String("
    "); + QMessageBox::information(0, appName, s); + exit(0); + } catch (const Base::Exception& e) { // Popup an own dialog box instead of that one of Windows QApplication app(argc,argv); diff --git a/src/Mod/Raytracing/Gui/Command.cpp b/src/Mod/Raytracing/Gui/Command.cpp index ef2affe17..aeebf3d24 100644 --- a/src/Mod/Raytracing/Gui/Command.cpp +++ b/src/Mod/Raytracing/Gui/Command.cpp @@ -102,8 +102,6 @@ void CmdRaytracingWriteCamera::activated(int iMsg) SoInput in; in.setBuffer((void*)ppReturn,std::strlen(ppReturn)); - //if (!in.openFile(filename)) { exit(1); } - SoNode* rootNode; SoDB::read(&in,rootNode); From 1162aaea8880c07bee573638fbeb3b8562a33075 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 Jul 2012 22:20:56 +0200 Subject: [PATCH 408/517] Remove references to gts and ode --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b1e35ec11..31db3d32b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -268,7 +268,7 @@ MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK_CHECKFILE6X FREECAD_LIBPACK_CHECKFILE7X) # -------------------------------- ODE ---------------------------------- - find_package(ODE) +# find_package(ODE) # -------------------------------- Qt -------------------------------- @@ -439,7 +439,7 @@ if(FREECAD_MAINTAINERS_BUILD AND NOT WIN32) set(PKG_ARCH amd64) ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 4 ) set(CPACK_DEBIAN_PACKAGE_SECTION "science") - set(CPACK_DEBIAN_PACKAGE_DEPENDS "python, oce | opencascade, libqtgui4, libcoin60, libode1, libsoqt4-20, libxerces-c3.1, libgts-0.7-5, zlib1g, libboost-dev, libeigen2-dev") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "python, oce | opencascade, libqtgui4, libcoin60, libsoqt4-20, libxerces-c3.1, zlib1g, libboost-dev, libeigen2-dev") set(CPACK_PACKAGE_CONTACT "") set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}-${PACKAGE_VERSION}_${PKG_ARCH}") From 0a0c003c6640874c46494e10f5984114fae52839 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 Jul 2012 22:41:59 +0200 Subject: [PATCH 409/517] Remove f2c as dependency --- CMakeLists.txt | 6 ------ src/3rdParty/salomesmesh/CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31db3d32b..2864f687b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -219,12 +219,6 @@ MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK_CHECKFILE6X FREECAD_LIBPACK_CHECKFILE7X) ENDIF() endif() -# -------------------------------- f2c ---------------------------------- - - IF(OCC_FOUND) - find_package(F2C REQUIRED) - ENDIF(OCC_FOUND) - # -------------------------------- Salome SMESH -------------------------- # Salome SMESH sources are under src/3rdParty now diff --git a/src/3rdParty/salomesmesh/CMakeLists.txt b/src/3rdParty/salomesmesh/CMakeLists.txt index 314632396..616972570 100644 --- a/src/3rdParty/salomesmesh/CMakeLists.txt +++ b/src/3rdParty/salomesmesh/CMakeLists.txt @@ -173,7 +173,7 @@ FILE(GLOB StdMeshers_source_files src/StdMeshers/*.cpp src/MEFISTO2/*.cpp src/ME INCLUDE_DIRECTORIES(src/StdMeshers) ADD_LIBRARY(StdMeshers SHARED ${StdMeshers_source_files}) -TARGET_LINK_LIBRARIES(StdMeshers SMESH TKernel TKMath TKAdvTools f2c gfortran) +TARGET_LINK_LIBRARIES(StdMeshers SMESH TKernel TKMath TKAdvTools gfortran) SET(StdMeshers_CFLAGS "") IF(WIN32) SET(StdMeshers_CFLAGS "-DSTDMESHERS_EXPORTS -DMEFISTO2D_EXPORTS") From 90a7f690bb4a9f5a819e6b0ee26a0889a0523497 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 5 Jul 2012 22:59:12 +0200 Subject: [PATCH 410/517] Fix address of FSF in copyright notice --- copying.lib | 4 ++-- src/Gui/FileDialog.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/copying.lib b/copying.lib index 3fcf74e71..81a5194fa 100644 --- a/copying.lib +++ b/copying.lib @@ -7,8 +7,8 @@ by the authors who actually wrote it. Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA. + 51 Franklin Street - Fifth Floor + Boston, MA 02110-1301, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. diff --git a/src/Gui/FileDialog.cpp b/src/Gui/FileDialog.cpp index bbadc2d14..a34c62fea 100644 --- a/src/Gui/FileDialog.cpp +++ b/src/Gui/FileDialog.cpp @@ -15,8 +15,8 @@ * * * 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 * + * write to the Free Software Foundation, Inc., 51 Franklin Street, * + * Fifth Floor, Boston, MA 02110-1301, USA * * * ***************************************************************************/ From 20ffe1f866cef1a60921e6a912c4d57787fa2a3f Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 6 Jul 2012 13:02:09 +0200 Subject: [PATCH 411/517] 0000787: Patch for Space navigator support on windows --- CMakeLists.txt | 5 + .../GuiApplicationNativeEventAwareWin32.cpp | 718 ++++++++++++++++++ src/Gui/3Dconnexion/I3dMouseParams.h | 91 +++ src/Gui/3Dconnexion/MouseParameters.cpp | 95 +++ src/Gui/3Dconnexion/MouseParameters.h | 56 ++ src/Gui/CMakeLists.txt | 15 + src/Gui/GuiApplicationNativeEventAware.cpp | 36 +- src/Gui/GuiApplicationNativeEventAware.h | 76 +- src/Gui/Splashscreen.cpp | 51 ++ src/Tools/makedist.py | 1 + 10 files changed, 1124 insertions(+), 20 deletions(-) create mode 100644 src/Gui/3Dconnexion/GuiApplicationNativeEventAwareWin32.cpp create mode 100644 src/Gui/3Dconnexion/I3dMouseParams.h create mode 100644 src/Gui/3Dconnexion/MouseParameters.cpp create mode 100644 src/Gui/3Dconnexion/MouseParameters.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2864f687b..671b30cfd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,11 @@ OPTION(FREECAD_BUILD_TEMPLATE "Build the FreeCAD template module which is only f OPTION(FREECAD_BUILD_DEBIAN "Prepare for a build of a Debian package" OFF) OPTION(FREECAD_USE_EXTERNAL_ZIPIOS "Use system installed zipios++ instead of the bundled." OFF) OPTION(FREECAD_USE_EXTERNAL_PIVY "Use system installed python-pivy instead of the bundled." OFF) +if(MSVC) +OPTION(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." ON) +else(MSVC) +set(FREECAD_USE_3DCONNEXION OFF) +endif(MSVC) # if this is set override some options if (FREECAD_BUILD_DEBIAN) diff --git a/src/Gui/3Dconnexion/GuiApplicationNativeEventAwareWin32.cpp b/src/Gui/3Dconnexion/GuiApplicationNativeEventAwareWin32.cpp new file mode 100644 index 000000000..425a7af7a --- /dev/null +++ b/src/Gui/3Dconnexion/GuiApplicationNativeEventAwareWin32.cpp @@ -0,0 +1,718 @@ + +/* +Development tools and related technology provided under license from 3Dconnexion. +(c) 1992 - 2012 3Dconnexion. All rights reserved +*/ + +/* +Support for Qt added by David Dibben at +http://www.codegardening.com/2011/02/using-3dconnexion-mouse-with-qt.html +*/ + +/* +See also: +http://www.3dconnexion.com/forum/viewtopic.php?f=19&t=4968&sid=72c018bdcf0e6edc99a6effb5c0c48d9 +*/ + +#include "PreCompiled.h" + +#include +#include +#include +#include +#include +#include "GuiApplicationNativeEventAware.h" +#include "SpaceballEvent.h" + +// Windows dependencies, enumerators and global variables +#ifdef _USE_3DCONNEXION_SDK + +#include +#include +#include + +#define LOGITECH_VENDOR_ID 0x46d +#define _CONSTANT_INPUT_PERIOD 0 + +#ifndef RIDEV_DEVNOTIFY +#define RIDEV_DEVNOTIFY 0x00002000 +#endif + +#define _TRACE_WM_INPUT_PERIOD 0 +#define _TRACE_RI_TYPE 0 +#define _TRACE_RIDI_DEVICENAME 0 +#define _TRACE_RIDI_DEVICEINFO 0 +#define _TRACE_RI_RAWDATA 0 +#define _TRACE_3DINPUT_PERIOD 0 + +#ifdef _WIN64 +typedef unsigned __int64 QWORD; +#endif // _WIN64 + +static const int kTimeToLive = 5; + +enum e3dconnexion_pid { + eSpacePilot = 0xc625, + eSpaceNavigator = 0xc626, + eSpaceExplorer = 0xc627, + eSpaceNavigatorForNotebooks = 0xc628, + eSpacePilotPRO = 0xc629 +}; + +enum e3dmouse_virtual_key +{ + V3DK_INVALID=0 + , V3DK_MENU=1, V3DK_FIT + , V3DK_TOP, V3DK_LEFT, V3DK_RIGHT, V3DK_FRONT, V3DK_BOTTOM, V3DK_BACK + , V3DK_CW, V3DK_CCW + , V3DK_ISO1, V3DK_ISO2 + , V3DK_1, V3DK_2, V3DK_3, V3DK_4, V3DK_5, V3DK_6, V3DK_7, V3DK_8, V3DK_9, V3DK_10 + , V3DK_ESC, V3DK_ALT, V3DK_SHIFT, V3DK_CTRL + , V3DK_ROTATE, V3DK_PANZOOM, V3DK_DOMINANT + , V3DK_PLUS, V3DK_MINUS +}; + +struct tag_VirtualKeys +{ + e3dconnexion_pid pid; + size_t nKeys; + e3dmouse_virtual_key *vkeys; +}; + +static const e3dmouse_virtual_key SpaceExplorerKeys [] = +{ + V3DK_INVALID // there is no button 0 + , V3DK_1, V3DK_2 + , V3DK_TOP, V3DK_LEFT, V3DK_RIGHT, V3DK_FRONT + , V3DK_ESC, V3DK_ALT, V3DK_SHIFT, V3DK_CTRL + , V3DK_FIT, V3DK_MENU + , V3DK_PLUS, V3DK_MINUS + , V3DK_ROTATE +}; + +static const e3dmouse_virtual_key SpacePilotKeys [] = +{ + V3DK_INVALID + , V3DK_1, V3DK_2, V3DK_3, V3DK_4, V3DK_5, V3DK_6 + , V3DK_TOP, V3DK_LEFT, V3DK_RIGHT, V3DK_FRONT + , V3DK_ESC, V3DK_ALT, V3DK_SHIFT, V3DK_CTRL + , V3DK_FIT, V3DK_MENU + , V3DK_PLUS, V3DK_MINUS + , V3DK_DOMINANT, V3DK_ROTATE +}; + +static const struct tag_VirtualKeys _3dmouseVirtualKeys[]= +{ + eSpacePilot + , sizeof(SpacePilotKeys)/sizeof(SpacePilotKeys[0]) + , const_cast(SpacePilotKeys), + eSpaceExplorer + , sizeof(SpaceExplorerKeys)/sizeof(SpaceExplorerKeys[0]) + , const_cast(SpaceExplorerKeys) +}; + + +// Methods for windows events + +/*! + Converts a hid device keycode (button identifier) of a pre-2009 3Dconnexion USB device to the standard 3d mouse virtual key definition. + + \a pid USB Product ID (PID) of 3D mouse device + \a hidKeyCode Hid keycode as retrieved from a Raw Input packet + + \return The standard 3d mouse virtual key (button identifier) or zero if an error occurs. + + Converts a hid device keycode (button identifier) of a pre-2009 3Dconnexion USB device + to the standard 3d mouse virtual key definition. +*/ + +unsigned short HidToVirtualKey(unsigned long pid, unsigned short hidKeyCode) +{ + unsigned short virtualkey=hidKeyCode; + for (size_t i=0; imessage == WM_INPUT) { + HRAWINPUT hRawInput = reinterpret_cast(message->lParam); + gMouseInput->OnRawInput(RIM_INPUT,hRawInput); + if (result != 0) { + result = 0; + } + return true; + } + + return false; +} + + +/*! + Access the mouse parameters structure +*/ +I3dMouseParam& Gui::GUIApplicationNativeEventAware::MouseParams() +{ + return f3dMouseParams; +} + +/*! + Access the mouse parameters structure +*/ +const I3dMouseParam& Gui::GUIApplicationNativeEventAware::MouseParams() const +{ + return f3dMouseParams; +} + +/*! + Called with the processed motion data when a 3D mouse event is received + + The default implementation emits a Move3d signal with the motion data +*/ +void Gui::GUIApplicationNativeEventAware::Move3d(HANDLE device, std::vector& motionData) +{ + Q_UNUSED(device); + + QWidget *currentWidget = this->focusWidget(); + 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]); + + Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent(); + motionEvent->setTranslations(x, y, z); + motionEvent->setRotations(rx, ry, rz); + this->postEvent(currentWidget, motionEvent); +} + +/*! + Called when a 3D mouse key is pressed + + The default implementation emits a On3dmouseKeyDown signal with the key code. +*/ +void Gui::GUIApplicationNativeEventAware::On3dmouseKeyDown(HANDLE device, int virtualKeyCode) +{ + Q_UNUSED(device); + + QWidget *currentWidget = this->focusWidget(); + if (!currentWidget) + currentWidget = mainWindow; + + Spaceball::ButtonEvent *buttonEvent = new Spaceball::ButtonEvent(); + buttonEvent->setButtonNumber(virtualKeyCode - 1); + buttonEvent->setButtonStatus(Spaceball::BUTTON_PRESSED); + this->postEvent(currentWidget, buttonEvent); +} + +/*! + Called when a 3D mouse key is released + + The default implementation emits a On3dmouseKeyUp signal with the key code. +*/ +void Gui::GUIApplicationNativeEventAware::On3dmouseKeyUp(HANDLE device, int virtualKeyCode) +{ + Q_UNUSED(device); + + QWidget *currentWidget = this->focusWidget(); + if (!currentWidget) + currentWidget = mainWindow; + + Spaceball::ButtonEvent *buttonEvent = new Spaceball::ButtonEvent(); + buttonEvent->setButtonNumber(virtualKeyCode - 1); + buttonEvent->setButtonStatus(Spaceball::BUTTON_RELEASED); + this->postEvent(currentWidget, buttonEvent); +} + +/*! + Get an initialized array of PRAWINPUTDEVICE for the 3D devices + + pNumDevices returns the number of devices to register. Currently this is always 1. + */ +static PRAWINPUTDEVICE GetDevicesToRegister(unsigned int* pNumDevices) +{ + // Array of raw input devices to register + static RAWINPUTDEVICE sRawInputDevices[] = { + {0x01, 0x08, 0x00, 0x00} // Usage Page = 0x01 Generic Desktop Page, Usage Id= 0x08 Multi-axis Controller + }; + + if (pNumDevices) { + *pNumDevices = sizeof(sRawInputDevices) / sizeof(sRawInputDevices[0]); + } + + return sRawInputDevices; +} + +/*! + Detect the 3D mouse +*/ +bool Gui::GUIApplicationNativeEventAware::Is3dmouseAttached() +{ + unsigned int numDevicesOfInterest = 0; + PRAWINPUTDEVICE devicesToRegister = GetDevicesToRegister(&numDevicesOfInterest); + + unsigned int nDevices = 0; + + if (::GetRawInputDeviceList(NULL, &nDevices, sizeof(RAWINPUTDEVICELIST)) != 0) { + return false; + } + + if (nDevices == 0) return false; + + std::vector rawInputDeviceList(nDevices); + if (::GetRawInputDeviceList(&rawInputDeviceList[0], &nDevices, sizeof(RAWINPUTDEVICELIST)) == static_cast(-1)) { + return false; + } + + for (unsigned int i = 0; i < nDevices; ++i) { + RID_DEVICE_INFO rdi = {sizeof(rdi)}; + unsigned int cbSize = sizeof(rdi); + + if (GetRawInputDeviceInfo(rawInputDeviceList[i].hDevice, RIDI_DEVICEINFO, &rdi, &cbSize) > 0) { + //skip non HID and non logitec (3DConnexion) devices + if (rdi.dwType != RIM_TYPEHID || rdi.hid.dwVendorId != LOGITECH_VENDOR_ID) { + continue; + } + + //check if devices matches Multi-axis Controller + for (unsigned int j = 0; j < numDevicesOfInterest; ++j) { + if (devicesToRegister[j].usUsage == rdi.hid.usUsage + && devicesToRegister[j].usUsagePage == rdi.hid.usUsagePage) { + return true; + } + } + } + } + return false; +} + + + +/*! + Initialize the window to recieve raw-input messages + + This needs to be called initially so that Windows will send the messages from the 3D mouse to the window. +*/ +bool Gui::GUIApplicationNativeEventAware::InitializeRawInput(HWND hwndTarget) +{ + fWindow = hwndTarget; + + // Simply fail if there is no window + if (!hwndTarget) return false; + + unsigned int numDevices = 0; + PRAWINPUTDEVICE devicesToRegister = GetDevicesToRegister(&numDevices); + + if (numDevices == 0) return false; + + // Get OS version. + OSVERSIONINFO osvi = {sizeof(OSVERSIONINFO),0}; + ::GetVersionEx(&osvi); + + unsigned int cbSize = sizeof (devicesToRegister[0]); + for (size_t i = 0; i < numDevices; i++) { + // Set the target window to use + //devicesToRegister[i].hwndTarget = hwndTarget; + + // If Vista or newer, enable receiving the WM_INPUT_DEVICE_CHANGE message. + if (osvi.dwMajorVersion >= 6) { + devicesToRegister[i].dwFlags |= RIDEV_DEVNOTIFY; + } + } + return (::RegisterRawInputDevices(devicesToRegister, numDevices, cbSize) != FALSE); +} + + +/*! + Get the raw input data from Windows + + Includes workaround for incorrect alignment of the RAWINPUT structure on x64 os + when running as Wow64 (copied directly from 3DConnexion code) +*/ + +UINT Gui::GUIApplicationNativeEventAware::GetRawInputBuffer(PRAWINPUT pData, PUINT pcbSize, UINT cbSizeHeader) +{ +#ifdef _WIN64 + return ::GetRawInputBuffer(pData, pcbSize, cbSizeHeader); +#else + BOOL bIsWow64 = FALSE; + ::IsWow64Process(GetCurrentProcess(), &bIsWow64); + if (!bIsWow64 || pData==NULL) { + return ::GetRawInputBuffer(pData, pcbSize, cbSizeHeader); + } else { + HWND hwndTarget = fWindow; //fParent->winId(); + + size_t cbDataSize=0; + UINT nCount=0; + PRAWINPUT pri = pData; + + MSG msg; + while (PeekMessage(&msg, hwndTarget, WM_INPUT, WM_INPUT, PM_NOREMOVE)) { + HRAWINPUT hRawInput = reinterpret_cast(msg.lParam); + size_t cbSize = *pcbSize - cbDataSize; + if (::GetRawInputData(hRawInput, RID_INPUT, pri, &cbSize, cbSizeHeader) == static_cast(-1)) { + if (nCount==0) { + return static_cast(-1); + } else { + break; + } + } + ++nCount; + + // Remove the message for the data just read + PeekMessage(&msg, hwndTarget, WM_INPUT, WM_INPUT, PM_REMOVE); + + pri = NEXTRAWINPUTBLOCK(pri); + cbDataSize = reinterpret_cast(pri) - reinterpret_cast(pData); + if (cbDataSize >= *pcbSize) { + cbDataSize = *pcbSize; + break; + } + } + return nCount; + } +#endif +} + +/*! + Process the raw input device data + + On3dmouseInput() does all the preprocessing of the rawinput device data before + finally calling the Move3d method. +*/ + +void Gui::GUIApplicationNativeEventAware::On3dmouseInput() +{ + // Don't do any data processing in background + bool bIsForeground = (::GetActiveWindow() != NULL); + if (!bIsForeground) { + // set all cached data to zero so that a zero event is seen and the cached data deleted + for (std::map::iterator it = fDevice2Data.begin(); it != fDevice2Data.end(); it++) { + it->second.fAxes.assign(6, .0); + it->second.fIsDirty = true; + } + } + + DWORD dwNow = ::GetTickCount(); // Current time; + DWORD dwElapsedTime; // Elapsed time since we were last here + + if (0 == fLast3dmouseInputTime) { + dwElapsedTime = 10; // System timer resolution + } else { + dwElapsedTime = dwNow - fLast3dmouseInputTime; + if (fLast3dmouseInputTime > dwNow) { + dwElapsedTime = ~dwElapsedTime+1; + } + if (dwElapsedTime<1) { + dwElapsedTime=1; + } else if (dwElapsedTime > 500) { + // Check for wild numbers because the device was removed while sending data + dwElapsedTime = 10; + } + } + +#if _TRACE_3DINPUT_PERIOD + qDebug("On3DmouseInput() period is %dms\n", dwElapsedTime); +#endif + + float mouseData2Rotation; + // v = w * r, we don't know r yet so lets assume r=1.) + float mouseData2PanZoom; + + // Grab the I3dmouseParam interface + I3dMouseParam& i3dmouseParam = f3dMouseParams; + // Take a look at the users preferred speed setting and adjust the sensitivity accordingly + I3dMouseSensor::ESpeed speedSetting = i3dmouseParam.GetSpeed(); + // See "Programming for the 3D Mouse", Section 5.1.3 + float speed = (speedSetting == I3dMouseSensor::kLowSpeed ? 0.25f : speedSetting == I3dMouseSensor::kHighSpeed ? 4.f : 1.f); + + // Multiplying by the following will convert the 3d mouse data to real world units + mouseData2PanZoom = speed; + mouseData2Rotation = speed; + + std::map::iterator iterator=fDevice2Data.begin(); + while (iterator != fDevice2Data.end()) { + + // If we have not received data for a while send a zero event + if ((--(iterator->second.fTimeToLive)) == 0) { + iterator->second.fAxes.assign(6, .0); + } else if (/*!t_bPoll3dmouse &&*/ !iterator->second.fIsDirty) { + // If we are not polling then only handle the data that was actually received + ++iterator; + continue; + } + iterator->second.fIsDirty=false; + + // get a copy of the device + HANDLE hdevice = iterator->first; + + // get a copy of the motion vectors and apply the user filters + std::vector motionData = iterator->second.fAxes; + + // apply the user filters + + // Pan Zoom filter + // See "Programming for the 3D Mouse", Section 5.1.2 + if (!i3dmouseParam.IsPanZoom()) { + // Pan zoom is switched off so set the translation vector values to zero + motionData[0] = motionData[1] = motionData[2] = 0.; + } + + // Rotate filter + // See "Programming for the 3D Mouse", Section 5.1.1 + if (!i3dmouseParam.IsRotate()) { + // Rotate is switched off so set the rotation vector values to zero + motionData[3] = motionData[4] = motionData[5] = 0.; + } + + // convert the translation vector into physical data + for (int axis = 0; axis < 3; axis++) { + motionData[axis] *= mouseData2PanZoom; + } + // convert the directed Rotate vector into physical data + // See "Programming for the 3D Mouse", Section 7.2.2 + for (int axis = 3; axis < 6; axis++) { + motionData[axis] *= mouseData2Rotation; + } + + // Now that the data has had the filters and sensitivty settings applied + // calculate the displacements since the last view update + for (int axis = 0; axis < 6; axis++) { + motionData[axis] *= dwElapsedTime; + } + + + // Now a bit of book keeping before passing on the data + if (iterator->second.IsZero()) { + iterator = fDevice2Data.erase(iterator); + } else { + ++iterator; + } + + // Work out which will be the next device + HANDLE hNextDevice = 0; + if (iterator != fDevice2Data.end()) { + hNextDevice = iterator->first; + } + + // Pass the 3dmouse input to the view controller + Move3d(hdevice, motionData); + + // Because we don't know what happened in the previous call, the cache might have + // changed so reload the iterator + iterator = fDevice2Data.find(hNextDevice); + } + + if (!fDevice2Data.empty()) { + fLast3dmouseInputTime = dwNow; + } else { + fLast3dmouseInputTime = 0; + } +} + +/*! + Called when new raw input data is available +*/ +void Gui::GUIApplicationNativeEventAware::OnRawInput(UINT nInputCode, HRAWINPUT hRawInput) +{ + const size_t cbSizeOfBuffer=1024; + BYTE pBuffer[cbSizeOfBuffer]; + + PRAWINPUT pRawInput = reinterpret_cast(pBuffer); + UINT cbSize = cbSizeOfBuffer; + + if (::GetRawInputData(hRawInput, RID_INPUT, pRawInput, &cbSize, sizeof(RAWINPUTHEADER)) == static_cast(-1)) { + return; + } + + bool b3dmouseInput = TranslateRawInputData(nInputCode, pRawInput); + ::DefRawInputProc(&pRawInput, 1, sizeof(RAWINPUTHEADER)); + + // Check for any buffered messages + cbSize = cbSizeOfBuffer; + UINT nCount = this->GetRawInputBuffer(pRawInput, &cbSize, sizeof(RAWINPUTHEADER)); + if (nCount == (UINT)-1) { + qDebug ("GetRawInputBuffer returned error %d\n", GetLastError()); + } + + while (nCount>0 && nCount != static_cast(-1)) { + PRAWINPUT pri = pRawInput; + UINT nInput; + for (nInput=0; nInputGetRawInputBuffer(pRawInput, &cbSize, sizeof(RAWINPUTHEADER)); + } + + // If we have mouse input data for the app then tell tha app about it + if (b3dmouseInput) { + On3dmouseInput(); + } +} + + + +bool Gui::GUIApplicationNativeEventAware::TranslateRawInputData(UINT nInputCode, PRAWINPUT pRawInput) +{ + bool bIsForeground = (nInputCode == RIM_INPUT); + +#if _TRACE_RI_TYPE + qDebug("Rawinput.header.dwType=0x%x\n", pRawInput->header.dwType); +#endif + // We are not interested in keyboard or mouse data received via raw input + if (pRawInput->header.dwType != RIM_TYPEHID) return false; + +#if _TRACE_RIDI_DEVICENAME + UINT dwSize=0; + if (::GetRawInputDeviceInfo(pRawInput->header.hDevice, RIDI_DEVICENAME, NULL, &dwSize) == 0) { + std::vector szDeviceName(dwSize+1); + if (::GetRawInputDeviceInfo(pRawInput->header.hDevice, RIDI_DEVICENAME, &szDeviceName[0], &dwSize) >0) { + qDebug("Device Name = %s\nDevice handle = 0x%x\n", &szDeviceName[0], pRawInput->header.hDevice); + } + } +#endif + + RID_DEVICE_INFO sRidDeviceInfo; + sRidDeviceInfo.cbSize = sizeof(RID_DEVICE_INFO); + UINT cbSize = sizeof(RID_DEVICE_INFO); + + if (::GetRawInputDeviceInfo(pRawInput->header.hDevice, RIDI_DEVICEINFO, &sRidDeviceInfo, &cbSize) == cbSize) { +#if _TRACE_RIDI_DEVICEINFO + switch (sRidDeviceInfo.dwType) { + case RIM_TYPEMOUSE: + qDebug("\tsRidDeviceInfo.dwType=RIM_TYPEMOUSE\n"); + break; + case RIM_TYPEKEYBOARD: + qDebug("\tsRidDeviceInfo.dwType=RIM_TYPEKEYBOARD\n"); + break; + case RIM_TYPEHID: + qDebug("\tsRidDeviceInfo.dwType=RIM_TYPEHID\n"); + qDebug("\tVendor=0x%x\n\tProduct=0x%x\n\tUsagePage=0x%x\n\tUsage=0x%x\n", + sRidDeviceInfo.hid.dwVendorId, + sRidDeviceInfo.hid.dwProductId, + sRidDeviceInfo.hid.usUsagePage, + sRidDeviceInfo.hid.usUsage); + break; + } +#endif + + if (sRidDeviceInfo.hid.dwVendorId == LOGITECH_VENDOR_ID) { + if (pRawInput->data.hid.bRawData[0] == 0x01) { // Translation vector + + TInputData& deviceData = fDevice2Data[pRawInput->header.hDevice]; + deviceData.fTimeToLive = kTimeToLive; + if (bIsForeground) { + short* pnRawData = reinterpret_cast(&pRawInput->data.hid.bRawData[1]); + // Cache the pan zoom data + deviceData.fAxes[0] = static_cast(pnRawData[0]); + deviceData.fAxes[1] = static_cast(pnRawData[1]); + deviceData.fAxes[2] = static_cast(pnRawData[2]); + +#if _TRACE_RI_RAWDATA + qDebug("Pan/Zoom RI Data =\t0x%x,\t0x%x,\t0x%x\n", + pnRawData[0], pnRawData[1], pnRawData[2]); +#endif + if (pRawInput->data.hid.dwSizeHid >= 13) {// Highspeed package + // Cache the rotation data + deviceData.fAxes[3] = static_cast(pnRawData[3]); + deviceData.fAxes[4] = static_cast(pnRawData[4]); + deviceData.fAxes[5] = static_cast(pnRawData[5]); + deviceData.fIsDirty = true; +#if _TRACE_RI_RAWDATA + qDebug("Rotation RI Data =\t0x%x,\t0x%x,\t0x%x\n", + pnRawData[3], pnRawData[4], pnRawData[5]); +#endif + return true; + } + } else { // Zero out the data if the app is not in forground + deviceData.fAxes.assign(6, 0.f); + } + } else if (pRawInput->data.hid.bRawData[0] == 0x02) { // Rotation vector + // If we are not in foreground do nothing + // The rotation vector was zeroed out with the translation vector in the previous message + if (bIsForeground) { + TInputData& deviceData = fDevice2Data[pRawInput->header.hDevice]; + deviceData.fTimeToLive = kTimeToLive; + + short* pnRawData = reinterpret_cast(&pRawInput->data.hid.bRawData[1]); + // Cache the rotation data + deviceData.fAxes[3] = static_cast(pnRawData[0]); + deviceData.fAxes[4] = static_cast(pnRawData[1]); + deviceData.fAxes[5] = static_cast(pnRawData[2]); + deviceData.fIsDirty = true; + +#if _TRACE_RI_RAWDATA + qDebug("Rotation RI Data =\t0x%x,\t0x%x,\t0x%x\n", + pnRawData[0], pnRawData[1], pnRawData[2]); +#endif + return true; + } + } else if (pRawInput->data.hid.bRawData[0] == 0x03) { // Keystate change + // this is a package that contains 3d mouse keystate information + // bit0=key1, bit=key2 etc. + + + unsigned long dwKeystate = *reinterpret_cast(&pRawInput->data.hid.bRawData[1]); +#if _TRACE_RI_RAWDATA + qDebug("ButtonData =0x%x\n", dwKeystate); +#endif + // Log the keystate changes + unsigned long dwOldKeystate = fDevice2Keystate[pRawInput->header.hDevice]; + if (dwKeystate != 0) { + fDevice2Keystate[pRawInput->header.hDevice] = dwKeystate; + } else { + fDevice2Keystate.erase(pRawInput->header.hDevice); + } + + // Only call the keystate change handlers if the app is in foreground + if (bIsForeground) { + unsigned long dwChange = dwKeystate ^ dwOldKeystate; + + + for (int nKeycode=1; nKeycode<33; nKeycode++) { + if (dwChange & 0x01) { + int nVirtualKeyCode = HidToVirtualKey(sRidDeviceInfo.hid.dwProductId, nKeycode); + if (nVirtualKeyCode) { + if (dwKeystate&0x01) { + On3dmouseKeyDown(pRawInput->header.hDevice, nVirtualKeyCode); + } else { + On3dmouseKeyUp(pRawInput->header.hDevice, nVirtualKeyCode); + } + } + } + dwChange >>=1; + dwKeystate >>=1; + } + } + } + } + } + return false; +} +#endif // _USE_3DCONNEXION_SDK diff --git a/src/Gui/3Dconnexion/I3dMouseParams.h b/src/Gui/3Dconnexion/I3dMouseParams.h new file mode 100644 index 000000000..62d3072d8 --- /dev/null +++ b/src/Gui/3Dconnexion/I3dMouseParams.h @@ -0,0 +1,91 @@ + +/* +Development tools and related technology provided under license from 3Dconnexion. +(c) 1992 - 2012 3Dconnexion. All rights reserved +*/ + +#ifndef I3D_MOUSE_PARAMS_H +#define I3D_MOUSE_PARAMS_H + +/* + Parameters for the 3D mouse based on the SDK from 3Dconnexion +*/ + +class I3dMouseSensor +{ +public: + + enum ESpeed { + kLowSpeed = 0, + kMidSpeed, + kHighSpeed + }; + +virtual bool IsPanZoom() const = 0; +virtual bool IsRotate() const = 0; +virtual ESpeed GetSpeed() const = 0; + +virtual void SetPanZoom(bool isPanZoom) = 0; +virtual void SetRotate(bool isRotate) = 0; +virtual void SetSpeed(ESpeed speed) = 0; + +protected: + +virtual ~I3dMouseSensor() {} + +}; + + +class I3dMouseNavigation +{ +public: + + enum EPivot { + kManualPivot = 0, + kAutoPivot, + kAutoPivotOverride + }; + + enum ENavigation { + kObjectMode = 0, + kCameraMode, + kFlyMode, + kWalkMode, + kHelicopterMode + }; + + enum EPivotVisibility { + kHidePivot = 0, + kShowPivot, + kShowMovingPivot + }; + + +virtual ENavigation GetNavigationMode() const = 0; +virtual EPivot GetPivotMode() const = 0; +virtual EPivotVisibility GetPivotVisibility() const = 0; +virtual bool IsLockHorizon() const = 0; + +virtual void SetLockHorizon(bool bOn) = 0; +virtual void SetNavigationMode(ENavigation navigation) = 0; +virtual void SetPivotMode(EPivot pivot) = 0; +virtual void SetPivotVisibility(EPivotVisibility visibility) = 0; + +protected: + +virtual ~I3dMouseNavigation(){} + + +}; + + +class I3dMouseParam : public I3dMouseSensor, public I3dMouseNavigation +{ +public: + +virtual ~I3dMouseParam() {} + +}; + +#endif // I3D_MOUSE_PARAMS_H + diff --git a/src/Gui/3Dconnexion/MouseParameters.cpp b/src/Gui/3Dconnexion/MouseParameters.cpp new file mode 100644 index 000000000..5a822fded --- /dev/null +++ b/src/Gui/3Dconnexion/MouseParameters.cpp @@ -0,0 +1,95 @@ + +/* +Development tools and related technology provided under license from 3Dconnexion. +(c) 1992 - 2012 3Dconnexion. All rights reserved +*/ + + +#include "PreCompiled.h" +#include "MouseParameters.h" + +MouseParameters::MouseParameters(): fNavigation(kObjectMode) + , fPivot(kAutoPivot) + , fPivotVisibility(kShowPivot) + , fIsLockHorizon(true) + , fIsPanZoom(true) + , fIsRotate(true) + , fSpeed(kLowSpeed) +{ +} + +MouseParameters::~MouseParameters() +{ +} + +bool MouseParameters::IsPanZoom() const +{ + return fIsPanZoom; +} + +bool MouseParameters::IsRotate() const +{ + return fIsRotate; +} + +MouseParameters::ESpeed MouseParameters::GetSpeed() const +{ + return fSpeed; +} + +void MouseParameters::SetPanZoom(bool isPanZoom) +{ + fIsPanZoom=isPanZoom; +} + +void MouseParameters::SetRotate(bool isRotate) +{ + fIsRotate=isRotate; +} + +void MouseParameters::SetSpeed(ESpeed speed) +{ + fSpeed=speed; +} + + +MouseParameters::ENavigation MouseParameters::GetNavigationMode() const +{ + return fNavigation; +} + +MouseParameters::EPivot MouseParameters::GetPivotMode() const +{ + return fPivot; +} + +MouseParameters::EPivotVisibility MouseParameters::GetPivotVisibility() const +{ + return fPivotVisibility; +} + +bool MouseParameters::IsLockHorizon() const +{ + return fIsLockHorizon; +} + +void MouseParameters::SetLockHorizon(bool bOn) +{ + fIsLockHorizon=bOn; +} + +void MouseParameters::SetNavigationMode(ENavigation navigation) +{ + fNavigation=navigation; +} + +void MouseParameters::SetPivotMode(EPivot pivot) +{ + if (fPivot!=kManualPivot || pivot!=kAutoPivotOverride) + fPivot = pivot; +} + +void MouseParameters::SetPivotVisibility(EPivotVisibility visibility) +{ + fPivotVisibility = visibility; +} diff --git a/src/Gui/3Dconnexion/MouseParameters.h b/src/Gui/3Dconnexion/MouseParameters.h new file mode 100644 index 000000000..3e00701bf --- /dev/null +++ b/src/Gui/3Dconnexion/MouseParameters.h @@ -0,0 +1,56 @@ + +/* +Development tools and related technology provided under license from 3Dconnexion. +(c) 1992 - 2012 3Dconnexion. All rights reserved +*/ + + +#ifndef T3D_MOUSE_PARAMS_H +#define T3D_MOUSE_PARAMS_H + +#include "I3dMouseParams.h" + + +class MouseParameters : public I3dMouseParam +{ +public: + MouseParameters(); + ~MouseParameters(); + + // I3dmouseSensor interface + bool IsPanZoom() const; + bool IsRotate() const; + ESpeed GetSpeed() const; + + void SetPanZoom(bool isPanZoom); + void SetRotate(bool isRotate); + void SetSpeed(ESpeed speed); + + // I3dmouseNavigation interface + ENavigation GetNavigationMode() const; + EPivot GetPivotMode() const; + EPivotVisibility GetPivotVisibility() const; + bool IsLockHorizon() const; + + void SetLockHorizon(bool bOn); + void SetNavigationMode(ENavigation navigation); + void SetPivotMode(EPivot pivot); + void SetPivotVisibility(EPivotVisibility visibility); + +private: + + MouseParameters (const MouseParameters&); + const MouseParameters& operator =(const MouseParameters&); + + ENavigation fNavigation; + EPivot fPivot; + EPivotVisibility fPivotVisibility; + bool fIsLockHorizon; + + bool fIsPanZoom; + bool fIsRotate; + ESpeed fSpeed; +}; + +#endif // T3D_MOUSE_PARAMS_H + diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index b7788cfcd..b4bf7c5a5 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -3,6 +3,9 @@ if(WIN32) add_definitions(-DFCGui -DQIIS_MAKEDLL) endif(WIN32) +if (FREECAD_USE_3DCONNEXION) +add_definitions(-D_USE_3DCONNEXION_SDK) +endif(FREECAD_USE_3DCONNEXION) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} @@ -78,6 +81,17 @@ SET(FreeCADGui_XML_SRCS ) SOURCE_GROUP("XML" FILES ${FreeCADApp_XML_SRCS}) +# The 3D Connexion SDK files +if(FREECAD_USE_3DCONNEXION) +SET(FreeCADGui_SDK_SRCS + 3Dconnexion/I3dMouseParams.h + 3Dconnexion/MouseParameters.cpp + 3Dconnexion/MouseParameters.h + 3Dconnexion/GuiApplicationNativeEventAwareWin32.cpp +) +SOURCE_GROUP("3D connexion SDK" FILES ${FreeCADGui_SDK_SRCS}) +endif(FREECAD_USE_3DCONNEXION) + set(Gui_MOC_HDRS Action.h CallTips.h @@ -769,6 +783,7 @@ SET(FreeCADGui_SRCS ) SET(FreeCADGui_SRCS + ${FreeCADGui_SDK_SRCS} ${FreeCADGui_CPP_SRCS} ${FreeCADGui_XML_SRCS} ${iis_MOC_SRCS} diff --git a/src/Gui/GuiApplicationNativeEventAware.cpp b/src/Gui/GuiApplicationNativeEventAware.cpp index e741fcfa4..f14beb3bb 100644 --- a/src/Gui/GuiApplicationNativeEventAware.cpp +++ b/src/Gui/GuiApplicationNativeEventAware.cpp @@ -40,11 +40,10 @@ #endif #endif -#ifdef Q_WS_WIN -#include +#ifdef _USE_3DCONNEXION_SDK +Gui::GUIApplicationNativeEventAware* Gui::GUIApplicationNativeEventAware::gMouseInput = 0; #endif - Gui::GUIApplicationNativeEventAware::GUIApplicationNativeEventAware(int &argc, char *argv[]) : QApplication (argc, argv), spaceballPresent(false) { @@ -59,11 +58,18 @@ Gui::GUIApplicationNativeEventAware::~GUIApplicationNativeEventAware() else Base::Console().Log("Disconnected from spacenav daemon\n"); #endif + +#ifdef _USE_3DCONNEXION_SDK + if (gMouseInput == this) { + gMouseInput = 0; + } +#endif } void Gui::GUIApplicationNativeEventAware::initSpaceball(QMainWindow *window) { mainWindow = window; + #ifdef SPNAV_FOUND if (spnav_x11_open(QX11Info::display(), window->winId()) == -1) Base::Console().Log("Couldn't connect to spacenav daemon\n"); @@ -74,6 +80,19 @@ void Gui::GUIApplicationNativeEventAware::initSpaceball(QMainWindow *window) } #endif +#ifdef _USE_3DCONNEXION_SDK + spaceballPresent = Is3dmouseAttached(); + + if (spaceballPresent) { + fLast3dmouseInputTime = 0; + + if (InitializeRawInput(mainWindow->winId())){ + gMouseInput = this; + qApp->setEventFilter(Gui::GUIApplicationNativeEventAware::RawInputEventFilter); + } + } +#endif // _USE_3DCONNEXION_SDK + Spaceball::MotionEvent::MotionEventType = QEvent::registerEventType(); Spaceball::ButtonEvent::ButtonEventType = QEvent::registerEventType(); } @@ -146,15 +165,8 @@ bool Gui::GUIApplicationNativeEventAware::x11EventFilter(XEvent *event) return true; #else return false; -#endif +#endif // SPNAV_FOUND } -#endif - -#ifdef Q_WS_WIN -bool Gui::GUIApplicationNativeEventAware::winEventFilter(MSG *msg, long *result) -{ - return false; -} -#endif +#endif // Q_WS_X11 #include "moc_GuiApplicationNativeEventAware.cpp" diff --git a/src/Gui/GuiApplicationNativeEventAware.h b/src/Gui/GuiApplicationNativeEventAware.h index b43245a65..113dd4b1f 100644 --- a/src/Gui/GuiApplicationNativeEventAware.h +++ b/src/Gui/GuiApplicationNativeEventAware.h @@ -29,6 +29,19 @@ class QMainWindow; + +#ifdef _USE_3DCONNEXION_SDK +#include "3Dconnexion/MouseParameters.h" + +#include +#include + +// #define _WIN32_WINNT 0x0501 //target at least windows XP + +#include + +#endif // _USE_3DCONNEXION_SDK + namespace Gui { class GUIApplicationNativeEventAware : public QApplication @@ -38,18 +51,65 @@ namespace Gui GUIApplicationNativeEventAware(int &argc, char *argv[]); ~GUIApplicationNativeEventAware(); void initSpaceball(QMainWindow *window); + bool isSpaceballPresent() const {return spaceballPresent;} bool processSpaceballEvent(QObject *object, QEvent *event); -#ifdef Q_WS_X11 - bool x11EventFilter(XEvent *event); -#endif - -#ifdef Q_WS_WIN - bool winEventFilter(MSG *msg, long *result); -#endif - bool isSpaceballPresent(){return spaceballPresent;} private: bool spaceballPresent; QMainWindow *mainWindow; + +// For X11 +#ifdef Q_WS_X11 + public: + bool x11EventFilter(XEvent *event); +#endif // Q_WS_X11 + +// For Windows +#ifdef _USE_3DCONNEXION_SDK + public: + static bool Is3dmouseAttached(); + + I3dMouseParam& MouseParams(); + const I3dMouseParam& MouseParams() const; + + virtual void Move3d(HANDLE device, std::vector& motionData); + virtual void On3dmouseKeyDown(HANDLE device, int virtualKeyCode); + virtual void On3dmouseKeyUp(HANDLE device, int virtualKeyCode); + + private: + bool InitializeRawInput(HWND hwndTarget); + static bool RawInputEventFilter(void* msg, long* result); + void OnRawInput(UINT nInputCode, HRAWINPUT hRawInput); + UINT GetRawInputBuffer(PRAWINPUT pData, PUINT pcbSize, UINT cbSizeHeader); + bool TranslateRawInputData(UINT nInputCode, PRAWINPUT pRawInput); + void On3dmouseInput(); + + class TInputData + { + public: + TInputData() : fAxes(6) {} + + bool IsZero() { + return (0.==fAxes[0] && 0.==fAxes[1] && 0.==fAxes[2] && + 0.==fAxes[3] && 0.==fAxes[4] && 0.==fAxes[5]); + } + + int fTimeToLive; // For telling if the device was unplugged while sending data + bool fIsDirty; + std::vector fAxes; + }; + + HWND fWindow; + + // Data cache to handle multiple rawinput devices + std::map< HANDLE, TInputData> fDevice2Data; + std::map< HANDLE, unsigned long> fDevice2Keystate; + // 3dmouse parameters + MouseParameters f3dMouseParams; // Rotate, Pan Zoom etc. + // use to calculate distance traveled since last event + DWORD fLast3dmouseInputTime; + static Gui::GUIApplicationNativeEventAware* gMouseInput; +#endif // _USE_3DCONNEXION_SDK }; } + #endif // GUIAPPLICATIONNATIVEEVENTAWARE_H diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 769af1a07..46f1183e9 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -26,6 +26,7 @@ # include # include # include +# include # include # include # include @@ -182,7 +183,11 @@ AboutDialogFactory::~AboutDialogFactory() QDialog *AboutDialogFactory::create(QWidget *parent) const { +#ifdef _USE_3DCONNEXION_SDK + return new AboutDialog(true, parent); +#else return new AboutDialog(false, parent); +#endif } const AboutDialogFactory *AboutDialogFactory::defaultFactory() @@ -334,8 +339,54 @@ void AboutDialog::setupLabels() } } +namespace Gui { +namespace Dialog { + +class GuiExport LicenseDialog : public QDialog +{ +public: + LicenseDialog(QWidget *parent = 0) : QDialog(parent, Qt::FramelessWindowHint) + { + QString info; +#ifdef _USE_3DCONNEXION_SDK + info = QString::fromAscii( + "3D Mouse Support:\n" + "Development tools and related technology provided under license from 3Dconnexion.\n" + "(c) 1992 - 2012 3Dconnexion. All rights reserved"); +#endif + statusLabel = new QLabel(info); + buttonBox = new QDialogButtonBox; + buttonBox->setStandardButtons(QDialogButtonBox::Ok); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + + QHBoxLayout *topLayout = new QHBoxLayout; + topLayout->addWidget(statusLabel); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(topLayout); + mainLayout->addWidget(buttonBox); + setLayout(mainLayout); + + setWindowTitle(tr("Copyright")); + } + ~LicenseDialog() + { + } + +private: + QLabel *statusLabel; + QDialogButtonBox *buttonBox; +}; + +} // namespace Dialog +} // namespace Gui + void AboutDialog::on_licenseButton_clicked() { +#ifdef _USE_3DCONNEXION_SDK + LicenseDialog dlg(this); + dlg.exec(); +#endif } void AboutDialog::on_copyButton_clicked() diff --git a/src/Tools/makedist.py b/src/Tools/makedist.py index e42c69a33..66c4a3ea9 100644 --- a/src/Tools/makedist.py +++ b/src/Tools/makedist.py @@ -34,6 +34,7 @@ def main(): gitattr.write("zipios++ export-ignore\n") gitattr.write("Pivy-0.5 export-ignore\n") gitattr.write("Pivy export-ignore\n") + gitattr.write("3Dconnexion export-ignore\n") gitattr.write("Kuka export-ignore\n") gitattr.close() From 32d38561c87b8250909a747e3171e2ef2efc2553 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 6 Jul 2012 18:47:11 +0200 Subject: [PATCH 412/517] Add a sensitivity value to improve issue #0000772 --- src/Gui/NavigationStyle.cpp | 20 ++++++++++++++++++++ src/Gui/NavigationStyle.h | 3 +++ src/Gui/View3DInventor.cpp | 5 +++++ 3 files changed, 28 insertions(+) diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index 50dba3cf2..cd70bf0ba 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -54,10 +54,12 @@ struct NavigationStyleP { SbVec3f focal1, focal2; SbRotation endRotation; SoTimerSensor * animsensor; + float sensitivity; NavigationStyleP() { this->animationsteps = 0; + this->sensitivity = 2.0f; } static void viewAnimationCB(void * data, SoSensor * sensor); }; @@ -780,6 +782,14 @@ void NavigationStyle::spin(const SbVec2f & pointerpos) this->spinprojector->project(lastpos); SbRotation r; this->spinprojector->projectAndGetRotation(pointerpos, r); + float sensitivity = getSensitivity(); + if (sensitivity > 1.0f) { + SbVec3f axis; + float radians; + r.getValue(axis, radians); + radians = sensitivity * radians; + r.setValue(axis, radians); + } r.invert(); this->reorientCamera(viewer->getCamera(), r); @@ -923,6 +933,16 @@ void NavigationStyle::stopAnimating(void) NavigationStyle::IDLE : NavigationStyle::INTERACT); } +void NavigationStyle::setSensitivity(float val) +{ + PRIVATE(this)->sensitivity = val; +} + +float NavigationStyle::getSensitivity() const +{ + return PRIVATE(this)->sensitivity; +} + void NavigationStyle::setZoomInverted(SbBool on) { this->invertZoom = on; diff --git a/src/Gui/NavigationStyle.h b/src/Gui/NavigationStyle.h index cf7a1cdbc..760ff5399 100644 --- a/src/Gui/NavigationStyle.h +++ b/src/Gui/NavigationStyle.h @@ -110,6 +110,9 @@ public: void stopAnimating(void); SbBool isAnimating(void) const; + void setSensitivity(float); + float getSensitivity() const; + void setZoomInverted(SbBool); SbBool isZoomInverted() const; void setZoomStep(float); diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index e1f035a4a..86f83fd08 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -140,6 +140,7 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W OnChange(*hGrp,"BacklightIntensity"); OnChange(*hGrp,"NavigationStyle"); OnChange(*hGrp,"OrbitStyle"); + OnChange(*hGrp,"Sensitivity"); stopSpinTimer = new QTimer(this); connect(stopSpinTimer, SIGNAL(timeout()), this, SLOT(stopAnimating())); @@ -274,6 +275,10 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M int style = rGrp.GetInt("OrbitStyle",1); _viewer->navigationStyle()->setOrbitStyle(NavigationStyle::OrbitStyle(style)); } + else if (strcmp(Reason,"Sensitivity") == 0) { + float val = rGrp.GetFloat("Sensitivity",2.0f); + _viewer->navigationStyle()->setSensitivity(val); + } else if (strcmp(Reason,"InvertZoom") == 0) { bool on = rGrp.GetBool("InvertZoom", false); _viewer->navigationStyle()->setZoomInverted(on); From c3d84e9bf8b9cd56256e7b930fdb91316ca0fb77 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 7 Jul 2012 00:28:03 +0200 Subject: [PATCH 413/517] 0000772: Navigation style suggestion - do not change cursor location when you are controling view --- src/Gui/BlenderNavigationStyle.cpp | 6 ++++++ src/Gui/CADNavigationStyle.cpp | 6 ++++++ src/Gui/InventorNavigationStyle.cpp | 4 ++++ src/Gui/NavigationStyle.cpp | 31 +++++++++++++++++++++++++++++ src/Gui/NavigationStyle.h | 7 +++++++ src/Gui/TouchpadNavigationStyle.cpp | 6 ++++++ src/Gui/View3DInventor.cpp | 5 +++++ 7 files changed, 65 insertions(+) diff --git a/src/Gui/BlenderNavigationStyle.cpp b/src/Gui/BlenderNavigationStyle.cpp index 154180072..a33763596 100644 --- a/src/Gui/BlenderNavigationStyle.cpp +++ b/src/Gui/BlenderNavigationStyle.cpp @@ -181,6 +181,7 @@ SbBool BlenderNavigationStyle::processSoEvent(const SoEvent * const ev) else if (press && (this->currentmode == NavigationStyle::PANNING || this->currentmode == NavigationStyle::ZOOMING)) { newmode = NavigationStyle::DRAGGING; + saveCursorPosition(ev); this->centerTime = ev->getTime(); processed = TRUE; } @@ -221,6 +222,7 @@ SbBool BlenderNavigationStyle::processSoEvent(const SoEvent * const ev) if (press && (this->currentmode == NavigationStyle::PANNING || this->currentmode == NavigationStyle::ZOOMING)) { newmode = NavigationStyle::DRAGGING; + saveCursorPosition(ev); this->centerTime = ev->getTime(); processed = TRUE; } @@ -285,6 +287,7 @@ SbBool BlenderNavigationStyle::processSoEvent(const SoEvent * const ev) else if (this->currentmode == NavigationStyle::DRAGGING) { this->addToLog(event->getPosition(), event->getTime()); this->spin(posn); + moveCursorPosition(); processed = TRUE; } } @@ -338,6 +341,9 @@ SbBool BlenderNavigationStyle::processSoEvent(const SoEvent * const ev) newmode = NavigationStyle::PANNING; break; case BUTTON3DOWN: + if (newmode != NavigationStyle::DRAGGING) { + saveCursorPosition(ev); + } newmode = NavigationStyle::DRAGGING; break; case CTRLDOWN|SHIFTDOWN|BUTTON2DOWN: diff --git a/src/Gui/CADNavigationStyle.cpp b/src/Gui/CADNavigationStyle.cpp index a85124a02..b6e49d632 100644 --- a/src/Gui/CADNavigationStyle.cpp +++ b/src/Gui/CADNavigationStyle.cpp @@ -210,6 +210,7 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev) else if (press && (this->currentmode == NavigationStyle::PANNING || this->currentmode == NavigationStyle::ZOOMING)) { newmode = NavigationStyle::DRAGGING; + saveCursorPosition(ev); this->centerTime = ev->getTime(); processed = TRUE; } @@ -250,6 +251,7 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev) if (press && (this->currentmode == NavigationStyle::PANNING || this->currentmode == NavigationStyle::ZOOMING)) { newmode = NavigationStyle::DRAGGING; + saveCursorPosition(ev); this->centerTime = ev->getTime(); processed = TRUE; } @@ -314,6 +316,7 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev) else if (this->currentmode == NavigationStyle::DRAGGING) { this->addToLog(event->getPosition(), event->getTime()); this->spin(posn); + moveCursorPosition(); processed = TRUE; } } @@ -379,6 +382,9 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev) newmode = NavigationStyle::PANNING; break; case SHIFTDOWN|BUTTON2DOWN: + if (newmode != NavigationStyle::DRAGGING) { + saveCursorPosition(ev); + } newmode = NavigationStyle::DRAGGING; break; case CTRLDOWN|SHIFTDOWN|BUTTON2DOWN: diff --git a/src/Gui/InventorNavigationStyle.cpp b/src/Gui/InventorNavigationStyle.cpp index e1e6f4755..2ebc53371 100644 --- a/src/Gui/InventorNavigationStyle.cpp +++ b/src/Gui/InventorNavigationStyle.cpp @@ -279,6 +279,7 @@ SbBool InventorNavigationStyle::processSoEvent(const SoEvent * const ev) else if (this->currentmode == NavigationStyle::DRAGGING) { this->addToLog(event->getPosition(), event->getTime()); this->spin(posn); + moveCursorPosition(); processed = TRUE; } } @@ -316,6 +317,9 @@ SbBool InventorNavigationStyle::processSoEvent(const SoEvent * const ev) } break; case BUTTON1DOWN: + if (newmode != NavigationStyle::DRAGGING) { + saveCursorPosition(ev); + } newmode = NavigationStyle::DRAGGING; break; case BUTTON3DOWN: diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index cd70bf0ba..c533e8e76 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -55,11 +55,13 @@ struct NavigationStyleP { SbRotation endRotation; SoTimerSensor * animsensor; float sensitivity; + SbBool resetcursorpos; NavigationStyleP() { this->animationsteps = 0; this->sensitivity = 2.0f; + this->resetcursorpos = FALSE; } static void viewAnimationCB(void * data, SoSensor * sensor); }; @@ -844,6 +846,25 @@ SbBool NavigationStyle::doSpin() return FALSE; } +void NavigationStyle::saveCursorPosition(const SoEvent * const ev) +{ + this->globalPos.setValue(QCursor::pos().x(), QCursor::pos().y()); + this->localPos = ev->getPosition(); +} + +void NavigationStyle::moveCursorPosition() +{ + if (!isResetCursorPosition()) + return; + + QPoint cpos = QCursor::pos(); + if (abs(cpos.x()-globalPos[0]) > 10 || + abs(cpos.y()-globalPos[1]) > 10) { + QCursor::setPos(globalPos[0], globalPos[1]-1); + this->log.position[0] = localPos; + } +} + void NavigationStyle::updateAnimation() { SbTime now = SbTime::getTimeOfDay(); @@ -943,6 +964,16 @@ float NavigationStyle::getSensitivity() const return PRIVATE(this)->sensitivity; } +void NavigationStyle::setResetCursorPosition(SbBool on) +{ + PRIVATE(this)->resetcursorpos = on; +} + +SbBool NavigationStyle::isResetCursorPosition() const +{ + return PRIVATE(this)->resetcursorpos; +} + void NavigationStyle::setZoomInverted(SbBool on) { this->invertZoom = on; diff --git a/src/Gui/NavigationStyle.h b/src/Gui/NavigationStyle.h index 760ff5399..be0200dcb 100644 --- a/src/Gui/NavigationStyle.h +++ b/src/Gui/NavigationStyle.h @@ -113,6 +113,9 @@ public: void setSensitivity(float); float getSensitivity() const; + void setResetCursorPosition(SbBool); + SbBool isResetCursorPosition() const; + void setZoomInverted(SbBool); SbBool isZoomInverted() const; void setZoomStep(float); @@ -175,6 +178,8 @@ protected: void doZoom(SoCamera * camera, SbBool forward, const SbVec2f& pos); void spin(const SbVec2f & pointerpos); SbBool doSpin(); + void moveCursorPosition(); + void saveCursorPosition(const SoEvent * const ev); SbBool handleEventInForeground(const SoEvent* const e); virtual SbBool processSoEvent(const SoEvent * const ev); @@ -195,6 +200,8 @@ protected: View3DInventorViewer* viewer; ViewerMode currentmode; SbVec2f lastmouseposition; + SbVec2s globalPos; + SbVec2s localPos; SbPlane panningplane; SbTime prevRedrawTime; SbTime centerTime; diff --git a/src/Gui/TouchpadNavigationStyle.cpp b/src/Gui/TouchpadNavigationStyle.cpp index e33323c33..9eca5aafc 100644 --- a/src/Gui/TouchpadNavigationStyle.cpp +++ b/src/Gui/TouchpadNavigationStyle.cpp @@ -185,6 +185,7 @@ SbBool TouchpadNavigationStyle::processSoEvent(const SoEvent * const ev) else if (press && (this->currentmode == NavigationStyle::PANNING || this->currentmode == NavigationStyle::ZOOMING)) { newmode = NavigationStyle::DRAGGING; + saveCursorPosition(ev); this->centerTime = ev->getTime(); processed = TRUE; } @@ -225,6 +226,7 @@ SbBool TouchpadNavigationStyle::processSoEvent(const SoEvent * const ev) if (press && (this->currentmode == NavigationStyle::PANNING || this->currentmode == NavigationStyle::ZOOMING)) { newmode = NavigationStyle::DRAGGING; + saveCursorPosition(ev); this->centerTime = ev->getTime(); processed = TRUE; } @@ -259,6 +261,7 @@ SbBool TouchpadNavigationStyle::processSoEvent(const SoEvent * const ev) else if (this->currentmode == NavigationStyle::DRAGGING) { this->addToLog(event->getPosition(), event->getTime()); this->spin(posn); + moveCursorPosition(); processed = TRUE; } } @@ -305,6 +308,9 @@ SbBool TouchpadNavigationStyle::processSoEvent(const SoEvent * const ev) break; case ALTDOWN: case CTRLDOWN|SHIFTDOWN: + if (newmode != NavigationStyle::DRAGGING) { + saveCursorPosition(ev); + } newmode = NavigationStyle::DRAGGING; break; case CTRLDOWN|SHIFTDOWN|BUTTON1DOWN: diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index 86f83fd08..735ab91bc 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -141,6 +141,7 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W OnChange(*hGrp,"NavigationStyle"); OnChange(*hGrp,"OrbitStyle"); OnChange(*hGrp,"Sensitivity"); + OnChange(*hGrp,"ResetCursorPosition"); stopSpinTimer = new QTimer(this); connect(stopSpinTimer, SIGNAL(timeout()), this, SLOT(stopAnimating())); @@ -279,6 +280,10 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M float val = rGrp.GetFloat("Sensitivity",2.0f); _viewer->navigationStyle()->setSensitivity(val); } + else if (strcmp(Reason,"ResetCursorPosition") == 0) { + bool on = rGrp.GetBool("ResetCursorPosition",false); + _viewer->navigationStyle()->setResetCursorPosition(on); + } else if (strcmp(Reason,"InvertZoom") == 0) { bool on = rGrp.GetBool("InvertZoom", false); _viewer->navigationStyle()->setZoomInverted(on); From e5b4f0028f91d4807a40995c16e4d8d56dd08987 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 7 Jul 2012 11:52:18 +0200 Subject: [PATCH 414/517] 0000788: OFF import doesn't handle empty lines properly --- src/Mod/Mesh/App/Core/MeshIO.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Mod/Mesh/App/Core/MeshIO.cpp b/src/Mod/Mesh/App/Core/MeshIO.cpp index 7d7024771..909c664f5 100644 --- a/src/Mod/Mesh/App/Core/MeshIO.cpp +++ b/src/Mod/Mesh/App/Core/MeshIO.cpp @@ -565,7 +565,8 @@ bool MeshInput::LoadOFF (std::istream &rstrIn) meshPoints.reserve(numPoints); meshFacets.reserve(numFaces); - for (int i=0; i Date: Sat, 7 Jul 2012 13:32:27 +0200 Subject: [PATCH 415/517] 0000736: when object is deleted, auto show its parametric objects --- src/Gui/Document.cpp | 3 ++ src/Mod/Part/Gui/ViewProviderBoolean.cpp | 60 ++++++++++++++++++++++++ src/Mod/Part/Gui/ViewProviderBoolean.h | 3 ++ src/Mod/Part/Gui/ViewProviderMirror.cpp | 33 +++++++++++++ src/Mod/Part/Gui/ViewProviderMirror.h | 3 ++ 5 files changed, 102 insertions(+) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 3b339bff4..7d6562911 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -405,6 +405,9 @@ void Document::slotDeletedObject(const App::DocumentObject& Obj) // cycling to all views of the document ViewProvider* viewProvider = getViewProvider(&Obj); +#if 0 // With this we can show child objects again if this method was called by undo + viewProvider->onDelete(std::vector()); +#endif if (viewProvider && viewProvider->getTypeId().isDerivedFrom (ViewProviderDocumentObject::getClassTypeId())) { // go through the views diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.cpp b/src/Mod/Part/Gui/ViewProviderBoolean.cpp index d73afe296..74aadfad5 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/Part/Gui/ViewProviderBoolean.cpp @@ -142,6 +142,26 @@ void ViewProviderBoolean::updateData(const App::Property* prop) this->DiffuseColor.setValues(colBool); } } + else if (prop->getTypeId() == App::PropertyLink::getClassTypeId()) { + App::DocumentObject *pBase = static_cast(prop)->getValue(); + if (pBase) + Gui::Application::Instance->hideViewProvider(pBase); + } +} + +bool ViewProviderBoolean::onDelete(const std::vector &) +{ + // get the input shapes + Part::Boolean* pBool = static_cast(getObject()); + App::DocumentObject *pBase = pBool->Base.getValue(); + App::DocumentObject *pTool = pBool->Tool.getValue(); + + if (pBase) + Gui::Application::Instance->showViewProvider(pBase); + if (pTool) + Gui::Application::Instance->showViewProvider(pTool); + + return true; } PROPERTY_SOURCE(PartGui::ViewProviderMultiFuse,PartGui::ViewProviderPart) @@ -207,6 +227,26 @@ void ViewProviderMultiFuse::updateData(const App::Property* prop) if (setColor) this->DiffuseColor.setValues(colBool); } + else if (prop->getTypeId() == App::PropertyLinkList::getClassTypeId()) { + std::vector pShapes = static_cast(prop)->getValues(); + for (std::vector::iterator it = pShapes.begin(); it != pShapes.end(); ++it) { + if (*it) + Gui::Application::Instance->hideViewProvider(*it); + } + } +} + +bool ViewProviderMultiFuse::onDelete(const std::vector &) +{ + // get the input shapes + Part::MultiFuse* pBool = static_cast(getObject()); + std::vector pShapes = pBool->Shapes.getValues(); + for (std::vector::iterator it = pShapes.begin(); it != pShapes.end(); ++it) { + if (*it) + Gui::Application::Instance->showViewProvider(*it); + } + + return true; } @@ -273,4 +313,24 @@ void ViewProviderMultiCommon::updateData(const App::Property* prop) if (setColor) this->DiffuseColor.setValues(colBool); } + else if (prop->getTypeId() == App::PropertyLinkList::getClassTypeId()) { + std::vector pShapes = static_cast(prop)->getValues(); + for (std::vector::iterator it = pShapes.begin(); it != pShapes.end(); ++it) { + if (*it) + Gui::Application::Instance->hideViewProvider(*it); + } + } +} + +bool ViewProviderMultiCommon::onDelete(const std::vector &) +{ + // get the input shapes + Part::MultiCommon* pBool = static_cast(getObject()); + std::vector pShapes = pBool->Shapes.getValues(); + for (std::vector::iterator it = pShapes.begin(); it != pShapes.end(); ++it) { + if (*it) + Gui::Application::Instance->showViewProvider(*it); + } + + return true; } diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.h b/src/Mod/Part/Gui/ViewProviderBoolean.h index 29c531109..04a409f81 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.h +++ b/src/Mod/Part/Gui/ViewProviderBoolean.h @@ -43,6 +43,7 @@ public: std::vector claimChildren(void) const; QIcon getIcon(void) const; void updateData(const App::Property*); + bool onDelete(const std::vector &); }; /// ViewProvider for the MultiFuse feature @@ -60,6 +61,7 @@ public: std::vector claimChildren(void) const; QIcon getIcon(void) const; void updateData(const App::Property*); + bool onDelete(const std::vector &); }; /// ViewProvider for the MultiFuse feature @@ -77,6 +79,7 @@ public: std::vector claimChildren(void) const; QIcon getIcon(void) const; void updateData(const App::Property*); + bool onDelete(const std::vector &); }; diff --git a/src/Mod/Part/Gui/ViewProviderMirror.cpp b/src/Mod/Part/Gui/ViewProviderMirror.cpp index fa32a921d..841fb402b 100644 --- a/src/Mod/Part/Gui/ViewProviderMirror.cpp +++ b/src/Mod/Part/Gui/ViewProviderMirror.cpp @@ -243,6 +243,17 @@ std::vector ViewProviderFillet::claimChildren() const return temp; } +bool ViewProviderFillet::onDelete(const std::vector &) +{ + // get the input shape + Part::Fillet* pFillet = static_cast(getObject()); + App::DocumentObject *pBase = pFillet->Base.getValue(); + if (pBase) + Gui::Application::Instance->showViewProvider(pBase); + + return true; +} + // --------------------------------------- PROPERTY_SOURCE(PartGui::ViewProviderChamfer, PartGui::ViewProviderPart) @@ -296,6 +307,17 @@ std::vector ViewProviderChamfer::claimChildren() const return temp; } +bool ViewProviderChamfer::onDelete(const std::vector &) +{ + // get the input shape + Part::Chamfer* pChamfer = static_cast(getObject()); + App::DocumentObject *pBase = pChamfer->Base.getValue(); + if (pBase) + Gui::Application::Instance->showViewProvider(pBase); + + return true; +} + // --------------------------------------- PROPERTY_SOURCE(PartGui::ViewProviderRevolution, PartGui::ViewProviderPart) @@ -315,3 +337,14 @@ std::vector ViewProviderRevolution::claimChildren() const temp.push_back(static_cast(getObject())->Source.getValue()); return temp; } + +bool ViewProviderRevolution::onDelete(const std::vector &) +{ + // get the input shape + Part::Revolution* pRevolve = static_cast(getObject()); + App::DocumentObject *pBase = pRevolve->Source.getValue(); + if (pBase) + Gui::Application::Instance->showViewProvider(pBase); + + return true; +} diff --git a/src/Mod/Part/Gui/ViewProviderMirror.h b/src/Mod/Part/Gui/ViewProviderMirror.h index 603bedeac..7e282b01a 100644 --- a/src/Mod/Part/Gui/ViewProviderMirror.h +++ b/src/Mod/Part/Gui/ViewProviderMirror.h @@ -64,6 +64,7 @@ public: //@{ void setupContextMenu(QMenu*, QObject*, const char*); std::vector claimChildren() const; + bool onDelete(const std::vector &); protected: bool setEdit(int ModNum); @@ -84,6 +85,7 @@ public: //@{ void setupContextMenu(QMenu*, QObject*, const char*); std::vector claimChildren() const; + bool onDelete(const std::vector &); protected: bool setEdit(int ModNum); @@ -103,6 +105,7 @@ public: /// grouping handling std::vector claimChildren(void)const; + bool onDelete(const std::vector &); }; } // namespace PartGui From 2e6255305cae2be37ac515ae1b972721adbb5302 Mon Sep 17 00:00:00 2001 From: logari81 Date: Sat, 7 Jul 2012 17:32:29 +0200 Subject: [PATCH 416/517] Add python interface for Part::GeomPoint --- src/Mod/Part/App/AppPart.cpp | 2 + src/Mod/Part/App/CMakeLists.txt | 3 + src/Mod/Part/App/Makefile.am | 4 + src/Mod/Part/App/PointPy.xml | 45 +++++++++ src/Mod/Part/App/PointPyImp.cpp | 174 ++++++++++++++++++++++++++++++++ 5 files changed, 228 insertions(+) create mode 100644 src/Mod/Part/App/PointPy.xml create mode 100644 src/Mod/Part/App/PointPyImp.cpp diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 4e521342c..c52c467cf 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -55,6 +55,7 @@ #include "TopoShapeCompSolidPy.h" #include "TopoShapeShellPy.h" #include "LinePy.h" +#include "PointPy.h" #include "CirclePy.h" #include "EllipsePy.h" #include "ArcPy.h" @@ -106,6 +107,7 @@ void PartExport initPart() Base::Interpreter().addType(&Part::TopoShapeShellPy ::Type,partModule,"Shell"); Base::Interpreter().addType(&Part::LinePy ::Type,partModule,"Line"); + Base::Interpreter().addType(&Part::PointPy ::Type,partModule,"Point"); Base::Interpreter().addType(&Part::CirclePy ::Type,partModule,"Circle"); Base::Interpreter().addType(&Part::EllipsePy ::Type,partModule,"Ellipse"); Base::Interpreter().addType(&Part::HyperbolaPy ::Type,partModule,"Hyperbola"); diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index 20a33407b..079a52a3e 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -34,6 +34,7 @@ generate_from_xml(GeometryPy) generate_from_xml(GeometryCurvePy) generate_from_xml(GeometrySurfacePy) generate_from_xml(LinePy) +generate_from_xml(PointPy) generate_from_xml(BezierCurvePy) generate_from_xml(BSplineCurvePy) generate_from_xml(PlanePy) @@ -154,6 +155,8 @@ SET(Python_SRCS GeometrySurfacePyImp.cpp LinePy.xml LinePyImp.cpp + PointPy.xml + PointPyImp.cpp BezierCurvePy.xml BezierCurvePyImp.cpp BSplineCurvePy.xml diff --git a/src/Mod/Part/App/Makefile.am b/src/Mod/Part/App/Makefile.am index 778427814..ddb4b3946 100644 --- a/src/Mod/Part/App/Makefile.am +++ b/src/Mod/Part/App/Makefile.am @@ -14,6 +14,7 @@ BUILT_SOURCES=\ GeometryCurvePy.cpp \ GeometrySurfacePy.cpp \ LinePy.cpp \ + PointPy.cpp \ BezierCurvePy.cpp \ BSplineCurvePy.cpp \ PlanePy.cpp \ @@ -53,6 +54,7 @@ libPart_la_BUILT=\ GeometryCurvePy.h \ GeometrySurfacePy.h \ LinePy.h \ + PointPy.h \ BezierCurvePy.h \ BSplineCurvePy.h \ PlanePy.h \ @@ -94,6 +96,7 @@ libPart_la_SOURCES=\ GeometryCurvePyImp.cpp \ GeometrySurfacePyImp.cpp \ LinePyImp.cpp \ + PointPyImp.cpp \ BezierCurvePyImp.cpp \ BSplineCurvePyImp.cpp \ PlanePyImp.cpp \ @@ -273,6 +276,7 @@ EXTRA_DIST = \ GeometryCurvePy.xml \ GeometrySurfacePy.xml \ LinePy.xml \ + PointPy.xml \ BezierCurvePy.xml \ BSplineCurvePy.xml \ PlanePy.xml \ diff --git a/src/Mod/Part/App/PointPy.xml b/src/Mod/Part/App/PointPy.xml new file mode 100644 index 000000000..9ad55f961 --- /dev/null +++ b/src/Mod/Part/App/PointPy.xml @@ -0,0 +1,45 @@ + + + + + + Describes a point +To create a point there are several ways: +Part.Point() + Creates a default point + +Part.Point(Point) + Creates a copy of the given point + +Part.Point(Vector) + Creates a line for the given coordinates + + + + X component of this point. + + + + + + Y component of this point. + + + + + + Z component of this point. + + + + + diff --git a/src/Mod/Part/App/PointPyImp.cpp b/src/Mod/Part/App/PointPyImp.cpp new file mode 100644 index 000000000..91417844a --- /dev/null +++ b/src/Mod/Part/App/PointPyImp.cpp @@ -0,0 +1,174 @@ +/*************************************************************************** + * Copyright (c) 2012 Konstantinos Poulios * + * * + * 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" +#ifndef _PreComp_ +# include +# include +# include +# include +# include +#endif + +#include +#include + +#include "Geometry.h" +#include "PointPy.h" +#include "PointPy.cpp" + +using namespace Part; + +extern const char* gce_ErrorStatusText(gce_ErrorType et); + +// returns a string which represents the object e.g. when printed in python +std::string PointPy::representation(void) const +{ + std::stringstream str; + Base::Vector3d coords = getGeomPointPtr()->getPoint(); + str << ""; + return str.str(); +} + +PyObject *PointPy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper +{ + // create a new instance of PointPy and the Twin object + return new PointPy(new GeomPoint); +} + +// constructor method +int PointPy::PyInit(PyObject* args, PyObject* /*kwd*/) +{ + + if (PyArg_ParseTuple(args, "")) { + // default point + return 0; + } + + PyErr_Clear(); + PyObject *pPoint; + if (PyArg_ParseTuple(args, "O!", &(PointPy::Type), &pPoint)) { + // Copy point + PointPy* pcPoint = static_cast(pPoint); + // get Geom_CartesianPoint of that point + Handle_Geom_CartesianPoint that_point = Handle_Geom_CartesianPoint::DownCast + (pcPoint->getGeomPointPtr()->handle()); + // get Geom_CartesianPoint of this point + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + + // Assign the coordinates + this_point->SetPnt(that_point->Pnt()); + return 0; + } + + PyErr_Clear(); + PyObject *pV; + if (PyArg_ParseTuple(args, "O!", &(Base::VectorPy::Type), &pV)) { + Base::Vector3d v = static_cast(pV)->value(); + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + this_point->SetCoord(v.x,v.y,v.z); + return 0; + } + + PyErr_SetString(PyExc_TypeError, "Point constructor accepts:\n" + "-- empty parameter list\n" + "-- Point\n" + "-- Coordinates vector"); + return -1; +} + +Py::Float PointPy::getX(void) const +{ + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + return Py::Float(this_point->X()); +} + +void PointPy::setX(Py::Float X) +{ + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + + try { + this_point->SetX(double(X)); + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + throw Py::Exception(e->GetMessageString()); + } +} + +Py::Float PointPy::getY(void) const +{ + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + return Py::Float(this_point->Y()); +} + +void PointPy::setY(Py::Float Y) +{ + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + + try { + this_point->SetY(double(Y)); + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + throw Py::Exception(e->GetMessageString()); + } +} + +Py::Float PointPy::getZ(void) const +{ + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + return Py::Float(this_point->Z()); +} + +void PointPy::setZ(Py::Float Z) +{ + Handle_Geom_CartesianPoint this_point = Handle_Geom_CartesianPoint::DownCast + (this->getGeomPointPtr()->handle()); + + try { + this_point->SetZ(double(Z)); + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + throw Py::Exception(e->GetMessageString()); + } +} + + +PyObject *PointPy::getCustomAttributes(const char* /*attr*/) const +{ + return 0; +} + +int PointPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) +{ + return 0; +} From 093f1d1af02b259389af3543dd05e30001564cf7 Mon Sep 17 00:00:00 2001 From: logari81 Date: Sat, 7 Jul 2012 17:38:44 +0200 Subject: [PATCH 417/517] Minor typo fix --- src/Mod/Part/App/LinePyImp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Part/App/LinePyImp.cpp b/src/Mod/Part/App/LinePyImp.cpp index e430484fc..2bfe5a524 100644 --- a/src/Mod/Part/App/LinePyImp.cpp +++ b/src/Mod/Part/App/LinePyImp.cpp @@ -53,8 +53,8 @@ std::string LinePy::representation(void) const Base::Vector3d start = getGeomLineSegmentPtr()->getStartPoint(); Base::Vector3d end = getGeomLineSegmentPtr()->getEndPoint(); str << ""; + << start.x << "," <"; //} return str.str(); From 714908d3e9909fb2a149cd7fbdddd00a74190f6a Mon Sep 17 00:00:00 2001 From: logari81 Date: Sun, 8 Jul 2012 12:01:07 +0200 Subject: [PATCH 418/517] Sketcher: add support for points as construction geometry --- src/Mod/Complete/Gui/Workbench.cpp | 2 + src/Mod/PartDesign/Gui/Workbench.cpp | 4 +- src/Mod/Sketcher/App/Sketch.cpp | 54 ++++++++--- src/Mod/Sketcher/App/Sketch.h | 2 +- src/Mod/Sketcher/App/SketchObject.cpp | 6 +- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 101 +++++++++++++++++++- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 71 ++++++++------ src/Mod/Sketcher/Gui/ViewProviderSketch.h | 2 +- src/Mod/Sketcher/Gui/Workbench.cpp | 4 +- 9 files changed, 195 insertions(+), 51 deletions(-) diff --git a/src/Mod/Complete/Gui/Workbench.cpp b/src/Mod/Complete/Gui/Workbench.cpp index 707e32131..149f50ea5 100644 --- a/src/Mod/Complete/Gui/Workbench.cpp +++ b/src/Mod/Complete/Gui/Workbench.cpp @@ -256,6 +256,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Sketcher_ViewSketch" << "Sketcher_MapSketch" << "Separator" + << "Sketcher_CreatePoint" << "Sketcher_CreateArc" << "Sketcher_CreateCircle" << "Sketcher_CreateLine" @@ -484,6 +485,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const << "Sketcher_NewSketch" << "Sketcher_LeaveSketch" << "Separator" + << "Sketcher_CreatePoint" << "Sketcher_CreateArc" << "Sketcher_CreateCircle" << "Sketcher_CreateLine" diff --git a/src/Mod/PartDesign/Gui/Workbench.cpp b/src/Mod/PartDesign/Gui/Workbench.cpp index 961393e70..b4bbff345 100644 --- a/src/Mod/PartDesign/Gui/Workbench.cpp +++ b/src/Mod/PartDesign/Gui/Workbench.cpp @@ -125,7 +125,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const Gui::MenuItem* geom = new Gui::MenuItem(); geom->setCommand("Sketcher geometries"); - *geom /*<< "Sketcher_CreatePoint"*/ + *geom << "Sketcher_CreatePoint" << "Sketcher_CreateArc" << "Sketcher_CreateCircle" << "Sketcher_CreateLine" @@ -194,7 +194,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const part = new Gui::ToolBarItem(root); part->setCommand("Sketcher geometries"); - *part /*<< "Sketcher_CreatePoint" */ + *part << "Sketcher_CreatePoint" << "Sketcher_CreateArc" << "Sketcher_CreateCircle" << "Sketcher_CreateLine" diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index 1898955f3..1e85fc9e1 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -150,7 +150,11 @@ const char* nameByType(Sketch::GeoType type) int Sketch::addGeometry(const Part::Geometry *geo, bool fixed) { - if (geo->getTypeId() == GeomLineSegment::getClassTypeId()) { // add a line + if (geo->getTypeId() == GeomPoint::getClassTypeId()) { // add a point + const GeomPoint *point = dynamic_cast(geo); + // create the definition struct for that geom + return addPoint(*point, fixed); + } else if (geo->getTypeId() == GeomLineSegment::getClassTypeId()) { // add a line const GeomLineSegment *lineSeg = dynamic_cast(geo); // create the definition struct for that geom return addLineSegment(*lineSeg, fixed); @@ -174,24 +178,30 @@ void Sketch::addGeometry(const std::vector &geo, bool fixed) addGeometry(*it, fixed); } -int Sketch::addPoint(const Base::Vector3d &newPoint, bool fixed) +int Sketch::addPoint(const Part::GeomPoint &point, bool fixed) { std::vector ¶ms = fixed ? FixParameters : Parameters; + // create our own copy + GeomPoint *p = static_cast(point.clone()); + // points in a sketch are always construction elements + p->Construction = true; // create the definition struct for that geom GeoDef def; - def.geo = 0; + def.geo = p; def.type = Point; // set the parameter for the solver - params.push_back(new double(newPoint.x)); - params.push_back(new double(newPoint.y)); + params.push_back(new double(p->getPoint().x)); + params.push_back(new double(p->getPoint().y)); // set the points for later constraints GCS::Point p1; p1.x = params[params.size()-2]; p1.y = params[params.size()-1]; def.startPointId = Points.size(); + def.endPointId = Points.size(); + def.midPointId = Points.size(); Points.push_back(p1); // store complete set @@ -393,7 +403,10 @@ Py::Tuple Sketch::getPyGeometry(void) const Py::Tuple tuple(Geoms.size()); int i=0; for (std::vector::const_iterator it=Geoms.begin(); it != Geoms.end(); ++it, i++) { - if (it->type == Line) { + if (it->type == Point) { + Base::Vector3d temp(*(Points[it->startPointId].x),*(Points[it->startPointId].y),0); + tuple[i] = Py::asObject(new VectorPy(temp)); + } else if (it->type == Line) { GeomLineSegment *lineSeg = dynamic_cast(it->geo->clone()); tuple[i] = Py::asObject(new LinePy(lineSeg)); } else if (it->type == Arc) { @@ -402,9 +415,6 @@ Py::Tuple Sketch::getPyGeometry(void) const } else if (it->type == Circle) { GeomCircle *circle = dynamic_cast(it->geo->clone()); tuple[i] = Py::asObject(new CirclePy(circle)); - } else if (it->type == Point) { - Base::Vector3d temp(*(Points[Geoms[i].startPointId].x),*(Points[Geoms[i].startPointId].y),0); - tuple[i] = Py::asObject(new VectorPy(temp)); } else if (it->type == Ellipse) { GeomEllipse *ellipse = dynamic_cast(it->geo->clone()); tuple[i] = Py::asObject(new EllipsePy(ellipse)); @@ -1517,7 +1527,13 @@ bool Sketch::updateGeometry() int i=0; for (std::vector::const_iterator it=Geoms.begin(); it != Geoms.end(); ++it, i++) { try { - if (it->type == Line) { + if (it->type == Point) { + GeomPoint *point = dynamic_cast(it->geo); + point->setPoint(Vector3d(*Points[it->startPointId].x, + *Points[it->startPointId].y, + 0.0) + ); + } else if (it->type == Line) { GeomLineSegment *lineSeg = dynamic_cast(it->geo); lineSeg->setPoints(Vector3d(*Lines[it->index].p1.x, *Lines[it->index].p1.y, @@ -1653,7 +1669,18 @@ int Sketch::initMove(int geoId, PointPos pos, bool fine) return -1; } - if (Geoms[geoId].type == Line) { + if (Geoms[geoId].type == Point) { + if (pos == start) { + GCS::Point &point = Points[Geoms[geoId].startPointId]; + GCS::Point p0; + MoveParameters.resize(2); // px,py + p0.x = &MoveParameters[0]; + p0.y = &MoveParameters[1]; + *p0.x = *point.x; + *p0.y = *point.y; + GCSsys.addConstraintP2PCoincident(p0,point,-1); + } + } else if (Geoms[geoId].type == Line) { if (pos == start || pos == end) { MoveParameters.resize(2); // x,y GCS::Point p0; @@ -1771,6 +1798,11 @@ int Sketch::movePoint(int geoId, PointPos pos, Base::Vector3d toPoint, bool rela MoveParameters[i] = InitParameters[i] + toPoint.x; MoveParameters[i+1] = InitParameters[i+1] + toPoint.y; } + } else if (Geoms[geoId].type == Point) { + if (pos == start) { + MoveParameters[0] = toPoint.x; + MoveParameters[1] = toPoint.y; + } } else if (Geoms[geoId].type == Line) { if (pos == start || pos == end) { MoveParameters[0] = toPoint.x; diff --git a/src/Mod/Sketcher/App/Sketch.h b/src/Mod/Sketcher/App/Sketch.h index 3ea95bc4f..ea403d9f1 100644 --- a/src/Mod/Sketcher/App/Sketch.h +++ b/src/Mod/Sketcher/App/Sketch.h @@ -108,7 +108,7 @@ public: /// add dedicated geometry //@{ /// add a point - int addPoint(const Base::Vector3d &point, bool fixed=false); + int addPoint(const Part::GeomPoint &point, bool fixed=false); /// add an infinite line int addLine(const Part::GeomLineSegment &line, bool fixed=false); /// add a line segment diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index c09cd6963..997b49831 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -75,6 +75,7 @@ SketchObject::SketchObject() VLine->Construction = true; ExternalGeo.push_back(HLine); ExternalGeo.push_back(VLine); + rebuildVertexIndex(); } SketchObject::~SketchObject() @@ -1328,7 +1329,10 @@ void SketchObject::rebuildVertexIndex(void) const std::vector< Part::Geometry * > geometry = getCompleteGeometry(); for (std::vector< Part::Geometry * >::const_iterator it = geometry.begin(); it != geometry.end(); ++it) { - if ((*it)->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { + if ((*it)->getTypeId() == Part::GeomPoint::getClassTypeId()) { + VertexId2GeoId.push_back(i); + VertexId2PosId.push_back(start); + } else if ((*it)->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { VertexId2GeoId.push_back(i); VertexId2PosId.push_back(start); VertexId2GeoId.push_back(i); diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 7ba72897a..788feb195 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -1242,6 +1242,102 @@ bool CmdSketcherCreateCircle::isActive(void) // ====================================================================================== +/* XPM */ +static const char *cursor_createpoint[]={ +"32 32 3 1", +"+ c white", +"# c red", +". c None", +"......+.........................", +"......+.........................", +"......+.........................", +"......+.........................", +"......+.........................", +"................................", +"+++++...+++++...................", +"................................", +"......+.........................", +"......+.........................", +"......+.........................", +"......+.........................", +"......+.........................", +"...............+++++++..........", +"..............++.....++.........", +".............+.........+........", +"............++.........++.......", +"...........++...........++......", +"...........+.............+......", +"...........+.............+......", +"...........+.............+......", +"...........+.............+......", +"...........+.............+......", +"...........+.............+......", +"...........++...........++......", +"............++.........++.......", +".............+.........+........", +"..............++.....++.........", +"...............+++++++..........", +"................................", +"................................", +"................................"}; + +class DrawSketchHandlerPoint: public DrawSketchHandler +{ +public: + DrawSketchHandlerPoint() : selectionDone(false) {} + virtual ~DrawSketchHandlerPoint() {} + + virtual void activated(ViewProviderSketch *sketchgui) + { + setCursor(QPixmap(cursor_createpoint),7,7); + } + + virtual void mouseMove(Base::Vector2D onSketchPos) + { + setPositionText(onSketchPos); + if (seekAutoConstraint(sugConstr, onSketchPos, Base::Vector2D(0.f,0.f))) { + renderSuggestConstraintsCursor(sugConstr); + } + applyCursor(); + } + + virtual bool pressButton(Base::Vector2D onSketchPos) + { + EditPoint = onSketchPos; + selectionDone = true; + return true; + } + + virtual bool releaseButton(Base::Vector2D onSketchPos) + { + if (selectionDone){ + unsetCursor(); + resetPositionText(); + + Gui::Command::openCommand("Add sketch point"); + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addGeometry(Part.Point(App.Vector(%f,%f,0)))", + sketchgui->getObject()->getNameInDocument(), + EditPoint.fX,EditPoint.fY); + Gui::Command::commitCommand(); + Gui::Command::updateActive(); + + // add auto constraints for the line segment start + if (sugConstr.size() > 0) { + createAutoConstraints(sugConstr, getHighestCurveIndex(), Sketcher::start); + sugConstr.clear(); + } + + sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider + } + return true; + } +protected: + bool selectionDone; + Base::Vector2D EditPoint; + std::vector sugConstr; +}; + + DEF_STD_CMD_A(CmdSketcherCreatePoint); CmdSketcherCreatePoint::CmdSketcherCreatePoint() @@ -1259,11 +1355,12 @@ CmdSketcherCreatePoint::CmdSketcherCreatePoint() void CmdSketcherCreatePoint::activated(int iMsg) { + ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerPoint()); } bool CmdSketcherCreatePoint::isActive(void) { - return false; + return isCreateGeoActive(getActiveGuiDocument()); } // ====================================================================================== @@ -1882,7 +1979,7 @@ void CreateSketcherCommandsCreateGeo(void) { Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); - //rcCmdMgr.addCommand(new CmdSketcherCreatePoint()); + rcCmdMgr.addCommand(new CmdSketcherCreatePoint()); rcCmdMgr.addCommand(new CmdSketcherCreateArc()); rcCmdMgr.addCommand(new CmdSketcherCreateCircle()); rcCmdMgr.addCommand(new CmdSketcherCreateLine()); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 235b4c45a..727626a9b 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -137,7 +137,7 @@ struct EditData { CurvesMaterials(0), PointsCoordinate(0), CurvesCoordinate(0), - CurveSet(0), + CurveSet(0), EditCurveSet(0), RootCrossSet(0), PointSet(0) {} @@ -159,12 +159,13 @@ struct EditData { bool blockedPreselection; bool FullyConstrained; - // pointer to the Solver + // instance of the solver Sketcher::Sketch ActSketch; // container to track our own selected parts std::set SelPointSet; std::set SelCurvSet; // also holds cross axes at -1 and -2 std::set SelConstraintSet; + std::vector CurvIdToGeoId; // conversion of SoLineSet index to GeoId // helper data structure for the constraint rendering std::vector vConstrType; @@ -615,16 +616,16 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe Gui::MenuItem *geom = new Gui::MenuItem(); geom->setCommand("Sketcher geoms"); - *geom /*<< "Sketcher_CreatePoint"*/ - << "Sketcher_CreateArc" - << "Sketcher_CreateCircle" - << "Sketcher_CreateLine" - << "Sketcher_CreatePolyline" - << "Sketcher_CreateRectangle" - << "Sketcher_CreateFillet" - << "Sketcher_Trimming" - << "Sketcher_External" - << "Sketcher_ToggleConstruction" + *geom << "Sketcher_CreatePoint" + << "Sketcher_CreateArc" + << "Sketcher_CreateCircle" + << "Sketcher_CreateLine" + << "Sketcher_CreatePolyline" + << "Sketcher_CreateRectangle" + << "Sketcher_CreateFillet" + << "Sketcher_Trimming" + << "Sketcher_External" + << "Sketcher_ToggleConstruction" /*<< "Sketcher_CreateText"*/ /*<< "Sketcher_CreateDraftLine"*/; @@ -753,8 +754,8 @@ bool ViewProviderSketch::mouseMove(const SbVec3f &point, const SbVec3f &normal, bool preselectChanged; if (Mode!=STATUS_SKETCH_DragPoint && Mode!=STATUS_SKETCH_DragCurve && Mode!=STATUS_SKETCH_DragConstraint) { - int PtIndex,CurvIndex,ConstrIndex,CrossIndex; - preselectChanged = detectPreselection(pp,PtIndex,CurvIndex,ConstrIndex,CrossIndex); + int PtIndex,GeoIndex,ConstrIndex,CrossIndex; + preselectChanged = detectPreselection(pp,PtIndex,GeoIndex,ConstrIndex,CrossIndex); } switch (Mode) { @@ -1184,12 +1185,12 @@ void ViewProviderSketch::onSelectionChanged(const Gui::SelectionChanges& msg) } } -bool ViewProviderSketch::detectPreselection(const SoPickedPoint *Point, int &PtIndex, int &CurvIndex, int &ConstrIndex, int &CrossIndex) +bool ViewProviderSketch::detectPreselection(const SoPickedPoint *Point, int &PtIndex, int &GeoIndex, int &ConstrIndex, int &CrossIndex) { assert(edit); PtIndex = -1; - CurvIndex = -1; // valid values are 0,1,2,... for normal geometry and -3,-4,-5,... for external geometry + GeoIndex = -1; // valid values are 0,1,2,... for normal geometry and -3,-4,-5,... for external geometry CrossIndex = -1; ConstrIndex = -1; @@ -1213,12 +1214,8 @@ bool ViewProviderSketch::detectPreselection(const SoPickedPoint *Point, int &PtI const SoDetail *curve_detail = Point->getDetail(edit->CurveSet); if (curve_detail && curve_detail->getTypeId() == SoLineDetail::getClassTypeId()) { // get the index - CurvIndex = static_cast(curve_detail)->getLineIndex(); - int maxGeoId = getSketchObject()->getHighestCurveIndex(); - if (CurvIndex > maxGeoId) { // hit on external geometry - int extGeoCount = getSketchObject()->getExternalGeometryCount(); - CurvIndex = -extGeoCount + (CurvIndex - maxGeoId - 1); - } + int CurvIndex = static_cast(curve_detail)->getLineIndex(); + GeoIndex = edit->CurvIdToGeoId[CurvIndex]; } // checking for a hit in the cross } else if (tail == edit->RootCrossSet) { @@ -1259,12 +1256,12 @@ bool ViewProviderSketch::detectPreselection(const SoPickedPoint *Point, int &PtI edit->sketchHandler->applyCursor(); return true; } - } else if (CurvIndex != -1 && CurvIndex != edit->PreselectCurve) { // if a new curve is hit + } else if (GeoIndex != -1 && GeoIndex != edit->PreselectCurve) { // if a new curve is hit std::stringstream ss; - if (CurvIndex >= 0) - ss << "Edge" << CurvIndex; + if (GeoIndex >= 0) + ss << "Edge" << GeoIndex; else // external geometry - ss << "ExternalEdge" << -CurvIndex - 3; // convert index start from -3 to 0 + ss << "ExternalEdge" << -GeoIndex - 3; // convert index start from -3 to 0 bool accepted = Gui::Selection().setPreselect(getSketchObject()->getDocument()->getName() ,getSketchObject()->getNameInDocument() @@ -1275,7 +1272,7 @@ bool ViewProviderSketch::detectPreselection(const SoPickedPoint *Point, int &PtI edit->blockedPreselection = !accepted; if (accepted) { resetPreselectPoint(); - edit->PreselectCurve = CurvIndex; + edit->PreselectCurve = GeoIndex; edit->PreselectCross = -1; edit->PreselectConstraint = -1; if (edit->sketchHandler) @@ -1326,7 +1323,7 @@ bool ViewProviderSketch::detectPreselection(const SoPickedPoint *Point, int &PtI edit->sketchHandler->applyCursor(); return true; } - } else if ((PtIndex == -1 && CurvIndex == -1 && CrossIndex == -1 && ConstrIndex == -1) && + } else if ((PtIndex == -1 && GeoIndex == -1 && CrossIndex == -1 && ConstrIndex == -1) && (edit->PreselectPoint != -1 || edit->PreselectCurve != -1 || edit->PreselectCross != -1 || edit->PreselectConstraint != -1 || edit->blockedPreselection)) { // we have just left a preselection @@ -1384,7 +1381,7 @@ void ViewProviderSketch::updateColor(void) int intGeoCount = getSketchObject()->getHighestCurveIndex() + 1; int extGeoCount = getSketchObject()->getExternalGeometryCount(); for (int i=0; i < CurvNum; i++) { - int GeoId = (i < intGeoCount) ? i : -(extGeoCount - (i - intGeoCount)); + int GeoId = edit->CurvIdToGeoId[i]; if (edit->SelCurvSet.find(GeoId) != edit->SelCurvSet.end()) color[i] = SelectColor; else if (edit->PreselectCurve == GeoId) @@ -1629,8 +1626,16 @@ void ViewProviderSketch::draw(bool temp) assert(int(geomlist->size()) == extGeoCount + intGeoCount); assert(int(geomlist->size()) >= 2); - for (std::vector::const_iterator it = geomlist->begin(); it != geomlist->end()-2; ++it) { - if ((*it)->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { // add a line + edit->CurvIdToGeoId.clear(); + int GeoId = 0; + for (std::vector::const_iterator it = geomlist->begin(); it != geomlist->end()-2; ++it, GeoId++) { + if (GeoId >= intGeoCount) + GeoId = -extGeoCount; + if ((*it)->getTypeId() == Part::GeomPoint::getClassTypeId()) { // add a point + const Part::GeomPoint *point = dynamic_cast(*it); + Points.push_back(point->getPoint()); + } + else if ((*it)->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { // add a line const Part::GeomLineSegment *lineSeg = dynamic_cast(*it); // create the definition struct for that geom Coords.push_back(lineSeg->getStartPoint()); @@ -1638,6 +1643,7 @@ void ViewProviderSketch::draw(bool temp) Points.push_back(lineSeg->getStartPoint()); Points.push_back(lineSeg->getEndPoint()); Index.push_back(2); + edit->CurvIdToGeoId.push_back(GeoId); } else if ((*it)->getTypeId() == Part::GeomCircle::getClassTypeId()) { // add a circle const Part::GeomCircle *circle = dynamic_cast(*it); @@ -1655,6 +1661,7 @@ void ViewProviderSketch::draw(bool temp) Coords.push_back(Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z())); Index.push_back(countSegments+1); + edit->CurvIdToGeoId.push_back(GeoId); Points.push_back(center); } else if ((*it)->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) { // add an arc @@ -1685,6 +1692,7 @@ void ViewProviderSketch::draw(bool temp) Coords.push_back(Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z())); Index.push_back(countSegments+1); + edit->CurvIdToGeoId.push_back(GeoId); Points.push_back(center); Points.push_back(start); Points.push_back(end); @@ -1718,6 +1726,7 @@ void ViewProviderSketch::draw(bool temp) } Index.push_back(countSegments+1); + edit->CurvIdToGeoId.push_back(GeoId); } else { ; diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 356d4414d..b29f2c377 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -126,7 +126,7 @@ public: /// helper to detect preselection //bool handlePreselection(const SoPickedPoint *pp); /// helper to detect preselection - bool detectPreselection(const SoPickedPoint *Point, int &PtIndex,int &CurvIndex, int &ConstrIndex, int &CrossIndex); + bool detectPreselection(const SoPickedPoint *Point, int &PtIndex,int &GeoIndex, int &ConstrIndex, int &CrossIndex); /// helper change the color of the sketch according to selection and solver status void updateColor(void); /// get the pointer to the sketch document object diff --git a/src/Mod/Sketcher/Gui/Workbench.cpp b/src/Mod/Sketcher/Gui/Workbench.cpp index 15a285f52..c00a259ed 100644 --- a/src/Mod/Sketcher/Gui/Workbench.cpp +++ b/src/Mod/Sketcher/Gui/Workbench.cpp @@ -60,7 +60,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const sketch->setCommand("S&ketch"); Gui::MenuItem* geom = new Gui::MenuItem(); geom->setCommand("Sketcher geometries"); - *geom /*<< "Sketcher_CreatePoint"*/ + *geom << "Sketcher_CreatePoint" << "Sketcher_CreateArc" << "Sketcher_CreateCircle" << "Sketcher_CreateLine" @@ -112,7 +112,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const part = new Gui::ToolBarItem(root); part->setCommand("Sketcher geometries"); - *part /*<< "Sketcher_CreatePoint" */ + *part << "Sketcher_CreatePoint" << "Sketcher_CreateArc" << "Sketcher_CreateCircle" << "Sketcher_CreateLine" From c099e90d991df9b5ea62e191ddc9358b75f868af Mon Sep 17 00:00:00 2001 From: logari81 Date: Sun, 8 Jul 2012 12:11:53 +0200 Subject: [PATCH 419/517] Sketcher: fixes in the new polyline tool and variables naming improvements --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 35 ++++++++++++++--------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 788feb195..50671e71a 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -489,7 +489,7 @@ class DrawSketchHandlerLineSet: public DrawSketchHandler public: DrawSketchHandlerLineSet() : Mode(STATUS_SEEK_First),LineMode(LINE_MODE_Line),EditCurve(2), - firstCurve(-1),firstPoint(-1),previousCurve(-1),previousPoint(-1), + firstVertex(-1),firstCurve(-1),previousCurve(-1),previousPosId(-1), isTangent(false) {} virtual ~DrawSketchHandlerLineSet() {} /// mode table @@ -625,11 +625,13 @@ public: { if (Mode==STATUS_SEEK_First) { // remember our first point - firstPoint = getHighestVertexIndex() + 1; + firstVertex = getHighestVertexIndex() + 1; firstCurve = getHighestCurveIndex() + 1; // TODO: here we should check if there is a preselected point // and set up a transition from the neighbouring segment. - // (peviousCurve, previousPoint, dirVec, isTangent) + // (peviousCurve, previousPosId, dirVec, isTangent) + // in that case we should set firstCurve and firstVertex to -1 + // in order to disable closing the wire if (LineMode == LINE_MODE_Line) EditCurve.resize(isTangent ? 3 : 2); else if (LineMode == LINE_MODE_Arc) @@ -658,7 +660,7 @@ public: sketchgui->drawEdit(EditCurve); sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider } - if (sketchgui->getPreselectPoint() == firstPoint) + if (sketchgui->getPreselectPoint() == firstVertex) Mode = STATUS_Close; else Mode = STATUS_Do; @@ -672,7 +674,7 @@ public: if (LineMode == LINE_MODE_Line) { // open the transaction - Gui::Command::openCommand("Add sketch wire"); + Gui::Command::openCommand("Add line to sketch wire"); // issue the geometry Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addGeometry(Part.Line(App.Vector(%f,%f,0),App.Vector(%f,%f,0)))", @@ -680,7 +682,7 @@ public: EditCurve[0].fX,EditCurve[0].fY,EditCurve[1].fX,EditCurve[1].fY); } else if (LineMode == LINE_MODE_Arc) { // We're dealing with an Arc - Gui::Command::openCommand("Add sketch wire"); + Gui::Command::openCommand("Add arc to sketch wire"); Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addGeometry(Part.ArcOfCircle" "(Part.Circle(App.Vector(%f,%f,0),App.Vector(0,0,1),%f),%f,%f))", @@ -690,19 +692,26 @@ public: } // issue the constraint if (previousCurve != -1) { - int coincidentPoint = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 2 : 1; + int lastCurve = previousCurve+1; + int lastStartPosId = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 2 : 1; + int lastEndPosId = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 1 : 2; // in case of a tangency constraint, the coincident constraint is redundant Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('%s',%i,%i,%i,%i)) ", sketchgui->getObject()->getNameInDocument(), isTangent ? "Tangent" : "Coincident", - previousCurve, previousPoint /* == 2 */, previousCurve+1, coincidentPoint); - if (Mode == STATUS_Close) + previousCurve, previousPosId /* == 2 */, lastCurve, lastStartPosId); + if (Mode == STATUS_Close) { + int firstGeoId; + Sketcher::PointPos firstPosId; + sketchgui->getSketchObject()->getGeoVertexIndex(firstVertex, firstGeoId, firstPosId); + //assert(firstCurve == firstGeoId); // close the loop by constrain to the first curve point Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%i,%i,%i,%i)) ", sketchgui->getObject()->getNameInDocument(), - previousCurve+1,coincidentPoint,firstCurve,firstPoint); + lastCurve,lastEndPosId,firstCurve,firstPosId); + } Gui::Command::commitCommand(); Gui::Command::updateActive(); } @@ -742,7 +751,7 @@ public: // remember the vertex for the next rounds constraint.. previousCurve = getHighestCurveIndex(); - previousPoint = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 1 : 2; + previousPosId = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 1 : 2; // setup for the next line segment // Use updated endPoint as autoconstraints can modify the position @@ -787,9 +796,9 @@ protected: SelectLineMode LineMode; std::vector EditCurve; - int firstPoint; + int firstVertex; int firstCurve; - int previousPoint; + int previousPosId; int previousCurve; std::vector sugConstr1, sugConstr2, sugConstr3; From 07e04f438f0f8a68f459bd986560b7f9c7819ba6 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 9 Jul 2012 13:36:10 +0200 Subject: [PATCH 420/517] Add python keyword with to list of syntax highlighting --- src/Gui/PythonEditor.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Gui/PythonEditor.cpp b/src/Gui/PythonEditor.cpp index 5b448633a..14db48db7 100644 --- a/src/Gui/PythonEditor.cpp +++ b/src/Gui/PythonEditor.cpp @@ -180,21 +180,21 @@ public: PythonSyntaxHighlighterP() { keywords << QLatin1String("and") << QLatin1String("as") - << QLatin1String("assert") - << QLatin1String("break") << QLatin1String("class") - << QLatin1String("continue") << QLatin1String("def") - << QLatin1String("del") << QLatin1String("elif") - << QLatin1String("else") << QLatin1String("except") - << QLatin1String("exec") << QLatin1String("finally") - << QLatin1String("for") << QLatin1String("from") - << QLatin1String("global") << QLatin1String("if") - << QLatin1String("import") << QLatin1String("in") - << QLatin1String("is") << QLatin1String("lambda") - << QLatin1String("None") << QLatin1String("not") - << QLatin1String("or") << QLatin1String("pass") - << QLatin1String("print") << QLatin1String("raise") - << QLatin1String("return") << QLatin1String("try") - << QLatin1String("while") << QLatin1String("yield"); + << QLatin1String("assert") << QLatin1String("break") + << QLatin1String("class") << QLatin1String("continue") + << QLatin1String("def") << QLatin1String("del") + << QLatin1String("elif") << QLatin1String("else") + << QLatin1String("except") << QLatin1String("exec") + << QLatin1String("finally") << QLatin1String("for") + << QLatin1String("from") << QLatin1String("global") + << QLatin1String("if") << QLatin1String("import") + << QLatin1String("in") << QLatin1String("is") + << QLatin1String("lambda") << QLatin1String("None") + << QLatin1String("not") << QLatin1String("or") + << QLatin1String("pass") << QLatin1String("print") + << QLatin1String("raise") << QLatin1String("return") + << QLatin1String("try") << QLatin1String("while") + << QLatin1String("with") << QLatin1String("yield"); } QStringList keywords; From a9ad8068a86159ad11907ee5572105179f2e29f3 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 9 Jul 2012 13:37:11 +0200 Subject: [PATCH 421/517] Add TKFeat to OCC_LIBRARIES --- cMake/UseLibPackCustom.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cMake/UseLibPackCustom.cmake b/cMake/UseLibPackCustom.cmake index f78c9fad0..48fede470 100644 --- a/cMake/UseLibPackCustom.cmake +++ b/cMake/UseLibPackCustom.cmake @@ -329,6 +329,7 @@ set(OCC_LIBRARIES TKSTEPBase TKSTEPAttr TKHLR + TKFeat ) set(OCC_LIBRARY_DIR ${FREECAD_LIBPACK_DIR}/lib From bea2c3b7a7042ad7027f6c2ac42efb5cccc53fb4 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 9 Jul 2012 13:38:21 +0200 Subject: [PATCH 422/517] Add optional argument moveToCenter (by default false) to avoid to move camera when using standard views --- src/Gui/NavigationStyle.cpp | 24 +++++++++++++----------- src/Gui/NavigationStyle.h | 2 +- src/Gui/View3DInventorViewer.cpp | 4 ++-- src/Gui/View3DInventorViewer.h | 2 +- src/Gui/View3DPy.cpp | 5 +++-- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index c533e8e76..85cada0b8 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -376,7 +376,7 @@ void NavigationStyle::lookAtPoint(const SbVec3f& pos) } } -void NavigationStyle::setCameraOrientation(const SbRotation& rot) +void NavigationStyle::setCameraOrientation(const SbRotation& rot, SbBool moveToCenter) { SoCamera* cam = viewer->getCamera(); if (cam == 0) return; @@ -387,16 +387,18 @@ void NavigationStyle::setCameraOrientation(const SbRotation& rot) PRIVATE(this)->focal1 = cam->position.getValue() + cam->focalDistance.getValue() * direction; PRIVATE(this)->focal2 = PRIVATE(this)->focal1; - SoGetBoundingBoxAction action(viewer->getViewportRegion()); - action.apply(viewer->getSceneGraph()); - SbBox3f box = action.getBoundingBox(); - if (!box.isEmpty()) { - rot.multVec(SbVec3f(0, 0, -1), direction); - //float s = (this->focal1 - box.getCenter()).dot(direction); - //this->focal2 = box.getCenter() + s * direction; - // setting the center of the overall bounding box as the future focal point - // seems to be a satisfactory solution - PRIVATE(this)->focal2 = box.getCenter(); + if (moveToCenter) { + SoGetBoundingBoxAction action(viewer->getViewportRegion()); + action.apply(viewer->getSceneGraph()); + SbBox3f box = action.getBoundingBox(); + if (!box.isEmpty()) { + rot.multVec(SbVec3f(0, 0, -1), direction); + //float s = (this->focal1 - box.getCenter()).dot(direction); + //this->focal2 = box.getCenter() + s * direction; + // setting the center of the overall bounding box as the future focal point + // seems to be a satisfactory solution + PRIVATE(this)->focal2 = box.getCenter(); + } } // avoid to interfere with spinning (fixes #3101462) diff --git a/src/Gui/NavigationStyle.h b/src/Gui/NavigationStyle.h index be0200dcb..2e4900173 100644 --- a/src/Gui/NavigationStyle.h +++ b/src/Gui/NavigationStyle.h @@ -127,7 +127,7 @@ public: void updateAnimation(); void redraw(); - void setCameraOrientation(const SbRotation& rot); + void setCameraOrientation(const SbRotation& rot, SbBool moveTocenter=false); void lookAtPoint(const SbVec3f&); void boxZoom(const SbBox2s& box); virtual void viewAll(); diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 93d06c691..7c61cfc01 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -1309,9 +1309,9 @@ void View3DInventorViewer::pubSeekToPoint(const SbVec3f& pos) this->seekToPoint(pos); } -void View3DInventorViewer::setCameraOrientation(const SbRotation& rot) +void View3DInventorViewer::setCameraOrientation(const SbRotation& rot, SbBool moveTocenter) { - navigation->setCameraOrientation(rot); + navigation->setCameraOrientation(rot, moveTocenter); } void View3DInventorViewer::setCameraType(SoType t) diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index 71e5a2bf3..a7b1593c1 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -231,7 +231,7 @@ public: * \a TRUE the reorientation is animated, otherwise its directly * set. */ - void setCameraOrientation(const SbRotation& rot); + void setCameraOrientation(const SbRotation& rot, SbBool moveTocenter=false); void setCameraType(SoType t); void moveCameraTo(const SbRotation& rot, const SbVec3f& pos, int steps, int ms); /** diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 14ab2e623..0d0572c99 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -464,7 +464,8 @@ Py::Object View3DInventorPy::viewRotateRight(const Py::Tuple& args) Py::Object View3DInventorPy::setCameraOrientation(const Py::Tuple& args) { PyObject* o; - if (!PyArg_ParseTuple(args.ptr(), "O!", &PyTuple_Type, &o)) + PyObject* m; + if (!PyArg_ParseTuple(args.ptr(), "O!|O!", &PyTuple_Type, &o, &PyBool_Type, &m)) throw Py::Exception(); try { @@ -473,7 +474,7 @@ Py::Object View3DInventorPy::setCameraOrientation(const Py::Tuple& args) float q1 = (float)Py::Float(tuple[1]); float q2 = (float)Py::Float(tuple[2]); float q3 = (float)Py::Float(tuple[3]); - _view->getViewer()->setCameraOrientation(SbRotation(q0, q1, q2, q3)); + _view->getViewer()->setCameraOrientation(SbRotation(q0, q1, q2, q3), m==Py_True); } catch (const Base::Exception& e) { throw Py::Exception(e.what()); From a085eede68202c9a8ae69d410e837deaa41f69a5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 9 Jul 2012 13:40:13 +0200 Subject: [PATCH 423/517] Add optional argument moveToCenter (by default false) to avoid to move camera when using standard views --- src/Gui/View3DPy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 0d0572c99..1fd6e034e 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -464,7 +464,7 @@ Py::Object View3DInventorPy::viewRotateRight(const Py::Tuple& args) Py::Object View3DInventorPy::setCameraOrientation(const Py::Tuple& args) { PyObject* o; - PyObject* m; + PyObject* m=0; if (!PyArg_ParseTuple(args.ptr(), "O!|O!", &PyTuple_Type, &o, &PyBool_Type, &m)) throw Py::Exception(); From 044990333ca8a156fa0adb35cf0cc66ed917a9a3 Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 9 Jul 2012 14:00:18 +0200 Subject: [PATCH 424/517] Sketcher: skip root cross axes in vertex counting (fixes closing polylines) --- src/Mod/Sketcher/App/SketchObject.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 997b49831..0cb04d84c 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -1327,8 +1327,10 @@ void SketchObject::rebuildVertexIndex(void) int imax=getHighestCurveIndex(); int i=0; const std::vector< Part::Geometry * > geometry = getCompleteGeometry(); + if (geometry.size() <= 2) + return; for (std::vector< Part::Geometry * >::const_iterator it = geometry.begin(); - it != geometry.end(); ++it) { + it != geometry.end()-2; ++it) { if ((*it)->getTypeId() == Part::GeomPoint::getClassTypeId()) { VertexId2GeoId.push_back(i); VertexId2PosId.push_back(start); From 47c44af45379b857a2e59cd9d637ba26de6bf985 Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 9 Jul 2012 17:19:02 +0200 Subject: [PATCH 425/517] Sketcher: fix crash in polyline with autoconstraints, disable arc mode for first polyline segment --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 50671e71a..cf6680aed 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -508,7 +508,7 @@ public: virtual void registerPressedKey(bool pressed, int key) { - if (key == SoKeyboardEvent::A && pressed) { + if (key == SoKeyboardEvent::A && pressed && previousCurve != -1) { if (LineMode != LINE_MODE_Arc) { Base::Vector2D onSketchPos = EditCurve[isTangent ? 2 : 1]; LineMode = LINE_MODE_Arc; @@ -559,7 +559,6 @@ public: } sketchgui->drawEdit(EditCurve); if (!isTangent) { - sugConstr2 = sugConstr1; // Copy the previously found constraints if (seekAutoConstraint(sugConstr2, onSketchPos, onSketchPos - EditCurve[0])) { renderSuggestConstraintsCursor(sugConstr2); return; @@ -612,8 +611,8 @@ public: EditCurve[31] = EditCurve[0]; sketchgui->drawEdit(EditCurve); - if (seekAutoConstraint(sugConstr3, onSketchPos, Base::Vector2D(0.f,0.f))) { - renderSuggestConstraintsCursor(sugConstr3); + if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f))) { + renderSuggestConstraintsCursor(sugConstr2); return; } } @@ -739,7 +738,7 @@ public: Gui::Command::updateActive(); // Add auto constraints - if (sugConstr1.size() > 0) { + if (sugConstr1.size() > 0) { // this is relevant only to the very first point createAutoConstraints(sugConstr1, getHighestCurveIndex(), Sketcher::start); sugConstr1.clear(); } @@ -800,7 +799,7 @@ protected: int firstCurve; int previousPosId; int previousCurve; - std::vector sugConstr1, sugConstr2, sugConstr3; + std::vector sugConstr1, sugConstr2; Base::Vector2D CenterPoint; Base::Vector3d dirVec; From e5953cedac75bbd8eba7351007dbf7a92a88003f Mon Sep 17 00:00:00 2001 From: logari81 Date: Tue, 10 Jul 2012 15:25:27 +0200 Subject: [PATCH 426/517] Sketcher: points defined as external geometry, fix behavior of external geometry cursor, improve appearance of point creation cursor --- src/Mod/Sketcher/App/SketchObject.cpp | 44 ++++++++++++++--------- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 43 +++++++++++----------- 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 0cb04d84c..32d718d21 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -32,6 +32,7 @@ # include # include # include +# include # include # include # include @@ -1226,15 +1227,17 @@ void SketchObject::rebuildExternalGeometry(void) invPlm.multVec(p2,p2); if (Base::Distance(p1,p2) < Precision::Confusion()) { - std::string msg = SubElement + " perpendicular to the sketch plane cannot be used as external geometry"; - throw Base::Exception(msg.c_str()); + Base::Vector3d p = (p1 + p2) / 2; + Part::GeomPoint* point = new Part::GeomPoint(p); + point->Construction = true; + ExternalGeo.push_back(point); + } + else { + Part::GeomLineSegment* line = new Part::GeomLineSegment(); + line->setPoints(p1,p2); + line->Construction = true; + ExternalGeo.push_back(line); } - - Part::GeomLineSegment* line = new Part::GeomLineSegment(); - line->setPoints(p1,p2); - - line->Construction = true; - ExternalGeo.push_back(line); } else { try { @@ -1256,15 +1259,17 @@ void SketchObject::rebuildExternalGeometry(void) Base::Vector3d p2(P2.X(),P2.Y(),P2.Z()); if (Base::Distance(p1,p2) < Precision::Confusion()) { - std::string msg = SubElement + " perpendicular to the sketch plane cannot be used as external geometry"; - throw Base::Exception(msg.c_str()); + Base::Vector3d p = (p1 + p2) / 2; + Part::GeomPoint* point = new Part::GeomPoint(p); + point->Construction = true; + ExternalGeo.push_back(point); + } + else { + Part::GeomLineSegment* line = new Part::GeomLineSegment(); + line->setPoints(p1,p2); + line->Construction = true; + ExternalGeo.push_back(line); } - - Part::GeomLineSegment* line = new Part::GeomLineSegment(); - line->setPoints(p1,p2); - - line->Construction = true; - ExternalGeo.push_back(line); } else if (curve.GetType() == GeomAbs_Circle) { gp_Circ c = curve.Circle(); @@ -1304,7 +1309,12 @@ void SketchObject::rebuildExternalGeometry(void) } break; case TopAbs_VERTEX: - throw Base::Exception("Vertices cannot be used as external geometry for sketches"); + { + gp_Pnt p = BRep_Tool::Pnt(TopoDS::Vertex(refSubShape)); + Part::GeomPoint* point = new Part::GeomPoint(Base::Vector3d(p.X(),p.Y(),p.Z())); + point->Construction = true; + ExternalGeo.push_back(point); + } break; default: throw Base::Exception("Unknown type of geometry"); diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index cf6680aed..299a5229b 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -1269,22 +1269,22 @@ static const char *cursor_createpoint[]={ "......+.........................", "......+.........................", "......+.........................", -"...............+++++++..........", -"..............++.....++.........", -".............+.........+........", -"............++.........++.......", -"...........++...........++......", -"...........+.............+......", -"...........+.............+......", -"...........+.............+......", -"...........+.............+......", -"...........+.............+......", -"...........+.............+......", -"...........++...........++......", -"............++.........++.......", -".............+.........+........", -"..............++.....++.........", -"...............+++++++..........", +"................................", +"................................", +"................................", +".................++++...........", +"................++++++..........", +"...............++++++++.........", +"...............++++++++.........", +"...............++++++++.........", +"...............++++++++.........", +"................++++++..........", +".................++++...........", +"................................", +"................................", +"................................", +"................................", +"................................", "................................", "................................", "................................"}; @@ -1843,8 +1843,9 @@ namespace SketcherGui { if (!sSubName || sSubName[0] == '\0') return false; std::string element(sSubName); - // for the moment we allow only edges - if (element.substr(0,4) == "Edge") { + // for the moment we allow only edges and vertices + if ((element.size() > 4 && element.substr(0,4) == "Edge") || + (element.size() > 6 && element.substr(0,6) == "Vertex")) { return true; } return false; @@ -1917,7 +1918,8 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { - applyCursor(); + if (Gui::Selection().getPreselection().pObjectName) + applyCursor(); } virtual bool pressButton(Base::Vector2D onSketchPos) @@ -1935,7 +1937,8 @@ public: { if (msg.Type == Gui::SelectionChanges::AddSelection) { std::string subName(msg.pSubName); - if (subName.size() > 4 && subName.substr(0,4) == "Edge") { + if ((subName.size() > 4 && subName.substr(0,4) == "Edge") || + (subName.size() > 6 && subName.substr(0,6) == "Vertex")) { try { Gui::Command::openCommand("Add external geometry"); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addExternal(\"%s\",\"%s\")", From 155ae0ca41dcbb9f1f81e10e375a3651ff7e90bc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 10 Jul 2012 20:42:30 -0300 Subject: [PATCH 427/517] Arch: Minor bugfixes --- src/Mod/Arch/ArchCommands.py | 8 ++++++++ src/Mod/Arch/ArchComponent.py | 2 +- src/Mod/Arch/ArchStructure.py | 19 ++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 83ceb4a96..66babfc7c 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -75,6 +75,14 @@ def removeComponents(objectsList,host=None): objectsList = [objectsList] if host: 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) s = host.Subtractions for o in objectsList: if not o in s: diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 7b220f588..b97d022ed 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -80,7 +80,7 @@ def removeFromComponent(compobject,subobject): it is added as a subtraction.''' if compobject == subobject: return found = False - attribs = ["Additions","Subtractions","Objects","Components","Base"] + attribs = ["Additions","Subtractions","Objects","Components","Base","Axes"] for a in attribs: if hasattr(compobject,a): if a == "Base": diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index e30c14106..b87aeb198 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -110,6 +110,12 @@ class _Structure(ArchComponent.Component): pts.extend(DraftGeomUtils.findIntersection(e1,e2)) return pts + def getAxisPlacement(self,obj): + "returns an axis placement" + if obj.Axes: + return obj.Axes[0].Placement + return None + def createGeometry(self,obj): import Part, DraftGeomUtils @@ -174,22 +180,29 @@ class _Structure(ArchComponent.Component): if not hole.Shape.isNull(): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed + + # applying axes pts = self.getAxisPoints(obj) + apl = self.getAxisPlacement(obj) if pts: fsh = [] for p in pts: sh = base.copy() + if apl: + sh.Placement.Rotation = apl.Rotation sh.translate(p) fsh.append(sh) obj.Shape = Part.makeCompound(fsh) + + # finalizing else: if base: if not base.isNull(): base = base.removeSplitter() obj.Shape = base - if not DraftGeomUtils.isNull(pl): - obj.Placement = pl - + if not DraftGeomUtils.isNull(pl): + obj.Placement = pl + class _ViewProviderStructure(ArchComponent.ViewProviderComponent): "A View Provider for the Structure object" From 48243d6497ff7a4b2fe087df8467c1bafcc41b5d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 10 Jul 2012 21:18:19 -0300 Subject: [PATCH 428/517] Arch: Small improvement to structure --- src/Mod/Arch/ArchStructure.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index b87aeb198..b63853fe1 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -86,6 +86,8 @@ class _Structure(ArchComponent.Component): str(translate("Arch","Axes systems this structure is built on"))) obj.addProperty("App::PropertyVector","Normal","Base", str(translate("Arch","The normal extrusion direction of this object (keep (0,0,0) for automatic normal)"))) + obj.addProperty("App::PropertyIntegerList","Exclude","Base", + str(translate("Arch","The element numbers to exclude when this structure is based on axes"))) self.Type = "Structure" def execute(self,obj): @@ -186,11 +188,14 @@ class _Structure(ArchComponent.Component): apl = self.getAxisPlacement(obj) if pts: fsh = [] - for p in pts: + for i in range(len(pts)): + if hasattr(obj,"Exclude"): + if i in obj.Exclude: + continue sh = base.copy() if apl: sh.Placement.Rotation = apl.Rotation - sh.translate(p) + sh.translate(pts[i]) fsh.append(sh) obj.Shape = Part.makeCompound(fsh) From 70bb37ab9d730e1961a46096fbce8e1b49b91f7d Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 11 Jul 2012 13:31:40 +0200 Subject: [PATCH 429/517] Add approximate() method to B-spline surface class --- src/Mod/Part/App/BSplineSurfacePy.xml | 26 ++++- src/Mod/Part/App/BSplineSurfacePyImp.cpp | 124 +++++++++++++++++++++-- 2 files changed, 139 insertions(+), 11 deletions(-) diff --git a/src/Mod/Part/App/BSplineSurfacePy.xml b/src/Mod/Part/App/BSplineSurfacePy.xml index 6bfebdb44..d25b360cc 100644 --- a/src/Mod/Part/App/BSplineSurfacePy.xml +++ b/src/Mod/Part/App/BSplineSurfacePy.xml @@ -677,9 +677,33 @@ Returns a reparametrized copy of this surface
    + + + + approximate(points, degMin, degMax, continuity, tol) + approximate(zPoints, degMin, degMax, continuity, tol, X0, dX, Y0, dY) + + Replaces this B-Spline surface by approximating a set of points. + continuity is an integer between 0 and 3 + + + - Replaces this B-Spline surface by interpolating a set of points. + + interpolate(points) + interpolate(zpoints, X0, dX, Y0, dY) + + Replaces this B-Spline surface by interpolating a set of points. + The resulting surface is of degree 3 and continuity C2. + Arguments: + a 2 dimensional array of vectors, that the surface passes through + or + a 2 dimensional array of floats with the z values, + the x starting point X0 (float), + the x increment dX (float), + the y starting point Y0 and increment dY + diff --git a/src/Mod/Part/App/BSplineSurfacePyImp.cpp b/src/Mod/Part/App/BSplineSurfacePyImp.cpp index f642662f4..5fd9c9773 100644 --- a/src/Mod/Part/App/BSplineSurfacePyImp.cpp +++ b/src/Mod/Part/App/BSplineSurfacePyImp.cpp @@ -33,6 +33,7 @@ # include # include # include +# include #endif #include @@ -43,6 +44,7 @@ #include "BSplineSurfacePy.h" #include "BSplineSurfacePy.cpp" + using namespace Part; // returns a string which represents the object e.g. when printed in python @@ -1244,13 +1246,21 @@ PyObject* BSplineSurfacePy::reparametrize(PyObject * args) } } -PyObject* BSplineSurfacePy::interpolate(PyObject *args) +PyObject* BSplineSurfacePy::approximate(PyObject *args) { PyObject* obj; - double tol3d = Precision::Approximation(); - PyObject* closed = Py_False; - PyObject* t1=0; PyObject* t2=0; - if (!PyArg_ParseTuple(args, "O!",&(PyList_Type), &obj)) + Standard_Integer degMin=0; + Standard_Integer degMax=0; + Standard_Integer continuity=0; + Standard_Real tol3d = Precision::Approximation(); + Standard_Real X0=0; + Standard_Real dX=0; + Standard_Real Y0=0; + Standard_Real dY=0; + + int len = PyTuple_GET_SIZE(args); + + if (!PyArg_ParseTuple(args, "O!iiid|dddd",&(PyList_Type), &obj, °Min, °Max, &continuity, &tol3d, &X0, &dX, &Y0, &dY)) return 0; try { Py::List list(obj); @@ -1258,6 +1268,8 @@ PyObject* BSplineSurfacePy::interpolate(PyObject *args) Py::List col(list.getItem(0)); Standard_Integer lv = col.size(); TColgp_Array2OfPnt interpolationPoints(1, lu, 1, lv); + TColStd_Array2OfReal zPoints(1, lu, 1, lv); + //Base::Console().Message("lu=%d, lv=%d\n", lu, lv); Standard_Integer index1 = 0; Standard_Integer index2 = 0; @@ -1267,10 +1279,97 @@ PyObject* BSplineSurfacePy::interpolate(PyObject *args) Py::List row(*it1); for (Py::List::iterator it2 = row.begin(); it2 != row.end(); ++it2) { index2++; - Py::Vector v(*it2); - Base::Vector3d pnt = v.toVector(); - gp_Pnt newPoint(pnt.x,pnt.y,pnt.z); - interpolationPoints.SetValue(index1, index2, newPoint); + if(len == 5){ + Py::Vector v(*it2); + Base::Vector3d pnt = v.toVector(); + gp_Pnt newPoint(pnt.x,pnt.y,pnt.z); + interpolationPoints.SetValue(index1, index2, newPoint); + } + else { + Standard_Real val = PyFloat_AsDouble((*it2).ptr()); + zPoints.SetValue(index1, index2, val); + } + } + } + + if(continuity<0 || continuity>3){ + Standard_Failure::Raise("continuity must be between 0 and 3"); + } + GeomAbs_Shape c; + switch(continuity){ + case 0: + c = GeomAbs_C0; + case 1: + c = GeomAbs_C1; + case 2: + c = GeomAbs_C2; + case 3: + c = GeomAbs_C3; + } + + if (interpolationPoints.RowLength() < 2 || interpolationPoints.ColLength() < 2) { + Standard_Failure::Raise("not enough points given"); + } + + GeomAPI_PointsToBSplineSurface surInterpolation; + if(len == 5){ + surInterpolation.Init(interpolationPoints, degMin, degMax, c, tol3d); + } + else { + surInterpolation.Init(zPoints, X0, dX, Y0, dY, degMin, degMax, c, tol3d); + } + Handle_Geom_BSplineSurface sur(surInterpolation.Surface()); + this->getGeomBSplineSurfacePtr()->setHandle(sur); + Py_Return; + } + catch (Standard_Failure) { + Handle_Standard_Failure e = Standard_Failure::Caught(); + std::string err = e->GetMessageString(); + if (err.empty()) err = e->DynamicType()->Name(); + PyErr_SetString(PyExc_Exception, err.c_str()); + return 0; + } +} + +PyObject* BSplineSurfacePy::interpolate(PyObject *args) +{ + PyObject* obj; + Standard_Real tol3d = Precision::Approximation(); + Standard_Real X0=0; + Standard_Real dX=0; + Standard_Real Y0=0; + Standard_Real dY=0; + + int len = PyTuple_GET_SIZE(args); + + if (!PyArg_ParseTuple(args, "O!|dddd",&(PyList_Type), &obj, &X0, &dX, &Y0, &dY)) + return 0; + try { + Py::List list(obj); + Standard_Integer lu = list.size(); + Py::List col(list.getItem(0)); + Standard_Integer lv = col.size(); + TColgp_Array2OfPnt interpolationPoints(1, lu, 1, lv); + TColStd_Array2OfReal zPoints(1, lu, 1, lv); + + Standard_Integer index1 = 0; + Standard_Integer index2 = 0; + for (Py::List::iterator it1 = list.begin(); it1 != list.end(); ++it1) { + index1++; + index2=0; + Py::List row(*it1); + for (Py::List::iterator it2 = row.begin(); it2 != row.end(); ++it2) { + index2++; + if(len == 1){ + Py::Vector v(*it2); + Base::Vector3d pnt = v.toVector(); + gp_Pnt newPoint(pnt.x,pnt.y,pnt.z); + interpolationPoints.SetValue(index1, index2, newPoint); + } + else { + Standard_Real val = PyFloat_AsDouble((*it2).ptr()); + zPoints.SetValue(index1, index2, val); + } } } @@ -1279,7 +1378,12 @@ PyObject* BSplineSurfacePy::interpolate(PyObject *args) } GeomAPI_PointsToBSplineSurface surInterpolation; - surInterpolation.Interpolate (interpolationPoints); + if(len == 1){ + surInterpolation.Interpolate (interpolationPoints); + } + else { + surInterpolation.Interpolate(zPoints, X0, dX, Y0, dY); + } Handle_Geom_BSplineSurface sur(surInterpolation.Surface()); this->getGeomBSplineSurfacePtr()->setHandle(sur); Py_Return; From 484c80142c46822630412c2a532c38c551f275dc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 11 Jul 2012 10:54:12 -0300 Subject: [PATCH 430/517] Draft: small fix to snap --- src/Mod/Draft/DraftSnap.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 55a4d7a23..ddc66e528 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -288,11 +288,13 @@ class Snapper: origin = Vector(self.snapInfo['x'],self.snapInfo['y'],self.snapInfo['z']) winner = [Vector(0,0,0),None,Vector(0,0,0)] for snap in snaps: - # if snap[0] == None: print "debug: Snapper: 'i[0]' is 'None'" - delta = snap[0].sub(origin) - if delta.Length < shortest: - shortest = delta.Length - winner = snap + if snap[0] == None: + print "debug: Snapper: snap point = ",snap + else: + delta = snap[0].sub(origin) + if delta.Length < shortest: + shortest = delta.Length + winner = snap # see if we are out of the max radius, if any if self.radius: From 6efe6ff0cb8f92292d0080ef7f79e5727ebba5fb Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 11 Jul 2012 17:24:53 +0200 Subject: [PATCH 431/517] 0000789: Sketcher active in one document blocks closing another. --- src/Gui/Document.cpp | 17 ++++++++++------- src/Gui/TaskView/TaskDialog.h | 3 +++ src/Mod/Sketcher/Gui/TaskDlgEditSketch.h | 2 -- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 7d6562911..972d9d148 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -930,13 +930,16 @@ bool Document::canClose () return false; } else if (!Gui::Control().isAllowedAlterDocument()) { - QMessageBox::warning(getActiveView(), - QObject::tr("Document not closable"), - QObject::tr("The document is in editing mode and thus cannot be closed for the moment.\n" - "You either have to finish or cancel the editing in the task panel.")); - Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog(); - if (dlg) Gui::Control().showDialog(dlg); - return false; + std::string name = Gui::Control().activeDialog()->getDocumentName(); + if (name == this->getDocument()->getName()) { + QMessageBox::warning(getActiveView(), + QObject::tr("Document not closable"), + QObject::tr("The document is in editing mode and thus cannot be closed for the moment.\n" + "You either have to finish or cancel the editing in the task panel.")); + Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog(); + if (dlg) Gui::Control().showDialog(dlg); + return false; + } } if (!isModified()) diff --git a/src/Gui/TaskView/TaskDialog.h b/src/Gui/TaskView/TaskDialog.h index 30dc84ddc..f6a0e402f 100644 --- a/src/Gui/TaskView/TaskDialog.h +++ b/src/Gui/TaskView/TaskDialog.h @@ -67,6 +67,8 @@ public: virtual void modifyStandardButtons(QDialogButtonBox*) {} + const std::string& getDocumentName() const + { return documentName; } virtual bool isAllowedAlterDocument(void) const { return false; } virtual bool isAllowedAlterView(void) const @@ -92,6 +94,7 @@ protected: /// List of TaskBoxes of that dialog std::vector Content; ButtonPosition pos; + std::string documentName; }; } //namespace TaskView diff --git a/src/Mod/Sketcher/Gui/TaskDlgEditSketch.h b/src/Mod/Sketcher/Gui/TaskDlgEditSketch.h index 506bf98d2..79e2f77e1 100644 --- a/src/Mod/Sketcher/Gui/TaskDlgEditSketch.h +++ b/src/Mod/Sketcher/Gui/TaskDlgEditSketch.h @@ -65,8 +65,6 @@ public: protected: ViewProviderSketch *sketchView; - std::string documentName; - TaskSketcherConstrains *Constraints; TaskSketcherGeneral *General; TaskSketcherMessages *Messages; From a715d416f413a5c9f26154ec42f5af64121867ee Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 13 Jul 2012 13:37:01 +0200 Subject: [PATCH 432/517] Apply camera settings from 3d view to split views for alignment --- src/Gui/CommandDoc.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 9520b80b3..6d3b01a34 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -33,6 +33,7 @@ # include # include # include +# include #endif #include @@ -1176,16 +1177,27 @@ void StdCmdAlignment::activated(int iMsg) model.addGroups(groupMap); align->setModel(model); Base::Type style = Base::Type::fromName("Gui::CADNavigationStyle"); + Base::Vector3d upDir(0,1,0), viewDir(0,0,-1); Gui::Document* doc = Application::Instance->activeDocument(); if (doc) { View3DInventor* mdi = qobject_cast(doc->getActiveView()); if (mdi) { - style = mdi->getViewer()->navigationStyle()->getTypeId(); + View3DInventorViewer* viewer = mdi->getViewer(); + SoCamera* camera = viewer->getCamera(); + if (camera) { + SbVec3f up(0,1,0), dir(0,0,-1); + camera->orientation.getValue().multVec(dir, dir); + viewDir.Set(dir[0],dir[1],dir[2]); + camera->orientation.getValue().multVec(up, up); + upDir.Set(up[0],up[1],up[2]); + } + style = viewer->navigationStyle()->getTypeId(); } } align->setMinPoints(1); align->startAlignment(style); + align->setViewingDirections(viewDir,upDir, viewDir,upDir); Gui::Selection().clearSelection(); } From da7528c5b9c2a980636a578b8906fdada2b26b72 Mon Sep 17 00:00:00 2001 From: mrlukeparry Date: Sun, 15 Jul 2012 13:23:59 +0200 Subject: [PATCH 433/517] Sketcher, 0000466: improve visualization of constraints --- src/Mod/Sketcher/App/Constraint.cpp | 12 +- src/Mod/Sketcher/App/Constraint.h | 1 + src/Mod/Sketcher/Gui/SoDatumLabel.cpp | 693 +++++++++++++++++--- src/Mod/Sketcher/Gui/SoDatumLabel.h | 24 +- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 326 +++------ 5 files changed, 697 insertions(+), 359 deletions(-) diff --git a/src/Mod/Sketcher/App/Constraint.cpp b/src/Mod/Sketcher/App/Constraint.cpp index 92fc804d0..b9d1c0405 100644 --- a/src/Mod/Sketcher/App/Constraint.cpp +++ b/src/Mod/Sketcher/App/Constraint.cpp @@ -51,7 +51,8 @@ Constraint::Constraint() SecondPos(none), Third(GeoUndef), ThirdPos(none), - LabelDistance(10.f) + LabelDistance(10.f), + LabelPosition(0.f) { } @@ -65,7 +66,8 @@ Constraint::Constraint(const Constraint& from) SecondPos(from.SecondPos), Third(from.Third), ThirdPos(from.ThirdPos), - LabelDistance(from.LabelDistance) + LabelDistance(from.LabelDistance), + LabelPosition(from.LabelPosition) { } @@ -100,7 +102,8 @@ void Constraint::Save (Writer &writer) const << "SecondPos=\"" << (int) SecondPos << "\" " << "Third=\"" << Third << "\" " << "ThirdPos=\"" << (int) ThirdPos << "\" " - << "LabelDistance=\"" << LabelDistance<< "\" />" + << "LabelDistance=\"" << LabelDistance << "\" " + << "LabelPosition=\"" << LabelPosition << "\" />" << std::endl; } @@ -123,4 +126,7 @@ void Constraint::Restore(XMLReader &reader) // Read the distance a constraint label has been moved if (reader.hasAttribute("LabelDistance")) LabelDistance = (float)reader.getAttributeAsFloat("LabelDistance"); + + if (reader.hasAttribute("LabelPosition")) + LabelPosition = (float)reader.getAttributeAsFloat("LabelPosition"); } diff --git a/src/Mod/Sketcher/App/Constraint.h b/src/Mod/Sketcher/App/Constraint.h index 3bfb5e28f..68d7ebcc4 100644 --- a/src/Mod/Sketcher/App/Constraint.h +++ b/src/Mod/Sketcher/App/Constraint.h @@ -83,6 +83,7 @@ public: int Third; PointPos ThirdPos; float LabelDistance; + float LabelPosition; }; } //namespace Sketcher diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp index 2896a54b8..7b7cb544b 100644 --- a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp +++ b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (c) 2011 * + * Copyright (c) 2011-2012 Luke Parry * * * * This file is part of the FreeCAD CAx development system. * * * @@ -45,6 +45,7 @@ # include #endif +#include #include #include #include @@ -73,11 +74,23 @@ SoDatumLabel::SoDatumLabel() SO_NODE_CONSTRUCTOR(SoDatumLabel); SO_NODE_ADD_FIELD(string, ("")); SO_NODE_ADD_FIELD(textColor, (SbVec3f(1.0f,1.0f,1.0f))); - SO_NODE_ADD_FIELD(name, ("Helvetica")); - SO_NODE_ADD_FIELD(size, (12)); + SO_NODE_ADD_FIELD(pnts, (SbVec3f(.0f,.0f,.0f))); - this->bbx = 0; - this->bby = 0; + SO_NODE_ADD_FIELD(name, ("Helvetica")); + SO_NODE_ADD_FIELD(size, (12.f)); + SO_NODE_ADD_FIELD(lineWidth, (2.f)); + + SO_NODE_ADD_FIELD(datumtype, (SoDatumLabel::DISTANCE)); + + SO_NODE_DEFINE_ENUM_VALUE(Type, DISTANCE); + SO_NODE_DEFINE_ENUM_VALUE(Type, DISTANCEX); + SO_NODE_DEFINE_ENUM_VALUE(Type, DISTANCEY); + SO_NODE_DEFINE_ENUM_VALUE(Type, ANGLE); + SO_NODE_DEFINE_ENUM_VALUE(Type, RADIUS); + SO_NODE_SET_SF_ENUM_TYPE(datumtype, Type); + + this->imgWidth = 0; + this->imgHeight = 0; } void SoDatumLabel::drawImage() @@ -123,103 +136,199 @@ void SoDatumLabel::drawImage() void SoDatumLabel::computeBBox(SoAction *action, SbBox3f &box, SbVec3f ¢er) { - SbVec2s size; - int nc; - - const unsigned char * dataptr = this->image.getValue(size, nc); - if (dataptr == NULL) { - box.setBounds(SbVec3f(0,0,0), SbVec3f(0,0,0)); - center.setValue(0.0f,0.0f,0.0f); - return; - } - - float srcw = size[0]; - float srch = size[1]; - - float height, width; - - if(action->getTypeId() == SoGLRenderAction::getClassTypeId()) { - // Update using the GL state - SoState *state = action->getState(); - float srcw = size[0]; - float srch = size[1]; - - const SbViewVolume & vv = SoViewVolumeElement::get(state); - float scale = vv.getWorldToScreenScale(SbVec3f(0.f,0.f,0.f), 0.5f); - - float aspectRatio = (float) srcw / (float) srch; - float height = scale / (float) srch; - float width = aspectRatio * (float) height; - - // Update stored values - this->bbx = width; - this->bby = height; - } else { - // Update Primitives using stored dimensions - width = this->bbx; - height = this->bby; - } - - SbVec3f min (-width / 2, -height / 2, 0.f); - SbVec3f max (width / 2, height / 2, 0.f); - box.setBounds(min, max); - center.setValue(0.f,0.f,0.f); + // Set the bounding box using stored parameters + box.setBounds(this->bbox.getMin(),this->bbox.getMax() ); + SbVec3f bbcenter = this->bbox.getCenter(); + center.setValue(bbcenter[0], bbcenter[1], bbcenter[2]); } void SoDatumLabel::generatePrimitives(SoAction * action) { - // Get the size - SbVec2s size; - int nc; - const unsigned char * dataptr = this->image.getValue(size, nc); - if (dataptr == NULL) - return; - - float width, height; + // Initialisation check (needs something more sensible) prevents an infinite loop bug + if(this->imgHeight <= FLT_EPSILON || this->imgWidth <= FLT_EPSILON) + return; - if (action->getTypeId() == SoGLRenderAction::getClassTypeId()) { - // Update using the GL state - SoState *state = action->getState(); - float srcw = size[0]; - float srch = size[1]; + // Get the points stored + const SbVec3f *pnts = this->pnts.getValues(0); + SbVec3f p1 = pnts[0]; + SbVec3f p2 = pnts[1]; - const SbViewVolume & vv = SoViewVolumeElement::get(state); - float scale = vv.getWorldToScreenScale(SbVec3f(0.f,0.f,0.f), 0.5f); + float offsetX, offsetY; - float aspectRatio = (float) srcw / (float) srch; - float height = scale / (float) srch; - float width = aspectRatio * (float) height; + // Change the offset and bounding box parameters depending on Datum Type + if(this->datumtype.getValue() == DISTANCE || this->datumtype.getValue() == DISTANCEX || this->datumtype.getValue() == DISTANCEY ){ - // Update stored dimensions - this->bbx = width; - this->bby = height; - } else { - // Update Primitives using stored dimensions - width = this->bbx; - height = this->bby; + float length = this->param1.getValue(); + float length2 = this->param2.getValue(); + SbVec3f dir, norm; + if (this->datumtype.getValue() == DISTANCE) { + dir = (p2-p1); + } else if (this->datumtype.getValue() == DISTANCEX) { + dir = SbVec3f( (p2[0] - p1[0] >= FLT_EPSILON) ? 1 : -1, 0, 0); + } else if (this->datumtype.getValue() == DISTANCEY) { + dir = SbVec3f(0, (p2[1] - p1[1] >= FLT_EPSILON) ? 1 : -1, 0); + } + + dir.normalize(); + norm = SbVec3f (-dir[1],dir[0],0); + + float normproj12 = (p2-p1).dot(norm); + SbVec3f p1_ = p1 + normproj12 * norm; + + SbVec3f midpos = (p1_ + p2)/2; + // Get magnitude of angle between horizontal + float angle = atan2f(dir[1],dir[0]); + + SbVec3f img1 = SbVec3f(-this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img2 = SbVec3f(-this->imgWidth / 2, this->imgHeight / 2, 0.f); + SbVec3f img3 = SbVec3f( this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img4 = SbVec3f( this->imgWidth / 2, this->imgHeight / 2, 0.f); + + // Rotate through an angle + float s = sin(angle); + float c = cos(angle); + + img1 = SbVec3f((img1[0] * c) - (img1[1] * s), (img1[0] * s) + (img1[1] * c), 0.f); + img2 = SbVec3f((img2[0] * c) - (img2[1] * s), (img2[0] * s) + (img2[1] * c), 0.f); + img3 = SbVec3f((img3[0] * c) - (img3[1] * s), (img3[0] * s) + (img3[1] * c), 0.f); + img4 = SbVec3f((img4[0] * c) - (img4[1] * s), (img4[0] * s) + (img4[1] * c), 0.f); + + SbVec3f textOffset = midpos + norm * length + dir * length2; + + img1 += textOffset; + img2 += textOffset; + img3 += textOffset; + img4 += textOffset; + + // Primitive Shape is only for text as this should only be selectable + SoPrimitiveVertex pv; + + this->beginShape(action, QUADS); + + pv.setNormal( SbVec3f(0.f, 0.f, 1.f) ); + + // Set coordinates + pv.setPoint( img1 ); + shapeVertex(&pv); + + pv.setPoint( img2 ); + shapeVertex(&pv); + + pv.setPoint( img3 ); + shapeVertex(&pv); + + pv.setPoint( img4 ); + shapeVertex(&pv); + + this->endShape(); + + } else if (this->datumtype.getValue() == RADIUS) { + + SbVec3f dir = (p2-p1); + dir.normalize(); + SbVec3f norm (-dir[1],dir[0],0); + + float length = this->param1.getValue(); + SbVec3f pos = p2 + length*dir; + + float angle = atan2f(dir[1],dir[0]); + + SbVec3f img1 = SbVec3f(-this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img2 = SbVec3f(-this->imgWidth / 2, this->imgHeight / 2, 0.f); + SbVec3f img3 = SbVec3f( this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img4 = SbVec3f( this->imgWidth / 2, this->imgHeight / 2, 0.f); + + // Rotate through an angle + float s = sin(angle); + float c = cos(angle); + + img1 = SbVec3f((img1[0] * c) - (img1[1] * s), (img1[0] * s) + (img1[1] * c), 0.f); + img2 = SbVec3f((img2[0] * c) - (img2[1] * s), (img2[0] * s) + (img2[1] * c), 0.f); + img3 = SbVec3f((img3[0] * c) - (img3[1] * s), (img3[0] * s) + (img3[1] * c), 0.f); + img4 = SbVec3f((img4[0] * c) - (img4[1] * s), (img4[0] * s) + (img4[1] * c), 0.f); + + SbVec3f textOffset = pos; + + img1 += textOffset; + img2 += textOffset; + img3 += textOffset; + img4 += textOffset; + + // Primitive Shape is only for text as this should only be selectable + SoPrimitiveVertex pv; + + this->beginShape(action, QUADS); + + pv.setNormal( SbVec3f(0.f, 0.f, 1.f) ); + + // Set coordinates + pv.setPoint( img1 ); + shapeVertex(&pv); + + pv.setPoint( img2 ); + shapeVertex(&pv); + + pv.setPoint( img3 ); + shapeVertex(&pv); + + pv.setPoint( img4 ); + shapeVertex(&pv); + + this->endShape(); + } else if (this->datumtype.getValue() == ANGLE) { + + // Only the angle intersection point is needed + SbVec3f p0 = pnts[0]; + + // Load the Paramaters + float length = this->param1.getValue(); + float startangle = this->param2.getValue(); + float range = this->param3.getValue(); + float endangle = startangle + range; + + float r = 2*length; + + // Useful Information + // v0 - vector for text position + // p0 - vector for angle intersect + SbVec3f v0(cos(startangle+range/2),sin(startangle+range/2),0); + + SbVec3f textOffset = p0 + v0 * r; + + SbVec3f img1 = SbVec3f(-this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img2 = SbVec3f(-this->imgWidth / 2, this->imgHeight / 2, 0.f); + SbVec3f img3 = SbVec3f( this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img4 = SbVec3f( this->imgWidth / 2, this->imgHeight / 2, 0.f); + + img1 += textOffset; + img2 += textOffset; + img3 += textOffset; + img4 += textOffset; + + // Primitive Shape is only for text as this should only be selectable + SoPrimitiveVertex pv; + + this->beginShape(action, QUADS); + + pv.setNormal( SbVec3f(0.f, 0.f, 1.f) ); + + // Set coordinates + pv.setPoint( img1 ); + shapeVertex(&pv); + + pv.setPoint( img2 ); + shapeVertex(&pv); + + pv.setPoint( img3 ); + shapeVertex(&pv); + + pv.setPoint( img4 ); + shapeVertex(&pv); + + this->endShape(); } - SoPrimitiveVertex pv; - - beginShape(action, QUADS); - - pv.setNormal( SbVec3f(0.f, 0.f, 1.f) ); - - // Set coordinates - pv.setPoint( SbVec3f(-width / 2, height / 2, 0.f) ); - shapeVertex(&pv); - - pv.setPoint( SbVec3f(-width / 2, -height / 2, 0.f) ); - shapeVertex(&pv); - - pv.setPoint( SbVec3f(width / 2, -height / 2, 0.f) ); - shapeVertex(&pv); - - pv.setPoint( SbVec3f(width / 2, height / 2, 0.f) ); - shapeVertex(&pv); - - endShape(); } void SoDatumLabel::GLRender(SoGLRenderAction * action) @@ -239,13 +348,384 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) int srcw = size[0]; int srch = size[1]; + // Create the quad to hold texture + const SbViewVolume & vv = SoViewVolumeElement::get(state); + float scale = vv.getWorldToScreenScale(SbVec3f(0.f,0.f,0.f), 0.4f); + + float aspectRatio = (float) srcw / (float) srch; + this->imgHeight = scale / (float) srch; + this->imgWidth = aspectRatio * (float) this->imgHeight; + + + // Get the points stored + const SbVec3f *pnts = this->pnts.getValues(0); + state->push(); + //Set General OpenGL Properties glPushAttrib(GL_ENABLE_BIT | GL_PIXEL_MODE_BIT | GL_COLOR_BUFFER_BIT); glDisable(GL_LIGHTING); - glEnable(GL_DEPTH_TEST); + + //Enable Anti-alias + if(action->isSmoothing()) + { + glEnable(GL_LINE_SMOOTH); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); + } + // Position for Datum Text Label + float offsetX, offsetY, angle; + + SbVec3f textOffset; + if(this->datumtype.getValue() == DISTANCE || this->datumtype.getValue() == DISTANCEX || this->datumtype.getValue() == DISTANCEY ) + { + float length = this->param1.getValue(); + float length2 = this->param2.getValue(); + const SbVec3f *pnts = this->pnts.getValues(0); + + SbVec3f p1 = pnts[0]; + SbVec3f p2 = pnts[1]; + + SbVec3f dir, norm; + if (this->datumtype.getValue() == DISTANCE) { + dir = (p2-p1); + } else if (this->datumtype.getValue() == DISTANCEX) { + dir = SbVec3f( (p2[0] - p1[0] >= FLT_EPSILON) ? 1 : -1, 0, 0); + } else if (this->datumtype.getValue() == DISTANCEY) { + dir = SbVec3f(0, (p2[1] - p1[1] >= FLT_EPSILON) ? 1 : -1, 0); + } + + dir.normalize(); + norm = SbVec3f (-dir[1],dir[0],0); + + // when the datum line is not parallel to p1-p2 the projection of + // p1-p2 on norm is not zero, p2 is considered as reference and p1 + // is replaced by its projection p1_ + float normproj12 = (p2-p1).dot(norm); + SbVec3f p1_ = p1 + normproj12 * norm; + + SbVec3f midpos = (p1_ + p2)/2; + + float offset1 = (length + normproj12 < 0) ? -0.02 : 0.02; + float offset2 = (length < 0) ? -0.02 : 0.02; + + // Get magnitude of angle between horizontal + angle = atan2f(dir[1],dir[0]); + bool flip=false; + if (angle > M_PI_2+M_PI/12) { + angle -= M_PI; + flip = true; + } else if (angle <= -M_PI_2+M_PI/12) { + angle += M_PI; + flip = true; + } + + textOffset = midpos + norm * length + dir * length2; + + // Get the colour + const SbColor& t = textColor.getValue(); + + // Set GL Properties + glLineWidth(this->lineWidth.getValue()); + glColor3f(t[0], t[1], t[2]); + float margin = 0.01f; + margin *= scale; + + SbVec3f perp1 = p1_ + norm * (length + offset1 * scale); + SbVec3f perp2 = p2 + norm * (length + offset2 * scale); + + // Calculate the coordinates for the parallel datum lines + SbVec3f par1 = p1_ + norm * length; + SbVec3f par2 = midpos + norm * length + dir * (length2 - this->imgWidth / 2 - margin); + SbVec3f par3 = midpos + norm * length + dir * (length2 + this->imgWidth / 2 + margin); + SbVec3f par4 = p2 + norm * length; + + bool flipTriang = false; + + if ((par3-par1).dot(dir) > (par4 - par1).length()) { + // Increase Margin to improve visability + float tmpMargin = 0.08f * scale; + par3 = par4; + if((par2-par1).dot(dir) > (par4 - par1).length()) { + par3 = par2; + par2 = par1 - dir * tmpMargin; + flipTriang = true; + } + } else if ((par2-par1).dot(dir) < 0.f) { + float tmpMargin = 0.08f * scale; + par2 = par1; + if((par3-par1).dot(dir) < 0.f) { + par2 = par3; + par3 = par4 + dir * tmpMargin; + flipTriang = true; + } + } + // Perp Lines + glBegin(GL_LINES); + glVertex2f(p1[0], p1[1]); + glVertex2f(perp1[0], perp1[1]); + + glVertex2f(p2[0], p2[1]); + glVertex2f(perp2[0], perp2[1]); + + glVertex2f(par1[0], par1[1]); + glVertex2f(par2[0], par2[1]); + + glVertex2f(par3[0], par3[1]); + glVertex2f(par4[0], par4[1]); + glEnd(); + + SbVec3f ar1 = par1 + ((flipTriang) ? -1 : 1) * dir * 0.866 * 2 * margin; + SbVec3f ar2 = ar1 + norm * margin; + ar1 -= norm * margin; + + SbVec3f ar3 = par4 - ((flipTriang) ? -1 : 1) * dir * 0.866 * 2 * margin; + SbVec3f ar4 = ar3 + norm * margin ; + ar3 -= norm * margin; + + //Draw a pretty arrowhead (Equilateral) (Eventually could be improved to other shapes?) + glBegin(GL_TRIANGLES); + glVertex2f(par1[0], par1[1]); + glVertex2f(ar1[0], ar1[1]); + glVertex2f(ar2[0], ar2[1]); + + glVertex2f(par4[0], par4[1]); + glVertex2f(ar3[0], ar3[1]); + glVertex2f(ar4[0], ar4[1]); + glEnd(); + + // BOUNDING BOX CALCULATION - IMPORTANT + // Finds the mins and maxes + std::vector corners; + corners.push_back(p1); + corners.push_back(p2); + corners.push_back(perp1); + corners.push_back(perp2); + + float minX = p1[0], minY = p1[1], maxX = p1[0] , maxY = p1[1]; + for (std::vector::const_iterator it=corners.begin(); it != corners.end(); ++it) { + minX = ((*it)[0] < minX) ? (*it)[0] : minX; + minY = ((*it)[1] < minY) ? (*it)[1] : minY; + maxX = ((*it)[0] > maxX) ? (*it)[0] : maxX; + maxY = ((*it)[1] > maxY) ? (*it)[1] : maxY; + } + //Store the bounding box + this->bbox.setBounds(SbVec3f(minX, minY, 0.f), SbVec3f (maxX, maxY, 0.f)); + + } else if (this->datumtype.getValue() == RADIUS) { + // Get the Points + SbVec3f p1 = pnts[0]; + SbVec3f p2 = pnts[1]; + + SbVec3f dir = (p2-p1); + dir.normalize(); + SbVec3f norm (-dir[1],dir[0],0); + + float length = this->param1.getValue(); + SbVec3f pos = p2 + length*dir; + + // Get magnitude of angle between horizontal + angle = atan2f(dir[1],dir[0]); + bool flip=false; + if (angle > M_PI_2+M_PI/12) { + angle -= M_PI; + flip = true; + } else if (angle <= -M_PI_2+M_PI/12) { + angle += M_PI; + flip = true; + } + + textOffset = pos; + + // Get the colour + const SbColor& t = textColor.getValue(); + + // Set GL Properties + glLineWidth(this->lineWidth.getValue()); + glColor3f(t[0], t[1], t[2]); + + float margin = 0.01f; + margin *= scale; + + // Create the arrowhead + SbVec3f ar0 = p2; + SbVec3f ar1 = p2 - dir * 0.866 * 2 * margin; + SbVec3f ar2 = ar1 + norm * margin; + ar1 -= norm * margin; + + SbVec3f p3 = pos + dir * (this->imgWidth / 2 + margin); + if ((p3-p1).length() > (p2-p1).length()) + p2 = p3; + + // Calculate the points + SbVec3f pnt1 = pos - dir * (margin + this->imgWidth / 2); + SbVec3f pnt2 = pos + dir * (margin + this->imgWidth / 2); + + // Draw the Lines + glBegin(GL_LINES); + glVertex2f(p1[0], p1[1]); + glVertex2f(pnt1[0], pnt1[1]); + + glVertex2f(pnt2[0], pnt2[1]); + glVertex2f(p2[0], p2[1]); + glEnd(); + + glBegin(GL_TRIANGLES); + glVertex2f(ar0[0], ar0[1]); + glVertex2f(ar1[0], ar1[1]); + glVertex2f(ar2[0], ar2[1]); + glEnd(); + // BOUNDING BOX CALCULATION - IMPORTANT + // Finds the mins and maxes + std::vector corners; + corners.push_back(p1); + corners.push_back(p2); + corners.push_back(pnt1); + corners.push_back(pnt2); + + float minX = p1[0], minY = p1[1], maxX = p1[0] , maxY = p1[1]; + for (std::vector::const_iterator it=corners.begin(); it != corners.end(); ++it) { + minX = ((*it)[0] < minX) ? (*it)[0] : minX; + minY = ((*it)[1] < minY) ? (*it)[1] : minY; + maxX = ((*it)[0] > maxX) ? (*it)[0] : maxX; + maxY = ((*it)[1] > maxY) ? (*it)[1] : maxY; + } + //Store the bounding box + this->bbox.setBounds(SbVec3f(minX, minY, 0.f), SbVec3f (maxX, maxY, 0.f)); + } else if (this->datumtype.getValue() == ANGLE) { + // Only the angle intersection point is needed + SbVec3f p0 = pnts[0]; + + // Load the Paramaters + float length = this->param1.getValue(); + float startangle = this->param2.getValue(); + float range = this->param3.getValue(); + float endangle = startangle + range; + + + float r = 2*length; + + // Set the Text label angle to zero + angle = 0.f; + + // Useful Information + // v0 - vector for text position + // p0 - vector for angle intersect + SbVec3f v0(cos(startangle+range/2),sin(startangle+range/2),0); + + // leave some space for the text + if (range >= 0) + range = std::max(0.2f*range, range - this->imgWidth/(2*r)); + else + range = std::min(0.2f*range, range + this->imgWidth/(2*r)); + + int countSegments = std::max(6, abs(int(50.0 * range / (2 * M_PI)))); + double segment = range / (2*countSegments-2); + + textOffset = p0 + v0 * r; + + float margin = 0.01f; + margin *= scale; + + // Get the colour + const SbColor& t = textColor.getValue(); + + // Set GL Properties + glLineWidth(this->lineWidth.getValue()); + glColor3f(t[0], t[1], t[2]); + + // Draw + glBegin(GL_LINE_STRIP); + + int i=0; + + for (; i < countSegments; i++) { + double theta = startangle + segment*i; + SbVec3f v1 = p0+SbVec3f(r*cos(theta),r*sin(theta),0); + glVertex2f(v1[0],v1[1]); + } + glEnd(); + + glBegin(GL_LINE_STRIP); + i=0; + for (; i < countSegments; i++) { + double theta = endangle - segment*i; + SbVec3f v1 = p0+SbVec3f(r*cos(theta),r*sin(theta),0); + glVertex2f(v1[0],v1[1]); + } + glEnd(); + + // Direction vectors for start and end lines + SbVec3f v1(cos(startangle),sin(startangle),0); + SbVec3f v2(cos(endangle),sin(endangle),0); + + SbVec3f pnt1 = p0+(r-margin)*v1; + SbVec3f pnt2 = p0+(r+margin)*v1; + SbVec3f pnt3 = p0+(r-margin)*v2; + SbVec3f pnt4 = p0+(r+margin)*v2; + + glBegin(GL_LINES); + glVertex2f(pnt1[0],pnt1[1]); + glVertex2f(pnt2[0],pnt2[1]); + + glVertex2f(pnt3[0],pnt3[1]); + glVertex2f(pnt4[0],pnt4[1]); + glEnd(); + + // BOUNDING BOX CALCULATION - IMPORTANT + // Finds the mins and maxes + // We may need to include the text position too + + SbVec3f img1 = SbVec3f(-this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img2 = SbVec3f(-this->imgWidth / 2, this->imgHeight / 2, 0.f); + SbVec3f img3 = SbVec3f( this->imgWidth / 2, -this->imgHeight / 2, 0.f); + SbVec3f img4 = SbVec3f( this->imgWidth / 2, this->imgHeight / 2, 0.f); + + img1 += textOffset; + img2 += textOffset; + img3 += textOffset; + img4 += textOffset; + + std::vector corners; + corners.push_back(pnt1); + corners.push_back(pnt2); + corners.push_back(pnt3); + corners.push_back(pnt4); + corners.push_back(img1); + corners.push_back(img2); + corners.push_back(img3); + corners.push_back(img4); + + float minX = pnt1[0], minY = pnt1[1], maxX = pnt1[0] , maxY = pnt1[1]; + for (std::vector::const_iterator it=corners.begin(); it != corners.end(); ++it) { + minX = ((*it)[0] < minX) ? (*it)[0] : minX; + minY = ((*it)[1] < minY) ? (*it)[1] : minY; + maxX = ((*it)[0] > maxX) ? (*it)[0] : maxX; + maxY = ((*it)[1] > maxY) ? (*it)[1] : maxY; + } + //Store the bounding box + this->bbox.setBounds(SbVec3f(minX, minY, 0.f), SbVec3f (maxX, maxY, 0.f)); + + } + + SbVec3f surfNorm(0.f, 0.f, 1.f) ; + //Get the camera z-direction + SbVec3f z = vv.zVector(); + const SbViewportRegion & vpr = SoViewportRegionElement::get(state); + + SoGetMatrixAction * getmatrixaction = new SoGetMatrixAction(vpr); + getmatrixaction->apply(this); + + SbMatrix transform = getmatrixaction->getMatrix(); + transform.multVecMatrix(surfNorm, surfNorm); + + bool flip = surfNorm.dot(z) > 0; + + glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); // Enable Textures - glEnable(GL_BLEND); + glEnable(GL_BLEND); + // Copy the text bitmap into memory and bind GLuint myTexture; // generate a texture @@ -259,27 +739,26 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) glTexImage2D(GL_TEXTURE_2D, 0, nc, srcw, srch, 0, GL_RGBA, GL_UNSIGNED_BYTE,(const GLvoid*) dataptr); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // Create the quad to hold texture - const SbViewVolume & vv = SoViewVolumeElement::get(state); - float scale = vv.getWorldToScreenScale(SbVec3f(0.f,0.f,0.f), 0.4f); - - float aspectRatio = (float) srcw / (float) srch; - float height = scale / (float) srch; - float width = aspectRatio * (float) height; - this->bbx = width; - this->bby = height; + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + // Apply a rotation and translation matrix + glTranslatef(textOffset[0],textOffset[1], textOffset[2]); + glRotatef((GLfloat) angle * 180 / M_PI, 0,0,1); glBegin(GL_QUADS); + glColor3f(1.f, 1.f, 1.f); - glTexCoord2f(0.f, 1.f); glVertex2f(-width/ 2, height / 2); - glTexCoord2f(0.f, 0.f); glVertex2f(-width / 2,-height / 2); - glTexCoord2f(1.f, 0.f); glVertex2f( width/ 2,-height / 2); - glTexCoord2f(1.f, 1.f); glVertex2f( width / 2, height / 2); + glTexCoord2f((flip) ? 0.f : 1.f, 1.f); glVertex2f( -this->imgWidth / 2, this->imgHeight / 2); + glTexCoord2f((flip) ? 0.f : 1.f, 0.f); glVertex2f( -this->imgWidth / 2, -this->imgHeight / 2); + glTexCoord2f((flip) ? 1.f : 0.f, 0.f); glVertex2f( this->imgWidth / 2, -this->imgHeight / 2); + glTexCoord2f((flip) ? 1.f : 0.f, 1.f); glVertex2f( this->imgWidth / 2, this->imgHeight / 2); + glEnd(); // Reset the Mode - + glPopMatrix(); glPopAttrib(); state->pop(); } diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.h b/src/Mod/Sketcher/Gui/SoDatumLabel.h index 0e4adb11a..0fa276198 100644 --- a/src/Mod/Sketcher/Gui/SoDatumLabel.h +++ b/src/Mod/Sketcher/Gui/SoDatumLabel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * * + * Copyright (c) 2011-2012 Luke Parry * * * * This file is part of the FreeCAD CAx development system. * * * @@ -33,27 +33,40 @@ #include #include #include +#include #include #include namespace SketcherGui { - + class SketcherGuiExport SoDatumLabel : public SoShape { typedef SoShape inherited; SO_NODE_HEADER(SoDatumLabel); public: + enum Type + { + DISTANCE, + DISTANCEX, + DISTANCEY, + ANGLE, + RADIUS}; static void initClass(); SoDatumLabel(); SoMFString string; SoSFColor textColor; - SoSFEnum justification; + SoSFEnum datumtype; SoSFName name; SoSFInt32 size; + SoSFFloat param1; + SoSFFloat param2; + SoSFFloat param3; + SoMFVec3f pnts; SoSFImage image; + SoSFFloat lineWidth; protected: virtual ~SoDatumLabel() {}; @@ -63,8 +76,9 @@ protected: private: void drawImage(); - float bbx; - float bby; + SbBox3f bbox; + float imgWidth; + float imgHeight; }; } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 727626a9b..ed7c5d43f 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -46,6 +46,7 @@ # include # include # include +# include # include # include # include @@ -395,7 +396,6 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe //Base::Console().Log("start dragging, point:%d\n",this->DragPoint); Mode = STATUS_SELECT_Constraint; done = true; - } if (done && length < dblClickRadius && tmp.getValue() < dci) { @@ -418,8 +418,7 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe default: return false; } - } - else { + } else { // Do things depending on the mode of the user interaction switch (Mode) { case STATUS_SELECT_Point: @@ -922,8 +921,9 @@ void ViewProviderSketch::moveConstraint(int constNum, const Base::Vector2D &toPo else if (geo->getTypeId() == Part::GeomCircle::getClassTypeId()) { const Part::GeomCircle *circle = dynamic_cast(geo); double radius = circle->getRadius(); - double angle = M_PI/4; p1 = circle->getCenter(); + Base::Vector3d tmpDir = Base::Vector3d(toPos.fX, toPos.fY, 0) - p1; + double angle = atan2f(tmpDir.y, tmpDir.x); p2 = p1 + radius * Base::Vector3d(cos(angle),sin(angle),0.); } else return; @@ -940,11 +940,17 @@ void ViewProviderSketch::moveConstraint(int constNum, const Base::Vector2D &toPo else if (Constr->Type == DistanceY) dir = Base::Vector3d(0, (p2.y - p1.y >= FLT_EPSILON) ? 1 : -1, 0); - if (Constr->Type == Radius) + if (Constr->Type == Radius) { Constr->LabelDistance = vec.x * dir.x + vec.y * dir.y; - else { + Constr->LabelPosition = atan2f(dir.y, dir.x); + } else { Base::Vector3d norm(-dir.y,dir.x,0); Constr->LabelDistance = vec.x * norm.x + vec.y * norm.y; + if (Constr->Type == Distance || + Constr->Type == DistanceX || Constr->Type == DistanceY) { + vec = Base::Vector3d(toPos.fX, toPos.fY, 0) - (p2 + p1) / 2; + Constr->LabelPosition = vec.x * dir.x + vec.y * dir.y; + } } } else if (Constr->Type == Angle) { @@ -1018,11 +1024,11 @@ bool ViewProviderSketch::isConstraintAtPosition(const Base::Vector3d &constrPos, if (pp) { SoPath *path = pp->getPath(); int length = path->getLength(); - SoNode *tailFather = path->getNode(length-2); + SoNode *tailFather1 = path->getNode(length-2); SoNode *tailFather2 = path->getNode(length-3); // checking if a constraint is the same as the one selected - if (tailFather2 == constraint || tailFather == constraint) { + if (tailFather1 == constraint || tailFather2 == constraint) { return false; } else { return true; @@ -1414,33 +1420,42 @@ void ViewProviderSketch::updateColor(void) // colors of the constraints for (int i=0; i < edit->constrGroup->getNumChildren(); i++) { SoSeparator *s = dynamic_cast(edit->constrGroup->getChild(i)); - SoMaterial *m = dynamic_cast(s->getChild(0)); // Check Constraint Type ConstraintType type = getSketchObject()->Constraints.getValues()[i]->Type; bool hasDatumLabel = (type == Sketcher::Angle || - type == Sketcher::Radius || - type == Sketcher::Distance || type == Sketcher::DistanceX || type == Sketcher::DistanceY); + type == Sketcher::Radius || + type == Sketcher::Distance || + type == Sketcher::DistanceX || type == Sketcher::DistanceY); + + // Non DatumLabel Nodes will have a material excluding coincident + bool hasMaterial = false; + + SoMaterial *m; + if (!hasDatumLabel && type != Sketcher::Coincident) { + hasMaterial = true; + m = dynamic_cast(s->getChild(0)); + } if (edit->SelConstraintSet.find(i) != edit->SelConstraintSet.end()) { - m->diffuseColor = SelectColor; if (hasDatumLabel) { - SoDatumLabel *l = dynamic_cast(s->getChild(4)); + SoDatumLabel *l = dynamic_cast(s->getChild(0)); l->textColor = SelectColor; - } + } else if (hasMaterial) + m->diffuseColor = SelectColor; } else if (edit->PreselectConstraint == i) { - m->diffuseColor = PreselectColor; if (hasDatumLabel) { - SoDatumLabel *l = dynamic_cast(s->getChild(4)); + SoDatumLabel *l = dynamic_cast(s->getChild(0)); l->textColor = PreselectColor; - } + } else if (hasMaterial) + m->diffuseColor = PreselectColor; } else { - m->diffuseColor = ConstrDimColor; if (hasDatumLabel) { - SoDatumLabel *l = dynamic_cast(s->getChild(4)); + SoDatumLabel *l = dynamic_cast(s->getChild(0)); l->textColor = ConstrDimColor; - } + } else if (hasMaterial) + m->diffuseColor = ConstrDimColor; } } @@ -1729,7 +1744,6 @@ void ViewProviderSketch::draw(bool temp) edit->CurvIdToGeoId.push_back(GeoId); } else { - ; } } @@ -2071,28 +2085,7 @@ Restart: } else break; - SbVec3f p1(pnt1.x,pnt1.y,zConstr); - SbVec3f p2(pnt2.x,pnt2.y,zConstr); - - SbVec3f dir, norm; - if (Constr->Type == Distance) - dir = (p2-p1); - else if (Constr->Type == DistanceX) - dir = SbVec3f( (pnt2.x - pnt1.x >= FLT_EPSILON) ? 1 : -1, 0, 0); - else if (Constr->Type == DistanceY) - dir = SbVec3f(0, (pnt2.y - pnt1.y >= FLT_EPSILON) ? 1 : -1, 0); - dir.normalize(); - norm = SbVec3f (-dir[1],dir[0],0); - - // when the datum line is not parallel to p1-p2 the projection of - // p1-p2 on norm is not zero, p2 is considered as reference and p1 - // is replaced by its projection p1_ - float normproj12 = (p2-p1).dot(norm); - - SbVec3f p1_ = p1 + normproj12 * norm; - SbVec3f midpos = (p1_ + p2)/2; - - SoDatumLabel *asciiText = dynamic_cast(sep->getChild(4)); + SoDatumLabel *asciiText = dynamic_cast(sep->getChild(0)); if ((Constr->Type == DistanceX || Constr->Type == DistanceY) && Constr->FirstPos != Sketcher::none && Constr->Second == Constraint::GeoUndef) // display negative sign for absolute coordinates @@ -2100,68 +2093,25 @@ Restart: else // hide negative sign asciiText->string = SbString().sprintf("%.2f",std::abs(Constr->Value)); - // Get Bounding box dimensions for Datum text - Gui::View3DInventorViewer *viewer = static_cast(mdi)->getViewer(); + if (Constr->Type == Distance) + asciiText->datumtype = SoDatumLabel::DISTANCE; + else if (Constr->Type == DistanceX) + asciiText->datumtype = SoDatumLabel::DISTANCEX; + else if (Constr->Type == DistanceY) + asciiText->datumtype = SoDatumLabel::DISTANCEY; - // [FIX ME] Its an attempt to find the height of the text using the bounding box, but is in correct. - SoGetBoundingBoxAction bbAction(viewer->getViewportRegion()); - bbAction.apply(sep->getChild(4)); + // Assign the Datum Points + asciiText->pnts.setNum(2); + SbVec3f *verts = asciiText->pnts.startEditing(); - float bx,by,bz; - bbAction.getBoundingBox().getSize(bx,by,bz); - SbVec3f textBB(bx,by,bz); - // bbAction.setCenter(, true) - // This is the bounding box containing the width and height of text + verts[0] = SbVec3f (pnt1.x,pnt1.y,zConstr); + verts[1] = SbVec3f (pnt2.x,pnt2.y,zConstr); - SbVec3f textBBCenter = bbAction.getBoundingBox().getCenter(); + asciiText->pnts.finishEditing(); - float length = Constr->LabelDistance; - - // Get magnitude of angle between horizontal - double angle = atan2f(dir[1],dir[0]); - bool flip=false; - if (angle > M_PI_2+M_PI/12) { - angle -= M_PI; - flip = true; - } else if (angle <= -M_PI_2+M_PI/12) { - angle += M_PI; - flip = true; - } - - SbVec3f textpos = midpos + norm * (length + ( (flip ? 1:-1) * textBBCenter[1] / 4)); - - // set position and rotation of Datums Text - SoTransform *transform = dynamic_cast(sep->getChild(2)); - transform->rotation.setValue(SbVec3f(0, 0, 1), (float)angle); - transform->translation.setValue(textpos); - - // Get the datum nodes - SoSeparator *sepDatum = dynamic_cast(sep->getChild(1)); - SoCoordinate3 *datumCord = dynamic_cast(sepDatum->getChild(0)); - - // [Fixme] This should be made neater - compute the vertical datum line length - float offset1 = (length + normproj12 < 0) ? -0.5 : 0.5; - float offset2 = (length < 0) ? -0.5 : 0.5; - offset1 *= getScaleFactor(); - offset2 *= getScaleFactor(); - // Calculate coordinates for perpendicular datum lines - datumCord->point.set1Value(0,p1); - datumCord->point.set1Value(1,p1_ + norm * (length + offset1)); - datumCord->point.set1Value(2,p2); - datumCord->point.set1Value(3,p2 + norm * (length + offset2)); - - // Calculate the coordinates for the parallel datum lines - datumCord->point.set1Value(4,p1_ + norm * length); - datumCord->point.set1Value(5,midpos + norm * length - dir * (textBB[0]/1.7f) ); - datumCord->point.set1Value(6,midpos + norm * length + dir * (textBB[0]/1.7f) ); - datumCord->point.set1Value(7,p2 + norm * length); - - // Use the coordinates calculated earlier to the lineset - SoLineSet *datumLineSet = dynamic_cast(sepDatum->getChild(1)); - datumLineSet->numVertices.set1Value(0,2); - datumLineSet->numVertices.set1Value(1,2); - datumLineSet->numVertices.set1Value(2,2); - datumLineSet->numVertices.set1Value(3,2); + //Assign the Label Distance + asciiText->param1 = Constr->LabelDistance; + asciiText->param2 = Constr->LabelPosition; } break; case PointOnObject: @@ -2385,68 +2335,20 @@ Restart: } else break; - SoDatumLabel *asciiText = dynamic_cast(sep->getChild(4)); - asciiText->string = SbString().sprintf("%.2f",Base::toDegrees(std::abs(Constr->Value))); + SoDatumLabel *asciiText = dynamic_cast(sep->getChild(0)); + asciiText->string = SbString().sprintf("%.2f",Base::toDegrees(std::abs(Constr->Value))); + asciiText->datumtype = SoDatumLabel::ANGLE; + asciiText->param1 = Constr->LabelDistance; + asciiText->param2 = startangle; + asciiText->param3 = range; - // Get Bounding box dimensions for Datum text - Gui::View3DInventorViewer *viewer = static_cast(mdi)->getViewer(); + asciiText->pnts.setNum(2); + SbVec3f *verts = asciiText->pnts.startEditing(); - // [FIX ME] Its an attempt to find the height of the text using the bounding box, but is in correct. - SoGetBoundingBoxAction bbAction(viewer->getViewportRegion()); - bbAction.apply(sep->getChild(4)); + verts[0] = p0; - float bx,by,bz; - bbAction.getBoundingBox().getSize(bx,by,bz); - SbVec3f textBB(bx,by,bz); + asciiText->pnts.finishEditing(); - SbVec3f textBBCenter = bbAction.getBoundingBox().getCenter(); - - float length = Constr->LabelDistance; - float r = 2*length; - - SbVec3f v0(cos(startangle+range/2),sin(startangle+range/2),0); - SbVec3f textpos = p0 + v0 * r - SbVec3f(0,1,0) * textBBCenter[1]/4; - - // leave some space for the text - if (range >= 0) - range = std::max(0.2*range, range - textBB[0]/(2*r)); - else - range = std::min(0.2*range, range + textBB[0]/(2*r)); - - int countSegments = std::max(6, abs(int(50.0 * range / (2 * M_PI)))); - double segment = range / (2*countSegments-2); - - // set position and rotation of Datums Text - SoTransform *transform = dynamic_cast(sep->getChild(2)); - transform->translation.setValue(textpos); - - // Get the datum nodes - SoSeparator *sepDatum = dynamic_cast(sep->getChild(1)); - SoCoordinate3 *datumCord = dynamic_cast(sepDatum->getChild(0)); - - datumCord->point.setNum(2*countSegments+4); - int i=0; - int j=2*countSegments-1; - for (; i < countSegments; i++, j--) { - double angle = startangle + segment*i; - datumCord->point.set1Value(i,p0+SbVec3f(r*cos(angle),r*sin(angle),0)); - angle = endangle - segment*i; - datumCord->point.set1Value(j,p0+SbVec3f(r*cos(angle),r*sin(angle),0)); - } - SbVec3f v1(cos(startangle),sin(startangle),0); - SbVec3f v2(cos(endangle),sin(endangle),0); - float sf = getScaleFactor(); - datumCord->point.set1Value(2*countSegments ,p0+(r-0.5f * sf)*v1); - datumCord->point.set1Value(2*countSegments+1,p0+(r+0.5f * sf)*v1); - datumCord->point.set1Value(2*countSegments+2,p0+(r-0.5f * sf)*v2); - datumCord->point.set1Value(2*countSegments+3,p0+(r+0.5f * sf)*v2); - - // Use the coordinates calculated earlier to the lineset - SoLineSet *datumLineSet = dynamic_cast(sepDatum->getChild(1)); - datumLineSet->numVertices.set1Value(0,countSegments); - datumLineSet->numVertices.set1Value(1,countSegments); - datumLineSet->numVertices.set1Value(2,2); - datumLineSet->numVertices.set1Value(3,2); } break; case Radius: @@ -2469,7 +2371,7 @@ Restart: else if (geo->getTypeId() == Part::GeomCircle::getClassTypeId()) { const Part::GeomCircle *circle = dynamic_cast(geo); double radius = circle->getRadius(); - double angle = M_PI/4; + double angle = (double) Constr->LabelPosition; pnt1 = circle->getCenter(); pnt2 = pnt1 + radius * Base::Vector3d(cos(angle),sin(angle),0.); } else @@ -2480,68 +2382,19 @@ Restart: SbVec3f p1(pnt1.x,pnt1.y,zConstr); SbVec3f p2(pnt2.x,pnt2.y,zConstr); - SbVec3f dir = (p2-p1); - dir.normalize(); - SbVec3f norm (-dir[1],dir[0],0); + SoDatumLabel *asciiText = dynamic_cast(sep->getChild(0)); + asciiText->string = SbString().sprintf("%.2f",Constr->Value); + asciiText->datumtype = SoDatumLabel::RADIUS; + asciiText->param1 = Constr->LabelDistance; + asciiText->param2 = Constr->LabelPosition; - float length = Constr->LabelDistance; - SbVec3f pos = p2 + length*dir; + asciiText->pnts.setNum(2); + SbVec3f *verts = asciiText->pnts.startEditing(); - SoDatumLabel *asciiText = dynamic_cast(sep->getChild(4)); - asciiText->string = SbString().sprintf("%.2f",Constr->Value); + verts[0] = p1; + verts[1] = p2; - // Get Bounding box dimensions for Datum text - Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView(); - Gui::View3DInventorViewer *viewer = static_cast(mdi)->getViewer(); - - // [FIX ME] Its an attempt to find the height of the text using the bounding box, but is in correct. - SoGetBoundingBoxAction bbAction(viewer->getViewportRegion()); - bbAction.apply(sep->getChild(3)); - - float bx=0,by=0,bz=0; - SbBox3f bbox = bbAction.getBoundingBox(); - if (!bbox.isEmpty()) - bbox.getSize(bx,by,bz); - SbVec3f textBB(bx,by,bz); - - SbVec3f textBBCenter = bbAction.getBoundingBox().getCenter(); - - // Get magnitude of angle between horizontal - double angle = atan2f(dir[1],dir[0]); - bool flip=false; - if (angle > M_PI_2+M_PI/12) { - angle -= M_PI; - flip = true; - } else if (angle <= -M_PI_2+M_PI/12) { - angle += M_PI; - flip = true; - } - - SbVec3f textpos = pos + norm * ( (flip ? 1:-1) * textBBCenter[1] / 1.7f); - - // set position and rotation of Datums Text - SoTransform *transform = dynamic_cast(sep->getChild(2)); - transform->rotation.setValue(SbVec3f(0, 0, 1), (float)angle); - transform->translation.setValue(textpos); - - // Get the datum nodes - SoSeparator *sepDatum = dynamic_cast(sep->getChild(1)); - SoCoordinate3 *datumCord = dynamic_cast(sepDatum->getChild(0)); - - SbVec3f p3 = pos + dir * (6+textBB[0]/1.7f); - if ((p3-p1).length() > (p2-p1).length()) - p2 = p3; - - // Calculate the coordinates for the parallel datum lines - datumCord->point.set1Value(0,p1); - datumCord->point.set1Value(1,pos - dir * (1+textBB[0]/1.7f) ); - datumCord->point.set1Value(2,pos + dir * (1+textBB[0]/1.7f) ); - datumCord->point.set1Value(3,p2); - - // Use the coordinates calculated earlier to the lineset - SoLineSet *datumLineSet = dynamic_cast(sepDatum->getChild(1)); - datumLineSet->numVertices.set1Value(0,2); - datumLineSet->numVertices.set1Value(1,2); + asciiText->pnts.finishEditing(); } break; case Coincident: // nothing to do for coincident @@ -2575,10 +2428,10 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) SoSeparator *sep = new SoSeparator(); // no caching for fluctuand data structures sep->renderCaching = SoSeparator::OFF; + // every constrained visual node gets its own material for preselection and selection SoMaterial *Material = new SoMaterial; Material->diffuseColor = ConstrDimColor; - sep->addChild(Material); // distinguish different constraint types to build up switch ((*it)->Type) { @@ -2588,35 +2441,22 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) case Radius: case Angle: { - SoSeparator *sepDatum = new SoSeparator(); - sepDatum->addChild(new SoCoordinate3()); - SoLineSet *lineSet = new SoLineSet; - sepDatum->addChild(lineSet); - - sep->addChild(sepDatum); - - // Add the datum text - sep->addChild(new SoTransform()); - - // add font for the datum text - SoFont *font = new SoFont(); - font->size = 8.f; - font->name = "FreeSans:bold, Helvetica, Arial, FreeSans:bold"; - - sep->addChild(font); - SoDatumLabel *text = new SoDatumLabel(); - //text->justification = SoDatumLabel::CENTER; text->string = ""; text->textColor = ConstrDimColor; + SoAnnotation *anno = new SoAnnotation(); + anno->renderCaching = SoSeparator::OFF; + anno->addChild(text); sep->addChild(text); - + edit->constrGroup->addChild(anno); edit->vConstrType.push_back((*it)->Type); + continue; // jump to next constraint } break; case Horizontal: case Vertical: { + sep->addChild(Material); sep->addChild(new SoZoomTranslation()); // 1. sep->addChild(new SoImage()); // 2. constraint icon @@ -2632,6 +2472,7 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) case Equal: { // Add new nodes to Constraint Seperator + sep->addChild(Material); sep->addChild(new SoZoomTranslation()); // 1. sep->addChild(new SoImage()); // 2. first constraint icon sep->addChild(new SoZoomTranslation()); // 3. @@ -2645,6 +2486,7 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) case Tangent: { // Add new nodes to Constraint Seperator + sep->addChild(Material); sep->addChild(new SoZoomTranslation()); // 1. sep->addChild(new SoImage()); // 2. constraint icon @@ -2667,6 +2509,7 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) sepArrows->addChild(new SoCoordinate3()); SoLineSet *lineSet = new SoLineSet; sepArrows->addChild(lineSet); + sep->addChild(Material); sep->addChild(sepArrows); // 1. // Add new nodes to Constraint Seperator @@ -2976,11 +2819,6 @@ void ViewProviderSketch::createEditInventorNodes(void) MtlBind->value = SoMaterialBinding::OVERALL ; edit->EditRoot->addChild(MtlBind); - // add font for the text shown constraints - font = new SoFont(); - font->size = 8.0; - edit->EditRoot->addChild(font); - // use small line width for the Constraints DrawStyle = new SoDrawStyle; DrawStyle->lineWidth = 1; From 72cd746401f7a5f1d0d08e581f8b0fd2f950b27d Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 16 Jul 2012 12:11:20 +0200 Subject: [PATCH 434/517] Sketcher: fix issues with single points --- src/Mod/Sketcher/App/SketchObject.cpp | 6 +- .../Resources/icons/Sketcher_CreatePoint.svg | 79 ++++++++++--------- 2 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 32d718d21..c5b1bc982 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -224,7 +224,11 @@ Base::Vector3d SketchObject::getPoint(int GeoId, PointPos PosId) const assert(GeoId == H_Axis || GeoId == V_Axis || (GeoId <= getHighestCurveIndex() && GeoId >= -getExternalGeometryCount()) ); const Part::Geometry *geo = getGeometry(GeoId); - if (geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { + if (geo->getTypeId() == Part::GeomPoint::getClassTypeId()) { + const Part::GeomPoint *p = dynamic_cast(geo); + if (PosId == start || PosId == mid || PosId == end) + return p->getPoint(); + } else if (geo->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { const Part::GeomLineSegment *lineSeg = dynamic_cast(geo); if (PosId == start) return lineSeg->getStartPoint(); diff --git a/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreatePoint.svg b/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreatePoint.svg index 648d602fb..b69c7cc25 100644 --- a/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreatePoint.svg +++ b/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreatePoint.svg @@ -14,8 +14,8 @@ height="64px" id="svg2726" sodipodi:version="0.32" - inkscape:version="0.48.1 r9760" - sodipodi:docname="Sketcher_Point.svg" + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="Sketcher_CreatePoint.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.1" inkscape:export-filename="/home/yorik/Sources/FreeCAD/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreatePoint.svg.png" @@ -87,6 +87,17 @@ id="radialGradient3888" xlink:href="#linearGradient3144-3" inkscape:collect="always" /> +
    + inkscape:window-width="657" + inkscape:window-height="716" + inkscape:window-x="710" + inkscape:window-y="24" + inkscape:window-maximized="0" /> @@ -115,7 +126,7 @@ image/svg+xml - + @@ -133,35 +144,29 @@ sodipodi:cy="655.2193" sodipodi:cx="197.14285" id="path3162-2" - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.80000019000000044;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.67000001" + style="opacity:0.67000002;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.09976673;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" - transform="matrix(-2.047093,-0.04650869,0.04650869,-2.047093,549.55577,1983.2711)" /> - - - - + transform="matrix(-1.135537,-0.02584694,0.0257987,-1.13766,378.69194,1376.1392)" /> + + From 66cfcd375f3677849118f9cf4e3779886247f21e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 16 Jul 2012 14:15:14 -0300 Subject: [PATCH 435/517] Arch: Added all the draft tools to the Arch WB --- src/Mod/Arch/InitGui.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 7f4c51079..523fc2352 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -58,27 +58,36 @@ class ArchWorkbench(Workbench): def Initialize(self): import DraftTools,DraftGui,Arch_rc,Arch + + # arch tools self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Roof","Arch_Axis", "Arch_SectionPlane","Arch_Add","Arch_Remove"] - self.drafttools = ["Draft_Line","Draft_Wire","Draft_Rectangle", - "Draft_Polygon","Draft_Arc", - "Draft_Circle","Draft_Dimension", - "Draft_Move","Draft_Rotate", - "Draft_Offset","Draft_Upgrade", - "Draft_Downgrade","Draft_Trimex"] - self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode", - "Draft_AddToGroup","Draft_SelectGroup", - "Draft_SelectPlane","Draft_ToggleSnap", - "Draft_ShowSnapBar","Draft_ToggleGrid"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] + + # draft tools + self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", + "Draft_Polygon","Draft_Rectangle", "Draft_Text", + "Draft_Dimension", "Draft_BSpline","Draft_Point"] + self.draftmodtools = ["Draft_Move","Draft_Rotate","Draft_Offset", + "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", + "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", + "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", + "Draft_Clone"] + self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", + "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", + "Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine", + "Draft_FinishLine","Draft_CloseLine"] + self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),self.archtools) self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) + self.appendToolbar(str(DraftTools.translate("arch","Draft mod tools")),self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) - self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftcontexttools) + self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftmodtools) + self.appendMenu([str(DraftTools.translate("arch","&Draft")),str(DraftTools.translate("arch","Context Tools"))],self.draftcontexttools) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") From 519d45e1f27868d69aa20f73161c834dc653f3e0 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 16 Jul 2012 15:54:51 -0300 Subject: [PATCH 436/517] Arch: Easier creations of struct + axes systems With structs and axes selected, both Arch_Axis and Arch_Structure commands now create axis systems --- src/Mod/Arch/ArchAxis.py | 8 +++++++- src/Mod/Arch/ArchCommands.py | 20 +++++++++++++++++++- src/Mod/Arch/ArchStructure.py | 25 ++++++++++++++++++++++--- src/Mod/Draft/Draft.py | 9 +++++++++ 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index a2ea31033..5bd132941 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -59,7 +59,13 @@ class _CommandAxis: def Activated(self): FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Axis"))) FreeCADGui.doCommand("import Arch") - FreeCADGui.doCommand("Arch.makeAxis()") + sel = FreeCADGui.Selection.getSelection() + st = Draft.getObjectsOfType(sel,"Structure") + if st: + FreeCADGui.doCommand("axe = Arch.makeAxis()") + FreeCADGui.doCommand("Arch.makeStructuralSystem(" + ArchCommands.getStringList(st) + ",[axe])") + else: + FreeCADGui.doCommand("Arch.makeAxis()") FreeCAD.ActiveDocument.commitTransaction() class _Axis: diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 66babfc7c..f98c61c88 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -32,6 +32,17 @@ __url__ = "http://free-cad.sourceforge.net" # module functions ############################################### +def getStringList(objects): + '''getStringList(objects): returns a string defining a list + of objects''' + result = "[" + for o in objects: + if len(result) > 1: + result += "," + result += "FreeCAD.ActiveDocument." + o.Name + result += "]" + 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 @@ -53,11 +64,18 @@ def addComponents(objectsList,host): host.Group = c elif tp in ["Wall","Structure"]: a = host.Additions + if hasattr(host,"Axes"): + x = host.Axes for o in objectsList: - if not o in a: + if Draft.getType(o) == "Axis": + if not o in x: + x.append(o) + elif not o in a: if hasattr(o,"Shape"): a.append(o) host.Additions = a + if hasattr(host,"Axes"): + host.Axes = x elif tp in ["SectionPlane"]: a = host.Objects for o in objectsList: diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index b63853fe1..d249a8a83 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -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 @@ -52,6 +52,18 @@ def makeStructure(baseobj=None,length=1,width=1,height=1,name=str(translate("Arc obj.ViewObject.ShapeColor = (r,g,b,1.0) return obj +def makeStructuralSystem(objects,axes): + '''makeStructuralSystem(objects,axes): makes a structural system + based on the given objects and axes''' + result = [] + if objects and axes: + for o in objects: + s = makeStructure(o) + s.Axes = axes + result.append(s) + FreeCAD.ActiveDocument.recompute() + return result + class _CommandStructure: "the Arch Structure command definition" def GetResources(self): @@ -65,8 +77,15 @@ class _CommandStructure: FreeCADGui.doCommand("import Arch") sel = FreeCADGui.Selection.getSelection() if sel: - for obj in sel: - FreeCADGui.doCommand("Arch.makeStructure(FreeCAD.ActiveDocument."+obj.Name+")") + # if selection contains structs and axes, make a system + st = Draft.getObjectsOfType(sel,"Structure") + ax = Draft.getObjectsOfType(sel,"Axis") + if st and ax: + FreeCADGui.doCommand("Arch.makeStructuralSystem(" + ArchCommands.getStringList(st) + "," + ArchCommands.getStringList(ax) + ")") + else: + # else, do normal structs + for obj in sel: + FreeCADGui.doCommand("Arch.makeStructure(FreeCAD.ActiveDocument." + obj.Name + ")") else: FreeCADGui.doCommand("Arch.makeStructure()") FreeCAD.ActiveDocument.commitTransaction() diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index aa5aeb18e..200e9fbbd 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -173,6 +173,15 @@ def getType(obj): return "Group" return "Unknown" +def getObjectsOfType(objectslist,typ): + """getObjectsOfType(objectslist,typ): returns a list of objects of type "typ" found + in the given object list""" + objs = [] + for o in objectslist: + if getType(o) == typ: + objs.append(o) + return objs + def get3DView(): "get3DView(): returns the current view if it is 3D, or the first 3D view found, or None" v = FreeCADGui.ActiveDocument.ActiveView From 223023d118f482a34db2b53f86fafef9bbf3574c Mon Sep 17 00:00:00 2001 From: mrlukeparry Date: Tue, 17 Jul 2012 11:00:31 +0200 Subject: [PATCH 437/517] Sketcher: improved detection of constraints visuals overlapping --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index ed7c5d43f..fcdc384d2 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -1013,14 +1013,17 @@ bool ViewProviderSketch::isConstraintAtPosition(const Base::Vector3d &constrPos, SoRayPickAction rp(viewer->getViewportRegion()); rp.setRadius(0.1f); - - rp.setRay(SbVec3f(constrPos.x, constrPos.y,constrPos.z), SbVec3f(0, 0, 1) ); + rp.setPickAll(true); + rp.setRay(SbVec3f(constrPos.x, constrPos.y, -1.f), SbVec3f(0, 0, 1) ); //problem rp.apply(edit->constrGroup); // We could narrow it down to just the SoGroup containing the constraints // returns a copy of the point SoPickedPoint *pp = rp.getPickedPoint(); + const SoPickedPointList ppl = rp.getPickedPointList(); + if(ppl.getLength() > 1) + return true; if (pp) { SoPath *path = pp->getPath(); int length = path->getLength(); From cba94b2660b4505a655cd0225c546bcd24ef8253 Mon Sep 17 00:00:00 2001 From: mrlukeparry Date: Tue, 17 Jul 2012 12:40:22 +0200 Subject: [PATCH 438/517] Sketcher: improve symmetric constraint visual --- src/Mod/Sketcher/Gui/SoDatumLabel.cpp | 251 +++++++++++++++----- src/Mod/Sketcher/Gui/SoDatumLabel.h | 6 +- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 50 ++-- 3 files changed, 206 insertions(+), 101 deletions(-) diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp index 7b7cb544b..36b8ed6a2 100644 --- a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp +++ b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp @@ -326,6 +326,62 @@ void SoDatumLabel::generatePrimitives(SoAction * action) pv.setPoint( img4 ); shapeVertex(&pv); + this->endShape(); + } else if (this->datumtype.getValue() == SYMMETRIC) { + + // Get the Scale + SoState *state = action->getState(); + const SbViewVolume & vv = SoViewVolumeElement::get(state); + float scale = vv.getWorldToScreenScale(SbVec3f(0.f,0.f,0.f), 0.4f); + + SbVec3f dir = (p2-p1); + dir.normalize(); + SbVec3f norm (-dir[1],dir[0],0); + + float margin = 0.01f; + margin *= scale; + + // Calculate coordinates for the first arrow + SbVec3f ar0, ar1, ar2; + ar0 = p1 + dir * 5 * margin; + ar1 = ar0 - dir * 0.866 * 2 * margin; // Base Point of Arrow + ar2 = ar1 + norm * margin; // Triangular corners + ar1 -= norm * margin; + + // Calculate coordinates for the second arrow + SbVec3f ar3, ar4, ar5; + ar3 = p2 - dir * 5 * margin; + ar4 = ar3 + dir * 0.866 * 2 * margin; // Base Point of 2nd Arrow + + ar5 = ar4 + norm * margin; // Triangular corners + ar4 -= norm * margin; + + SoPrimitiveVertex pv; + + this->beginShape(action, TRIANGLES); + + pv.setNormal( SbVec3f(0.f, 0.f, 1.f) ); + + // Set coordinates + pv.setPoint( ar0 ); + shapeVertex(&pv); + + pv.setPoint( ar1 ); + shapeVertex(&pv); + + pv.setPoint( ar2 ); + shapeVertex(&pv); + + // Set coordinates + pv.setPoint( ar3 ); + shapeVertex(&pv); + + pv.setPoint( ar4 ); + shapeVertex(&pv); + + pv.setPoint( ar5 ); + shapeVertex(&pv); + this->endShape(); } @@ -338,26 +394,33 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) return; if (action->handleTransparency(true)) return; - drawImage(); - SbVec2s size; - int nc; - const unsigned char * dataptr = this->image.getValue(size, nc); - if (dataptr == NULL) return; // no image - - int srcw = size[0]; - int srch = size[1]; - - // Create the quad to hold texture + // Get the Scale const SbViewVolume & vv = SoViewVolumeElement::get(state); float scale = vv.getWorldToScreenScale(SbVec3f(0.f,0.f,0.f), 0.4f); - float aspectRatio = (float) srcw / (float) srch; - this->imgHeight = scale / (float) srch; - this->imgWidth = aspectRatio * (float) this->imgHeight; + const SbString* s = string.getValues(0); + bool hasText = (s->getLength() > 0) ? true : false; + SbVec2s size; + int nc; + int srcw, srch; - // Get the points stored + if(hasText) { + drawImage(); + + const unsigned char * dataptr = this->image.getValue(size, nc); + if (dataptr == NULL) return; // no image + + srcw = size[0]; + srch = size[1]; + + float aspectRatio = (float) srcw / (float) srch; + this->imgHeight = scale / (float) srch; + this->imgWidth = aspectRatio * (float) this->imgHeight; + } + + // Get the points stored in the pnt field const SbVec3f *pnts = this->pnts.getValues(0); state->push(); @@ -378,6 +441,14 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) float offsetX, offsetY, angle; SbVec3f textOffset; + + // Get the colour + const SbColor& t = textColor.getValue(); + + // Set GL Properties + glLineWidth(2.f); + glColor3f(t[0], t[1], t[2]); + if(this->datumtype.getValue() == DISTANCE || this->datumtype.getValue() == DISTANCEX || this->datumtype.getValue() == DISTANCEY ) { float length = this->param1.getValue(); @@ -538,13 +609,6 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) textOffset = pos; - // Get the colour - const SbColor& t = textColor.getValue(); - - // Set GL Properties - glLineWidth(this->lineWidth.getValue()); - glColor3f(t[0], t[1], t[2]); - float margin = 0.01f; margin *= scale; @@ -628,13 +692,6 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) float margin = 0.01f; margin *= scale; - // Get the colour - const SbColor& t = textColor.getValue(); - - // Set GL Properties - glLineWidth(this->lineWidth.getValue()); - glColor3f(t[0], t[1], t[2]); - // Draw glBegin(GL_LINE_STRIP); @@ -706,59 +763,123 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) } //Store the bounding box this->bbox.setBounds(SbVec3f(minX, minY, 0.f), SbVec3f (maxX, maxY, 0.f)); + } else if (this->datumtype.getValue() == SYMMETRIC) { + SbVec3f p1 = pnts[0]; + SbVec3f p2 = pnts[1]; + + SbVec3f dir = (p2-p1); + dir.normalize(); + SbVec3f norm (-dir[1],dir[0],0); + + float margin = 0.01f; + margin *= scale; + + // Calculate coordinates for the first arrow + SbVec3f ar0, ar1, ar2; + ar0 = p1 + dir * 4 * margin; // Tip of Arrow + ar1 = ar0 - dir * 0.866 * 2 * margin; + ar2 = ar1 + norm * margin; + ar1 -= norm * margin; + + glBegin(GL_LINES); + glVertex2f(p1[0],p1[1]); + glVertex2f(ar0[0],ar0[1]); + glVertex2f(ar0[0],ar0[1]); + glVertex2f(ar1[0],ar1[1]); + glVertex2f(ar0[0],ar0[1]); + glVertex2f(ar2[0],ar2[1]); + glEnd(); + + // Calculate coordinates for the second arrow + SbVec3f ar3, ar4, ar5; + ar3 = p2 - dir * 4 * margin; // Tip of 2nd Arrow + ar4 = ar3 + dir * 0.866 * 2 * margin; + ar5 = ar4 + norm * margin; + ar4 -= norm * margin; + + glBegin(GL_LINES); + glVertex2f(p2[0],p2[1]); + glVertex2f(ar3[0],ar3[1]); + glVertex2f(ar3[0], ar3[1]); + glVertex2f(ar4[0], ar4[1]); + glVertex2f(ar3[0], ar3[1]); + glVertex2f(ar5[0], ar5[1]); + glEnd(); + + // BOUNDING BOX CALCULATION - IMPORTANT + // Finds the mins and maxes + std::vector corners; + corners.push_back(p1); + corners.push_back(p2); + + float minX = p1[0], minY = p1[1], maxX = p1[0] , maxY = p1[1]; + for (std::vector::iterator it=corners.begin(); it != corners.end(); ++it) { + minX = ((*it)[0] < minX) ? (*it)[0] : minX; + minY = ((*it)[1] < minY) ? (*it)[1] : minY; + maxX = ((*it)[0] > maxX) ? (*it)[0] : maxX; + maxY = ((*it)[1] > maxY) ? (*it)[1] : maxY; + } + //Store the bounding box + this->bbox.setBounds(SbVec3f(minX, minY, 0.f), SbVec3f (maxX, maxY, 0.f)); } - SbVec3f surfNorm(0.f, 0.f, 1.f) ; - //Get the camera z-direction - SbVec3f z = vv.zVector(); - const SbViewportRegion & vpr = SoViewportRegionElement::get(state); + if(hasText) { - SoGetMatrixAction * getmatrixaction = new SoGetMatrixAction(vpr); - getmatrixaction->apply(this); + const unsigned char * dataptr = this->image.getValue(size, nc); - SbMatrix transform = getmatrixaction->getMatrix(); - transform.multVecMatrix(surfNorm, surfNorm); + SbVec3f surfNorm(0.f, 0.f, 1.f) ; + //Get the camera z-direction + SbVec3f z = vv.zVector(); + const SbViewportRegion & vpr = SoViewportRegionElement::get(state); - bool flip = surfNorm.dot(z) > 0; + SoGetMatrixAction * getmatrixaction = new SoGetMatrixAction(vpr); + getmatrixaction->apply(this); - glDisable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); // Enable Textures - glEnable(GL_BLEND); + SbMatrix transform = getmatrixaction->getMatrix(); + transform.multVecMatrix(surfNorm, surfNorm); - // Copy the text bitmap into memory and bind - GLuint myTexture; - // generate a texture - glGenTextures(1, &myTexture); + bool flip = surfNorm.dot(z) > 0; - glBindTexture(GL_TEXTURE_2D, myTexture); + glDisable(GL_DEPTH_TEST); + glEnable(GL_TEXTURE_2D); // Enable Textures + glEnable(GL_BLEND); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + // Copy the text bitmap into memory and bind + GLuint myTexture; + // generate a texture + glGenTextures(1, &myTexture); - glTexImage2D(GL_TEXTURE_2D, 0, nc, srcw, srch, 0, GL_RGBA, GL_UNSIGNED_BYTE,(const GLvoid*) dataptr); + glBindTexture(GL_TEXTURE_2D, myTexture); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); + glTexImage2D(GL_TEXTURE_2D, 0, nc, srcw, srch, 0, GL_RGBA, GL_UNSIGNED_BYTE,(const GLvoid*) dataptr); - // Apply a rotation and translation matrix - glTranslatef(textOffset[0],textOffset[1], textOffset[2]); - glRotatef((GLfloat) angle * 180 / M_PI, 0,0,1); - glBegin(GL_QUADS); - - glColor3f(1.f, 1.f, 1.f); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glTexCoord2f((flip) ? 0.f : 1.f, 1.f); glVertex2f( -this->imgWidth / 2, this->imgHeight / 2); - glTexCoord2f((flip) ? 0.f : 1.f, 0.f); glVertex2f( -this->imgWidth / 2, -this->imgHeight / 2); - glTexCoord2f((flip) ? 1.f : 0.f, 0.f); glVertex2f( this->imgWidth / 2, -this->imgHeight / 2); - glTexCoord2f((flip) ? 1.f : 0.f, 1.f); glVertex2f( this->imgWidth / 2, this->imgHeight / 2); - - glEnd(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + // Apply a rotation and translation matrix + glTranslatef(textOffset[0],textOffset[1], textOffset[2]); + glRotatef((GLfloat) angle * 180 / M_PI, 0,0,1); + glBegin(GL_QUADS); + + glColor3f(1.f, 1.f, 1.f); + + glTexCoord2f(flip ? 0.f : 1.f, 1.f); glVertex2f( -this->imgWidth / 2, this->imgHeight / 2); + glTexCoord2f(flip ? 0.f : 1.f, 0.f); glVertex2f( -this->imgWidth / 2, -this->imgHeight / 2); + glTexCoord2f(flip ? 1.f : 0.f, 0.f); glVertex2f( this->imgWidth / 2, -this->imgHeight / 2); + glTexCoord2f(flip ? 1.f : 0.f, 1.f); glVertex2f( this->imgWidth / 2, this->imgHeight / 2); + + glEnd(); + + // Reset the Mode + glPopMatrix(); + } - // Reset the Mode - glPopMatrix(); glPopAttrib(); state->pop(); } diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.h b/src/Mod/Sketcher/Gui/SoDatumLabel.h index 0fa276198..a57f8b37c 100644 --- a/src/Mod/Sketcher/Gui/SoDatumLabel.h +++ b/src/Mod/Sketcher/Gui/SoDatumLabel.h @@ -47,11 +47,13 @@ class SketcherGuiExport SoDatumLabel : public SoShape { public: enum Type { + ANGLE, DISTANCE, DISTANCEX, DISTANCEY, - ANGLE, - RADIUS}; + RADIUS, + SYMMETRIC + }; static void initClass(); SoDatumLabel(); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index fcdc384d2..caeb79b03 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -1428,6 +1428,7 @@ void ViewProviderSketch::updateColor(void) ConstraintType type = getSketchObject()->Constraints.getValues()[i]->Type; bool hasDatumLabel = (type == Sketcher::Angle || type == Sketcher::Radius || + type == Sketcher::Symmetric || type == Sketcher::Distance || type == Sketcher::DistanceX || type == Sketcher::DistanceY); @@ -1527,7 +1528,7 @@ void ViewProviderSketch::drawConstraintIcons() break; case Symmetric: icoType = QString::fromAscii("small/Constraint_Symmetric_sm"); - index1 = 3; + index1 = 2; break; default: continue; // Icon shouldn't be generated @@ -2252,34 +2253,18 @@ Restart: dir.normalize(); SbVec3f norm (-dir[1],dir[0],0); - // Get the datum nodes - SoSeparator *sepArrows = dynamic_cast(sep->getChild(1)); - SoCoordinate3 *arrowsCord = dynamic_cast(sepArrows->getChild(0)); + SoDatumLabel *asciiText = dynamic_cast(sep->getChild(0)); + asciiText->datumtype = SoDatumLabel::SYMMETRIC; - arrowsCord->point.setNum(10); + asciiText->pnts.setNum(2); + SbVec3f *verts = asciiText->pnts.startEditing(); - // Calculate coordinates for the first arrow - arrowsCord->point.set1Value(0,p1); - arrowsCord->point.set1Value(1,p1 + dir * 5); - arrowsCord->point.set1Value(2,p1 + dir * 3 + norm * 2); - arrowsCord->point.set1Value(3,p1 + dir * 5); - arrowsCord->point.set1Value(4,p1 + dir * 3 - norm * 2); + verts[0] = p1; + verts[1] = p2; - // Calculate coordinates for the second arrow - arrowsCord->point.set1Value(5,p2); - arrowsCord->point.set1Value(6,p2 - dir * 5); - arrowsCord->point.set1Value(7,p2 - dir * 3 + norm * 2); - arrowsCord->point.set1Value(8,p2 - dir * 5); - arrowsCord->point.set1Value(9,p2 - dir * 3 - norm * 2); + asciiText->pnts.finishEditing(); - // Use the coordinates calculated earlier to the lineset - SoLineSet *arrowsLineSet = dynamic_cast(sepArrows->getChild(1)); - arrowsLineSet->numVertices.set1Value(0,3); - arrowsLineSet->numVertices.set1Value(1,2); - arrowsLineSet->numVertices.set1Value(2,3); - arrowsLineSet->numVertices.set1Value(3,2); - - dynamic_cast(sep->getChild(2))->translation = (p1 + p2)/2; + dynamic_cast(sep->getChild(1))->translation = (p1 + p2)/2; } break; case Angle: @@ -2508,16 +2493,13 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) break; case Symmetric: { - SoSeparator *sepArrows = new SoSeparator(); - sepArrows->addChild(new SoCoordinate3()); - SoLineSet *lineSet = new SoLineSet; - sepArrows->addChild(lineSet); - sep->addChild(Material); - sep->addChild(sepArrows); // 1. + SoDatumLabel *arrows = new SoDatumLabel(); + arrows->string = ""; + arrows->textColor = ConstrDimColor; - // Add new nodes to Constraint Seperator - sep->addChild(new SoTranslation()); // 2. - sep->addChild(new SoImage()); // 3. constraint icon + sep->addChild(arrows); // 0. + sep->addChild(new SoTranslation()); // 1. + sep->addChild(new SoImage()); // 2. constraint icon edit->vConstrType.push_back((*it)->Type); } From beb4fe82b4f755d3e2f5cec14067f2a55f30acd0 Mon Sep 17 00:00:00 2001 From: logari81 Date: Tue, 17 Jul 2012 12:43:43 +0200 Subject: [PATCH 439/517] Sketcher: fix some issues with external geometries --- src/Mod/Sketcher/App/SketchObject.cpp | 42 ++++++++++++++++----------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index c5b1bc982..26d734871 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -1252,13 +1252,13 @@ void SketchObject::rebuildExternalGeometry(void) if (!projShape.IsNull()) { TopExp_Explorer xp; for (xp.Init(projShape, TopAbs_EDGE); xp.More(); xp.Next()) { - TopoDS_Edge edge = TopoDS::Edge(xp.Current()); + TopoDS_Edge projEdge = TopoDS::Edge(xp.Current()); TopLoc_Location loc(mov); - edge.Location(loc); - BRepAdaptor_Curve curve(edge); - if (curve.GetType() == GeomAbs_Line) { - gp_Pnt P1 = curve.Value(curve.FirstParameter()); - gp_Pnt P2 = curve.Value(curve.LastParameter()); + projEdge.Location(loc); + BRepAdaptor_Curve projCurve(projEdge); + if (projCurve.GetType() == GeomAbs_Line) { + gp_Pnt P1 = projCurve.Value(projCurve.FirstParameter()); + gp_Pnt P2 = projCurve.Value(projCurve.LastParameter()); Base::Vector3d p1(P1.X(),P1.Y(),P1.Z()); Base::Vector3d p2(P2.X(),P2.Y(),P2.Z()); @@ -1275,11 +1275,11 @@ void SketchObject::rebuildExternalGeometry(void) ExternalGeo.push_back(line); } } - else if (curve.GetType() == GeomAbs_Circle) { - gp_Circ c = curve.Circle(); + else if (projCurve.GetType() == GeomAbs_Circle) { + gp_Circ c = projCurve.Circle(); gp_Pnt p = c.Location(); - gp_Pnt P1 = curve.Value(curve.FirstParameter()); - gp_Pnt P2 = curve.Value(curve.LastParameter()); + gp_Pnt P1 = projCurve.Value(projCurve.FirstParameter()); + gp_Pnt P2 = projCurve.Value(projCurve.LastParameter()); if (P1.SquareDistance(P2) < Precision::Confusion()) { Part::GeomCircle* circle = new Part::GeomCircle(); @@ -1293,7 +1293,11 @@ void SketchObject::rebuildExternalGeometry(void) Part::GeomArcOfCircle* arc = new Part::GeomArcOfCircle(); arc->setRadius(c.Radius()); arc->setCenter(Base::Vector3d(p.X(),p.Y(),p.Z())); - arc->setRange(curve.FirstParameter(), curve.LastParameter()); + if (c.Axis().Direction().Z() < 0) // clockwise + arc->setRange(2*M_PI - projCurve.LastParameter(), + 2*M_PI - projCurve.FirstParameter()); + else // counter-clockwise + arc->setRange(projCurve.FirstParameter(), projCurve.LastParameter()); arc->Construction = true; ExternalGeo.push_back(arc); @@ -1314,8 +1318,13 @@ void SketchObject::rebuildExternalGeometry(void) break; case TopAbs_VERTEX: { - gp_Pnt p = BRep_Tool::Pnt(TopoDS::Vertex(refSubShape)); - Part::GeomPoint* point = new Part::GeomPoint(Base::Vector3d(p.X(),p.Y(),p.Z())); + gp_Pnt P = BRep_Tool::Pnt(TopoDS::Vertex(refSubShape)); + GeomAPI_ProjectPointOnSurf proj(P,gPlane); + P = proj.NearestPoint(); + Base::Vector3d p(P.X(),P.Y(),P.Z()); + invPlm.multVec(p,p); + + Part::GeomPoint* point = new Part::GeomPoint(p); point->Construction = true; ExternalGeo.push_back(point); } @@ -1344,7 +1353,9 @@ void SketchObject::rebuildVertexIndex(void) if (geometry.size() <= 2) return; for (std::vector< Part::Geometry * >::const_iterator it = geometry.begin(); - it != geometry.end()-2; ++it) { + it != geometry.end()-2; ++it, i++) { + if (i > imax) + i = -getExternalGeometryCount(); if ((*it)->getTypeId() == Part::GeomPoint::getClassTypeId()) { VertexId2GeoId.push_back(i); VertexId2PosId.push_back(start); @@ -1364,9 +1375,6 @@ void SketchObject::rebuildVertexIndex(void) VertexId2GeoId.push_back(i); VertexId2PosId.push_back(end); } - i++; - if (i > imax) - i = -getExternalGeometryCount(); } } From 227cb0ebc8718a99154c190b47e5f3cb92d3ee57 Mon Sep 17 00:00:00 2001 From: logari81 Date: Tue, 17 Jul 2012 12:47:08 +0200 Subject: [PATCH 440/517] Sketcher: fix an issue with autoconstraints and improve implementation --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 3 +- src/Mod/Sketcher/Gui/DrawSketchHandler.cpp | 98 +++++++++++----------- src/Mod/Sketcher/Gui/DrawSketchHandler.h | 17 ++-- 3 files changed, 58 insertions(+), 60 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 299a5229b..eb0aa74fe 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -1160,7 +1160,8 @@ public: setPositionText(onSketchPos, text); sketchgui->drawEdit(EditCurve); - if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f), CURVE)) { + if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f), + AutoConstraint::CURVE)) { renderSuggestConstraintsCursor(sugConstr2); return; } diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp index 06018b5ca..f5a308b78 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp @@ -130,7 +130,8 @@ void DrawSketchHandler::unsetCursor(void) } int DrawSketchHandler::seekAutoConstraint(std::vector &suggestedConstraints, - const Base::Vector2D& Pos, const Base::Vector2D& Dir, Type type) + const Base::Vector2D& Pos, const Base::Vector2D& Dir, + AutoConstraint::TargetType type) { suggestedConstraints.clear(); @@ -138,31 +139,31 @@ int DrawSketchHandler::seekAutoConstraint(std::vector &suggested return 0; // If Autoconstraints property is not set quit // Get Preselection + int preSelPnt = sketchgui->getPreselectPoint(); + int preSelCrv = sketchgui->getPreselectCurve(); + int GeoId = Constraint::GeoUndef; + Sketcher::PointPos PosId = Sketcher::none; + if (preSelPnt != -1) + sketchgui->getSketchObject()->getGeoVertexIndex(preSelPnt, GeoId, PosId); + else if (preSelCrv != -1) + GeoId = preSelCrv; + // Currently only considers objects in current Sketcher - if (type == VERTEX && sketchgui->getPreselectPoint() != -1) { - AutoConstraint coincident; - coincident.Type = Sketcher::Coincident; - coincident.Index = sketchgui->getPreselectPoint(); - suggestedConstraints.push_back(coincident); - } - else if (type == CURVE && sketchgui->getPreselectPoint() != -1) { - AutoConstraint pointOnObject; - pointOnObject.Type = Sketcher::PointOnObject; - pointOnObject.Index = sketchgui->getPreselectPoint(); - suggestedConstraints.push_back(pointOnObject); - } - else if (type == VERTEX && sketchgui->getPreselectCurve() != -1) { - AutoConstraint pointOnObject; - pointOnObject.Type = Sketcher::PointOnObject; - pointOnObject.Index = sketchgui->getPreselectCurve(); - suggestedConstraints.push_back(pointOnObject); - } - else if (type == CURVE && sketchgui->getPreselectCurve() != -1) { - AutoConstraint tangent; - tangent.Type = Sketcher::Tangent; - tangent.Index = sketchgui->getPreselectCurve(); - suggestedConstraints.push_back(tangent); - } + AutoConstraint constr; + constr.Type = Sketcher::None; + constr.GeoId = GeoId; + constr.PosId = PosId; + if (type == AutoConstraint::VERTEX && preSelPnt != -1) + constr.Type = Sketcher::Coincident; + else if (type == AutoConstraint::CURVE && preSelPnt != -1) + constr.Type = Sketcher::PointOnObject; + else if (type == AutoConstraint::VERTEX && preSelCrv != -1) + constr.Type = Sketcher::PointOnObject; + else if (type == AutoConstraint::CURVE && preSelCrv != -1) + constr.Type = Sketcher::Tangent; + + if (constr.Type != Sketcher::None) + suggestedConstraints.push_back(constr); if (Dir.Length() < 1) // Direction not set so return; @@ -174,22 +175,20 @@ int DrawSketchHandler::seekAutoConstraint(std::vector &suggested const double angleDev = 2; const double angleDevRad = angleDev * M_PI / 180.; + constr.Type = Sketcher::None; + constr.GeoId = Constraint::GeoUndef; + constr.PosId = Sketcher::none; double angle = std::abs(atan2(Dir.fY, Dir.fX)); - if (angle < angleDevRad || (M_PI - angle) < angleDevRad ) { + if (angle < angleDevRad || (M_PI - angle) < angleDevRad ) // Suggest horizontal constraint - AutoConstraint horConstr; - horConstr.Index = -1; - horConstr.Type = Horizontal; - suggestedConstraints.push_back(horConstr); - } - else if (std::abs(angle - M_PI_2) < angleDevRad) { + constr.Type = Sketcher::Horizontal; + else if (std::abs(angle - M_PI_2) < angleDevRad) // Suggest vertical constraint - AutoConstraint vertConstr; - vertConstr.Index = -1; - vertConstr.Type = Vertical; - suggestedConstraints.push_back(vertConstr); - } + constr.Type = Sketcher::Vertical; + if (constr.Type != Sketcher::None) + suggestedConstraints.push_back(constr); + // Find if there are tangent constraints (currently arcs and circles) // FIXME needs to consider when zooming out? const float tangDeviation = 2.; @@ -257,10 +256,10 @@ int DrawSketchHandler::seekAutoConstraint(std::vector &suggested if (tangId > getHighestCurveIndex()) // external Geometry tangId = getHighestCurveIndex() - tangId; // Suggest vertical constraint - AutoConstraint tangConstr; - tangConstr.Index = tangId; - tangConstr.Type = Tangent; - suggestedConstraints.push_back(tangConstr); + constr.Type = Tangent; + constr.GeoId = tangId; + constr.PosId = Sketcher::none; + suggestedConstraints.push_back(constr); } return suggestedConstraints.size(); @@ -285,26 +284,23 @@ void DrawSketchHandler::createAutoConstraints(const std::vector if (posId1 == Sketcher::none) continue; // If the auto constraint has a point create a coincident otherwise it is an edge on a point - Sketcher::PointPos posId2; - int geoId2; - sketchgui->getSketchObject()->getGeoVertexIndex(it->Index, geoId2, posId2); - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%i,%i,%i,%i)) " ,sketchgui->getObject()->getNameInDocument() - ,geoId1, posId1, geoId2, posId2 + ,geoId1, posId1, it->GeoId, it->PosId ); } break; case Sketcher::PointOnObject: { - int index = it->Index; + int geoId2 = it->GeoId; + Sketcher::PointPos posId2 = it->PosId; if (posId1 == Sketcher::none) { // Auto constraining an edge so swap parameters - index = geoId1; - sketchgui->getSketchObject()->getGeoVertexIndex(it->Index, geoId1, posId1); + std::swap(geoId1,geoId2); + std::swap(posId1,posId2); } Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('PointOnObject',%i,%i,%i)) " ,sketchgui->getObject()->getNameInDocument() - ,geoId1, posId1, index + ,geoId1, posId1, geoId2 ); } break; case Sketcher::Horizontal: { @@ -322,7 +318,7 @@ void DrawSketchHandler::createAutoConstraints(const std::vector case Sketcher::Tangent: { Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%i, %i)) " ,sketchgui->getObject()->getNameInDocument() - ,geoId1, it->Index + ,geoId1, it->GeoId ); } break; } diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.h b/src/Mod/Sketcher/Gui/DrawSketchHandler.h index 980ebdf75..15043e1ea 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.h @@ -47,14 +47,14 @@ class ViewProviderSketch; // A Simple data type to hold basic information for suggested constraints struct AutoConstraint { + enum TargetType + { + VERTEX, + CURVE + }; Sketcher::ConstraintType Type; - int Index; -}; - -enum Type -{ - VERTEX, - CURVE + int GeoId; + Sketcher::PointPos PosId; }; /** Handler to create new sketch geometry @@ -84,7 +84,8 @@ public: int getHighestCurveIndex(void); int seekAutoConstraint(std::vector &suggestedConstraints, - const Base::Vector2D &Pos, const Base::Vector2D &Dir, Type selType = VERTEX); + const Base::Vector2D &Pos, const Base::Vector2D &Dir, + AutoConstraint::TargetType type = AutoConstraint::VERTEX); void createAutoConstraints(const std::vector &autoConstrs, int geoId, Sketcher::PointPos pointPos=Sketcher::none); From 01cd4abbba7ea2e3d529a626fee197b818439cfe Mon Sep 17 00:00:00 2001 From: logari81 Date: Tue, 17 Jul 2012 12:49:37 +0200 Subject: [PATCH 441/517] Sketcher: rewrite ViewProviderSketch::onDelete method --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 68 ++++++++++++++------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index caeb79b03..b1d478d13 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2987,13 +2987,44 @@ Sketcher::SketchObject *ViewProviderSketch::getSketchObject(void) const bool ViewProviderSketch::onDelete(const std::vector &subList) { - //FIXME use the selection subelements instead of the Sel Sets... if (edit) { - // We must tmp. block the signaling because otherwise we empty the sets while - // looping through them which may cause a crash - this->blockConnection(true); + std::vector selection = Gui::Selection().getSelectionEx(); + const std::vector &SubNames = selection[0].getSubNames(); + + Gui::Selection().clearSelection(); + resetPreselectPoint(); + edit->PreselectCurve = -1; + edit->PreselectCross = -1; + edit->PreselectConstraint = -1; + + std::set delGeometries, delCoincidents, delConstraints; + // go through the selected subelements + for (std::vector::const_iterator it=SubNames.begin(); it != SubNames.end(); ++it) { + if (it->size() > 4 && it->substr(0,4) == "Edge") { + int GeoId = std::atoi(it->substr(4,4000).c_str()); + delGeometries.insert(GeoId); + } else if (it->size() > 12 && it->substr(0,12) == "ExternalEdge") { + int GeoId = std::atoi(it->substr(12,4000).c_str()); + GeoId = -GeoId - 3; + delGeometries.insert(GeoId); + } else if (it->size() > 6 && it->substr(0,6) == "Vertex") { + int VtId = std::atoi(it->substr(6,4000).c_str()); + int GeoId; + Sketcher::PointPos PosId; + getSketchObject()->getGeoVertexIndex(VtId, GeoId, PosId); + if (getSketchObject()->getGeometry(GeoId)->getTypeId() + == Part::GeomPoint::getClassTypeId()) + delGeometries.insert(GeoId); + else + delCoincidents.insert(VtId); + } else if (it->size() > 10 && it->substr(0,10) == "Constraint") { + int ConstrId = std::atoi(it->substr(10,4000).c_str()); + delConstraints.insert(ConstrId); + } + } + std::set::const_reverse_iterator rit; - for (rit = edit->SelConstraintSet.rbegin(); rit != edit->SelConstraintSet.rend(); rit++) { + for (rit = delConstraints.rbegin(); rit != delConstraints.rend(); rit++) { try { Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delConstraint(%i)" ,getObject()->getNameInDocument(), *rit); @@ -3003,7 +3034,17 @@ bool ViewProviderSketch::onDelete(const std::vector &subList) } } - for (rit = edit->SelCurvSet.rbegin(); rit != edit->SelCurvSet.rend(); rit++) { + for (rit = delCoincidents.rbegin(); rit != delCoincidents.rend(); rit++) { + try { + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delConstraintOnPoint(%i)" + ,getObject()->getNameInDocument(), *rit); + } + catch (const Base::Exception& e) { + Base::Console().Error("%s\n", e.what()); + } + } + + for (rit = delGeometries.rbegin(); rit != delGeometries.rend(); rit++) { try { if (*rit >= 0) Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delGeometry(%i)" @@ -3016,22 +3057,7 @@ bool ViewProviderSketch::onDelete(const std::vector &subList) Base::Console().Error("%s\n", e.what()); } } - for (rit = edit->SelPointSet.rbegin(); rit != edit->SelPointSet.rend(); rit++) { - try { - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delConstraintOnPoint(%i)" - ,getObject()->getNameInDocument(), *rit); - } - catch (const Base::Exception& e) { - Base::Console().Error("%s\n", e.what()); - } - } - this->blockConnection(false); - Gui::Selection().clearSelection(); - resetPreselectPoint(); - edit->PreselectCurve = -1; - edit->PreselectCross = -1; - edit->PreselectConstraint = -1; this->drawConstraintIcons(); this->updateColor(); // if in edit not delete the object From 14562ba5401dec5aa0b01a2195cd60ae2a92643b Mon Sep 17 00:00:00 2001 From: mrlukeparry Date: Tue, 17 Jul 2012 23:15:58 +0200 Subject: [PATCH 442/517] Sketcher: fix incorrect datum text flip for non xy-plane sketches --- src/Mod/Sketcher/Gui/SoDatumLabel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp index 36b8ed6a2..7f3d1e260 100644 --- a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp +++ b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp @@ -834,12 +834,12 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) const SbViewportRegion & vpr = SoViewportRegionElement::get(state); SoGetMatrixAction * getmatrixaction = new SoGetMatrixAction(vpr); - getmatrixaction->apply(this); + getmatrixaction->apply(action); SbMatrix transform = getmatrixaction->getMatrix(); transform.multVecMatrix(surfNorm, surfNorm); - bool flip = surfNorm.dot(z) > 0; + bool flip = surfNorm.dot(z) > FLT_EPSILON; glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); // Enable Textures From 4e9412c0ae8628059818929bfdb5e12ec8a707c2 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 17 Jul 2012 19:57:52 -0300 Subject: [PATCH 443/517] Draft: small fixes --- src/Mod/Arch/ArchAxis.py | 2 +- src/Mod/Draft/DraftTools.py | 9 +- src/Mod/Draft/WorkingPlane.py | 469 ++++++++++++++++++---------------- 3 files changed, 251 insertions(+), 229 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index 5bd132941..26de5866c 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,math,DraftVecUtils +import FreeCAD,FreeCADGui,Draft,math,DraftVecUtils,ArchCommands from FreeCAD import Vector from PyQt4 import QtCore, QtGui from pivy import coin diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 9f3b6fde0..f8eeca25e 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -333,10 +333,15 @@ class SelectPlane(DraftTool): sel = FreeCADGui.Selection.getSelectionEx() if len(sel) == 1: sel = sel[0] - if sel.HasSubObjects: + self.ui = FreeCADGui.draftToolBar + if Draft.getType(sel.Object) == "Axis": + plane.alignToEdges(sel.Object.Shape.Edges) + self.display(plane.axis) + self.finish() + return + elif sel.HasSubObjects: if len(sel.SubElementNames) == 1: if "Face" in sel.SubElementNames[0]: - self.ui = FreeCADGui.draftToolBar plane.alignToFace(sel.SubObjects[0], self.offset) self.display(plane.axis) self.finish() diff --git a/src/Mod/Draft/WorkingPlane.py b/src/Mod/Draft/WorkingPlane.py index 6c1d6066b..ddac62c5a 100644 --- a/src/Mod/Draft/WorkingPlane.py +++ b/src/Mod/Draft/WorkingPlane.py @@ -34,267 +34,284 @@ This module provides a class called plane to assist in selecting and maintaining ''' class plane: - '''A WorkPlane object''' + '''A WorkPlane object''' - def __init__(self): - # keep track of active document. Reset view when doc changes. - self.doc = None - # self.weak is true if the plane has been defined by self.setup or has been reset - self.weak = True - # u, v axes and position define plane, perpendicular axis is handy, though redundant. - self.u = Vector(1,0,0) - self.v = Vector(0,1,0) - self.axis = Vector(0,0,1) - self.position = Vector(0,0,0) - # a placeholder for a stored state - self.stored = None + def __init__(self): + # keep track of active document. Reset view when doc changes. + self.doc = None + # self.weak is true if the plane has been defined by self.setup or has been reset + self.weak = True + # u, v axes and position define plane, perpendicular axis is handy, though redundant. + self.u = Vector(1,0,0) + self.v = Vector(0,1,0) + self.axis = Vector(0,0,1) + self.position = Vector(0,0,0) + # a placeholder for a stored state + self.stored = None - def __repr__(self): - return "Workplane x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis)) + def __repr__(self): + return "Workplane x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis)) - def offsetToPoint(self, p, direction=None): - ''' - Return the signed distance from p to the plane, such - that p + offsetToPoint(p)*direction lies on the plane. - direction defaults to -plane.axis - ''' + def offsetToPoint(self, p, direction=None): + ''' + Return the signed distance from p to the plane, such + that p + offsetToPoint(p)*direction lies on the plane. + direction defaults to -plane.axis + ''' - ''' - A picture will help explain the computation: + ''' + A picture will help explain the computation: p //| / / | - / / | - / / | - / / | - -------------------- plane -----c-----x-----a-------- + / / | + / / | + / / | + -------------------- plane -----c-----x-----a-------- Here p is the specified point, c is a point (in this case plane.position) on the plane x is the intercept on the plane from p in the specified direction, and a is the perpendicular intercept on the plane (i.e. along plane.axis) - Using vertival bars to denote the length operator, + Using vertival bars to denote the length operator, |ap| = |cp| * cos(apc) = |xp| * cos(apx) so |xp| = |cp| * cos(apc) / cos(apx) = (cp . axis) / (direction . axis) - ''' - if direction == None: direction = self.axis - return direction.dot(self.position.sub(p)) + ''' + if direction == None: direction = self.axis + return direction.dot(self.position.sub(p)) - def projectPoint(self, p, direction=None): - '''project point onto plane, default direction is orthogonal''' - if not direction: - direction = self.axis - lp = self.getLocalCoords(p) - gp = self.getGlobalCoords(Vector(lp.x,lp.y,0)) - a = direction.getAngle(gp.sub(p)) - if a > math.pi/2: - direction = DraftVecUtils.neg(direction) - a = math.pi - a - ld = self.getLocalRot(direction) - gd = self.getGlobalRot(Vector(ld.x,ld.y,0)) - hyp = abs(math.tan(a) * lp.z) - return gp.add(DraftVecUtils.scaleTo(gd,hyp)) + def projectPoint(self, p, direction=None): + '''project point onto plane, default direction is orthogonal''' + if not direction: + direction = self.axis + lp = self.getLocalCoords(p) + gp = self.getGlobalCoords(Vector(lp.x,lp.y,0)) + a = direction.getAngle(gp.sub(p)) + if a > math.pi/2: + direction = DraftVecUtils.neg(direction) + a = math.pi - a + ld = self.getLocalRot(direction) + gd = self.getGlobalRot(Vector(ld.x,ld.y,0)) + hyp = abs(math.tan(a) * lp.z) + return gp.add(DraftVecUtils.scaleTo(gd,hyp)) - def projectPointOld(self, p, direction=None): - '''project point onto plane, default direction is orthogonal. Obsolete''' - if not direction: - direction = self.axis - t = Vector(direction) - #t.normalize() - a = round(t.getAngle(self.axis),DraftVecUtils.precision()) - pp = round((math.pi)/2,DraftVecUtils.precision()) - if a == pp: - return p - t.multiply(self.offsetToPoint(p, direction)) - return p.add(t) + def projectPointOld(self, p, direction=None): + '''project point onto plane, default direction is orthogonal. Obsolete''' + if not direction: + direction = self.axis + t = Vector(direction) + #t.normalize() + a = round(t.getAngle(self.axis),DraftVecUtils.precision()) + pp = round((math.pi)/2,DraftVecUtils.precision()) + if a == pp: + return p + t.multiply(self.offsetToPoint(p, direction)) + return p.add(t) - def alignToPointAndAxis(self, point, axis, offset, upvec=None): - self.doc = FreeCAD.ActiveDocument - self.axis = axis; - self.axis.normalize() - if (DraftVecUtils.equals(axis, Vector(1,0,0))): - self.u = Vector(0,1,0) - self.v = Vector(0,0,1) - elif (DraftVecUtils.equals(axis, Vector(-1,0,0))): - self.u = Vector(0,-1,0) - self.v = Vector(0,0,1) - elif upvec: - self.v = upvec - self.v.normalize() - self.u = self.v.cross(self.axis) - else: - self.v = axis.cross(Vector(1,0,0)) - self.v.normalize() - self.u = DraftVecUtils.rotate(self.v, -math.pi/2, self.axis) - offsetVector = Vector(axis); offsetVector.multiply(offset) - self.position = point.add(offsetVector) - self.weak = False - # FreeCAD.Console.PrintMessage("(position = " + str(self.position) + ")\n") - # FreeCAD.Console.PrintMessage("Current workplane: x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis))+"\n") + def alignToPointAndAxis(self, point, axis, offset, upvec=None): + self.doc = FreeCAD.ActiveDocument + self.axis = axis; + self.axis.normalize() + if (DraftVecUtils.equals(axis, Vector(1,0,0))): + self.u = Vector(0,1,0) + self.v = Vector(0,0,1) + elif (DraftVecUtils.equals(axis, Vector(-1,0,0))): + self.u = Vector(0,-1,0) + self.v = Vector(0,0,1) + elif upvec: + self.v = upvec + self.v.normalize() + self.u = self.v.cross(self.axis) + else: + self.v = axis.cross(Vector(1,0,0)) + self.v.normalize() + self.u = DraftVecUtils.rotate(self.v, -math.pi/2, self.axis) + offsetVector = Vector(axis); offsetVector.multiply(offset) + self.position = point.add(offsetVector) + self.weak = False + # FreeCAD.Console.PrintMessage("(position = " + str(self.position) + ")\n") + # FreeCAD.Console.PrintMessage("Current workplane: x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis))+"\n") - def alignToCurve(self, shape, offset): - if shape.ShapeType == 'Edge': - #??? TODO: process curve here. look at shape.edges[0].Curve - return False - elif shape.ShapeType == 'Wire': - #??? TODO: determine if edges define a plane - return False - else: - return False + def alignToCurve(self, shape, offset): + if shape.ShapeType == 'Edge': + #??? TODO: process curve here. look at shape.edges[0].Curve + return False + elif shape.ShapeType == 'Wire': + #??? TODO: determine if edges define a plane + return False + else: + return False - def alignToFace(self, shape, offset=0): - # Set face to the unique selected face, if found - if shape.ShapeType == 'Face': - #we should really use face.tangentAt to get u and v here, and implement alignToUVPoint - self.alignToPointAndAxis(shape.Faces[0].CenterOfMass, shape.Faces[0].normalAt(0,0), offset) - return True - else: - return False + def alignToEdges(self,edges): + # use a list of edges to find a plane position + if len(edges) > 2: + return False + # for axes systems, we suppose the 2 first edges are parallel + # ??? TODO: exclude other cases first + v1 = edges[0].Vertexes[-1].Point.sub(edges[0].Vertexes[0].Point) + v2 = edges[1].Vertexes[0].Point.sub(edges[0].Vertexes[0].Point) + v3 = v1.cross(v2) + v1.normalize() + v2.normalize() + v3.normalize() + print v1,v2,v3 + self.u = v1 + self.v = v2 + self.axis = v3 - def alignToSelection(self, offset): - '''If selection uniquely defines a plane, align working plane to it. Return success (bool)''' - sex = FreeCADGui.Selection.getSelectionEx(FreeCAD.ActiveDocument.Name) - if len(sex) == 0: - return False - elif len(sex) == 1: - if not sex[0].Object.isDerivedFrom("Part::Shape"): - return False - return self.alignToCurve(sex[0].Object.Shape, offset) \ - or self.alignToFace(sex[0].Object.Shape, offset) \ - or (len(sex[0].SubObjects) == 1 and self.alignToFace(sex[0].SubObjects[0], offset)) - else: - # len(sex) > 2, look for point and line, three points, etc. - return False + def alignToFace(self, shape, offset=0): + # Set face to the unique selected face, if found + if shape.ShapeType == 'Face': + #we should really use face.tangentAt to get u and v here, and implement alignToUVPoint + self.alignToPointAndAxis(shape.Faces[0].CenterOfMass, shape.Faces[0].normalAt(0,0), offset) + return True + else: + return False - def setup(self, direction, point, upvec=None): - '''If working plane is undefined, define it!''' - if self.weak: - self.alignToPointAndAxis(point, direction, 0, upvec) - self.weak = True + def alignToSelection(self, offset): + '''If selection uniquely defines a plane, align working plane to it. Return success (bool)''' + sex = FreeCADGui.Selection.getSelectionEx(FreeCAD.ActiveDocument.Name) + if len(sex) == 0: + return False + elif len(sex) == 1: + if not sex[0].Object.isDerivedFrom("Part::Shape"): + return False + return self.alignToCurve(sex[0].Object.Shape, offset) \ + or self.alignToFace(sex[0].Object.Shape, offset) \ + or (len(sex[0].SubObjects) == 1 and self.alignToFace(sex[0].SubObjects[0], offset)) + else: + # len(sex) > 2, look for point and line, three points, etc. + return False - def reset(self): - self.doc = None - self.weak = True + def setup(self, direction, point, upvec=None): + '''If working plane is undefined, define it!''' + if self.weak: + self.alignToPointAndAxis(point, direction, 0, upvec) + self.weak = True - def getRotation(self): - "returns a placement describing the working plane orientation ONLY" - m = DraftVecUtils.getPlaneRotation(self.u,self.v,self.axis) - return FreeCAD.Placement(m) + def reset(self): + self.doc = None + self.weak = True - def getPlacement(self): - "returns the placement of the working plane" - m = FreeCAD.Matrix( - self.u.x,self.v.x,self.axis.x,self.position.x, - self.u.y,self.v.y,self.axis.y,self.position.y, - self.u.z,self.v.z,self.axis.z,self.position.z, - 0.0,0.0,0.0,1.0) - return FreeCAD.Placement(m) + def getRotation(self): + "returns a placement describing the working plane orientation ONLY" + m = DraftVecUtils.getPlaneRotation(self.u,self.v,self.axis) + return FreeCAD.Placement(m) - def setFromPlacement(self,pl): - "sets the working plane from a placement (rotaton ONLY)" - rot = FreeCAD.Placement(pl).Rotation - self.u = rot.multVec(FreeCAD.Vector(1,0,0)) - self.v = rot.multVec(FreeCAD.Vector(0,1,0)) - self.axis = rot.multVec(FreeCAD.Vector(0,0,1)) + def getPlacement(self): + "returns the placement of the working plane" + m = FreeCAD.Matrix( + self.u.x,self.v.x,self.axis.x,self.position.x, + self.u.y,self.v.y,self.axis.y,self.position.y, + self.u.z,self.v.z,self.axis.z,self.position.z, + 0.0,0.0,0.0,1.0) + return FreeCAD.Placement(m) - def save(self): - "stores the current plane state" - self.stored = [self.u,self.v,self.axis,self.position,self.weak] + def setFromPlacement(self,pl): + "sets the working plane from a placement (rotaton ONLY)" + rot = FreeCAD.Placement(pl).Rotation + self.u = rot.multVec(FreeCAD.Vector(1,0,0)) + self.v = rot.multVec(FreeCAD.Vector(0,1,0)) + self.axis = rot.multVec(FreeCAD.Vector(0,0,1)) - def restore(self): - "restores a previously saved plane state, if exists" - if self.stored: - self.u = self.stored[0] - self.v = self.stored[1] - self.axis = self.stored[2] - self.position = self.stored[3] - self.weak = self.stored[4] - self.stored = None + def save(self): + "stores the current plane state" + self.stored = [self.u,self.v,self.axis,self.position,self.weak] - def getLocalCoords(self,point): - "returns the coordinates of a given point on the working plane" - pt = point.sub(self.position) - xv = DraftVecUtils.project(pt,self.u) - x = xv.Length - if xv.getAngle(self.u) > 1: - x = -x - yv = DraftVecUtils.project(pt,self.v) - y = yv.Length - if yv.getAngle(self.v) > 1: - y = -y - zv = DraftVecUtils.project(pt,self.axis) - z = zv.Length - if zv.getAngle(self.axis) > 1: - z = -z - return Vector(x,y,z) + def restore(self): + "restores a previously saved plane state, if exists" + if self.stored: + self.u = self.stored[0] + self.v = self.stored[1] + self.axis = self.stored[2] + self.position = self.stored[3] + self.weak = self.stored[4] + self.stored = None - def getGlobalCoords(self,point): - "returns the global coordinates of the given point, taken relatively to this working plane" - vx = DraftVecUtils.scale(self.u,point.x) - vy = DraftVecUtils.scale(self.v,point.y) - vz = DraftVecUtils.scale(self.axis,point.z) - pt = (vx.add(vy)).add(vz) - return pt.add(self.position) + def getLocalCoords(self,point): + "returns the coordinates of a given point on the working plane" + pt = point.sub(self.position) + xv = DraftVecUtils.project(pt,self.u) + x = xv.Length + if xv.getAngle(self.u) > 1: + x = -x + yv = DraftVecUtils.project(pt,self.v) + y = yv.Length + if yv.getAngle(self.v) > 1: + y = -y + zv = DraftVecUtils.project(pt,self.axis) + z = zv.Length + if zv.getAngle(self.axis) > 1: + z = -z + return Vector(x,y,z) - def getLocalRot(self,point): - "Same as getLocalCoords, but discards the WP position" - xv = DraftVecUtils.project(point,self.u) - x = xv.Length - if xv.getAngle(self.u) > 1: - x = -x - yv = DraftVecUtils.project(point,self.v) - y = yv.Length - if yv.getAngle(self.v) > 1: - y = -y - zv = DraftVecUtils.project(point,self.axis) - z = zv.Length - if zv.getAngle(self.axis) > 1: - z = -z - return Vector(x,y,z) + def getGlobalCoords(self,point): + "returns the global coordinates of the given point, taken relatively to this working plane" + vx = DraftVecUtils.scale(self.u,point.x) + vy = DraftVecUtils.scale(self.v,point.y) + vz = DraftVecUtils.scale(self.axis,point.z) + pt = (vx.add(vy)).add(vz) + return pt.add(self.position) - def getGlobalRot(self,point): - "Same as getGlobalCoords, but discards the WP position" - vx = DraftVecUtils.scale(self.u,point.x) - vy = DraftVecUtils.scale(self.v,point.y) - vz = DraftVecUtils.scale(self.axis,point.z) - pt = (vx.add(vy)).add(vz) - return pt + def getLocalRot(self,point): + "Same as getLocalCoords, but discards the WP position" + xv = DraftVecUtils.project(point,self.u) + x = xv.Length + if xv.getAngle(self.u) > 1: + x = -x + yv = DraftVecUtils.project(point,self.v) + y = yv.Length + if yv.getAngle(self.v) > 1: + y = -y + zv = DraftVecUtils.project(point,self.axis) + z = zv.Length + if zv.getAngle(self.axis) > 1: + z = -z + return Vector(x,y,z) + + def getGlobalRot(self,point): + "Same as getGlobalCoords, but discards the WP position" + vx = DraftVecUtils.scale(self.u,point.x) + vy = DraftVecUtils.scale(self.v,point.y) + vz = DraftVecUtils.scale(self.axis,point.z) + pt = (vx.add(vy)).add(vz) + return pt - def getClosestAxis(self,point): - "returns which of the workingplane axes is closest from the given vector" - ax = point.getAngle(self.u) - ay = point.getAngle(self.v) - az = point.getAngle(self.axis) - bx = point.getAngle(DraftVecUtils.neg(self.u)) - by = point.getAngle(DraftVecUtils.neg(self.v)) - bz = point.getAngle(DraftVecUtils.neg(self.axis)) - b = min(ax,ay,az,bx,by,bz) - if b in [ax,bx]: - return "x" - elif b in [ay,by]: - return "y" - elif b in [az,bz]: - return "z" - else: - return None + def getClosestAxis(self,point): + "returns which of the workingplane axes is closest from the given vector" + ax = point.getAngle(self.u) + ay = point.getAngle(self.v) + az = point.getAngle(self.axis) + bx = point.getAngle(DraftVecUtils.neg(self.u)) + by = point.getAngle(DraftVecUtils.neg(self.v)) + bz = point.getAngle(DraftVecUtils.neg(self.axis)) + b = min(ax,ay,az,bx,by,bz) + if b in [ax,bx]: + return "x" + elif b in [ay,by]: + return "y" + elif b in [az,bz]: + return "z" + else: + return None def getPlacementFromPoints(points): - "returns a placement from a list of 3 or 4 vectors" - pl = plane() - try: - pl.position = points[0] - pl.u = (points[1].sub(points[0]).normalize()) - pl.v = (points[2].sub(points[0]).normalize()) - if len(points) == 4: - pl.axis = (points[3].sub(points[0]).normalize()) - else: - pl.axis = ((pl.u).cross(pl.v)).normalize() - except: - pass - p = pl.getPlacement() - del pl - return p + "returns a placement from a list of 3 or 4 vectors" + pl = plane() + try: + pl.position = points[0] + pl.u = (points[1].sub(points[0]).normalize()) + pl.v = (points[2].sub(points[0]).normalize()) + if len(points) == 4: + pl.axis = (points[3].sub(points[0]).normalize()) + else: + pl.axis = ((pl.u).cross(pl.v)).normalize() + except: + pass + p = pl.getPlacement() + del pl + return p From 9c974969f5ea99178996bd16849d53bb7dc4b852 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 Jul 2012 10:40:36 +0200 Subject: [PATCH 444/517] Fix possible crash in various view providers, fix formatting of Coin debug output, fix warning and compiler errors with Coin2 in SoDatumLabel --- src/Gui/Application.cpp | 6 ++--- .../PartDesign/Gui/ViewProviderChamfer.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderFillet.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderGroove.cpp | 4 ++-- src/Mod/PartDesign/Gui/ViewProviderPad.cpp | 4 ++-- .../PartDesign/Gui/ViewProviderRevolution.cpp | 4 ++-- src/Mod/Sketcher/Gui/SoDatumLabel.cpp | 24 ++++++++++--------- 7 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 5fdc7ed29..b7b8a8ea3 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -1366,13 +1366,13 @@ void messageHandlerCoin(const SoError * error, void * userdata) switch (dbg->getSeverity()) { case SoDebugError::INFO: - Base::Console().Message( msg ); + Base::Console().Message("%s\n", msg); break; case SoDebugError::WARNING: - Base::Console().Warning( msg ); + Base::Console().Warning("%s\n", msg); break; default: // error - Base::Console().Error( msg ); + Base::Console().Error("%s\n", msg); break; } #ifdef FC_OS_WIN32 diff --git a/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp b/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp index 0b8b0c289..bceabe64b 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderChamfer.cpp @@ -115,7 +115,7 @@ bool ViewProviderChamfer::onDelete(const std::vector &) { // get the support and Sketch PartDesign::Chamfer* pcChamfer = static_cast(getObject()); - App::DocumentObject *pcSupport; + App::DocumentObject *pcSupport = 0; if (pcChamfer->Base.getValue()){ pcSupport = static_cast(pcChamfer->Base.getValue()); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp b/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp index cd427c3c0..0e2b26c06 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderFillet.cpp @@ -115,7 +115,7 @@ bool ViewProviderFillet::onDelete(const std::vector &) { // get the support and Sketch PartDesign::Fillet* pcFillet = static_cast(getObject()); - App::DocumentObject *pcSupport; + App::DocumentObject *pcSupport = 0; if (pcFillet->Base.getValue()){ pcSupport = static_cast(pcFillet->Base.getValue()); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp b/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp index af7a24854..7b46d7681 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderGroove.cpp @@ -122,8 +122,8 @@ bool ViewProviderGroove::onDelete(const std::vector &) { // get the support and Sketch PartDesign::Groove* pcGroove = static_cast(getObject()); - Sketcher::SketchObject *pcSketch; - App::DocumentObject *pcSupport; + Sketcher::SketchObject *pcSketch = 0; + App::DocumentObject *pcSupport = 0; if (pcGroove->Sketch.getValue()){ pcSketch = static_cast(pcGroove->Sketch.getValue()); pcSupport = pcSketch->Support.getValue(); diff --git a/src/Mod/PartDesign/Gui/ViewProviderPad.cpp b/src/Mod/PartDesign/Gui/ViewProviderPad.cpp index 1bb696ab7..e73e3dc5a 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPad.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderPad.cpp @@ -121,8 +121,8 @@ bool ViewProviderPad::onDelete(const std::vector &) { // get the support and Sketch PartDesign::Pad* pcPad = static_cast(getObject()); - Sketcher::SketchObject *pcSketch; - App::DocumentObject *pcSupport; + Sketcher::SketchObject *pcSketch = 0; + App::DocumentObject *pcSupport = 0; if (pcPad->Sketch.getValue()){ pcSketch = static_cast(pcPad->Sketch.getValue()); pcSupport = pcSketch->Support.getValue(); diff --git a/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp b/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp index 016764b5a..60b81c095 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderRevolution.cpp @@ -122,8 +122,8 @@ bool ViewProviderRevolution::onDelete(const std::vector &) { // get the support and Sketch PartDesign::Revolution* pcRevolution = static_cast(getObject()); - Sketcher::SketchObject *pcSketch; - App::DocumentObject *pcSupport; + Sketcher::SketchObject *pcSketch = 0; + App::DocumentObject *pcSupport = 0; if (pcRevolution->Sketch.getValue()){ pcSketch = static_cast(pcRevolution->Sketch.getValue()); pcSupport = pcSketch->Support.getValue(); diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp index 7f3d1e260..45de2331c 100644 --- a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp +++ b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp @@ -136,10 +136,12 @@ void SoDatumLabel::drawImage() void SoDatumLabel::computeBBox(SoAction *action, SbBox3f &box, SbVec3f ¢er) { - // Set the bounding box using stored parameters - box.setBounds(this->bbox.getMin(),this->bbox.getMax() ); - SbVec3f bbcenter = this->bbox.getCenter(); - center.setValue(bbcenter[0], bbcenter[1], bbcenter[2]); + if (!this->bbox.isEmpty()) { + // Set the bounding box using stored parameters + box.setBounds(this->bbox.getMin(),this->bbox.getMax() ); + SbVec3f bbcenter = this->bbox.getCenter(); + center.setValue(bbcenter[0], bbcenter[1], bbcenter[2]); + } } void SoDatumLabel::generatePrimitives(SoAction * action) @@ -344,14 +346,14 @@ void SoDatumLabel::generatePrimitives(SoAction * action) // Calculate coordinates for the first arrow SbVec3f ar0, ar1, ar2; ar0 = p1 + dir * 5 * margin; - ar1 = ar0 - dir * 0.866 * 2 * margin; // Base Point of Arrow + ar1 = ar0 - dir * 0.866f * 2 * margin; // Base Point of Arrow ar2 = ar1 + norm * margin; // Triangular corners ar1 -= norm * margin; // Calculate coordinates for the second arrow SbVec3f ar3, ar4, ar5; ar3 = p2 - dir * 5 * margin; - ar4 = ar3 + dir * 0.866 * 2 * margin; // Base Point of 2nd Arrow + ar4 = ar3 + dir * 0.866f * 2 * margin; // Base Point of 2nd Arrow ar5 = ar4 + norm * margin; // Triangular corners ar4 -= norm * margin; @@ -547,11 +549,11 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) glVertex2f(par4[0], par4[1]); glEnd(); - SbVec3f ar1 = par1 + ((flipTriang) ? -1 : 1) * dir * 0.866 * 2 * margin; + SbVec3f ar1 = par1 + ((flipTriang) ? -1 : 1) * dir * 0.866f * 2 * margin; SbVec3f ar2 = ar1 + norm * margin; ar1 -= norm * margin; - SbVec3f ar3 = par4 - ((flipTriang) ? -1 : 1) * dir * 0.866 * 2 * margin; + SbVec3f ar3 = par4 - ((flipTriang) ? -1 : 1) * dir * 0.866f * 2 * margin; SbVec3f ar4 = ar3 + norm * margin ; ar3 -= norm * margin; @@ -614,7 +616,7 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) // Create the arrowhead SbVec3f ar0 = p2; - SbVec3f ar1 = p2 - dir * 0.866 * 2 * margin; + SbVec3f ar1 = p2 - dir * 0.866f * 2 * margin; SbVec3f ar2 = ar1 + norm * margin; ar1 -= norm * margin; @@ -778,7 +780,7 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) // Calculate coordinates for the first arrow SbVec3f ar0, ar1, ar2; ar0 = p1 + dir * 4 * margin; // Tip of Arrow - ar1 = ar0 - dir * 0.866 * 2 * margin; + ar1 = ar0 - dir * 0.866f * 2 * margin; ar2 = ar1 + norm * margin; ar1 -= norm * margin; @@ -794,7 +796,7 @@ void SoDatumLabel::GLRender(SoGLRenderAction * action) // Calculate coordinates for the second arrow SbVec3f ar3, ar4, ar5; ar3 = p2 - dir * 4 * margin; // Tip of 2nd Arrow - ar4 = ar3 + dir * 0.866 * 2 * margin; + ar4 = ar3 + dir * 0.866f * 2 * margin; ar5 = ar4 + norm * margin; ar4 -= norm * margin; From bd03134d4d6a4f971494a8ab23850371eaa1f708 Mon Sep 17 00:00:00 2001 From: logari81 Date: Wed, 18 Jul 2012 11:59:20 +0200 Subject: [PATCH 445/517] Sketcher: on geometry delete, transfer constraints to equivalent geometries if possible --- src/Mod/Sketcher/App/SketchObject.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 26d734871..5be36646e 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -320,6 +320,18 @@ int SketchObject::delGeometry(int GeoId) std::vector< Part::Geometry * > newVals(vals); newVals.erase(newVals.begin()+GeoId); + // Find coincident points to replace the points of the deleted geometry + std::vector GeoIdList; + std::vector PosIdList; + for (PointPos PosId = start; PosId != mid; ) { + getCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList); + if (GeoIdList.size() > 1) { + delConstraintOnPoint(GeoId, PosId, true /* only coincidence */); + transferConstraints(GeoIdList[0], PosIdList[0], GeoIdList[1], PosIdList[1]); + } + PosId = (PosId == start) ? end : mid; // loop through [start, end, mid] + } + const std::vector< Constraint * > &constraints = this->Constraints.getValues(); std::vector< Constraint * > newConstraints(0); for (std::vector::const_iterator it = constraints.begin(); @@ -446,7 +458,7 @@ int SketchObject::delConstraintOnPoint(int GeoId, PointPos PosId, bool onlyCoinc if ((*it)->Type == Sketcher::Distance || (*it)->Type == Sketcher::DistanceX || (*it)->Type == Sketcher::DistanceY) { if ((*it)->First == GeoId && (*it)->FirstPos == none && - (PosId == start || PosId ==end)) { + (PosId == start || PosId == end)) { // remove the constraint even if it is not directly associated // with the given point continue; // skip this constraint @@ -508,12 +520,14 @@ int SketchObject::transferConstraints(int fromGeoId, PointPos fromPosId, int toG const std::vector &vals = this->Constraints.getValues(); std::vector newVals(vals); for (int i=0; i < int(newVals.size()); i++) { - if (vals[i]->First == fromGeoId && vals[i]->FirstPos == fromPosId) { + if (vals[i]->First == fromGeoId && vals[i]->FirstPos == fromPosId && + !(vals[i]->Second == toGeoId && vals[i]->SecondPos == toPosId)) { Constraint *constNew = newVals[i]->clone(); constNew->First = toGeoId; constNew->FirstPos = toPosId; newVals[i] = constNew; - } else if (vals[i]->Second == fromGeoId && vals[i]->SecondPos == fromPosId) { + } else if (vals[i]->Second == fromGeoId && vals[i]->SecondPos == fromPosId && + !(vals[i]->First == toGeoId && vals[i]->FirstPos == toPosId)) { Constraint *constNew = newVals[i]->clone(); constNew->Second = toGeoId; constNew->SecondPos = toPosId; From 0016d6f2f8d7c3f507bb1c2e553b60847c136950 Mon Sep 17 00:00:00 2001 From: logari81 Date: Wed, 18 Jul 2012 13:23:38 +0200 Subject: [PATCH 446/517] Sketcher: fix crashes on geometry deletion in sketches with symmetry constraints --- src/Mod/Sketcher/App/SketchObject.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 5be36646e..82813a607 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -336,12 +336,14 @@ int SketchObject::delGeometry(int GeoId) std::vector< Constraint * > newConstraints(0); for (std::vector::const_iterator it = constraints.begin(); it != constraints.end(); ++it) { - if ((*it)->First != GeoId && (*it)->Second != GeoId) { + if ((*it)->First != GeoId && (*it)->Second != GeoId && (*it)->Third != GeoId) { Constraint *copiedConstr = (*it)->clone(); if (copiedConstr->First > GeoId) copiedConstr->First -= 1; if (copiedConstr->Second > GeoId) copiedConstr->Second -= 1; + if (copiedConstr->Third > GeoId) + copiedConstr->Third -= 1; newConstraints.push_back(copiedConstr); } } From fd637f24220768415c1f978411688f88f9ecaf44 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 18 Jul 2012 14:33:14 +0200 Subject: [PATCH 447/517] Make sure that ViewProviderSketch::unsetEdit exits normally --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index b1d478d13..9605f3997 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2830,8 +2830,12 @@ void ViewProviderSketch::unsetEdit(int ModNum) this->show(); - // and update the sketch - getSketchObject()->getDocument()->recompute(); + try { + // and update the sketch + getSketchObject()->getDocument()->recompute(); + } + catch (...) { + } // clear the selection and set the new/edited sketch(convenience) Gui::Selection().clearSelection(); From b3938ad04582053ea9c727129e12f247cbd9cca4 Mon Sep 17 00:00:00 2001 From: logari81 Date: Wed, 18 Jul 2012 16:26:24 +0200 Subject: [PATCH 448/517] Sketcher: simplify positioning of constraint icons --- src/Mod/Sketcher/Gui/CommandConstraints.cpp | 10 +- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 148 +++++++------------- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 5 +- 3 files changed, 56 insertions(+), 107 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandConstraints.cpp b/src/Mod/Sketcher/Gui/CommandConstraints.cpp index fd795eb93..1eaa0cd99 100644 --- a/src/Mod/Sketcher/Gui/CommandConstraints.cpp +++ b/src/Mod/Sketcher/Gui/CommandConstraints.cpp @@ -1636,15 +1636,7 @@ void CmdSketcherConstrainAngle::activated(int iMsg) const std::vector &ConStr = dynamic_cast(selection[0].getObject())->Constraints.getValues(); Sketcher::Constraint *constr = ConStr[ConStr.size() -1]; - float sf = 1.f; - Gui::Document *doc = getActiveGuiDocument(); - if (doc && doc->getInEdit() && doc->getInEdit()->isDerivedFrom(SketcherGui::ViewProviderSketch::getClassTypeId())) { - SketcherGui::ViewProviderSketch *vp = dynamic_cast(doc->getInEdit()); - sf = vp->getScaleFactor(); - - constr->LabelDistance = 2. * sf; - vp->draw(); // Redraw - } + updateDatumDistance(getActiveGuiDocument(), constr); //updateActive(); getSelection().clearSelection(); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 9605f3997..981fee2c9 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -1005,55 +1005,55 @@ void ViewProviderSketch::moveConstraint(int constNum, const Base::Vector2D &toPo draw(true); } -bool ViewProviderSketch::isConstraintAtPosition(const Base::Vector3d &constrPos, const SoNode *constraint) +Base::Vector3d ViewProviderSketch::seekConstraintPosition(const Base::Vector3d &origPos, + const Base::Vector3d &norm, + const Base::Vector3d &dir, float step, + const SoNode *constraint) { assert(edit); Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView(); Gui::View3DInventorViewer *viewer = static_cast(mdi)->getViewer(); - SoRayPickAction rp(viewer->getViewportRegion()); - rp.setRadius(0.1f); - rp.setPickAll(true); - rp.setRay(SbVec3f(constrPos.x, constrPos.y, -1.f), SbVec3f(0, 0, 1) ); - //problem - rp.apply(edit->constrGroup); // We could narrow it down to just the SoGroup containing the constraints - // returns a copy of the point - SoPickedPoint *pp = rp.getPickedPoint(); - const SoPickedPointList ppl = rp.getPickedPointList(); + float scaled_step = step * getScaleFactor(); - if(ppl.getLength() > 1) - return true; - if (pp) { - SoPath *path = pp->getPath(); - int length = path->getLength(); - SoNode *tailFather1 = path->getNode(length-2); - SoNode *tailFather2 = path->getNode(length-3); - - // checking if a constraint is the same as the one selected - if (tailFather1 == constraint || tailFather2 == constraint) { - return false; - } else { - return true; - } - } else { - return false; - } -} - -Base::Vector3d ViewProviderSketch::seekConstraintPosition(const Base::Vector3d &suggestedPos, - const Base::Vector3d &dir, float step, - const SoNode *constraint) -{ int multiplier = 0; - Base::Vector3d freePos; - do { + Base::Vector3d relPos, freePos; + bool isConstraintAtPosition = true; + while (isConstraintAtPosition && multiplier < 10) { // Calculate new position of constraint - freePos = suggestedPos + (dir * (multiplier * step)); - multiplier++; // Increment the multiplier + relPos = norm * 0.5f + dir * multiplier; + freePos = origPos + relPos * scaled_step; + + rp.setRadius(0.1f); + rp.setPickAll(true); + rp.setRay(SbVec3f(freePos.x, freePos.y, -1.f), SbVec3f(0, 0, 1) ); + //problem + rp.apply(edit->constrGroup); // We could narrow it down to just the SoGroup containing the constraints + + // returns a copy of the point + SoPickedPoint *pp = rp.getPickedPoint(); + const SoPickedPointList ppl = rp.getPickedPointList(); + + if (ppl.getLength() <= 1 && pp) { + SoPath *path = pp->getPath(); + int length = path->getLength(); + SoNode *tailFather1 = path->getNode(length-2); + SoNode *tailFather2 = path->getNode(length-3); + + // checking if a constraint is the same as the one selected + if (tailFather1 == constraint || tailFather2 == constraint) + isConstraintAtPosition = false; + } else + isConstraintAtPosition = false; + + multiplier *= -1; // search in both sides + if (multiplier >= 0) + multiplier++; // Increment the multiplier } - while (isConstraintAtPosition(freePos, constraint)); - return freePos; + if (multiplier == 10) + relPos = norm * 0.5f; // no free position found + return relPos * step; } bool ViewProviderSketch::isSelectable(void) const @@ -1842,19 +1842,12 @@ Restart: Base::Vector3d dir = (lineSeg->getEndPoint()-lineSeg->getStartPoint()).Normalize(); Base::Vector3d norm(-dir.y,dir.x,0); - float scale = dynamic_cast(sep->getChild(1))->getScaleFactor(); - Base::Vector3d constrPos = midpos + (norm * 2.5 * scale); - - constrPos = seekConstraintPosition(constrPos, dir, 2.5 * scale, edit->constrGroup->getChild(i)); - - // Translate the Icon based on calculated position - Base::Vector3d relPos = constrPos - midpos; // Relative Position of Icons to Midpoint - relPos = relPos / scale; // Must Divide by Scale Factor + Base::Vector3d relpos = seekConstraintPosition(midpos, norm, dir, 2.5, edit->constrGroup->getChild(i)); dynamic_cast(sep->getChild(1))->abPos = SbVec3f(midpos.x, midpos.y, zConstr); //Absolute Reference //Reference Position that is scaled according to zoom - dynamic_cast(sep->getChild(1))->translation = SbVec3f(relPos.x, relPos.y, 0); + dynamic_cast(sep->getChild(1))->translation = SbVec3f(relpos.x, relpos.y, 0); } break; @@ -1921,25 +1914,16 @@ Restart: dir1 = Base::Vector3d(1,0,0); } - // Get Current Scale Factor - float scale = dynamic_cast(sep->getChild(1))->getScaleFactor(); - - Base::Vector3d constrPos1 = midpos1 + (norm1 * 2.5 * scale); - constrPos1 = seekConstraintPosition(constrPos1, dir1, scale * 2.5, edit->constrGroup->getChild(i)); - - // Translate the Icon based on calculated position - Base::Vector3d relPos1 = (constrPos1 - midpos1) / scale ; // Relative Position of Icons to Midpoint1 + Base::Vector3d relpos1 = seekConstraintPosition(midpos1, norm1, dir1, 2.5, edit->constrGroup->getChild(i)); dynamic_cast(sep->getChild(1))->abPos = SbVec3f(midpos1.x, midpos1.y, zConstr); - dynamic_cast(sep->getChild(1))->translation = SbVec3f(relPos1.x, relPos1.y, 0); + dynamic_cast(sep->getChild(1))->translation = SbVec3f(relpos1.x, relpos1.y, 0); if (Constr->FirstPos == Sketcher::none) { - Base::Vector3d constrPos2 = midpos2 + (norm2 * 2.5 * scale); - constrPos2 = seekConstraintPosition(constrPos2, dir2, 2.5 * scale, edit->constrGroup->getChild(i)); + Base::Vector3d relpos2 = seekConstraintPosition(midpos2, norm2, dir2, 2.5, edit->constrGroup->getChild(i)); - Base::Vector3d relPos2 = (constrPos2 - midpos2) / scale ; // Relative Position of Icons to Midpoint2 Base::Vector3d secondPos = midpos2 - midpos1; dynamic_cast(sep->getChild(3))->abPos = SbVec3f(secondPos.x, secondPos.y, zConstr); - dynamic_cast(sep->getChild(3))->translation = SbVec3f(relPos2.x -relPos1.x, relPos2.y -relPos1.y, 0); + dynamic_cast(sep->getChild(3))->translation = SbVec3f(relpos2.x -relpos1.x, relpos2.y -relpos1.y, 0); } } @@ -2012,32 +1996,19 @@ Restart: norm2 = Base::Vector3d(-dir2.y,dir2.x,0.); } - // Get Current Scale Factor - float scale = dynamic_cast(sep->getChild(1))->getScaleFactor(); - - Base::Vector3d constrPos1 = midpos1 + (norm1 * 2.5 * scale); - constrPos1 = seekConstraintPosition(constrPos1, dir1, scale * 2.5, edit->constrGroup->getChild(i)); - - Base::Vector3d constrPos2 = midpos2 + (norm2 * 2.5 * scale); - constrPos2 = seekConstraintPosition(constrPos2, dir2, 2.5 * scale, edit->constrGroup->getChild(i)); - - // Translate the Icon based on calculated position - Base::Vector3d relPos1 = constrPos1 - midpos1 ; // Relative Position of Icons to Midpoint1 - Base::Vector3d relPos2 = constrPos2 - midpos2 ; // Relative Position of Icons to Midpoint2 - - relPos1 = relPos1 / scale; - relPos2 = relPos2 / scale; + Base::Vector3d relpos1 = seekConstraintPosition(midpos1, norm1, dir1, 2.5, edit->constrGroup->getChild(i)); + Base::Vector3d relpos2 = seekConstraintPosition(midpos2, norm2, dir2, 2.5, edit->constrGroup->getChild(i)); dynamic_cast(sep->getChild(1))->abPos = SbVec3f(midpos1.x, midpos1.y, zConstr); //Absolute Reference //Reference Position that is scaled according to zoom - dynamic_cast(sep->getChild(1))->translation = SbVec3f(relPos1.x, relPos1.y, 0); + dynamic_cast(sep->getChild(1))->translation = SbVec3f(relpos1.x, relpos1.y, 0); Base::Vector3d secondPos = midpos2 - midpos1; dynamic_cast(sep->getChild(3))->abPos = SbVec3f(secondPos.x, secondPos.y, zConstr); //Absolute Reference //Reference Position that is scaled according to zoom - dynamic_cast(sep->getChild(3))->translation = SbVec3f(relPos2.x -relPos1.x, relPos2.y -relPos1.y, 0); + dynamic_cast(sep->getChild(3))->translation = SbVec3f(relpos2.x - relpos1.x, relpos2.y -relpos1.y, 0); } break; @@ -2148,32 +2119,19 @@ Restart: Base::Vector3d norm1 = Base::Vector3d(-dir1.y,dir1.x,0.f); Base::Vector3d norm2 = Base::Vector3d(-dir2.y,dir2.x,0.f); - // Get Current Scale Factor - float scale = dynamic_cast(sep->getChild(1))->getScaleFactor(); - - Base::Vector3d constrPos1 = midpos1 + (norm1 * 2.5 * scale); - constrPos1 = seekConstraintPosition(constrPos1, dir1, 2.5 * scale, edit->constrGroup->getChild(i)); - - Base::Vector3d constrPos2 = midpos2 + (norm2 * 2.5 * scale); - constrPos2 = seekConstraintPosition(constrPos2, dir2, 2.5 * scale, edit->constrGroup->getChild(i)); - - // Translate the Icon based on calculated position - Base::Vector3d relPos1 = constrPos1 - midpos1 ; // Relative Position of Icons to Midpoint1 - Base::Vector3d relPos2 = constrPos2 - midpos2 ; // Relative Position of Icons to Midpoint2 - - relPos1 = relPos1 / scale; - relPos2 = relPos2 / scale; + Base::Vector3d relpos1 = seekConstraintPosition(midpos1, norm1, dir1, 2.5, edit->constrGroup->getChild(i)); + Base::Vector3d relpos2 = seekConstraintPosition(midpos2, norm2, dir2, 2.5, edit->constrGroup->getChild(i)); dynamic_cast(sep->getChild(1))->abPos = SbVec3f(midpos1.x, midpos1.y, zConstr); //Absolute Reference //Reference Position that is scaled according to zoom - dynamic_cast(sep->getChild(1))->translation = SbVec3f(relPos1.x, relPos1.y, 0); + dynamic_cast(sep->getChild(1))->translation = SbVec3f(relpos1.x, relpos1.y, 0); Base::Vector3d secondPos = midpos2 - midpos1; dynamic_cast(sep->getChild(3))->abPos = SbVec3f(secondPos.x, secondPos.y, zConstr); //Absolute Reference //Reference Position that is scaled according to zoom - dynamic_cast(sep->getChild(3))->translation = SbVec3f(relPos2.x -relPos1.x, relPos2.y -relPos1.y, 0); + dynamic_cast(sep->getChild(3))->translation = SbVec3f(relpos2.x -relpos1.x, relpos2.y -relpos1.y, 0); break; } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index b29f2c377..9b05d69cc 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -137,10 +137,9 @@ public: /// moves a selected constraint void moveConstraint(int constNum, const Base::Vector2D &toPos); - /// checks if there is a constraint object at position vector - bool isConstraintAtPosition(const Base::Vector3d &constrPos, const SoNode *constraint); /// finds a free position for placing a constraint icon - Base::Vector3d seekConstraintPosition(const Base::Vector3d &suggestedPos, + Base::Vector3d seekConstraintPosition(const Base::Vector3d &origPos, + const Base::Vector3d &norm, const Base::Vector3d &dir, float step, const SoNode *constraint); From 9d1cd19afbad5a202967e25baca09d049601b86a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 18 Jul 2012 11:27:31 -0300 Subject: [PATCH 449/517] Arch: improved OBJ exporter --- src/Mod/Arch/importOBJ.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Mod/Arch/importOBJ.py b/src/Mod/Arch/importOBJ.py index 4622e1adf..1e2f7373e 100644 --- a/src/Mod/Arch/importOBJ.py +++ b/src/Mod/Arch/importOBJ.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD, DraftGeomUtils +import FreeCAD, DraftGeomUtils, Part if open.__module__ == '__builtin__': pythonopen = open @@ -35,20 +35,27 @@ def findVert(aVertex,aList): def getIndices(shape,offset): "returns a list with 2 lists: vertices and face indexes, offsetted with the given amount" vlist = [] + elist = [] flist = [] for v in shape.Vertexes: - vlist.append(" "+str(round(v.X,4))+" "+str(round(v.Z,4))+" "+str(round(v.Y,4))) + vlist.append(" "+str(round(v.X,4))+" "+str(round(v.Y,4))+" "+str(round(v.Z,4))) + if not shape.Faces: + for e in shape.Edges: + if isinstance(e,Part.Line): + ei = " " + str(findVert(e.Vertexes[0],shape.Vertexes)+offset) + ei += " " + str(findVert(e.Vertexes[-1],shape.Vertexes)+offset) + elist.append(ei) for f in shape.Faces: fi = "" # OCC vertices are unsorted. We need to sort in the right order... edges = DraftGeomUtils.sortEdges(f.Wire.Edges) - print edges + #print edges for e in edges: - print e.Vertexes[0].Point,e.Vertexes[1].Point + #print e.Vertexes[0].Point,e.Vertexes[1].Point v = e.Vertexes[0] fi+=" "+str(findVert(v,shape.Vertexes)+offset) flist.append(fi) - return vlist,flist + return vlist,elist,flist def export(exportList,filename): "called when freecad exports a file" @@ -59,13 +66,16 @@ def export(exportList,filename): offset = 1 for obj in exportList: if obj.isDerivedFrom("Part::Feature"): - vlist,flist = getIndices(obj.Shape,offset) - offset += len(vlist) - outfile.write("o " + obj.Name + "\n") - for v in vlist: - outfile.write("v" + v + "\n") - for f in flist: - outfile.write("f" + f + "\n") + if obj.ViewObject.isVisible(): + vlist,elist,flist = getIndices(obj.Shape,offset) + offset += len(vlist) + outfile.write("o " + obj.Name + "\n") + for v in vlist: + outfile.write("v" + v + "\n") + for e in elist: + outfile.write("l" + e + "\n") + for f in flist: + outfile.write("f" + f + "\n") outfile.close() FreeCAD.Console.PrintMessage("successfully written "+filename) From 7b0d0aa2f7c01f37a66e552118cba3873138faad Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 18 Jul 2012 15:04:56 -0300 Subject: [PATCH 450/517] Arch: Minor fixes --- src/Mod/Arch/InitGui.py | 6 +++-- src/Mod/Arch/importOBJ.py | 44 ++++++++++++++++++++++++------------- src/Mod/Draft/DraftTools.py | 13 ++++++++--- src/Mod/Draft/InitGui.py | 2 +- 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 523fc2352..69838792c 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -57,7 +57,7 @@ class ArchWorkbench(Workbench): ToolTip = "Architecture workbench" def Initialize(self): - import DraftTools,DraftGui,Arch_rc,Arch + import DraftTools,DraftGui,Arch_rc,Arch,Draft_rc # arch tools self.archtools = ["Arch_Wall","Arch_Structure", @@ -91,6 +91,8 @@ class ArchWorkbench(Workbench): FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") + FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui","Draft") + FreeCADGui.addPreferencePage(":/ui/userprefs-import.ui","Draft") Log ('Loading Arch module... done\n') def Activated(self): @@ -106,7 +108,7 @@ class ArchWorkbench(Workbench): Msg("Arch workbench deactivated\n") def ContextMenu(self, recipient): - self.appendContextMenu("Display tools",self.draftcontexttools) + self.appendContextMenu("Draft context tools",self.draftcontexttools) def GetClassName(self): return "Gui::PythonWorkbench" diff --git a/src/Mod/Arch/importOBJ.py b/src/Mod/Arch/importOBJ.py index 1e2f7373e..f947afbcd 100644 --- a/src/Mod/Arch/importOBJ.py +++ b/src/Mod/Arch/importOBJ.py @@ -21,7 +21,9 @@ #* * #*************************************************************************** -import FreeCAD, DraftGeomUtils, Part +import FreeCAD, DraftGeomUtils, Part, Draft + +p = Draft.precision() if open.__module__ == '__builtin__': pythonopen = open @@ -29,8 +31,10 @@ if open.__module__ == '__builtin__': def findVert(aVertex,aList): "finds aVertex in aList, returns index" for i in range(len(aList)): - if (aVertex.X == aList[i].X) and (aVertex.Y == aList[i].Y) and (aVertex.Z == aList[i].Z): - return i + if ( round(aVertex.X,p) == round(aList[i].X,p) ): + if ( round(aVertex.Y,p) == round(aList[i].Y,p) ): + if ( round(aVertex.Z,p) == round(aList[i].Z,p) ): + return i def getIndices(shape,offset): "returns a list with 2 lists: vertices and face indexes, offsetted with the given amount" @@ -38,23 +42,33 @@ def getIndices(shape,offset): elist = [] flist = [] for v in shape.Vertexes: - vlist.append(" "+str(round(v.X,4))+" "+str(round(v.Y,4))+" "+str(round(v.Z,4))) + vlist.append(" "+str(round(v.X,p))+" "+str(round(v.Y,p))+" "+str(round(v.Z,p))) if not shape.Faces: for e in shape.Edges: if isinstance(e,Part.Line): - ei = " " + str(findVert(e.Vertexes[0],shape.Vertexes)+offset) - ei += " " + str(findVert(e.Vertexes[-1],shape.Vertexes)+offset) + ei = " " + str(findVert(e.Vertexes[0],shape.Vertexes) + offset) + ei += " " + str(findVert(e.Vertexes[-1],shape.Vertexes) + offset) elist.append(ei) for f in shape.Faces: - fi = "" - # OCC vertices are unsorted. We need to sort in the right order... - edges = DraftGeomUtils.sortEdges(f.Wire.Edges) - #print edges - for e in edges: - #print e.Vertexes[0].Point,e.Vertexes[1].Point - v = e.Vertexes[0] - fi+=" "+str(findVert(v,shape.Vertexes)+offset) - flist.append(fi) + if len(f.Wires) > 1: + # if we have holes, we triangulate + tris = f.tessellate(1) + for fdata in tris[1]: + fi = "" + for vi in fdata: + vdata = Part.Vertex(tris[0][vi]) + fi += " " + str(findVert(vdata,shape.Vertexes) + offset) + flist.append(fi) + else: + fi = "" + # OCC vertices are unsorted. We need to sort in the right order... + edges = DraftGeomUtils.sortEdges(f.Wire.Edges) + #print edges + for e in edges: + #print e.Vertexes[0].Point,e.Vertexes[1].Point + v = e.Vertexes[0] + fi += " " + str(findVert(v,shape.Vertexes) + offset) + flist.append(fi) return vlist,elist,flist def export(exportList,filename): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index f8eeca25e..10d1bb382 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3617,7 +3617,7 @@ class WireToBSpline(Modifier): def finish(self): Modifier.finish(self) - + class SelectGroup(): "The SelectGroup FreeCAD command definition" @@ -3634,7 +3634,14 @@ class SelectGroup(): def Activated(self): sellist = [] - for ob in Draft.getSelection(): + sel = Draft.getSelection() + if len(sel) == 1: + if sel[0].isDerivedFrom("App::DocumentObjectGroup"): + cts = Draft.getGroupContents(FreeCADGui.Selection.getSelection()) + for o in cts: + FreeCADGui.Selection.addSelection(o) + return + for ob in sel: for child in ob.OutList: FreeCADGui.Selection.addSelection(child) for parent in ob.InList: @@ -3642,7 +3649,7 @@ class SelectGroup(): for child in parent.OutList: FreeCADGui.Selection.addSelection(child) - + class Shape2DView(): "The Shape2DView FreeCAD command definition" def GetResources(self): diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index b4b83ee35..ea71b0d00 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -225,7 +225,7 @@ class DraftWorkbench (Workbench): self.appendContextMenu("",self.lineList) else: if (FreeCADGui.Selection.getSelection()): - self.appendContextMenu("Display options",self.treecmdList) + self.appendContextMenu("Draft context tools",self.treecmdList) def GetClassName(self): return "Gui::PythonWorkbench" From 75d9bfc9256ac82aabc57e64384c648c7e78c85e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 19 Jul 2012 20:55:25 -0300 Subject: [PATCH 451/517] Arch: added new closeHoles command --- src/Mod/Arch/ArchCommands.py | 52 +++++++++++++++++++++++++++++++++--- src/Mod/Arch/InitGui.py | 3 ++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index f98c61c88..6952f4d13 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -235,6 +235,33 @@ def makeFace(wires,method=2,cleanup=False): #print "makeFace: final face:",mf.Faces return mf.Faces[0] +def closeHole(shape): + '''closeHole(shape): closes a hole in an open shape''' + import DraftGeomUtils, Part + # creating an edges lookup table + lut = {} + for face in shape.Faces: + for edge in face.Edges: + hc = edge.hashCode() + if lut.has_key(hc): + lut[hc] = lut[hc] + 1 + else: + lut[hc] = 1 + # filter out the edges shared by more than one face + bound = [] + for e in shape.Edges: + if lut[e.hashCode()] == 1: + bound.append(e) + bound = DraftGeomUtils.sortEdges(bound) + try: + nface = Part.Face(Part.Wire(bound)) + shell = Part.makeShell(shape.Faces+[nface]) + solid = Part.Solid(shell) + except: + raise + 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''' @@ -242,10 +269,10 @@ def meshToShape(obj,mark=True): name = obj.Name import Part, MeshPart, DraftGeomUtils if "Mesh" in obj.PropertiesList: - faces = [] + faces = [] mesh = obj.Mesh plac = obj.Placement - segments = mesh.getPlanes(0.001) # use rather strict tolerance here + 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 @@ -262,7 +289,7 @@ def meshToShape(obj,mark=True): se = Part.makeShell(faces) solid = Part.Solid(se) except: - pass + raise else: if solid.isClosed(): FreeCAD.ActiveDocument.removeObject(name) @@ -522,9 +549,28 @@ class _CommandRemoveShape: sel = FreeCADGui.Selection.getSelection() removeShape(sel) +class _CommandCloseHoles: + "the Arch CloseHoles command definition" + def GetResources(self): + return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_RemoveShape","Closes holes in open shapes, turning them solids")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False + + def Activated(self): + for o in FreeCADGui.Selection.getSelection(): + s = closeHole(o.Shape) + if s: + o.Shape = s + FreeCADGui.addCommand('Arch_Add',_CommandAdd()) FreeCADGui.addCommand('Arch_Remove',_CommandRemove()) FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh()) FreeCADGui.addCommand('Arch_MeshToShape',_CommandMeshToShape()) FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes()) FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape()) +FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles()) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 69838792c..bd0feb54e 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -65,7 +65,8 @@ class ArchWorkbench(Workbench): "Arch_Window","Arch_Roof","Arch_Axis", "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", - "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] + "Arch_SelectNonSolidMeshes","Arch_RemoveShape", + "Arch_CloseHoles"] # draft tools self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", From 17506c8d7ebc0c8761a5fcaad59c2cbf78e54f48 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 21 Jul 2012 09:47:44 +0200 Subject: [PATCH 452/517] Check at runtime if drawing page is there --- src/Mod/Drawing/Gui/Command.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index 7ed5a4641..ed5f10b28 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -11,6 +11,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include #endif @@ -90,16 +91,15 @@ void CmdDrawingNewPage::activated(int iMsg) { std::string FeatName = getUniqueObjectName("Page"); - if (iMsg == 3) { + std::stringstream out; + out << App::Application::getResourceDir() + << "Mod/Drawing/Templates/" + << "A" << iMsg << "_Landscape.svg"; + Base::FileInfo tfi(out.str()); + if (tfi.isReadable()) { openCommand("Drawing create page"); doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Template = 'A3_Landscape.svg'",FeatName.c_str()); - commitCommand(); - } - else if (iMsg == 4) { - openCommand("Drawing create page"); - doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Template = 'A4_Landscape.svg'",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), tfi.filePath().c_str()); commitCommand(); } else { From 4520454d1740efbe34a37b16765a5ba15058b701 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 21 Jul 2012 18:16:15 +0200 Subject: [PATCH 453/517] 0000801: Accidental Cancel in set colors destroys all the work --- src/Mod/Part/Gui/TaskFaceColors.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Mod/Part/Gui/TaskFaceColors.cpp b/src/Mod/Part/Gui/TaskFaceColors.cpp index 96204f66c..61a112e90 100644 --- a/src/Mod/Part/Gui/TaskFaceColors.cpp +++ b/src/Mod/Part/Gui/TaskFaceColors.cpp @@ -26,6 +26,7 @@ #ifndef _PreComp_ # include # include +# include # include #endif @@ -194,10 +195,17 @@ bool FaceColors::accept() bool FaceColors::reject() { - Gui::Document* doc = Gui::Application::Instance->getDocument(d->vp->getObject()->getDocument()); - doc->resetEdit(); - d->vp->DiffuseColor.setValues(d->current); - return true; + int ret = QMessageBox::question(this, tr("Face colors"), tr("Do you really want to cancel?"), + QMessageBox::Yes, QMessageBox::No|QMessageBox::Default|QMessageBox::Escape); + if (ret == QMessageBox::Yes) { + Gui::Document* doc = Gui::Application::Instance->getDocument(d->vp->getObject()->getDocument()); + doc->resetEdit(); + d->vp->DiffuseColor.setValues(d->current); + return true; + } + else { + return false; + } } void FaceColors::changeEvent(QEvent *e) From bbf5bbbcbc948bd80b5bd9fcaf6b987f4b013b65 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 21 Jul 2012 20:07:27 +0200 Subject: [PATCH 454/517] 0000791: Placement dialog leaves unapplied changes --- src/Gui/Placement.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/Gui/Placement.h | 10 ++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/Gui/Placement.cpp b/src/Gui/Placement.cpp index 091c10512..5697814e9 100644 --- a/src/Gui/Placement.cpp +++ b/src/Gui/Placement.cpp @@ -99,10 +99,15 @@ Placement::Placement(QWidget* parent, Qt::WFlags fl) connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(onPlacementChanged(int))); + connectAct = Application::Instance->signalActiveDocument.connect + (boost::bind(&Placement::slotActiveDocument, this, _1)); + App::Document* activeDoc = App::GetApplication().getActiveDocument(); + if (activeDoc) documents.insert(activeDoc->getName()); } Placement::~Placement() { + connectAct.disconnect(); delete ui; } @@ -113,6 +118,36 @@ void Placement::showDefaultButtons(bool ok) ui->applyButton->setVisible(ok); } +void Placement::slotActiveDocument(const Gui::Document& doc) +{ + documents.insert(doc.getDocument()->getName()); +} + +void Placement::revertTransformation() +{ + for (std::set::iterator it = documents.begin(); it != documents.end(); ++it) { + Gui::Document* document = Application::Instance->getDocument(it->c_str()); + if (!document) continue; + + std::vector obj = document->getDocument()-> + getObjectsOfType(App::DocumentObject::getClassTypeId()); + if (!obj.empty()) { + for (std::vector::iterator it=obj.begin();it!=obj.end();++it) { + std::map props; + (*it)->getPropertyMap(props); + // search for the placement property + std::map::iterator jt; + jt = std::find_if(props.begin(), props.end(), find_placement(this->propertyName)); + if (jt != props.end()) { + Base::Placement cur = static_cast(jt->second)->getValue(); + Gui::ViewProvider* vp = document->getViewProvider(*it); + if (vp) vp->setTransformation(cur.toMatrix()); + } + } + } + } +} + void Placement::applyPlacement(const Base::Placement& p, bool incremental, bool data) { Gui::Document* document = Application::Instance->activeDocument(); @@ -225,12 +260,15 @@ void Placement::reject() QVariant data = QVariant::fromValue(plm); /*emit*/ placementChanged(data, true, false); + revertTransformation(); QDialog::reject(); } void Placement::accept() { on_applyButton_clicked(); + + revertTransformation(); QDialog::accept(); } diff --git a/src/Gui/Placement.h b/src/Gui/Placement.h index 1df314702..233284d1a 100644 --- a/src/Gui/Placement.h +++ b/src/Gui/Placement.h @@ -28,9 +28,14 @@ #include #include +#include +#include + class QSignalMapper; namespace Gui { +class Document; + namespace Dialog { class Ui_Placement; @@ -64,6 +69,8 @@ private: Base::Placement getPlacementData() const; void directionActivated(int); void applyPlacement(const Base::Placement& p, bool incremental, bool data); + void revertTransformation(); + void slotActiveDocument(const Gui::Document&); Q_SIGNALS: void placementChanged(const QVariant &, bool, bool); @@ -71,10 +78,13 @@ Q_SIGNALS: private: typedef Gui::LocationInterfaceComp Ui_PlacementComp; + typedef boost::BOOST_SIGNALS_NAMESPACE::connection Connection; Ui_PlacementComp* ui; QSignalMapper* signalMapper; + Connection connectAct; Base::Placement ref; std::string propertyName; // the name of the placement property + std::set documents; friend class TaskPlacement; }; From 08bfdc4875002c8b6f5293f62eef1689c251b5d5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 22 Jul 2012 14:56:25 +0200 Subject: [PATCH 455/517] Automatically create actions for each template --- src/Gui/PythonConsole.cpp | 10 +- src/Mod/Drawing/Gui/Command.cpp | 106 +++++++++--------- .../Gui/Resources/translations/Drawing_de.qm | Bin 7118 -> 7372 bytes .../Gui/Resources/translations/Drawing_de.ts | 8 ++ 4 files changed, 67 insertions(+), 57 deletions(-) diff --git a/src/Gui/PythonConsole.cpp b/src/Gui/PythonConsole.cpp index 8364ae4e9..780789b71 100644 --- a/src/Gui/PythonConsole.cpp +++ b/src/Gui/PythonConsole.cpp @@ -701,10 +701,14 @@ void PythonConsole::runSource(const QString& line) catch (const Base::SystemExitException&) { ParameterGrp::handle hPrefGrp = getWindowParameter(); bool check = hPrefGrp->GetBool("CheckSystemExit",true); - if (!check) qApp->quit(); - int ret = QMessageBox::question(this, tr("System exit"), tr("The application is still running.\nDo you want to exit without saving your data?"), - QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default); + int ret = QMessageBox::Yes; + if (check) { + ret = QMessageBox::question(this, tr("System exit"), + tr("The application is still running.\nDo you want to exit without saving your data?"), + QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default); + } if (ret == QMessageBox::Yes) { + PyErr_Clear(); qApp->quit(); } else { diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index ed5f10b28..8a206d52d 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -12,7 +12,12 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include +# include +# include +# include # include +# include #endif #include @@ -89,17 +94,16 @@ CmdDrawingNewPage::CmdDrawingNewPage() void CmdDrawingNewPage::activated(int iMsg) { + Gui::ActionGroup* pcAction = qobject_cast(_pcAction); + QAction* a = pcAction->actions()[iMsg]; + std::string FeatName = getUniqueObjectName("Page"); - std::stringstream out; - out << App::Application::getResourceDir() - << "Mod/Drawing/Templates/" - << "A" << iMsg << "_Landscape.svg"; - Base::FileInfo tfi(out.str()); + QFileInfo tfi(a->property("Template").toString()); if (tfi.isReadable()) { openCommand("Drawing create page"); doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), tfi.filePath().c_str()); + doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), (const char*)tfi.filePath().toUtf8()); commitCommand(); } else { @@ -115,25 +119,45 @@ Gui::Action * CmdDrawingNewPage::createAction(void) pcAction->setDropDownMenu(true); applyCommandData(pcAction); - QAction* a0 = pcAction->addAction(QString()); - a0->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A0")); + QAction* defaultAction = 0; + int defaultId = 0; - QAction* a1 = pcAction->addAction(QString()); - a1->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A1")); + std::string path = App::Application::getResourceDir(); + path += "Mod/Drawing/Templates/"; + QDir dir(QString::fromUtf8(path.c_str()), QString::fromAscii("A*_Landscape.svg")); + for (unsigned int i=0; i -1) { + int id = rx.cap(1).toInt(); + QFile file(QString::fromAscii(":/icons/actions/drawing-landscape-A0.svg")); + QAction* a = pcAction->addAction(QString()); + if (file.open(QFile::ReadOnly)) { + QString s = QString::fromAscii("style=\"font-size:22px\">A%1").arg(id); + QByteArray data = file.readAll(); + data.replace("style=\"font-size:22px\">A0", s.toAscii()); + a->setIcon(Gui::BitmapFactory().pixmapFromSvg(data, QSize(24,24))); + } - QAction* a2 = pcAction->addAction(QString()); - a2->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A2")); + a->setProperty("TemplateId", id); + a->setProperty("Template", dir.absoluteFilePath(dir[i])); - QAction* a3 = pcAction->addAction(QString()); - a3->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A3")); - - QAction* a4 = pcAction->addAction(QString()); - a4->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A4")); + if (id == 3) { + defaultAction = a; + defaultId = pcAction->actions().size() - 1; + } + } + } _pcAction = pcAction; languageChange(); - pcAction->setIcon(a3->icon()); - pcAction->setProperty("defaultAction", QVariant(3)); + if (defaultAction) { + pcAction->setIcon(defaultAction->icon()); + pcAction->setProperty("defaultAction", QVariant(defaultId)); + } + else if (!pcAction->actions().isEmpty()) { + pcAction->setIcon(pcAction->actions()[0]->icon()); + pcAction->setProperty("defaultAction", QVariant(0)); + } return pcAction; } @@ -146,41 +170,15 @@ void CmdDrawingNewPage::languageChange() return; Gui::ActionGroup* pcAction = qobject_cast(_pcAction); QList a = pcAction->actions(); - - a[0]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A0 landscape", 0, - QCoreApplication::CodecForTr)); - a[0]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A0 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[1]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A1 landscape", 0, - QCoreApplication::CodecForTr)); - a[1]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A1 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[2]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A2 landscape", 0, - QCoreApplication::CodecForTr)); - a[2]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A2 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[3]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A3 landscape", 0, - QCoreApplication::CodecForTr)); - a[3]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A3 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[4]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A4 landscape", 0, - QCoreApplication::CodecForTr)); - a[4]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A4 landscape drawing", 0, - QCoreApplication::CodecForTr)); + for (QList::iterator it = a.begin(); it != a.end(); ++it) { + int id = (*it)->property("TemplateId").toInt(); + (*it)->setText(QCoreApplication::translate( + "Drawing_NewPage", "A%1 landscape", 0, + QCoreApplication::CodecForTr).arg(id)); + (*it)->setToolTip(QCoreApplication::translate( + "Drawing_NewPage", "Insert new A%1 landscape drawing", 0, + QCoreApplication::CodecForTr).arg(id)); + } } bool CmdDrawingNewPage::isActive(void) diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm index 2079b12df25be0480fb743b1bcf7f54054851609..1b31c06f98b89d771d177d5f7c058069567302d9 100644 GIT binary patch delta 497 zcmX?Se#UZw2&2J7QOo*p-gE{A!9NVso1QZ;FeX4~kz$5j&r=x~SW6gwy?V;PAaIA_ zH<+Hn@CQT-<}myP(<%)A!Soi!i1{lS7$n>n+dn;FU=Ux=2sTgn664{wKt9`KCROEk z3=Ev-nUaLh0o7e++F*W_fq^}yp6ThfdkhR>b<6_Gl^Ga#W0+;;Q7vO^-2}!0Y~=Qa-ccf`RrizLKE1}tOLsPO}1gwHxf_dEMRB`%I@ddej4Z+ zNiVJoYMel4@^H%wi83%SByoFe0D7B!4tJWACeW6Zljky;F-f^hzRGB)F1ee}vi={? z&3b(QEH4B7aD?CS>?2?xi10h_O9t8@o5{c+RlV7Y$yI<;iNTRUmBElfVKSqb6b}c` zYz8(U=5GjM4%as`zcw?Al=WYjTc*G1gKtz$HK~l zEeGo7&SwX!6I{uDW*tzR??ldV)1_qHslh-nuF-gWwe#&U4E^&p=vi={? z?RtFwEH4B7a)jUU>?2@c=<+-7O9t90n+f#5l+9jDt^%7M31u)&RuGHWY$n>z4gfd8 Bbcp}} diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts index 5923883d7..3fe18daed 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts @@ -251,6 +251,14 @@ Insert new A4 landscape drawing Neue A3-Zeichung einfügen (im Querformat) {4 ?} + + Insert new A%1 landscape drawing + Neue A%1-Zeichung im Querformat einfügen + + + A%1 landscape + A%1 im Querformat + QObject From f2ad945a7f7e51b27b969ddf7360c891f19b6ac1 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 22 Jul 2012 16:41:25 -0300 Subject: [PATCH 456/517] Arch: small tool improvements + added Arch check tool (checks if all objects are valid and solid) + added missing icons --- src/Mod/Arch/ArchCommands.py | 61 +- src/Mod/Arch/ArchSectionPlane.py | 3 +- src/Mod/Arch/Arch_rc.py | 744 +++++++++++++++++- src/Mod/Arch/InitGui.py | 2 + src/Mod/Arch/Makefile.am | 5 +- src/Mod/Arch/Resources/Arch.qrc | 3 + src/Mod/Arch/Resources/icons/Arch_Check.svg | 162 ++++ .../Arch/Resources/icons/Arch_CloseHoles.svg | 117 +++ .../icons/Arch_SelectNonManifold.svg | 93 +++ src/Mod/Draft/Draft.py | 9 + 10 files changed, 1178 insertions(+), 21 deletions(-) create mode 100644 src/Mod/Arch/Resources/icons/Arch_Check.svg create mode 100644 src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg create mode 100644 src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 6952f4d13..f0754afa2 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -381,6 +381,34 @@ def download(url): return None else: return filepath + +def check(objectslist,includehidden=True): + """check(objectslist,includehidden=True): checks if the given objects contain only solids""" + objs = Draft.getGroupContents(objectslist) + if not includehidden: + objs = Draft.removeHidden(objs) + bad = [] + for o in objs: + if not o.isDerivedFrom("Part::Feature"): + bad.append([o,"is not a Part-based object"]) + else: + s = o.Shape + if not s.isClosed(): + bad.append([o,"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"]) + else: + f = 0 + for sol in s.Solids: + f += len(sol.Faces) + if not sol.isClosed(): + bad.append([o,"contains a non-closed solid"]) + if len(s.Faces) != f: + bad.append([o,"contains faces that are not part of any solid"]) + return bad + # command definitions ############################################### @@ -511,7 +539,8 @@ class _CommandMeshToShape: class _CommandSelectNonSolidMeshes: "the Arch SelectNonSolidMeshes command definition" def GetResources(self): - return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"), + return {'Pixmap': 'Arch_SelectNonManifold.svg', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"), 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Selects all non-manifold meshes from the document or from the selected groups")} def Activated(self): @@ -552,8 +581,9 @@ class _CommandRemoveShape: class _CommandCloseHoles: "the Arch CloseHoles command definition" def GetResources(self): - return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_RemoveShape","Closes holes in open shapes, turning them solids")} + return {'Pixmap' : 'Arch_CloseHoles', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Closes holes in open shapes, turning them solids")} def IsActive(self): if FreeCADGui.Selection.getSelection(): @@ -567,6 +597,30 @@ class _CommandCloseHoles: if s: o.Shape = s +class _CommandCheck: + "the Arch Check command definition" + def GetResources(self): + return {'Pixmap' : 'Arch_Check', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Check"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Checks the selected objects for problems")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False + + def Activated(self): + result = check(FreeCADGui.Selection.getSelection()) + if not result: + FreeCAD.Console.PrintMessage("All good! no problems found") + else: + FreeCADGui.Selection.clearSelection() + for i in result: + FreeCAD.Console.PrintWarning("Object "+i[0].Name+" ("+i[0].Label+") "+i[1]) + FreeCADGui.Selection.addSelection(i[0]) + + FreeCADGui.addCommand('Arch_Add',_CommandAdd()) FreeCADGui.addCommand('Arch_Remove',_CommandRemove()) FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh()) @@ -574,3 +628,4 @@ FreeCADGui.addCommand('Arch_MeshToShape',_CommandMeshToShape()) FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes()) FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape()) FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles()) +FreeCADGui.addCommand('Arch_Check',_CommandCheck()) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index f71828a96..86a346357 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -206,6 +206,7 @@ class _ArchDrawingView: if obj.Source: if obj.Source.Objects: objs = Draft.getGroupContents(obj.Source.Objects) + objs = Draft.removeHidden(objs) svg = '' # generating SVG @@ -229,7 +230,7 @@ class _ArchDrawingView: if o.isDerivedFrom("Part::Feature"): shapes.append(o.Shape) if shapes: - base = shape.pop() + base = shapes.pop() for sh in shapes: base = base.fuse(sh) svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction)) diff --git a/src/Mod/Arch/Arch_rc.py b/src/Mod/Arch/Arch_rc.py index 6e7f3870a..590681ea5 100644 --- a/src/Mod/Arch/Arch_rc.py +++ b/src/Mod/Arch/Arch_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Sun May 13 20:45:11 2012 +# Created: Sun Jul 22 16:38:54 2012 # by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -8358,6 +8358,132 @@ qt_resource_data = "\ \x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\ \x65\x73\x3d\x22\x63\x63\x63\x63\x63\x22\x20\x2f\x3e\x0a\x20\x20\ \x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x07\xbe\ +\x00\ +\x00\x1a\x97\x78\x9c\xed\x18\x6b\x8f\xda\xd8\xf5\xfb\xfc\x0a\x97\ +\x7c\x49\x54\xfb\x72\xdf\x0f\x06\x66\x55\x6d\xb4\xdb\x95\xb6\x5a\ +\x69\x37\x51\x3f\x46\xc6\xbe\x80\x3b\xc6\x46\xb6\x19\x60\x7e\x7d\ +\xcf\xb5\xf1\x83\xc1\x24\xb3\x89\x1a\xa9\x6a\x41\x19\xec\xf3\xbc\ +\xe7\x7d\x6e\xe6\x3f\x1c\xb7\xa9\xf7\x64\x8b\x32\xc9\xb3\xc5\x84\ +\x20\x3c\xf1\x6c\x16\xe5\x71\x92\xad\x17\x93\x8f\x1f\x7e\x0a\xf4\ +\xc4\x2b\xab\x30\x8b\xc3\x34\xcf\xec\x62\x92\xe5\x93\x1f\x1e\xee\ +\xe6\x7f\x09\x02\xef\xc7\xc2\x86\x95\x8d\xbd\x43\x52\x6d\xbc\x5f\ +\xb2\xc7\x32\x0a\x77\xd6\x7b\xbb\xa9\xaa\xdd\x6c\x3a\x3d\x1c\x0e\ +\x28\x39\x03\x51\x5e\xac\xa7\xef\xbc\x20\x78\xb8\xbb\x9b\x97\x4f\ +\xeb\x3b\xcf\xf3\x40\x6f\x56\xce\xe2\x68\x31\x39\x33\xec\xf6\x45\ +\x5a\x13\xc6\xd1\xd4\xa6\x76\x6b\xb3\xaa\x9c\x12\x44\xa6\x93\x9e\ +\x3c\xea\xc9\x23\xa7\x3d\x79\xb2\x51\xbe\xdd\xe6\x59\x59\x73\x66\ +\xe5\x9b\x01\x71\x11\xaf\x3a\x6a\x77\x9a\x03\xab\x89\x88\x31\x66\ +\x8a\xe9\x94\xd2\x00\x28\x82\xf2\x94\x55\xe1\x31\xb8\x64\x85\x33\ +\x8e\xb1\x52\x8c\xf1\x14\x70\x3d\xe5\xeb\xa8\x66\xc7\x14\x5c\x71\ +\xf3\x30\x35\x76\xa8\x1d\xdc\xbf\x83\x7f\x1d\x43\x0b\x40\x65\xbe\ +\x2f\x22\xbb\x02\x4e\x8b\x32\x5b\x4d\xdf\x7f\x78\xdf\x21\x03\x8c\ +\xe2\x2a\x1e\x88\x69\xbd\x7f\xa1\xf7\x22\x24\x59\xb8\xb5\xe5\x2e\ +\x8c\x6c\x39\x6d\xe1\x35\xff\x21\x89\xab\xcd\x62\x22\xf9\xee\x58\ +\xbf\x6f\x6c\xb2\xde\x54\x03\x40\x12\x2f\x26\x60\x21\x35\x1a\xd7\ +\xef\xed\x19\x66\x5d\x26\x61\xc4\x68\x43\x7a\x16\x3c\x44\x71\x8d\ +\x18\x22\x5e\x61\xb4\x96\x97\xfc\x71\x1e\xb9\x43\x2d\x26\x7f\x2b\ +\xa2\xcd\xa7\x1f\xd3\xbc\xb4\x7f\xcf\x53\x5b\xa2\xd6\x9f\x9d\xb8\ +\x7c\x5f\xed\xf6\xd5\x27\x7b\xac\x6c\xd6\xc8\x05\x8b\x06\xe6\xd5\ +\x68\xc7\x86\x2e\x4c\x1b\xa4\x3a\x99\x3c\x00\x64\x1e\xdb\x55\xe9\ +\x30\x8d\x55\xee\x0d\xcc\xa2\x35\x0e\xb0\x10\x1a\x1b\x16\x3f\x17\ +\x61\x9c\x40\x42\x36\x74\x0d\xe5\x25\x86\x39\x53\x1e\xce\xf8\x79\ +\x59\xe5\xbb\x96\x16\xac\xab\x4e\x29\x98\xe4\x80\x41\x94\xa7\x79\ +\x31\x7b\x83\xa5\x89\x30\xbf\xaf\x41\x39\x44\x20\xa9\x4e\x33\x72\ +\x3f\xe9\x79\xf2\xd5\xaa\xb4\xe0\x72\x3c\x80\xd5\x5e\x07\x0e\xd0\ +\x05\x55\x39\x7d\xbd\x36\x86\x57\x2b\x8c\x5f\xa1\x8d\x8c\x6a\x33\ +\xb8\xd3\x36\x9f\x5e\x9a\xfd\xa7\xbd\x24\xf9\x2d\x2f\xf5\xfa\xa4\ +\xfc\x82\x23\x46\x4c\x54\x64\x49\x57\xfa\xca\xc4\x9b\x5e\x1a\x68\ +\xd3\x5f\x70\xc4\x58\xf8\x30\x55\x46\xdc\xd4\x76\xc3\x4b\x5d\xee\ +\xee\x20\x09\x77\x36\x72\xed\xab\x55\xd3\x55\x40\x75\x72\x15\x7b\ +\x49\xca\xe2\xee\x38\x7d\x39\xed\x3e\x1d\xc1\x2b\xde\xcc\x63\x14\ +\xfe\x90\x51\x8a\x53\x43\x41\xa0\x23\xc1\x0f\x1e\xa5\x79\x76\x75\ +\xfd\x19\x31\xe7\x13\x04\x79\x91\xac\x13\x28\x9c\x9a\x8e\x12\xc4\ +\xea\xcf\x25\x0f\x38\x75\x60\x1b\xd4\x51\x9f\xa7\x73\xe7\x8b\x30\ +\xbd\xca\x91\x56\x0d\x78\x36\x05\xb6\xc5\x24\x4c\x0f\xe1\xa9\xec\ +\x64\xd6\xcd\x71\xb6\x29\x2c\x34\xf3\x37\x23\xd9\x34\xd4\x7d\xa9\ +\x82\x61\xd5\x27\xd2\xfa\x0c\xfc\x98\x25\x15\x74\xed\x7d\x69\x8b\ +\x3f\x5c\xe7\xfb\x2d\xfb\x58\xda\x2b\xaa\x0f\x45\x98\x95\xd0\x66\ +\xb7\x8b\xc9\x36\xac\x8a\xe4\xf8\x16\x23\xa1\x31\x31\x9c\x12\x1f\ +\x86\x24\x56\x9a\x28\xe2\x07\x04\x19\x2c\x30\x95\xc6\x01\x8d\x54\ +\x04\xd0\x42\x22\xa6\x94\x23\x0c\x88\xd1\x40\xa0\x99\x7e\xd7\x69\ +\x88\x20\x68\x02\x9c\x47\xb5\x36\xb4\x87\x42\xa0\x18\x88\x50\x9c\ +\xf0\xfe\xcc\xab\x51\xda\xd5\x28\x6d\x01\x39\x6b\x90\x50\x84\xd3\ +\x81\xcf\x6f\xd4\xe5\x37\xf9\x5c\xcb\xc9\xe7\x0a\x7c\x70\xd2\x23\ +\x59\x4c\x28\x47\x82\xc3\xb7\x67\x3a\x01\x94\x4b\x44\x34\xd1\x03\ +\x52\x0a\xa6\x1a\xa4\x1d\xb4\x8f\xe9\x89\x8e\x90\x7e\x3e\x92\x5f\ +\x32\x7d\xb4\x71\x07\xdf\xb5\x75\x07\xec\xfb\x36\xef\x40\x7f\x5d\ +\xfb\x1e\xf5\xfe\x8d\x40\x8d\xc6\x74\x34\xfc\xaf\x2b\xc4\x91\x38\ +\x19\x42\x5e\x9b\xa0\x81\xbc\x6e\x63\x2f\x73\xbd\x71\xc9\x7c\xea\ +\x06\x7e\xfd\xd4\x75\x60\xb7\x80\xc4\x4f\x89\x3d\xf4\x5b\xc1\x32\ +\xec\xce\xb6\x0b\xd7\xb6\x8e\x0c\x68\x5e\xd5\x9f\x33\x62\x99\x17\ +\xb1\x2d\x5a\x94\xac\x3f\x17\xa8\x73\xf0\x9a\x2d\xfb\xee\xf2\x74\ +\x4e\x6a\x87\xc7\xe3\xf8\x72\x13\xc6\xf9\x01\x7c\xfa\x12\xf9\x9c\ +\xe7\xd0\xa8\x04\x12\x2f\x11\xae\xd9\x10\x85\xb4\x62\x98\x5d\x23\ +\x41\x13\x65\x48\x61\x45\x09\xbf\x42\xee\x8b\x02\x9c\x19\xa4\xe1\ +\xc9\x82\x39\xf5\x4f\xeb\xfe\x72\x93\x1f\xd6\x85\x73\x4b\x55\xec\ +\xed\x4b\x4e\xd8\xe0\xf6\x6e\x77\x0f\xf6\x4d\x80\xcf\x1b\xe3\x80\ +\xc2\xf1\x06\xcb\x65\x7e\x1c\x17\x70\x48\x32\x30\x33\x38\xef\xa0\ +\x84\xea\x2b\x67\x9c\x29\xda\xad\x54\x29\x75\x83\xe2\xd8\x17\xe1\ +\x4b\xd4\xe9\x36\x6a\x1b\x1e\x93\x6d\xf2\x6c\x63\x57\x52\xe7\x34\ +\xd9\xda\x2a\x8c\xc3\x2a\xec\x53\xa2\x85\xc0\x90\x13\xed\xb2\x08\ +\xf7\x89\xd9\xef\xef\x7f\xea\x6a\x3b\x8a\x66\xff\xcc\x8b\xc7\xbe\ +\x2c\x1d\x41\xb8\x84\xdd\x74\x31\xe9\x3a\x8e\x5b\x41\xa3\x99\x1b\ +\x36\x61\xf5\x90\x6c\x21\xd0\xee\xf2\xf0\x57\xd8\xe1\x21\x39\x3b\ +\xc4\x05\xb1\xdb\x11\x7a\xa1\x8d\xd8\xc2\x36\x97\x83\xd1\xfb\x54\ +\x1c\x6d\x13\xc7\x34\xfd\xa3\x4a\xd2\xf4\x17\xa7\x64\xd0\x83\xce\ +\x42\x93\x2a\xb5\x0f\xb5\xce\xe6\xb1\xb5\x62\x7a\x36\xa3\x6d\x21\ +\x03\x2b\xe7\xd3\xd6\x0d\xf5\xdb\xba\x77\xcf\x45\xc6\x74\x1e\x4e\ +\xc3\xa5\x4d\x17\x93\x5f\x1d\xd2\xbb\xc2\xae\x8b\x7c\xbf\xdb\xe6\ +\xb1\x3d\xb3\xb7\x6e\xdd\x85\xd5\x66\xa4\x9e\xb3\x0c\xea\x39\x2f\ +\x02\xc8\xd5\xa7\xb0\xda\x17\x76\xd8\x72\xfb\x6a\x06\x79\xce\x74\ +\x48\xc5\xa8\xf9\x5c\xae\x2b\x20\x9b\x69\xca\x3a\x20\xc0\xfe\xe1\ +\x51\x81\x94\x91\x46\xf9\x1a\x69\x2d\x24\x16\xda\x93\x48\x51\xa8\ +\x15\xad\x7d\xe2\x90\x02\x4b\x8f\x09\x84\x85\x30\x8a\xfb\x30\x7a\ +\x25\x51\xc6\x63\x1c\x31\x61\x84\xa1\xbe\x80\x27\xad\x08\x50\x09\ +\x8c\x40\x94\xc1\xc6\xe7\x0c\x69\xc1\x39\xd3\x1e\x4c\x75\x41\x61\ +\x7e\xc3\x32\x81\x91\x92\x44\x68\x31\xa6\xf3\xb9\x37\xa7\x99\x0b\ +\x2b\x88\x9e\xdb\x3e\x19\x5f\xad\xee\xdd\xcb\x60\x22\xd4\xaf\xc5\ +\x3e\xb5\x33\xfb\x64\xc1\xea\x18\x46\x46\x91\x3f\x5a\x47\x8f\x0d\ +\x13\xe7\xd7\xa6\xb0\x66\xac\x7d\x75\xdd\x13\x1c\x3a\x5b\xee\xab\ +\x6a\x08\xfb\x57\x9e\x64\xb3\x25\x88\x4a\x5b\x28\xa4\x90\x2d\x52\ +\x28\x8d\x6a\xc6\x5b\x58\xaf\xfe\x0c\x88\x43\x68\x53\x45\x11\x9e\ +\xc0\xf1\x99\x1d\x42\x9b\x31\x35\xc3\xf7\xdb\xb0\x78\xb4\x45\x83\ +\x7f\x4a\xca\x64\x99\xa4\x4e\x44\xfd\x98\xda\xfb\x38\x29\x77\x10\ +\x7e\xb8\xbe\xba\x63\xdc\xe7\x70\x63\x5b\xa5\xf9\xa1\xc3\xdb\x2c\ +\x84\x9f\x60\x19\x46\x8f\x2e\x61\xb2\x78\x16\x46\xd0\x72\xf6\x69\ +\x58\x0d\xc6\xff\xd7\xe4\xcc\x20\x1f\xd4\x65\x3e\x40\xa4\xa9\x91\ +\x98\x52\x17\x69\x08\x2a\x53\xc4\xc5\x90\x81\x5b\x99\x4f\xa0\x9f\ +\x13\x26\xa8\x1e\x8d\x16\x54\xe1\xdb\x37\xd7\x8b\xe9\xbb\xef\x11\ +\xbe\x3a\x62\xff\x33\xe1\xbb\x59\xf2\x63\x01\x16\xc3\x00\x6f\x3d\ +\x01\x35\x2a\x89\x94\xae\xb8\xa1\x1b\xc0\x9e\xef\x51\x58\xa7\x05\ +\x37\x52\xfb\x0c\x01\x04\x6a\xd4\xc3\x3e\x24\x02\x84\x5f\x28\xe1\ +\xfd\x0a\x3c\x42\x4a\x25\x0d\xf1\xb9\x81\xf4\x10\xc4\xd0\x31\x39\ +\x57\x45\xdc\xdd\x21\xdd\xe7\xfe\xff\x25\xfd\x35\x39\xf1\xe2\xba\ +\x1c\x16\xd1\x2b\xbc\x5c\x97\xe2\xf5\x7d\xe5\xcf\x95\x22\xae\x77\ +\xf1\x81\xdb\xa1\x95\x7f\x8b\x3b\xff\x93\xae\xbb\xce\xfb\xc1\xce\ +\xde\xb9\xd0\x6d\x89\x9c\xbe\x58\xde\x7b\xec\x69\x64\xb5\xef\xb0\ +\x45\xb3\x61\x4a\x06\xdf\x11\xd1\xc5\x69\x0c\xdd\x54\x5c\x7b\x89\ +\xf0\x5b\xe9\x5e\xe8\x75\xb4\x7e\xf7\xe4\x61\x8f\xc0\x37\x70\x2d\ +\x18\x26\x30\xd5\x3e\xfe\x0c\xd9\x90\xaa\x2f\xbc\x6a\xe4\x3a\xaf\ +\xdc\x6d\x1e\x0b\xea\x07\xf0\x4c\x28\x65\x42\x28\xff\xf2\xb1\xa3\ +\xa0\x14\x69\x29\xb0\xd1\x3e\xc7\x08\x2e\xfe\x46\xc0\x8d\x7e\x3c\ +\x2f\x6f\x97\x78\x73\x59\xf8\xd6\x5c\xa3\xb0\x1a\x68\xaa\x5f\x55\ +\xea\x75\x3e\xfc\x37\x95\xfa\x45\x82\x50\x82\x88\x14\x60\xad\x0f\ +\x9d\xd8\x0d\x5a\x4d\xbc\xc8\x23\x14\x41\xeb\x53\xc2\xe7\x88\x53\ +\x2a\xa4\xf1\x88\x44\x12\x4b\x0c\x20\x2a\x91\x60\x82\x13\x31\x0a\ +\xc3\x90\x12\xb0\x80\x51\xd8\xcf\xfc\x00\xd6\x2e\x43\x41\x38\xf1\ +\x60\x9e\x1b\x2a\xb9\x02\x98\x42\x4c\x52\xa9\xdc\xae\xc7\x39\x37\ +\xda\xf8\x81\x42\x70\x77\xe2\x90\x9b\x84\xc3\x10\x60\x4a\x69\xa0\ +\x13\x30\xf8\x15\x36\x7c\x1c\xe8\xf4\x04\xb0\x13\x18\x0a\x71\xe2\ +\xee\x9c\x0c\xae\x08\x90\xc1\x6e\x24\x80\x22\x46\xdc\x86\xc7\x05\ +\x61\xc6\x0b\x40\x00\xe6\xd0\xca\x81\x4c\x81\x1e\x42\xbd\x00\x8e\ +\xae\x28\xd6\xcc\x87\xf9\x03\x63\x81\xb1\x31\x90\x53\x02\x19\xca\ +\x09\xe3\x2e\x3f\x91\xa4\xb0\x9a\x52\x27\x0f\x1a\x9a\x96\xc4\x0f\ +\x34\x14\x95\x31\x1c\xb8\x05\x94\x08\x07\x35\x7e\xe0\x26\x96\x21\ +\xd2\x9d\x05\x58\x30\x1c\x10\x5c\xc1\xc0\xb9\x84\x28\x3a\x0e\x7c\ +\x1e\x69\x22\x66\xf0\xbf\x6e\xdf\x34\x9b\xcb\xfa\xdb\x5d\xc5\xd7\ +\x0f\x77\x73\x77\xf7\x79\xb8\xfb\x37\x54\x09\xba\x52\ \x00\x00\x07\xc4\ \x00\ \x00\x37\x1e\x78\x9c\xed\x5b\x6d\x8f\x9b\x48\x12\xfe\x3e\xbf\x82\ @@ -10317,6 +10443,575 @@ qt_resource_data = "\ \xf7\x89\x07\x56\x32\x89\xfb\x7b\xed\x20\xe4\xe0\xe3\xe7\x3f\x65\ \x87\xd9\x74\x75\x77\x33\x33\x21\xe1\xee\xe6\xbf\x41\x63\xea\xe4\ \ +\x00\x00\x11\xcb\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\ +\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x0a\x20\x20\x20\x78\x6d\ +\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\ +\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\ +\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\ +\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\ +\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x70\x78\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\ +\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\x39\x38\ +\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x76\ +\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\ +\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\x38\x38\ +\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\ +\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x50\x61\x72\ +\x74\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\x6e\x73\ +\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\ +\x6e\x3d\x22\x31\x2e\x31\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\ +\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x32\x39\ +\x38\x32\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x37\x31\x62\x32\ +\x66\x38\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x33\x38\x36\x38\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x32\x37\x39\x35\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\ +\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x38\x35\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\ +\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\ +\x36\x30\x32\x38\x34\x35\x39\x2c\x31\x2e\x30\x34\x37\x31\x36\x33\ +\x39\x2c\x2d\x31\x2e\x39\x37\x39\x34\x30\x32\x31\x2c\x31\x2e\x31\ +\x33\x39\x35\x32\x39\x35\x2c\x31\x32\x37\x2e\x39\x35\x38\x38\x2c\ +\x2d\x37\x34\x2e\x34\x35\x36\x39\x30\x37\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x63\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x33\x31\ +\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x66\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x31\x2e\x30\x37\x34\ +\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\ +\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\ +\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\ +\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\ +\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\ +\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\ +\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x32\x39\x38\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\ +\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x30\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\ +\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\ +\x35\x38\x30\x31\x39\x34\x32\x31\x2c\x31\x2e\x30\x30\x37\x38\x31\ +\x37\x31\x2c\x2d\x31\x2e\x39\x30\x35\x30\x32\x36\x39\x2c\x31\x2e\ +\x30\x39\x36\x37\x31\x32\x31\x2c\x35\x39\x2e\x32\x38\x36\x35\x31\ +\x32\x2c\x2d\x31\x39\x37\x2e\x38\x31\x37\x34\x37\x29\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\ +\x38\x39\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\ +\x33\x31\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x31\x2e\x30\ +\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\ +\x22\x31\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\ +\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\ +\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\ +\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\ +\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\ +\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\ +\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x35\x2e\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x78\x3d\x22\x31\x37\x2e\x39\x33\x33\x34\x33\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\ +\x31\x39\x2e\x33\x33\x32\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\ +\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\ +\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\ +\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\ +\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\ +\x22\x31\x32\x38\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\ +\x68\x74\x3d\x22\x37\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\ +\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\ +\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\ +\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\ +\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\ +\x74\x61\x32\x39\x38\x35\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\ +\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\ +\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\ +\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\ +\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\ +\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\ +\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\ +\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\ +\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\ +\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\ +\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\ +\x61\x62\x65\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\ +\x75\x70\x6d\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\ +\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\ +\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x38\x32\x33\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x32\x38\x2e\x37\x30\x36\x30\x36\x31\ +\x2c\x39\x2e\x39\x37\x36\x35\x31\x34\x39\x20\x39\x2e\x36\x33\x36\ +\x31\x36\x39\x37\x2c\x31\x36\x2e\x38\x38\x35\x39\x36\x39\x20\x33\ +\x37\x2e\x39\x36\x35\x30\x36\x35\x2c\x32\x30\x2e\x37\x30\x38\x38\ +\x30\x39\x20\x33\x37\x2e\x32\x36\x38\x36\x38\x33\x2c\x35\x35\x2e\ +\x34\x37\x38\x30\x31\x35\x20\x35\x33\x2e\x38\x37\x39\x2c\x34\x34\ +\x2e\x39\x34\x35\x33\x34\x37\x20\x35\x34\x2e\x34\x33\x33\x32\x33\ +\x32\x2c\x31\x31\x2e\x38\x35\x32\x34\x39\x34\x20\x32\x38\x2e\x37\ +\x30\x36\x30\x36\x31\x2c\x39\x2e\x39\x37\x36\x35\x31\x34\x39\x20\ +\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\ +\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x39\x33\x35\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3a\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\ +\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\ +\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\ +\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\ +\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\ +\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\ +\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\ +\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x33\x38\x2e\x32\x30\x35\x31\ +\x31\x33\x2c\x32\x30\x2e\x31\x39\x37\x32\x38\x20\x35\x34\x2e\x33\ +\x30\x32\x36\x32\x31\x2c\x31\x32\x2e\x31\x30\x34\x34\x33\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x30\x37\x36\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x39\x33\x35\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ +\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\ +\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\ +\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\ +\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\ +\x3d\x22\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x38\x2e\x38\x37\x35\x32\ +\x35\x36\x39\x2c\x31\x36\x2e\x39\x31\x34\x38\x35\x31\x20\x32\x39\ +\x2e\x35\x35\x34\x39\x36\x38\x31\x2c\x33\x2e\x32\x33\x39\x31\x35\ +\x38\x20\x30\x2c\x33\x35\x2e\x31\x30\x36\x35\x37\x35\x20\x4c\x20\ +\x38\x2e\x34\x37\x35\x38\x36\x2c\x35\x30\x2e\x33\x38\x36\x31\x30\ +\x31\x20\x38\x2e\x38\x37\x35\x32\x35\x36\x39\x2c\x31\x36\x2e\x39\ +\x31\x34\x38\x35\x31\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\ +\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x34\x65\x30\ +\x34\x30\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\ +\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\ +\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\ +\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\ +\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\ +\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\ +\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\ +\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\ +\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x11\x71\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\ +\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\ +\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\ +\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\ +\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\ +\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\ +\x70\x78\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\ +\x34\x70\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x33\ +\x30\x35\x32\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\ +\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\ +\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x4d\ +\x65\x73\x68\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\ +\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\ +\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x3e\x0a\x20\x20\x3c\x64\x65\ +\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\ +\x33\x30\x35\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\ +\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\ +\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\ +\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x30\x36\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\ +\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\ +\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\ +\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\ +\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\ +\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\ +\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\ +\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\ +\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\ +\x3d\x22\x35\x2e\x34\x30\x34\x31\x39\x39\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x33\ +\x38\x2e\x31\x39\x37\x39\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x33\x30\x2e\x30\ +\x35\x37\x36\x32\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\ +\x65\x72\x3d\x22\x67\x33\x38\x38\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\ +\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ +\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x37\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ +\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\ +\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\ +\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x33\x30\ +\x35\x37\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\ +\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\ +\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\ +\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\ +\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\ +\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\ +\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\ +\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\ +\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\ +\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\ +\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\ +\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\ +\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\ +\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\ +\x38\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\ +\x2e\x32\x31\x30\x39\x35\x35\x36\x2c\x30\x2e\x39\x37\x37\x34\x39\ +\x35\x37\x2c\x30\x2e\x38\x38\x33\x38\x35\x32\x34\x2c\x30\x2e\x31\ +\x39\x30\x37\x34\x36\x32\x2c\x2d\x38\x32\x2e\x30\x32\x32\x33\x36\ +\x32\x2c\x2d\x31\x35\x38\x2e\x30\x32\x30\x35\x35\x29\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\ +\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\x63\x63\x63\ +\x63\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x36\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x38\x34\ +\x2e\x30\x36\x30\x36\x32\x2c\x31\x34\x35\x2e\x39\x37\x36\x36\x39\ +\x20\x43\x20\x31\x38\x31\x2e\x32\x32\x36\x37\x35\x2c\x31\x34\x35\ +\x2e\x34\x30\x31\x35\x37\x20\x31\x35\x36\x2e\x32\x30\x31\x31\x36\ +\x2c\x31\x34\x30\x2e\x39\x35\x30\x38\x34\x20\x31\x35\x36\x2e\x32\ +\x30\x31\x31\x36\x2c\x31\x34\x30\x2e\x39\x35\x30\x38\x34\x20\x4c\ +\x20\x31\x34\x34\x2e\x30\x31\x31\x34\x35\x2c\x31\x34\x39\x2e\x39\ +\x30\x32\x37\x39\x20\x4c\x20\x31\x34\x35\x2e\x36\x37\x38\x37\x39\ +\x2c\x31\x36\x33\x2e\x38\x30\x35\x34\x37\x20\x4c\x20\x31\x35\x39\ +\x2e\x38\x34\x36\x39\x32\x2c\x31\x37\x32\x2e\x39\x30\x37\x36\x37\ +\x20\x4c\x20\x31\x34\x38\x2e\x32\x38\x33\x30\x31\x2c\x31\x38\x34\ +\x2e\x37\x35\x39\x32\x34\x20\x4c\x20\x31\x33\x34\x2e\x36\x35\x35\ +\x32\x2c\x31\x37\x30\x2e\x36\x33\x33\x36\x34\x20\x4c\x20\x31\x36\ +\x34\x2e\x39\x39\x34\x37\x2c\x31\x38\x33\x2e\x32\x39\x38\x36\x34\ +\x20\x4c\x20\x31\x37\x34\x2e\x32\x30\x35\x31\x38\x2c\x31\x39\x34\ +\x2e\x30\x34\x38\x36\x34\x20\x4c\x20\x31\x38\x34\x2e\x36\x36\x34\ +\x36\x35\x2c\x31\x38\x30\x2e\x36\x38\x34\x34\x34\x20\x4c\x20\x31\ +\x36\x39\x2e\x34\x31\x32\x36\x34\x2c\x31\x37\x30\x2e\x32\x38\x31\ +\x34\x35\x20\x4c\x20\x31\x37\x30\x2e\x30\x33\x37\x34\x34\x2c\x31\ +\x35\x36\x2e\x33\x37\x38\x37\x36\x20\x4c\x20\x31\x38\x34\x2e\x30\ +\x36\x30\x36\x32\x2c\x31\x34\x35\x2e\x39\x37\x36\x36\x39\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\x66\x30\x30\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x66\x66\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x2e\x32\x30\ +\x36\x35\x36\x34\x32\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\ +\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\ +\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\ +\x4d\x20\x31\x37\x30\x2e\x31\x32\x35\x2c\x31\x35\x36\x2e\x36\x32\ +\x35\x20\x4c\x20\x31\x34\x35\x2c\x31\x35\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\ +\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3a\x62\x65\x76\x65\x6c\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\ +\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\ +\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\x64\x3a\ +\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\ +\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\ +\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\ +\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\ +\x61\x74\x65\x3b\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\ +\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x61\x74\x68\x33\x38\x37\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x31\x37\x30\x2e\x31\x32\x35\x2c\x31\ +\x37\x30\x2e\x37\x35\x20\x4c\x20\x31\x34\x36\x2e\x36\x32\x35\x2c\ +\x31\x36\x33\x2e\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\x66\x30\x30\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x2e\x31\x35\ +\x34\x39\x32\x33\x31\x37\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\ +\x72\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\ +\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\x6e\x6f\x6e\x65\x3b\ +\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\x64\x3a\x6e\x6f\x6e\x65\x3b\ +\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\x6e\x6f\x6e\x65\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x76\ +\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\ +\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\ +\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\ +\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\ +\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\ +\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x70\x61\x74\x68\x33\x38\x38\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x36\x35\x2c\x31\x38\x33\x2e\ +\x32\x35\x20\x4c\x20\x31\x33\x35\x2e\x37\x35\x2c\x31\x37\x31\x2e\ +\x33\x37\x35\x20\x4c\x20\x31\x34\x38\x2e\x37\x35\x2c\x31\x38\x36\ +\x20\x4c\x20\x31\x37\x34\x2e\x36\x32\x35\x2c\x31\x39\x36\x20\x4c\ +\x20\x31\x36\x35\x2c\x31\x38\x33\x2e\x32\x35\x20\x7a\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\ +\x37\x66\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ +\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\ +\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3a\x62\x65\x76\x65\x6c\x3b\x6d\x61\x72\x6b\x65\x72\x3a\ +\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\ +\x74\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\ +\x64\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\ +\x64\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\ +\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\ +\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\ +\x73\x3d\x22\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x38\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x35\x38\x2e\ +\x37\x35\x2c\x31\x37\x32\x2e\x37\x35\x20\x4c\x20\x31\x38\x34\x2e\ +\x37\x35\x2c\x31\x38\x31\x2e\x31\x32\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x6e\x6f\x6e\x65\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\ +\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\ +\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\ +\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\ \x00\x00\x06\xdd\ \x00\ \x00\x22\x8f\x78\x9c\xed\x59\xdb\x6e\xe3\x46\x12\x7d\xf7\x57\xf4\ @@ -10577,6 +11272,10 @@ qt_resource_name = "\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x70\x00\x6c\x00\x69\x00\x74\x00\x4d\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\ \x00\x67\ +\x00\x0e\ +\x0a\xa2\x3b\x27\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ \x07\x4a\x92\xc7\ \x00\x41\ @@ -10633,6 +11332,16 @@ qt_resource_name = "\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\ \x00\x67\ +\x00\x13\ +\x06\x32\xe8\x47\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x48\x00\x6f\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x73\ +\x00\x76\x00\x67\ +\x00\x1a\ +\x0e\x5f\x91\x67\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x4e\x00\x6f\x00\x6e\x00\x4d\x00\x61\x00\x6e\ +\x00\x69\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x14\ \x02\xc8\x0e\x47\ \x00\x41\ @@ -10642,8 +11351,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x15\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x32\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1d\x00\x00\x00\x15\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x04\ \x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x01\x60\x78\ \x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x20\ @@ -10662,29 +11371,32 @@ 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\x4c\x00\x01\x00\x00\x00\x01\x00\x02\x4b\x1c\ -\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x02\x0d\x4d\ +\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\x16\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x42\ -\x00\x00\x05\x1e\x00\x01\x00\x00\x00\x01\x00\x02\x44\x4a\ +\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\x04\x98\x00\x00\x00\x00\x00\x01\x00\x02\x27\x27\ -\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\ +\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\x05\xec\x00\x01\x00\x00\x00\x01\x00\x02\x76\xad\ +\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\xc8\x00\x01\x00\x00\x00\x01\x00\x02\x36\x95\ +\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\x04\xf6\x00\x01\x00\x00\x00\x01\x00\x02\x3b\xe5\ -\x00\x00\x05\x76\x00\x00\x00\x00\x00\x01\x00\x02\x51\xf6\ +\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\xc0\x00\x01\x00\x00\x00\x01\x00\x02\x6e\x33\ -\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x63\xf9\ -\x00\x00\x04\x78\x00\x01\x00\x00\x00\x01\x00\x02\x21\x0f\ +\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\ diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index bd0feb54e..75d3a9b49 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -67,6 +67,7 @@ class ArchWorkbench(Workbench): self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape", "Arch_CloseHoles"] + self.calctools = ["Arch_Check"] # draft tools self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", @@ -86,6 +87,7 @@ class ArchWorkbench(Workbench): self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) self.appendToolbar(str(DraftTools.translate("arch","Draft mod tools")),self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) + self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Calculation Tools"))],self.calctools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Draft")),str(DraftTools.translate("arch","Context Tools"))],self.draftcontexttools) diff --git a/src/Mod/Arch/Makefile.am b/src/Mod/Arch/Makefile.am index e30ec2a6a..89d59669f 100644 --- a/src/Mod/Arch/Makefile.am +++ b/src/Mod/Arch/Makefile.am @@ -62,6 +62,9 @@ EXTRA_DIST = \ Resources/icons/Arch_Axis.svg \ Resources/icons/Arch_Axis_Tree.svg \ Resources/icons/Arch_Roof.svg \ - Resources/icons/Arch_Roof_Tree.svg + Resources/icons/Arch_Roof_Tree.svg \ + Resources/icons/Arch_CloseHoles.svg \ + Resources/icons/Arch_Check.svg \ + Resources/icons/Arch_SelectNonManifold.svg \ Resources/ui/archprefs-base.ui diff --git a/src/Mod/Arch/Resources/Arch.qrc b/src/Mod/Arch/Resources/Arch.qrc index b3667134c..63e079000 100644 --- a/src/Mod/Arch/Resources/Arch.qrc +++ b/src/Mod/Arch/Resources/Arch.qrc @@ -26,6 +26,9 @@ icons/Arch_Axis_Tree.svg icons/Arch_Roof.svg icons/Arch_Roof_Tree.svg + icons/Arch_CloseHoles.svg + icons/Arch_Check.svg + icons/Arch_SelectNonManifold.svg ui/archprefs-base.ui translations/Arch_af.qm translations/Arch_de.qm diff --git a/src/Mod/Arch/Resources/icons/Arch_Check.svg b/src/Mod/Arch/Resources/icons/Arch_Check.svg new file mode 100644 index 000000000..61be1a1b4 --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_Check.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg b/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg new file mode 100644 index 000000000..c0fcbf1dd --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg b/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg new file mode 100644 index 000000000..eb39166fa --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 200e9fbbd..0f4a0f7a8 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -278,6 +278,15 @@ def getGroupContents(objectslist,walls=False): newlist.append(o) return newlist +def removeHidden(objectslist): + """removeHidden(objectslist): removes hidden objects from the list""" + newlist = objectslist[:] + for o in objectslist: + if o.ViewObject: + if not o.ViewObject.isVisible(): + newlist.remove(o) + return newlist + def printShape(shape): """prints detailed information of a shape""" print "solids: ", len(shape.Solids) From 625151067c63041e979ecf82a2dba49b5baf1aee Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 22 Jul 2012 20:01:45 -0300 Subject: [PATCH 457/517] 0000802: Draft Scale --- src/Mod/Draft/Draft.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 0f4a0f7a8..8bbee59a4 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -356,6 +356,8 @@ def formatObject(target,origin=None): setattr(obrep,p,val) if matchrep.DisplayMode in obrep.listDisplayModes(): obrep.DisplayMode = matchrep.DisplayMode + if hasattr(matchrep,"DiffuseColor") and hasattr(obrep,"DiffuseColor"): + obrep.DiffuseColor = matchrep.DiffuseColor def getSelection(): "getSelection(): returns the current FreeCAD selection" @@ -1066,7 +1068,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy for o in objectslist: o.ViewObject.hide() if gui: - _ViewProviderDraftPart(obj.ViewObject) + _ViewProviderClone(obj.ViewObject) formatObject(obj,objectslist[-1]) select(obj) return obj From acb1205d5d9a477ecf8a93449d5cc5cce27b1f09 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 28 Jul 2012 16:01:46 +0200 Subject: [PATCH 458/517] Allow also other file types for group icons in preference page when size is 96x96 --- src/Gui/DlgPreferencesImp.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp index 1e52e00f4..e841e9b18 100644 --- a/src/Gui/DlgPreferencesImp.cpp +++ b/src/Gui/DlgPreferencesImp.cpp @@ -25,6 +25,7 @@ #ifndef _PreComp_ # include # include +# include # include #endif @@ -89,6 +90,15 @@ void DlgPreferencesImp::setupPages() } fileName = std::string("preferences-") + fileName; QPixmap icon = Gui::BitmapFactory().pixmapFromSvg(fileName.c_str(), QSize(96,96)); + if (icon.isNull()) { + icon = Gui::BitmapFactory().pixmap(fileName.c_str()); + if (icon.isNull()) { + qWarning() << "No group icon found for " << fileName.c_str(); + } + else if (icon.size() != QSize(96,96)) { + qWarning() << "Group icon for " << fileName.c_str() << " is not of size 96x96"; + } + } item->setIcon(icon); item->setTextAlignment(Qt::AlignHCenter); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); From 78cbe72dee21e6176bb09dd8a871f1ead410c052 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 31 Jul 2012 11:23:36 +0200 Subject: [PATCH 459/517] 0000807: Image plane duplication --- src/App/Document.cpp | 8 ++++---- src/App/PropertyFile.cpp | 13 ++++++++----- src/Gui/CommandDoc.cpp | 10 +++++----- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index cba2e757b..86b9ef79c 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1516,10 +1516,10 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::mapgetNameInDocument(); if (!keepdigitsatend) { - size_t lastpos = objname.length()-1; - while (objname[lastpos] >= 48 && objname[lastpos] <= 57) - lastpos--; - objname = objname.substr(0, lastpos+1); + size_t lastpos = objname.length()-1; + while (objname[lastpos] >= 48 && objname[lastpos] <= 57) + lastpos--; + objname = objname.substr(0, lastpos+1); } DocumentObject* copy = addObject(obj->getTypeId().getName(),objname.c_str()); if (!copy) return 0; diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index 52278ea99..934023272 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -346,10 +346,10 @@ void PropertyFileIncluded::RestoreDocFile(Base::Reader &reader) Property *PropertyFileIncluded::Copy(void) const { - PropertyFileIncluded *p= new PropertyFileIncluded(); + PropertyFileIncluded *prop = new PropertyFileIncluded(); // remember the base name - p->_BaseFileName = _BaseFileName; + prop->_BaseFileName = _BaseFileName; if (!_cValue.empty()) { Base::FileInfo file(_cValue); @@ -361,11 +361,11 @@ Property *PropertyFileIncluded::Copy(void) const bool done = file.renameFile(NewName.filePath().c_str()); assert(done); // remember the new name for the Undo - Base::Console().Log("Copy this=%p Before=%s After=%s\n",p,p->_cValue.c_str(),NewName.filePath().c_str()); - p->_cValue = NewName.filePath().c_str(); + Base::Console().Log("Copy this=%p Before=%s After=%s\n",prop,prop->_cValue.c_str(),NewName.filePath().c_str()); + prop->_cValue = NewName.filePath().c_str(); } - return p; + return prop; } void PropertyFileIncluded::Paste(const Property &from) @@ -376,6 +376,9 @@ void PropertyFileIncluded::Paste(const Property &from) file.deleteFile(); const PropertyFileIncluded &fileInc = dynamic_cast(from); + // set the base name + _BaseFileName = fileInc._BaseFileName; + if (!fileInc._cValue.empty()) { // move the saved files back in place Base::FileInfo NewFile(fileInc._cValue); diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 6d3b01a34..5586fff6f 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -894,9 +894,9 @@ bool StdCmdPaste::isActive(void) return getMainWindow()->canInsertFromMimeData(mime); } -DEF_STD_CMD_A(StdCmdDDuplicateSelection); +DEF_STD_CMD_A(StdCmdDuplicateSelection); -StdCmdDDuplicateSelection::StdCmdDDuplicateSelection() +StdCmdDuplicateSelection::StdCmdDuplicateSelection() :Command("Std_DuplicateSelection") { sAppModule = "Edit"; @@ -907,7 +907,7 @@ StdCmdDDuplicateSelection::StdCmdDDuplicateSelection() sStatusTip = QT_TR_NOOP("Put duplicates of the selected objects to the active document"); } -void StdCmdDDuplicateSelection::activated(int iMsg) +void StdCmdDuplicateSelection::activated(int iMsg) { App::Document* act = App::GetApplication().getActiveDocument(); if (!act) @@ -964,7 +964,7 @@ void StdCmdDDuplicateSelection::activated(int iMsg) } } -bool StdCmdDDuplicateSelection::isActive(void) +bool StdCmdDuplicateSelection::isActive(void) { return Gui::Selection().hasSelection(); } @@ -1275,7 +1275,7 @@ void CreateDocCommands(void) rcCmdMgr.addCommand(new StdCmdCut()); rcCmdMgr.addCommand(new StdCmdCopy()); rcCmdMgr.addCommand(new StdCmdPaste()); - rcCmdMgr.addCommand(new StdCmdDDuplicateSelection()); + rcCmdMgr.addCommand(new StdCmdDuplicateSelection()); rcCmdMgr.addCommand(new StdCmdSelectAll()); rcCmdMgr.addCommand(new StdCmdDelete()); rcCmdMgr.addCommand(new StdCmdRefresh()); From bdc926c7045c61a4f9d003d5fc4a1472c67f3e02 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 1 Aug 2012 18:15:34 -0300 Subject: [PATCH 460/517] Arch: improvements to section plane wireframe rendering --- src/Mod/Arch/ArchCommands.py | 46 ++++++++++++++++++++++++++++++++ src/Mod/Arch/ArchSectionPlane.py | 31 +++++++++++++++------ src/Mod/Arch/ArchVRM.py | 41 ++++------------------------ 3 files changed, 74 insertions(+), 44 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index f0754afa2..8ee62c546 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -262,6 +262,52 @@ 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): + print "No objects are cut by the plane" + return 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) + return cutface,cutvolume + + 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''' diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 86a346357..97fe2023d 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -186,7 +186,7 @@ class _ArchDrawingView: obj.addProperty("App::PropertyEnumeration","RenderingMode","Drawing View","The rendering mode to use") 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.Proxy = self self.Type = "DrawingView" @@ -224,18 +224,33 @@ class _ArchDrawingView: else: # render using the Drawing module - import Drawing + import Drawing, Part shapes = [] + p = FreeCAD.Placement(obj.Source.Placement) + direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1)) for o in objs: if o.isDerivedFrom("Part::Feature"): - shapes.append(o.Shape) - if shapes: - base = shapes.pop() - for sh in shapes: - base = base.fuse(sh) - svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction)) + shapes.extend(o.Shape.Solids) + cutface,cutvolume = ArchCommands.getCutVolume(obj.Source.Shape.copy(),shapes) + if cutvolume: + nsh = [] + for sh in shapes: + for sol in sh.Solids: + c = sol.cut(cutvolume) + nsh.append(c) + shapes = nsh + base = Part.makeCompound(shapes) + #if shapes: + # base = shapes.pop().copy() + #for sh in shapes: + # try: + # base = base.fuse(sh) + # except: + # print "unable to fuse, passing..." + svgf = Drawing.projectToSVG(base,direction) if svgf: svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') + svgf = svgf.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') svgf = svgf.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px') svg += svgf diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index 91edfed56..b54b0446f 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -228,42 +228,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 = ArchCommands.getCutVolume(cutplane,shps) + if cutface and cutvolume: shapes = [] faces = [] sections = [] From 88ea348623a17a09010228f8d4eb180ca7f084fe Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 1 Aug 2012 18:53:27 -0300 Subject: [PATCH 461/517] 0000802: Fixed again --- src/Mod/Draft/Draft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 8bbee59a4..d9e4d0a99 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1660,10 +1660,10 @@ def clone(obj,delta=None): _Clone(cl) if gui: _ViewProviderClone(cl.ViewObject) - formatObject(cl,obj[0]) cl.Objects = obj if delta: cl.Placement.move(delta) + formatObject(cl,obj[0]) return cl def heal(objlist=None,delete=True,reparent=True): From 80c9086fc334429700466e2fe3c160cf10089c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 29 Jun 2012 13:22:14 +0200 Subject: [PATCH 462/517] Started ship simulations workbench --- src/Mod/Ship/CMakeLists.txt | 23 +- src/Mod/Ship/Icons/Sim.xpm | 336 ++++ src/Mod/Ship/Icons/SimCreateIco.png | Bin 0 -> 14469 bytes src/Mod/Ship/Icons/SimCreateIco.xcf | Bin 0 -> 51656 bytes src/Mod/Ship/Icons/SimCreateIco.xpm | 2265 +++++++++++++++++++++++++++ src/Mod/Ship/Icons/SimIco.xcf | Bin 0 -> 47149 bytes src/Mod/Ship/InitGui.py | 8 +- src/Mod/Ship/Makefile.am | 9 + src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/SimInstance.py | 617 ++++++++ src/Mod/Ship/simCreate/TaskPanel.py | 125 ++ src/Mod/Ship/simCreate/TaskPanel.ui | 182 +++ src/Mod/Ship/simCreate/__init__.py | 36 + 13 files changed, 3610 insertions(+), 4 deletions(-) create mode 100644 src/Mod/Ship/Icons/Sim.xpm create mode 100644 src/Mod/Ship/Icons/SimCreateIco.png create mode 100644 src/Mod/Ship/Icons/SimCreateIco.xcf create mode 100644 src/Mod/Ship/Icons/SimCreateIco.xpm create mode 100644 src/Mod/Ship/Icons/SimIco.xcf create mode 100644 src/Mod/Ship/SimInstance.py create mode 100644 src/Mod/Ship/simCreate/TaskPanel.py create mode 100644 src/Mod/Ship/simCreate/TaskPanel.ui create mode 100644 src/Mod/Ship/simCreate/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 006226966..fc71cb055 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -2,6 +2,7 @@ SET(ShipMain_SRCS InitGui.py ShipGui.py Instance.py + SimInstance.py TankInstance.py ) SOURCE_GROUP("" FILES ${ShipMain_SRCS}) @@ -36,6 +37,11 @@ SET(ShipIcons_SRCS Icons/Weight.png Icons/Weight.xcf Icons/Weight.xpm + Icons/SimIco.xcf + Icons/Sim.xpm + Icons/SimCreateIco.png + Icons/SimCreateIco.xcf + Icons/SimCreateIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -121,9 +127,16 @@ SET(ShipGZ_SRCS tankGZ/TaskPanel.py tankGZ/TaskPanel.ui ) -SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) +SOURCE_GROUP("shipgz" FILES ${ShipGZ_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS}) +SET(SimCreate_SRCS + simCreate/__init__.py + simCreate/TaskPanel.py + simCreate/TaskPanel.ui +) +SOURCE_GROUP("simcreate" FILES ${SimCreate_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -197,6 +210,12 @@ INSTALL( DESTINATION Mod/Ship/tankGZ ) +INSTALL( + FILES + ${SimCreate_SRCS} + DESTINATION + Mod/Ship/simCreate +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/Icons/Sim.xpm b/src/Mod/Ship/Icons/Sim.xpm new file mode 100644 index 000000000..effc4026f --- /dev/null +++ b/src/Mod/Ship/Icons/Sim.xpm @@ -0,0 +1,336 @@ +/* XPM */ +static char * Sim_xpm[] = { +"32 32 301 2", +" c None", +". c #CCCCCC", +"+ c #A9A9A9", +"@ c #989898", +"# c #A1A1A1", +"$ c #C3C3C3", +"% c #C1C0C1", +"& c #BFBFBF", +"* c #A7A7A7", +"= c #808080", +"- c #5C5C5C", +"; c #565655", +"> c #4E4E4E", +", c #676767", +"' c #898989", +") c #B6B5B6", +"! c #BABABA", +"~ c #B9B9B9", +"{ c #A5A5A5", +"] c #7E7E7E", +"^ c #595A59", +"/ c #575656", +"( c #535353", +"_ c #505050", +": c #4D4D4C", +"< c #474747", +"[ c #404040", +"} c #4D4D4D", +"| c #787878", +"1 c #B8B7B8", +"2 c #B6B6B6", +"3 c #888888", +"4 c #7C7C7C", +"5 c #575657", +"6 c #535354", +"7 c #4E4D4E", +"8 c #4A4A4A", +"9 c #444444", +"0 c #414141", +"a c #3E3E3E", +"b c #393938", +"c c #313131", +"d c #393939", +"e c #636363", +"f c #ABABAB", +"g c #B3B3B3", +"h c #848484", +"i c #787979", +"j c #545454", +"k c #515151", +"l c #4B4B4B", +"m c #484748", +"n c #3B3B3B", +"o c #383838", +"p c #353535", +"q c #323232", +"r c #2F2F2E", +"s c #2A2A2A", +"t c #222323", +"u c #252625", +"v c #AFAFAF", +"w c #767676", +"x c #484848", +"y c #454545", +"z c #424242", +"A c #3F3F3E", +"B c #3B3B3C", +"C c #393838", +"D c #2F2F2F", +"E c #2C2C2C", +"F c #292929", +"G c #262626", +"H c #222222", +"I c #1F1F20", +"J c #171716", +"K c #959595", +"L c #747474", +"M c #4E4E4F", +"N c #4C4B4C", +"O c #484849", +"P c #424243", +"Q c #282828", +"R c #525251", +"S c #373737", +"T c #353636", +"U c #333233", +"V c #30302F", +"W c #2C2D2D", +"X c #232323", +"Y c #201F20", +"Z c #1D1D1D", +"` c #151414", +" . c #717272", +".. c #4C4C4C", +"+. c #484949", +"@. c #464545", +"#. c #424343", +"$. c #3A3A3A", +"%. c #5D4A49", +"&. c #7E7E86", +"*. c #56569F", +"=. c #3E3E41", +"-. c #757575", +";. c #575757", +">. c #222221", +",. c #262627", +"'. c #242423", +"). c #212020", +"!. c #1A1A1A", +"~. c #121212", +"{. c #939493", +"]. c #6F6F6F", +"^. c #494949", +"/. c #464646", +"(. c #434343", +"_. c #554545", +":. c #686863", +"<. c #939394", +"[. c #BDBDBD", +"}. c #202021", +"|. c #1E1E1E", +"1. c #171718", +"2. c #0F0F0F", +"3. c #929292", +"4. c #6C6D6D", +"5. c #464746", +"6. c #525F73", +"7. c #444648", +"8. c #3D3D3D", +"9. c #2D2C2A", +"0. c #A1A2A2", +"a. c #AAACAC", +"b. c #A6A7A7", +"c. c #A8AAAA", +"d. c #AFB0B0", +"e. c #777676", +"f. c #9A9A9A", +"g. c #1B1B1B", +"h. c #181818", +"i. c #0C0C0C", +"j. c #909090", +"k. c #6B6A6B", +"l. c #55657E", +"m. c #6990FB", +"n. c #6483CD", +"o. c #5871B2", +"p. c #434E7E", +"q. c #A97C76", +"r. c #AB7777", +"s. c #AC7070", +"t. c #A26565", +"u. c #805C5C", +"v. c #848686", +"w. c #424342", +"x. c #151515", +"y. c #0A0909", +"z. c #8F8F8F", +"A. c #676868", +"B. c #3B3A3A", +"C. c #383738", +"D. c #353534", +"E. c #45525F", +"F. c #6367AC", +"G. c #804682", +"H. c #942A39", +"I. c #991312", +"J. c #540901", +"K. c #393742", +"L. c #1C1C1C", +"M. c #191919", +"N. c #161515", +"O. c #121313", +"P. c #070707", +"Q. c #8D8E8D", +"R. c #656566", +"S. c #3E3F3F", +"T. c #2F2E2F", +"U. c #353838", +"V. c #35496A", +"W. c #3E4D88", +"X. c #354889", +"Y. c #5573D7", +"Z. c #5D80FB", +"`. c #374899", +" + c #293338", +".+ c #101010", +"++ c #0D0D0D", +"@+ c #040404", +"#+ c #8C8C8C", +"$+ c #8B8B8B", +"%+ c #4B4A4B", +"&+ c #303030", +"*+ c #333232", +"=+ c #2F2F30", +"-+ c #232223", +";+ c #1A1919", +">+ c #2E3949", +",+ c #5C7BA3", +"'+ c #36467D", +")+ c #536F93", +"!+ c #0A0A0A", +"~+ c #010101", +"{+ c #C1C1C1", +"]+ c #B8B8B8", +"^+ c #A0A0A0", +"/+ c #3F3F3F", +"(+ c #222122", +"_+ c #202020", +":+ c #161717", +"<+ c #141414", +"[+ c #111011", +"}+ c #0D0E0E", +"|+ c #0B0B0A", +"1+ c #000000", +"2+ c #525252", +"3+ c #686868", +"4+ c #ADADAD", +"5+ c #9E9F9F", +"6+ c #6D6D6D", +"7+ c #3C3C3C", +"8+ c #131414", +"9+ c #111111", +"0+ c #0E0E0E", +"a+ c #0B0B0B", +"b+ c #080708", +"c+ c #050504", +"d+ c #4C4D4C", +"e+ c #4D4C4D", +"f+ c #494A4A", +"g+ c #454444", +"h+ c #9D9D9D", +"i+ c #9E9E9E", +"j+ c #AEAEAE", +"k+ c #BEBEBF", +"l+ c #BEBDBD", +"m+ c #979797", +"n+ c #6A6B6A", +"o+ c #3F3F40", +"p+ c #020202", +"q+ c #030303", +"r+ c #878787", +"s+ c #69696A", +"t+ c #868685", +"u+ c #646464", +"v+ c #474647", +"w+ c #656565", +"x+ c #9E9F9E", +"y+ c #A8A8A8", +"z+ c #AFAFAE", +"A+ c #A4A4A4", +"B+ c #7A7A7A", +"C+ c #969696", +"D+ c #363636", +"E+ c #777776", +"F+ c #8C8D8D", +"G+ c #7D7D7D", +"H+ c #5E5E5E", +"I+ c #4F4F50", +"J+ c #808181", +"K+ c #707070", +"L+ c #909191", +"M+ c #9C9C9C", +"N+ c #787877", +"O+ c #696969", +"P+ c #616161", +"Q+ c #6E6E6E", +"R+ c #7C7B7C", +"S+ c #777677", +"T+ c #6F6E6E", +"U+ c #595959", +"V+ c #717171", +"W+ c #8D8D8D", +"X+ c #515051", +"Y+ c #49494A", +"Z+ c #4B4A4A", +"`+ c #606060", +" @ c #6A6A6A", +".@ c #616162", +"+@ c #6C6D6C", +"@@ c #767777", +"#@ c #727272", +"$@ c #6B6B6B", +"%@ c #828283", +"&@ c #757475", +"*@ c #444545", +"=@ c #565656", +"-@ c #5A595A", +";@ c #666666", +">@ c #878687", +",@ c #8A8A8A", +"'@ c #797979", +")@ c #444344", +"!@ c #7F8080", +"~@ c #737373", +"{@ c #484747", +"]@ c #707170", +"^@ c #7F7F7F", +"/@ c #676867", +"(@ c #4D4C4C", +"_@ c #5F5F5F", +":@ c #434444", +" ", +" ", +" . + ", +" @ # $ % & * ", +" = - ; > , ' ) ! ~ { ", +" ] ^ / ( _ : < [ } | # 1 2 # 3 ", +" 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ", +" i j k 7 l m 9 0 a n o p q r s t u < | v ", +" w k > l x y z A B C p q D E F G H I J K ", +" L M N O y P Q R S T U V W F G X Y Z ` K ", +" ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ", +" ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ", +" 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ", +" k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ", +" A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ", +" R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ", +" $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ", +" {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ", +" k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ", +" %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ", +" s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ", +" E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ", +" L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ", +" V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ", +" ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ", +" ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ", +" e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ", +" - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ", +" =@_@O+L ~@#@~@L _ 9 9 :@ ", +" ;.H+ @-._ (. ", +" ", +" "}; diff --git a/src/Mod/Ship/Icons/SimCreateIco.png b/src/Mod/Ship/Icons/SimCreateIco.png new file mode 100644 index 0000000000000000000000000000000000000000..838b46e8bbceacc2d0a0a53dc71b6a84106e6f22 GIT binary patch literal 14469 zcmZu&WmFqov<>dA1&X`7yAxcByE_zuyL)lB;-$D3cXu!D#ohhod++Z{*5t0tnl(9d z&%OJ|-icCCl0iWvKm-5)C~~rrYTz;OzXKi?{Mj#TG7cUfT-9X60o7AP$KWrprt&h9 zfaw3;d#i_(;4=u$vO2B+020=J2LvE12OoSA4kV{21-A~1kB*PjMo%0DKJ^78r45pB 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%0D<<&U}Kdvi(&NLGqjLKO6uED9@v}J>m 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 HzwEyOS-3zg literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/SimCreateIco.xpm b/src/Mod/Ship/Icons/SimCreateIco.xpm new file mode 100644 index 000000000..a1847db91 --- /dev/null +++ b/src/Mod/Ship/Icons/SimCreateIco.xpm @@ -0,0 +1,2265 @@ +/* XPM */ +static char * SimCreateIco_xpm[] = { +"128 128 2134 2", +" c None", +". c #7B7B7B", +"+ c #EAEAEA", +"@ c #E9EAE9", +"# c #E9E9E9", +"$ c #E9E9E8", +"% c #D9D9D9", +"& c #EAEAE9", +"* c #E8E9E8", +"= c #E9E8E8", +"- c #E8E8E8", +"; c #E8E8E7", +"> c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #BEBEF1", +"J) c #C7C6C6", +"K) c #C5C6C6", +"L) c #C6C5C6", +"M) c #B2B3B3", +"N) c #949494", +"O) c #7E7E7E", +"P) c #171718", +"Q) c #0D0E0D", +"R) c #09090A", +"S) c #080909", +"T) c #070607", +"U) c #060504", +"V) c #020303", +"W) c #B3B3B4", +"X) c #BBBBF4", +"Y) c #B4B4F7", +"Z) c #666666", +"`) c #9F9F9F", +" ! c #C4C3C4", +".! c #C2C2C3", +"+! c #C0C0BF", +"@! c #BCBBBB", +"#! c #909191", +"$! c #141516", +"%! c #121211", +"&! c #0F0E0F", +"*! c #090908", +"=! c #070606", +"-! c #050605", +";! c #020101", +">! c #B2B3B2", +",! c #A5A5BB", +"'! c #B0B0F9", +")! c #AFAFFA", +"!! c #4D4E4D", +"~! c #929292", +"{! c #C2C3C2", +"]! c #C1C2C2", +"^! c #C2C1C2", +"/! c #0B0C0B", +"(! c #030202", +"_! c #000100", +":! c #B3B2B2", +"~ c #ACACAD", +",~ c #A4A4A3", +"'~ c #A1A0A0", +")~ c #9E9D9D", +"!~ c #040405", +"~~ c #AFAFD2", +"{~ c #9393FD", +"]~ c #7777FF", +"^~ c #8181FF", +"/~ c #A9A9F8", +"(~ c #CECEFB", +"_~ c #CCCCFD", +":~ c #AEAEAF", +"<~ c #8F8F8F", +"[~ c #A9A9AA", +"}~ c #A3A2A2", +"|~ c #AEAFAF", +"1~ c #B3B4B3", +"2~ c #09090B", +"3~ c #AEAEDA", +"4~ c #8B8BFD", +"5~ c #7373FF", +"6~ c #7979FF", +"7~ c #9E9EF6", +"8~ c #8E8EAE", +"9~ c #BDBDFC", +"0~ c #B9B9FE", +"a~ c #BABAB9", +"b~ c #B2B2B3", +"c~ c #B1B3B2", +"d~ c #B1B2B1", +"e~ c #ADACAB", +"f~ c #AAA9AA", +"g~ c #888988", +"h~ c #9E9D9E", +"i~ c #A0A0A1", +"j~ c #A4A3A3", +"k~ c #A7A8A8", +"l~ c #B4B4B3", +"m~ c #B1B2B2", +"n~ c #ADADAE", +"o~ c #969595", +"p~ c #808083", +"q~ c #ABABDD", +"r~ c #8989FD", +"s~ c #7171FF", +"t~ c #6F6FFF", +"u~ c #8C8CFD", +"v~ c #9494C2", +"w~ c #57575E", +"x~ c #CFCFF8", +"y~ c #9595FE", +"z~ c #A0A0FD", +"A~ c #DBDBF8", +"B~ c #7D7C7C", +"C~ c #989898", +"D~ c #AEADAD", +"E~ c #ADACAD", +"F~ c #ACABAC", +"G~ c #9C9D9D", +"H~ c #7F7F7E", +"I~ c #565756", +"J~ c #989998", +"K~ c #A0A1A0", +"L~ c #A4A3A4", +"M~ c #B0B1B1", +"N~ c #B1B0B1", +"O~ c #AEAED9", +"P~ c #6B6BFF", +"Q~ c #7575FF", +"R~ c #9696EF", +"S~ c #7B7B95", +"T~ c #CACAEE", +"U~ c #ACACFD", +"V~ c #6363FF", +"W~ c #A2A2FD", +"X~ c #B6B7B7", +"Y~ c #787877", +"Z~ c #757676", +"`~ c #747474", +" { c #8C8D8C", +".{ c #9D9C9D", +"+{ c #A8A8A7", +"@{ c #545353", +"#{ c #989797", +"${ c #9F9F9E", +"%{ c #A0A1A1", +"&{ c #8C8C8B", +"*{ c #706F70", +"={ c #B1B1B0", +"-{ c #B0B0B1", +";{ c #AEAED3", +">{ c #8E8EFD", +",{ c #6565FF", +"'{ c #9999EE", +"){ c #7C7C94", +"!{ c #56565C", +"~{ c #5A5A5F", +"{{ c #8F8FA5", +"]{ c #AFAFF8", +"^{ c #4747FF", +"/{ c #B2B2FC", +"({ c #B4B5B5", +"_{ c #777677", +":{ c #727172", +"<{ c #6B6C6C", +"[{ c #80807F", +"}{ c #919090", +"|{ c #9E9E9F", +"1{ c #A4A5A4", +"2{ c #A6A7A6", +"3{ c #898888", +"4{ c #6E6E6D", +"5{ c #5F5F60", +"6{ c #797A7A", +"7{ c #7E7F7F", +"8{ c #777777", +"9{ c #616060", +"0{ c #5A5A66", +"a{ c #8B8BC5", +"b{ c #8484FD", +"c{ c #6767FF", +"d{ c #5F5FFF", +"e{ c #9494F2", +"f{ c #9A9ACA", +"g{ c #7B7B90", +"h{ c #64636D", +"i{ c #58585E", +"j{ c #57575D", +"k{ c #65656D", +"l{ c #7F7F8F", +"m{ c #A2A2C8", +"n{ c #A1A1F1", +"o{ c #3131FF", +"p{ c #BDBDEF", +"q{ c #767777", +"r{ c #767675", +"s{ c #717171", +"t{ c #6E6E6F", +"u{ c #6C6D6D", +"v{ c #6A6969", +"w{ c #676767", +"x{ c #656665", +"y{ c #676766", +"z{ c #727373", +"A{ c #5C5C5B", +"B{ c #6A6A6B", +"C{ c #7B7A7B", +"D{ c #626262", +"E{ c #575761", +"F{ c #8686BC", +"G{ c #8888FB", +"H{ c #6969FF", +"I{ c #6161FF", +"J{ c #5D5DFF", +"K{ c #5959FF", +"L{ c #8282FD", +"M{ c #9898F3", +"N{ c #A2A2E5", +"O{ c #A1A1DB", +"P{ c #A2A2D9", +"Q{ c #A7A7E3", +"R{ c #9F9FF3", +"S{ c #8080FD", +"T{ c #5353FF", +"U{ c #3939FF", +"V{ c #9090FC", +"W{ c #CFCFF5", +"X{ c #B1B1B2", +"Y{ c #777676", +"Z{ c #747575", +"`{ c #717271", +" ] c #6D6E6D", +".] c #6B6B6A", +"+] c #686767", +"@] c #646363", +"#] c #5D5D5C", +"$] c #777776", +"%] c #878788", +"&] c #969596", +"*] c #9A9898", +"=] c #9A9A99", +"-] c #646463", +";] c #7B7C7C", +">] c #7B7C7B", +",] c #707170", +"'] c #575756", +")] c #515159", +"!] c #8181B4", +"~] c #8686FB", +"{] c #5B5BFF", +"]] c #5757FF", +"^] c #4D4DFF", +"/] c #3B3BFF", +"(] c #3333FF", +"_] c #5F5FFD", +":] c #B1B1E8", +"<] c #ABACAB", +"[] c #787777", +"}] c #717170", +"|] c #696869", +"1] c #666565", +"2] c #646465", +"3] c #636363", +"4] c #605F5F", +"5] c #575758", +"6] c #8B8A8B", +"7] c #949393", +"8] c #7D7DAF", +"9] c #4F4FFF", +"0] c #4B4BFF", +"a] c #4343FF", +"b] c #4141FF", +"c] c #3D3DFF", +"d] c #3535FF", +"e] c #4545FF", +"f] c #9A9AFD", +"g] c #A8A8BB", +"h] c #A5A4A4", +"i] c #969797", +"j] c #787778", +"k] c #636364", +"l] c #606161", +"m] c #5D5C5C", +"n] c #585958", +"o] c #5C5C5D", +"p] c #868787", +"q] c #7F807F", +"r] c #53535D", +"s] c #7E7EB0", +"t] c #6D6DFF", +"u] c #5151FF", +"v] c #4949FF", +"w] c #3F3FFF", +"x] c #3737FF", +"y] c #9191FF", +"z] c #A6A6C2", +"A] c #747579", +"B] c #ADADAC", +"C] c #A8A9A8", +"D] c #9A9999", +"E] c #6A6A69", +"F] c #626261", +"G] c #5F605F", +"H] c #818081", +"I] c #868685", +"J] c #51515B", +"K] c #7C7CAF", +"L] c #8686F8", +"M] c #5555FF", +"N] c #A5A5F4", +"O] c #A6A6C1", +"P] c #737377", +"Q] c #7C7B7B", +"R] c #939292", +"S] c #8A8B8A", +"T] c #676768", +"U] c #848485", +"V] c #818281", +"W] c #7F7E7E", +"X] c #7B7B7A", +"Y] c #4E4E55", +"Z] c #7979AC", +"`] c #8484F7", +" ^ c #8686FC", +".^ c #ABABDA", +"+^ c #9393A5", +"@^ c #717174", +"#^ c #626263", +"$^ c #A5A6A6", +"%^ c #9F9FA0", +"&^ c #8B8C8B", +"*^ c #818180", +"=^ c #7E7D7E", +"-^ c #7C7C7D", +";^ c #787978", +">^ c #636463", +",^ c #4C4C51", +"'^ c #7676A6", +")^ c #8484F8", +"!^ c #8686FD", +"~^ c #9F9FD7", +"{^ c #A3A3D9", +"]^ c #A1A1E1", +"^^ c #A6A6E1", +"/^ c #A4A4D5", +"(^ c #A0A0C0", +"_^ c #8B8B9D", +":^ c #727279", +"<^ c #616160", +"[^ c #626161", +"}^ c #7C7D7C", +"|^ c #9B9A9A", +"1^ c #666667", +"2^ c #818182", +"3^ c #7D7E7D", +"4^ c #757475", +"5^ c #4D4D53", +"6^ c #7474A6", +"7^ c #7B7BFF", +"8^ c #8585FF", +"9^ c #9494BC", +"0^ c #64646C", +"a^ c #636368", +"b^ c #67676C", +"c^ c #69686D", +"d^ c #646466", +"e^ c #5E5E5F", +"f^ c #5F6060", +"g^ c #707171", +"h^ c #807F80", +"i^ c #8E8E8F", +"j^ c #979696", +"k^ c #959594", +"l^ c #686869", +"m^ c #7F8080", +"n^ c #7E7E7F", +"o^ c #7C7D7D", +"p^ c #737374", +"q^ c #7373A4", +"r^ c #8282F8", +"s^ c #8383FF", +"t^ c #535453", +"u^ c #5B595B", +"v^ c #5F5F5E", +"w^ c #747473", +"x^ c #838384", +"y^ c #908F90", +"z^ c #919192", +"A^ c #7D7C7D", +"B^ c #818282", +"C^ c #808081", +"D^ c #7F7F80", +"E^ c #4C4C54", +"F^ c #7272A3", +"G^ c #8080F4", +"H^ c #9292C5", +"I^ c #666670", +"J^ c #5B5A5C", +"K^ c #5C5D5D", +"L^ c #828181", +"M^ c #5A595A", +"N^ c #676667", +"O^ c #8A8A8A", +"P^ c #7A7A7B", +"Q^ c #6F6FA0", +"R^ c #8080F3", +"S^ c #7D7DFF", +"T^ c #9090C5", +"U^ c #646570", +"V^ c #9E9E9D", +"W^ c #838282", +"X^ c #767576", +"Y^ c #868585", +"Z^ c #797A79", +"`^ c #737273", +" / c #46464B", +"./ c #6C6D9E", +"+/ c #7D7DF6", +"@/ c #7C7CFD", +"#/ c #8F8FC6", +"$/ c #64646F", +"%/ c #7F7E7F", +"&/ c #989897", +"*/ c #9C9D9C", +"=/ c #6B6B71", +"-/ c #7B7BAC", +";/ c #7C7CFC", +">/ c #8F8FC8", +",/ c #61616E", +"'/ c #4D4F4E", +")/ c #9C9B9C", +"!/ c #9B9B9A", +"~/ c #747479", +"{/ c #8282B0", +"]/ c #7E7EF6", +"^/ c #8C8CCB", +"// c #61616F", +"(/ c #838483", +"_/ c #8D8D8C", +":/ c #959696", +"( c #74749F", +",( c #6969F0", +"'( c #8B8BFF", +")( c #7E7EE7", +"!( c #69698A", +"~( c #717172", +"{( c #75759A", +"]( c #6D6DE5", +"^( c #8383E8", +"/( c #696987", +"(( c #737398", +"_( c #6C6CE1", +":( c #7F80E6", +"<( c #8282A1", +"[( c #737399", +"}( c #6A6AE1", +"|( c #8F8FFF", +"1( c #7C7CED", +"2( c #7F7FA2", +"3( c #757577", +"4( c #72729A", +"5( c #6464E4", +"6( c #6F6FFD", +"7( c #7979F9", +"8( c #8080A8", +"9( c #727294", +"0( c #6464E1", +"a( c #7474FD", +"b( c #7777F4", +"c( c #565675", +"d( c #5E5ED3", +"e( c #9090FD", +"f( c #8F8FFA", +"g( c #8A8AFC", +"h( c #7979ED", +"i( c #7F7FA9", +"j( c #6565ED", +"k( c #7575FE", +"l( c #8B8BD5", +"m( c #7B7BAB", +"n( c #75759D", +"o( c #7A7AB1", +"p( c #8484DC", +"q( c #7575EE", +"r( c #7E7EA9", +"s( c #747477", +"t( c #7070E7", +"u( c #6868FD", +"v( c #9898F5", +"w( c #4C4C53", +"x( c #5E5E73", +"y( c #7B7BCE", +"z( c #7474F4", +"A( c #7C7CAB", +"B( c #6565F2", +"C( c #7777FC", +"D( c #7F7FFA", +"E( c #6E6EFB", +"F( c #666699", +"G( c #56565A", +"H( c #6262F7", +"I( c #8585FA", +"J( c #8484F3", +"K( c #7070FB", +"L( c #8181E4", +"M( c #6262F5", +"N( c #8080FB", +"O( c #8383F2", +"P( c #7171FE", +"Q( c #6F6FFA", +"R( c #8181E6", +"S( c #6969EC", +"T( c #6E6EFD", +"U( c #9A9AEF", +"V( c #7878F7", +"W( c #6C6CFB", +"X( c #8080E7", +"Y( c #6464FB", +"Z( c #7E7EFB", +"`( c #9999EA", +" _ c #7F7FEA", +"._ c #6B6BFC", +"+_ c #7B7BE6", +"@_ c #6C6BE5", +"#_ c #6161FE", +"$_ c #8585F2", +"%_ c #8D8DEC", +"&_ c #8282EB", +"*_ c #7777F2", +"=_ c #6969FE", +"-_ c #7A7AE7", +";_ c #7979E6", +">_ c #6C6CF1", +",_ c #6464F9", +"'_ c #6666FB", +")_ c #6565FA", +"!_ c #7070F1", +"~_ c #8787E7", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# I) ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.J)K)L)f#$$$$$$M)N)O)) 3@%%Q'P)E%+&}%n&^*^*t*6=a%`**,M=Q)M-!)f,%'R)>,S)-'T)6'U)F)7)V)8)o)G)z)z)W)W)/#X* X)Y) ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)z)W)>!/#,!'!)! ", +" o+I.4.m%[+ +=$G#|.!!|.k.M&|.F.k.<+!!(@G.H.4._#_#I.n.:#o+C+.+++2+P.~!/#/#/#/#/#B#R*i*y*D*{ E${!(%]!^!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;/!-,%)R)r'r'-'6'=)w).)()(!g)_!z)z)z)z):!M)>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z)x!y!z!A!B! C! ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#D!E!F!G!E*j*H!3*W)(&{ | =&x*[=I!/#/#/#J!Z&Z&Z&c%c%e F>K!,,L!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)M!N!O!P!Q! R!R! ", +" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)G)$~%~&~P!*~ R!=~ ", +" P.G%[;o*F!-~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%;~x*=&7.E*2*{ >~| y*^&,~'~)~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)!~~~{~]~^~/~ (~_~ ", +" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*2~3~4~5~6~7~8~ 9~0~ ", +" P.a~p)3*R*/&b~c~d~X!j*e~f~E!g~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)h~i~j~x*i*T*k~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.l~l~o*M):!l*m~n~o~p~q~r~s~t~u~v~w~P.P. x~y~z~A~ ", +" P..~1~o*%@!*B~;*C~T*j*{ D~E~F~| E*G~H~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.I~-*} J~K~R*L~9&]&j~E!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&m~M~N~x!O~r~t~P~Q~R~S~P.P.P.P.P.P.P. T~U~V~W~ ", +" P.X~l*(&!*}-Y~0*Z~`~T![- {.{=&E&=&=&=&y*+{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$@{s !*. a)+~#{${%{%{/#/#e*1*/#e*&{. *{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.={/&-{;{>{t~P~,{6~'{){!{P.P.P.P.P.P.~{{{]{,{^{/{ ", +" P.({/&/&}-*+_{F=F=T!:{5.V&S.<{-*[{}{|{9&R*R*1{2{`)3{4{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 5{}*i&V&`~6{7{O):&[*D+8{Z)9{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0{a{b{P~c{,{d{5~e{f{g{h{i{j{k{l{m{n{,{o{,{p{ ", +" P.1~:~:~*+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{z{S&N)${h~${D!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M A{! Z)B{5.Z~C{[-8{-*S.)*D{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.E{F{G{s~H{,{I{J{K{c{L{M{N{O{P{Q{R{S{T{o{U{V{W{ ", +" P.X{2*>~Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]Q $]%]&]-~*]=]-~|%. S.-]v I.a+$+#+Q.P.P.P.P.P.P.P.p.s{$];]>]0*,]p.Z)1=a ']*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]!]~]s~H{c{V~d{{]]]T{T{{]V~c{V~{]^]/](]o{_]:] ", +" P.-{<]| !@[]T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M :.|]. 6]E@7]7]<~>)}-s{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]8]b{5~P~c{,{I{J{{]]]T{9]0]^{a]b]c]U{d]o{e]f]g] ", +" P.j*7.[~A*A*h]i]U&j]w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.7@o]a!D+|%+~ ~p]q]}-T!3][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.r]s]~]5~t]H{,{V~d{{]K{T{u]^]v]e]a]w]c]x]x]u]y]z]A] ", +" P.B]C]G!e*h]=&T.V*V*x*D];*8{E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#}.G]:{H]I]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J]K]L]Q~t~P~c{V~d{J{K{M]u]9]0]^{a]w]c]c]^]Q~N]O]P]1] ", +" P.o!-+-+%@!*Q]!@R]!=x*x*c+j~Q*e*S]*+T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+U]S&V]:&W]=*X]Y~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Y]Z]`]]~t~t]H{,{I{J{{]]]T{9]]]t~t]I{d{t] ^R{.^+^@^#^@] ", +" P.7.i*$^!*}-Y~0*Z~`~-*. x&,.`)_&K~%^I!e*&^}-T]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)*^D+=^-^. 6{*+;^8{-*>^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.,^'^)^6~s~t]P~c{V~d{{]K{M]u]M]!^~^{^]^^^/^(^_^:^D{! <^[^ ", +" P.=&]&]&}-*+_{F=F=T!:{5.V&S.<{5.}^&^/=/#X*|^e*s%&{!*1^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&2^:&H~3^;]X]p=*+$]0*4^T!`~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.5^6^L{7^5~t~P~H{,{I{J{K{]]T{K{8^9^0^a^b^c^d^e^A{#]9 ) 5{f^ ", +" P.2{Q*Q**+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{g^h^i^C~/=j^6.k^ ~b%l^M [+4.Q@C+p+2+P.P.P.P.a)[*m^n^o^b%!*}-*+$]F=p^-*-*-*T!`~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.Y]q^r^7^Q~s~t]H{c{V~d{{]]]M]K{s^v~k{t^N M v ..K u^:.a 0 n v^ ", +" P.c+_&_&Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]1]w^x^y^z^#!&@<~|%A^.*N 0%P.P.P.P.P.B^C^D^n^[-. !*}-[]-&F=T!-*-*-*-*-*-*-*T!`~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.E^F^G^7^]~5~t~P~c{,{I{J{K{M]K{&~H^I^O+&.%.O N ^+5]{@s r J^o]K^ ", +" P.R*D!`)L^Y{T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M M^N^[]!@+~ ~|%O^x&O)< ..n.P.V]:&D+O)b%P^6{;^8{0*`~T!-*-*-*-*-*-*-*-*-*-*-*T!`~F=5.w{9 ..&.I.P.#+Q.Q.P.w%Q^R^7^]~Q~s~t]H{,{V~d{{]]]]]S^T^U^>.i.`.&.g.#.N +.v ..s Y.r H ", +" P.[=!=V^!=!==]<~W^X^w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.}.{+< [ ~ p]Y^O'S&[-*^D^O)[-%@!*Z^@~0*F=`~`^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!`~`~V&w{1=H g.n. /./+/S^6~Q~s~t~P~c{V~d{J{K{K{@/#/$/1!2.}.-.<.O+g.P $.N I~v .. .s ", +" P.%/7]&/=]*/.{X*X*X*|^,#S&F=E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B^:&D+O)-^. !**+8{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*=/-/;/S^7^]~5~s~t]H{,{I{d{{]K{7^>/,/I.n+<%M&'/}.[.`.&.g.P N N M ']]+ ", +" P.8+v+1.Z)D+ ~,#/=1*)/!/e*s%s%,#O'F=T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+H~[-. !*v&*+q{F=`~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~/{/]/&~S^6~Q~s~t~P~c{V~d{J{{]6~^///S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ", +" P.#+8+9+#+_+w b%(/_/=+e*s%C~i]:/.}.[.<. ", +" $+P.4.g.H w{r/&{s/,#a&&{O^t/;*x&0!*+u/Z.0%P.P.P.P.P.b%. !*}-*+8{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*v/w/x/&~s^&~7^6~Q~s~t]H{c{V~d{Q~y/z/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ", +" Q.O.I.F.N w{b% ~+~|%A/U&~ !@O'S&a)B/w M o+P.b%h/!*C/8{0*D/p^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*E/F/G/&~8^^~S^6~Q~5~t~P~c{,{I{5~H/I/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ", +" P.O.M.o+g.w =*J/U&K/L/a)M/:&D+|/-^;^. !*}-*+0*N/O/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*P/Q/R/&~8^s^&~7^]~5~t~t]H{,{I{s~S/T/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ", +" P.P.P.P.p+N < =*U/*^M/O)0/-^%@P^}-v&[]0*V/W/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~P!s^&~S^]~Q~5~t~H{c{V~s~`/ (P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ", +" P.Q.#+$+M. .Z*.(%@!*. +(v&j]@(F=b/z{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(%(&~O!8^^~S^7^]~5~t~t]H{,{&(*(=(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ", +" P.#+$+a+f@H -(`~W/;(N/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/>(,(@/'(P!s^&~S^]~5~s~t]P~c{t~)(!(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ", +" P.Q.$+a+#+1.H w{< S.s{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~({(](S^'(O!8^^~S^7^]~s~t~P~c{t~^(/(<@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" P.#+a+a+P.k.s 3]w{p.s{`~T!-*-*-*-*-*-*-*-*-*-*-*((_(S^A!'(8^s^&~7^6~Q~t~t]H{t~:(<(f@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" Q. $+M.}...) Z)S.T!`~T!-*-*-*-*-*-*[(}(7^|('(P!s^&~7^6~Q~s~t]P~t~1(2(3(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" Q.o+}.M 0 Y&V&F=`~T!-*4(5(6~|(A!O!8^^~S^7^Q~5~t~P~6(7(8(P/F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" #+P.n.k.&.H w{9(0(a(y]|('(P!s^&~S^6~Q~s~t]t~b(3/P/-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ", +" Q.O.c(d(o/e(f(g(O!8^^~S^6~Q~5~t~t~h(i(P/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ", +" j(k(l(m(n(o(p(^~&~7^]~5~s~t~q(r(s(-*-*-*F=n.P.P.P.P.P.P.P.P. ", +" t(u(v( w(x(y(@/6~Q~s~t~z(A(2/-*-*-*-*F=n.P.P.P.P.P.P. ", +" B(C( D(]~5~t~E(F(G(N%5.T!T!-*F=n.P.P.P.P. ", +" H(I( J(k(s~K(L( /Q.#+#+n...w{T!n.P.P. ", +" M(N( O(P(Q(R( P.#+$+Q.P. ", +" S(T(U( V(W(X( ", +" Y(Z(`( _._+_ ", +" @_#_P($_%_&_*_=_-_ ", +" ;_>_,_'_)_!_~_ ", +" ", +" "}; diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf new file mode 100644 index 0000000000000000000000000000000000000000..d4e42da2b48d2045c836c2a6d8ee3b536ae05909 GIT binary patch literal 47149 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
    rv*yTt?^T!Y#ttn0)g)~{-$oJftK z`Xj)fqUc5dz9vmk(GnYM|E6m{g!-GL5^$(VOnXUHR72NP#iDSP?x|UE`%Iz%H2gH~ zUOlgvDgdI9V@3`e7~ZF6X!np#ib8Lto_fc2Q#5ZuLlGbk=vh=G;T%qIcIiZL;+GIi zC@z)iqk>iOV^;6G6UNVYMOAvEE`jVNlPeyi(7`V(DQ%i+N(RyzYF5>kaoik3nNWh6 zkK&>Cts6GOhKeD~rU=!l*_fmNK!pIL1(N&Y!dm)v85NtbEImDCaqNg--+l|CSvXx@ z{*D8i`ziTV@awCv*e_}?!bU$!8^qWOyTz`hNtp8Pe|-Z^Y8IZasjh_KoSet}^X-yd zTjh&;1oyoyO#?n#0lOTmo))%wl9k}|1^RQqPVr>sTI*Ywh+;W}WzSbYJ z;$67d_qM`f;Qoi)TH4U$DhTjV_NY1OrEKJviAgR+n4!fshK-_<9L9lRo|&;PQ0c#-t9-Xsy#t{XJ?kfbFGYj z=uS?U9nrTPv#`3r9s?pHqobpS_WmzQJ?riilX+q}wkNWNpci|Ghld9HU@BGp#_vMY z0OpoL!n&lKq^M&5M!G@BS%XBkpptS=Blb`ZtdGNT7*qQ0l4bm?8#Ow5>im>Udj+1N z12e8Tvtv3IMVL0C0H2AK;)0@B3k$8J27U-9EOPz!*U{%&WoTq$xE?Q?oQH?q@z7QB zCgKjKjJvfK1PUn2dm;RcjNCa0H7bsw7Sia+Yy6RO-Q>T|$Z?aVPM#P!=%r`)pPsrU zZ|C-{A8%N@@`Lx6zqe%WsLsv!$LtF8Uz_p4`^kw*7A=@JJ1(pl|5S*UX5rk~)2B`v zXKlv+8nbZm+w$R>;{8O`; zaZ}!!Fb+k72jHs;4DT1#$iH_k9XEE=FqHIqxhp~?q))d3^7~UJ(F{s0dWF6i(%HuR zkyN)O7C;}EMm?Z!SZMdIojbI}B+;r(YhS`2lOnwu(y2q+mI1g?Zn60YCgmA^*g{{| zHw^ZP39V&-jqFnm%3T!4<6H}p*5-YF{U^+wK;K)z-`B!9_hs6jZW8ouh9qRyK7z}( zV-1+&0(>Og(C6HTd8YqjxITp~y7p$RUKHIckdU_y%eZRz8iC9efWbMcQjSVbI~(&` zkT3F;!{@)PquAx2)jJpVmI$8i8-bI0{&pQq-`Be(-`p~wT^T|2w;z-2{2Pjt@3)O@ zN%XfJogp`1wzjhRlG6Om8M8;5xYxBF@W#Bk@4T~c(#V(bTQhf$METKPFvJ?#^dAu! zIk3AQ;UAQ64Q+wHHEj4R1(ev#^Y>F5Cs1tCV8urklXu;X07kic;`g*qMHzj~Fz~Z3 zZpJ&yHxyL;)q|(#fTELn^$%$;A<&-o4L%&uZ@B)Fip?WB)%Qb8f*P0Nu@PhGztINt z8=ikB-M~Z8Z@7M3%vs0}2GNgb17$aQzpffYzoB@3LM?9+$!7G&Onm)0^v_7md`f@v z^XSjox_RSMz-LYG^`G=3`X%}a;%DiHZc>vIpAbIo8TzTrRECK-(LcO7{jp$~gfVzP zzjiDjynnAJ^v5BR7-v%6&!oTW6Z*}lm*@`*eX%RikH1l3(vM&mVnLWn^tbcUZ)>98 zG1F6?0={ZxXTM^>fm9lenNg!ksz1UKc)bo>bX}#f z5L$AOX;bz)Zo7e=Vh-Zt4JLdW#}tZ{Nh;TbZZWh5U9*~xuoX&G5Q2CE34!=V!`MQR zkPwXP>UW>sR012rAdY=g-cZHQ+cS-?a6~Z_97&3f!%K)^d=$4C0%?kb5v}GkT~P>L vGj8#q6hlx|w4nzt;sLdxTHqEziiB`Y!?U4ikHazwP1h8%;NO_W|LlJOphd+3 literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index aa8a409af..442ef5f32 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -35,12 +35,16 @@ class ShipWorkbench ( Workbench ): list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Loading",list) + self.appendToolbar("Weights",list) + list = ["Ship_CreateSim"] + self.appendToolbar("Simulation",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Loading",list) + self.appendToolbar("Weights",list) + list = ["Ship_CreateSim"] + self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index d1c50cfe3..bb71e262b 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -5,6 +5,7 @@ data_DATA = \ InitGui.py \ ShipGui.py \ Instance.py \ + SimInstance.py \ TankInstance.py nobase_data_DATA = \ @@ -37,6 +38,11 @@ nobase_data_DATA = \ Icons/Weight.png \ Icons/Weight.xcf \ Icons/Weight.xpm \ + Icons/SimIco.xcf \ + Icons/Sim.xpm \ + Icons/SimCreateIco.png \ + Icons/SimCreateIco.xcf \ + Icons/SimCreateIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -81,6 +87,9 @@ nobase_data_DATA = \ tankGZ/Plot.py \ tankGZ/TaskPanel.py \ tankGZ/TaskPanel.ui + simCreate/__init__.py \ + simCreate/TaskPanel.py \ + simCreate/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index c97f1e908..52407b824 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -120,6 +120,18 @@ class GZ: ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class CreateSim: + def Activated(self): + import simCreate + simCreate.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimCreateIco.png" + MenuText = str(Translator.translate('Create a new simulation')) + ToolTip = str(Translator.translate('Create a new simulation in order to process later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -128,3 +140,4 @@ FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) FreeCADGui.addCommand('Ship_GZ', GZ()) +FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py new file mode 100644 index 000000000..82556cacf --- /dev/null +++ b/src/Mod/Ship/SimInstance.py @@ -0,0 +1,617 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * + +# COIN +from pivy.coin import * +from pivy import coin + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base, Vector + +# Ship design module +from shipUtils import Paths, Translator, Math + +class FreeSurfaceFace: + def __init__(self, pos, normal, l, b): + """ Face storage. + @param pos Face position. + @param normal Face normal. + @param Element length (distance between elements at x direction) + @param Element beam (distance between elements at y direction) + """ + self.pos = pos + self.normal = normal + self.area = l*b + +class ShipSimulation: + def __init__(self, obj, fsMeshData): + """ Creates a new simulation instance on active document. + @param obj Created Part::FeaturePython object. + @param fsMeshData [L,B,N] Free surface mesh data, with lenght + (x), Beam (y) and desired number of points. + """ + # Add uniqueness property to identify Tank instances + obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True + # Compute free surface mesh + self.createFSMesh(obj,fsMeshData) + # Add shapes + shape = self.computeShape(obj) + if not shape: + obj.IsShipSimulation=False + return + obj.Shape = shape + obj.Proxy = self + + def onChanged(self, fp, prop): + """ Property changed, tank must be recomputed """ + if prop == "IsShipSimulation": + FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") + + def execute(self, obj): + """ Shape recomputation called """ + obj.Shape = self.computeShape(obj) + + def createFSMesh(self, obj, fsMeshData): + """ Create or modify free surface mesh. + @param obj Created Part::FeaturePython object. + @param fsMeshData [L,B,N] Free surface mesh data, with lenght + (x), Beam (y) and desired number of points. + """ + # Study input object + try: + props = obj.PropertiesList + props.index("IsShipSimulation") + if not obj.IsShipSimulation: + msg = str(Translator.translate("Object is not a valid ship simulation.\n")) + FreeCAD.Console.PrintError(msg) + return + except ValueError: + msg = str(Translator.translate("Object is not a ship simulation.\n")) + FreeCAD.Console.PrintError(msg) + return + # Get areas and number of elements per direction + L = fsMeshData[0] + B = fsMeshData[1] + N = fsMeshData[2] + A = L*B + area = A/N + l = sqrt(area) + b = sqrt(area) + nx = int(round(L / l)) + ny = int(round(B / b)) + print(l,b,nx,ny) + # Start data fields if not already exist + props = obj.PropertiesList + try: + props.index("FS_Nx") + except ValueError: + obj.addProperty("App::PropertyInteger","FS_Nx","ShipSimulation", str(Translator.translate("Free surface number of elements at x direction"))).FS_Nx=0 + try: + props.index("FS_Ny") + except ValueError: + obj.addProperty("App::PropertyInteger","FS_Ny","ShipSimulation", str(Translator.translate("Free surface number of elements at y direction"))).FS_Ny=0 + try: + props.index("FS_Position") + except ValueError: + obj.addProperty("App::PropertyVectorList","FS_Position","ShipSimulation", str(Translator.translate("Free surface elements position"))).FS_Position=[] + try: + props.index("FS_Area") + except ValueError: + obj.addProperty("App::PropertyFloatList","FS_Area","ShipSimulation", str(Translator.translate("Free surface elements area"))).FS_Area=[] + try: + props.index("FS_Normal") + except ValueError: + obj.addProperty("App::PropertyVectorList","FS_Normal","ShipSimulation", str(Translator.translate("Free surface elements normal"))).FS_Normal=[] + # Fill data + obj.FS_Nx = nx + obj.FS_Ny = ny + pos = [] + areas = [] + normal = [] + for i in range(0,nx): + for j in range(0,ny): + pos.append(Vector(-0.5*L + (i+0.5)*l,-0.5*B + (j+0.5)*b,0.0)) + areas.append(l*b) + normal.append(Vector(0.0,0.0,1.0)) + obj.FS_Position = pos[:] + obj.FS_Area = areas[:] + obj.FS_Normal = normal[:] + + def FSMesh(self, obj): + """ Get free surface mesh in matrix mode. + @param obj Created Part::FeaturePython object. + @return Faces matrix + @note areas and normals will recomputed. + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + # Transform positions into a mesh + pos = [] + for i in range(0,nx): + pos.append([]) + for j in range(0,ny): + pos[i].append(obj.FS_Position[j + i*ny]) + # Recompute normals and dimensions + normal = [] + l = [] + b = [] + for i in range(0,nx): + normal.append([]) + l.append([]) + b.append([]) + for j in range(0,ny): + i0 = i-1 + i1 = i+1 + fi = 1.0 + j0 = j-1 + j1 = j+1 + fj = 1.0 + if i == 0: + i0 = i + i1 = i+1 + fi = 2.0 + if i == nx-1: + i0 = i-1 + i1 = i + fi = 2.0 + if j == 0: + j0 = j + j1 = j+1 + fj = 2.0 + if j == ny-1: + j0 = j-1 + j1 = j + fj = 2.0 + l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) + b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) + xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, + obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, + obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) + yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, + obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, + obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) + n = Vector(xvec.cross(yvec)) # Z positive + normal[i].append(n.normalize()) + # Create faces + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) + # Reconstruct mesh data + for i in range(0,nx): + for j in range(0,ny): + obj.FS_Position[j + i*ny] = faces[i][j].pos + obj.FS_Normal[j + i*ny] = faces[i][j].normal + obj.FS_Area[j + i*ny] = faces[i][j].area + return faces + + def computeShape(self, obj): + """ Computes simulation involved shapes. + @param obj Created Part::FeaturePython object. + @return Shape + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + mesh = self.FSMesh(obj) + planes = [] + # Create planes + for i in range(1,nx-1): + for j in range(1,ny-1): + v0 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j-1].pos + mesh[i-1][j-1].pos).multiply(0.25) + v1 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j-1].pos + mesh[i+1][j-1].pos).multiply(0.25) + v2 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j+1].pos + mesh[i+1][j+1].pos).multiply(0.25) + v3 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j+1].pos + mesh[i-1][j+1].pos).multiply(0.25) + p = Part.makePolygon([v0,v1,v2,v3,v0]) + planes.append(Part.makeFilledFace(p.Edges)) + # Join into a compound + return Part.makeCompound(planes) + +class ViewProviderShipSimulation: + def __init__(self, obj): + """ Set this object to the proxy object of the actual view provider """ + obj.Proxy = self + + def attach(self, obj): + """ Setup the scene sub-graph of the view provider, this method is mandatory """ + return + + def updateData(self, fp, prop): + """ If a property of the handled feature has changed we have the chance to handle this here """ + return + + def getDisplayModes(self,obj): + ''' Return a list of display modes. ''' + modes=[] + return modes + + def getDefaultDisplayMode(self): + ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' + return "Flat Lines" + + def setDisplayMode(self,mode): + ''' Map the display mode defined in attach with those defined in getDisplayModes. + Since they have the same names nothing needs to be done. This method is optinal. + ''' + return mode + + def onChanged(self, vp, prop): + ''' Print the name of the property that has changed ''' + # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") + + def __getstate__(self): + ''' When saving the document this object gets stored using Python's cPickle module. + Since we have some un-pickable here -- the Coin stuff -- we must define this method + to return a tuple of all pickable objects or None. + ''' + return None + + def __setstate__(self,state): + ''' When restoring the pickled object from document we have the chance to set some + internals here. Since no data were pickled nothing needs to be done here. + ''' + return None + + def getIcon(self): + return """ + /* XPM */ + static char * Sim_xpm[] = { + "32 32 301 2", + " c None", + ". c #CCCCCC", + "+ c #A9A9A9", + "@ c #989898", + "# c #A1A1A1", + "$ c #C3C3C3", + "% c #C1C0C1", + "& c #BFBFBF", + "* c #A7A7A7", + "= c #808080", + "- c #5C5C5C", + "; c #565655", + "> c #4E4E4E", + ", c #676767", + "' c #898989", + ") c #B6B5B6", + "! c #BABABA", + "~ c #B9B9B9", + "{ c #A5A5A5", + "] c #7E7E7E", + "^ c #595A59", + "/ c #575656", + "( c #535353", + "_ c #505050", + ": c #4D4D4C", + "< c #474747", + "[ c #404040", + "} c #4D4D4D", + "| c #787878", + "1 c #B8B7B8", + "2 c #B6B6B6", + "3 c #888888", + "4 c #7C7C7C", + "5 c #575657", + "6 c #535354", + "7 c #4E4D4E", + "8 c #4A4A4A", + "9 c #444444", + "0 c #414141", + "a c #3E3E3E", + "b c #393938", + "c c #313131", + "d c #393939", + "e c #636363", + "f c #ABABAB", + "g c #B3B3B3", + "h c #848484", + "i c #787979", + "j c #545454", + "k c #515151", + "l c #4B4B4B", + "m c #484748", + "n c #3B3B3B", + "o c #383838", + "p c #353535", + "q c #323232", + "r c #2F2F2E", + "s c #2A2A2A", + "t c #222323", + "u c #252625", + "v c #AFAFAF", + "w c #767676", + "x c #484848", + "y c #454545", + "z c #424242", + "A c #3F3F3E", + "B c #3B3B3C", + "C c #393838", + "D c #2F2F2F", + "E c #2C2C2C", + "F c #292929", + "G c #262626", + "H c #222222", + "I c #1F1F20", + "J c #171716", + "K c #959595", + "L c #747474", + "M c #4E4E4F", + "N c #4C4B4C", + "O c #484849", + "P c #424243", + "Q c #282828", + "R c #525251", + "S c #373737", + "T c #353636", + "U c #333233", + "V c #30302F", + "W c #2C2D2D", + "X c #232323", + "Y c #201F20", + "Z c #1D1D1D", + "` c #151414", + " . c #717272", + ".. c #4C4C4C", + "+. c #484949", + "@. c #464545", + "#. c #424343", + "$. c #3A3A3A", + "%. c #5D4A49", + "&. c #7E7E86", + "*. c #56569F", + "=. c #3E3E41", + "-. c #757575", + ";. c #575757", + ">. c #222221", + ",. c #262627", + "'. c #242423", + "). c #212020", + "!. c #1A1A1A", + "~. c #121212", + "{. c #939493", + "]. c #6F6F6F", + "^. c #494949", + "/. c #464646", + "(. c #434343", + "_. c #554545", + ":. c #686863", + "<. c #939394", + "[. c #BDBDBD", + "}. c #202021", + "|. c #1E1E1E", + "1. c #171718", + "2. c #0F0F0F", + "3. c #929292", + "4. c #6C6D6D", + "5. c #464746", + "6. c #525F73", + "7. c #444648", + "8. c #3D3D3D", + "9. c #2D2C2A", + "0. c #A1A2A2", + "a. c #AAACAC", + "b. c #A6A7A7", + "c. c #A8AAAA", + "d. c #AFB0B0", + "e. c #777676", + "f. c #9A9A9A", + "g. c #1B1B1B", + "h. c #181818", + "i. c #0C0C0C", + "j. c #909090", + "k. c #6B6A6B", + "l. c #55657E", + "m. c #6990FB", + "n. c #6483CD", + "o. c #5871B2", + "p. c #434E7E", + "q. c #A97C76", + "r. c #AB7777", + "s. c #AC7070", + "t. c #A26565", + "u. c #805C5C", + "v. c #848686", + "w. c #424342", + "x. c #151515", + "y. c #0A0909", + "z. c #8F8F8F", + "A. c #676868", + "B. c #3B3A3A", + "C. c #383738", + "D. c #353534", + "E. c #45525F", + "F. c #6367AC", + "G. c #804682", + "H. c #942A39", + "I. c #991312", + "J. c #540901", + "K. c #393742", + "L. c #1C1C1C", + "M. c #191919", + "N. c #161515", + "O. c #121313", + "P. c #070707", + "Q. c #8D8E8D", + "R. c #656566", + "S. c #3E3F3F", + "T. c #2F2E2F", + "U. c #353838", + "V. c #35496A", + "W. c #3E4D88", + "X. c #354889", + "Y. c #5573D7", + "Z. c #5D80FB", + "`. c #374899", + " + c #293338", + ".+ c #101010", + "++ c #0D0D0D", + "@+ c #040404", + "#+ c #8C8C8C", + "$+ c #8B8B8B", + "%+ c #4B4A4B", + "&+ c #303030", + "*+ c #333232", + "=+ c #2F2F30", + "-+ c #232223", + ";+ c #1A1919", + ">+ c #2E3949", + ",+ c #5C7BA3", + "'+ c #36467D", + ")+ c #536F93", + "!+ c #0A0A0A", + "~+ c #010101", + "{+ c #C1C1C1", + "]+ c #B8B8B8", + "^+ c #A0A0A0", + "/+ c #3F3F3F", + "(+ c #222122", + "_+ c #202020", + ":+ c #161717", + "<+ c #141414", + "[+ c #111011", + "}+ c #0D0E0E", + "|+ c #0B0B0A", + "1+ c #000000", + "2+ c #525252", + "3+ c #686868", + "4+ c #ADADAD", + "5+ c #9E9F9F", + "6+ c #6D6D6D", + "7+ c #3C3C3C", + "8+ c #131414", + "9+ c #111111", + "0+ c #0E0E0E", + "a+ c #0B0B0B", + "b+ c #080708", + "c+ c #050504", + "d+ c #4C4D4C", + "e+ c #4D4C4D", + "f+ c #494A4A", + "g+ c #454444", + "h+ c #9D9D9D", + "i+ c #9E9E9E", + "j+ c #AEAEAE", + "k+ c #BEBEBF", + "l+ c #BEBDBD", + "m+ c #979797", + "n+ c #6A6B6A", + "o+ c #3F3F40", + "p+ c #020202", + "q+ c #030303", + "r+ c #878787", + "s+ c #69696A", + "t+ c #868685", + "u+ c #646464", + "v+ c #474647", + "w+ c #656565", + "x+ c #9E9F9E", + "y+ c #A8A8A8", + "z+ c #AFAFAE", + "A+ c #A4A4A4", + "B+ c #7A7A7A", + "C+ c #969696", + "D+ c #363636", + "E+ c #777776", + "F+ c #8C8D8D", + "G+ c #7D7D7D", + "H+ c #5E5E5E", + "I+ c #4F4F50", + "J+ c #808181", + "K+ c #707070", + "L+ c #909191", + "M+ c #9C9C9C", + "N+ c #787877", + "O+ c #696969", + "P+ c #616161", + "Q+ c #6E6E6E", + "R+ c #7C7B7C", + "S+ c #777677", + "T+ c #6F6E6E", + "U+ c #595959", + "V+ c #717171", + "W+ c #8D8D8D", + "X+ c #515051", + "Y+ c #49494A", + "Z+ c #4B4A4A", + "`+ c #606060", + " @ c #6A6A6A", + ".@ c #616162", + "+@ c #6C6D6C", + "@@ c #767777", + "#@ c #727272", + "$@ c #6B6B6B", + "%@ c #828283", + "&@ c #757475", + "*@ c #444545", + "=@ c #565656", + "-@ c #5A595A", + ";@ c #666666", + ">@ c #878687", + ",@ c #8A8A8A", + "'@ c #797979", + ")@ c #444344", + "!@ c #7F8080", + "~@ c #737373", + "{@ c #484747", + "]@ c #707170", + "^@ c #7F7F7F", + "/@ c #676867", + "(@ c #4D4C4C", + "_@ c #5F5F5F", + ":@ c #434444", + " ", + " ", + " . + ", + " @ # $ % & * ", + " = - ; > , ' ) ! ~ { ", + " ] ^ / ( _ : < [ } | # 1 2 # 3 ", + " 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ", + " i j k 7 l m 9 0 a n o p q r s t u < | v ", + " w k > l x y z A B C p q D E F G H I J K ", + " L M N O y P Q R S T U V W F G X Y Z ` K ", + " ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ", + " ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ", + " 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ", + " k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ", + " A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ", + " R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ", + " $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ", + " {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ", + " k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ", + " %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ", + " s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ", + " E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ", + " L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ", + " V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ", + " ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ", + " ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ", + " e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ", + " - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ", + " =@_@O+L ~@#@~@L _ 9 9 :@ ", + " ;.H+ @-._ (. ", + " ", + " "}; + """ diff --git a/src/Mod/Ship/simCreate/TaskPanel.py b/src/Mod/Ship/simCreate/TaskPanel.py new file mode 100644 index 000000000..3741fbec4 --- /dev/null +++ b/src/Mod/Ship/simCreate/TaskPanel.py @@ -0,0 +1,125 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +import SimInstance +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simCreate/TaskPanel.ui" + + def accept(self): + form = self.form + obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation") + sim = SimInstance.ShipSimulation(obj, + [form.length.value(), form.beam.value(), form.n.value()]) + SimInstance.ViewProviderShipSimulation(obj.ViewObject) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") + form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") + form.n = form.findChild(QtGui.QSpinBox, "N") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS) + QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS) + QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Create a new ship simulation")) + self.form.findChild(QtGui.QGroupBox, "FSDataBox").setTitle(Translator.translate("Free surface")) + self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) + self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) + self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) + + def onFS(self, value): + """ Method called when ship data is changed. + Annotations must be showed. + @param value Changed value. + """ + pass + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/simCreate/TaskPanel.ui b/src/Mod/Ship/simCreate/TaskPanel.ui new file mode 100644 index 000000000..995b64455 --- /dev/null +++ b/src/Mod/Ship/simCreate/TaskPanel.ui @@ -0,0 +1,182 @@ + + + TaskPanel + + + + 0 + 0 + 260 + 180 + + + + + 0 + 180 + + + + Create new simulation + + + + + + + + + 240 + 160 + + + + Free surface + + + false + + + + + 0 + 20 + 241 + 141 + + + + + 6 + + + QLayout::SetDefaultConstraint + + + + + QLayout::SetDefaultConstraint + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Length + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Beam + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Number of points + + + + + + + 1 + + + 1000000000 + + + 10000 + + + + + + + + + + + + + + + + diff --git a/src/Mod/Ship/simCreate/__init__.py b/src/Mod/Ship/simCreate/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/simCreate/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 70a4cf0e1b8ecc8b9a2281cc7b608de12eb51fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 6 Jul 2012 12:01:53 +0200 Subject: [PATCH 463/517] Removed Surfaces module interdependency --- src/Mod/Ship/shipHydrostatics/TaskPanel.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.py b/src/Mod/Ship/shipHydrostatics/TaskPanel.py index 665e7edaf..4ff23dc45 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.py +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.py @@ -31,7 +31,6 @@ from PyQt4 import QtGui,QtCore import Plot import Instance from shipUtils import Paths, Translator -from surfUtils import Geometry import Tools class TaskPanel: @@ -108,7 +107,7 @@ class TaskPanel: """ Set initial values for fields """ # Get objects - selObjs = Geometry.getSelectedObjs() + selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) From a933c932693f977aca82bb347a051634c7c10178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 6 Jul 2012 12:42:19 +0200 Subject: [PATCH 464/517] Built simulations run interface (threaded) --- src/Mod/Ship/CMakeLists.txt | 19 +- src/Mod/Ship/Icons/SimCreateIco.png | Bin 14469 -> 14502 bytes src/Mod/Ship/Icons/SimCreateIco.xcf | Bin 51656 -> 0 bytes src/Mod/Ship/Icons/SimCreateIco.xpm | 1276 +++++++------ src/Mod/Ship/Icons/SimRunIco.png | Bin 0 -> 15466 bytes src/Mod/Ship/Icons/SimRunIco.xpm | 2723 +++++++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Makefile.am | 11 +- src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/SimInstance.py | 187 +- src/Mod/Ship/simCreate/TaskPanel.py | 55 +- src/Mod/Ship/simCreate/TaskPanel.ui | 357 ++-- src/Mod/Ship/simRun/Simulation.py | 56 + src/Mod/Ship/simRun/TaskPanel.py | 160 ++ src/Mod/Ship/simRun/TaskPanel.ui | 115 ++ src/Mod/Ship/simRun/__init__.py | 36 + 16 files changed, 4150 insertions(+), 862 deletions(-) delete mode 100644 src/Mod/Ship/Icons/SimCreateIco.xcf create mode 100644 src/Mod/Ship/Icons/SimRunIco.png create mode 100644 src/Mod/Ship/Icons/SimRunIco.xpm create mode 100644 src/Mod/Ship/simRun/Simulation.py create mode 100644 src/Mod/Ship/simRun/TaskPanel.py create mode 100644 src/Mod/Ship/simRun/TaskPanel.ui create mode 100644 src/Mod/Ship/simRun/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index fc71cb055..f16627870 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -40,8 +40,9 @@ SET(ShipIcons_SRCS Icons/SimIco.xcf Icons/Sim.xpm Icons/SimCreateIco.png - Icons/SimCreateIco.xcf Icons/SimCreateIco.xpm + Icons/SimRunIco.png + Icons/SimRunIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -136,7 +137,15 @@ SET(SimCreate_SRCS ) SOURCE_GROUP("simcreate" FILES ${SimCreate_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS}) +SET(SimRun_SRCS + simRun/__init__.py + simRun/Simulation.py + simRun/TaskPanel.py + simRun/TaskPanel.ui +) +SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -216,6 +225,12 @@ INSTALL( DESTINATION Mod/Ship/simCreate ) +INSTALL( + FILES + ${SimRun_SRCS} + DESTINATION + Mod/Ship/simRun +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/Icons/SimCreateIco.png b/src/Mod/Ship/Icons/SimCreateIco.png index 838b46e8bbceacc2d0a0a53dc71b6a84106e6f22..4886cd01d9e335a315d8ecdb3595c9768b79a40f 100644 GIT binary patch delta 14125 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 diff --git a/src/Mod/Ship/Icons/SimCreateIco.xcf b/src/Mod/Ship/Icons/SimCreateIco.xcf deleted file mode 100644 index 6dcf3fdd0ba1fa700091f4774f887b087a237bdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51656 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 HzwEyOS-3zg diff --git a/src/Mod/Ship/Icons/SimCreateIco.xpm b/src/Mod/Ship/Icons/SimCreateIco.xpm index a1847db91..72814a4f1 100644 --- a/src/Mod/Ship/Icons/SimCreateIco.xpm +++ b/src/Mod/Ship/Icons/SimCreateIco.xpm @@ -1,6 +1,6 @@ /* XPM */ static char * SimCreateIco_xpm[] = { -"128 128 2134 2", +"128 128 2124 2", " c None", ". c #7B7B7B", "+ c #EAEAEA", @@ -1454,7 +1454,7 @@ static char * SimCreateIco_xpm[] = { "F) c #050404", "G) c #000001", "H) c #B3B4B4", -"I) c #BEBEF1", +"I) c #E9CFC6", "J) c #C7C6C6", "K) c #C5C6C6", "L) c #C6C5C6", @@ -1469,8 +1469,8 @@ static char * SimCreateIco_xpm[] = { "U) c #060504", "V) c #020303", "W) c #B3B3B4", -"X) c #BBBBF4", -"Y) c #B4B4F7", +"X) c #EDD0C2", +"Y) c #F0CFBA", "Z) c #666666", "`) c #9F9F9F", " ! c #C4C3C4", @@ -1486,9 +1486,9 @@ static char * SimCreateIco_xpm[] = { "-! c #050605", ";! c #020101", ">! c #B2B3B2", -",! c #A5A5BB", -"'! c #B0B0F9", -")! c #AFAFFA", +",! c #B6ACA9", +"'! c #F4D0B5", +")! c #F5D0B4", "!! c #4D4E4D", "~! c #929292", "{! c #C2C3C2", @@ -1498,10 +1498,10 @@ static char * SimCreateIco_xpm[] = { "(! c #030202", "_! c #000100", ":! c #B3B2B2", -"~ c #ACACAD", -",~ c #A4A4A3", -"'~ c #A1A0A0", -")~ c #9E9D9D", -"!~ c #040405", -"~~ c #AFAFD2", -"{~ c #9393FD", -"]~ c #7777FF", -"^~ c #8181FF", -"/~ c #A9A9F8", -"(~ c #CECEFB", -"_~ c #CCCCFD", +"$~ c #C2B8B6", +"%~ c #F6C69B", +"&~ c #FFBE7F", +"*~ c #EFCAB4", +"=~ c #F5E2D8", +"-~ c #FAE4D3", +";~ c #999898", +">~ c #A3A2A3", +",~ c #ACACAD", +"'~ c #A4A4A3", +")~ c #A1A0A0", +"!~ c #9E9D9D", +"~~ c #CCBBB5", +"{~ c #FCC694", +"]~ c #FFBA77", +"^~ c #FFBF81", +"/~ c #F3CAAE", +"(~ c #F7E1D2", +"_~ c #FCE3CD", ":~ c #AEAEAF", "<~ c #8F8F8F", "[~ c #A9A9AA", "}~ c #A3A2A2", "|~ c #AEAFAF", "1~ c #B3B4B3", -"2~ c #09090B", -"3~ c #AEAEDA", -"4~ c #8B8BFD", -"5~ c #7373FF", -"6~ c #7979FF", -"7~ c #9E9EF6", -"8~ c #8E8EAE", -"9~ c #BDBDFC", -"0~ c #B9B9FE", -"a~ c #BABAB9", -"b~ c #B2B2B3", -"c~ c #B1B3B2", -"d~ c #B1B2B1", -"e~ c #ADACAB", -"f~ c #AAA9AA", -"g~ c #888988", -"h~ c #9E9D9E", -"i~ c #A0A0A1", -"j~ c #A4A3A3", -"k~ c #A7A8A8", -"l~ c #B4B4B3", -"m~ c #B1B2B2", -"n~ c #ADADAE", -"o~ c #969595", -"p~ c #808083", -"q~ c #ABABDD", -"r~ c #8989FD", -"s~ c #7171FF", -"t~ c #6F6FFF", -"u~ c #8C8CFD", -"v~ c #9494C2", -"w~ c #57575E", -"x~ c #CFCFF8", -"y~ c #9595FE", -"z~ c #A0A0FD", -"A~ c #DBDBF8", -"B~ c #7D7C7C", -"C~ c #989898", -"D~ c #AEADAD", -"E~ c #ADACAD", -"F~ c #ACABAC", -"G~ c #9C9D9D", -"H~ c #7F7F7E", -"I~ c #565756", -"J~ c #989998", -"K~ c #A0A1A0", -"L~ c #A4A3A4", -"M~ c #B0B1B1", -"N~ c #B1B0B1", -"O~ c #AEAED9", -"P~ c #6B6BFF", -"Q~ c #7575FF", -"R~ c #9696EF", -"S~ c #7B7B95", -"T~ c #CACAEE", -"U~ c #ACACFD", -"V~ c #6363FF", -"W~ c #A2A2FD", -"X~ c #B6B7B7", -"Y~ c #787877", -"Z~ c #757676", -"`~ c #747474", -" { c #8C8D8C", -".{ c #9D9C9D", -"+{ c #A8A8A7", -"@{ c #545353", -"#{ c #989797", -"${ c #9F9F9E", -"%{ c #A0A1A1", -"&{ c #8C8C8B", -"*{ c #706F70", -"={ c #B1B1B0", -"-{ c #B0B0B1", -";{ c #AEAED3", -">{ c #8E8EFD", -",{ c #6565FF", -"'{ c #9999EE", -"){ c #7C7C94", -"!{ c #56565C", -"~{ c #5A5A5F", -"{{ c #8F8FA5", -"]{ c #AFAFF8", -"^{ c #4747FF", -"/{ c #B2B2FC", -"({ c #B4B5B5", -"_{ c #777677", -":{ c #727172", -"<{ c #6B6C6C", -"[{ c #80807F", -"}{ c #919090", -"|{ c #9E9E9F", -"1{ c #A4A5A4", -"2{ c #A6A7A6", -"3{ c #898888", -"4{ c #6E6E6D", -"5{ c #5F5F60", -"6{ c #797A7A", -"7{ c #7E7F7F", -"8{ c #777777", -"9{ c #616060", -"0{ c #5A5A66", -"a{ c #8B8BC5", -"b{ c #8484FD", -"c{ c #6767FF", -"d{ c #5F5FFF", -"e{ c #9494F2", -"f{ c #9A9ACA", -"g{ c #7B7B90", -"h{ c #64636D", -"i{ c #58585E", -"j{ c #57575D", -"k{ c #65656D", -"l{ c #7F7F8F", -"m{ c #A2A2C8", -"n{ c #A1A1F1", -"o{ c #3131FF", -"p{ c #BDBDEF", -"q{ c #767777", -"r{ c #767675", -"s{ c #717171", -"t{ c #6E6E6F", -"u{ c #6C6D6D", -"v{ c #6A6969", -"w{ c #676767", -"x{ c #656665", -"y{ c #676766", -"z{ c #727373", -"A{ c #5C5C5B", -"B{ c #6A6A6B", -"C{ c #7B7A7B", -"D{ c #626262", -"E{ c #575761", -"F{ c #8686BC", -"G{ c #8888FB", -"H{ c #6969FF", -"I{ c #6161FF", -"J{ c #5D5DFF", -"K{ c #5959FF", -"L{ c #8282FD", -"M{ c #9898F3", -"N{ c #A2A2E5", -"O{ c #A1A1DB", -"P{ c #A2A2D9", -"Q{ c #A7A7E3", -"R{ c #9F9FF3", -"S{ c #8080FD", -"T{ c #5353FF", -"U{ c #3939FF", -"V{ c #9090FC", -"W{ c #CFCFF5", -"X{ c #B1B1B2", -"Y{ c #777676", -"Z{ c #747575", -"`{ c #717271", -" ] c #6D6E6D", -".] c #6B6B6A", -"+] c #686767", -"@] c #646363", -"#] c #5D5D5C", -"$] c #777776", -"%] c #878788", -"&] c #969596", -"*] c #9A9898", -"=] c #9A9A99", -"-] c #646463", -";] c #7B7C7C", -">] c #7B7C7B", -",] c #707170", -"'] c #575756", -")] c #515159", -"!] c #8181B4", -"~] c #8686FB", -"{] c #5B5BFF", -"]] c #5757FF", -"^] c #4D4DFF", -"/] c #3B3BFF", -"(] c #3333FF", -"_] c #5F5FFD", -":] c #B1B1E8", -"<] c #ABACAB", -"[] c #787777", -"}] c #717170", -"|] c #696869", -"1] c #666565", -"2] c #646465", -"3] c #636363", -"4] c #605F5F", -"5] c #575758", -"6] c #8B8A8B", -"7] c #949393", -"8] c #7D7DAF", -"9] c #4F4FFF", -"0] c #4B4BFF", -"a] c #4343FF", -"b] c #4141FF", -"c] c #3D3DFF", -"d] c #3535FF", -"e] c #4545FF", -"f] c #9A9AFD", -"g] c #A8A8BB", -"h] c #A5A4A4", -"i] c #969797", -"j] c #787778", -"k] c #636364", -"l] c #606161", -"m] c #5D5C5C", -"n] c #585958", -"o] c #5C5C5D", -"p] c #868787", -"q] c #7F807F", -"r] c #53535D", -"s] c #7E7EB0", -"t] c #6D6DFF", -"u] c #5151FF", -"v] c #4949FF", -"w] c #3F3FFF", -"x] c #3737FF", -"y] c #9191FF", -"z] c #A6A6C2", -"A] c #747579", -"B] c #ADADAC", -"C] c #A8A9A8", -"D] c #9A9999", -"E] c #6A6A69", -"F] c #626261", -"G] c #5F605F", -"H] c #818081", -"I] c #868685", -"J] c #51515B", -"K] c #7C7CAF", -"L] c #8686F8", -"M] c #5555FF", -"N] c #A5A5F4", -"O] c #A6A6C1", -"P] c #737377", -"Q] c #7C7B7B", -"R] c #939292", -"S] c #8A8B8A", -"T] c #676768", -"U] c #848485", -"V] c #818281", -"W] c #7F7E7E", -"X] c #7B7B7A", -"Y] c #4E4E55", -"Z] c #7979AC", -"`] c #8484F7", -" ^ c #8686FC", -".^ c #ABABDA", -"+^ c #9393A5", -"@^ c #717174", -"#^ c #626263", -"$^ c #A5A6A6", -"%^ c #9F9FA0", -"&^ c #8B8C8B", -"*^ c #818180", -"=^ c #7E7D7E", -"-^ c #7C7C7D", -";^ c #787978", -">^ c #636463", -",^ c #4C4C51", -"'^ c #7676A6", -")^ c #8484F8", -"!^ c #8686FD", -"~^ c #9F9FD7", -"{^ c #A3A3D9", -"]^ c #A1A1E1", -"^^ c #A6A6E1", -"/^ c #A4A4D5", -"(^ c #A0A0C0", -"_^ c #8B8B9D", -":^ c #727279", -"<^ c #616160", -"[^ c #626161", -"}^ c #7C7D7C", -"|^ c #9B9A9A", -"1^ c #666667", -"2^ c #818182", -"3^ c #7D7E7D", -"4^ c #757475", -"5^ c #4D4D53", -"6^ c #7474A6", -"7^ c #7B7BFF", -"8^ c #8585FF", -"9^ c #9494BC", -"0^ c #64646C", -"a^ c #636368", -"b^ c #67676C", -"c^ c #69686D", -"d^ c #646466", -"e^ c #5E5E5F", -"f^ c #5F6060", -"g^ c #707171", -"h^ c #807F80", -"i^ c #8E8E8F", -"j^ c #979696", -"k^ c #959594", -"l^ c #686869", -"m^ c #7F8080", -"n^ c #7E7E7F", -"o^ c #7C7D7D", -"p^ c #737374", -"q^ c #7373A4", -"r^ c #8282F8", -"s^ c #8383FF", -"t^ c #535453", -"u^ c #5B595B", -"v^ c #5F5F5E", -"w^ c #747473", -"x^ c #838384", -"y^ c #908F90", -"z^ c #919192", -"A^ c #7D7C7D", -"B^ c #818282", -"C^ c #808081", -"D^ c #7F7F80", -"E^ c #4C4C54", -"F^ c #7272A3", -"G^ c #8080F4", -"H^ c #9292C5", -"I^ c #666670", -"J^ c #5B5A5C", -"K^ c #5C5D5D", -"L^ c #828181", -"M^ c #5A595A", -"N^ c #676667", -"O^ c #8A8A8A", -"P^ c #7A7A7B", -"Q^ c #6F6FA0", -"R^ c #8080F3", -"S^ c #7D7DFF", -"T^ c #9090C5", -"U^ c #646570", -"V^ c #9E9E9D", -"W^ c #838282", -"X^ c #767576", -"Y^ c #868585", -"Z^ c #797A79", -"`^ c #737273", -" / c #46464B", -"./ c #6C6D9E", -"+/ c #7D7DF6", -"@/ c #7C7CFD", -"#/ c #8F8FC6", -"$/ c #64646F", -"%/ c #7F7E7F", -"&/ c #989897", -"*/ c #9C9D9C", -"=/ c #6B6B71", -"-/ c #7B7BAC", -";/ c #7C7CFC", -">/ c #8F8FC8", -",/ c #61616E", -"'/ c #4D4F4E", -")/ c #9C9B9C", -"!/ c #9B9B9A", -"~/ c #747479", -"{/ c #8282B0", -"]/ c #7E7EF6", -"^/ c #8C8CCB", -"// c #61616F", -"(/ c #838483", -"_/ c #8D8D8C", -":/ c #959696", -"( c #74749F", -",( c #6969F0", -"'( c #8B8BFF", -")( c #7E7EE7", -"!( c #69698A", -"~( c #717172", -"{( c #75759A", -"]( c #6D6DE5", -"^( c #8383E8", -"/( c #696987", -"(( c #737398", -"_( c #6C6CE1", -":( c #7F80E6", -"<( c #8282A1", -"[( c #737399", -"}( c #6A6AE1", -"|( c #8F8FFF", -"1( c #7C7CED", -"2( c #7F7FA2", -"3( c #757577", -"4( c #72729A", -"5( c #6464E4", -"6( c #6F6FFD", -"7( c #7979F9", -"8( c #8080A8", -"9( c #727294", -"0( c #6464E1", -"a( c #7474FD", -"b( c #7777F4", -"c( c #565675", -"d( c #5E5ED3", -"e( c #9090FD", -"f( c #8F8FFA", -"g( c #8A8AFC", -"h( c #7979ED", -"i( c #7F7FA9", -"j( c #6565ED", -"k( c #7575FE", -"l( c #8B8BD5", -"m( c #7B7BAB", -"n( c #75759D", -"o( c #7A7AB1", -"p( c #8484DC", -"q( c #7575EE", -"r( c #7E7EA9", -"s( c #747477", -"t( c #7070E7", -"u( c #6868FD", -"v( c #9898F5", -"w( c #4C4C53", -"x( c #5E5E73", -"y( c #7B7BCE", -"z( c #7474F4", -"A( c #7C7CAB", -"B( c #6565F2", -"C( c #7777FC", -"D( c #7F7FFA", -"E( c #6E6EFB", -"F( c #666699", -"G( c #56565A", -"H( c #6262F7", -"I( c #8585FA", -"J( c #8484F3", -"K( c #7070FB", -"L( c #8181E4", -"M( c #6262F5", -"N( c #8080FB", -"O( c #8383F2", -"P( c #7171FE", -"Q( c #6F6FFA", -"R( c #8181E6", -"S( c #6969EC", -"T( c #6E6EFD", -"U( c #9A9AEF", -"V( c #7878F7", -"W( c #6C6CFB", -"X( c #8080E7", -"Y( c #6464FB", -"Z( c #7E7EFB", -"`( c #9999EA", -" _ c #7F7FEA", -"._ c #6B6BFC", -"+_ c #7B7BE6", -"@_ c #6C6BE5", -"#_ c #6161FE", -"$_ c #8585F2", -"%_ c #8D8DEC", -"&_ c #8282EB", -"*_ c #7777F2", -"=_ c #6969FE", -"-_ c #7A7AE7", -";_ c #7979E6", -">_ c #6C6CF1", -",_ c #6464F9", -"'_ c #6666FB", -")_ c #6565FA", -"!_ c #7070F1", -"~_ c #8787E7", +"2~ c #D4BEB3", +"3~ c #FDC28B", +"4~ c #FFB873", +"5~ c #FFBB79", +"6~ c #F3C7A1", +"7~ c #A79894", +"8~ c #FADABF", +"9~ c #FDDBBA", +"0~ c #BABAB9", +"a~ c #B2B2B3", +"b~ c #B1B3B2", +"c~ c #B1B2B1", +"d~ c #ADACAB", +"e~ c #AAA9AA", +"f~ c #888988", +"g~ c #9E9D9E", +"h~ c #A0A0A1", +"i~ c #A4A3A3", +"j~ c #A7A8A8", +"k~ c #B4B4B3", +"l~ c #B1B2B2", +"m~ c #ADADAE", +"n~ c #969595", +"o~ c #828080", +"p~ c #D7BEB2", +"q~ c #FDC189", +"r~ c #FFB771", +"s~ c #FFB66F", +"t~ c #FDC38C", +"u~ c #BDA699", +"v~ c #5C5959", +"w~ c #F3DED4", +"x~ c #FDC896", +"y~ c #FCCCA1", +"z~ c #F3E5E0", +"A~ c #7D7C7C", +"B~ c #989898", +"C~ c #AEADAD", +"D~ c #ADACAD", +"E~ c #ACABAC", +"F~ c #9C9D9D", +"G~ c #7F7F7E", +"H~ c #565756", +"I~ c #989998", +"J~ c #A0A1A0", +"K~ c #A4A3A4", +"L~ c #B0B1B1", +"M~ c #B1B0B1", +"N~ c #D3BDB4", +"O~ c #FFB46B", +"P~ c #FFB975", +"Q~ c #EDBF98", +"R~ c #90847F", +"S~ c #E8D6D0", +"T~ c #FBD3AE", +"U~ c #FFB063", +"V~ c #FCCDA3", +"W~ c #B6B7B7", +"X~ c #787877", +"Y~ c #757676", +"Z~ c #747474", +"`~ c #8C8D8C", +" { c #9D9C9D", +".{ c #A8A8A7", +"+{ c #545353", +"@{ c #989797", +"#{ c #9F9F9E", +"${ c #A0A1A1", +"%{ c #8C8C8B", +"&{ c #706F70", +"*{ c #B1B1B0", +"={ c #CDBAB4", +"-{ c #FDC48E", +";{ c #FFB165", +">{ c #EBBF9C", +",{ c #908481", +"'{ c #5A5757", +"){ c #5E5C5B", +"!{ c #A19793", +"~{ c #F7D2B0", +"{{ c #FFA247", +"]{ c #FBD5B2", +"^{ c #B4B5B5", +"/{ c #777677", +"({ c #727172", +"_{ c #6B6C6C", +":{ c #80807F", +"<{ c #919090", +"[{ c #9E9E9F", +"}{ c #A4A5A4", +"|{ c #A6A7A6", +"1{ c #898888", +"2{ c #6E6E6D", +"3{ c #5F5F60", +"4{ c #797A7A", +"5{ c #7E7F7F", +"6{ c #777777", +"7{ c #616060", +"8{ c #635D5D", +"9{ c #BFA191", +"0{ c #FDBF84", +"a{ c #FFB267", +"b{ c #FFAE5F", +"c{ c #F0C096", +"d{ c #C4ADA0", +"e{ c #8D827F", +"f{ c #6B6665", +"g{ c #5D5A5A", +"h{ c #6B6767", +"i{ c #8C8482", +"j{ c #C3B1A7", +"k{ c #F0C6A3", +"l{ c #FF9731", +"m{ c #EBD3C1", +"n{ c #767777", +"o{ c #767675", +"p{ c #717171", +"q{ c #6E6E6F", +"r{ c #6C6D6D", +"s{ c #6A6969", +"t{ c #676767", +"u{ c #656665", +"v{ c #676766", +"w{ c #727373", +"x{ c #5C5C5B", +"y{ c #6A6A6B", +"z{ c #7B7A7B", +"A{ c #626262", +"B{ c #5F5A59", +"C{ c #B59A8D", +"D{ c #FAC089", +"E{ c #FFB369", +"F{ c #FFAF61", +"G{ c #FFAD5D", +"H{ c #FFAB59", +"I{ c #FDBE82", +"J{ c #F1C29A", +"K{ c #E1C0A6", +"L{ c #D7BAA5", +"M{ c #D5BAA6", +"N{ c #E1C2A9", +"O{ c #F2C69F", +"P{ c #FDBD80", +"Q{ c #FFA853", +"R{ c #FF9B39", +"S{ c #FCC590", +"T{ c #EFDDD4", +"U{ c #B1B1B2", +"V{ c #777676", +"W{ c #747575", +"X{ c #717271", +"Y{ c #6D6E6D", +"Z{ c #6B6B6A", +"`{ c #686767", +" ] c #646363", +".] c #5D5D5C", +"+] c #777776", +"@] c #878788", +"#] c #969596", +"$] c #9A9898", +"%] c #9A9A99", +"&] c #646463", +"*] c #7B7C7C", +"=] c #7B7C7B", +"-] c #707170", +";] c #575756", +">] c #575353", +",] c #AD9387", +"'] c #FABF87", +")] c #FFAC5B", +"!] c #FFAA57", +"~] c #FFA54D", +"{] c #FF9C3B", +"]] c #FF9833", +"^] c #FDAC5F", +"/] c #E5CAB5", +"(] c #B0B0B1", +"_] c #ABACAB", +":] c #787777", +"<] c #717170", +"[] c #696869", +"}] c #666565", +"|] c #646465", +"1] c #636363", +"2] c #605F5F", +"3] c #575758", +"4] c #8B8A8B", +"5] c #949393", +"6] c #A98F84", +"7] c #FFA64F", +"8] c #FFA44B", +"9] c #FFA043", +"0] c #FF9F41", +"a] c #FF9D3D", +"b] c #FF9935", +"c] c #FFA145", +"d] c #FDCA9A", +"e] c #B8AFAA", +"f] c #A5A4A4", +"g] c #969797", +"h] c #787778", +"i] c #636364", +"j] c #606161", +"k] c #5D5C5C", +"l] c #585958", +"m] c #5C5C5D", +"n] c #868787", +"o] c #7F807F", +"p] c #5A5555", +"q] c #A99085", +"r] c #FFB56D", +"s] c #FFA751", +"t] c #FFA349", +"u] c #FF9E3F", +"v] c #FF9A37", +"w] c #FFC791", +"x] c #BDB0AA", +"y] c #ADADAC", +"z] c #A8A9A8", +"A] c #9A9999", +"B] c #6A6A69", +"C] c #626261", +"D] c #5F605F", +"E] c #818081", +"F] c #868685", +"G] c #595453", +"H] c #A98F83", +"I] c #F7BD87", +"J] c #FFA955", +"K] c #F2CAA7", +"L] c #767474", +"M] c #7C7B7B", +"N] c #939292", +"O] c #8A8B8A", +"P] c #676768", +"Q] c #848485", +"R] c #818281", +"S] c #7F7E7E", +"T] c #7B7B7A", +"U] c #545050", +"V] c #A48A7F", +"W] c #F5BB86", +"X] c #FBBF87", +"Y] c #F2C6A1", +"Z] c #D6BEAF", +"`] c #A29996", +" ^ c #626263", +".^ c #A5A6A6", +"+^ c #9F9FA0", +"@^ c #8B8C8B", +"#^ c #818180", +"$^ c #7E7D7E", +"%^ c #7C7C7D", +"&^ c #787978", +"*^ c #636463", +"=^ c #504D4D", +"-^ c #9F867D", +";^ c #F7BC85", +">^ c #FDC086", +",^ c #D3B5A2", +"'^ c #D5BAA7", +")^ c #DCBCA5", +"!^ c #DDC0A9", +"~^ c #D0B8A9", +"{^ c #BBACA4", +"]^ c #99918F", +"^^ c #777474", +"/^ c #616160", +"(^ c #626161", +"_^ c #7C7D7C", +":^ c #9B9A9A", +"<^ c #666667", +"[^ c #818182", +"}^ c #7D7E7D", +"|^ c #757475", +"1^ c #514E4E", +"2^ c #9E857C", +"3^ c #FFBC7B", +"4^ c #FFC185", +"5^ c #B7A39A", +"6^ c #6A6666", +"7^ c #666464", +"8^ c #6B6868", +"9^ c #6D6969", +"0^ c #666564", +"a^ c #5F6060", +"b^ c #707171", +"c^ c #807F80", +"d^ c #8E8E8F", +"e^ c #979696", +"f^ c #959594", +"g^ c #686869", +"h^ c #7F8080", +"i^ c #7E7E7F", +"j^ c #7C7D7D", +"k^ c #737374", +"l^ c #9D847A", +"m^ c #F7BB83", +"n^ c #FFC083", +"o^ c #BDA598", +"p^ c #6C6767", +"q^ c #535453", +"r^ c #5B595B", +"s^ c #5F5F5E", +"t^ c #747473", +"u^ c #838384", +"v^ c #908F90", +"w^ c #919192", +"x^ c #7D7C7D", +"y^ c #818282", +"z^ c #808081", +"A^ c #7F7F80", +"B^ c #524E4E", +"C^ c #9B8279", +"D^ c #F1B683", +"E^ c #BFA597", +"F^ c #6E6868", +"G^ c #5B5A5C", +"H^ c #5C5D5D", +"I^ c #828181", +"J^ c #5A595A", +"K^ c #676667", +"L^ c #8A8A8A", +"M^ c #7A7A7B", +"N^ c #4E4B4B", +"O^ c #987F76", +"P^ c #F0B682", +"Q^ c #FFBD7D", +"R^ c #C0A596", +"S^ c #6D6867", +"T^ c #9E9E9D", +"U^ c #838282", +"V^ c #767576", +"W^ c #868585", +"X^ c #797A79", +"Y^ c #737273", +"Z^ c #4A4747", +"`^ c #967D73", +" / c #F4B77E", +"./ c #FDBB7C", +"+/ c #C0A494", +"@/ c #6C6766", +"#/ c #7F7E7F", +"$/ c #989897", +"%/ c #9C9D9C", +"&/ c #6F6D6D", +"*/ c #A48C82", +"=/ c #FBBB7D", +"-/ c #C2A595", +";/ c #6C6463", +">/ c #4D4F4E", +",/ c #9C9B9C", +"'/ c #9B9B9A", +")/ c #787676", +"!/ c #A89189", +"~/ c #F3B681", +"{/ c #C5A592", +"]/ c #6C6564", +"^/ c #838483", +"// c #8D8D8C", +"(/ c #959696", +"_/ c #959795", +":/ c #757574", +"( c #82726F", +",( c #917E7A", +"'( c #DA9E72", +")( c #E1AB83", +"!( c #9B8B88", +"~( c #D99D72", +"{( c #FFC68F", +"]( c #E8B081", +"^( c #9B8985", +"/( c #767575", +"(( c #937E79", +"_( c #DD9B6B", +":( c #FDB46F", +"<( c #F7B77B", +"[( c #A18D87", +"}( c #8D7C79", +"|( c #D8996C", +"1( c #FDB774", +"2( c #F1B17A", +"3( c #6F5F5C", +"4( c #C98F67", +"5( c #FDC590", +"6( c #F9C290", +"7( c #FCC28A", +"8( c #EAAE7D", +"9( c #A18C86", +"0( c #E19D71", +"a( c #D0AA91", +"b( c #A38B82", +"c( c #96827C", +"d( c #AA8E82", +"e( c #D7A988", +"f( c #EAAC79", +"g( c #A18B85", +"h( c #D69A81", +"i( c #FCB069", +"j( c #EDBEA0", +"k( c #6F6462", +"l( c #C79D81", +"m( c #F1AF76", +"n( c #A38C84", +"o( c #E7A06F", +"p( c #F9B67A", +"q( c #F5B784", +"r( c #FAB36F", +"s( c #91776E", +"t( c #595757", +"u( c #F0A469", +"v( c #F6BA89", +"w( c #EAB18D", +"x( c #FEB875", +"y( c #F8B273", +"z( c #D3A190", +"A( c #494747", +"B( c #ECA26B", +"C( c #F8B983", +"D( c #E8B08D", +"E( c #FEB671", +"F( c #F6AF73", +"G( c #D6A291", +"H( c #DD9B77", +"I( c #FBB370", +"J( c #E3B8A6", +"K( c #EFAF7F", +"L( c #F7AF70", +"M( c #D6A290", +"N( c #F8AB67", +"O( c #F8B881", +"P( c #DDB3A5", +"Q( c #DCA58D", +"R( c #F9B06E", +"S( c #D59F8B", +"T( c #D4957C", +"U( c #FEAE61", +"V( c #FDB672", +"W( c #E8B18E", +"X( c #DEAE9A", +"Y( c #DCA791", +"Z( c #E8A981", +"`( c #FDB26A", +" _ c #D69F8B", +"._ c #D59E8A", +"+_ c #E7A376", +"@_ c #F5A968", +"#_ c #F8AC69", +"$_ c #F5AA6A", +"%_ c #E6A47B", +"&_ c #D7A697", " ", " ", " ", @@ -2214,52 +2204,52 @@ static char * SimCreateIco_xpm[] = { " -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)z)W)>!/#,!'!)! ", " o+I.4.m%[+ +=$G#|.!!|.k.M&|.F.k.<+!!(@G.H.4._#_#I.n.:#o+C+.+++2+P.~!/#/#/#/#/#B#R*i*y*D*{ E${!(%]!^!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;/!-,%)R)r'r'-'6'=)w).)()(!g)_!z)z)z)z):!M)>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z)x!y!z!A!B! C! ", -" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#D!E!F!G!E*j*H!3*W)(&{ | =&x*[=I!/#/#/#J!Z&Z&Z&c%c%e F>K!,,L!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)M!N!O!P!Q! R!R! ", -" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)G)$~%~&~P!*~ R!=~ ", -" P.G%[;o*F!-~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%;~x*=&7.E*2*{ >~| y*^&,~'~)~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)!~~~{~]~^~/~ (~_~ ", -" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*2~3~4~5~6~7~8~ 9~0~ ", -" P.a~p)3*R*/&b~c~d~X!j*e~f~E!g~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)h~i~j~x*i*T*k~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.l~l~o*M):!l*m~n~o~p~q~r~s~t~u~v~w~P.P. x~y~z~A~ ", -" P..~1~o*%@!*B~;*C~T*j*{ D~E~F~| E*G~H~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.I~-*} J~K~R*L~9&]&j~E!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&m~M~N~x!O~r~t~P~Q~R~S~P.P.P.P.P.P.P. T~U~V~W~ ", -" P.X~l*(&!*}-Y~0*Z~`~T![- {.{=&E&=&=&=&y*+{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$@{s !*. a)+~#{${%{%{/#/#e*1*/#e*&{. *{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.={/&-{;{>{t~P~,{6~'{){!{P.P.P.P.P.P.~{{{]{,{^{/{ ", -" P.({/&/&}-*+_{F=F=T!:{5.V&S.<{-*[{}{|{9&R*R*1{2{`)3{4{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 5{}*i&V&`~6{7{O):&[*D+8{Z)9{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0{a{b{P~c{,{d{5~e{f{g{h{i{j{k{l{m{n{,{o{,{p{ ", -" P.1~:~:~*+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{z{S&N)${h~${D!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M A{! Z)B{5.Z~C{[-8{-*S.)*D{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.E{F{G{s~H{,{I{J{K{c{L{M{N{O{P{Q{R{S{T{o{U{V{W{ ", -" P.X{2*>~Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]Q $]%]&]-~*]=]-~|%. S.-]v I.a+$+#+Q.P.P.P.P.P.P.P.p.s{$];]>]0*,]p.Z)1=a ']*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]!]~]s~H{c{V~d{{]]]T{T{{]V~c{V~{]^]/](]o{_]:] ", -" P.-{<]| !@[]T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M :.|]. 6]E@7]7]<~>)}-s{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]8]b{5~P~c{,{I{J{{]]]T{9]0]^{a]b]c]U{d]o{e]f]g] ", -" P.j*7.[~A*A*h]i]U&j]w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.7@o]a!D+|%+~ ~p]q]}-T!3][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.r]s]~]5~t]H{,{V~d{{]K{T{u]^]v]e]a]w]c]x]x]u]y]z]A] ", -" P.B]C]G!e*h]=&T.V*V*x*D];*8{E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#}.G]:{H]I]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J]K]L]Q~t~P~c{V~d{J{K{M]u]9]0]^{a]w]c]c]^]Q~N]O]P]1] ", -" P.o!-+-+%@!*Q]!@R]!=x*x*c+j~Q*e*S]*+T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+U]S&V]:&W]=*X]Y~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Y]Z]`]]~t~t]H{,{I{J{{]]]T{9]]]t~t]I{d{t] ^R{.^+^@^#^@] ", -" P.7.i*$^!*}-Y~0*Z~`~-*. x&,.`)_&K~%^I!e*&^}-T]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)*^D+=^-^. 6{*+;^8{-*>^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.,^'^)^6~s~t]P~c{V~d{{]K{M]u]M]!^~^{^]^^^/^(^_^:^D{! <^[^ ", -" P.=&]&]&}-*+_{F=F=T!:{5.V&S.<{5.}^&^/=/#X*|^e*s%&{!*1^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&2^:&H~3^;]X]p=*+$]0*4^T!`~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.5^6^L{7^5~t~P~H{,{I{J{K{]]T{K{8^9^0^a^b^c^d^e^A{#]9 ) 5{f^ ", -" P.2{Q*Q**+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{g^h^i^C~/=j^6.k^ ~b%l^M [+4.Q@C+p+2+P.P.P.P.a)[*m^n^o^b%!*}-*+$]F=p^-*-*-*T!`~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.Y]q^r^7^Q~s~t]H{c{V~d{{]]]M]K{s^v~k{t^N M v ..K u^:.a 0 n v^ ", -" P.c+_&_&Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]1]w^x^y^z^#!&@<~|%A^.*N 0%P.P.P.P.P.B^C^D^n^[-. !*}-[]-&F=T!-*-*-*-*-*-*-*T!`~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.E^F^G^7^]~5~t~P~c{,{I{J{K{M]K{&~H^I^O+&.%.O N ^+5]{@s r J^o]K^ ", -" P.R*D!`)L^Y{T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M M^N^[]!@+~ ~|%O^x&O)< ..n.P.V]:&D+O)b%P^6{;^8{0*`~T!-*-*-*-*-*-*-*-*-*-*-*T!`~F=5.w{9 ..&.I.P.#+Q.Q.P.w%Q^R^7^]~Q~s~t]H{,{V~d{{]]]]]S^T^U^>.i.`.&.g.#.N +.v ..s Y.r H ", -" P.[=!=V^!=!==]<~W^X^w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.}.{+< [ ~ p]Y^O'S&[-*^D^O)[-%@!*Z^@~0*F=`~`^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!`~`~V&w{1=H g.n. /./+/S^6~Q~s~t~P~c{V~d{J{K{K{@/#/$/1!2.}.-.<.O+g.P $.N I~v .. .s ", -" P.%/7]&/=]*/.{X*X*X*|^,#S&F=E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B^:&D+O)-^. !**+8{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*=/-/;/S^7^]~5~s~t]H{,{I{d{{]K{7^>/,/I.n+<%M&'/}.[.`.&.g.P N N M ']]+ ", -" P.8+v+1.Z)D+ ~,#/=1*)/!/e*s%s%,#O'F=T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+H~[-. !*v&*+q{F=`~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~/{/]/&~S^6~Q~s~t~P~c{V~d{J{{]6~^///S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ", -" P.#+8+9+#+_+w b%(/_/=+e*s%C~i]:/.}.[.<. ", -" $+P.4.g.H w{r/&{s/,#a&&{O^t/;*x&0!*+u/Z.0%P.P.P.P.P.b%. !*}-*+8{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*v/w/x/&~s^&~7^6~Q~s~t]H{c{V~d{Q~y/z/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ", -" Q.O.I.F.N w{b% ~+~|%A/U&~ !@O'S&a)B/w M o+P.b%h/!*C/8{0*D/p^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*E/F/G/&~8^^~S^6~Q~5~t~P~c{,{I{5~H/I/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ", -" P.O.M.o+g.w =*J/U&K/L/a)M/:&D+|/-^;^. !*}-*+0*N/O/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*P/Q/R/&~8^s^&~7^]~5~t~t]H{,{I{s~S/T/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ", -" P.P.P.P.p+N < =*U/*^M/O)0/-^%@P^}-v&[]0*V/W/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~P!s^&~S^]~Q~5~t~H{c{V~s~`/ (P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ", -" P.Q.#+$+M. .Z*.(%@!*. +(v&j]@(F=b/z{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(%(&~O!8^^~S^7^]~5~t~t]H{,{&(*(=(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ", -" P.#+$+a+f@H -(`~W/;(N/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/>(,(@/'(P!s^&~S^]~5~s~t]P~c{t~)(!(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ", -" P.Q.$+a+#+1.H w{< S.s{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~({(](S^'(O!8^^~S^7^]~s~t~P~c{t~^(/(<@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", -" P.#+a+a+P.k.s 3]w{p.s{`~T!-*-*-*-*-*-*-*-*-*-*-*((_(S^A!'(8^s^&~7^6~Q~t~t]H{t~:(<(f@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", -" Q. $+M.}...) Z)S.T!`~T!-*-*-*-*-*-*[(}(7^|('(P!s^&~7^6~Q~s~t]P~t~1(2(3(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", -" Q.o+}.M 0 Y&V&F=`~T!-*4(5(6~|(A!O!8^^~S^7^Q~5~t~P~6(7(8(P/F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", -" #+P.n.k.&.H w{9(0(a(y]|('(P!s^&~S^6~Q~s~t]t~b(3/P/-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ", -" Q.O.c(d(o/e(f(g(O!8^^~S^6~Q~5~t~t~h(i(P/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ", -" j(k(l(m(n(o(p(^~&~7^]~5~s~t~q(r(s(-*-*-*F=n.P.P.P.P.P.P.P.P. ", -" t(u(v( w(x(y(@/6~Q~s~t~z(A(2/-*-*-*-*F=n.P.P.P.P.P.P. ", -" B(C( D(]~5~t~E(F(G(N%5.T!T!-*F=n.P.P.P.P. ", -" H(I( J(k(s~K(L( /Q.#+#+n...w{T!n.P.P. ", -" M(N( O(P(Q(R( P.#+$+Q.P. ", -" S(T(U( V(W(X( ", -" Y(Z(`( _._+_ ", -" @_#_P($_%_&_*_=_-_ ", -" ;_>_,_'_)_!_~_ ", +" Q.O.p+o+o+Y$n.J.I.-$Q+Q+4.m%1!<%<%4.3.<%4.4.Q+f@I.n.n.n.o+o.0%j!O.@+P.P.P.~ /#/#/#/#/#k!R*i*l!k*m!'#_)4*l*n!o!=&]&_&p!p!y q!'*'*r!c%h,s!t!i&b#@>>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z):!x!y!z!A! B! ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#C!D!E!F!E*j*G!3*W)(&{ | =&x*[=H!/#/#/#I!Z&Z&Z&c%c%e F>J!,,K!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)L!M!N!O!P! Q!R! ", +" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)d!$~%~&~O!*~ =~-~ ", +" P.G%[;o*E!;~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%>~x*=&7.E*2*{ ,~| y*^&'~)~!~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)F)~~{~]~^~/~ (~_~ ", +" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*%)2~3~4~5~6~7~ 8~9~ ", +" P.0~p)3*R*/&a~b~c~X!j*d~e~D!f~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)g~h~i~x*i*T*j~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.k~k~o*M):!l*l~m~n~o~p~q~r~s~t~u~v~P.P. w~x~y~z~ ", +" P..~1~o*%@!*A~;*B~T*j*{ C~D~E~| E*F~G~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.H~-*} I~J~R*K~9&]&i~D!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&l~L~M~G!N~q~s~O~P~Q~R~P.P.P.P.P.P.P. S~T~U~V~ ", +" P.W~l*(&!*}-X~0*Y~Z~T![-`~ {=&E&=&=&=&y*.{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$+{s !*. a)+~@{#{${${/#/#e*1*/#e*%{. &{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.*{/&/&={-{s~O~;{5~>{,{'{P.P.P.P.P.P.){!{~{;{{{]{ ", +" P.^{/&/&}-*+/{F=F=T!({5.V&S._{-*:{<{[{9&R*R*}{|{`)1{2{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 3{}*i&V&Z~4{5{O):&[*D+6{Z)7{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.8{9{0{O~a{;{b{4~c{d{e{f{g{v~h{i{j{k{;{l{;{m{ ", +" P.1~:~:~*+n{o{Z~Z~}=p{&{q{r{p.s{w t{u{v{w{S&N)#{g~#{C!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M x{! Z)y{5.Y~z{[-6{-*S.)*A{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.B{C{D{r~E{;{F{G{H{a{I{J{K{L{M{N{O{P{Q{l{R{S{T{ ", +" P.U{2*,~V{Y~W{T!T!X{5.q{Y{p.Z{.*`{Z)}* ]g*! m .]Q +]@]#];~$]%];~|%. S.&]v I.a+$+#+Q.P.P.P.P.P.P.P.p.p{+]*]=]0*-]p.Z)1=a ;]*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>],]']r~E{a{U~b{)]!]Q{Q{)]U~a{U~)]~]{]]]l{^]/] ", +" P.(]_]| !@:]T!-*-*<]V&2{S.< i&[]v{}]|]1]1=2]9 a H I 3]M :.[]. 4]E@5]5]<~>)}-p{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>]6]0{4~O~a{;{F{G{)]!]Q{7]8]{{9]0]a]R{b]l{c]d]e] ", +" P.j*7.[~A*A*f]g]U&h]w*S.p.< .*w Z)Y&i]A{j]) A.k]H l]M@M P g.`.}.7@m]a!D+|%+~ ~n]o]}-T!1][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p]q]']4~r]E{;{U~b{)]H{Q{s]~]t]c]9]u]a]v]v]s]w]x]V{ ", +" P.y]z]F!e*f]=&T.V*V*x*A];*6{B]t{Z)}*1]C]! ) 0 x{r .v ]@N+&.`.-.1.3.4.n.<#}.D]({E]F]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.G]H]I]P~s~O~a{U~b{G{H{J]s]7]8]{{9]u]a]a]~]P~K]x]L]}] ", +" P.o!-+-+%@!*M]!@N]!=x*x*c+i~Q*e*O]*+P]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+Q]S&R]:&S]=*T]X~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.U]V]W]]~s~r]E{;{F{G{)]!]Q{7]!]s~r]F{b{r]X]Y]Z]`]}= ^ ] ", +" P.7.i*.^!*}-X~0*Y~Z~-*. x&,.`)_&J~+^H!e*@^}-P]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)#^D+$^%^. 4{*+&^6{-**^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.=^-^;^5~r~r]O~a{U~b{)]H{J]s]J]>^,^'^)^!^~^{^]^^^A{! /^(^ ", +" P.=&]&]&}-*+/{F=F=T!({5.V&S._{5._^@^/=/#X*:^e*s%%{!*<^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&[^:&G~}^*]T]p=*++]0*|^T!Z~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1^2^I{3^4~s~O~E{;{F{G{H{!]Q{H{4^5^6^7^8^9^0^E x{.]9 ) 3{a^ ", +" P.|{Q*Q**+n{o{Z~Z~}=p{&{q{r{p.s{w t{u{v{b^c^d^B~/=e^6.f^ ~b%g^M [+4.Q@C+p+2+P.P.P.P.a)[*h^i^j^b%!*}-*++]F=k^-*-*-*T!Z~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.U]l^m^3^P~r~r]E{a{U~b{)]!]J]H{n^o^p^q^N M v ..K r^:.a 0 n s^ ", +" P.c+_&_&V{Y~W{T!T!X{5.q{Y{p.Z{.*`{Z)}* ]g*! m .]}]t^u^v^w^#!&@<~|%x^.*N 0%P.P.P.P.P.y^z^A^i^[-. !*}-:]-&F=T!-*-*-*-*-*-*-*T!Z~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.B^C^D^3^]~4~s~O~a{;{F{G{H{J]H{&~E^F^O+&.%.O N ^+3]{@s r G^m]H^ ", +" P.R*C!`)I^V{T!-*-*<]V&2{S.< i&[]v{}]|]1]1=2]9 a H I 3]M J^K^:]!@+~ ~|%L^x&O)< ..n.P.R]:&D+O)b%M^4{&^6{0*Z~T!-*-*-*-*-*-*-*-*-*-*-*T!Z~F=5.t{9 ..&.I.P.#+Q.Q.P.N^O^P^3^]~P~r~r]E{;{U~b{)]!]!]Q^R^S^>.i.`.&.g.#.N +.v ..s Y.r H ", +" P.[=!=T^!=!=%]<~U^V^w*S.p.< .*w Z)Y&i]A{j]) A.k]H l]M@M P g.`.}.}.{+< [ ~ n]W^O'S&[-#^A^O)[-%@!*X^@~0*F=Z~Y^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!Z~Z~V&t{1=H g.n.Z^`^ /Q^5~P~r~s~O~a{U~b{G{H{H{./+/@/1!2.}.-.<.O+g.P $.N H~v .. .s ", +" P.#/5]$/%]%/ {X*X*X*:^,#S&F=B]t{Z)}*1]C]! ) 0 x{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%y^:&D+O)%^. !**+6{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*&/*/=/Q^3^]~4~r~r]E{;{F{b{)]H{3^-/;/I.n+<%M&>/}.[.`.&.g.P N N M ;]]+ ", +" P.8+v+1.Z)D+ ~,#/=1*,/'/e*s%s%,#O'F=P]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+G~[-. !*v&*+n{F=Z~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*)/!/~/&~Q^5~P~r~s~O~a{U~b{G{)]5~{/]/S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ", +" P.#+8+9+#+_+w b%^///=+e*s%B~g](/_/~!!@:/.}.[.<. ", +" $+P.4.g.H t{n/%{o/,#a&%{L^p/;*x&0!*+q/Z.0%P.P.P.P.P.b%. !*}-*+6{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*r/s/t/&~n^&~3^5~P~r~r]E{a{U~b{P~u/v/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ", +" Q.O.I.F.N t{b% ~+~|%w/U&~ !@O'S&a)x/w M o+P.b%d/!*y/6{0*z/k^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*h/A/B/&~4^^~Q^5~P~4~s~O~a{;{F{4~C/D/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ", +" P.O.M.o+g.w =*E/U&F/G/a)H/:&D+[/%^&^. !*}-*+0*I/J/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*9/K/L/&~4^n^&~3^]~4~s~r]E{;{F{r~M/D/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ", +" P.P.P.P.p+N < =*N/#^H/O)7/%^%@M^}-v&:]0*O/P/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=Q/R/&~O!n^&~Q^]~P~4~s~E{a{U~r~S/T/P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ", +" P.Q.#+$+M. .Z*U/%@!*. V/v&h]W/F=9/w{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~N!4^^~Q^3^]~4~s~r]E{;{`/ (.(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ", +" P.#+$+a+f@H +(Z~P/@(I/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(./%(O!n^&~Q^]~4~r~r]O~a{s~&(*(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ", +" P.Q.$+a+#+1.H t{< S.p{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/=(-(Q^%(N!4^^~Q^3^]~r~s~O~a{s~;(>(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" P.#+a+a+P.k.s 1]t{p.p{Z~T!-*-*-*-*-*-*-*-*-*-*-*,('(Q^z!%(4^n^&~3^5~P~s~r]E{s~)(!(n+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" Q. $+M.}...) Z)S.T!Z~T!-*-*-*-*-*-*,(~(3^{(%(O!n^&~3^5~P~r~r]O~s~](^(/(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" Q.o+}.M 0 Y&V&F=Z~T!-*((_(5~{(z!N!4^^~Q^3^P~4~s~O~:(<([(}=F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" #+P.n.k.&.H t{}(|(1(w]{(%(O!n^&~Q^5~P~r~r]s~2(1/}=-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ", +" Q.O.3(4(k/5(6(7(N!4^^~Q^5~P~4~s~s~8(9(9/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ", +" 0(k/a(b(c(d(e(^~&~3^]~4~r~s~f(g(L]-*-*-*F=n.P.P.P.P.P.P.P.P. ", +" h(i(j( 1^k(l(./5~P~r~s~m(n(|/-*-*-*-*F=n.P.P.P.P.P.P. ", +" o(p( q(]~4~s~r(s(t(N%5.T!T!-*F=n.P.P.P.P. ", +" u(v( w(x(r~y(z(A(Q.#+#+n...t{T!n.P.P. ", +" B(C( D(E(F(G( P.#+$+Q.P. ", +" H(I(J( K(L(M( ", +" N(O(P( Q(R(S( ", +" T(U(V(W(X(Y(Z(`( _ ", +" ._+_@_#_$_%_&_ ", " ", " "}; diff --git a/src/Mod/Ship/Icons/SimRunIco.png b/src/Mod/Ship/Icons/SimRunIco.png new file mode 100644 index 0000000000000000000000000000000000000000..f10386cf77f0dccf33f6e347820703a618102a00 GIT binary patch literal 15466 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 KQnf&n(EkHdBM+Pa literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/SimRunIco.xpm b/src/Mod/Ship/Icons/SimRunIco.xpm new file mode 100644 index 000000000..44cd8b4ab --- /dev/null +++ b/src/Mod/Ship/Icons/SimRunIco.xpm @@ -0,0 +1,2723 @@ +/* XPM */ +static char * SimRunIco_xpm[] = { +"128 128 2592 2", +" c None", +". c #7B7B7B", +"+ c #EAEAEA", +"@ c #E9EAE9", +"# c #E9E9E9", +"$ c #E9E9E8", +"% c #D9D9D9", +"& c #EAEAE9", +"* c #E8E9E8", +"= c #E9E8E8", +"- c #E8E8E8", +"; c #E8E8E7", +"> c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #C7C6C6", +"J) c #C5C6C6", +"K) c #C6C5C6", +"L) c #B2B3B3", +"M) c #949494", +"N) c #7E7E7E", +"O) c #171718", +"P) c #0D0E0D", +"Q) c #09090A", +"R) c #080909", +"S) c #070607", +"T) c #060504", +"U) c #020303", +"V) c #0A0505", +"W) c #B6ACAE", +"X) c #B5ACAD", +"Y) c #A19999", +"Z) c #666666", +"`) c #9F9F9F", +" ! c #C4C3C4", +".! c #C2C2C3", +"+! c #C0C0BF", +"@! c #BCBBBB", +"#! c #909191", +"$! c #141516", +"%! c #121211", +"&! c #0F0E0F", +"*! c #090908", +"=! c #070606", +"-! c #050605", +";! c #020101", +">! c #5E2E2E", +",! c #E46A66", +"'! c #E36B64", +")! c #C77878", +"!! c #9F9B9B", +"~! c #4D4E4D", +"{! c #929292", +"]! c #C2C3C2", +"^! c #C1C2C2", +"/! c #C2C1C2", +"(! c #0B0C0B", +"_! c #030202", +":! c #000100", +"~ c #B0AFAF", +",~ c #B1B0B0", +"'~ c #ACADAC", +")~ c #AAABAB", +"!~ c #A8A7A8", +"~~ c #8C8C8C", +"{~ c #B9B8B8", +"]~ c #8D8D8D", +"^~ c #8F7B7C", +"/~ c #DB7066", +"(~ c #EB7A30", +"_~ c #E87448", +":~ c #9B5050", +"<~ c #211314", +"[~ c #050303", +"}~ c #2C1B1B", +"|~ c #5D3232", +"1~ c #964A49", +"2~ c #BA5351", +"3~ c #E26557", +"4~ c #E96D58", +"5~ c #F08B4C", +"6~ c #F89744", +"7~ c #EE7257", +"8~ c #EA6A5C", +"9~ c #F16358", +"0~ c #E9615F", +"a~ c #E36565", +"b~ c #F36656", +"c~ c #F59C60", +"d~ c #F35B4F", +"e~ c #999898", +"f~ c #A3A2A3", +"g~ c #ACACAD", +"h~ c #A4A4A3", +"i~ c #A1A0A0", +"j~ c #9E9D9D", +"k~ c #CC9D9C", +"l~ c #EC725C", +"m~ c #EE7D29", +"n~ c #EA7352", +"o~ c #C96967", +"p~ c #AA5654", +"q~ c #D9625C", +"r~ c #E67059", +"s~ c #EB7C4F", +"t~ c #ED8449", +"u~ c #F7923A", +"v~ c #FA953A", +"w~ c #FF9C3B", +"x~ c #FF9E3F", +"y~ c #FB9C46", +"z~ c #FB9E4A", +"A~ c #F69A55", +"B~ c #F08C5D", +"C~ c #F07C5E", +"D~ c #F1685A", +"E~ c #EF5B58", +"F~ c #E75F5D", +"G~ c #F15551", +"H~ c #F18A63", +"I~ c #F18562", +"J~ c #EA5653", +"K~ c #AEAEAF", +"L~ c #8F8F8F", +"M~ c #A9A9AA", +"N~ c #A3A2A2", +"O~ c #AEAFAF", +"P~ c #B9B1B1", +"Q~ c #DF8886", +"R~ c #EA7C3F", +"S~ c #F7841B", +"T~ c #EC7F39", +"U~ c #EC803E", +"V~ c #EF853B", +"W~ c #FB8D25", +"X~ c #FF9227", +"Y~ c #FF952D", +"Z~ c #FF9731", +"`~ c #FF9A37", +" { c #FF9D3D", +".{ c #FF9F41", +"+{ c #FFA145", +"@{ c #FFA44B", +"#{ c #FFA64F", +"${ c #FFA955", +"%{ c #FEA956", +"&{ c #FBA85F", +"*{ c #F29666", +"={ c #F29469", +"-{ c #F39768", +";{ c #FCAE69", +">{ c #F16F5E", +",{ c #BABAB9", +"'{ c #B2B2B3", +"){ c #B1B3B2", +"!{ c #B1B2B1", +"~{ c #ADACAB", +"{{ c #AAA9AA", +"]{ c #888988", +"^{ c #9E9D9E", +"/{ c #A0A0A1", +"({ c #A4A3A3", +"_{ c #A7A8A8", +":{ c #494747", +"<{ c #A16766", +"[{ c #E97A4A", +"}{ c #FF860F", +"|{ c #FF8915", +"1{ c #FF8B19", +"2{ c #FF8E1F", +"3{ c #FF9125", +"4{ c #FF9329", +"5{ c #FF962F", +"6{ c #FF9833", +"7{ c #FF9B39", +"8{ c #FFA043", +"9{ c #FFA247", +"0{ c #FFA751", +"a{ c #FFAA57", +"b{ c #FFAC5B", +"c{ c #FFAE5F", +"d{ c #FFB063", +"e{ c #FFB369", +"f{ c #FFB46B", +"g{ c #FDB26D", +"h{ c #F36F5F", +"i{ c #B3B4B3", +"j{ c #7D7C7C", +"k{ c #989898", +"l{ c #AEADAD", +"m{ c #ADACAD", +"n{ c #ACABAC", +"o{ c #9C9D9D", +"p{ c #7F7F7E", +"q{ c #565756", +"r{ c #989998", +"s{ c #A0A1A0", +"t{ c #A4A3A4", +"u{ c #4F4A4A", +"v{ c #9D6B6B", +"w{ c #E0756A", +"x{ c #EB7F3D", +"y{ c #FFA349", +"z{ c #FFA54D", +"A{ c #FFA853", +"B{ c #FFAB59", +"C{ c #FFAD5D", +"D{ c #FFAF61", +"E{ c #FFB267", +"F{ c #FFB66F", +"G{ c #FDB571", +"H{ c #F3836A", +"I{ c #DC5B57", +"J{ c #BA5C5C", +"K{ c #B6B7B7", +"L{ c #787877", +"M{ c #757676", +"N{ c #747474", +"O{ c #8C8D8C", +"P{ c #9D9C9D", +"Q{ c #A8A8A7", +"R{ c #545353", +"S{ c #989797", +"T{ c #9F9F9E", +"U{ c #A0A1A1", +"V{ c #8C8C8B", +"W{ c #706F70", +"X{ c #484646", +"Y{ c #9F6A6A", +"Z{ c #E9785E", +"`{ c #EC7D30", +" ] c #FE830B", +".] c #FF8711", +"+] c #FF8C1B", +"@] c #FF8F21", +"#] c #FA9231", +"$] c #F38F40", +"%] c #EE894F", +"&] c #ED8458", +"*] c #EE815B", +"=] c #EE815C", +"-] c #EE855E", +";] c #EF8D5D", +">] c #F4995D", +",] c #FAA45A", +"'] c #FEAC5C", +")] c #FFB56D", +"!] c #FFB771", +"~] c #FFB975", +"{] c #FCB677", +"]] c #F39572", +"^] c #E76158", +"/] c #8B5252", +"(] c #464343", +"_] c #B4B5B5", +":] c #777677", +"<] c #727172", +"[] c #6B6C6C", +"}] c #80807F", +"|] c #919090", +"1] c #9E9E9F", +"2] c #A4A5A4", +"3] c #A6A7A6", +"4] c #898888", +"5] c #6E6E6D", +"6] c #5F5F60", +"7] c #797A7A", +"8] c #7E7F7F", +"9] c #777777", +"0] c #616060", +"a] c #7F6464", +"b] c #A67373", +"c] c #6B5959", +"d] c #4E4A4A", +"e] c #A06C6C", +"f] c #E8795F", +"g] c #F07E20", +"h] c #FF8207", +"i] c #FF840B", +"j] c #FE8B1B", +"k] c #F68B2C", +"l] c #EC834B", +"m] c #EB775D", +"n] c #E16F65", +"o] c #C86B67", +"p] c #AD6463", +"q] c #9C605F", +"r] c #995E5D", +"s] c #A7605E", +"t] c #C0625F", +"u] c #DC6660", +"v] c #ED7363", +"w] c #EF8968", +"x] c #F6A268", +"y] c #FEB166", +"z] c #FFB873", +"A] c #FFBA77", +"B] c #FFBB79", +"C] c #F39870", +"D] c #E65F57", +"E] c #875252", +"F] c #424040", +"G] c #866263", +"H] c #A55757", +"I] c #767777", +"J] c #767675", +"K] c #717171", +"L] c #6E6E6F", +"M] c #6C6D6D", +"N] c #6A6969", +"O] c #676767", +"P] c #656665", +"Q] c #676766", +"R] c #727373", +"S] c #5C5C5B", +"T] c #6A6A6B", +"U] c #7B7A7B", +"V] c #626262", +"W] c #534D4D", +"X] c #C37F7E", +"Y] c #E67E6E", +"Z] c #CB7C78", +"`] c #886767", +" ^ c #5F5353", +".^ c #8C6767", +"+^ c #E87A68", +"@^ c #EB7B21", +"#^ c #FE7E00", +"$^ c #FB881A", +"%^ c #EC8345", +"&^ c #EA7761", +"*^ c #C76F6B", +"=^ c #926363", +"-^ c #685252", +";^ c #524A4A", +">^ c #494646", +",^ c #484545", +"'^ c #4E4848", +")^ c #5F4E4E", +"!^ c #835757", +"~^ c #B85F5D", +"{^ c #E86E63", +"]^ c #F18C6B", +"^^ c #F9AC6D", +"/^ c #FEB670", +"(^ c #FEB56E", +"_^ c #F2956C", +":^ c #E86259", +"<^ c #B46261", +"[^ c #B06261", +"}^ c #E15450", +"|^ c #F34C49", +"1^ c #B1B1B2", +"2^ c #777676", +"3^ c #747575", +"4^ c #717271", +"5^ c #6D6E6D", +"6^ c #6B6B6A", +"7^ c #686767", +"8^ c #646363", +"9^ c #5D5D5C", +"0^ c #777776", +"a^ c #878788", +"b^ c #969596", +"c^ c #9A9898", +"d^ c #9A9A99", +"e^ c #646463", +"f^ c #7B7C7C", +"g^ c #7B7C7B", +"h^ c #707170", +"i^ c #575756", +"j^ c #7E6464", +"k^ c #E68379", +"l^ c #D27438", +"m^ c #D6763F", +"n^ c #E27D68", +"o^ c #DB7D71", +"p^ c #E07E6F", +"q^ c #E47B42", +"r^ c #F77B00", +"s^ c #FF8105", +"t^ c #F58522", +"u^ c #E97D54", +"v^ c #D4736B", +"w^ c #906363", +"x^ c #5A4E4E", +"y^ c #504848", +"z^ c #7C5555", +"A^ c #C15F5D", +"B^ c #F07865", +"C^ c #F5A472", +"D^ c #F39868", +"E^ c #F08060", +"F^ c #F07E5D", +"G^ c #F08A5C", +"H^ c #F36251", +"I^ c #E35656", +"J^ c #B0B0B1", +"K^ c #ABACAB", +"L^ c #787777", +"M^ c #717170", +"N^ c #696869", +"O^ c #666565", +"P^ c #646465", +"Q^ c #636363", +"R^ c #605F5F", +"S^ c #575758", +"T^ c #8B8A8B", +"U^ c #949393", +"V^ c #665858", +"W^ c #AA7979", +"X^ c #DC8378", +"Y^ c #D77848", +"Z^ c #DB741F", +"`^ c #E27513", +" / c #E87813", +"./ c #F37901", +"+/ c #FA7C00", +"@/ c #F4811C", +"#/ c #E87D5C", +"$/ c #BC716E", +"%/ c #6E5858", +"&/ c #5C4D4D", +"*/ c #A15B5B", +"=/ c #EB7265", +"-/ c #F49D6F", +";/ c #FEB36A", +">/ c #FFB165", +",/ c #FEAA5A", +"'/ c #F07A5A", +")/ c #EE5350", +"!/ c #A5A4A4", +"~/ c #969797", +"{/ c #787778", +"]/ c #636364", +"^/ c #606161", +"// c #5D5C5C", +"(/ c #585958", +"_/ c #5C5C5D", +":/ c #868787", +"( c #946565", +",( c #EC7262", +"'( c #F8A25A", +")( c #FDA24C", +"!( c #EF6C56", +"~( c #DB6868", +"{( c #7C7D7C", +"]( c #9B9A9A", +"^( c #666667", +"/( c #818182", +"(( c #7D7E7D", +"_( c #757475", +":( c #635757", +"<( c #DA8882", +"[( c #D7752B", +"}( c #EA7400", +"|( c #E57A22", +"1( c #E18173", +"2( c #735D5D", +"3( c #6B5D5D", +"4( c #CF6663", +"5( c #EF8D5F", +"6( c #FEA54F", +"7( c #EE8357", +"8( c #E65E5B", +"9( c #707171", +"0( c #807F80", +"a( c #8E8E8F", +"b( c #979696", +"c( c #959594", +"d( c #686869", +"e( c #7F8080", +"f( c #7E7E7F", +"g( c #7C7D7D", +"h( c #737374", +"i( c #DC8878", +"j( c #DA6F0A", +"k( c #E47100", +"l( c #E87300", +"m( c #E07E45", +"n( c #C07C79", +"o( c #514C4C", +"p( c #4C4E4E", +"q( c #535453", +"r( c #A16665", +"s( c #ED7961", +"t( c #FCA14B", +"u( c #F3924D", +"v( c #EB625C", +"w( c #747473", +"x( c #838384", +"y( c #908F90", +"z( c #919192", +"A( c #7D7C7D", +"B( c #818282", +"C( c #808081", +"D( c #7F7F80", +"E( c #9D7978", +"F( c #D98162", +"G( c #DB6F07", +"H( c #E27000", +"I( c #E87506", +"J( c #E0815F", +"K( c #976E6E", +"L( c #7F6162", +"M( c #E96C5F", +"N( c #F79A4D", +"O( c #F89642", +"P( c #F16454", +"Q( c #828181", +"R( c #5A595A", +"S( c #676667", +"T( c #8A8A8A", +"U( c #7A7A7B", +"V( c #7B7777", +"W( c #827B7B", +"X( c #7A7272", +"Y( c #726B6B", +"Z( c #6F6565", +"`( c #BB8887", +" _ c #D17A45", +"._ c #DA6C00", +"+_ c #E06F00", +"@_ c #E2740E", +"#_ c #DE8470", +"$_ c #7A6363", +"%_ c #695B5C", +"&_ c #D86A63", +"*_ c #F29351", +"=_ c #FE9937", +"-_ c #ED7253", +";_ c #E16A6A", +">_ c #9E9E9D", +",_ c #838282", +"'_ c #767576", +")_ c #868585", +"!_ c #797A79", +"~_ c #777778", +"{_ c #737273", +"]_ c #A08A8A", +"^_ c #E19C98", +"/_ c #DA948B", +"(_ c #DC9288", +"__ c #DF8A78", +":_ c #CE7229", +"<_ c #DE6E00", +"[_ c #DD7314", +"}_ c #DB8678", +"|_ c #645757", +"1_ c #5E5656", +"2_ c #CB6966", +"3_ c #F08D50", +"4_ c #FF9935", +"5_ c #FE9733", +"6_ c #ED7F4C", +"7_ c #EE6657", +"8_ c #EE6357", +"9_ c #EE5E54", +"0_ c #E56464", +"a_ c #7F7E7F", +"b_ c #989897", +"c_ c #9C9D9C", +"d_ c #A58E8E", +"e_ c #D2866E", +"f_ c #BC661B", +"g_ c #BF6719", +"h_ c #C36819", +"i_ c #C86B18", +"j_ c #D26800", +"k_ c #D66A00", +"l_ c #DC6D00", +"m_ c #DB7316", +"n_ c #DC8B80", +"o_ c #746A6A", +"p_ c #4D4F4E", +"q_ c #585454", +"r_ c #C46865", +"s_ c #EF894E", +"t_ c #FE932B", +"u_ c #F58B36", +"v_ c #F58A34", +"w_ c #EC7845", +"x_ c #E8615E", +"y_ c #9C9B9C", +"z_ c #9B9B9A", +"A_ c #A48E8E", +"B_ c #E59891", +"C_ c #D78B78", +"D_ c #D88A76", +"E_ c #D88975", +"F_ c #D48465", +"G_ c #CB6D1B", +"H_ c #D46900", +"I_ c #DB7315", +"J_ c #DD8C80", +"K_ c #887C7C", +"L_ c #5A5453", +"M_ c #C86A66", +"N_ c #EF894A", +"O_ c #FF942B", +"P_ c #EE8342", +"Q_ c #EC6D51", +"R_ c #ED6A52", +"S_ c #EF614F", +"T_ c #E76363", +"U_ c #838483", +"V_ c #8D8D8C", +"W_ c #959696", +"X_ c #959795", +"Y_ c #757574", +"Z_ c #656666", +"`_ c #7D7E7E", +" : c #737372", +".: c #807A7A", +"+: c #978787", +"@: c #978686", +"#: c #988787", +"$: c #CF9A99", +"%: c #CB7845", +"&: c #D86B00", +"*: c #D87111", +"=: c #DE8B79", +"-: c #958282", +";: c #625656", +">: c #D46D66", +",: c #F08A43", +"': c #FE9127", +"): c #EC7250", +"!: c #E66F6F", +"~: c #747374", +"{: c #979796", +"]: c #939392", +"^: c #7D7D7E", +"/: c #777878", +"(: c #747373", +"_: c #C09695", +":: c #CD7C4F", +"<: c #D06700", +"[: c #D76D08", +"}: c #DC866A", +"|: c #A98A8A", +"1: c #735B5B", +"2: c #E46E62", +"3: c #F48C37", +"4: c #FF9023", +"5: c #FE8E21", +"6: c #EC7152", +"7: c #7A7B7B", +"8: c #929393", +"9: c #666566", +"0: c #7C7C7B", +"a: c #AB9191", +"b: c #D98B73", +"c: c #C9670B", +"d: c #D96C00", +"e: c #D67F50", +"f: c #C69291", +"g: c #787575", +"h: c #926464", +"i: c #EA775D", +"j: c #FB8D26", +"k: c #F2872F", +"l: c #EE695B", +"m: c #7A7B7A", +"n: c #929293", +"o: c #898A8A", +"p: c #666665", +"q: c #8E8282", +"r: c #DD9486", +"s: c #C7670E", +"t: c #CE6600", +"u: c #D0742B", +"v: c #DD928A", +"w: c #8D8080", +"x: c #564F4F", +"y: c #BF6D6B", +"z: c #EA7F4B", +"A: c #FE8C1D", +"B: c #EF8233", +"C: c #EA6C64", +"D: c #898988", +"E: c #787879", +"F: c #797978", +"G: c #757675", +"H: c #827C7C", +"I: c #D99D9A", +"J: c #C5733A", +"K: c #CC6500", +"L: c #D46D0A", +"M: c #DB876B", +"N: c #B69090", +"O: c #816060", +"P: c #E57464", +"Q: c #F3872D", +"R: c #FF8A17", +"S: c #E97747", +"T: c #E57373", +"U: c #89898A", +"V: c #858685", +"W: c #848384", +"X: c #808180", +"Y: c #757576", +"Z: c #747475", +"`: c #C29796", +" < c #C67741", +".< c #CA6400", +"+< c #D56A00", +"@< c #CF7737", +"#< c #DA948C", +"$< c #928282", +"%< c #584F4F", +"&< c #BD706E", +"*< c #E97C4D", +"=< c #FD8715", +"-< c #FF8813", +";< c #F8851B", +">< c #ED6C56", +",< c #838382", +"'< c #747576", +")< c #737473", +"!< c #BE9393", +"~< c #C47641", +"{< c #C66200", +"]< c #D26A05", +"^< c #D7825E", +"/< c #C69493", +"(< c #837B7B", +"_< c #4A4646", +":< c #976566", +"<< c #E8785F", +"[< c #F58320", +"}< c #FF850D", +"|< c #F27F20", +"1< c #DB6C64", +"2< c #79797A", +"3< c #7A7A79", +"4< c #767776", +"5< c #968989", +"6< c #D69F9C", +"7< c #BE723B", +"8< c #C26000", +"9< c #CE6F1A", +"0< c #DB8A73", +"a< c #B69191", +"b< c #555050", +"c< c #836161", +"d< c #DF7768", +"e< c #EC7E32", +"f< c #FF8309", +"g< c #F27E1D", +"h< c #EB7267", +"i< c #6B6A6A", +"j< c #747574", +"k< c #8C8383", +"l< c #BF9F9E", +"m< c #DA9F98", +"n< c #C88261", +"o< c #B85F0C", +"p< c #BD5F04", +"q< c #C16104", +"r< c #C86300", +"s< c #D16800", +"t< c #CD732C", +"u< c #DE8E7A", +"v< c #A78080", +"w< c #5D5454", +"x< c #4E4949", +"y< c #DA7A6E", +"z< c #E97D3F", +"A< c #FD8007", +"B< c #FF8003", +"C< c #FF7F01", +"D< c #F97E0A", +"E< c #E8714E", +"F< c #ED716A", +"G< c #E57E7E", +"H< c #7D7979", +"I< c #CBA6A6", +"J< c #D59482", +"K< c #B36A31", +"L< c #B66B32", +"M< c #CC8667", +"N< c #D68F7B", +"O< c #CE8462", +"P< c #C16511", +"Q< c #CD732A", +"R< c #DB8A70", +"S< c #BF8A87", +"T< c #7B6767", +"U< c #4C4A4A", +"V< c #474545", +"W< c #695959", +"X< c #A77272", +"Y< c #E37B67", +"Z< c #E77D39", +"`< c #FA7C02", +" [ c #F17B16", +".[ c #E9792D", +"+[ c #E8782C", +"@[ c #E97821", +"#[ c #E3723C", +"$[ c #F56A66", +"%[ c #B69C9C", +"&[ c #DA9A8C", +"*[ c #CD8D76", +"=[ c #E0A39D", +"-[ c #BB9D9D", +";[ c #A28F8F", +">[ c #CA9F9E", +",[ c #CC825F", +"'[ c #C26103", +")[ c #CF6D15", +"![ c #D48159", +"~[ c #DC8F83", +"{[ c #AC7F7F", +"][ c #554F4F", +"^[ c #4F4B4B", +"/[ c #6D5B5B", +"([ c #9B7070", +"_[ c #D67F78", +":[ c #E57E5B", +"<[ c #EA7B23", +"[[ c #EF790D", +"}[ c #E9775A", +"|[ c #EB7C78", +"1[ c #EF7366", +"2[ c #EC6E5B", +"3[ c #EA7C7B", +"4[ c #847F7F", +"5[ c #D1A9A9", +"6[ c #BC9D9D", +"7[ c #948888", +"8[ c #767575", +"9[ c #978A8A", +"0[ c #DD9D94", +"a[ c #C37642", +"b[ c #C16000", +"c[ c #D26902", +"d[ c #CE722A", +"e[ c #D5825D", +"f[ c #DF8C7E", +"g[ c #C98A87", +"h[ c #A97D7C", +"i[ c #8D7070", +"j[ c #7C6767", +"k[ c #7B6565", +"l[ c #876B6B", +"m[ c #A27776", +"n[ c #C07E7C", +"o[ c #DE8479", +"p[ c #E27F5F", +"q[ c #DF7A36", +"r[ c #ED7808", +"s[ c #F07802", +"t[ c #E37846", +"u[ c #EC817C", +"v[ c #EA8181", +"w[ c #817D7D", +"x[ c #A59191", +"y[ c #DB9B91", +"z[ c #C17543", +"A[ c #C36100", +"B[ c #D36B05", +"C[ c #D06F1A", +"D[ c #D1783B", +"E[ c #D47E55", +"F[ c #DA8467", +"G[ c #DD856D", +"H[ c #DD846D", +"I[ c #DC8367", +"J[ c #DA7F58", +"K[ c #DA7B41", +"L[ c #DD7622", +"M[ c #E67407", +"N[ c #EB7500", +"O[ c #EC7602", +"P[ c #DF7747", +"Q[ c #EC827B", +"R[ c #A59090", +"S[ c #DC9B91", +"T[ c #C87E57", +"U[ c #C0640F", +"V[ c #D66B02", +"W[ c #D76C04", +"X[ c #D96E05", +"Y[ c #DB6E05", +"Z[ c #DD6F04", +"`[ c #E07003", +" } c #E37100", +".} c #DE751E", +"+} c #E27A53", +"@} c #EA847E", +"#} c #A08D8D", +"$} c #D8A2A0", +"%} c #C47A4E", +"&} c #C46100", +"*} c #DC7216", +"=} c #E57D66", +"-} c #EB8E8D", +";} c #B39696", +">} c #C77F5B", +",} c #BE5E00", +"'} c #C05F00", +")} c #D5732B", +"!} c #EC8D87", +"~} c #7A7878", +"{} c #CDA2A1", +"]} c #C17A51", +"^} c #B96B2F", +"/} c #CA8261", +"(} c #CD8466", +"_} c #C87B4F", +":} c #C16C25", +"<} c #C36204", +"[} c #C76301", +"}} c #D36900", +"|} c #D56A01", +"1} c #D26C0C", +"2} c #D0722B", +"3} c #D67A50", +"4} c #D97C58", +"5} c #D3753B", +"6} c #D2712A", +"7} c #EC8881", +"8} c #A59292", +"9} c #DA9C91", +"0} c #B3672B", +"a} c #D18D76", +"b} c #B68F8F", +"c} c #947C7C", +"d} c #BD9090", +"e} c #D6958E", +"f} c #D88C77", +"g} c #CF8260", +"h} c #C57237", +"i} c #C46D26", +"j} c #C86402", +"k} c #C86C1D", +"l} c #CB7027", +"m} c #CD7640", +"n} c #D78060", +"o} c #E18673", +"p} c #EA9189", +"q} c #F09F9F", +"r} c #EC9F9F", +"s} c #E98B82", +"t} c #CF7238", +"u} c #D47750", +"v} c #EB9290", +"w} c #635B5B", +"x} c #D0A19D", +"y} c #B8754C", +"z} c #BE7C58", +"A} c #CFA19F", +"B} c #655E5E", +"C} c #555151", +"D} c #F1B2B2", +"E} c #ECA39E", +"F} c #EA9B93", +"G} c #C5743F", +"H} c #C36B21", +"I} c #E48F80", +"J} c #EB9B96", +"K} c #EEA7A7", +"L} c #DC7E66", +"M} c #C96C25", +"N} c #E88276", +"O} c #AC9393", +"P} c #EFB2B1", +"Q} c #CB8C74", +"R} c #DB9D93", +"S} c #867474", +"T} c #ECAEAE", +"U} c #CA7C57", +"V} c #C06D2F", +"W} c #EBA19D", +"X} c #EE908D", +"Y} c #DD7E6A", +"Z} c #EF8984", +"`} c #F0BDBC", +" | c #F6C1C1", +".| c #ECB0B0", +"+| c #C87C58", +"@| c #BD6C2F", +"#| c #EBA29E", +"$| c #EE9D9D", +"%| c #ECB4B4", +"&| c #C57B58", +"*| c #B86A30", +"=| c #EBA4A0", +"-| c #EEB5B5", +";| c #D58B77", +">| c #C77E61", +",| c #EEA8A5", +"'| c #EDB2B1", +")| c #EFB0AF", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)V)W)X)Y)/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)>!,!'!)!!! ", +" o+I.4.m%[+ +=$G#|.~!|.k.M&|.F.k.<+~!(@G.H.4._#_#I.n.:#o+C+.+++2+P.{!/#/#/#/#/#B#R*i*y*D*{ E$]!(%^!/!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;(!-,%)Q)r'r'-'6'=)w).)()_!g):!z)z)z)>,>,w!S)=)x!y!z!A!B!8)C!z)z)z)z)z)D!E!F!G!1! H! ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#I!J!K!L!E*j*M!3*N!(&{ | =&x*[=O!/#/#/#P!Z&Z&Z&c%c%e F>Q!,,R!p$3@@%%*S!T!U!V!W!;!z)z)z)X!Y!Z!`! ~.~+~@~ #~$~%~&~ ", +" P./=*~=~G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=-~9&;~7.2*>~,~(&j*'~)~!~x*Q*!=/#/#/#/#/#/#~~P.9!c>e ,,M,{~C&;'T.]~^~/~(~_~:~<~[~}~|~1~2~3~4~5~6~7~8~9~0~a~ b~c~d~ ", +" P.G%[;o*K!e~~~=~M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.~~/#/#/#M%f~x*=&7.E*2*{ g~| y*^&h~i~j~/#/#/#/#/#/#1*P.P.P.P.P.{~;'9*8*8*9@_)k~l~m~n~o~p~q~r~s~t~u~v~w~x~y~z~A~B~C~D~E~F~G~H~I~J~ ", +" P.c%E+E+E++)4*K~;~B#L~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.L~/#!=_&R*i*V*E&7.| 7.M~-+x*N~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.O~+)E+6*P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{@{#{${%{&{*{={-{;{>{ ", +" P.,{p)3*R*/&'{){!{,~j*~{{{J!]{Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)^{/{({x*i*T*_{-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.:{<{[{}{|{1{2{3{4{5{6{7{ {8{9{@{0{a{b{c{d{e{f{g{h{ ", +" P.{~i{o*%@!*j{;*k{T*j*{ l{m{n{| E*o{p{a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.q{-*} r{s{R*t{9&]&({J!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.u{v{w{x{}{|{1{2{3{4{5{6{7{x~8{y{z{A{B{C{D{E{f{F{G{H{I{J{ ", +" P.K{l*(&!*}-L{0*M{N{=~[-O{P{=&E&=&=&=&y*Q{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$R{s !*. a)]~S{T{U{U{/#/#e*1*/#e*V{. W{K.P.P.P.P.P.P.P.X{P.P.P.P.u{Y{Z{`{ ].]|{+]@]3{#]$]%]&]*]=]-];]>],]']d{E{)]!]~]{]]]^]/](]O. ", +" P._]/&/&}-*+:]F=F==~<]5.V&S.[]-*}]|]1]9&R*R*2]3]`)4]5]s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 6]}*i&V&N{7]8]N):&[*D+9]Z)0]) P+J.P.P.O.P.P.P.Q.a]b]c]P.P.d]e]f]g]h]i].]|{j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y])]z]A]B]A]C]D]E]F]0 G]H] ", +" P.i{K~K~*+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]R]S&M)T{^{T{I!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M S]! Z)T]5.M{U][-9]-*S.)*V]0 ..F#M&Y$o+P.P.P.P.P.W]X]Y]Z]`] ^.^+^@^#^h]i]}{$^%^&^*^=^-^;^>^r+P.,^'^)^!^~^{^]^^^/^~]~]z](^_^:^<^[^}^|^ ", +" P.1^2*g~2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^Q 0^a^b^e~c^d^e~|%. S.e^v I.a+$+#+Q.P.P.P.P.P.P.P.p.K]0^f^g^0*h^p.Z)1=a i^*.P.P.P.P.P.P.P.P.j^k^l^m^n^o^p^q^r^#^s^i]t^u^v^w^x^r+P.P.P.P.P.P.P.P.P.y^z^A^B^C^(^!]F{)]e{D^E^F^G^H^I^ ", +" P.J^K^| !@L^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M :.N^. T^E@U^U^L~>)}-K]Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.V^W^X^Y^Z^`^ /./+/#^s^@/#/$/%/++P.P.P.P.P.P.P.P.P.P.P.P.Q.&/*/=/-/;/f{e{>/D{C{,/'/)/ ", +" P.j*7.M~A*A*!/~/U&{/w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.7@_/b!D+|%]~~~://D{c{b{d/e/ ", +" P.f/g/L!e*!/=&T.V*V*x*h/;*9]i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#}.k/<]l/m/>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.n/o/p/3/q/5/r/s/t/u/P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.M.F#f.v/w/x/y/c{C{b{a{z/A/ ", +" P.q!-+-+%@!*B/!@C/!=x*x*c+({Q*e*D/*+E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+F/S&G/:&H/=*I/L{< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J/K/L/M/q/N/O/P/Q/Q.P.P.P.P.P.P.P.P.P.P.P.P.Q.O.l+%.B.s I R/S/T/U/B{${A{V/W/ ", +" P.7.i*X/!*}-L{0*M{N{-*. x&,.`)_&s{Y/O!e*Z/}-E/c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)`/D+ (.(. 7]*++(9]-*@(g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N.#($(%(M/&(*(=(-(;(P.P.P.P.P.P.P.P.P.P.P.Q.P.;.q$$.N M L K q >(,('(A{0{#{)(!(~( ", +" P.=&]&]&}-*+:]F=F==~<]5.V&S.[]5.{(Z//=/#X*](e*s%V{!*^(v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&/(:&p{((f^I/p=*+0^0*_(=~N{F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.:(<([(%(}(3/|(1(2(P.P.P.P.P.P.P.P.P.P.P.P.3.[.[.O+%$P N M v t 3(4(5(6(z{@{9{7(8( ", +" P.3]Q*Q**+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]9(0(a(k{/=b(6.c(~~b%d(M [+4.Q@C+p+2+P.P.P.P.a)[*e(f(g(b%!*}-*+0^F=h(-*-*-*=~N{F=F=< 9 &.3.n.p+P.Q.P.P.P.R/i(j(k(l(3/m(n(o(P.P.P.P.P.P.P.P.P.P.Y$k.2.p(}.=%`.g.q(N M v e.r(s(t(y{9{8{u(v( ", +" P.c+_&_&2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^O^w(x(y(z(#!&@L~|%A(.*N 0%P.P.P.P.P.B(C(D(f([-. !*}-L^-&F==~-*-*-*-*-*-*-*=~N{F=-*.*0 P }.I.O.r+E(F(G(H(%(I(J(K(o%P.P.P.P.P.P.P.O.p+_#-%R+4.2.k.m+[.O+&.%.O N ^+L(M(N(8{8{x~O(P( ", +" P.R*I!`)Q(2^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M R(S(L^!@]~~~|%T(x&N)< ..n.P.G/:&D+N)b%U(7]+(9]0*N{=~-*-*-*-*-*-*-*-*-*-*-*=~N{V(W(X(Y(Z(`( _._+_k(@_#_$_P.P.P.P.P.P.O.R@1+++_*M.:#J.4.3.~!>.i.`.&.g.#.N %_&_*_x~ {w~=_-_;_ ", +" P.[=!=>_!=!=d^L~,_'_w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.}.{+< [ ~ :/)_O'S&[-`/D(N)[-%@!*!_~_0*F=N{{_-*-*-*-*-*-*-*-*-*-*-*-*-*]_^_/_(_(___:_._<_H([_}_|_#+Q.P.P.O.O.O.p+P.P.n%p+M.K.I.4.2!2.}.-.<.O+g.P 1_2_3_7{7{4_5_6_7_8_9_0_ ", +" P.a_U^b_d^c_P{X*X*X*](,#S&F=i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B(:&D+N).(. !**+9]0*F==~}=-*-*-*-*-*-*-*-*-*-*-*-*-*d_e_f_g_h_i_j_k_l_+_m_n_o_&.M.$+P.P.O.P.P.P.P.P.q+p+M.Q@I.n+<%M&p_}.[.`.&.q_r_s_4_6{Z~5{t_u_v_w_x_ ", +" P.8+v+1.Z)D+~~,#/=1*y_z_e*s%s%,#O'F=E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+p{[-. !*v&*+I]F=N{=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*A_B_C_D_E_F_G_H_._<_I_J_K_w*< .*o+P.P.P.P.P.P.P.P.O.R@S+o+n.f@r$G.~!}.[.`.L_M_N_Z~5{Y~O_P_Q_R_S_T_ ", +" P.#+8+9+#+_+w b%U_V_=+e*s%k{~/W_X_{!!@Y_Z_c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+`_.(. !*v&L^0*F=N{ :-*-*-*-*-*-*-*-*-*-*-*-*-*-*.:+:@:@:#:$:%:j_&:l_*:=:-:-*-*F=n.P.P.P.P.P.P.P.P.P.q+F$M.L.Q@}+-$3.1.k.}.;:>:,:O_O_4{':):!: ", +" Q.a+ v+p+M Z)~: (|%=+:={:,.]:]:{!,#~ '_P^v h.`.[.k. +4.J.o+p+P.P.P.P.P.^:g(f^U]p=/:9]'_N{(:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=_:::<:H_&:[:}:|:-*-*F=n.P.P.P.P.P.P.P.P.P.P.O.N&N.:@o+m.I.4.2.G#1:2:3:3{3{4:5:6: ", +" 8+#+R+N 1=[]7:|%=+,.8:&@L~a&a&^=~ 2^9:N [+4.Q@C+p+2+P.P.P.P.[-0:. 7]}-9]0*F=N{R]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=a:b:c:j_k_d:e:f:g:-*F=n.P.P.P.P.P.P.P.P.P.P.P.n%O.S+C+o+n.J.-$[+h:i:j:@]2{2{k:l: ", +" $+P.4.g.H O]m:V{n:,#a&V{T(o:;*x&a!*+p:Z.0%P.P.P.P.P.b%. !*}-*+9]0*F==~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q:r:s:t:H_&:u:v:w:-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.o+Q@n.x:y:z:A:+]+]1{B:C: ", +" Q.O.I.F.N O]b%~~]~|%D:U&~ !@O'S&a)E:w M o+P.b%7:!*F:9]0*G:h(-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*H:I:J:K:<:H_L:M:N:T&F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.M.O:P:Q:R:R:R:|{S:T: ", +" P.O.M.o+g.w =*U:U&V:W:a)X::&D+`_.(+(. !*}-*+0*Y:Z:=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:`: <.< ", +" P.P.P.P.p+N < =*,<`/X:N)^:.(%@U(}-v&L^0*'<)<}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:!<~<{<.[,['[r},}'}&}{|,| ", +" '|)| ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 442ef5f32..b33e3d277 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -36,7 +36,7 @@ class ShipWorkbench ( Workbench ): self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim"] + list = ["Ship_CreateSim", "Ship_RunSim"] self.appendToolbar("Simulation",list) # Menu @@ -44,7 +44,7 @@ class ShipWorkbench ( Workbench ): self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim"] + list = ["Ship_CreateSim", "Ship_RunSim"] self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index bb71e262b..158be05a7 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -41,8 +41,9 @@ nobase_data_DATA = \ Icons/SimIco.xcf \ Icons/Sim.xpm \ Icons/SimCreateIco.png \ - Icons/SimCreateIco.xcf \ Icons/SimCreateIco.xpm \ + Icons/SimRunIco.png \ + Icons/SimRunIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -86,10 +87,14 @@ nobase_data_DATA = \ tankGZ/__init__.py \ tankGZ/Plot.py \ tankGZ/TaskPanel.py \ - tankGZ/TaskPanel.ui + tankGZ/TaskPanel.ui \ simCreate/__init__.py \ simCreate/TaskPanel.py \ - simCreate/TaskPanel.ui + simCreate/TaskPanel.ui \ + simRun/__init__.py \ + simRun/Simulation.py \ + simRun/TaskPanel.py \ + simRun/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 52407b824..efee2382d 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -132,6 +132,18 @@ class CreateSim: ToolTip = str(Translator.translate('Create a new simulation in order to process later')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class RunSim: + def Activated(self): + import simRun + simRun.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimRunIco.png" + MenuText = str(Translator.translate('Run a simulation')) + ToolTip = str(Translator.translate('Run a simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -141,3 +153,4 @@ FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) FreeCADGui.addCommand('Ship_GZ', GZ()) FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) +FreeCADGui.addCommand('Ship_RunSim', RunSim()) diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py index 82556cacf..193c54823 100644 --- a/src/Mod/Ship/SimInstance.py +++ b/src/Mod/Ship/SimInstance.py @@ -23,6 +23,7 @@ import time from math import * +import threading # COIN from pivy.coin import * @@ -40,24 +41,45 @@ class FreeSurfaceFace: """ Face storage. @param pos Face position. @param normal Face normal. - @param Element length (distance between elements at x direction) - @param Element beam (distance between elements at y direction) + @param l Element length (distance between elements at x direction) + @param b Element beam (distance between elements at y direction) """ self.pos = pos self.normal = normal self.area = l*b + def __init__(self, pos, normal, area): + """ Face storage. + @param pos Face position. + @param normal Face normal. + @param area Element area + """ + self.pos = pos + self.normal = normal + self.area = area + class ShipSimulation: - def __init__(self, obj, fsMeshData): + def __init__(self, obj, fsMeshData, waves): """ Creates a new simulation instance on active document. @param obj Created Part::FeaturePython object. @param fsMeshData [L,B,N] Free surface mesh data, with lenght (x), Beam (y) and desired number of points. + @param waves [[A,T,phi,heading],] Waves involved """ # Add uniqueness property to identify Tank instances obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True # Compute free surface mesh self.createFSMesh(obj,fsMeshData) + # Store waves + obj.addProperty("App::PropertyVectorList","Waves","ShipSimulation", str(Translator.translate("Waves (Amplitude,period,phase)"))).Waves=[] + obj.addProperty("App::PropertyFloatList","Waves_Dir","ShipSimulation", str(Translator.translate("Waves direction (0 deg to stern waves)"))).Waves_Dir=[] + w = [] + d = [] + for i in range(0,len(waves)): + w.append(Vector(waves[i][0], waves[i][1], waves[i][2])) + d.append(waves[i][3]) + obj.Waves = w + obj.Waves_Dir = d # Add shapes shape = self.computeShape(obj) if not shape: @@ -103,7 +125,6 @@ class ShipSimulation: b = sqrt(area) nx = int(round(L / l)) ny = int(round(B / b)) - print(l,b,nx,ny) # Start data fields if not already exist props = obj.PropertiesList try: @@ -141,87 +162,27 @@ class ShipSimulation: obj.FS_Area = areas[:] obj.FS_Normal = normal[:] - def FSMesh(self, obj): - """ Get free surface mesh in matrix mode. - @param obj Created Part::FeaturePython object. - @return Faces matrix - @note areas and normals will recomputed. - """ - nx = obj.FS_Nx - ny = obj.FS_Ny - # Transform positions into a mesh - pos = [] - for i in range(0,nx): - pos.append([]) - for j in range(0,ny): - pos[i].append(obj.FS_Position[j + i*ny]) - # Recompute normals and dimensions - normal = [] - l = [] - b = [] - for i in range(0,nx): - normal.append([]) - l.append([]) - b.append([]) - for j in range(0,ny): - i0 = i-1 - i1 = i+1 - fi = 1.0 - j0 = j-1 - j1 = j+1 - fj = 1.0 - if i == 0: - i0 = i - i1 = i+1 - fi = 2.0 - if i == nx-1: - i0 = i-1 - i1 = i - fi = 2.0 - if j == 0: - j0 = j - j1 = j+1 - fj = 2.0 - if j == ny-1: - j0 = j-1 - j1 = j - fj = 2.0 - l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) - b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) - xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, - obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, - obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) - yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, - obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, - obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) - n = Vector(xvec.cross(yvec)) # Z positive - normal[i].append(n.normalize()) - # Create faces - faces = [] - for i in range(0,nx): - faces.append([]) - for j in range(0,ny): - faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) - # Reconstruct mesh data - for i in range(0,nx): - for j in range(0,ny): - obj.FS_Position[j + i*ny] = faces[i][j].pos - obj.FS_Normal[j + i*ny] = faces[i][j].normal - obj.FS_Area[j + i*ny] = faces[i][j].area - return faces - def computeShape(self, obj): """ Computes simulation involved shapes. @param obj Created Part::FeaturePython object. @return Shape """ + print("[ShipSimulation] Computing mesh shape...") nx = obj.FS_Nx ny = obj.FS_Ny - mesh = self.FSMesh(obj) + mesh = FSMesh(obj) planes = [] # Create planes + Percentage = 0 + Count = 0 + print("0%") for i in range(1,nx-1): for j in range(1,ny-1): + Count = Count+1 + done = int(round(100 * Count / ((nx-2)*(ny-2)))) + if done != Percentage: + Percentage = done + print("%i%%" % (done)) v0 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j-1].pos + mesh[i-1][j-1].pos).multiply(0.25) v1 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j-1].pos + mesh[i+1][j-1].pos).multiply(0.25) v2 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j+1].pos + mesh[i+1][j+1].pos).multiply(0.25) @@ -615,3 +576,81 @@ class ViewProviderShipSimulation: " ", " "}; """ + +def FSMesh(obj, recompute=False): + """ Get free surface mesh in matrix mode. + @param obj Created Part::FeaturePython object. + @param recompute True if mesh must be recomputed, False otherwise. + @return Faces matrix + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + if not recompute: + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(obj.FS_Position[j + i*ny], + obj.FS_Normal[j + i*ny], + obj.FS_Area[j + i*ny])) + return faces + # Transform positions into a mesh + pos = [] + for i in range(0,nx): + pos.append([]) + for j in range(0,ny): + pos[i].append(obj.FS_Position[j + i*ny]) + # Recompute normals and dimensions + normal = [] + l = [] + b = [] + for i in range(0,nx): + normal.append([]) + l.append([]) + b.append([]) + for j in range(0,ny): + i0 = i-1 + i1 = i+1 + fi = 1.0 + j0 = j-1 + j1 = j+1 + fj = 1.0 + if i == 0: + i0 = i + i1 = i+1 + fi = 2.0 + if i == nx-1: + i0 = i-1 + i1 = i + fi = 2.0 + if j == 0: + j0 = j + j1 = j+1 + fj = 2.0 + if j == ny-1: + j0 = j-1 + j1 = j + fj = 2.0 + l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) + b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) + xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, + obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, + obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) + yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, + obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, + obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) + n = Vector(xvec.cross(yvec)) # Z positive + normal[i].append(n.normalize()) + # Create faces + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) + # Reconstruct mesh data + for i in range(0,nx): + for j in range(0,ny): + obj.FS_Position[j + i*ny] = faces[i][j].pos + obj.FS_Normal[j + i*ny] = faces[i][j].normal + obj.FS_Area[j + i*ny] = faces[i][j].area + return faces diff --git a/src/Mod/Ship/simCreate/TaskPanel.py b/src/Mod/Ship/simCreate/TaskPanel.py index 3741fbec4..e14f4c964 100644 --- a/src/Mod/Ship/simCreate/TaskPanel.py +++ b/src/Mod/Ship/simCreate/TaskPanel.py @@ -36,9 +36,22 @@ class TaskPanel: def accept(self): form = self.form + # Read waves data + w = [] + for i in range(0,form.waves.rowCount() - 1): + item = form.waves.item(i,0) + A = item.text().toFloat()[0] + item = form.waves.item(i,1) + T = item.text().toFloat()[0] + item = form.waves.item(i,2) + phi = item.text().toFloat()[0] + item = form.waves.item(i,3) + head = item.text().toFloat()[0] + w.append([A,T,phi,head]) obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation") sim = SimInstance.ShipSimulation(obj, - [form.length.value(), form.beam.value(), form.n.value()]) + [form.length.value(), form.beam.value(), form.n.value()], + w) SimInstance.ViewProviderShipSimulation(obj.ViewObject) return True @@ -72,6 +85,7 @@ class TaskPanel: form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") form.n = form.findChild(QtGui.QSpinBox, "N") + form.waves = form.findChild(QtGui.QTableWidget, "Waves") self.form = form # Initial values if self.initValues(): @@ -81,6 +95,7 @@ class TaskPanel: QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS) QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS) QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS) + QtCore.QObject.connect(form.waves,QtCore.SIGNAL("cellChanged(int,int)"),self.onWaves); def getMainWindow(self): "returns the main window" @@ -108,14 +123,48 @@ class TaskPanel: self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) + self.form.findChild(QtGui.QGroupBox, "WavesDataBox").setTitle(Translator.translate("Waves")) + labels = [] + labels.append(Translator.translate("Amplitude") + " [m]") + labels.append(Translator.translate("Period") + " [s]") + labels.append(Translator.translate("Phase") + " [rad]") + labels.append(Translator.translate("Heading") + " [deg]") + self.form.waves.setHorizontalHeaderLabels(labels) def onFS(self, value): - """ Method called when ship data is changed. - Annotations must be showed. + """ Method called when free surface data is changed. @param value Changed value. """ pass + def onWaves(self, row, column): + """ Method called when waves data is changed. + @param row Affected row. + @param col Affected column. + """ + item = self.form.waves.item(row,column) + # Row deletion + if column == 0: + if not item.text(): + self.form.waves.removeRow(row) + # Ensure that exist one empty item at the end + nRow = self.form.waves.rowCount() + last = self.form.waves.item(nRow-1,0) + if last: + if(last.text() != ''): + self.form.waves.setRowCount(nRow+1) + # Fields must be numbers + for i in range(0,self.form.waves.rowCount()-1): # Avoid last row + for j in range(0,self.form.waves.columnCount()): # Avoid name column + item = self.form.waves.item(i,j) + if not item: + item = QtGui.QTableWidgetItem('0.0') + self.form.waves.setItem(i,j,item) + continue + (number,flag) = item.text().toFloat() + if not flag: + item.setText('0.0') + def createTask(): panel = TaskPanel() Gui.Control.showDialog(panel) diff --git a/src/Mod/Ship/simCreate/TaskPanel.ui b/src/Mod/Ship/simCreate/TaskPanel.ui index 995b64455..107d2a16d 100644 --- a/src/Mod/Ship/simCreate/TaskPanel.ui +++ b/src/Mod/Ship/simCreate/TaskPanel.ui @@ -6,14 +6,20 @@ 0 0 - 260 - 180 + 269 + 384 + + + 0 + 1 + + 0 - 180 + 384 @@ -22,155 +28,236 @@ + + QLayout::SetMinimumSize + + + + 0 + 1 + + - 240 - 160 + 0 + 128 Free surface + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + false - - - - 0 - 20 - 241 - 141 - + + + QLayout::SetDefaultConstraint - - - 6 - - - QLayout::SetDefaultConstraint - - - - - QLayout::SetDefaultConstraint + + + + QLayout::SetMinimumSize + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Length + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + QLayout::SetMinimumSize + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Beam + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + QLayout::SetMinimumSize + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Number of points + + + + + + + 1 + + + 1000000000 + + + 1000 + + + + + + + + + + + + + 0 + 2 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 0 + 0 + + + + Waves + + + + QLayout::SetDefaultConstraint + + + + + + 0 + 0 + + + + true + + + 1 + + + true + + + + + Amplitude [m] - - 10 + + + + Period [s] - - 0 + + + + Phase [rad] - - 10 + + + + Heading [deg] - - 0 - - - - - Length - - - - - - - 1 - - - 1000000.000000000000000 - - - 10.000000000000000 - - - 100.000000000000000 - - - - - - - - - 10 - - - 0 - - - 10 - - - 0 - - - - - Beam - - - - - - - 1 - - - 1000000.000000000000000 - - - 10.000000000000000 - - - 100.000000000000000 - - - - - - - - - 10 - - - 0 - - - 10 - - - 0 - - - - - Number of points - - - - - - - 1 - - - 1000000000 - - - 10000 - - - - - - - + + + + diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py new file mode 100644 index 000000000..bf457e9e7 --- /dev/null +++ b/src/Mod/Ship/simRun/Simulation.py @@ -0,0 +1,56 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * +import threading + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base, Vector + +# Ship design module +from shipUtils import Paths, Translator, Math + +class FreeCADShipSimulation(threading.Thread): + def __init__ (self, endTime, output, FSmesh, waves): + """ Thread constructor. + @param endTime Maximum simulation time. + @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param FSmesh Free surface mesh faces. + @param waves Waves parameters (A,T,phi,heading) + """ + threading.Thread.__init__(self) + self.endTime = endTime + self.output = output + self.FSmesh = FSmesh + self.waves = waves + + def run(self): + """ Runs the simulation. + """ + # Perform work here + print("Im thread, Im running...") + time.sleep(2) + # ... + print("Im thread, I end!") diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py new file mode 100644 index 000000000..14cc86776 --- /dev/null +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -0,0 +1,160 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +import SimInstance +from shipUtils import Paths, Translator +from Simulation import FreeCADShipSimulation as Sim + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" + self.sim = False + + def accept(self): + if not self.sim: + return False + msg = Translator.translate("Building data...\n") + App.Console.PrintMessage(msg) + # Get GUI data + endTime = self.form.time.value() + output = [] + output.append(self.form.output.value()) + output.append(self.form.outputType.currentIndex()) + # Get free surfaces data + FSMesh = SimInstance.FSMesh(self.sim) + wData = self.sim.Waves + wDir = self.sim.Waves_Dir + waves = [] + for i in range(0,len(wData)): + waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) + msg = Translator.translate("Launching simulation...\n") + App.Console.PrintMessage(msg) + # Build simulation thread + t = Sim(endTime, output, FSMesh, waves) + t.start() + msg = Translator.translate("Done!\n") + App.Console.PrintMessage(msg) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") + form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") + form.outputType = form.findChild(QtGui.QComboBox, "OutputType") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + # Get objects + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShipSimulation") + except ValueError: + continue + if obj.IsShipSimulation: + # Test if another ship already selected + if self.sim: + msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.sim = obj + # Test if any valid ship was selected + if not self.sim: + msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") + App.Console.PrintError(msg) + return True + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Run the simulation")) + self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) + self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/simRun/TaskPanel.ui b/src/Mod/Ship/simRun/TaskPanel.ui new file mode 100644 index 000000000..435a87e6e --- /dev/null +++ b/src/Mod/Ship/simRun/TaskPanel.ui @@ -0,0 +1,115 @@ + + + TaskPanel + + + + 0 + 0 + 292 + 72 + + + + + 0 + 1 + + + + + 0 + 72 + + + + Create new simulation + + + + + + Simulation time + + + + + + + 1 + + + 10000000.000000000000000 + + + 10.000000000000000 + + + 3600.000000000000000 + + + + + + + + 16 + 16777215 + + + + s + + + + + + + Output + + + + + + + 10000.000000000000000 + + + 1.000000000000000 + + + + + + + + 0 + 0 + + + + + 56 + 16777215 + + + + + + + + FPS + + + + + IPF + + + + + + + + + diff --git a/src/Mod/Ship/simRun/__init__.py b/src/Mod/Ship/simRun/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/simRun/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 6de9fd579172366bb12bc47b66c7fb551266d3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 6 Jul 2012 13:51:01 +0200 Subject: [PATCH 465/517] Imported pyOpenCL library --- src/Mod/Ship/InitGui.py | 19 +++++++++++++---- src/Mod/Ship/ShipGui.py | 2 +- src/Mod/Ship/simRun/Simulation.py | 11 +++++++++- src/Mod/Ship/simRun/TaskPanel.py | 34 +++++++++++++++++++++++++++---- src/Mod/Ship/simRun/TaskPanel.ui | 22 +++++++++++++++++--- 5 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index b33e3d277..de44d60a8 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -36,15 +36,26 @@ class ShipWorkbench ( Workbench ): self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim", "Ship_RunSim"] - self.appendToolbar("Simulation",list) + try: + import pyopencl + except ImportError: + msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + else: + list = ["Ship_CreateSim", "Ship_RunSim"] + self.appendToolbar("Simulation",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim", "Ship_RunSim"] - self.appendToolbar("Simulation",list) + try: + import pyopencl + except ImportError: + pass + else: + list = ["Ship_CreateSim", "Ship_RunSim"] + self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index efee2382d..a764a2b24 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -140,7 +140,7 @@ class RunSim: def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/SimRunIco.png" - MenuText = str(Translator.translate('Run a simulation')) + MenuText = str(Translator.translate('Run a simulation')) ToolTip = str(Translator.translate('Run a simulation')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index bf457e9e7..1910f79f9 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -25,6 +25,9 @@ import time from math import * import threading +# pyOpenCL +import pyopencl as cl + # FreeCAD import FreeCAD,FreeCADGui from FreeCAD import Part, Base, Vector @@ -33,14 +36,20 @@ from FreeCAD import Part, Base, Vector from shipUtils import Paths, Translator, Math class FreeCADShipSimulation(threading.Thread): - def __init__ (self, endTime, output, FSmesh, waves): + def __init__ (self, device, endTime, output, FSmesh, waves): """ Thread constructor. + @param device Device to use. @param endTime Maximum simulation time. @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. @param FSmesh Free surface mesh faces. @param waves Waves parameters (A,T,phi,heading) """ threading.Thread.__init__(self) + # Build OpenCL context and command queue + self.device = device + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) + # Storage data self.endTime = endTime self.output = output self.FSmesh = FSmesh diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index 14cc86776..0a8762617 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -26,6 +26,8 @@ import FreeCAD as App import FreeCADGui as Gui # Qt library from PyQt4 import QtGui,QtCore +# pyOpenCL +import pyopencl as cl # Module import SimInstance from shipUtils import Paths, Translator @@ -37,8 +39,6 @@ class TaskPanel: self.sim = False def accept(self): - if not self.sim: - return False msg = Translator.translate("Building data...\n") App.Console.PrintMessage(msg) # Get GUI data @@ -46,6 +46,16 @@ class TaskPanel: output = [] output.append(self.form.output.value()) output.append(self.form.outputType.currentIndex()) + devId = self.form.device.currentIndex() + # Get OpenCL device + count = 0 + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + if count == devId: + device = d + count = count + 1 # Get free surfaces data FSMesh = SimInstance.FSMesh(self.sim) wData = self.sim.Waves @@ -56,8 +66,8 @@ class TaskPanel: msg = Translator.translate("Launching simulation...\n") App.Console.PrintMessage(msg) # Build simulation thread - t = Sim(endTime, output, FSMesh, waves) - t.start() + simulator = Sim(device, endTime, output, FSMesh, waves) + simulator.start() msg = Translator.translate("Done!\n") App.Console.PrintMessage(msg) return True @@ -92,6 +102,7 @@ class TaskPanel: form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") form.outputType = form.findChild(QtGui.QComboBox, "OutputType") + form.device = form.findChild(QtGui.QComboBox, "Device") self.form = form # Initial values if self.initValues(): @@ -140,6 +151,20 @@ class TaskPanel: msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") App.Console.PrintError(msg) return True + # Get the list of devices + devices = [] + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + devices.append([p,d]) + dname = d.get_info(cl.device_info.NAME) + pname = p.get_info(cl.platform_info.NAME) + self.form.device.addItem(dname + " (" + pname + ")") + if not len(devices): + msg = Translator.translate("This tool requires an active OpenCL context to work\n") + App.Console.PrintError(msg) + return True msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False @@ -150,6 +175,7 @@ class TaskPanel: self.form.setWindowTitle(Translator.translate("Run the simulation")) self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) + self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device")) def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/simRun/TaskPanel.ui b/src/Mod/Ship/simRun/TaskPanel.ui index 435a87e6e..25eeebe79 100644 --- a/src/Mod/Ship/simRun/TaskPanel.ui +++ b/src/Mod/Ship/simRun/TaskPanel.ui @@ -6,8 +6,8 @@ 0 0 - 292 - 72 + 300 + 102 @@ -19,7 +19,13 @@ 0 - 72 + 100 + + + + + 300 + 16777215 @@ -108,6 +114,16 @@ + + + + OpenCL device + + + + + + From 60fe69389ae5b69b18ced69e82ca36a6cffa513b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 8 Jul 2012 14:23:06 +0200 Subject: [PATCH 466/517] Simulation thread control developed. --- src/Mod/Ship/CMakeLists.txt | 2 + src/Mod/Ship/Icons/SimIco.xcf | Bin 47149 -> 55163 bytes src/Mod/Ship/Icons/SimRunIco.png | Bin 15466 -> 14554 bytes src/Mod/Ship/Icons/SimRunIco.xpm | 2223 ++++++++++++++--------------- src/Mod/Ship/Icons/SimStopIco.png | Bin 0 -> 13235 bytes src/Mod/Ship/Icons/SimStopIco.xpm | 2217 ++++++++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Makefile.am | 2 + src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/simRun/Simulation.py | 38 +- src/Mod/Ship/simRun/TaskPanel.py | 17 + src/Mod/Ship/simRun/__init__.py | 4 + 12 files changed, 3336 insertions(+), 1184 deletions(-) create mode 100644 src/Mod/Ship/Icons/SimStopIco.png create mode 100644 src/Mod/Ship/Icons/SimStopIco.xpm diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index f16627870..ef3d635a5 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -43,6 +43,8 @@ SET(ShipIcons_SRCS Icons/SimCreateIco.xpm Icons/SimRunIco.png Icons/SimRunIco.xpm + Icons/SimStopIco.png + Icons/SimStopIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf index d4e42da2b48d2045c836c2a6d8ee3b536ae05909..8d250eb82f8e3c0da77f2f8765d0f0dedbbb1cc4 100644 GIT binary patch delta 8120 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 BK=1$n delta 408 zcmY+A&npCB7{|Z6l(d>5O0?|`rFD7_)R5oYoya%7v8g`_5i`>hsJq%`@NU?fto^JO4=Uj;3*YH9qUKQ~|FM2>OBLJ>a0M zs!oS$6@^qv4U4kxP9s6`VXOz-MIisn-XIg*4WRuS$ZgYDKa0m^n^2tGF;fX1w^<~s zkzw8gw-?wOWTN*DjGO^81Hk;X?wg3Gk}#DIGk);GDTA!Zl;D%+=W2^&r3((tQ2{LZ zx)h!?s3#|@glMXztw$NZGG_nzmsXkMO;C$urIl5>N%w)RH&qIIls;_JUs17lDCP+) loHMiFdz=OCy4V|JVmt^O@j_46fXfy0K}GkS`uOIx`wv5GQA+>- diff --git a/src/Mod/Ship/Icons/SimRunIco.png b/src/Mod/Ship/Icons/SimRunIco.png index f10386cf77f0dccf33f6e347820703a618102a00..2e53c25054c68407c23b5f1a8d0b9fd0fde47967 100644 GIT binary patch literal 14554 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 KQnf&n(EkHdBM+Pa diff --git a/src/Mod/Ship/Icons/SimRunIco.xpm b/src/Mod/Ship/Icons/SimRunIco.xpm index 44cd8b4ab..7adab3214 100644 --- a/src/Mod/Ship/Icons/SimRunIco.xpm +++ b/src/Mod/Ship/Icons/SimRunIco.xpm @@ -1,6 +1,6 @@ /* XPM */ static char * SimRunIco_xpm[] = { -"128 128 2592 2", +"128 128 2459 2", " c None", ". c #7B7B7B", "+ c #EAEAEA", @@ -1467,1132 +1467,999 @@ static char * SimRunIco_xpm[] = { "S) c #070607", "T) c #060504", "U) c #020303", -"V) c #0A0505", -"W) c #B6ACAE", -"X) c #B5ACAD", -"Y) c #A19999", -"Z) c #666666", -"`) c #9F9F9F", -" ! c #C4C3C4", -".! c #C2C2C3", -"+! c #C0C0BF", -"@! c #BCBBBB", -"#! c #909191", -"$! c #141516", -"%! c #121211", -"&! c #0F0E0F", -"*! c #090908", -"=! c #070606", -"-! c #050605", -";! c #020101", -">! c #5E2E2E", -",! c #E46A66", -"'! c #E36B64", -")! c #C77878", -"!! c #9F9B9B", -"~! c #4D4E4D", -"{! c #929292", -"]! c #C2C3C2", -"^! c #C1C2C2", -"/! c #C2C1C2", -"(! c #0B0C0B", -"_! c #030202", -":! c #000100", -"~ c #B0AFAF", -",~ c #B1B0B0", -"'~ c #ACADAC", -")~ c #AAABAB", -"!~ c #A8A7A8", -"~~ c #8C8C8C", -"{~ c #B9B8B8", -"]~ c #8D8D8D", -"^~ c #8F7B7C", -"/~ c #DB7066", -"(~ c #EB7A30", -"_~ c #E87448", -":~ c #9B5050", -"<~ c #211314", -"[~ c #050303", -"}~ c #2C1B1B", -"|~ c #5D3232", -"1~ c #964A49", -"2~ c #BA5351", -"3~ c #E26557", -"4~ c #E96D58", -"5~ c #F08B4C", -"6~ c #F89744", -"7~ c #EE7257", -"8~ c #EA6A5C", -"9~ c #F16358", -"0~ c #E9615F", -"a~ c #E36565", -"b~ c #F36656", -"c~ c #F59C60", -"d~ c #F35B4F", -"e~ c #999898", -"f~ c #A3A2A3", -"g~ c #ACACAD", -"h~ c #A4A4A3", -"i~ c #A1A0A0", -"j~ c #9E9D9D", -"k~ c #CC9D9C", -"l~ c #EC725C", -"m~ c #EE7D29", -"n~ c #EA7352", -"o~ c #C96967", -"p~ c #AA5654", -"q~ c #D9625C", -"r~ c #E67059", -"s~ c #EB7C4F", -"t~ c #ED8449", -"u~ c #F7923A", -"v~ c #FA953A", -"w~ c #FF9C3B", -"x~ c #FF9E3F", -"y~ c #FB9C46", -"z~ c #FB9E4A", -"A~ c #F69A55", -"B~ c #F08C5D", -"C~ c #F07C5E", -"D~ c #F1685A", -"E~ c #EF5B58", -"F~ c #E75F5D", -"G~ c #F15551", -"H~ c #F18A63", -"I~ c #F18562", -"J~ c #EA5653", -"K~ c #AEAEAF", -"L~ c #8F8F8F", -"M~ c #A9A9AA", -"N~ c #A3A2A2", -"O~ c #AEAFAF", -"P~ c #B9B1B1", -"Q~ c #DF8886", -"R~ c #EA7C3F", -"S~ c #F7841B", -"T~ c #EC7F39", -"U~ c #EC803E", -"V~ c #EF853B", -"W~ c #FB8D25", -"X~ c #FF9227", -"Y~ c #FF952D", -"Z~ c #FF9731", -"`~ c #FF9A37", -" { c #FF9D3D", -".{ c #FF9F41", -"+{ c #FFA145", -"@{ c #FFA44B", -"#{ c #FFA64F", -"${ c #FFA955", -"%{ c #FEA956", -"&{ c #FBA85F", -"*{ c #F29666", -"={ c #F29469", -"-{ c #F39768", -";{ c #FCAE69", -">{ c #F16F5E", -",{ c #BABAB9", -"'{ c #B2B2B3", -"){ c #B1B3B2", -"!{ c #B1B2B1", -"~{ c #ADACAB", -"{{ c #AAA9AA", -"]{ c #888988", -"^{ c #9E9D9E", -"/{ c #A0A0A1", -"({ c #A4A3A3", -"_{ c #A7A8A8", -":{ c #494747", -"<{ c #A16766", -"[{ c #E97A4A", -"}{ c #FF860F", -"|{ c #FF8915", -"1{ c #FF8B19", -"2{ c #FF8E1F", -"3{ c #FF9125", -"4{ c #FF9329", -"5{ c #FF962F", -"6{ c #FF9833", -"7{ c #FF9B39", -"8{ c #FFA043", -"9{ c #FFA247", -"0{ c #FFA751", -"a{ c #FFAA57", -"b{ c #FFAC5B", -"c{ c #FFAE5F", -"d{ c #FFB063", -"e{ c #FFB369", -"f{ c #FFB46B", -"g{ c #FDB26D", -"h{ c #F36F5F", -"i{ c #B3B4B3", -"j{ c #7D7C7C", -"k{ c #989898", -"l{ c #AEADAD", -"m{ c #ADACAD", -"n{ c #ACABAC", -"o{ c #9C9D9D", -"p{ c #7F7F7E", -"q{ c #565756", -"r{ c #989998", -"s{ c #A0A1A0", -"t{ c #A4A3A4", -"u{ c #4F4A4A", -"v{ c #9D6B6B", -"w{ c #E0756A", -"x{ c #EB7F3D", -"y{ c #FFA349", -"z{ c #FFA54D", -"A{ c #FFA853", -"B{ c #FFAB59", -"C{ c #FFAD5D", -"D{ c #FFAF61", -"E{ c #FFB267", -"F{ c #FFB66F", -"G{ c #FDB571", -"H{ c #F3836A", -"I{ c #DC5B57", -"J{ c #BA5C5C", -"K{ c #B6B7B7", -"L{ c #787877", -"M{ c #757676", -"N{ c #747474", -"O{ c #8C8D8C", -"P{ c #9D9C9D", -"Q{ c #A8A8A7", -"R{ c #545353", -"S{ c #989797", -"T{ c #9F9F9E", -"U{ c #A0A1A1", -"V{ c #8C8C8B", -"W{ c #706F70", -"X{ c #484646", -"Y{ c #9F6A6A", -"Z{ c #E9785E", -"`{ c #EC7D30", -" ] c #FE830B", -".] c #FF8711", -"+] c #FF8C1B", -"@] c #FF8F21", -"#] c #FA9231", -"$] c #F38F40", -"%] c #EE894F", -"&] c #ED8458", -"*] c #EE815B", -"=] c #EE815C", -"-] c #EE855E", -";] c #EF8D5D", -">] c #F4995D", -",] c #FAA45A", -"'] c #FEAC5C", -")] c #FFB56D", -"!] c #FFB771", -"~] c #FFB975", -"{] c #FCB677", -"]] c #F39572", -"^] c #E76158", -"/] c #8B5252", -"(] c #464343", -"_] c #B4B5B5", -":] c #777677", -"<] c #727172", -"[] c #6B6C6C", -"}] c #80807F", -"|] c #919090", -"1] c #9E9E9F", -"2] c #A4A5A4", -"3] c #A6A7A6", -"4] c #898888", -"5] c #6E6E6D", -"6] c #5F5F60", -"7] c #797A7A", -"8] c #7E7F7F", -"9] c #777777", -"0] c #616060", -"a] c #7F6464", -"b] c #A67373", -"c] c #6B5959", -"d] c #4E4A4A", -"e] c #A06C6C", -"f] c #E8795F", -"g] c #F07E20", -"h] c #FF8207", -"i] c #FF840B", -"j] c #FE8B1B", -"k] c #F68B2C", -"l] c #EC834B", -"m] c #EB775D", -"n] c #E16F65", -"o] c #C86B67", -"p] c #AD6463", -"q] c #9C605F", -"r] c #995E5D", -"s] c #A7605E", -"t] c #C0625F", -"u] c #DC6660", -"v] c #ED7363", -"w] c #EF8968", -"x] c #F6A268", -"y] c #FEB166", -"z] c #FFB873", -"A] c #FFBA77", -"B] c #FFBB79", -"C] c #F39870", -"D] c #E65F57", -"E] c #875252", -"F] c #424040", -"G] c #866263", -"H] c #A55757", -"I] c #767777", -"J] c #767675", -"K] c #717171", -"L] c #6E6E6F", -"M] c #6C6D6D", -"N] c #6A6969", -"O] c #676767", -"P] c #656665", -"Q] c #676766", -"R] c #727373", -"S] c #5C5C5B", -"T] c #6A6A6B", -"U] c #7B7A7B", -"V] c #626262", -"W] c #534D4D", -"X] c #C37F7E", -"Y] c #E67E6E", -"Z] c #CB7C78", -"`] c #886767", -" ^ c #5F5353", -".^ c #8C6767", -"+^ c #E87A68", -"@^ c #EB7B21", -"#^ c #FE7E00", -"$^ c #FB881A", -"%^ c #EC8345", -"&^ c #EA7761", -"*^ c #C76F6B", -"=^ c #926363", -"-^ c #685252", -";^ c #524A4A", -">^ c #494646", -",^ c #484545", -"'^ c #4E4848", -")^ c #5F4E4E", -"!^ c #835757", -"~^ c #B85F5D", -"{^ c #E86E63", -"]^ c #F18C6B", -"^^ c #F9AC6D", -"/^ c #FEB670", -"(^ c #FEB56E", -"_^ c #F2956C", -":^ c #E86259", -"<^ c #B46261", -"[^ c #B06261", -"}^ c #E15450", -"|^ c #F34C49", -"1^ c #B1B1B2", -"2^ c #777676", -"3^ c #747575", -"4^ c #717271", -"5^ c #6D6E6D", -"6^ c #6B6B6A", -"7^ c #686767", -"8^ c #646363", -"9^ c #5D5D5C", -"0^ c #777776", -"a^ c #878788", -"b^ c #969596", -"c^ c #9A9898", -"d^ c #9A9A99", -"e^ c #646463", -"f^ c #7B7C7C", -"g^ c #7B7C7B", -"h^ c #707170", -"i^ c #575756", -"j^ c #7E6464", -"k^ c #E68379", -"l^ c #D27438", -"m^ c #D6763F", -"n^ c #E27D68", -"o^ c #DB7D71", -"p^ c #E07E6F", -"q^ c #E47B42", -"r^ c #F77B00", -"s^ c #FF8105", -"t^ c #F58522", -"u^ c #E97D54", -"v^ c #D4736B", -"w^ c #906363", -"x^ c #5A4E4E", -"y^ c #504848", -"z^ c #7C5555", -"A^ c #C15F5D", -"B^ c #F07865", -"C^ c #F5A472", -"D^ c #F39868", -"E^ c #F08060", -"F^ c #F07E5D", -"G^ c #F08A5C", -"H^ c #F36251", -"I^ c #E35656", -"J^ c #B0B0B1", -"K^ c #ABACAB", -"L^ c #787777", -"M^ c #717170", -"N^ c #696869", -"O^ c #666565", -"P^ c #646465", -"Q^ c #636363", -"R^ c #605F5F", -"S^ c #575758", -"T^ c #8B8A8B", -"U^ c #949393", -"V^ c #665858", -"W^ c #AA7979", -"X^ c #DC8378", -"Y^ c #D77848", -"Z^ c #DB741F", -"`^ c #E27513", -" / c #E87813", -"./ c #F37901", -"+/ c #FA7C00", -"@/ c #F4811C", -"#/ c #E87D5C", -"$/ c #BC716E", -"%/ c #6E5858", -"&/ c #5C4D4D", -"*/ c #A15B5B", -"=/ c #EB7265", -"-/ c #F49D6F", -";/ c #FEB36A", -">/ c #FFB165", -",/ c #FEAA5A", -"'/ c #F07A5A", -")/ c #EE5350", -"!/ c #A5A4A4", -"~/ c #969797", -"{/ c #787778", -"]/ c #636364", -"^/ c #606161", -"// c #5D5C5C", -"(/ c #585958", -"_/ c #5C5C5D", -":/ c #868787", -"( c #946565", -",( c #EC7262", -"'( c #F8A25A", -")( c #FDA24C", -"!( c #EF6C56", -"~( c #DB6868", -"{( c #7C7D7C", -"]( c #9B9A9A", -"^( c #666667", -"/( c #818182", -"(( c #7D7E7D", -"_( c #757475", -":( c #635757", -"<( c #DA8882", -"[( c #D7752B", -"}( c #EA7400", -"|( c #E57A22", -"1( c #E18173", -"2( c #735D5D", -"3( c #6B5D5D", -"4( c #CF6663", -"5( c #EF8D5F", -"6( c #FEA54F", -"7( c #EE8357", -"8( c #E65E5B", -"9( c #707171", -"0( c #807F80", -"a( c #8E8E8F", -"b( c #979696", -"c( c #959594", -"d( c #686869", -"e( c #7F8080", -"f( c #7E7E7F", -"g( c #7C7D7D", -"h( c #737374", -"i( c #DC8878", -"j( c #DA6F0A", -"k( c #E47100", -"l( c #E87300", -"m( c #E07E45", -"n( c #C07C79", -"o( c #514C4C", -"p( c #4C4E4E", -"q( c #535453", -"r( c #A16665", -"s( c #ED7961", -"t( c #FCA14B", -"u( c #F3924D", -"v( c #EB625C", -"w( c #747473", -"x( c #838384", -"y( c #908F90", -"z( c #919192", -"A( c #7D7C7D", -"B( c #818282", -"C( c #808081", -"D( c #7F7F80", -"E( c #9D7978", -"F( c #D98162", -"G( c #DB6F07", -"H( c #E27000", -"I( c #E87506", -"J( c #E0815F", -"K( c #976E6E", -"L( c #7F6162", -"M( c #E96C5F", -"N( c #F79A4D", -"O( c #F89642", -"P( c #F16454", -"Q( c #828181", -"R( c #5A595A", -"S( c #676667", -"T( c #8A8A8A", -"U( c #7A7A7B", -"V( c #7B7777", -"W( c #827B7B", -"X( c #7A7272", -"Y( c #726B6B", -"Z( c #6F6565", -"`( c #BB8887", -" _ c #D17A45", -"._ c #DA6C00", -"+_ c #E06F00", -"@_ c #E2740E", -"#_ c #DE8470", -"$_ c #7A6363", -"%_ c #695B5C", -"&_ c #D86A63", -"*_ c #F29351", -"=_ c #FE9937", -"-_ c #ED7253", -";_ c #E16A6A", -">_ c #9E9E9D", -",_ c #838282", -"'_ c #767576", -")_ c #868585", -"!_ c #797A79", -"~_ c #777778", -"{_ c #737273", -"]_ c #A08A8A", -"^_ c #E19C98", -"/_ c #DA948B", -"(_ c #DC9288", -"__ c #DF8A78", -":_ c #CE7229", -"<_ c #DE6E00", -"[_ c #DD7314", -"}_ c #DB8678", -"|_ c #645757", -"1_ c #5E5656", -"2_ c #CB6966", -"3_ c #F08D50", -"4_ c #FF9935", -"5_ c #FE9733", -"6_ c #ED7F4C", -"7_ c #EE6657", -"8_ c #EE6357", -"9_ c #EE5E54", -"0_ c #E56464", -"a_ c #7F7E7F", -"b_ c #989897", -"c_ c #9C9D9C", -"d_ c #A58E8E", -"e_ c #D2866E", -"f_ c #BC661B", -"g_ c #BF6719", -"h_ c #C36819", -"i_ c #C86B18", -"j_ c #D26800", -"k_ c #D66A00", -"l_ c #DC6D00", -"m_ c #DB7316", -"n_ c #DC8B80", -"o_ c #746A6A", -"p_ c #4D4F4E", -"q_ c #585454", -"r_ c #C46865", -"s_ c #EF894E", -"t_ c #FE932B", -"u_ c #F58B36", -"v_ c #F58A34", -"w_ c #EC7845", -"x_ c #E8615E", -"y_ c #9C9B9C", -"z_ c #9B9B9A", -"A_ c #A48E8E", -"B_ c #E59891", -"C_ c #D78B78", -"D_ c #D88A76", -"E_ c #D88975", -"F_ c #D48465", -"G_ c #CB6D1B", -"H_ c #D46900", -"I_ c #DB7315", -"J_ c #DD8C80", -"K_ c #887C7C", -"L_ c #5A5453", -"M_ c #C86A66", -"N_ c #EF894A", -"O_ c #FF942B", -"P_ c #EE8342", -"Q_ c #EC6D51", -"R_ c #ED6A52", -"S_ c #EF614F", -"T_ c #E76363", -"U_ c #838483", -"V_ c #8D8D8C", -"W_ c #959696", -"X_ c #959795", -"Y_ c #757574", -"Z_ c #656666", -"`_ c #7D7E7E", -" : c #737372", -".: c #807A7A", -"+: c #978787", -"@: c #978686", -"#: c #988787", -"$: c #CF9A99", -"%: c #CB7845", -"&: c #D86B00", -"*: c #D87111", -"=: c #DE8B79", -"-: c #958282", -";: c #625656", -">: c #D46D66", -",: c #F08A43", -"': c #FE9127", -"): c #EC7250", -"!: c #E66F6F", -"~: c #747374", -"{: c #979796", -"]: c #939392", -"^: c #7D7D7E", -"/: c #777878", -"(: c #747373", -"_: c #C09695", -":: c #CD7C4F", -"<: c #D06700", -"[: c #D76D08", -"}: c #DC866A", -"|: c #A98A8A", -"1: c #735B5B", -"2: c #E46E62", -"3: c #F48C37", -"4: c #FF9023", -"5: c #FE8E21", -"6: c #EC7152", -"7: c #7A7B7B", -"8: c #929393", -"9: c #666566", -"0: c #7C7C7B", -"a: c #AB9191", -"b: c #D98B73", -"c: c #C9670B", -"d: c #D96C00", -"e: c #D67F50", -"f: c #C69291", -"g: c #787575", -"h: c #926464", -"i: c #EA775D", -"j: c #FB8D26", -"k: c #F2872F", -"l: c #EE695B", -"m: c #7A7B7A", -"n: c #929293", -"o: c #898A8A", -"p: c #666665", -"q: c #8E8282", -"r: c #DD9486", -"s: c #C7670E", -"t: c #CE6600", -"u: c #D0742B", -"v: c #DD928A", -"w: c #8D8080", -"x: c #564F4F", -"y: c #BF6D6B", -"z: c #EA7F4B", -"A: c #FE8C1D", -"B: c #EF8233", -"C: c #EA6C64", -"D: c #898988", -"E: c #787879", -"F: c #797978", -"G: c #757675", -"H: c #827C7C", -"I: c #D99D9A", -"J: c #C5733A", -"K: c #CC6500", -"L: c #D46D0A", -"M: c #DB876B", -"N: c #B69090", -"O: c #816060", -"P: c #E57464", -"Q: c #F3872D", -"R: c #FF8A17", -"S: c #E97747", -"T: c #E57373", -"U: c #89898A", -"V: c #858685", -"W: c #848384", -"X: c #808180", -"Y: c #757576", -"Z: c #747475", -"`: c #C29796", -" < c #C67741", -".< c #CA6400", -"+< c #D56A00", -"@< c #CF7737", -"#< c #DA948C", -"$< c #928282", -"%< c #584F4F", -"&< c #BD706E", -"*< c #E97C4D", -"=< c #FD8715", -"-< c #FF8813", -";< c #F8851B", -">< c #ED6C56", -",< c #838382", -"'< c #747576", -")< c #737473", -"!< c #BE9393", -"~< c #C47641", -"{< c #C66200", -"]< c #D26A05", -"^< c #D7825E", -"/< c #C69493", -"(< c #837B7B", -"_< c #4A4646", -":< c #976566", -"<< c #E8785F", -"[< c #F58320", -"}< c #FF850D", -"|< c #F27F20", -"1< c #DB6C64", -"2< c #79797A", -"3< c #7A7A79", -"4< c #767776", -"5< c #968989", -"6< c #D69F9C", -"7< c #BE723B", -"8< c #C26000", -"9< c #CE6F1A", -"0< c #DB8A73", -"a< c #B69191", -"b< c #555050", -"c< c #836161", -"d< c #DF7768", -"e< c #EC7E32", -"f< c #FF8309", -"g< c #F27E1D", -"h< c #EB7267", -"i< c #6B6A6A", -"j< c #747574", -"k< c #8C8383", -"l< c #BF9F9E", -"m< c #DA9F98", -"n< c #C88261", -"o< c #B85F0C", -"p< c #BD5F04", -"q< c #C16104", -"r< c #C86300", -"s< c #D16800", -"t< c #CD732C", -"u< c #DE8E7A", -"v< c #A78080", -"w< c #5D5454", -"x< c #4E4949", -"y< c #DA7A6E", -"z< c #E97D3F", -"A< c #FD8007", -"B< c #FF8003", -"C< c #FF7F01", -"D< c #F97E0A", -"E< c #E8714E", -"F< c #ED716A", -"G< c #E57E7E", -"H< c #7D7979", -"I< c #CBA6A6", -"J< c #D59482", -"K< c #B36A31", -"L< c #B66B32", -"M< c #CC8667", -"N< c #D68F7B", -"O< c #CE8462", -"P< c #C16511", -"Q< c #CD732A", -"R< c #DB8A70", -"S< c #BF8A87", -"T< c #7B6767", -"U< c #4C4A4A", -"V< c #474545", -"W< c #695959", -"X< c #A77272", -"Y< c #E37B67", -"Z< c #E77D39", -"`< c #FA7C02", -" [ c #F17B16", -".[ c #E9792D", -"+[ c #E8782C", -"@[ c #E97821", -"#[ c #E3723C", -"$[ c #F56A66", -"%[ c #B69C9C", -"&[ c #DA9A8C", -"*[ c #CD8D76", -"=[ c #E0A39D", -"-[ c #BB9D9D", -";[ c #A28F8F", -">[ c #CA9F9E", -",[ c #CC825F", -"'[ c #C26103", -")[ c #CF6D15", -"![ c #D48159", -"~[ c #DC8F83", -"{[ c #AC7F7F", -"][ c #554F4F", -"^[ c #4F4B4B", -"/[ c #6D5B5B", -"([ c #9B7070", -"_[ c #D67F78", -":[ c #E57E5B", -"<[ c #EA7B23", -"[[ c #EF790D", -"}[ c #E9775A", -"|[ c #EB7C78", -"1[ c #EF7366", -"2[ c #EC6E5B", -"3[ c #EA7C7B", -"4[ c #847F7F", -"5[ c #D1A9A9", -"6[ c #BC9D9D", -"7[ c #948888", -"8[ c #767575", -"9[ c #978A8A", -"0[ c #DD9D94", -"a[ c #C37642", -"b[ c #C16000", -"c[ c #D26902", -"d[ c #CE722A", -"e[ c #D5825D", -"f[ c #DF8C7E", -"g[ c #C98A87", -"h[ c #A97D7C", -"i[ c #8D7070", -"j[ c #7C6767", -"k[ c #7B6565", -"l[ c #876B6B", -"m[ c #A27776", -"n[ c #C07E7C", -"o[ c #DE8479", -"p[ c #E27F5F", -"q[ c #DF7A36", -"r[ c #ED7808", -"s[ c #F07802", -"t[ c #E37846", -"u[ c #EC817C", -"v[ c #EA8181", -"w[ c #817D7D", -"x[ c #A59191", -"y[ c #DB9B91", -"z[ c #C17543", -"A[ c #C36100", -"B[ c #D36B05", -"C[ c #D06F1A", -"D[ c #D1783B", -"E[ c #D47E55", -"F[ c #DA8467", -"G[ c #DD856D", -"H[ c #DD846D", -"I[ c #DC8367", -"J[ c #DA7F58", -"K[ c #DA7B41", -"L[ c #DD7622", -"M[ c #E67407", -"N[ c #EB7500", -"O[ c #EC7602", -"P[ c #DF7747", -"Q[ c #EC827B", -"R[ c #A59090", -"S[ c #DC9B91", -"T[ c #C87E57", -"U[ c #C0640F", -"V[ c #D66B02", -"W[ c #D76C04", -"X[ c #D96E05", -"Y[ c #DB6E05", -"Z[ c #DD6F04", -"`[ c #E07003", -" } c #E37100", -".} c #DE751E", -"+} c #E27A53", -"@} c #EA847E", -"#} c #A08D8D", -"$} c #D8A2A0", -"%} c #C47A4E", -"&} c #C46100", -"*} c #DC7216", -"=} c #E57D66", -"-} c #EB8E8D", -";} c #B39696", -">} c #C77F5B", -",} c #BE5E00", -"'} c #C05F00", -")} c #D5732B", -"!} c #EC8D87", -"~} c #7A7878", -"{} c #CDA2A1", -"]} c #C17A51", -"^} c #B96B2F", -"/} c #CA8261", -"(} c #CD8466", -"_} c #C87B4F", -":} c #C16C25", -"<} c #C36204", -"[} c #C76301", -"}} c #D36900", -"|} c #D56A01", -"1} c #D26C0C", -"2} c #D0722B", -"3} c #D67A50", -"4} c #D97C58", -"5} c #D3753B", -"6} c #D2712A", -"7} c #EC8881", -"8} c #A59292", -"9} c #DA9C91", -"0} c #B3672B", -"a} c #D18D76", -"b} c #B68F8F", -"c} c #947C7C", -"d} c #BD9090", -"e} c #D6958E", -"f} c #D88C77", -"g} c #CF8260", -"h} c #C57237", -"i} c #C46D26", -"j} c #C86402", -"k} c #C86C1D", -"l} c #CB7027", -"m} c #CD7640", -"n} c #D78060", -"o} c #E18673", -"p} c #EA9189", -"q} c #F09F9F", -"r} c #EC9F9F", -"s} c #E98B82", -"t} c #CF7238", -"u} c #D47750", -"v} c #EB9290", -"w} c #635B5B", -"x} c #D0A19D", -"y} c #B8754C", -"z} c #BE7C58", -"A} c #CFA19F", -"B} c #655E5E", -"C} c #555151", -"D} c #F1B2B2", -"E} c #ECA39E", -"F} c #EA9B93", -"G} c #C5743F", -"H} c #C36B21", -"I} c #E48F80", -"J} c #EB9B96", -"K} c #EEA7A7", -"L} c #DC7E66", -"M} c #C96C25", -"N} c #E88276", -"O} c #AC9393", -"P} c #EFB2B1", -"Q} c #CB8C74", -"R} c #DB9D93", -"S} c #867474", -"T} c #ECAEAE", -"U} c #CA7C57", -"V} c #C06D2F", -"W} c #EBA19D", -"X} c #EE908D", -"Y} c #DD7E6A", -"Z} c #EF8984", -"`} c #F0BDBC", -" | c #F6C1C1", -".| c #ECB0B0", -"+| c #C87C58", -"@| c #BD6C2F", -"#| c #EBA29E", -"$| c #EE9D9D", -"%| c #ECB4B4", -"&| c #C57B58", -"*| c #B86A30", -"=| c #EBA4A0", -"-| c #EEB5B5", -";| c #D58B77", -">| c #C77E61", -",| c #EEA8A5", -"'| c #EDB2B1", -")| c #EFB0AF", +"V) c #B3B3B4", +"W) c #666666", +"X) c #9F9F9F", +"Y) c #C4C3C4", +"Z) c #C2C2C3", +"`) c #C0C0BF", +" ! c #BCBBBB", +".! c #909191", +"+! c #141516", +"@! c #121211", +"#! c #0F0E0F", +"$! c #090908", +"%! c #070606", +"&! c #050605", +"*! c #020101", +"=! c #B2B3B2", +"-! c #4D4E4D", +";! c #929292", +">! c #C2C3C2", +",! c #C1C2C2", +"'! c #C2C1C2", +")! c #0B0C0B", +"!! c #030202", +"~! c #000100", +"{! c #B3B2B2", +"]! c #4B4C4B", +"^! c #464745", +"/! c #AFB0AF", +"(! c #ADAEAE", +"_! c #ABAAAA", +":! c #BFBFBE", +"~ c #565756", +",~ c #989998", +"'~ c #A0A1A0", +")~ c #A4A3A4", +"!~ c #454946", +"~~ c #444644", +"{~ c #B0B1B1", +"]~ c #B1B0B1", +"^~ c #B6B7B7", +"/~ c #787877", +"(~ c #757676", +"_~ c #747474", +":~ c #8C8D8C", +"<~ c #9D9C9D", +"[~ c #A8A8A7", +"}~ c #545353", +"|~ c #989797", +"1~ c #9F9F9E", +"2~ c #A0A1A1", +"3~ c #8C8C8B", +"4~ c #706F70", +"5~ c #455646", +"6~ c #4F6A51", +"7~ c #4F7153", +"8~ c #506B54", +"9~ c #515653", +"0~ c #B1B1B0", +"a~ c #B4B5B5", +"b~ c #777677", +"c~ c #727172", +"d~ c #6B6C6C", +"e~ c #80807F", +"f~ c #919090", +"g~ c #9E9E9F", +"h~ c #A4A5A4", +"i~ c #A6A7A6", +"j~ c #898888", +"k~ c #6E6E6D", +"l~ c #5F5F60", +"m~ c #797A7A", +"n~ c #7E7F7F", +"o~ c #777777", +"p~ c #616060", +"q~ c #4C634E", +"r~ c #5A8B5E", +"s~ c #63A86A", +"t~ c #63AC6A", +"u~ c #47854E", +"v~ c #565A57", +"w~ c #474C48", +"x~ c #626263", +"y~ c #767777", +"z~ c #767675", +"A~ c #717171", +"B~ c #6E6E6F", +"C~ c #6C6D6D", +"D~ c #6A6969", +"E~ c #676767", +"F~ c #656665", +"G~ c #676766", +"H~ c #727373", +"I~ c #5C5C5B", +"J~ c #6A6A6B", +"K~ c #7B7A7B", +"L~ c #626262", +"M~ c #4C634F", +"N~ c #5D9361", +"O~ c #6ECA78", +"P~ c #7AE984", +"Q~ c #6FCD78", +"R~ c #609D67", +"S~ c #47774A", +"T~ c #535754", +"U~ c #454745", +"V~ c #6B6A6B", +"W~ c #6C6B6B", +"X~ c #B1B1B2", +"Y~ c #777676", +"Z~ c #747575", +"`~ c #717271", +" { c #6D6E6D", +".{ c #6B6B6A", +"+{ c #686767", +"@{ c #646363", +"#{ c #5D5D5C", +"${ c #777776", +"%{ c #878788", +"&{ c #969596", +"*{ c #9A9898", +"={ c #9A9A99", +"-{ c #646463", +";{ c #7B7C7C", +">{ c #7B7C7B", +",{ c #707170", +"'{ c #575756", +"){ c #4D624F", +"!{ c #5D9463", +"~{ c #74D47F", +"{{ c #86FF91", +"]{ c #81F68C", +"^{ c #76D882", +"/{ c #6DB373", +"({ c #5C8B61", +"_{ c #5B675E", +":{ c #454C46", +"<{ c #696968", +"[{ c #B0B0B1", +"}{ c #ABACAB", +"|{ c #787777", +"1{ c #717170", +"2{ c #696869", +"3{ c #666565", +"4{ c #646465", +"5{ c #636363", +"6{ c #605F5F", +"7{ c #575758", +"8{ c #8B8A8B", +"9{ c #949393", +"0{ c #5C9361", +"a{ c #73D07D", +"b{ c #86FD92", +"c{ c #7FFC8A", +"d{ c #74F182", +"e{ c #72CA7B", +"f{ c #639D67", +"g{ c #617264", +"h{ c #4C544E", +"i{ c #444645", +"j{ c #666566", +"k{ c #A5A4A4", +"l{ c #969797", +"m{ c #787778", +"n{ c #636364", +"o{ c #606161", +"p{ c #5D5C5C", +"q{ c #585958", +"r{ c #5C5C5D", +"s{ c #868787", +"t{ c #7F807F", +"u{ c #4F6251", +"v{ c #5B9361", +"w{ c #64C46E", +"x{ c #61DD6C", +"y{ c #3DBE49", +"z{ c #25AA32", +"A{ c #43C44D", +"B{ c #63DA6F", +"C{ c #76DB82", +"D{ c #77B880", +"E{ c #668E6B", +"F{ c #586659", +"G{ c #454844", +"H{ c #606160", +"I{ c #616261", +"J{ c #656566", +"K{ c #666767", +"L{ c #ADADAC", +"M{ c #A8A9A8", +"N{ c #9A9999", +"O{ c #6A6A69", +"P{ c #626261", +"Q{ c #5F605F", +"R{ c #818081", +"S{ c #868685", +"T{ c #506252", +"U{ c #5FC36A", +"V{ c #58D863", +"W{ c #2AB336", +"X{ c #079412", +"Y{ c #1FAC2C", +"Z{ c #40CA4E", +"`{ c #62E76F", +" ] c #77E983", +".] c #72CB7B", +"+] c #66A56C", +"@] c #66796B", +"#] c #4D5750", +"$] c #464846", +"%] c #636362", +"&] c #7C7B7B", +"*] c #939292", +"=] c #8A8B8A", +"-] c #676768", +";] c #848485", +">] c #818281", +",] c #7F7E7E", +"'] c #7B7B7A", +")] c #5C9362", +"!] c #62C76C", +"~] c #60E26C", +"{] c #30C23D", +"]] c #019D0D", +"^] c #06A211", +"/] c #17AF21", +"(] c #35C63F", +"_] c #57DE62", +":] c #72F17C", +"<] c #7BE885", +"[] c #6FC077", +"}] c #619367", +"|] c #57655C", +"1] c #484C48", +"2] c #A5A6A6", +"3] c #9F9FA0", +"4] c #8B8C8B", +"5] c #818180", +"6] c #7E7D7E", +"7] c #7C7C7D", +"8] c #787978", +"9] c #636463", +"0] c #62C86B", +"a] c #5FE66C", +"b] c #32CB3F", +"c] c #06AC12", +"d] c #0DB319", +"e] c #13BA1F", +"f] c #12BB1D", +"g] c #1DC227", +"h] c #34CF3F", +"i] c #50E05A", +"j] c #6CE977", +"k] c #75DA7E", +"l] c #6AAC71", +"m] c #57805A", +"n] c #535C55", +"o] c #434543", +"p] c #5D5D5E", +"q] c #616160", +"r] c #626161", +"s] c #7C7D7C", +"t] c #9B9A9A", +"u] c #666667", +"v] c #818182", +"w] c #7D7E7D", +"x] c #757475", +"y] c #62C76B", +"z] c #5EE76A", +"A] c #30D13C", +"B] c #05B711", +"C] c #10C01C", +"D] c #15C421", +"E] c #0BBE16", +"F] c #09BD14", +"G] c #13C11E", +"H] c #2CCF37", +"I] c #50E25D", +"J] c #6BF076", +"K] c #75E481", +"L] c #72BE7A", +"M] c #639166", +"N] c #657269", +"O] c #565D58", +"P] c #505251", +"Q] c #5F6060", +"R] c #707171", +"S] c #807F80", +"T] c #8E8E8F", +"U] c #979696", +"V] c #959594", +"W] c #686869", +"X] c #7F8080", +"Y] c #7E7E7F", +"Z] c #7C7D7D", +"`] c #737374", +" ^ c #62C96B", +".^ c #5EE96A", +"+^ c #30D53C", +"@^ c #03BE0F", +"#^ c #0EC81A", +"$^ c #17D023", +"%^ c #15CF21", +"&^ c #11CE1D", +"*^ c #0BC715", +"=^ c #0EC718", +"-^ c #22D02D", +";^ c #45DF4E", +">^ c #6CF479", +",^ c #80F38B", +"'^ c #7AD682", +")^ c #6CAF72", +"!^ c #5F8464", +"~^ c #5C655F", +"{^ c #525553", +"]^ c #535453", +"^^ c #5B595B", +"/^ c #5F5F5E", +"(^ c #747473", +"_^ c #838384", +":^ c #908F90", +"<^ c #919192", +"[^ c #7D7C7D", +"}^ c #818282", +"|^ c #808081", +"1^ c #7F7F80", +"2^ c #61CA6B", +"3^ c #5DEB69", +"4^ c #2ED93B", +"5^ c #01C60D", +"6^ c #0CD118", +"7^ c #15D921", +"8^ c #13D91F", +"9^ c #10D91D", +"0^ c #0FD51A", +"a^ c #0ED119", +"b^ c #0ECD19", +"c^ c #18CB22", +"d^ c #2CD238", +"e^ c #3FD84A", +"f^ c #4EDC5A", +"g^ c #61D46B", +"h^ c #73C27B", +"i^ c #6D9D72", +"j^ c #627865", +"k^ c #545E54", +"l^ c #5B5A5C", +"m^ c #5C5D5D", +"n^ c #828181", +"o^ c #5A595A", +"p^ c #676667", +"q^ c #8A8A8A", +"r^ c #7A7A7B", +"s^ c #4F6151", +"t^ c #62CA69", +"u^ c #5EEE68", +"v^ c #2EDF3A", +"w^ c #00CD0C", +"x^ c #0AD916", +"y^ c #12E21E", +"z^ c #11E11B", +"A^ c #11E11C", +"B^ c #11DF1C", +"C^ c #10DB1B", +"D^ c #0AD615", +"E^ c #07CA14", +"F^ c #0CC61A", +"G^ c #17C625", +"H^ c #26CB34", +"I^ c #41D64E", +"J^ c #68E473", +"K^ c #74D37D", +"L^ c #6FB176", +"M^ c #728D7E", +"N^ c #5E6F60", +"O^ c #545955", +"P^ c #9E9E9D", +"Q^ c #838282", +"R^ c #767576", +"S^ c #868585", +"T^ c #797A79", +"U^ c #737273", +"V^ c #5C6E5F", +"W^ c #5F9664", +"X^ c #61CB69", +"Y^ c #5EEF69", +"Z^ c #2CE239", +"`^ c #00D20B", +" / c #09DD13", +"./ c #11E71C", +"+/ c #0EE918", +"@/ c #0EEB18", +"#/ c #0EE719", +"$/ c #11DF1B", +"%/ c #11DC1C", +"&/ c #12D51E", +"*/ c #0AC116", +"=/ c #04B610", +"-/ c #15BB21", +";/ c #3ECF4A", +">/ c #63E76E", +",/ c #7FEC89", +"'/ c #7ECF89", +")/ c #6BA873", +"!/ c #697D6E", +"~/ c #545B56", +"{/ c #7F7E7F", +"]/ c #989897", +"^/ c #9C9D9C", +"// c #738575", +"(/ c #71A977", +"_/ c #6AD471", +":/ c #5EF069", +"( c #1A9D26", +",( c #2EB039", +"'( c #50D05C", +")( c #71EE7C", +"!( c #78E382", +"~( c #71BB79", +"{( c #649269", +"]( c #606E63", +"^( c #525953", +"/( c #747374", +"(( c #979796", +"_( c #939392", +":( c #7D7D7E", +"<( c #777878", +"[( c #747373", +"}( c #768878", +"|( c #6DD675", +"1( c #5EEC6B", +"2( c #2DDE3A", +"3( c #00CB0C", +"4( c #0BD616", +"5( c #13E020", +"6( c #0FE01C", +"7( c #10DF1B", +"8( c #11DE1C", +"9( c #13D91D", +"0( c #12D21E", +"a( c #13CD1F", +"b( c #15CA21", +"c( c #18C424", +"d( c #19C025", +"e( c #19B927", +"f( c #1AB429", +"g( c #1AA927", +"h( c #179E24", +"i( c #169A23", +"j( c #1A9E28", +"k( c #30B23C", +"l( c #49CA56", +"m( c #5FDF6D", +"n( c #71E47B", +"o( c #70CE78", +"p( c #6AAB6F", +"q( c #718A77", +"r( c #5B6D5E", +"s( c #575958", +"t( c #7A7B7B", +"u( c #929393", +"v( c #7C7C7B", +"w( c #758778", +"x( c #77AE7D", +"y( c #6DD575", +"z( c #5EEC6A", +"A( c #2FDA3B", +"B( c #03C40D", +"C( c #0DCE16", +"D( c #16D721", +"E( c #12D71F", +"F( c #12D61E", +"G( c #13D41D", +"H( c #13D01F", +"I( c #15CC21", +"J( c #17C523", +"K( c #18C024", +"L( c #19BD25", +"M( c #1BB527", +"N( c #1CAF29", +"O( c #1DAA2A", +"P( c #1FA42C", +"Q( c #1BA029", +"R( c #179B24", +"S( c #179C24", +"T( c #1EA32C", +"U( c #3CC04A", +"V( c #61E06C", +"W( c #73F180", +"X( c #7CE587", +"Y( c #71BF79", +"Z( c #5F9264", +"`( c #4D6B51", +" _ c #7A7B7A", +"._ c #929293", +"+_ c #898A8A", +"@_ c #666665", +"#_ c #6F7070", +"$_ c #6A806D", +"%_ c #6BA472", +"&_ c #68D070", +"*_ c #5DE869", +"=_ c #2FD33C", +"-_ c #04BC0F", +";_ c #0EC619", +">_ c #17CF23", +",_ c #16CE20", +"'_ c #16CC21", +")_ c #16CD22", +"!_ c #16CB22", +"~_ c #17C823", +"{_ c #17C423", +"]_ c #18C023", +"^_ c #18BE24", +"/_ c #19B725", +"(_ c #1CAF26", +"__ c #1CA728", +":_ c #1DA529", +"<_ c #20A32B", +"[_ c #1CA029", +"}_ c #10951D", +"|_ c #0A8D15", +"1_ c #1CA028", +"2_ c #40C14C", +"3_ c #67E774", +"4_ c #83FA90", +"5_ c #7AD785", +"6_ c #65A76B", +"7_ c #58785C", +"8_ c #535755", +"9_ c #898988", +"0_ c #787879", +"a_ c #797978", +"b_ c #757675", +"c_ c #6D8170", +"d_ c #6BA470", +"e_ c #67CF70", +"f_ c #5FE86B", +"g_ c #31CE3D", +"h_ c #06B510", +"i_ c #11BE1A", +"j_ c #1AC725", +"k_ c #18C621", +"l_ c #18C522", +"m_ c #18C323", +"n_ c #17C123", +"o_ c #16BD22", +"p_ c #18B824", +"q_ c #19B527", +"r_ c #1AAF29", +"s_ c #1DAC29", +"t_ c #1EA52A", +"u_ c #1FA62B", +"v_ c #20A22C", +"w_ c #1A9C28", +"x_ c #139720", +"y_ c #159A23", +"z_ c #2AAD38", +"A_ c #45C651", +"B_ c #5EDE6A", +"C_ c #71E67B", +"D_ c #75D17E", +"E_ c #69A46E", +"F_ c #65786A", +"G_ c #535D54", +"H_ c #89898A", +"I_ c #858685", +"J_ c #848384", +"K_ c #808180", +"L_ c #757576", +"M_ c #747475", +"N_ c #6A6B6B", +"O_ c #6B7D6C", +"P_ c #6BA46E", +"Q_ c #64CB6D", +"R_ c #5FE56A", +"S_ c #33C73F", +"T_ c #08AB14", +"U_ c #13B51D", +"V_ c #1CBF27", +"W_ c #18BD24", +"X_ c #18BE25", +"Y_ c #18BD26", +"Z_ c #1ABA26", +"`_ c #1AB926", +" : c #19B525", +".: c #1BB126", +"+: c #1BAD27", +"@: c #1DA82A", +"#: c #1EA52B", +"$: c #1EA22B", +"%: c #1DA129", +"&: c #1B9F26", +"*: c #189C25", +"=: c #1AA027", +"-: c #31B43E", +";: c #55D660", +">: c #69E473", +",: c #70DF7B", +"': c #6BBE72", +"): c #5C8F62", +"!: c #526655", +"~: c #4A4C4B", +"{: c #838382", +"]: c #747576", +"^: c #737473", +"/: c #647867", +"(: c #67A16C", +"_: c #64C86D", +":: c #60E36C", +"<: c #32C242", +"[: c #08A218", +"}: c #14AD21", +"|: c #1EB828", +"1: c #1AB426", +"2: c #1BB526", +"3: c #1AB528", +"4: c #1CB428", +"5: c #1CB228", +"6: c #1BAF27", +"7: c #1DAB29", +"8: c #1FA62A", +"9: c #1FA42A", +"0: c #1DA028", +"a: c #199E25", +"b: c #10941D", +"c: c #0A9118", +"d: c #1C9F29", +"e: c #3BBC49", +"f: c #5FDA6C", +"g: c #7AEB86", +"h: c #76CC7F", +"i: c #64A46C", +"j: c #52785F", +"k: c #4F554E", +"l: c #79797A", +"m: c #7A7A79", +"n: c #767776", +"o: c #585959", +"p: c #5E7260", +"q: c #639D68", +"r: c #64C76E", +"s: c #62E16D", +"t: c #35BC42", +"u: c #0D9719", +"v: c #19A224", +"w: c #20AE2C", +"x: c #1DAC2B", +"y: c #1CAC2A", +"z: c #1DAC2A", +"A: c #1EA92A", +"B: c #1EA62A", +"C: c #1EA42B", +"D: c #179D25", +"E: c #189C26", +"F: c #20A52E", +"G: c #2BAD38", +"H: c #38BA45", +"I: c #4ECE59", +"J: c #65DD6F", +"K: c #6DD177", +"L: c #6BB173", +"M: c #658A6B", +"N: c #58655A", +"O: c #494E49", +"P: c #6B6A6A", +"Q: c #747574", +"R: c #566A58", +"S: c #5E9963", +"T: c #64C56D", +"U: c #61DE6C", +"V: c #35B742", +"W: c #0E911B", +"X: c #199C26", +"Y: c #21A52D", +"Z: c #1EA42A", +"`: c #1DA42B", +" < c #1EA32A", +".< c #1FA22A", +"+< c #1FA12A", +"@< c #1EA12B", +"#< c #1B9E28", +"$< c #22A42D", +"%< c #38BA44", +"&< c #4DCE59", +"*< c #61DD6D", +"=< c #6FDF7A", +"-< c #73C87C", +";< c #669E6C", +">< c #567459", +",< c #4C544D", +"'< c #566958", +")< c #639E69", +"!< c #67CB70", +"~< c #61E16C", +"{< c #36B945", +"]< c #0F931C", +"^< c #1B9E27", +"/< c #22A42E", +"(< c #20A42C", +"_< c #21A32C", +":< c #21A42E", +"<< c #20A32E", +"[< c #1DA12B", +"}< c #22A630", +"|< c #3EC049", +"1< c #62E36E", +"2< c #72ED7E", +"3< c #74D77B", +"4< c #69AF6F", +"5< c #5A835D", +"6< c #556158", +"7< c #778B79", +"8< c #75AF7A", +"9< c #6ED277", +"0< c #35B943", +"a< c #1A9E27", +"b< c #21A52F", +"c< c #20A32D", +"d< c #20A42D", +"e< c #1FA32D", +"f< c #1DA12A", +"g< c #149821", +"h< c #2CB039", +"i< c #49CB55", +"j< c #61E06D", +"k< c #72E27C", +"l< c #70C277", +"m< c #659669", +"n< c #627167", +"o< c #445045", +"p< c #77B27C", +"q< c #6ED278", +"r< c #61E16D", +"s< c #21A52E", +"t< c #30B13B", +"u< c #4ACA56", +"v< c #66DE71", +"w< c #6FD879", +"x< c #6AAF6F", +"y< c #5B845F", +"z< c #535C56", +"A< c #444845", +"B< c #10931C", +"C< c #22A62F", +"D< c #1FA22C", +"E< c #0F941C", +"F< c #169B23", +"G< c #34B741", +"H< c #51D25E", +"I< c #6BE876", +"J< c #72E17C", +"K< c #6BBF73", +"L< c #5B685F", +"M< c #4A504B", +"N< c #36BA45", +"O< c #0E931C", +"P< c #169B24", +"Q< c #19A028", +"R< c #189E26", +"S< c #36BA43", +"T< c #5BDA68", +"U< c #70E47C", +"V< c #71CE7B", +"W< c #68A96E", +"X< c #5D7D65", +"Y< c #4A5B4B", +"Z< c #62E16E", +"`< c #35BA43", +" [ c #0D9219", +".[ c #149920", +"+[ c #1A9F27", +"@[ c #1FA22B", +"#[ c #2DAF39", +"$[ c #44C450", +"%[ c #5FD869", +"&[ c #76DF7F", +"*[ c #77BE7E", +"=[ c #64906A", +"-[ c #59685D", +";[ c #484D49", +">[ c #6BCF74", +",[ c #5BDB67", +"'[ c #2BAE37", +")[ c #01850D", +"![ c #31B33D", +"~[ c #51D05D", +"{[ c #6BEA77", +"][ c #75EB80", +"^[ c #64A36B", +"/[ c #657963", +"([ c #4D5851", +"_[ c #788C7A", +":[ c #78B27D", +"<[ c #6ED177", +"[[ c #61E06E", +"}[ c #39BC45", +"|[ c #1A9F25", +"1[ c #33B53F", +"2[ c #4FCF5A", +"3[ c #68E275", +"4[ c #79DC82", +"5[ c #72BA79", +"6[ c #629367", +"7[ c #5E6C63", +"8[ c #47534A", +"9[ c #5D725F", +"0[ c #6FAA74", +"a[ c #73D67C", +"b[ c #6FEC7A", +"c[ c #56D762", +"d[ c #47CC53", +"e[ c #5CDA68", +"f[ c #6ADC76", +"g[ c #6DC976", +"h[ c #669F6B", +"i[ c #58785B", +"j[ c #4E6751", +"k[ c #5E9B65", +"l[ c #75D57D", +"m[ c #86FE90", +"n[ c #80FF8C", +"o[ c #7AF985", +"p[ c #7AE182", +"q[ c #64AE6B", +"r[ c #667F6C", +"s[ c #526254", +"t[ c #7EEF89", +"u[ c #86FB94", +"v[ c #84EF91", +"w[ c #79CB82", +"x[ c #829F8B", +"y[ c #5B6F5E", +"z[ c #82FF8E", +"A[ c #80FF8D", +"B[ c #7CFF88", " ", " ", " ", @@ -2668,56 +2535,56 @@ static char * SimRunIco_xpm[] = { " `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", " j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", " A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", -" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)V)W)X)Y)/# ", -" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)>!,!'!)!!! ", -" o+I.4.m%[+ +=$G#|.~!|.k.M&|.F.k.<+~!(@G.H.4._#_#I.n.:#o+C+.+++2+P.{!/#/#/#/#/#B#R*i*y*D*{ E$]!(%^!/!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;(!-,%)Q)r'r'-'6'=)w).)()_!g):!z)z)z)>,>,w!S)=)x!y!z!A!B!8)C!z)z)z)z)z)D!E!F!G!1! H! ", -" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#I!J!K!L!E*j*M!3*N!(&{ | =&x*[=O!/#/#/#P!Z&Z&Z&c%c%e F>Q!,,R!p$3@@%%*S!T!U!V!W!;!z)z)z)X!Y!Z!`! ~.~+~@~ #~$~%~&~ ", -" P./=*~=~G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=-~9&;~7.2*>~,~(&j*'~)~!~x*Q*!=/#/#/#/#/#/#~~P.9!c>e ,,M,{~C&;'T.]~^~/~(~_~:~<~[~}~|~1~2~3~4~5~6~7~8~9~0~a~ b~c~d~ ", -" P.G%[;o*K!e~~~=~M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.~~/#/#/#M%f~x*=&7.E*2*{ g~| y*^&h~i~j~/#/#/#/#/#/#1*P.P.P.P.P.{~;'9*8*8*9@_)k~l~m~n~o~p~q~r~s~t~u~v~w~x~y~z~A~B~C~D~E~F~G~H~I~J~ ", -" P.c%E+E+E++)4*K~;~B#L~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.L~/#!=_&R*i*V*E&7.| 7.M~-+x*N~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.O~+)E+6*P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{@{#{${%{&{*{={-{;{>{ ", -" P.,{p)3*R*/&'{){!{,~j*~{{{J!]{Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)^{/{({x*i*T*_{-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.:{<{[{}{|{1{2{3{4{5{6{7{ {8{9{@{0{a{b{c{d{e{f{g{h{ ", -" P.{~i{o*%@!*j{;*k{T*j*{ l{m{n{| E*o{p{a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.q{-*} r{s{R*t{9&]&({J!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.u{v{w{x{}{|{1{2{3{4{5{6{7{x~8{y{z{A{B{C{D{E{f{F{G{H{I{J{ ", -" P.K{l*(&!*}-L{0*M{N{=~[-O{P{=&E&=&=&=&y*Q{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$R{s !*. a)]~S{T{U{U{/#/#e*1*/#e*V{. W{K.P.P.P.P.P.P.P.X{P.P.P.P.u{Y{Z{`{ ].]|{+]@]3{#]$]%]&]*]=]-];]>],]']d{E{)]!]~]{]]]^]/](]O. ", -" P._]/&/&}-*+:]F=F==~<]5.V&S.[]-*}]|]1]9&R*R*2]3]`)4]5]s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 6]}*i&V&N{7]8]N):&[*D+9]Z)0]) P+J.P.P.O.P.P.P.Q.a]b]c]P.P.d]e]f]g]h]i].]|{j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y])]z]A]B]A]C]D]E]F]0 G]H] ", -" P.i{K~K~*+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]R]S&M)T{^{T{I!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M S]! Z)T]5.M{U][-9]-*S.)*V]0 ..F#M&Y$o+P.P.P.P.P.W]X]Y]Z]`] ^.^+^@^#^h]i]}{$^%^&^*^=^-^;^>^r+P.,^'^)^!^~^{^]^^^/^~]~]z](^_^:^<^[^}^|^ ", -" P.1^2*g~2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^Q 0^a^b^e~c^d^e~|%. S.e^v I.a+$+#+Q.P.P.P.P.P.P.P.p.K]0^f^g^0*h^p.Z)1=a i^*.P.P.P.P.P.P.P.P.j^k^l^m^n^o^p^q^r^#^s^i]t^u^v^w^x^r+P.P.P.P.P.P.P.P.P.y^z^A^B^C^(^!]F{)]e{D^E^F^G^H^I^ ", -" P.J^K^| !@L^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M :.N^. T^E@U^U^L~>)}-K]Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.V^W^X^Y^Z^`^ /./+/#^s^@/#/$/%/++P.P.P.P.P.P.P.P.P.P.P.P.Q.&/*/=/-/;/f{e{>/D{C{,/'/)/ ", -" P.j*7.M~A*A*!/~/U&{/w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.7@_/b!D+|%]~~~://D{c{b{d/e/ ", -" P.f/g/L!e*!/=&T.V*V*x*h/;*9]i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#}.k/<]l/m/>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.n/o/p/3/q/5/r/s/t/u/P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.M.F#f.v/w/x/y/c{C{b{a{z/A/ ", -" P.q!-+-+%@!*B/!@C/!=x*x*c+({Q*e*D/*+E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+F/S&G/:&H/=*I/L{< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J/K/L/M/q/N/O/P/Q/Q.P.P.P.P.P.P.P.P.P.P.P.P.Q.O.l+%.B.s I R/S/T/U/B{${A{V/W/ ", -" P.7.i*X/!*}-L{0*M{N{-*. x&,.`)_&s{Y/O!e*Z/}-E/c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)`/D+ (.(. 7]*++(9]-*@(g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N.#($(%(M/&(*(=(-(;(P.P.P.P.P.P.P.P.P.P.P.Q.P.;.q$$.N M L K q >(,('(A{0{#{)(!(~( ", -" P.=&]&]&}-*+:]F=F==~<]5.V&S.[]5.{(Z//=/#X*](e*s%V{!*^(v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&/(:&p{((f^I/p=*+0^0*_(=~N{F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.:(<([(%(}(3/|(1(2(P.P.P.P.P.P.P.P.P.P.P.P.3.[.[.O+%$P N M v t 3(4(5(6(z{@{9{7(8( ", -" P.3]Q*Q**+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]9(0(a(k{/=b(6.c(~~b%d(M [+4.Q@C+p+2+P.P.P.P.a)[*e(f(g(b%!*}-*+0^F=h(-*-*-*=~N{F=F=< 9 &.3.n.p+P.Q.P.P.P.R/i(j(k(l(3/m(n(o(P.P.P.P.P.P.P.P.P.P.Y$k.2.p(}.=%`.g.q(N M v e.r(s(t(y{9{8{u(v( ", -" P.c+_&_&2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^O^w(x(y(z(#!&@L~|%A(.*N 0%P.P.P.P.P.B(C(D(f([-. !*}-L^-&F==~-*-*-*-*-*-*-*=~N{F=-*.*0 P }.I.O.r+E(F(G(H(%(I(J(K(o%P.P.P.P.P.P.P.O.p+_#-%R+4.2.k.m+[.O+&.%.O N ^+L(M(N(8{8{x~O(P( ", -" P.R*I!`)Q(2^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M R(S(L^!@]~~~|%T(x&N)< ..n.P.G/:&D+N)b%U(7]+(9]0*N{=~-*-*-*-*-*-*-*-*-*-*-*=~N{V(W(X(Y(Z(`( _._+_k(@_#_$_P.P.P.P.P.P.O.R@1+++_*M.:#J.4.3.~!>.i.`.&.g.#.N %_&_*_x~ {w~=_-_;_ ", -" P.[=!=>_!=!=d^L~,_'_w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.}.{+< [ ~ :/)_O'S&[-`/D(N)[-%@!*!_~_0*F=N{{_-*-*-*-*-*-*-*-*-*-*-*-*-*]_^_/_(_(___:_._<_H([_}_|_#+Q.P.P.O.O.O.p+P.P.n%p+M.K.I.4.2!2.}.-.<.O+g.P 1_2_3_7{7{4_5_6_7_8_9_0_ ", -" P.a_U^b_d^c_P{X*X*X*](,#S&F=i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B(:&D+N).(. !**+9]0*F==~}=-*-*-*-*-*-*-*-*-*-*-*-*-*d_e_f_g_h_i_j_k_l_+_m_n_o_&.M.$+P.P.O.P.P.P.P.P.q+p+M.Q@I.n+<%M&p_}.[.`.&.q_r_s_4_6{Z~5{t_u_v_w_x_ ", -" P.8+v+1.Z)D+~~,#/=1*y_z_e*s%s%,#O'F=E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+p{[-. !*v&*+I]F=N{=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*A_B_C_D_E_F_G_H_._<_I_J_K_w*< .*o+P.P.P.P.P.P.P.P.O.R@S+o+n.f@r$G.~!}.[.`.L_M_N_Z~5{Y~O_P_Q_R_S_T_ ", -" P.#+8+9+#+_+w b%U_V_=+e*s%k{~/W_X_{!!@Y_Z_c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+`_.(. !*v&L^0*F=N{ :-*-*-*-*-*-*-*-*-*-*-*-*-*-*.:+:@:@:#:$:%:j_&:l_*:=:-:-*-*F=n.P.P.P.P.P.P.P.P.P.q+F$M.L.Q@}+-$3.1.k.}.;:>:,:O_O_4{':):!: ", -" Q.a+ v+p+M Z)~: (|%=+:={:,.]:]:{!,#~ '_P^v h.`.[.k. +4.J.o+p+P.P.P.P.P.^:g(f^U]p=/:9]'_N{(:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=_:::<:H_&:[:}:|:-*-*F=n.P.P.P.P.P.P.P.P.P.P.O.N&N.:@o+m.I.4.2.G#1:2:3:3{3{4:5:6: ", -" 8+#+R+N 1=[]7:|%=+,.8:&@L~a&a&^=~ 2^9:N [+4.Q@C+p+2+P.P.P.P.[-0:. 7]}-9]0*F=N{R]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=a:b:c:j_k_d:e:f:g:-*F=n.P.P.P.P.P.P.P.P.P.P.P.n%O.S+C+o+n.J.-$[+h:i:j:@]2{2{k:l: ", -" $+P.4.g.H O]m:V{n:,#a&V{T(o:;*x&a!*+p:Z.0%P.P.P.P.P.b%. !*}-*+9]0*F==~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q:r:s:t:H_&:u:v:w:-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.o+Q@n.x:y:z:A:+]+]1{B:C: ", -" Q.O.I.F.N O]b%~~]~|%D:U&~ !@O'S&a)E:w M o+P.b%7:!*F:9]0*G:h(-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*H:I:J:K:<:H_L:M:N:T&F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.M.O:P:Q:R:R:R:|{S:T: ", -" P.O.M.o+g.w =*U:U&V:W:a)X::&D+`_.(+(. !*}-*+0*Y:Z:=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:`: <.< ", -" P.P.P.P.p+N < =*,<`/X:N)^:.(%@U(}-v&L^0*'<)<}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:!<~<{<.[,['[r},}'}&}{|,| ", -" '|)| ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ", +" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ", +" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ", +" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ", +" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ", +" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ", +" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ", +" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.R@!~~~O.P.P.P.P.o*l*(&+~{~]~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ", +" P.^~l*(&!*}-/~0*(~_~s![-:~<~=&E&=&=&=&y*[~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$}~s !*. a)C!|~1~2~2~/#/#e*1*/#e*3~. 4~K.P.P.P.P.P.P.P.P.P.P.p+5~6~7~8~9~P.P.P.P.P.P.P.0~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ", +" P.a~/&/&}-*+b~F=F=s!c~5.V&S.d~-*e~f~g~9&R*R*h~i~X)j~k~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r l~}*i&V&_~m~n~N):&[*D+o~W)p~) P+J.P.P.O.P.P.P.P.P.P.P.P.M.q~r~s~t~u~v~w~P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.$+0 x~ ", +" P.Q!L!L!*+y~z~_~_~}=A~4~B~C~p.D~w E~F~G~H~S&M)1~Y!1~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M I~! W)J~5.(~K~[-o~-*S.)*L~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.M.M~N~O~P~Q~R~S~T~U~P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.P...i&V~W~ ", +" P.X~2*H!Y~(~Z~s!s!`~5.B~ {p..{.*+{W)}*@{g*! m #{Q ${%{&{F!*{={F!|%. S.-{v I.a+$+#+Q.P.P.P.P.P.P.P.p.A~${;{>{0*,{p.W)1=a '{*.P.P.P.P.P.P.P.P.P.P.P.P.P.1+){!{~{{{]{^{/{({_{:{P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.g.W).*E~<{i& ", +" P.[{}{| !@|{s!-*-*1{V&k~S.< i&2{G~3{4{5{1=6{9 a H I 7{M :.2{. 8{E@9{9{M!>)}-A~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1+){0{a{b{c{d{P~e{f{g{h{i{P.P.P.P.P.P.P.P.P.P.P.P.Q.P.n.`.! W)N%Y&j{E~w ", +" P.j*7.N!A*A*k{l{U&m{w*S.p.< .*w W)Y&n{L~o{) A.p{H q{M@M P g.`.}.7@r{1!D+|%C!A!s{t{}-s!5{[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.u{v{w{x{y{z{A{B{C{D{E{F{G{P.P.P.P.P.P.P.P.P.P.Q.n.f*H L~H{I{L~n{}*J{K{ ", +" P.L{M{l!e*k{=&T.V*V*x*N{;*o~O{E~W)}*5{P{! ) 0 I~r .v ]@N+&.`.-.1.3.4.n.<#}.Q{c~R{S{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{v{U{V{W{X{Y{Z{`{ ].]+]@]#]$]P.P.P.P.P.P.Q.M.F#f.A.0 9 ) ! 1=%]5{N%3{ ", +" P.0!-+-+%@!*&]!@*]!=x*x*c+`!Q*e*=]*+-]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+;]S&>]:&,]=*']/~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{)]!]~]{]]]^]/](]_]:]<][]}]|]1]T+P.P.Q.O.l+%.B.s I H r{F E ! 1=1=x~@{ ", +" P.7.i*2]!*}-/~0*(~_~-*. x&,.X)_&'~3]n!e*4]}--]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)5]D+6]7]. m~*+8]o~-*9]g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{0{0]a]b]c]d]e]f]g]h]i]j]k]l]m]n]o]P.;.q$$.N M L K r c a p]9 ) ! q]r] ", +" P.=&]&]&}-*+b~F=F=s!c~5.V&S.d~5.s]4]/=/#X*t]e*s%3~!*u]v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&v]:&;~w];{']p=*+${0*x]s!_~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.M.T{0{y]z]A]B]C]D]E]F]G]H]I]J]K]L]M]N]O]P]O+%$P N M v t I H I~#{9 ) l~Q] ", +" P.i~Q*Q**+y~z~_~_~}=A~4~B~C~p.D~w E~F~G~R]S]T]%~/=U]6.V]A!b%W]M [+4.Q@C+p+2+P.P.P.P.a)[*X]Y]Z]b%!*}-*+${F=`]-*-*-*s!_~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.M.T{0{ ^.^+^@^#^$^%^&^*^=^-^;^>^,^'^)^!^~^{^`.g.]^N M v ..K ^^:.a 0 n /^ ", +" P.c+_&_&Y~(~Z~s!s!`~5.B~ {p..{.*+{W)}*@{g*! m #{3{(^_^:^<^.!&@M!|%[^.*N 0%P.P.P.P.P.}^|^1^Y][-. !*}-|{-&F=s!-*-*-*-*-*-*-*s!_~F=-*.*0 P }.I.O.Q.Q.Q.P.M.T{)]2^3^4^5^6^7^8^9^0^a^b^c^d^e^f^g^h^i^j^k^e@&.%.O N ^+7{{@s r l^r{m^ ", +" P.R*i!X)n^Y~s!-*-*1{V&k~S.< i&2{G~3{4{5{1=6{9 a H I 7{M o^p^|{!@C!A!|%q^x&N)< ..n.P.>]:&D+N)b%r^m~8]o~0*_~s!-*-*-*-*-*-*-*-*-*-*-*s!_~F=5.E~9 ..&.I.P.O.s^v{t^u^v^w^x^y^z^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^&.g.#.N +.v ..s Y.r H ", +" P.[=!=P^!=!=={M!Q^R^w*S.p.< .*w W)Y&n{L~o{) A.p{H q{M@M P g.`.}.}.{+< [ ~ s{S^O'S&[-5]1^N)[-%@!*T^D!0*F=_~U^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!_~_~V&E~1=9 V^W^X^Y^Z^`^ /./+/@/#/$/%/&/&^*/=/-/;/>/,/'/)/!/~/O+g.P $.N >~v .. .s ", +" P.{/9{]/={^/<~X*X*X*t],#S&F=O{E~W)}*5{P{! ) 0 I~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%}^:&D+N)7]. !**+o~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!F=//(/_/:/(,('()(!(~({(](^(f*&.g.}~P ", +" Q.a+ v+p+M W)/(6]|%=+:=((,._(_(;!,#~ R^4{v h.`.[.k. +4.J.o+p+P.P.P.P.P.:(Z];{K~p=<(o~R^_~[(}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*_~}(m/|(1(2(3(4(5(6(7(8(9(0(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(:+f*&. ", +" 8+#+R+N 1=d~t(|%=+,.u(&@M!a&a&^=~ Y~j{N [+4.Q@C+p+2+P.P.P.P.[-v(. m~}-o~0*F=_~H~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*A~w*R]w(x(y(z(A(B(C(D(E(&/F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(`(`.[.<. ", +" $+P.4.g.H E~ _3~._,#a&3~q^+_;*x&|!*+@_Z.0%P.P.P.P.P.b%. !*}-*+o~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&*+#_$_%_&_*_=_-_;_>_,_'_)_!_~_{_]_^_/_(___:_<_P([_}_|_1_2_3_4_5_6_7_8_k.}. ", +" Q.O.I.F.N E~b%A!C!|%9_U&~ !@O'S&a)0_w M o+P.b%t(!*a_o~0*b_`]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&0*s!c_d_e_f_g_h_i_j_k_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z_A_B_C_D_E_F_G_[.2.<+ ", +" P.O.M.o+g.w =*H_U&I_J_a)K_:&D+S/7]8]. !*}-*+0*L_M_s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*N_p.p.O_P_Q_R_S_T_U_V_W_X_Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:>:,:':):!:~:}+I.-$4. ", +" P.P.P.P.p+N < =*{:5]K_N):(7]%@r^}-v&|{0*]:^:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*l~g*x~/:(:_:::<:[:}:|:1:2:3:4:5:6:7:8:9:0:a:b:c:d:e:f:g:h:i:j:k:I%M.L.K.-$4. ", +" P.Q.#+$+M. .Z*l:%@!*. m:v&m{n:F=[(H~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Y&C.o:p:q:r:s:t:u:v:w:x:y:z:A:B:B:C:[_D:E:F:G:H:I:J:K:L:M:N:O:2+O.++o+n. ", +" P.#+$+a+f@H P:_~^:Q:L_T&s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1=1=f*R:S:T:U:V:W:X:Y:Z:`: <.<+<.<@<#<*:$<%<&<*<=<-<;<><,[,['[)[x_![~[{[][H/^[/[([U~ ", +" P.P.O.O.M.&.1=w*y~_[:[<[[[}[|[1[2[3[4[5[6[7[8[ ", +" P.P.P.P.J.9[0[a[b[c[d[e[f[g[h[i[G_ ", +" |+j[k[l[m[n[o[p[q[r[s[ ", +" t[u[v[w[x[y[ ", +" z[A[B[ ", +" ", +" ", +" ", " ", " "}; diff --git a/src/Mod/Ship/Icons/SimStopIco.png b/src/Mod/Ship/Icons/SimStopIco.png new file mode 100644 index 0000000000000000000000000000000000000000..43a2121b8423528b40eba3569367a7103ebe9b6f GIT binary patch literal 13235 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 c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #C7C6C6", +"J) c #C5C6C6", +"K) c #C6C5C6", +"L) c #B2B3B3", +"M) c #949494", +"N) c #7E7E7E", +"O) c #171718", +"P) c #0D0E0D", +"Q) c #09090A", +"R) c #080909", +"S) c #070607", +"T) c #060504", +"U) c #020303", +"V) c #B3B3B4", +"W) c #666666", +"X) c #9F9F9F", +"Y) c #C4C3C4", +"Z) c #C2C2C3", +"`) c #C0C0BF", +" ! c #BCBBBB", +".! c #909191", +"+! c #141516", +"@! c #121211", +"#! c #0F0E0F", +"$! c #090908", +"%! c #070606", +"&! c #050605", +"*! c #020101", +"=! c #B2B3B2", +"-! c #4D4E4D", +";! c #929292", +">! c #C2C3C2", +",! c #C1C2C2", +"'! c #C2C1C2", +")! c #0B0C0B", +"!! c #030202", +"~! c #000100", +"{! c #B3B2B2", +"]! c #4B4C4B", +"^! c #464745", +"/! c #AFB0AF", +"(! c #ADAEAE", +"_! c #ABAAAA", +":! c #BFBFBE", +"~ c #565756", +",~ c #989998", +"'~ c #A0A1A0", +")~ c #A4A3A4", +"!~ c #B0B1B1", +"~~ c #B1B0B1", +"{~ c #B6B7B7", +"]~ c #787877", +"^~ c #757676", +"/~ c #747474", +"(~ c #8C8D8C", +"_~ c #9D9C9D", +":~ c #A8A8A7", +"<~ c #545353", +"[~ c #989797", +"}~ c #9F9F9E", +"|~ c #A0A1A1", +"1~ c #8C8C8B", +"2~ c #706F70", +"3~ c #B1B1B0", +"4~ c #B4B5B5", +"5~ c #777677", +"6~ c #727172", +"7~ c #6B6C6C", +"8~ c #80807F", +"9~ c #919090", +"0~ c #9E9E9F", +"a~ c #A4A5A4", +"b~ c #A6A7A6", +"c~ c #898888", +"d~ c #6E6E6D", +"e~ c #5F5F60", +"f~ c #797A7A", +"g~ c #7E7F7F", +"h~ c #777777", +"i~ c #616060", +"j~ c #663737", +"k~ c #FF0000", +"l~ c #932626", +"m~ c #4A4141", +"n~ c #626263", +"o~ c #767777", +"p~ c #767675", +"q~ c #717171", +"r~ c #6E6E6F", +"s~ c #6C6D6D", +"t~ c #6A6969", +"u~ c #676767", +"v~ c #656665", +"w~ c #676766", +"x~ c #727373", +"y~ c #5C5C5B", +"z~ c #6A6A6B", +"A~ c #7B7A7B", +"B~ c #626262", +"C~ c #C31515", +"D~ c #EA0707", +"E~ c #6B6A6B", +"F~ c #6C6B6B", +"G~ c #B1B1B2", +"H~ c #777676", +"I~ c #747575", +"J~ c #717271", +"K~ c #6D6E6D", +"L~ c #6B6B6A", +"M~ c #686767", +"N~ c #646363", +"O~ c #5D5D5C", +"P~ c #777776", +"Q~ c #878788", +"R~ c #969596", +"S~ c #9A9898", +"T~ c #9A9A99", +"U~ c #646463", +"V~ c #7B7C7C", +"W~ c #7B7C7B", +"X~ c #707170", +"Y~ c #575756", +"Z~ c #FFFFFF", +"`~ c #696968", +" { c #B0B0B1", +".{ c #ABACAB", +"+{ c #787777", +"@{ c #717170", +"#{ c #696869", +"${ c #666565", +"%{ c #646465", +"&{ c #636363", +"*{ c #605F5F", +"={ c #575758", +"-{ c #8B8A8B", +";{ c #949393", +">{ c #454343", +",{ c #D31010", +"'{ c #FE0100", +"){ c #FB0001", +"!{ c #F80101", +"~{ c #F40201", +"{{ c #F10102", +"]{ c #EE0202", +"^{ c #EB0303", +"/{ c #E70303", +"({ c #E40303", +"_{ c #E10403", +":{ c #DE0404", +"<{ c #932B2B", +"[{ c #666566", +"}{ c #A5A4A4", +"|{ c #969797", +"1{ c #787778", +"2{ c #636364", +"3{ c #606161", +"4{ c #5D5C5C", +"5{ c #585958", +"6{ c #5C5C5D", +"7{ c #868787", +"8{ c #7F807F", +"9{ c #FB0101", +"0{ c #F70101", +"a{ c #F40101", +"b{ c #F10101", +"c{ c #EA0302", +"d{ c #E80303", +"e{ c #E10404", +"f{ c #DD0404", +"g{ c #DA0404", +"h{ c #D70505", +"i{ c #A23A3A", +"j{ c #606160", +"k{ c #616261", +"l{ c #656566", +"m{ c #666767", +"n{ c #ADADAC", +"o{ c #A8A9A8", +"p{ c #9A9999", +"q{ c #6A6A69", +"r{ c #626261", +"s{ c #5F605F", +"t{ c #818081", +"u{ c #868685", +"v{ c #FE0001", +"w{ c #FA0000", +"x{ c #F40202", +"y{ c #F10202", +"z{ c #EA0303", +"A{ c #E10304", +"B{ c #DB0504", +"C{ c #D70405", +"D{ c #D40506", +"E{ c #D00506", +"F{ c #ED0A0A", +"G{ c #A33636", +"H{ c #655C5C", +"I{ c #636362", +"J{ c #7C7B7B", +"K{ c #939292", +"L{ c #8A8B8A", +"M{ c #676768", +"N{ c #848485", +"O{ c #818281", +"P{ c #7F7E7E", +"Q{ c #7B7B7A", +"R{ c #FD0000", +"S{ c #F40102", +"T{ c #F00202", +"U{ c #ED0202", +"V{ c #EB0203", +"W{ c #E40304", +"X{ c #DA0504", +"Y{ c #D10506", +"Z{ c #CD0606", +"`{ c #CA0607", +" ] c #A33535", +".] c #A5A6A6", +"+] c #9F9FA0", +"@] c #8B8C8B", +"#] c #818180", +"$] c #7E7D7E", +"%] c #7C7C7D", +"&] c #787978", +"*] c #636463", +"=] c #FD0001", +"-] c #FA0100", +";] c #E70203", +">] c #E30303", +",] c #D40505", +"'] c #D00605", +")] c #C70707", +"!] c #C40707", +"~] c #A23535", +"{] c #645B5B", +"]] c #616160", +"^] c #626161", +"/] c #7C7D7C", +"(] c #9B9A9A", +"_] c #666667", +":] c #818182", +"<] c #7D7E7D", +"[] c #757475", +"}] c #ED0203", +"|] c #E00404", +"1] c #DA0505", +"2] c #D60505", +"3] c #D40605", +"4] c #D00505", +"5] c #CA0706", +"6] c #C30707", +"7] c #C00707", +"8] c #BD0808", +"9] c #9F3737", +"0] c #5F6060", +"a] c #707171", +"b] c #807F80", +"c] c #8E8E8F", +"d] c #979696", +"e] c #959594", +"f] c #686869", +"g] c #7F8080", +"h] c #7E7E7F", +"i] c #7C7D7D", +"j] c #737374", +"k] c #F60101", +"l] c #F30101", +"m] c #E90302", +"n] c #E10303", +"o] c #DC0404", +"p] c #D90405", +"q] c #D00606", +"r] c #C60607", +"s] c #C00808", +"t] c #B90908", +"u] c #B60809", +"v] c #5F5F5E", +"w] c #747473", +"x] c #838384", +"y] c #908F90", +"z] c #919192", +"A] c #7D7C7D", +"B] c #818282", +"C] c #808081", +"D] c #7F7F80", +"E] c #FA0001", +"F] c #F00102", +"G] c #E60303", +"H] c #DA0405", +"I] c #D30605", +"J] c #C90607", +"K] c #C70706", +"L] c #BF0808", +"M] c #BA0908", +"N] c #B60909", +"O] c #B30909", +"P] c #B00A0A", +"Q] c #5B5A5C", +"R] c #5C5D5D", +"S] c #828181", +"T] c #5A595A", +"U] c #676667", +"V] c #8A8A8A", +"W] c #7A7A7B", +"X] c #F90101", +"Y] c #F30102", +"Z] c #E90203", +"`] c #E30403", +" ^ c #E00403", +".^ c #D90504", +"+^ c #D60405", +"@^ c #D30505", +"#^ c #CF0606", +"$^ c #CC0606", +"%^ c #C00807", +"&^ c #B90909", +"*^ c #B20909", +"=^ c #B0090A", +"-^ c #AC0A0A", +";^ c #9E9E9D", +">^ c #838282", +",^ c #767576", +"'^ c #868585", +")^ c #797A79", +"!^ c #737273", +"~^ c #FC0101", +"{^ c #EF0202", +"]^ c #C90707", +"^^ c #C60707", +"/^ c #C20807", +"(^ c #BC0808", +"_^ c #B90808", +":^ c #B3090A", +"<^ c #B00909", +"[^ c #A90A0A", +"}^ c #7F7E7F", +"|^ c #989897", +"1^ c #9C9D9C", +"2^ c #F90001", +"3^ c #EC0202", +"4^ c #E90303", +"5^ c #DF0404", +"6^ c #D50505", +"7^ c #CF0605", +"8^ c #C90706", +"9^ c #BF0708", +"0^ c #B60908", +"a^ c #AF0909", +"b^ c #A90B0A", +"c^ c #A60B0A", +"d^ c #9C9B9C", +"e^ c #9B9B9A", +"f^ c #F60102", +"g^ c #F20101", +"h^ c #E30304", +"i^ c #DC0504", +"j^ c #D90505", +"k^ c #C90606", +"l^ c #C30708", +"m^ c #B50908", +"n^ c #A90A0B", +"o^ c #A50B0B", +"p^ c #A30B0B", +"q^ c #838483", +"r^ c #8D8D8C", +"s^ c #959696", +"t^ c #959795", +"u^ c #757574", +"v^ c #656666", +"w^ c #7D7E7E", +"x^ c #737372", +"y^ c #D20505", +"z^ c #C20707", +"A^ c #B80808", +"B^ c #A80B0B", +"C^ c #A20B0B", +"D^ c #9F0B0B", +"E^ c #747374", +"F^ c #979796", +"G^ c #939392", +"H^ c #7D7D7E", +"I^ c #777878", +"J^ c #747373", +"K^ c #EC0203", +"L^ c #E50303", +"M^ c #E20404", +"N^ c #CB0606", +"O^ c #C80607", +"P^ c #C50707", +"Q^ c #B50909", +"R^ c #B20A0A", +"S^ c #AF0A09", +"T^ c #A50B0A", +"U^ c #9B0C0C", +"V^ c #7A7B7B", +"W^ c #929393", +"X^ c #7C7C7B", +"Y^ c #EB0302", +"Z^ c #E20403", +"`^ c #D80504", +" / c #CB0706", +"./ c #C80706", +"+/ c #C20708", +"@/ c #BB0808", +"#/ c #B90809", +"$/ c #B2090A", +"%/ c #AB0A0A", +"&/ c #A90B0B", +"*/ c #A50A0A", +"=/ c #A20C0C", +"-/ c #9E0C0C", +";/ c #980D0C", +">/ c #7A7B7A", +",/ c #929293", +"'/ c #898A8A", +")/ c #666665", +"!/ c #E50403", +"~/ c #E20304", +"{/ c #DF0304", +"]/ c #DB0505", +"^/ c #D20605", +"// c #CF0506", +"(/ c #CC0607", +"_/ c #BF0807", +":/ c #BB0908", +"( c #BA0808", +",( c #B70808", +"'( c #A70B0B", +")( c #9D0C0C", +"!( c #970C0C", +"~( c #870F0F", +"{( c #AB4343", +"]( c #BD0708", +"^( c #B00A09", +"/( c #AD0A09", +"(( c #AA0A0B", +"_( c #A00B0B", +":( c #9D0C0B", +"<( c #960C0C", +"[( c #940C0D", +"}( c #900D0D", +"|( c #870E0F", +"1( c #766D6D", +"2( c #AE4141", +"3( c #EF0C0C", +"4( c #C10708", +"5( c #AD0A0A", +"6( c #AA0B0B", +"7( c #A10C0B", +"8( c #930D0D", +"9( c #900D0E", +"0( c #8D0D0E", +"a( c #8A0F0E", +"b( c #B70908", +"c( c #A00B0C", +"d( c #8D0E0E", +"e( c #890E0E", +"f( c #AA0A0A", +"g( c #A70B0A", +"h( c #930C0D", +"i( c #8C0E0E", +"j( c #870E0E", +"k( c #A60B0B", +"l( c #A00C0C", +"m( c #990C0D", +"n( c #900E0D", +"o( c #860F0E", +"p( c #990C0C", +"q( c #8F0D0E", +"r( c #890E0F", +"s( c #860E0F", +"t( c #AF4242", +"u( c #EB0808", +"v( c #776E6E", +"w( c #962929", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ", +" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ", +" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ", +" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ", +" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ", +" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ", +" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ", +" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&+~!~~~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ", +" P.{~l*(&!*}-]~0*^~/~s![-(~_~=&E&=&=&=&y*:~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$<~s !*. a)C![~}~|~|~/#/#e*1*/#e*1~. 2~K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ", +" P.4~/&/&}-*+5~F=F=s!6~5.V&S.7~-*8~9~0~9&R*R*a~b~X)c~d~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r e~}*i&V&/~f~g~N):&[*D+h~W)i~) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~l~m~P.P.P.P.P.P.P.$+0 n~ ", +" P.Q!L!L!*+o~p~/~/~}=q~2~r~s~p.t~w u~v~w~x~S&M)}~Y!}~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M y~! W)z~5.^~A~[-h~-*S.)*B~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~D~l~m~P.P.P.O.P...i&E~F~ ", +" P.G~2*H!H~^~I~s!s!J~5.r~K~p.L~.*M~W)}*N~g*! m O~Q P~Q~R~F!S~T~F!|%. S.U~v I.a+$+#+Q.P.P.P.P.P.P.P.p.q~P~V~W~0*X~p.W)1=a Y~*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~k~D~l~m~P.M.g.W).*u~`~i& ", +" P. {.{| !@+{s!-*-*@{V&d~S.< i&#{w~${%{&{1=*{9 a H I ={M :.#{. -{E@;{;{M!>)}-q~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~'{){!{~{{{]{^{/{({_{:{Z~Z~k~k~<{`.! W)N%Y&[{u~w ", +" P.j*7.N!A*A*}{|{U&1{w*S.p.< .*w W)Y&2{B~3{) A.4{H 5{M@M P g.`.}.7@6{1!D+|%C!A!7{8{}-s!&{[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~'{9{0{a{b{]{c{d{({e{f{g{h{Z~Z~k~k~i{j{k{B~2{}*l{m{ ", +" P.n{o{l!e*}{=&T.V*V*x*p{;*h~q{u~W)}*&{r{! ) 0 y~r .v ]@N+&.`.-.1.3.4.n.<#}.s{6~t{u{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~v{w{!{x{y{]{z{/{({A{f{B{C{D{E{Z~Z~k~F{G{H{1=I{&{N%${ ", +" P.0!-+-+%@!*J{!@K{!=x*x*c+`!Q*e*L{*+M{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+N{S&O{:&P{=*Q{]~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~R{w{0{S{T{U{V{/{W{e{f{X{h{D{Y{Z{`{Z~Z~k~F{ ]H{1=1=n~N~ ", +" P.7.i*.]!*}-]~0*^~/~-*. x&,.X)_&'~+]n!e*@]}-M{c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)#]D+$]%]. f~*+&]h~-**]g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~=]-]0{a{y{U{c{;]>]_{f{X{C{,]']Z{`{)]!]Z~Z~k~F{~]{]! ]]^] ", +" P.=&]&]&}-*+5~F=F=s!6~5.V&S.7~5./]@]/=/#X*(]e*s%1~!*_]v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&:]:&;~<]V~Q{p=*+P~0*[]s!/~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~R{w{0{a{y{}]c{/{W{|]f{1]2]3]4]Z{5])]6]7]8]Z~Z~k~k~9]) e~0] ", +" P.b~Q*Q**+o~p~/~/~}=q~2~r~s~p.t~w u~v~w~a]b]c]%~/=d]6.e]A!b%f]M [+4.Q@C+p+2+P.P.P.P.a)[*g]h]i]b%!*}-*+P~F=j]-*-*-*s!/~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.C~k~k~Z~Z~k~R{w{k]l]y{U{m]/{W{n]o]p]h{D{q]Z{5]r]6]s]8]t]u]Z~Z~k~k~0 n v] ", +" P.c+_&_&H~^~I~s!s!J~5.r~K~p.L~.*M~W)}*N~g*! m O~${w]x]y]z].!&@M!|%A].*N 0%P.P.P.P.P.B]C]D]h][-. !*}-+{-&F=s!-*-*-*-*-*-*-*s!/~F=-*.*0 P }.I.O.Q.Q.Q.P.k~k~Z~Z~k~R{E]k]~{F]U{c{G]({|]f{H]h{I]q]Z{J]K]6]L]8]M]N]O]P]Z~k~k~Q]6{R] ", +" P.R*i!X)S]H~s!-*-*@{V&d~S.< i&#{w~${%{&{1=*{9 a H I ={M T]U]+{!@C!A!|%V]x&N)< ..n.P.O{:&D+N)b%W]f~&]h~0*/~s!-*-*-*-*-*-*-*-*-*-*-*s!/~F=5.u~9 ..&.I.P.k~k~Z~k~=]X]k]Y]T{U{Z]G]`] ^o].^+^@^#^$^5]r]6]%^8]&^N]*^=^-^Z~k~k~Y.r H ", +" P.[=!=;^!=!=T~M!>^,^w*S.p.< .*w W)Y&2{B~3{) A.4{H 5{M@M P g.`.}.}.{+< [ ~ 7{'^O'S&[-#]D]N)[-%@!*)^D!0*F=/~!^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!/~/~V&u~1=k~k~Z~~^E]k]l]{^U{m]G]>]|]o].^2]I]#^$^]^^^/^%^(^_^N]:^<^-^[^Z~k~k~.. .s ", +" P.}^;{|^T~1^_~X*X*X*(],#S&F=q{u~W)}*&{r{! ) 0 y~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B]:&D+N)%]. !**+h~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!k~k~Z~2^k]Y]T{3^4^G]>]5^o]H]6^I]7^$^8^^^6]9^8]_^0^:^a^-^b^c^Z~k~k~M Y~]+ ", +" P.8+v+1.W)D+A!,#/=1*d^e^e*s%s%,#O'F=M{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+;~[-. !*v&*+o~F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~f^g^T{U{Z]G]h^5^i^j^2]@^#^Z{k^^^l^L](^_^m^*^a^-^n^o^p^Z~k~k~O N M ", +" P.#+8+9+#+_+w b%q^r^=+e*s%%~|{s^t^;!!@u^v^c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+w^%]. !*v&+{0*F=/~x^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~Y]{^3^4^G]h^5^i^.^2]y^#^$^k^^^z^L](^A^m^*^a^-^B^o^C^D^Z~k~k~g.<~P ", +" Q.a+ v+p+M W)E^$]|%=+:=F^,.G^G^;!,#~ ,^%{v h.`.[.k. +4.J.o+p+P.P.P.P.P.H^i]V~A~p=I^h~,^/~J^}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~{^K^4^L^M^5^o]j^6^I]#^N^O^P^6]L](^A^Q^R^S^-^[^T^C^D^U^Z~k~k~:+f*&. ", +" 8+#+R+N 1=7~V^|%=+,.W^&@M!a&a&^=~ H~[{N [+4.Q@C+p+2+P.P.P.P.[-X^. f~}-h~0*F=/~x~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q~w*k~k~Z~Y^d{L^Z^5^o]`^6^y^#^ /./P^+/9^@/#/Q^$/a^%/&/*/=/-/U^;/Z~k~k~}.[.<. ", +" $+P.4.g.H u~>/1~,/,#a&1~V]'/;*x&|!*+)/Z.0%P.P.P.P.P.b%. !*}-*+h~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&*+k~k~Z~4^!/~/{/]/.^6^^///(/k^P^+/_/:/t]Q^*^(,(J/b/L/[/'(e/f/)($(!(M/Y/C/*(~(Z~Z~k~k~k~ ", +" P.#+a+a+P.k.s &{u~p.q~/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*{(k~k~Z~Z~ /K]!]@(](M]U/J/^(/((('(e/_(:($(<([(}(C/*(|(Z~Z~k~k~k~ ", +" Q. $+M.}...) W)S.s!/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~!]4(8]>(U/J/=^5(6('(e/7(:($(!(8(9(0(a(|(Z~Z~k~k~k~ ", +" Q.o+}.M 0 Y&V&F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~8]>(b(O]w//(6('(p^c()($(X/8(9(d(e(`/Z~Z~k~k~k~ ", +" #+P.n.k.&.H u~q~0*/~s!-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~b(O]^(5(f(g(e/_(:($(!(h(9(i(e(j(Z~Z~k~k~k~ ", +" Q.O.n.3.`.a .*s!F=/~s!-*-*-*-*-*-*-*-*{(k~k~Z~Z~P]5(f(k(p^l()(m(X/M/n(&(*(o(Z~Z~k~k~k~ ", +" P.O.M.n.`.9 p./~/~s!-*-*-*-*-*-*{(k~k~Z~Z~((k(p^c()(p(X/8(q(d(r(s(Z~Z~k~k~k~ ", +" P.P.O.O.M.&.1=w*/~s!s!-*-*1(2(3(k~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~k~k~k~ ", +" P.P.P.P.p+P N%5.s!s!1(t(u(k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~ ", +" P.Q.#+#+n...u~v(w(k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~ ", +" P.#+$+Q.P. ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index de44d60a8..aac0f3a13 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -42,7 +42,7 @@ class ShipWorkbench ( Workbench ): msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) else: - list = ["Ship_CreateSim", "Ship_RunSim"] + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) # Menu @@ -55,7 +55,7 @@ class ShipWorkbench ( Workbench ): except ImportError: pass else: - list = ["Ship_CreateSim", "Ship_RunSim"] + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 158be05a7..6aa83570c 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -44,6 +44,8 @@ nobase_data_DATA = \ Icons/SimCreateIco.xpm \ Icons/SimRunIco.png \ Icons/SimRunIco.xpm \ + Icons/SimStopIco.png \ + Icons/SimStopIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index a764a2b24..821bb01ac 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -144,6 +144,18 @@ class RunSim: ToolTip = str(Translator.translate('Run a simulation')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class StopSim: + def Activated(self): + import simRun + simRun.stop() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimStopIco.png" + MenuText = str(Translator.translate('Stop active simulation')) + ToolTip = str(Translator.translate('Stop active simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -154,3 +166,4 @@ FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) FreeCADGui.addCommand('Ship_GZ', GZ()) FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) FreeCADGui.addCommand('Ship_RunSim', RunSim()) +FreeCADGui.addCommand('Ship_StopSim', StopSim()) diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 1910f79f9..bb616dfdb 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -35,7 +35,18 @@ from FreeCAD import Part, Base, Vector # Ship design module from shipUtils import Paths, Translator, Math +class Singleton(type): + def __init__(cls, name, bases, dct): + cls.__instance = None + type.__init__(cls, name, bases, dct) + + def __call__(cls, *args, **kw): + if cls.__instance is None: + cls.__instance = type.__call__(cls, *args,**kw) + return cls.__instance + class FreeCADShipSimulation(threading.Thread): + __metaclass__ = Singleton def __init__ (self, device, endTime, output, FSmesh, waves): """ Thread constructor. @param device Device to use. @@ -45,6 +56,8 @@ class FreeCADShipSimulation(threading.Thread): @param waves Waves parameters (A,T,phi,heading) """ threading.Thread.__init__(self) + # Setup as stopped + self.active = False # Build OpenCL context and command queue self.device = device self.context = cl.Context(devices=[self.device]) @@ -58,8 +71,25 @@ class FreeCADShipSimulation(threading.Thread): def run(self): """ Runs the simulation. """ + self.active = True # Perform work here - print("Im thread, Im running...") - time.sleep(2) - # ... - print("Im thread, I end!") + while self.active: + print("Im thread, Im running...") + time.sleep(1) + # ... + print("Im thread, step done!") + # Set thread as stopped (and prepare it to restarting) + self.active = False + threading.Event().set() + threading.Thread.__init__(self) + + def stop(self): + """ Call to stop execution. + """ + self.active = False + + def isRunning(self): + """ Report thread state + @return True if thread is running, False otherwise. + """ + return self.active diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index 0a8762617..2e41ff15a 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -33,6 +33,8 @@ import SimInstance from shipUtils import Paths, Translator from Simulation import FreeCADShipSimulation as Sim +import time + class TaskPanel: def __init__(self): self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" @@ -184,3 +186,18 @@ def createTask(): Gui.Control.closeDialog(panel) return None return panel + +def stopSimulation(): + try: + simulator = Sim() + if not simulator.isRunning(): + msg = Translator.translate("Simulation already stopped\n") + App.Console.PrintWarning(msg) + return + except: + msg = Translator.translate("Any active simulation to stop!\n") + App.Console.PrintError(msg) + return + simulator.stop() + msg = Translator.translate("Simulation will stop at the end of actual iteration\n") + App.Console.PrintMessage(msg) diff --git a/src/Mod/Ship/simRun/__init__.py b/src/Mod/Ship/simRun/__init__.py index cbfb57d75..64c597c02 100644 --- a/src/Mod/Ship/simRun/__init__.py +++ b/src/Mod/Ship/simRun/__init__.py @@ -34,3 +34,7 @@ import TaskPanel def load(): """ Loads the tool """ TaskPanel.createTask() + +def stop(): + """ Stops the simulation """ + TaskPanel.stopSimulation() From 1f429e80eb240c6009d7db2ded923b915e7b7432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 8 Jul 2012 14:30:00 +0200 Subject: [PATCH 467/517] Fixed weights and simulation tools menus --- src/Mod/Ship/InitGui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index aac0f3a13..925c5e12c 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -49,13 +49,13 @@ class ShipWorkbench ( Workbench ): list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Weights",list) + self.appendMenu("Weights",list) try: import pyopencl except ImportError: pass else: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] - self.appendToolbar("Simulation",list) + self.appendMenu("Simulation",list) Gui.addWorkbench(ShipWorkbench()) From 909a8d064998ddd8d42b5664883b2429371bce42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 8 Jul 2012 16:04:16 +0200 Subject: [PATCH 468/517] Imported numpy, and added as dependency --- src/Mod/Ship/InitGui.py | 18 ++++++++++++------ src/Mod/Ship/simRun/Simulation.py | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 925c5e12c..7152e0342 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -36,12 +36,22 @@ class ShipWorkbench ( Workbench ): self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) + # Simulation stuff only if pyOpenCL & numpy are present + hasOpenCL = True + hasNumpy = True try: import pyopencl except ImportError: + hasOpenCL = False msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) - else: + try: + import numpy + except ImportError: + hasNumpy = False + msg = Translator.translate("numpy not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + if hasOpenCL and hasNumpy: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) @@ -50,11 +60,7 @@ class ShipWorkbench ( Workbench ): self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendMenu("Weights",list) - try: - import pyopencl - except ImportError: - pass - else: + if hasOpenCL and hasNumpy: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendMenu("Simulation",list) diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index bb616dfdb..0767342cb 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -27,6 +27,7 @@ import threading # pyOpenCL import pyopencl as cl +import numpy as np # FreeCAD import FreeCAD,FreeCADGui From c1e355c2cdf97e10c101fe81d6e3a3f3a24b5302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 16 Jul 2012 14:57:26 +0200 Subject: [PATCH 469/517] Fixed KB & Cf hydrostatics computation bug --- src/Mod/Ship/shipHydrostatics/Tools.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 58fbb3d15..012996144 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -279,9 +279,9 @@ def FloatingArea(ship, draft, trim): # Valid face, compute area area = area + f.Area maxX = max(maxX, faceBounds.XMax) - minX = max(minX, faceBounds.XMin) + minX = min(minX, faceBounds.XMin) maxY = max(maxY, faceBounds.YMax) - minY = max(minY, faceBounds.YMin) + minY = min(minY, faceBounds.YMin) # Destroy last object generated App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) dx = maxX - minX @@ -416,7 +416,7 @@ class Point: self.wet = wet self.farea = farea[0] self.mom = mom - self.KBt = dispData[1].y + self.KBt = dispData[1].z self.BMt = bm self.Cb = dispData[2] self.Cf = farea[1] From a10ee753e2babc4e406ea682754afdbd5a7b7bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 16 Jul 2012 15:35:12 +0200 Subject: [PATCH 470/517] Fixed drafts list onto hydrostatics computation --- src/Mod/Ship/shipHydrostatics/TaskPanel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.py b/src/Mod/Ship/shipHydrostatics/TaskPanel.py index 4ff23dc45..54b5c7623 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.py +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.py @@ -44,7 +44,7 @@ class TaskPanel: self.save() draft = self.form.minDraft.value() drafts = [draft] - dDraft = (self.form.maxDraft.value() - self.form.minDraft.value())/self.form.nDraft.value() + dDraft = (self.form.maxDraft.value() - self.form.minDraft.value())/(self.form.nDraft.value()-1) for i in range(1,self.form.nDraft.value()): draft = draft + dDraft drafts.append(draft) From ec5fb278b0e86e88908c68515dc66848168b575b Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Wed, 25 Jul 2012 19:12:19 +0200 Subject: [PATCH 471/517] Fixed BM hydrostatic computation (wrong CoG coordinates) --- src/Mod/Ship/shipHydrostatics/Tools.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 012996144..d329fc07c 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -306,13 +306,13 @@ def BMT(ship, draft, trim=0.0): B1 = displacement(ship,draft,roll,trim,0.0)[1] # * M # / \ - # / \ BM ==|> BM = (BB/2) / tan(alpha/2) + # / \ BM ==|> BM = (BB/2) / sin(alpha/2) # / \ # *-------* # BB - BB = [B1.x - B0.x, B1.y - B0.y] + BB = [B1.y - B0.y, B1.z - B0.z] BB = math.sqrt(BB[0]*BB[0] + BB[1]*BB[1]) - BM = BM + 0.5*BB/math.tan(math.radians(0.5*roll)) / nRoll # nRoll is the weight function + BM = BM + 0.5*BB/math.sin(math.radians(0.5*roll)) / nRoll # nRoll is the weight function return BM def mainFrameCoeff(ship, draft): From 91a9ea7fa69fd14ac0025997ddef35c951492ac2 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Wed, 25 Jul 2012 19:13:52 +0200 Subject: [PATCH 472/517] Fixed 0.0 division when only 1 Hydrostatic point is requested. Now 2 points must be selected at least --- src/Mod/Ship/Icons/SimCreateIco.xcf | Bin 0 -> 51656 bytes src/Mod/Ship/shipHydrostatics/TaskPanel.ui | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/Mod/Ship/Icons/SimCreateIco.xcf diff --git a/src/Mod/Ship/Icons/SimCreateIco.xcf b/src/Mod/Ship/Icons/SimCreateIco.xcf new file mode 100644 index 0000000000000000000000000000000000000000..6dcf3fdd0ba1fa700091f4774f887b087a237bdc GIT binary patch literal 51656 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 HzwEyOS-3zg literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui index 3c3d88a58..23367df69 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui @@ -190,7 +190,7 @@ - 1 + 2 9999 From 7a05d3026907c3728e605c7b4b7c4774564775b9 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Wed, 25 Jul 2012 19:28:13 +0200 Subject: [PATCH 473/517] Fixed intialization error message. --- src/Mod/Ship/InitGui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 7152e0342..77298ad84 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -31,6 +31,7 @@ class ShipWorkbench ( Workbench ): ToolTip = str(Translator.translate("Ship design")) def Initialize(self): + from shipUtils import Translator # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) From 94c8489d0f84d978081d29ea934296979dc0221c Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Fri, 27 Jul 2012 10:27:21 +0200 Subject: [PATCH 474/517] Fixed Part module import error --- src/Mod/Ship/Instance.py | 3 ++- src/Mod/Ship/SimInstance.py | 3 ++- src/Mod/Ship/TankInstance.py | 3 ++- src/Mod/Ship/shipAreasCurve/Plot.py | 3 +-- src/Mod/Ship/shipAreasCurve/Preview.py | 2 +- src/Mod/Ship/shipCreateShip/Preview.py | 2 +- src/Mod/Ship/shipHydrostatics/Plot.py | 3 ++- src/Mod/Ship/shipHydrostatics/Tools.py | 3 ++- src/Mod/Ship/shipOutlineDraw/Plot.py | 3 ++- src/Mod/Ship/shipOutlineDraw/Preview.py | 3 ++- src/Mod/Ship/simRun/Simulation.py | 3 ++- src/Mod/Ship/tankCreateTank/TaskPanel.py | 1 + src/Mod/Ship/tankGZ/Plot.py | 4 ++-- src/Mod/Ship/tankWeights/Preview.py | 2 +- 14 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index ca601ddaa..40fd10992 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -30,7 +30,8 @@ from pivy import coin # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py index 193c54823..3d047e3a1 100644 --- a/src/Mod/Ship/SimInstance.py +++ b/src/Mod/Ship/SimInstance.py @@ -31,7 +31,8 @@ from pivy import coin # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py index e35b7f520..48a126971 100644 --- a/src/Mod/Ship/TankInstance.py +++ b/src/Mod/Ship/TankInstance.py @@ -29,7 +29,8 @@ from pivy import coin # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/shipAreasCurve/Plot.py b/src/Mod/Ship/shipAreasCurve/Plot.py index 6e0fdb536..61b1f3a20 100644 --- a/src/Mod/Ship/shipAreasCurve/Plot.py +++ b/src/Mod/Ship/shipAreasCurve/Plot.py @@ -24,8 +24,7 @@ import os # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base -from FreeCAD import Image, ImageGui +from FreeCAD import Base, Image, ImageGui # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/shipAreasCurve/Preview.py b/src/Mod/Ship/shipAreasCurve/Preview.py index 8f2d7eba1..6af80580d 100644 --- a/src/Mod/Ship/shipAreasCurve/Preview.py +++ b/src/Mod/Ship/shipAreasCurve/Preview.py @@ -24,7 +24,7 @@ # FreeCAD modules import FreeCAD,FreeCADGui from FreeCAD import Base -from FreeCAD import Part +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/shipCreateShip/Preview.py b/src/Mod/Ship/shipCreateShip/Preview.py index b4d9e39b9..72f601432 100644 --- a/src/Mod/Ship/shipCreateShip/Preview.py +++ b/src/Mod/Ship/shipCreateShip/Preview.py @@ -24,7 +24,7 @@ # FreeCAD modules import FreeCAD,FreeCADGui from FreeCAD import Base -from FreeCAD import Part +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/shipHydrostatics/Plot.py b/src/Mod/Ship/shipHydrostatics/Plot.py index d953b5ddf..011b45c74 100644 --- a/src/Mod/Ship/shipHydrostatics/Plot.py +++ b/src/Mod/Ship/shipHydrostatics/Plot.py @@ -25,8 +25,9 @@ import os import math # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector from FreeCAD import Image, ImageGui +import Part # FreeCADShip modules from shipUtils import Paths, Translator import Tools diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index d329fc07c..a42c9b774 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -23,7 +23,8 @@ import math # FreeCAD modules -from FreeCAD import Vector, Part +from FreeCAD import Vector +import Part import FreeCAD as App import FreeCADGui as Gui # Module diff --git a/src/Mod/Ship/shipOutlineDraw/Plot.py b/src/Mod/Ship/shipOutlineDraw/Plot.py index 7d21b2fbc..682c15678 100644 --- a/src/Mod/Ship/shipOutlineDraw/Plot.py +++ b/src/Mod/Ship/shipOutlineDraw/Plot.py @@ -23,7 +23,8 @@ # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Base, Part, Vector +from FreeCAD import Base, Vector +import Part # FreeCADShip modules from shipUtils import Paths, Translator from surfUtils import Geometry diff --git a/src/Mod/Ship/shipOutlineDraw/Preview.py b/src/Mod/Ship/shipOutlineDraw/Preview.py index 2b323b47e..a1ccb2012 100644 --- a/src/Mod/Ship/shipOutlineDraw/Preview.py +++ b/src/Mod/Ship/shipOutlineDraw/Preview.py @@ -23,7 +23,8 @@ # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Base, Part, Vector +from FreeCAD import Base, Vector +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 0767342cb..32b570757 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -31,7 +31,8 @@ import numpy as np # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py index 4eddbd03e..15305ca90 100644 --- a/src/Mod/Ship/tankCreateTank/TaskPanel.py +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py @@ -24,6 +24,7 @@ # FreeCAD modules import FreeCAD as App import FreeCADGui as Gui +import Part # Qt library from PyQt4 import QtGui,QtCore # Module diff --git a/src/Mod/Ship/tankGZ/Plot.py b/src/Mod/Ship/tankGZ/Plot.py index 1ce11d344..09db5345b 100644 --- a/src/Mod/Ship/tankGZ/Plot.py +++ b/src/Mod/Ship/tankGZ/Plot.py @@ -24,8 +24,8 @@ import os # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base -from FreeCAD import Image, ImageGui +from FreeCAD import Base, Image, ImageGui +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/tankWeights/Preview.py b/src/Mod/Ship/tankWeights/Preview.py index 571155bb9..23bb7fae6 100644 --- a/src/Mod/Ship/tankWeights/Preview.py +++ b/src/Mod/Ship/tankWeights/Preview.py @@ -24,7 +24,7 @@ # FreeCAD modules import FreeCAD,FreeCADGui from FreeCAD import Base -from FreeCAD import Part +import Part # FreeCADShip modules from shipUtils import Paths, Translator From c5ec34318b0f5560f8ac5929961d16c5a65542b0 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Mon, 30 Jul 2012 14:30:13 +0200 Subject: [PATCH 475/517] Implemented initialization stage --- src/Mod/Ship/CMakeLists.txt | 4 + src/Mod/Ship/Makefile.am | 7 +- src/Mod/Ship/OpenCL/simInit.cl | 99 ++++++++++ src/Mod/Ship/shipUtils/Paths.pyc | Bin 0 -> 1379 bytes src/Mod/Ship/shipUtils/__init__.pyc | Bin 0 -> 159 bytes src/Mod/Ship/simRun/Sim/Utils.py | 57 ++++++ src/Mod/Ship/simRun/Sim/Utils.py~ | 58 ++++++ src/Mod/Ship/simRun/Sim/__init__.py | 24 +++ src/Mod/Ship/simRun/Sim/__init__.py~ | 57 ++++++ src/Mod/Ship/simRun/Sim/initialization.py | 113 ++++++++++++ src/Mod/Ship/simRun/Sim/initialization.py~ | 117 ++++++++++++ src/Mod/Ship/simRun/Simulation.py | 202 +++++++++++---------- src/Mod/Ship/simRun/Simulation.py~ | 107 +++++++++++ 13 files changed, 747 insertions(+), 98 deletions(-) create mode 100644 src/Mod/Ship/OpenCL/simInit.cl create mode 100644 src/Mod/Ship/shipUtils/Paths.pyc create mode 100644 src/Mod/Ship/shipUtils/__init__.pyc create mode 100644 src/Mod/Ship/simRun/Sim/Utils.py create mode 100644 src/Mod/Ship/simRun/Sim/Utils.py~ create mode 100644 src/Mod/Ship/simRun/Sim/__init__.py create mode 100644 src/Mod/Ship/simRun/Sim/__init__.py~ create mode 100644 src/Mod/Ship/simRun/Sim/initialization.py create mode 100644 src/Mod/Ship/simRun/Sim/initialization.py~ create mode 100644 src/Mod/Ship/simRun/Simulation.py~ diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index ef3d635a5..5f0314abd 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -56,6 +56,7 @@ SET(ShipExamples_SRCS Examples/s60_katamaran.fcstd Examples/wigley.fcstd Examples/wigley_katamaran.fcstd + OpenCL/simInit.cl ) SOURCE_GROUP("shipexamples" FILES ${ShipExamples_SRCS}) @@ -144,6 +145,9 @@ SET(SimRun_SRCS simRun/Simulation.py simRun/TaskPanel.py simRun/TaskPanel.ui + simRun/Sim/__init__.py + simRun/Sim/initialization.py + simRun/Sim/Utils.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 6aa83570c..084e9a877 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -53,6 +53,7 @@ nobase_data_DATA = \ Examples/s60_katamaran.fcstd \ Examples/wigley.fcstd \ Examples/wigley_katamaran.fcstd \ + OpenCL/simInit.cl \ shipLoadExample/__init__.py \ shipLoadExample/TaskPanel.py \ shipLoadExample/TaskPanel.ui \ @@ -96,7 +97,11 @@ nobase_data_DATA = \ simRun/__init__.py \ simRun/Simulation.py \ simRun/TaskPanel.py \ - simRun/TaskPanel.ui + simRun/TaskPanel.ui \ + simRun/Sim/__init__.py \ + simRun/Sim/initialization.py + simRun/Sim/Utils.py + CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/OpenCL/simInit.cl b/src/Mod/Ship/OpenCL/simInit.cl new file mode 100644 index 000000000..7bb8a3c2f --- /dev/null +++ b/src/Mod/Ship/OpenCL/simInit.cl @@ -0,0 +1,99 @@ +/* + * ----------------------------------------------------------------------- + * + * This source file is part of AQUA-gpusph. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA + * + * + * Authors: + * - Cercos Pita, Jose Luis + * - Miguel Gonzalez, Leo + * - Saelices, Jaime + * - Souto Iglesias, Antonio + * + * ----------------------------------------------------------------------- + */ + +#ifndef M_PI + #define M_PI 3,14159265359 +#endif + +#ifdef _g + #error '_g' is already defined. +#endif +#define _g __global + +#ifdef _l + #error '_l' is already defined. +#endif +#define _l __local + +#ifdef _c + #error '_c' is already defined. +#endif +#define _c __constant + +#ifndef _grav + #define _grav 9.81 +#endif + +/** Setup velocity and acceleration potential for initial time step. + * @param pos Cell position. + * @param v Cell velocity. + * @param f Cell acceleration. + * @param waves Waves (A,T,phase,heading) + * @param phi Velocity potential. + * @param Phi Acceleration potential + * @param N Number of cell elements at each direction. + * @param n Number of waves. + */ +__kernel void FS(_g float4* pos, _g float4* v, _g float4* f, + _g float4* waves, _g float* phi, _g float* Phi, + uint2 N, uint n) +{ + // find position in global arrays + unsigned int i = get_global_id(0); + unsigned int j = get_global_id(1); + if( (i >= N.x) || (j >= N.y) ) + return; + unsigned int id = i*N.y + j; + + // ---- | ------------------------ | ---- + // ---- V ---- Your code here ---- V ---- + + unsigned int w; + for(w=0;wDcHh@xzwJ zvtJ+3pH_PR5LF#i)k!%qXYh0D*ux%k95J3dW8u(Ed~z!N`3G=0vc_}{y1ogyQx=2# z^4NIPO;kD`;loLN1A@8Aop)_Ed4`7#@0Qa0HdG{wJA@PuQAk{w3X3ggCiSKJHbAm8 z$zuM#Wx?4rUKANSRC@07v5TdF-D>7rh*USvsu$QfR#CXEw$+x30-272W;vZrY%rZ$ zApy^Y;g+i12~7V8b)J@(2e)_!@Q+KiV@P7zw>f{00jwnk=U&j@6jB(2v4f4{0a3W2 z(gg&ZTS(f6fX)FI^BEMqQ8d$Z^_;aMfDR$;vB^Y~r_gCx%7HMRJ@260 zy%TU(Y#1q;=QdFxkk5I)B4b`;=1S=DIT=sQp|z#0t?TgP44hGp=Jzt2M@VyNJWu8b z030FX8>rkC7FuhlNHtW5-%GUtxy|h9$yH)L&oANeH1F|5g-bm)^q9@7dPVw=*Nd^) StMAu`XOM-|J3+J6Z2SeBBtl;R literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/shipUtils/__init__.pyc b/src/Mod/Ship/shipUtils/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..711c3c8e986a40fc9e96644870d2ee3a44185970 GIT binary patch literal 159 zcmZSn%**v&T_7Nt0SXv_v;zR5ttd4$IWa{aMC*bW#YM^bzWFKo!5Nta`o%yZv?Md9SU)~KGcU6wK3=b& XvV;R@m`!eeN@-529mvXJAZ7pnse&aU literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/simRun/Sim/Utils.py b/src/Mod/Ship/simRun/Sim/Utils.py new file mode 100644 index 000000000..1d085b9ec --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/Utils.py @@ -0,0 +1,57 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD +from shipUtils import Paths + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# Standard +import math + +def loadProgram(context, file): + """ Loads a file and comnpile it. + @param context OpenCL context where apply. + @param file File to load and compile. + @return Ready to use OpenCL program. + """ + f = open(file, 'r') + str = "".join(f.readlines()) + return cl.Program(context, str).build() + +def clPath(): + """ Gets the OpenCL kernels path + @return OpenCL kernels path + """ + path = Paths.modulePath() + "/OpenCL" + return path + +def globalSize(n): + """ Compute global size from amount of data. + @param n Amount of data. + @return global size. + """ + localSize = 256.0 + return int(math.ceil(n/localSize)*localSize) diff --git a/src/Mod/Ship/simRun/Sim/Utils.py~ b/src/Mod/Ship/simRun/Sim/Utils.py~ new file mode 100644 index 000000000..7c37bfab2 --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/Utils.py~ @@ -0,0 +1,58 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD +from shipUtils import Paths + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# Standard +import math + +def loadProgram(context, file): + """ Loads a file and comnpile it. + @param context OpenCL context where apply. + @param file File to load and compile. + @return Ready to use OpenCL program. + """ + f = open(file, 'r') + str = "".join(f.readlines()) + print(str) + return cl.Program(context, str).build() + +def clPath(): + """ Gets the OpenCL kernels path + @return OpenCL kernels path + """ + path = Paths.modulePath() + "/OpenCL" + return path + +def globalSize(n): + """ Compute global size from amount of data. + @param n Amount of data. + @return global size. + """ + localSize = 256.0 + return int(math.ceil(n/localSize)*localSize) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py new file mode 100644 index 000000000..2fcb8e495 --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -0,0 +1,24 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import initialization, Utils \ No newline at end of file diff --git a/src/Mod/Ship/simRun/Sim/__init__.py~ b/src/Mod/Ship/simRun/Sim/__init__.py~ new file mode 100644 index 000000000..30db4bcdb --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/__init__.py~ @@ -0,0 +1,57 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD +from shipUtils import Paths + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# Standard +import math + +def loadProgram(context, file): + """ Loads a file and comnpile it. + @param context OpenCL context where apply. + @param file File to load and compile. + @return Ready to use OpenCL program. + """ + f = open(file, 'r') + str = "".join(f.readlines()) + return cl.Program(context, str).build() + +def clPath(): + """ Gets the OpenCL kernels path + @return OpenCL kernels path + """ + path = Paths.modulePath() + "/OpenCL" + return path + +def globalSize(n): + """ Compute global size from amount of data. + @param n Amount of data. + @return global size. + """ + localSize = 256 + return int(math.ceil(n/localSize)) diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py new file mode 100644 index 000000000..90bdf5bfa --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -0,0 +1,113 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# Simulation stuff +from Utils import * + +# pyOpenCL +import pyopencl as cl +import numpy as np + +class perform: + def __init__(self, context, queue, FSmesh, waves): + """ Constructor, includes program loading. + @param context OpenCL context where apply. + @param queue OpenCL command queue. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + self.context = context + self.queue = queue + self.program = loadProgram(context, clPath() + "/simInit.cl") + self.loadData(FSmesh, waves) + self.execute() + + def loadData(self, FSmesh, waves): + """ Convert data to numpy format, and create OpenCL + buffers. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + mf = cl.mem_flags + nx = len(FSmesh) + ny = len(FSmesh[0]) + nW = len(waves) + # Mesh data + p = np.ndarray((nx*ny, 4), dtype=np.float32) + n = np.ndarray((nx*ny, 4), dtype=np.float32) + a = np.ndarray((nx*ny, 1), dtype=np.float32) + for i in range(0, nx): + for j in range(0, ny): + id = i*ny + j + pos = FSmesh[i][j].pos + normal = FSmesh[i][j].normal + area = FSmesh[i][j].area + p[id,0] = pos.x + p[id,1] = pos.y + p[id,2] = pos.z + p[id,3] = 1. + n[id,0] = normal.x + n[id,1] = normal.y + n[id,2] = normal.z + n[id,3] = 0. + a[id,0] = area + p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p) + n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n) + a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a) + v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \ + 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi} + # Waves data + w = np.ndarray((nW, 4), dtype=np.float32) + for i in range(0,nW): + w[i,0] = waves[i][0] + w[i,1] = waves[i][1] + w[i,2] = waves[i][2] + w[i,3] = waves[i][3] + w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w) + self.waves = {'N':nW, 'data':w_cl} + # Ensure that all data has been written + self.queue.finish() + + def execute(self): + """ Compute initial conditions. """ + # Global size computation + N = np.ndarray((2, 1), dtype=np.uint32) + N[0] = self.fs['Nx'] + N[1] = self.fs['Ny'] + n = np.uint32(self.waves['N']) + gSize = (globalSize(N[0]),globalSize(N[1]),) + # Kernel arguments + kernelargs = (self.fs['pos'], + self.fs['vel'], + self.fs['acc'], + self.waves['data'], + self.fs['velPot'], + self.fs['accPot'], + N, n) + # Kernel launch + self.program.FS(self.queue, gSize, None, *(kernelargs)) + self.queue.finish() diff --git a/src/Mod/Ship/simRun/Sim/initialization.py~ b/src/Mod/Ship/simRun/Sim/initialization.py~ new file mode 100644 index 000000000..63cc9f3aa --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/initialization.py~ @@ -0,0 +1,117 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# Simulation stuff +from Utils import * + +# pyOpenCL +import pyopencl as cl +import numpy as np + +class perform: + def __init__(self, context, queue, FSmesh, waves): + """ Constructor, includes program loading. + @param context OpenCL context where apply. + @param queue OpenCL command queue. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + self.context = context + self.queue = queue + self.program = loadProgram(context, clPath() + "/simInit.cl") + self.loadData(FSmesh, waves) + self.execute() + + def loadData(self, FSmesh, waves): + """ Convert data to numpy format, and create OpenCL + buffers. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + mf = cl.mem_flags + nx = len(FSmesh) + ny = len(FSmesh[0]) + nW = len(waves) + # Mesh data + p = np.ndarray((nx*ny, 4), dtype=np.float32) + n = np.ndarray((nx*ny, 4), dtype=np.float32) + a = np.ndarray((nx*ny, 1), dtype=np.float32) + for i in range(0, nx): + for j in range(0, ny): + id = i*ny + j + pos = FSmesh[i][j].pos + normal = FSmesh[i][j].normal + area = FSmesh[i][j].area + p[id,0] = pos.x + p[id,1] = pos.y + p[id,2] = pos.z + p[id,3] = 1. + n[id,0] = normal.x + n[id,1] = normal.y + n[id,2] = normal.z + n[id,3] = 0. + a[id,0] = area + p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p) + n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n) + a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a) + v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \ + 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi} + # Waves data + w = np.ndarray((nW, 4), dtype=np.float32) + for i in range(0,nW): + w[i,0] = waves[i][0] + w[i,1] = waves[i][1] + w[i,2] = waves[i][2] + w[i,3] = waves[i][3] + w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w) + self.waves = {'N':nW, 'data':w_cl} + # Ensure that all data has been written + self.queue.finish() + + def execute(self): + """ Compute initial conditions. """ + # Global size computation + N = np.ndarray((2, 1), dtype=np.uint32) + N[0] = self.fs['Nx'] + N[1] = self.fs['Ny'] + n = np.uint32(self.waves['N']) + gSize = (globalSize(N[0]),globalSize(N[1]),) + print(gSize) + # Kernel arguments + kernelargs = (self.fs['pos'], + self.fs['vel'], + self.fs['acc'], + self.waves['data'], + self.fs['velPot'], + self.fs['accPot'], + N, n) + print('Launching...') + # Kernel launch + self.program.FS(self.queue, gSize, None, *(kernelargs)) + print('Waiting...') + self.queue.finish() + print('OK!') diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 32b570757..6ffd9fe0c 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -1,97 +1,105 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -import time -from math import * -import threading - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# FreeCAD -import FreeCAD,FreeCADGui -from FreeCAD import Base, Vector -import Part - -# Ship design module -from shipUtils import Paths, Translator, Math - -class Singleton(type): - def __init__(cls, name, bases, dct): - cls.__instance = None - type.__init__(cls, name, bases, dct) - - def __call__(cls, *args, **kw): - if cls.__instance is None: - cls.__instance = type.__call__(cls, *args,**kw) - return cls.__instance - -class FreeCADShipSimulation(threading.Thread): - __metaclass__ = Singleton - def __init__ (self, device, endTime, output, FSmesh, waves): - """ Thread constructor. - @param device Device to use. - @param endTime Maximum simulation time. - @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. - @param FSmesh Free surface mesh faces. - @param waves Waves parameters (A,T,phi,heading) - """ - threading.Thread.__init__(self) - # Setup as stopped - self.active = False - # Build OpenCL context and command queue - self.device = device - self.context = cl.Context(devices=[self.device]) - self.queue = cl.CommandQueue(self.context) - # Storage data - self.endTime = endTime - self.output = output - self.FSmesh = FSmesh - self.waves = waves - - def run(self): - """ Runs the simulation. - """ - self.active = True - # Perform work here - while self.active: - print("Im thread, Im running...") - time.sleep(1) - # ... - print("Im thread, step done!") - # Set thread as stopped (and prepare it to restarting) - self.active = False - threading.Event().set() - threading.Thread.__init__(self) - - def stop(self): - """ Call to stop execution. - """ - self.active = False - - def isRunning(self): - """ Report thread state - @return True if thread is running, False otherwise. - """ - return self.active +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * +import threading + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Base, Vector +import Part + +# Simulation stuff +from Sim import initialization + +# Ship design module +from shipUtils import Paths, Translator, Math + +class Singleton(type): + def __init__(cls, name, bases, dct): + cls.__instance = None + type.__init__(cls, name, bases, dct) + + def __call__(cls, *args, **kw): + if cls.__instance is None: + cls.__instance = type.__call__(cls, *args,**kw) + return cls.__instance + +class FreeCADShipSimulation(threading.Thread): + __metaclass__ = Singleton + def __init__ (self, device, endTime, output, FSmesh, waves): + """ Thread constructor. + @param device Device to use. + @param endTime Maximum simulation time. + @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param FSmesh Free surface mesh faces. + @param waves Waves parameters (A,T,phi,heading) + """ + threading.Thread.__init__(self) + # Setup as stopped + self.active = False + # Build OpenCL context and command queue + self.device = device + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) + # Storage data + self.endTime = endTime + self.output = output + self.FSmesh = FSmesh + self.waves = waves + + def run(self): + """ Runs the simulation. + """ + self.active = True + # Perform work here + msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") + FreeCAD.Console.PrintMessage(msg) + init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) + msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") + FreeCAD.Console.PrintMessage(msg) + while self.active: + print("Im thread, Im running...") + time.sleep(1) + # ... + print("Im thread, step done!") + # Set thread as stopped (and prepare it to restarting) + self.active = False + threading.Event().set() + threading.Thread.__init__(self) + + def stop(self): + """ Call to stop execution. + """ + self.active = False + + def isRunning(self): + """ Report thread state + @return True if thread is running, False otherwise. + """ + return self.active diff --git a/src/Mod/Ship/simRun/Simulation.py~ b/src/Mod/Ship/simRun/Simulation.py~ new file mode 100644 index 000000000..03a443779 --- /dev/null +++ b/src/Mod/Ship/simRun/Simulation.py~ @@ -0,0 +1,107 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * +import threading + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Base, Vector +import Part + +# Simulation stuff +from Sim import initialization + +# Ship design module +from shipUtils import Paths, Translator, Math + +class Singleton(type): + def __init__(cls, name, bases, dct): + cls.__instance = None + type.__init__(cls, name, bases, dct) + + def __call__(cls, *args, **kw): + if cls.__instance is None: + cls.__instance = type.__call__(cls, *args,**kw) + return cls.__instance + +class FreeCADShipSimulation(threading.Thread): + __metaclass__ = Singleton + def __init__ (self, device, endTime, output, FSmesh, waves): + """ Thread constructor. + @param device Device to use. + @param endTime Maximum simulation time. + @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param FSmesh Free surface mesh faces. + @param waves Waves parameters (A,T,phi,heading) + """ + threading.Thread.__init__(self) + # Setup as stopped + self.active = False + # Build OpenCL context and command queue + self.device = device + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) + # Storage data + self.endTime = endTime + self.output = output + self.FSmesh = FSmesh + self.waves = waves + + def run(self): + """ Runs the simulation. + """ + self.active = True + # Perform work here + msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") + FreeCAD.Console.PrintMessage(msg) + init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) + msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") + FreeCAD.Console.PrintMessage(msg) + while self.active: + print("Im thread, Im running...") + time.sleep(1) + # ... + print("Im thread, step done!") + msg = Translator.translate("\t[Sim]: Output performed!\n") + FreeCAD.Console.PrintMessage(msg) + # Set thread as stopped (and prepare it to restarting) + self.active = False + threading.Event().set() + threading.Thread.__init__(self) + + def stop(self): + """ Call to stop execution. + """ + self.active = False + + def isRunning(self): + """ Report thread state + @return True if thread is running, False otherwise. + """ + return self.active From eac9182ac95bc62101c33a8bf81957000d645e64 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Tue, 31 Jul 2012 18:37:10 +0200 Subject: [PATCH 476/517] Added non OpenCL solver (will be developed first) --- src/Mod/Ship/CMakeLists.txt | 4 +- src/Mod/Ship/Makefile.am | 5 +- src/Mod/Ship/simRun/Sim/Utils.py~ | 58 --- src/Mod/Ship/simRun/Sim/__init__.py | 2 +- src/Mod/Ship/simRun/Sim/initialization.py | 111 ++--- src/Mod/Ship/simRun/Simulation.py | 19 +- src/Mod/Ship/simRun/Simulation.py~ | 107 ----- src/Mod/Ship/simRun/TaskPanel.py | 407 +++++++++--------- src/Mod/Ship/simRun/{Sim => clSim}/Utils.py | 0 .../{Sim/__init__.py~ => clSim/__init__.py} | 35 +- .../initialization.py} | 12 +- 11 files changed, 284 insertions(+), 476 deletions(-) delete mode 100644 src/Mod/Ship/simRun/Sim/Utils.py~ delete mode 100644 src/Mod/Ship/simRun/Simulation.py~ rename src/Mod/Ship/simRun/{Sim => clSim}/Utils.py (100%) rename src/Mod/Ship/simRun/{Sim/__init__.py~ => clSim/__init__.py} (68%) rename src/Mod/Ship/simRun/{Sim/initialization.py~ => clSim/initialization.py} (96%) diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 5f0314abd..432c91576 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -145,9 +145,11 @@ SET(SimRun_SRCS simRun/Simulation.py simRun/TaskPanel.py simRun/TaskPanel.ui + simRun/clSim/__init__.py + simRun/clSim/initialization.py + simRun/clSim/Utils.py simRun/Sim/__init__.py simRun/Sim/initialization.py - simRun/Sim/Utils.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 084e9a877..f2477550b 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -98,10 +98,11 @@ nobase_data_DATA = \ simRun/Simulation.py \ simRun/TaskPanel.py \ simRun/TaskPanel.ui \ + simRun/clSim/__init__.py \ + simRun/clSim/initialization.py \ + simRun/clSim/Utils.py \ simRun/Sim/__init__.py \ simRun/Sim/initialization.py - simRun/Sim/Utils.py - CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/simRun/Sim/Utils.py~ b/src/Mod/Ship/simRun/Sim/Utils.py~ deleted file mode 100644 index 7c37bfab2..000000000 --- a/src/Mod/Ship/simRun/Sim/Utils.py~ +++ /dev/null @@ -1,58 +0,0 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -# FreeCAD -from shipUtils import Paths - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# Standard -import math - -def loadProgram(context, file): - """ Loads a file and comnpile it. - @param context OpenCL context where apply. - @param file File to load and compile. - @return Ready to use OpenCL program. - """ - f = open(file, 'r') - str = "".join(f.readlines()) - print(str) - return cl.Program(context, str).build() - -def clPath(): - """ Gets the OpenCL kernels path - @return OpenCL kernels path - """ - path = Paths.modulePath() + "/OpenCL" - return path - -def globalSize(n): - """ Compute global size from amount of data. - @param n Amount of data. - @return global size. - """ - localSize = 256.0 - return int(math.ceil(n/localSize)*localSize) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py index 2fcb8e495..f5acc886b 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -21,4 +21,4 @@ #* * #*************************************************************************** -import initialization, Utils \ No newline at end of file +import initialization diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py index 90bdf5bfa..1c443ca85 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -21,65 +21,62 @@ #* * #*************************************************************************** -# Simulation stuff -from Utils import * - -# pyOpenCL -import pyopencl as cl +# numpy import numpy as np +grav=9.81 + class perform: - def __init__(self, context, queue, FSmesh, waves): + def __init__(self, FSmesh, waves, context=None, queue=None): """ Constructor, includes program loading. - @param context OpenCL context where apply. - @param queue OpenCL command queue. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). + @param context OpenCL context where apply. Only for compatibility, + must be None. + @param queue OpenCL command queue. Only for compatibility, + must be None. """ self.context = context self.queue = queue - self.program = loadProgram(context, clPath() + "/simInit.cl") self.loadData(FSmesh, waves) self.execute() def loadData(self, FSmesh, waves): - """ Convert data to numpy format, and create OpenCL - buffers. + """ Convert data to numpy format. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). """ - mf = cl.mem_flags nx = len(FSmesh) ny = len(FSmesh[0]) nW = len(waves) # Mesh data - p = np.ndarray((nx*ny, 4), dtype=np.float32) - n = np.ndarray((nx*ny, 4), dtype=np.float32) - a = np.ndarray((nx*ny, 1), dtype=np.float32) + p = np.ndarray((nx,ny, 3), dtype=np.float32) + v = np.ndarray((nx,ny, 3), dtype=np.float32) + f = np.ndarray((nx,ny, 3), dtype=np.float32) + n = np.ndarray((nx,ny, 3), dtype=np.float32) + a = np.ndarray((nx,ny, 1), dtype=np.float32) + phi = np.ndarray((nx,ny, 1), dtype=np.float32) + Phi = np.ndarray((nx,ny, 1), dtype=np.float32) for i in range(0, nx): for j in range(0, ny): - id = i*ny + j pos = FSmesh[i][j].pos normal = FSmesh[i][j].normal area = FSmesh[i][j].area - p[id,0] = pos.x - p[id,1] = pos.y - p[id,2] = pos.z - p[id,3] = 1. - n[id,0] = normal.x - n[id,1] = normal.y - n[id,2] = normal.z - n[id,3] = 0. - a[id,0] = area - p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p) - n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n) - a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a) - v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) - f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) - phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) - Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) - self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \ - 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi} + p[i,j,0] = pos.x + p[i,j,1] = pos.y + p[i,j,2] = pos.z + v[i,j,0] = 0. + v[i,j,1] = 0. + v[i,j,2] = 0. + f[i,j,0] = 0. + f[i,j,1] = 0. + f[i,j,2] = 0. + n[i,j,0] = normal.x + n[i,j,1] = normal.y + n[i,j,2] = normal.z + a[i,j] = area + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p, 'vel':v, 'acc':f, \ + 'normal':n, 'area':a, 'velPot':phi, 'accPot':Phi} # Waves data w = np.ndarray((nW, 4), dtype=np.float32) for i in range(0,nW): @@ -87,27 +84,31 @@ class perform: w[i,1] = waves[i][1] w[i,2] = waves[i][2] w[i,3] = waves[i][3] - w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w) - self.waves = {'N':nW, 'data':w_cl} - # Ensure that all data has been written - self.queue.finish() + self.waves = {'N':nW, 'data':w} def execute(self): """ Compute initial conditions. """ - # Global size computation - N = np.ndarray((2, 1), dtype=np.uint32) - N[0] = self.fs['Nx'] - N[1] = self.fs['Ny'] - n = np.uint32(self.waves['N']) - gSize = (globalSize(N[0]),globalSize(N[1]),) - # Kernel arguments - kernelargs = (self.fs['pos'], - self.fs['vel'], - self.fs['acc'], - self.waves['data'], - self.fs['velPot'], - self.fs['accPot'], - N, n) - # Kernel launch - self.program.FS(self.queue, gSize, None, *(kernelargs)) - self.queue.finish() + nx = self.fs['Nx'] + ny = self.fs['Ny'] + for i in range(0,nx): + for j in range(0,ny): + for w in self.waves['data']: + A = w[0] + T = w[1] + phase = w[2] + heading = np.pi*w[3]/180.0 + wl = 0.5 * grav / np.pi * T*T + k = 2.0*np.pi/wl + frec = 2.0*np.pi/T + pos = self.fs['pos'][i,j] + l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) + amp = A*np.sin(k*l + phase) + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp + amp = frec*A*np.cos(k*l + phase) + self.fs['vel'][i,j][2] = self.fs['vel'][i,j][2] - amp + amp = frec*frec*A*np.sin(k*l + phase) + self.fs['acc'][i,j][2] = self.fs['acc'][i,j][2] - amp + amp = grav/frec*A*np.sin(k*l + phase) + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp + amp = grav*A*np.cos(k*l + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 6ffd9fe0c..a06f6b0d2 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -34,9 +34,6 @@ import FreeCAD,FreeCADGui from FreeCAD import Base, Vector import Part -# Simulation stuff -from Sim import initialization - # Ship design module from shipUtils import Paths, Translator, Math @@ -65,8 +62,12 @@ class FreeCADShipSimulation(threading.Thread): self.active = False # Build OpenCL context and command queue self.device = device - self.context = cl.Context(devices=[self.device]) - self.queue = cl.CommandQueue(self.context) + if self.device == None: # Can't use OpenCL + self.context = None + self.queue = None + else: + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) # Storage data self.endTime = endTime self.output = output @@ -77,10 +78,14 @@ class FreeCADShipSimulation(threading.Thread): """ Runs the simulation. """ self.active = True - # Perform work here + # Simulation stuff + if self.device == None: + from Sim import initialization + else: + from clSim import initialization msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") FreeCAD.Console.PrintMessage(msg) - init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) + init = initialization.perform(self.FSmesh,self.waves,self.context,self.queue) msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") FreeCAD.Console.PrintMessage(msg) while self.active: diff --git a/src/Mod/Ship/simRun/Simulation.py~ b/src/Mod/Ship/simRun/Simulation.py~ deleted file mode 100644 index 03a443779..000000000 --- a/src/Mod/Ship/simRun/Simulation.py~ +++ /dev/null @@ -1,107 +0,0 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -import time -from math import * -import threading - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# FreeCAD -import FreeCAD,FreeCADGui -from FreeCAD import Base, Vector -import Part - -# Simulation stuff -from Sim import initialization - -# Ship design module -from shipUtils import Paths, Translator, Math - -class Singleton(type): - def __init__(cls, name, bases, dct): - cls.__instance = None - type.__init__(cls, name, bases, dct) - - def __call__(cls, *args, **kw): - if cls.__instance is None: - cls.__instance = type.__call__(cls, *args,**kw) - return cls.__instance - -class FreeCADShipSimulation(threading.Thread): - __metaclass__ = Singleton - def __init__ (self, device, endTime, output, FSmesh, waves): - """ Thread constructor. - @param device Device to use. - @param endTime Maximum simulation time. - @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. - @param FSmesh Free surface mesh faces. - @param waves Waves parameters (A,T,phi,heading) - """ - threading.Thread.__init__(self) - # Setup as stopped - self.active = False - # Build OpenCL context and command queue - self.device = device - self.context = cl.Context(devices=[self.device]) - self.queue = cl.CommandQueue(self.context) - # Storage data - self.endTime = endTime - self.output = output - self.FSmesh = FSmesh - self.waves = waves - - def run(self): - """ Runs the simulation. - """ - self.active = True - # Perform work here - msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") - FreeCAD.Console.PrintMessage(msg) - init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) - msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") - FreeCAD.Console.PrintMessage(msg) - while self.active: - print("Im thread, Im running...") - time.sleep(1) - # ... - print("Im thread, step done!") - msg = Translator.translate("\t[Sim]: Output performed!\n") - FreeCAD.Console.PrintMessage(msg) - # Set thread as stopped (and prepare it to restarting) - self.active = False - threading.Event().set() - threading.Thread.__init__(self) - - def stop(self): - """ Call to stop execution. - """ - self.active = False - - def isRunning(self): - """ Report thread state - @return True if thread is running, False otherwise. - """ - return self.active diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index 2e41ff15a..d2c34b8b7 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -1,203 +1,204 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -# FreeCAD modules -import FreeCAD as App -import FreeCADGui as Gui -# Qt library -from PyQt4 import QtGui,QtCore -# pyOpenCL -import pyopencl as cl -# Module -import SimInstance -from shipUtils import Paths, Translator -from Simulation import FreeCADShipSimulation as Sim - -import time - -class TaskPanel: - def __init__(self): - self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" - self.sim = False - - def accept(self): - msg = Translator.translate("Building data...\n") - App.Console.PrintMessage(msg) - # Get GUI data - endTime = self.form.time.value() - output = [] - output.append(self.form.output.value()) - output.append(self.form.outputType.currentIndex()) - devId = self.form.device.currentIndex() - # Get OpenCL device - count = 0 - platforms = cl.get_platforms() - for p in platforms: - devs = p.get_devices() - for d in devs: - if count == devId: - device = d - count = count + 1 - # Get free surfaces data - FSMesh = SimInstance.FSMesh(self.sim) - wData = self.sim.Waves - wDir = self.sim.Waves_Dir - waves = [] - for i in range(0,len(wData)): - waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) - msg = Translator.translate("Launching simulation...\n") - App.Console.PrintMessage(msg) - # Build simulation thread - simulator = Sim(device, endTime, output, FSMesh, waves) - simulator.start() - msg = Translator.translate("Done!\n") - App.Console.PrintMessage(msg) - return True - - def reject(self): - return True - - def clicked(self, index): - pass - - def open(self): - pass - - def needsFullSpace(self): - return True - - def isAllowedAlterSelection(self): - return False - - def isAllowedAlterView(self): - return True - - def isAllowedAlterDocument(self): - return False - - def helpRequested(self): - pass - - def setupUi(self): - mw = self.getMainWindow() - form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") - form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") - form.outputType = form.findChild(QtGui.QComboBox, "OutputType") - form.device = form.findChild(QtGui.QComboBox, "Device") - self.form = form - # Initial values - if self.initValues(): - return True - self.retranslateUi() - # Connect Signals and Slots - # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData) - - def getMainWindow(self): - "returns the main window" - # using QtGui.qApp.activeWindow() isn't very reliable because if another - # widget than the mainwindow is active (e.g. a dialog) the wrong widget is - # returned - toplevel = QtGui.qApp.topLevelWidgets() - for i in toplevel: - if i.metaObject().className() == "Gui::MainWindow": - return i - raise Exception("No main window found") - - def initValues(self): - """ Set initial values for fields - """ - # Get objects - selObjs = Gui.Selection.getSelection() - if not selObjs: - msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") - App.Console.PrintError(msg) - return True - for i in range(0,len(selObjs)): - obj = selObjs[i] - # Test if is a ship instance - props = obj.PropertiesList - try: - props.index("IsShipSimulation") - except ValueError: - continue - if obj.IsShipSimulation: - # Test if another ship already selected - if self.sim: - msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") - App.Console.PrintWarning(msg) - break - self.sim = obj - # Test if any valid ship was selected - if not self.sim: - msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") - App.Console.PrintError(msg) - return True - # Get the list of devices - devices = [] - platforms = cl.get_platforms() - for p in platforms: - devs = p.get_devices() - for d in devs: - devices.append([p,d]) - dname = d.get_info(cl.device_info.NAME) - pname = p.get_info(cl.platform_info.NAME) - self.form.device.addItem(dname + " (" + pname + ")") - if not len(devices): - msg = Translator.translate("This tool requires an active OpenCL context to work\n") - App.Console.PrintError(msg) - return True - msg = Translator.translate("Ready to work\n") - App.Console.PrintMessage(msg) - return False - - def retranslateUi(self): - """ Set user interface locale strings. - """ - self.form.setWindowTitle(Translator.translate("Run the simulation")) - self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) - self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) - self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device")) - -def createTask(): - panel = TaskPanel() - Gui.Control.showDialog(panel) - if panel.setupUi(): - Gui.Control.closeDialog(panel) - return None - return panel - -def stopSimulation(): - try: - simulator = Sim() - if not simulator.isRunning(): - msg = Translator.translate("Simulation already stopped\n") - App.Console.PrintWarning(msg) - return - except: - msg = Translator.translate("Any active simulation to stop!\n") - App.Console.PrintError(msg) - return - simulator.stop() - msg = Translator.translate("Simulation will stop at the end of actual iteration\n") - App.Console.PrintMessage(msg) +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# pyOpenCL +import pyopencl as cl +# Module +import SimInstance +from shipUtils import Paths, Translator +from Simulation import FreeCADShipSimulation as Sim + +import time + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" + self.sim = False + + def accept(self): + msg = Translator.translate("Building data...\n") + App.Console.PrintMessage(msg) + # Get GUI data + endTime = self.form.time.value() + output = [] + output.append(self.form.output.value()) + output.append(self.form.outputType.currentIndex()) + devId = self.form.device.currentIndex() - 1 # First is not OpenCL + # Get OpenCL device + device = None + count = 0 + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + if count == devId: + device = d + count = count + 1 + # Get free surfaces data + FSMesh = SimInstance.FSMesh(self.sim) + wData = self.sim.Waves + wDir = self.sim.Waves_Dir + waves = [] + for i in range(0,len(wData)): + waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) + msg = Translator.translate("Launching simulation...\n") + App.Console.PrintMessage(msg) + # Build simulation thread + simulator = Sim(device, endTime, output, FSMesh, waves) + simulator.start() + msg = Translator.translate("Done!\n") + App.Console.PrintMessage(msg) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") + form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") + form.outputType = form.findChild(QtGui.QComboBox, "OutputType") + form.device = form.findChild(QtGui.QComboBox, "Device") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + # Get objects + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShipSimulation") + except ValueError: + continue + if obj.IsShipSimulation: + # Test if another ship already selected + if self.sim: + msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.sim = obj + # Test if any valid ship was selected + if not self.sim: + msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") + App.Console.PrintError(msg) + return True + # Get the list of devices + self.form.device.addItem("CPU based version (No OpenCL)") + devices = [] + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + devices.append([p,d]) + dname = d.get_info(cl.device_info.NAME) + pname = p.get_info(cl.platform_info.NAME) + self.form.device.addItem(dname + " (" + pname + ")") + if not len(devices): + msg = Translator.translate("Can't find OpenCL devices\n") + App.Console.PrintWarning(msg) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Run the simulation")) + self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) + self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) + self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device")) + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel + +def stopSimulation(): + try: + simulator = Sim() + if not simulator.isRunning(): + msg = Translator.translate("Simulation already stopped\n") + App.Console.PrintWarning(msg) + return + except: + msg = Translator.translate("Any active simulation to stop!\n") + App.Console.PrintError(msg) + return + simulator.stop() + msg = Translator.translate("Simulation will stop at the end of actual iteration\n") + App.Console.PrintMessage(msg) diff --git a/src/Mod/Ship/simRun/Sim/Utils.py b/src/Mod/Ship/simRun/clSim/Utils.py similarity index 100% rename from src/Mod/Ship/simRun/Sim/Utils.py rename to src/Mod/Ship/simRun/clSim/Utils.py diff --git a/src/Mod/Ship/simRun/Sim/__init__.py~ b/src/Mod/Ship/simRun/clSim/__init__.py similarity index 68% rename from src/Mod/Ship/simRun/Sim/__init__.py~ rename to src/Mod/Ship/simRun/clSim/__init__.py index 30db4bcdb..2fcb8e495 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py~ +++ b/src/Mod/Ship/simRun/clSim/__init__.py @@ -21,37 +21,4 @@ #* * #*************************************************************************** -# FreeCAD -from shipUtils import Paths - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# Standard -import math - -def loadProgram(context, file): - """ Loads a file and comnpile it. - @param context OpenCL context where apply. - @param file File to load and compile. - @return Ready to use OpenCL program. - """ - f = open(file, 'r') - str = "".join(f.readlines()) - return cl.Program(context, str).build() - -def clPath(): - """ Gets the OpenCL kernels path - @return OpenCL kernels path - """ - path = Paths.modulePath() + "/OpenCL" - return path - -def globalSize(n): - """ Compute global size from amount of data. - @param n Amount of data. - @return global size. - """ - localSize = 256 - return int(math.ceil(n/localSize)) +import initialization, Utils \ No newline at end of file diff --git a/src/Mod/Ship/simRun/Sim/initialization.py~ b/src/Mod/Ship/simRun/clSim/initialization.py similarity index 96% rename from src/Mod/Ship/simRun/Sim/initialization.py~ rename to src/Mod/Ship/simRun/clSim/initialization.py index 63cc9f3aa..5e4f30417 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py~ +++ b/src/Mod/Ship/simRun/clSim/initialization.py @@ -29,12 +29,12 @@ import pyopencl as cl import numpy as np class perform: - def __init__(self, context, queue, FSmesh, waves): + def __init__(self, FSmesh, waves, context, queue): """ Constructor, includes program loading. - @param context OpenCL context where apply. - @param queue OpenCL command queue. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). + @param context OpenCL context where apply. + @param queue OpenCL command queue. """ self.context = context self.queue = queue @@ -100,7 +100,6 @@ class perform: N[1] = self.fs['Ny'] n = np.uint32(self.waves['N']) gSize = (globalSize(N[0]),globalSize(N[1]),) - print(gSize) # Kernel arguments kernelargs = (self.fs['pos'], self.fs['vel'], @@ -108,10 +107,7 @@ class perform: self.waves['data'], self.fs['velPot'], self.fs['accPot'], - N, n) - print('Launching...') + N, n) # Kernel launch self.program.FS(self.queue, gSize, None, *(kernelargs)) - print('Waiting...') self.queue.finish() - print('OK!') From aae9b17e32136b4afacaf39c66d8728df8383d72 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 5 Aug 2012 18:01:58 -0300 Subject: [PATCH 477/517] Arch: Bugfixes and hidden lines mode for section planes --- src/Mod/Arch/ArchCommands.py | 14 +- src/Mod/Arch/ArchSectionPlane.py | 73 +++++- src/Mod/Arch/ArchVRM.py | 45 +++- src/Mod/Arch/Arch_rc.py | 233 +++++++++++--------- src/Mod/Arch/Resources/ui/archprefs-base.ui | 74 +++++++ src/Mod/Draft/DraftGeomUtils.py | 103 +++++---- 6 files changed, 367 insertions(+), 175 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 8ee62c546..d6b3a96fe 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -278,7 +278,7 @@ def getCutVolume(cutplane,shapes): v = placement.Rotation.multVec(FreeCAD.Vector(0,1,0)) if not bb.isCutPlane(placement.Base,ax): print "No objects are cut by the plane" - return None,None + return None,None,None else: corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin), FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin), @@ -305,7 +305,9 @@ def getCutVolume(cutplane,shapes): cutface.Placement = placement cutnormal = DraftVecUtils.scaleTo(ax,wm) cutvolume = cutface.extrude(cutnormal) - return cutface,cutvolume + cutnormal = DraftVecUtils.neg(cutnormal) + invcutvolume = cutface.extrude(cutnormal) + return cutface,cutvolume,invcutvolume def meshToShape(obj,mark=True): @@ -428,8 +430,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) @@ -439,11 +441,11 @@ def check(objectslist,includehidden=True): bad.append([o,"is not a Part-based object"]) else: s = o.Shape - if not s.isClosed(): + if (not s.isClosed()) and (not (Draft.getType(o) == "Axis")): bad.append([o,"is not closed"]) elif not s.isValid(): bad.append([o,"is not valid"]) - elif not s.Solids: + elif (not s.Solids) and (not (Draft.getType(o) == "Axis")): bad.append([o,"doesn't contain any solid"]) else: f = 0 diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 97fe2023d..7a65180a8 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -184,10 +184,12 @@ 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 = "Wireframe" obj.LineWidth = 0.35 + obj.ShowCut = False obj.Proxy = self self.Type = "DrawingView" @@ -199,6 +201,22 @@ class _ArchDrawingView: if prop in ["Source","RenderingMode"]: obj.ViewResult = self.updateSVG(obj) + def __getstate__(self): + return None + + def __setstate__(self,state): + return None + + def getShape(self, obj): + "returns a flat shape representation of the view" + if hasattr(self,"baseshape"): + import Drawing + [V0,V1,H0,H1] = Drawing.project(self.baseshape,direction) + return V0.Edges+V1.Edges + else: + print "No shape has been computed yet" + return None + def updateSVG(self, obj,join=False): "encapsulates a svg fragment into a transformation node" import Part, DraftGeomUtils @@ -209,6 +227,9 @@ class _ArchDrawingView: objs = Draft.removeHidden(objs) svg = '' + st = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetFloat("CutLineThickness") + if not st: st = 2 + # generating SVG linewidth = obj.LineWidth/obj.Scale if obj.RenderingMode == "Solid": @@ -217,29 +238,43 @@ class _ArchDrawingView: render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) render.addObjects(Draft.getGroupContents(objs,walls=True)) - render.cut(obj.Source.Shape) + render.cut(obj.Source.Shape,obj.ShowCut) svg += render.getViewSVG(linewidth=linewidth) - svg += render.getSectionSVG(linewidth=linewidth*2) + svg += render.getSectionSVG(linewidth=linewidth*st) + if obj.ShowCut: + svg += render.getHiddenSVG(linewidth=linewidth) # print render.info() else: # render using the Drawing module import Drawing, Part shapes = [] + hshapes = [] + sshapes = [] p = FreeCAD.Placement(obj.Source.Placement) direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1)) for o in objs: if o.isDerivedFrom("Part::Feature"): - shapes.extend(o.Shape.Solids) - cutface,cutvolume = ArchCommands.getCutVolume(obj.Source.Shape.copy(),shapes) + if o.Shape.isValid(): + shapes.extend(o.Shape.Solids) + else: + FreeCAD.Console.PrintWarning("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: c = sol.cut(cutvolume) nsh.append(c) + s = sol.section(cutface) + sshapes.append(s) + if obj.ShowCut: + c = sol.cut(invcutvolume) + hshapes.append(c) shapes = nsh - base = Part.makeCompound(shapes) + if shapes: + self.baseshape = Part.makeCompound(shapes) + svgf = Drawing.projectToSVG(self.baseshape,direction) #if shapes: # base = shapes.pop().copy() #for sh in shapes: @@ -247,12 +282,36 @@ class _ArchDrawingView: # base = base.fuse(sh) # except: # print "unable to fuse, passing..." - svgf = Drawing.projectToSVG(base,direction) if svgf: svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') svgf = svgf.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') svgf = svgf.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px') - svg += svgf + svg += svgf + if hshapes: + hshapes = Part.makeCompound(hshapes) + svgh = Drawing.projectToSVG(hshapes,direction) + if svgh: + svgh = svgh.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') + svgh = svgh.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') + svgh = svgh.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px') + svgh = svgh.replace('fill="none"','fill="none"\nstroke-dasharray="0.09,0.05"') + 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,direction) + if svgs: + svgs = svgs.replace('stroke-width="0.35"','stroke-width="' + str(linewidth*st) + 'px"') + svgs = svgs.replace('stroke-width="1"','stroke-width="' + str(linewidth*st) + 'px"') + svgs = svgs.replace('stroke-width:0.01','stroke-width:' + str(linewidth*st) + 'px') + svg += svgs result = '' result += ' 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: @@ -231,7 +243,7 @@ class Renderer: shps = [] for sh in self.shapes: shps.append(sh[0]) - cutface,cutvolume = ArchCommands.getCutVolume(cutplane,shps) + cutface,cutvolume,invcutvolume = ArchCommands.getCutVolume(cutplane,shps) if cutface and cutvolume: shapes = [] faces = [] @@ -246,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 @@ -555,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): @@ -608,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 +=' + + + + 2D rendering + + + + + + + + Show debug information during 2D rendering + + + Show renderer debug messages + + + ShowVRMDebug + + + Mod/Arch + + + + + + + + + + + Cut areas line thickness ratio + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Specifies how many times the viewed line thickness must be applied to cut lines + + + 2.000000000000000 + + + CutLineThickness + + + Mod/Arch + + + + + + + + @@ -257,6 +326,11 @@ QCheckBox

    Gui/PrefWidgets.h
    + + Gui::PrefDoubleSpinBox + QDoubleSpinBox +
    Gui/PrefWidgets.h
    +
    diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index f47ae0f09..10ee860a0 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -539,57 +539,62 @@ def sortEdges(lEdges, aVertex=None): def findWires(edgeslist): - '''finds connected wires in the given list of edges''' + '''finds connected wires in the given list of edges''' - def touches(e1,e2): - if len(e1.Vertexes) < 2: - return False - if len(e2.Vertexes) < 2: - return False - if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point): - return True - if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point): - return True - if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point): - return True - if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point): - return True - return False - - edges = edgeslist[:] - wires = [] - lost = [] - while edges: - e = edges[0] - if not wires: - # create first group - edges.remove(e) - wires.append([e]) + def touches(e1,e2): + if len(e1.Vertexes) < 2: + return False + if len(e2.Vertexes) < 2: + return False + if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[0].Point): + return True + if DraftVecUtils.equals(e1.Vertexes[0].Point,e2.Vertexes[-1].Point): + return True + if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[0].Point): + return True + if DraftVecUtils.equals(e1.Vertexes[-1].Point,e2.Vertexes[-1].Point): + return True + return False + + edges = edgeslist[:] + wires = [] + lost = [] + while edges: + e = edges[0] + if not wires: + # create first group + edges.remove(e) + wires.append([e]) + else: + found = False + for w in wires: + if not found: + for we in w: + if touches(e,we): + edges.remove(e) + w.append(e) + found = True + break + if not found: + if e in lost: + # we already tried this edge, and still nothing + edges.remove(e) + wires.append([e]) + lost = [] else: - found = False - for w in wires: - if not found: - for we in w: - if touches(e,we): - edges.remove(e) - w.append(e) - found = True - break - if not found: - if e in lost: - # we already tried this edge, and still nothing - edges.remove(e) - wires.append([e]) - lost = [] - else: - # put to the end of the list - edges.remove(e) - edges.append(e) - lost.append(e) - nwires = [] - for w in wires: - nwires.append(Part.Wire(w)) - return nwires + # put to the end of the list + edges.remove(e) + edges.append(e) + lost.append(e) + nwires = [] + for w in wires: + try: + wi = Part.Wire(w) + except: + print "couldn't join some edges" + else: + nwires.append(wi) + return nwires def superWire(edgeslist,closed=False): '''superWire(edges,[closed]): forces a wire between edges that don't necessarily From 43b7b9834d6c3d0d8550c1ef1b5ad1cfb621b7cc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 5 Aug 2012 19:03:27 -0300 Subject: [PATCH 478/517] Arch: Walls and Structs can now be created directly from meshes --- src/Mod/Arch/ArchCommands.py | 77 +++++++++++++++++++++++++---------- src/Mod/Arch/ArchStructure.py | 15 +++---- src/Mod/Arch/ArchWall.py | 33 +++++++++------ src/Mod/Arch/ArchWindow.py | 9 +--- 4 files changed, 86 insertions(+), 48 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index d6b3a96fe..44dd537c2 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -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 @@ -308,6 +324,41 @@ def getCutVolume(cutplane,shapes): 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): @@ -315,36 +366,18 @@ def meshToShape(obj,mark=True): 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 diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index d249a8a83..175bd5f94 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -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.Mesh.isSolid(): + if obj.Mesh.countComponents() == 1: + sh = ArchCommands.getShapeFromMesh(obj.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) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 4983d77e7..b74f9415b 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -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): @@ -357,7 +356,7 @@ class _Wall(ArchComponent.Component): # computing shape base = None if obj.Base.isDerivedFrom("Part::Feature"): - if not obj.Base.Shape.isNull(): + if obj.Base.isValid() and (not obj.Base.Shape.isNull()): base = obj.Base.Shape.copy() if base.Solids: pass @@ -380,7 +379,17 @@ class _Wall(ArchComponent.Component): 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.PrintWarning("This mesh is an invalid solid") + obj.Base.ViewObject.show() if base: for app in obj.Additions: diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 9c540e7be..5a78ce627 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -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): From 6b0f50d98cdce5159aafda2b69abf2396b174419 Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 6 Aug 2012 13:34:29 +0200 Subject: [PATCH 479/517] Sketcher: add perpendicular mode to polyline tool and use M-key for mode-switching --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 214 ++++++++++++++-------- 1 file changed, 142 insertions(+), 72 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index eb0aa74fe..cbacc1392 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -488,50 +488,103 @@ class DrawSketchHandlerLineSet: public DrawSketchHandler { public: DrawSketchHandlerLineSet() - : Mode(STATUS_SEEK_First),LineMode(LINE_MODE_Line),EditCurve(2), - firstVertex(-1),firstCurve(-1),previousCurve(-1),previousPosId(-1), - isTangent(false) {} + : Mode(STATUS_SEEK_First),SegmentMode(SEGMENT_MODE_Line), + TransitionMode(TRANSITION_MODE_Free),suppressTransition(false),EditCurve(2), + firstVertex(-1),firstCurve(-1),previousCurve(-1),previousPosId(-1) {} virtual ~DrawSketchHandlerLineSet() {} /// mode table - enum SelectMode { + enum SELECT_MODE { STATUS_SEEK_First, /**< enum value ----. */ STATUS_SEEK_Second, /**< enum value ----. */ STATUS_Do, STATUS_Close }; - enum SelectLineMode + enum SEGMENT_MODE { - LINE_MODE_Arc, - LINE_MODE_Line + SEGMENT_MODE_Arc, + SEGMENT_MODE_Line + }; + + enum TRANSITION_MODE + { + TRANSITION_MODE_Free, + TRANSITION_MODE_Tangent, + TRANSITION_MODE_Perpendicular_L, + TRANSITION_MODE_Perpendicular_R }; virtual void registerPressedKey(bool pressed, int key) { - if (key == SoKeyboardEvent::A && pressed && previousCurve != -1) { - if (LineMode != LINE_MODE_Arc) { - Base::Vector2D onSketchPos = EditCurve[isTangent ? 2 : 1]; - LineMode = LINE_MODE_Arc; - if (previousCurve != -1) - isTangent = true; - else - isTangent = false; - EditCurve.resize(32); - mouseMove(onSketchPos); // trigger an update of EditCurve + if (key == SoKeyboardEvent::M && pressed && previousCurve != -1) { + // loop through the following modes: + // SEGMENT_MODE_Line, TRANSITION_MODE_Free / TRANSITION_MODE_Tangent + // SEGMENT_MODE_Line, TRANSITION_MODE_Perpendicular_L + // SEGMENT_MODE_Line, TRANSITION_MODE_Tangent / TRANSITION_MODE_Free + // SEGMENT_MODE_Arc, TRANSITION_MODE_Tangent + // SEGMENT_MODE_Arc, TRANSITION_MODE_Perpendicular_L + // SEGMENT_MODE_Arc, TRANSITION_MODE_Perpendicular_R + + Base::Vector2D onSketchPos; + if (SegmentMode == SEGMENT_MODE_Line) + onSketchPos = EditCurve[EditCurve.size()-1]; + else + onSketchPos = EditCurve[29]; + + const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(previousCurve); + + if (SegmentMode == SEGMENT_MODE_Line) { + switch (TransitionMode) { + case TRANSITION_MODE_Free: + if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) { // 3rd mode + SegmentMode = SEGMENT_MODE_Arc; + TransitionMode = TRANSITION_MODE_Tangent; + } + else // 1st mode + TransitionMode = TRANSITION_MODE_Perpendicular_L; + break; + case TRANSITION_MODE_Perpendicular_L: // 2nd mode + if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) + TransitionMode = TRANSITION_MODE_Free; + else + TransitionMode = TRANSITION_MODE_Tangent; + break; + case TRANSITION_MODE_Tangent: + if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) // 1st mode + TransitionMode = TRANSITION_MODE_Perpendicular_L; + else { // 3rd mode + SegmentMode = SEGMENT_MODE_Arc; + TransitionMode = TRANSITION_MODE_Tangent; + } + break; + default: // unexpected mode + TransitionMode = TRANSITION_MODE_Free; + break; + } } else { - Base::Vector2D onSketchPos = EditCurve[29]; - LineMode = LINE_MODE_Line; - if (previousCurve != -1) { - const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(previousCurve); - if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) - isTangent = true; - else - isTangent = false; + switch (TransitionMode) { + case TRANSITION_MODE_Tangent: // 4th mode + TransitionMode = TRANSITION_MODE_Perpendicular_L; + break; + case TRANSITION_MODE_Perpendicular_L: // 5th mode + TransitionMode = TRANSITION_MODE_Perpendicular_R; + break; + default: // 6th mode (Perpendicular_R) + unexpexted mode + SegmentMode = SEGMENT_MODE_Line; + if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) + TransitionMode = TRANSITION_MODE_Tangent; + else + TransitionMode = TRANSITION_MODE_Free; + break; } - EditCurve.resize(isTangent ? 3 : 2); - mouseMove(onSketchPos); // trigger an update of EditCurve } + + if (SegmentMode == SEGMENT_MODE_Line) + EditCurve.resize(TransitionMode == TRANSITION_MODE_Free ? 2 : 3); + else + EditCurve.resize(32); + mouseMove(onSketchPos); // trigger an update of EditCurve } } @@ -542,6 +595,7 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { + suppressTransition = false; setPositionText(onSketchPos); if (Mode==STATUS_SEEK_First) { if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) { @@ -550,23 +604,41 @@ public: } } else if (Mode==STATUS_SEEK_Second){ - if (LineMode == LINE_MODE_Line) { - EditCurve[isTangent ? 2 : 1] = onSketchPos; - if (isTangent) { + if (SegmentMode == SEGMENT_MODE_Line) { + EditCurve[EditCurve.size()-1] = onSketchPos; + if (TransitionMode == TRANSITION_MODE_Tangent) { Base::Vector2D Tangent(dirVec.x,dirVec.y); EditCurve[1].ProjToLine(EditCurve[2] - EditCurve[0], Tangent); + if (EditCurve[1] * Tangent < 0) { + EditCurve[1] = EditCurve[2]; + suppressTransition = true; + } + else + EditCurve[1] = EditCurve[0] + EditCurve[1]; + } + else if (TransitionMode == TRANSITION_MODE_Perpendicular_L || + TransitionMode == TRANSITION_MODE_Perpendicular_R) { + Base::Vector2D Perpendicular(-dirVec.y,dirVec.x); + EditCurve[1].ProjToLine(EditCurve[2] - EditCurve[0], Perpendicular); EditCurve[1] = EditCurve[0] + EditCurve[1]; } sketchgui->drawEdit(EditCurve); - if (!isTangent) { + if (TransitionMode == TRANSITION_MODE_Free) { if (seekAutoConstraint(sugConstr2, onSketchPos, onSketchPos - EditCurve[0])) { renderSuggestConstraintsCursor(sugConstr2); return; } } } - else if (LineMode == LINE_MODE_Arc) { - Base::Vector2D Tangent(dirVec.x,dirVec.y); + else if (SegmentMode == SEGMENT_MODE_Arc) { + Base::Vector2D Tangent; + if (TransitionMode == TRANSITION_MODE_Tangent) + Tangent = Base::Vector2D(dirVec.x,dirVec.y); + else if (TransitionMode == TRANSITION_MODE_Perpendicular_L) + Tangent = Base::Vector2D(-dirVec.y,dirVec.x); + else if (TransitionMode == TRANSITION_MODE_Perpendicular_R) + Tangent = Base::Vector2D(dirVec.y,-dirVec.x); + float theta = Tangent.GetAngle(onSketchPos - EditCurve[0]); arcRadius = (onSketchPos - EditCurve[0]).Length()/(2.0*sin(theta)); // At this point we need a unit normal vector pointing torwards @@ -581,10 +653,7 @@ public: if ((x2*y3-x3*y2)-(x1*y3-x3*y1)+(x1*y2-x2*y1) > 0) arcRadius *= -1; - Base::Vector3d centerVec = dirVec % Base::Vector3d(0.f,0.f,1.0); - centerVec.Normalize(); // this step should actually be redundant - - CenterPoint = EditCurve[0] + Base::Vector2D(arcRadius * centerVec.x, arcRadius * centerVec.y); + CenterPoint = EditCurve[0] + Base::Vector2D(arcRadius * Tangent.fY, -arcRadius * Tangent.fX); float rx = EditCurve[0].fX - CenterPoint.fX; float ry = EditCurve[0].fY - CenterPoint.fY; @@ -622,35 +691,23 @@ public: virtual bool pressButton(Base::Vector2D onSketchPos) { - if (Mode==STATUS_SEEK_First) { + if (Mode == STATUS_SEEK_First) { // remember our first point firstVertex = getHighestVertexIndex() + 1; firstCurve = getHighestCurveIndex() + 1; // TODO: here we should check if there is a preselected point // and set up a transition from the neighbouring segment. - // (peviousCurve, previousPosId, dirVec, isTangent) + // (peviousCurve, previousPosId, dirVec, TransitionMode) // in that case we should set firstCurve and firstVertex to -1 // in order to disable closing the wire - if (LineMode == LINE_MODE_Line) - EditCurve.resize(isTangent ? 3 : 2); - else if (LineMode == LINE_MODE_Arc) + if (SegmentMode == SEGMENT_MODE_Line) + EditCurve.resize(TransitionMode == TRANSITION_MODE_Free ? 2 : 3); + else if (SegmentMode == SEGMENT_MODE_Arc) EditCurve.resize(32); EditCurve[0] = onSketchPos; Mode = STATUS_SEEK_Second; } - else if (Mode==STATUS_SEEK_Second) { - if (LineMode == LINE_MODE_Line) { - EditCurve[isTangent ? 2 : 1] = onSketchPos; - if (isTangent) { - Base::Vector2D Tangent(dirVec.x,dirVec.y); - EditCurve[1].ProjToLine(EditCurve[2] - EditCurve[0], Tangent); - EditCurve[1] = EditCurve[0] + EditCurve[1]; - } - } - else if (LineMode == LINE_MODE_Arc) - EditCurve[29] = onSketchPos; // not so important - sketchgui->drawEdit(EditCurve); - applyCursor(); + else if (Mode == STATUS_SEEK_Second) { // exit on clicking exactly at the same position (e.g. double click) if (onSketchPos == EditCurve[0]) { unsetCursor(); @@ -671,7 +728,7 @@ public: { if (Mode == STATUS_Do || Mode == STATUS_Close) { - if (LineMode == LINE_MODE_Line) { + if (SegmentMode == SEGMENT_MODE_Line) { // open the transaction Gui::Command::openCommand("Add line to sketch wire"); // issue the geometry @@ -680,7 +737,7 @@ public: sketchgui->getObject()->getNameInDocument(), EditCurve[0].fX,EditCurve[0].fY,EditCurve[1].fX,EditCurve[1].fY); } - else if (LineMode == LINE_MODE_Arc) { // We're dealing with an Arc + else if (SegmentMode == SEGMENT_MODE_Arc) { // We're dealing with an Arc Gui::Command::openCommand("Add arc to sketch wire"); Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addGeometry(Part.ArcOfCircle" @@ -692,13 +749,20 @@ public: // issue the constraint if (previousCurve != -1) { int lastCurve = previousCurve+1; - int lastStartPosId = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 2 : 1; - int lastEndPosId = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 1 : 2; - // in case of a tangency constraint, the coincident constraint is redundant + int lastStartPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? 2 : 1; + int lastEndPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? 1 : 2; + // in case of a tangency constraint, the coincident constraint is redundant + std::string constrType = "Coincident"; + if (!suppressTransition) { + if (TransitionMode == TRANSITION_MODE_Tangent) + constrType = "Tangent"; + else if (TransitionMode == TRANSITION_MODE_Perpendicular_L || + TransitionMode == TRANSITION_MODE_Perpendicular_R) + constrType = "Perpendicular"; + } Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('%s',%i,%i,%i,%i)) ", - sketchgui->getObject()->getNameInDocument(), - isTangent ? "Tangent" : "Coincident", + sketchgui->getObject()->getNameInDocument(), constrType.c_str(), previousCurve, previousPosId /* == 2 */, lastCurve, lastStartPosId); if (Mode == STATUS_Close) { int firstGeoId; @@ -750,7 +814,7 @@ public: // remember the vertex for the next rounds constraint.. previousCurve = getHighestCurveIndex(); - previousPosId = (LineMode == LINE_MODE_Arc && startAngle > endAngle) ? 1 : 2; + previousPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? 1 : 2; // setup for the next line segment // Use updated endPoint as autoconstraints can modify the position @@ -764,7 +828,7 @@ public: 0.f); } else if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) { - assert(LineMode == LINE_MODE_Arc); + assert(SegmentMode == SEGMENT_MODE_Arc); const Part::GeomArcOfCircle *arcSeg = dynamic_cast(geom); if (startAngle > endAngle) { EditCurve[0] = Base::Vector2D(arcSeg->getStartPoint().x,arcSeg->getStartPoint().y); @@ -779,20 +843,27 @@ public: applyCursor(); Mode = STATUS_SEEK_Second; - isTangent = (LineMode == LINE_MODE_Arc); - LineMode = LINE_MODE_Line; - EditCurve.resize(isTangent ? 3 : 2); - EditCurve[1] = EditCurve[0]; - if (isTangent) + if (SegmentMode == SEGMENT_MODE_Arc) { + TransitionMode = TRANSITION_MODE_Tangent; + EditCurve.resize(3); EditCurve[2] = EditCurve[0]; + } + else { + TransitionMode = TRANSITION_MODE_Free; + EditCurve.resize(2); + } + SegmentMode = SEGMENT_MODE_Line; + EditCurve[1] = EditCurve[0]; sketchgui->drawEdit(EditCurve); } } return true; } protected: - SelectMode Mode; - SelectLineMode LineMode; + SELECT_MODE Mode; + SEGMENT_MODE SegmentMode; + TRANSITION_MODE TransitionMode; + bool suppressTransition; std::vector EditCurve; int firstVertex; @@ -803,7 +874,6 @@ protected: Base::Vector2D CenterPoint; Base::Vector3d dirVec; - bool isTangent; float startAngle, endAngle, arcRadius; }; From 3f3b7cd68f94aa235ad85cf5993d722d851387bd Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 6 Aug 2012 16:13:09 +0200 Subject: [PATCH 480/517] Sketcher: allow starting a new polyline connected at some already available geometry --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 109 ++++++++++++++-------- 1 file changed, 70 insertions(+), 39 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index cbacc1392..f45f9d54d 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -490,7 +490,7 @@ public: DrawSketchHandlerLineSet() : Mode(STATUS_SEEK_First),SegmentMode(SEGMENT_MODE_Line), TransitionMode(TRANSITION_MODE_Free),suppressTransition(false),EditCurve(2), - firstVertex(-1),firstCurve(-1),previousCurve(-1),previousPosId(-1) {} + firstVertex(-1),firstCurve(-1),previousCurve(-1),previousPosId(Sketcher::none) {} virtual ~DrawSketchHandlerLineSet() {} /// mode table enum SELECT_MODE { @@ -692,19 +692,41 @@ public: virtual bool pressButton(Base::Vector2D onSketchPos) { if (Mode == STATUS_SEEK_First) { - // remember our first point - firstVertex = getHighestVertexIndex() + 1; - firstCurve = getHighestCurveIndex() + 1; - // TODO: here we should check if there is a preselected point - // and set up a transition from the neighbouring segment. + + EditCurve[0] = onSketchPos; // this may be overwritten if previousCurve is found + + // here we check if there is a preselected point and + // we set up a transition from the neighbouring segment. // (peviousCurve, previousPosId, dirVec, TransitionMode) - // in that case we should set firstCurve and firstVertex to -1 - // in order to disable closing the wire + for (int i=0; i < sugConstr1.size(); i++) + if (sugConstr1[i].Type == Sketcher::Coincident) { + const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(sugConstr1[i].GeoId); + if ((geom->getTypeId() == Part::GeomLineSegment::getClassTypeId() || + geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) && + (sugConstr1[i].PosId == Sketcher::start || + sugConstr1[i].PosId == Sketcher::end)) { + previousCurve = sugConstr1[i].GeoId; + previousPosId = sugConstr1[i].PosId; + updateTransitionData(previousCurve,previousPosId); // -> dirVec, EditMode[0] + if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) + TransitionMode = TRANSITION_MODE_Tangent; + sugConstr1.erase(sugConstr1.begin()+i); // actually we should clear the vector completely + break; + } + } + + // in case a transition is set up, firstCurve and firstVertex should + // remain set to -1 in order to disable closing the wire + if (previousCurve == -1) { + // remember our first point + firstVertex = getHighestVertexIndex() + 1; + firstCurve = getHighestCurveIndex() + 1; + } + if (SegmentMode == SEGMENT_MODE_Line) EditCurve.resize(TransitionMode == TRANSITION_MODE_Free ? 2 : 3); else if (SegmentMode == SEGMENT_MODE_Arc) EditCurve.resize(32); - EditCurve[0] = onSketchPos; Mode = STATUS_SEEK_Second; } else if (Mode == STATUS_SEEK_Second) { @@ -716,7 +738,7 @@ public: sketchgui->drawEdit(EditCurve); sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider } - if (sketchgui->getPreselectPoint() == firstVertex) + if (sketchgui->getPreselectPoint() == firstVertex && firstVertex != -1) Mode = STATUS_Close; else Mode = STATUS_Do; @@ -748,9 +770,11 @@ public: } // issue the constraint if (previousCurve != -1) { - int lastCurve = previousCurve+1; - int lastStartPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? 2 : 1; - int lastEndPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? 1 : 2; + int lastCurve = getHighestCurveIndex(); + Sketcher::PointPos lastStartPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? + Sketcher::end : Sketcher::start; + Sketcher::PointPos lastEndPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? + Sketcher::start : Sketcher::end; // in case of a tangency constraint, the coincident constraint is redundant std::string constrType = "Coincident"; if (!suppressTransition) { @@ -763,7 +787,7 @@ public: Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('%s',%i,%i,%i,%i)) ", sketchgui->getObject()->getNameInDocument(), constrType.c_str(), - previousCurve, previousPosId /* == 2 */, lastCurve, lastStartPosId); + previousCurve, previousPosId, lastCurve, lastStartPosId); if (Mode == STATUS_Close) { int firstGeoId; Sketcher::PointPos firstPosId; @@ -814,32 +838,12 @@ public: // remember the vertex for the next rounds constraint.. previousCurve = getHighestCurveIndex(); - previousPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? 1 : 2; + previousPosId = (SegmentMode == SEGMENT_MODE_Arc && startAngle > endAngle) ? + Sketcher::start : Sketcher::end; // cw arcs are rendered in reverse // setup for the next line segment - // Use updated endPoint as autoconstraints can modify the position - // Need to determine if the previous element was a line or an arc or ??? - const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(getHighestCurveIndex()); - if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { - const Part::GeomLineSegment *lineSeg = dynamic_cast(geom); - EditCurve[0] = Base::Vector2D(lineSeg->getEndPoint().x, lineSeg->getEndPoint().y); - dirVec.Set(lineSeg->getEndPoint().x - lineSeg->getStartPoint().x, - lineSeg->getEndPoint().y - lineSeg->getStartPoint().y, - 0.f); - } - else if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) { - assert(SegmentMode == SEGMENT_MODE_Arc); - const Part::GeomArcOfCircle *arcSeg = dynamic_cast(geom); - if (startAngle > endAngle) { - EditCurve[0] = Base::Vector2D(arcSeg->getStartPoint().x,arcSeg->getStartPoint().y); - dirVec = Base::Vector3d(0.f,0.f,-1.0) % (arcSeg->getStartPoint()-arcSeg->getCenter()); - } - else { // cw arcs are rendered in reverse - EditCurve[0] = Base::Vector2D(arcSeg->getEndPoint().x,arcSeg->getEndPoint().y); - dirVec = Base::Vector3d(0.f,0.f,1.0) % (arcSeg->getEndPoint()-arcSeg->getCenter()); - } - } - dirVec.Normalize(); + // calculate dirVec and EditCurve[0] + updateTransitionData(previousCurve,previousPosId); applyCursor(); Mode = STATUS_SEEK_Second; @@ -868,13 +872,40 @@ protected: std::vector EditCurve; int firstVertex; int firstCurve; - int previousPosId; int previousCurve; + Sketcher::PointPos previousPosId; std::vector sugConstr1, sugConstr2; Base::Vector2D CenterPoint; Base::Vector3d dirVec; float startAngle, endAngle, arcRadius; + + void updateTransitionData(int GeoId, Sketcher::PointPos PosId) { + + // Use updated startPoint/endPoint as autoconstraints can modify the position + const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(GeoId); + if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { + const Part::GeomLineSegment *lineSeg = dynamic_cast(geom); + EditCurve[0] = Base::Vector2D(lineSeg->getEndPoint().x, lineSeg->getEndPoint().y); + dirVec.Set(lineSeg->getEndPoint().x - lineSeg->getStartPoint().x, + lineSeg->getEndPoint().y - lineSeg->getStartPoint().y, + 0.f); + if (PosId == Sketcher::start) + dirVec *= -1; + } + else if (geom->getTypeId() == Part::GeomArcOfCircle::getClassTypeId()) { + const Part::GeomArcOfCircle *arcSeg = dynamic_cast(geom); + if (PosId == Sketcher::start) { + EditCurve[0] = Base::Vector2D(arcSeg->getStartPoint().x,arcSeg->getStartPoint().y); + dirVec = Base::Vector3d(0.f,0.f,-1.0) % (arcSeg->getStartPoint()-arcSeg->getCenter()); + } + else { + EditCurve[0] = Base::Vector2D(arcSeg->getEndPoint().x,arcSeg->getEndPoint().y); + dirVec = Base::Vector3d(0.f,0.f,1.0) % (arcSeg->getEndPoint()-arcSeg->getCenter()); + } + } + dirVec.Normalize(); + } }; From 7644248953483af3dbc8b04b45cc5b848c9cf3dc Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 6 Aug 2012 18:00:50 -0300 Subject: [PATCH 481/517] Arch: Fixed typo --- src/Mod/Arch/ArchWall.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index b74f9415b..2f8e7d900 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -356,7 +356,7 @@ class _Wall(ArchComponent.Component): # computing shape base = None if obj.Base.isDerivedFrom("Part::Feature"): - if obj.Base.isValid() and (not obj.Base.Shape.isNull()): + if obj.Base.Shape.isValid() and (not obj.Base.Shape.isNull()): base = obj.Base.Shape.copy() if base.Solids: pass From db2ccb31b40685daf31b36a6b397643954c357ac Mon Sep 17 00:00:00 2001 From: logari81 Date: Mon, 6 Aug 2012 23:05:31 +0200 Subject: [PATCH 482/517] Sketcher: improve position text during geometry creation --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 47 +++++++++++++++++---- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 2 +- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index f45f9d54d..f008aa82b 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -142,15 +142,21 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { - setPositionText(onSketchPos); - if (Mode==STATUS_SEEK_First) { + setPositionText(onSketchPos); if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr1); return; } } else if (Mode==STATUS_SEEK_Second){ + float length = (onSketchPos - EditCurve[0]).Length(); + float angle = (onSketchPos - EditCurve[0]).GetAngle(Base::Vector2D(1.f,0.f)); + char buf[40]; + sprintf(buf, " (%.1f,%.1f)", length, angle * 180 / M_PI); + std::string text = buf; + setPositionText(onSketchPos, text); + EditCurve[1] = onSketchPos; sketchgui->drawEdit(EditCurve); if (seekAutoConstraint(sugConstr2, onSketchPos, onSketchPos - EditCurve[0])) { @@ -301,15 +307,22 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { - setPositionText(onSketchPos); if (Mode==STATUS_SEEK_First) { + setPositionText(onSketchPos); if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr1); return; } } else if (Mode==STATUS_SEEK_Second) { + float dx = onSketchPos.fX - EditCurve[0].fX; + float dy = onSketchPos.fY - EditCurve[0].fY; + char buf[40]; + sprintf(buf, " (%.1f x %.1f)", dx, dy); + std::string text = buf; + setPositionText(onSketchPos, text); + EditCurve[2] = onSketchPos; EditCurve[1] = Base::Vector2D(onSketchPos.fX ,EditCurve[0].fY); EditCurve[3] = Base::Vector2D(EditCurve[0].fX,onSketchPos.fY); @@ -596,8 +609,8 @@ public: virtual void mouseMove(Base::Vector2D onSketchPos) { suppressTransition = false; - setPositionText(onSketchPos); if (Mode==STATUS_SEEK_First) { + setPositionText(onSketchPos); if (seekAutoConstraint(sugConstr1, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr1); return; @@ -622,7 +635,17 @@ public: EditCurve[1].ProjToLine(EditCurve[2] - EditCurve[0], Perpendicular); EditCurve[1] = EditCurve[0] + EditCurve[1]; } + sketchgui->drawEdit(EditCurve); + + float length = (EditCurve[1] - EditCurve[0]).Length(); + float angle = (EditCurve[1] - EditCurve[0]).GetAngle(Base::Vector2D(1.f,0.f)); + + char buf[40]; + sprintf(buf, " (%.1f,%.1f)", length, angle * 180 / M_PI); + std::string text = buf; + setPositionText(EditCurve[1], text); + if (TransitionMode == TRANSITION_MODE_Free) { if (seekAutoConstraint(sugConstr2, onSketchPos, onSketchPos - EditCurve[0])) { renderSuggestConstraintsCursor(sugConstr2); @@ -680,6 +703,12 @@ public: EditCurve[31] = EditCurve[0]; sketchgui->drawEdit(EditCurve); + + char buf[40]; + sprintf(buf, " (%.1fR,%.1f)", std::abs(arcRadius), arcAngle * 180 / M_PI); + std::string text = buf; + setPositionText(onSketchPos, text); + if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f))) { renderSuggestConstraintsCursor(sugConstr2); return; @@ -1017,10 +1046,10 @@ public: // Display radius and start angle float radius = (onSketchPos - EditCurve[0]).Length(); - float angle = atan2f(dy_ , dx_) * 180 / M_PI; + float angle = atan2f(dy_ , dx_); char buf[40]; - sprintf( buf, " (R%.1f,%.1f)", radius, angle); + sprintf(buf, " (%.1fR,%.1f)", radius, angle * 180 / M_PI); std::string text = buf; setPositionText(onSketchPos, text); @@ -1042,11 +1071,11 @@ public: EditCurve[i] = Base::Vector2D(CenterPoint.fX + dx, CenterPoint.fY + dy); } - // Display radius and end angle + // Display radius and arc angle float radius = (onSketchPos - EditCurve[0]).Length(); char buf[40]; - sprintf( buf, " (R%.1f,%.1f)", radius, arcAngle * 180 / M_PI); + sprintf(buf, " (%.1fR,%.1f)", radius, arcAngle * 180 / M_PI); std::string text = buf; setPositionText(onSketchPos, text); @@ -1256,7 +1285,7 @@ public: float radius = (onSketchPos - EditCurve[0]).Length(); char buf[40]; - sprintf( buf, "R%.1f", radius); + sprintf(buf, " (%.1fR)", radius); std::string text = buf; setPositionText(onSketchPos, text); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 981fee2c9..40b2a5ae4 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2834,7 +2834,7 @@ void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos, const std::s void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos) { char buf[40]; - sprintf( buf, " (%.1f,%.1f)", Pos.fX,Pos.fY ); + sprintf(buf, " (%.1f,%.1f)", Pos.fX, Pos.fY); edit->textX->string = buf; edit->textPos->translation = SbVec3f(Pos.fX,Pos.fY,zText); } From fef08056a14a458e380ecde489805b8d1b871942 Mon Sep 17 00:00:00 2001 From: logari81 Date: Tue, 7 Aug 2012 01:21:45 +0200 Subject: [PATCH 483/517] Sketcher, Issue 0000808: fix one more issue with restoring of external geometry --- src/Mod/Sketcher/App/SketchObject.cpp | 4 ++-- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 82813a607..1c2bd9a33 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -1350,6 +1350,8 @@ void SketchObject::rebuildExternalGeometry(void) break; } } + + rebuildVertexIndex(); } std::vector SketchObject::getCompleteGeometry(void) const @@ -1491,8 +1493,6 @@ void SketchObject::Restore(XMLReader &reader) { // read the father classes Part::Part2DObject::Restore(reader); - Constraints.acceptGeometry(getCompleteGeometry()); - rebuildVertexIndex(); } void SketchObject::onChanged(const App::Property* prop) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 40b2a5ae4..7c0072a16 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -1716,7 +1716,7 @@ void ViewProviderSketch::draw(bool temp) Points.push_back(start); Points.push_back(end); } - else if ((*it)->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) { // add a circle + else if ((*it)->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) { // add a bspline const Part::GeomBSplineCurve *spline = dynamic_cast(*it); Handle_Geom_BSplineCurve curve = Handle_Geom_BSplineCurve::DownCast(spline->handle()); From ba7be4f798d1eb85698362581690a7c64982037a Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 7 Aug 2012 10:59:54 +0200 Subject: [PATCH 484/517] 0000813: set colors dialog crash --- src/Gui/Document.cpp | 3 +++ src/Gui/TaskView/TaskDialog.h | 4 ++++ src/Mod/Part/Gui/TaskFaceColors.cpp | 28 ++++++++++++++++++++++ src/Mod/Part/Gui/TaskFaceColors.h | 7 ++++++ src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp | 3 +-- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 972d9d148..512f39186 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -187,6 +187,9 @@ bool Document::setEdit(Gui::ViewProvider* p, int ModNum) View3DInventor *activeView = dynamic_cast(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(d->_pcInEdit))); } diff --git a/src/Gui/TaskView/TaskDialog.h b/src/Gui/TaskView/TaskDialog.h index f6a0e402f..ec92a9dd2 100644 --- a/src/Gui/TaskView/TaskDialog.h +++ b/src/Gui/TaskView/TaskDialog.h @@ -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 Content; ButtonPosition pos; + +private: std::string documentName; }; diff --git a/src/Mod/Part/Gui/TaskFaceColors.cpp b/src/Mod/Part/Gui/TaskFaceColors.cpp index 61a112e90..ba593b5da 100644 --- a/src/Mod/Part/Gui/TaskFaceColors.cpp +++ b/src/Mod/Part/Gui/TaskFaceColors.cpp @@ -30,11 +30,15 @@ # include #endif +#include +#include + #include "ui_TaskFaceColors.h" #include "TaskFaceColors.h" #include "ViewProviderExt.h" #include +#include #include #include @@ -69,15 +73,20 @@ namespace PartGui { class FaceColors::Private { public: + typedef boost::signals::connection Connection; Ui_TaskFaceColors* ui; ViewProviderPartExt* vp; App::DocumentObject* obj; + Gui::Document* doc; std::vector current,perface; QSet index; + Connection connectDelDoc; + Connection connectDelObj; Private(ViewProviderPartExt* vp) : ui(new Ui_TaskFaceColors()), vp(vp) { obj = vp->getObject(); + doc = Gui::Application::Instance->getDocument(obj->getDocument()); // build up map edge->face TopTools_IndexedMapOfShape mapOfShape; @@ -110,14 +119,33 @@ FaceColors::FaceColors(ViewProviderPartExt* vp, QWidget* parent) FaceSelection* gate = new FaceSelection(d->vp->getObject()); Gui::Selection().addSelectionGate(gate); + + d->connectDelDoc = Gui::Application::Instance->signalDeleteDocument.connect(boost::bind + (&FaceColors::slotDeleteDocument, this, _1)); + d->connectDelObj = Gui::Application::Instance->signalDeletedObject.connect(boost::bind + (&FaceColors::slotDeleteObject, this, _1)); } FaceColors::~FaceColors() { Gui::Selection().rmvSelectionGate(); + d->connectDelDoc.disconnect(); + d->connectDelObj.disconnect(); delete d; } +void FaceColors::slotDeleteDocument(const Gui::Document& Doc) +{ + if (d->doc == &Doc) + Gui::Control().closeDialog(); +} + +void FaceColors::slotDeleteObject(const Gui::ViewProvider& obj) +{ + if (d->vp == &obj) + Gui::Control().closeDialog(); +} + void FaceColors::on_defaultButton_clicked() { std::fill(d->perface.begin(), d->perface.end(), d->vp->ShapeColor.getValue()); diff --git a/src/Mod/Part/Gui/TaskFaceColors.h b/src/Mod/Part/Gui/TaskFaceColors.h index eec3035ba..3ba96c9ce 100644 --- a/src/Mod/Part/Gui/TaskFaceColors.h +++ b/src/Mod/Part/Gui/TaskFaceColors.h @@ -27,6 +27,11 @@ #include #include +namespace Gui { + class Document; + class ViewProvider; +} + namespace PartGui { class ViewProviderPartExt; @@ -49,6 +54,8 @@ private Q_SLOTS: protected: void onSelectionChanged(const Gui::SelectionChanges& msg); void changeEvent(QEvent *e); + void slotDeleteDocument(const Gui::Document&); + void slotDeleteObject(const Gui::ViewProvider&); private: class Private; diff --git a/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp b/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp index e8e2451d8..0253bb4c3 100644 --- a/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp +++ b/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp @@ -42,7 +42,6 @@ TaskDlgEditSketch::TaskDlgEditSketch(ViewProviderSketch *sketchView) : TaskDialog(),sketchView(sketchView) { assert(sketchView); - documentName = sketchView->getObject()->getDocument()->getName(); Constraints = new TaskSketcherConstrains(sketchView); General = new TaskSketcherGeneral(sketchView); Messages = new TaskSketcherMessages(sketchView); @@ -77,7 +76,7 @@ bool TaskDlgEditSketch::accept() bool TaskDlgEditSketch::reject() { - std::string document = documentName; // needed because resetEdit() deletes this instance + std::string document = getDocumentName(); // needed because resetEdit() deletes this instance Gui::Command::doCommand(Gui::Command::Gui,"Gui.getDocument('%s').resetEdit()", document.c_str()); Gui::Command::doCommand(Gui::Command::Doc,"App.getDocument('%s').recompute()", document.c_str()); From 70d4048b38725d96cd4cbe16a6606b0c31a64eb7 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 9 Aug 2012 17:50:07 -0300 Subject: [PATCH 485/517] Arch: General optimization + More severe tests when constructing shapes + Allow to quickly export Arch views to DXF --- src/Mod/Arch/ArchSectionPlane.py | 42 +++++++---- src/Mod/Arch/ArchStructure.py | 7 +- src/Mod/Arch/ArchWall.py | 9 ++- src/Mod/Draft/importDXF.py | 117 +++++++++++++++++-------------- 4 files changed, 105 insertions(+), 70 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 7a65180a8..8dbb779ab 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -191,7 +191,7 @@ class _ArchDrawingView: obj.LineWidth = 0.35 obj.ShowCut = False obj.Proxy = self - self.Type = "DrawingView" + self.Type = "ArchSectionView" def execute(self, obj): if obj.Source: @@ -207,16 +207,34 @@ class _ArchDrawingView: def __setstate__(self,state): return None - def getShape(self, obj): + 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,direction) + [V0,V1,H0,H1] = Drawing.project(self.baseshape,self.direction) return V0.Edges+V1.Edges else: print "No shape has been computed yet" 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: + print "No shape has been computed yet" + return None + def updateSVG(self, obj,join=False): "encapsulates a svg fragment into a transformation node" import Part, DraftGeomUtils @@ -252,7 +270,7 @@ class _ArchDrawingView: hshapes = [] sshapes = [] p = FreeCAD.Placement(obj.Source.Placement) - direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1)) + self.direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1)) for o in objs: if o.isDerivedFrom("Part::Feature"): if o.Shape.isValid(): @@ -265,23 +283,17 @@ class _ArchDrawingView: for sh in shapes: for sol in sh.Solids: c = sol.cut(cutvolume) - nsh.append(c) s = sol.section(cutface) + nsh.extend(c.Solids) sshapes.append(s) if obj.ShowCut: c = sol.cut(invcutvolume) hshapes.append(c) shapes = nsh if shapes: + self.shapes = shapes self.baseshape = Part.makeCompound(shapes) - svgf = Drawing.projectToSVG(self.baseshape,direction) - #if shapes: - # base = shapes.pop().copy() - #for sh in shapes: - # try: - # base = base.fuse(sh) - # except: - # print "unable to fuse, passing..." + svgf = Drawing.projectToSVG(self.baseshape,self.direction) if svgf: svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') svgf = svgf.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') @@ -289,7 +301,7 @@ class _ArchDrawingView: svg += svgf if hshapes: hshapes = Part.makeCompound(hshapes) - svgh = Drawing.projectToSVG(hshapes,direction) + svgh = Drawing.projectToSVG(hshapes,self.direction) if svgh: svgh = svgh.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') svgh = svgh.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') @@ -306,7 +318,7 @@ class _ArchDrawingView: if (w.ShapeType == "Wire") and w.isClosed(): faces.append(Part.Face(w)) sshapes = Part.makeCompound(faces) - svgs = Drawing.projectToSVG(sshapes,direction) + svgs = Drawing.projectToSVG(sshapes,self.direction) if svgs: svgs = svgs.replace('stroke-width="0.35"','stroke-width="' + str(linewidth*st) + 'px"') svgs = svgs.replace('stroke-width="1"','stroke-width="' + str(linewidth*st) + 'px"') diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 175bd5f94..4bf4180f7 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -222,7 +222,12 @@ class _Structure(ArchComponent.Component): # finalizing else: if base: - if not base.isNull(): + if base.isValid() and (not base.isNull()) 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): diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 2f8e7d900..85507bf2d 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -381,6 +381,7 @@ class _Wall(ArchComponent.Component): 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: @@ -392,6 +393,7 @@ class _Wall(ArchComponent.Component): obj.Base.ViewObject.show() if base: + for app in obj.Additions: if Draft.getType(app) == "Window": # window @@ -427,7 +429,12 @@ class _Wall(ArchComponent.Component): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed - if not base.isNull(): + if base.isValid() and (not base.isNull()) 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: diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index ba8fa2909..8efd01723 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -1356,65 +1356,76 @@ def export(objectslist,filename,nospline=False): "called when freecad exports a file. If nospline=True, bsplines are exported as straight segs" global exportList exportList = objectslist - dxf = dxfLibrary.Drawing() - if (len(exportList) == 1) and (exportList[0].isDerivedFrom("Drawing::FeaturePage")): + + if (len(exportList) == 1) and (Draft.getType(exportList[0]) == "ArchSectionView"): + # arch view: export it "as is" + dxf = exportList[0].Proxy.getDXF() + if dxf: + f = open(filename,"w") + f.write(dxf) + f.close() + + elif (len(exportList) == 1) and (exportList[0].isDerivedFrom("Drawing::FeaturePage")): + # page: special hack-export! (see below) exportPage(exportList[0],filename) - return - for ob in exportList: - print "processing ",ob.Name - if ob.isDerivedFrom("Part::Feature"): - if not ob.Shape.isNull(): - if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetBool("dxfmesh"): - writeMesh(ob,dxf) - else: - if ob.Shape.ShapeType == 'Compound': - if (len(ob.Shape.Wires) == 1): - # only one wire in this compound, no lone edge -> polyline - if (len(ob.Shape.Wires[0].Edges) == len(ob.Shape.Edges)): - writeShape(ob,dxf,nospline) + + else: + # other cases, treat edges + dxf = dxfLibrary.Drawing() + for ob in exportList: + print "processing ",ob.Name + if ob.isDerivedFrom("Part::Feature"): + if not ob.Shape.isNull(): + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetBool("dxfmesh"): + writeMesh(ob,dxf) + else: + if ob.Shape.ShapeType == 'Compound': + if (len(ob.Shape.Wires) == 1): + # only one wire in this compound, no lone edge -> polyline + if (len(ob.Shape.Wires[0].Edges) == len(ob.Shape.Edges)): + writeShape(ob,dxf,nospline) + else: + # 1 wire + lone edges -> block + block = getBlock(ob) + dxf.blocks.append(block) + dxf.append(dxfLibrary.Insert(name=ob.Name.upper())) else: - # 1 wire + lone edges -> block + # all other cases: block block = getBlock(ob) dxf.blocks.append(block) dxf.append(dxfLibrary.Insert(name=ob.Name.upper())) else: - # all other cases: block - block = getBlock(ob) - dxf.blocks.append(block) - dxf.append(dxfLibrary.Insert(name=ob.Name.upper())) - else: - writeShape(ob,dxf,nospline) - - elif (ob.Type == "App::Annotation"): - - # texts - - # temporary - as dxfLibrary doesn't support mtexts well, we use several single-line texts - # well, anyway, at the moment, Draft only writes single-line texts, so... - for text in ob.LabelText: - point = DraftVecUtils.tup(FreeCAD.Vector(ob.Position.x, - ob.Position.y-ob.LabelText.index(text), - ob.Position.z)) - if gui: height = float(ob.ViewObject.FontSize) - else: height = 1 - dxf.append(dxfLibrary.Text(text,point,height=height, - color=getACI(ob,text=True), - style='STANDARD', - layer=getGroup(ob,exportList))) - - elif 'Dimline' in ob.PropertiesList: - p1 = DraftVecUtils.tup(ob.Start) - p2 = DraftVecUtils.tup(ob.End) - base = Part.Line(ob.Start,ob.End).toShape() - proj = DraftGeomUtils.findDistance(ob.Dimline,base) - if not proj: - pbase = DraftVecUtils.tup(ob.End) - else: - pbase = DraftVecUtils.tup(ob.End.add(DraftVecUtils.neg(proj))) - dxf.append(dxfLibrary.Dimension(pbase,p1,p2,color=getACI(ob), - layer=getGroup(ob,exportList))) - - dxf.saveas(filename) + writeShape(ob,dxf,nospline) + + elif Draft.getType(ob) == "Annotation": + # texts + + # temporary - as dxfLibrary doesn't support mtexts well, we use several single-line texts + # well, anyway, at the moment, Draft only writes single-line texts, so... + for text in ob.LabelText: + point = DraftVecUtils.tup(FreeCAD.Vector(ob.Position.x, + ob.Position.y-ob.LabelText.index(text), + ob.Position.z)) + if gui: height = float(ob.ViewObject.FontSize) + else: height = 1 + dxf.append(dxfLibrary.Text(text,point,height=height, + color=getACI(ob,text=True), + style='STANDARD', + layer=getGroup(ob,exportList))) + + elif Draft.getType(ob) == "Dimension": + p1 = DraftVecUtils.tup(ob.Start) + p2 = DraftVecUtils.tup(ob.End) + base = Part.Line(ob.Start,ob.End).toShape() + proj = DraftGeomUtils.findDistance(ob.Dimline,base) + if not proj: + pbase = DraftVecUtils.tup(ob.End) + else: + pbase = DraftVecUtils.tup(ob.End.add(DraftVecUtils.neg(proj))) + dxf.append(dxfLibrary.Dimension(pbase,p1,p2,color=getACI(ob), + layer=getGroup(ob,exportList))) + + dxf.saveas(filename) FreeCAD.Console.PrintMessage("successfully exported "+filename+"\r\n") def exportPage(page,filename): From 1a46232a53d80f96e865a8659cec1faf81553ecf Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 9 Aug 2012 20:02:54 -0300 Subject: [PATCH 486/517] Arch: small bugfix in structure object --- src/Mod/Arch/ArchStructure.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 4bf4180f7..e08aaf275 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -168,9 +168,9 @@ class _Structure(ArchComponent.Component): base = Part.Face(base.Wires[0]) base = base.extrude(normal) elif obj.Base.isDerivedFrom("Mesh::Feature"): - if obj.Mesh.isSolid(): - if obj.Mesh.countComponents() == 1: - sh = ArchCommands.getShapeFromMesh(obj.Mesh) + 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: From 408e1dc8e16a4f00f9662ea6101d45505ae0bc14 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 10 Aug 2012 11:04:26 +0200 Subject: [PATCH 487/517] Allow to customize cursor text color in sketcher --- src/Gui/DlgSettingsViewColor.cpp | 2 + src/Gui/DlgSettingsViewColor.ui | 47 +++++++++++++++++---- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 7 ++- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/Gui/DlgSettingsViewColor.cpp b/src/Gui/DlgSettingsViewColor.cpp index 1449489bd..aff8c5067 100644 --- a/src/Gui/DlgSettingsViewColor.cpp +++ b/src/Gui/DlgSettingsViewColor.cpp @@ -66,6 +66,7 @@ void DlgSettingsViewColor::saveSettings() checkBoxSelection->onSave(); HighlightColor->onSave(); SelectionColor->onSave(); + CursorTextColor->onSave(); EditedEdgeColor->onSave(); EditedVertexColor->onSave(); ConstructionColor->onSave(); @@ -85,6 +86,7 @@ void DlgSettingsViewColor::loadSettings() checkBoxSelection->onRestore(); HighlightColor->onRestore(); SelectionColor->onRestore(); + CursorTextColor->onRestore(); EditedEdgeColor->onRestore(); EditedVertexColor->onRestore(); ConstructionColor->onRestore(); diff --git a/src/Gui/DlgSettingsViewColor.ui b/src/Gui/DlgSettingsViewColor.ui index e17848a4e..709e7675b 100644 --- a/src/Gui/DlgSettingsViewColor.ui +++ b/src/Gui/DlgSettingsViewColor.ui @@ -7,7 +7,7 @@ 0 0 601 - 407 + 445
    @@ -369,7 +369,7 @@ 6 - + @@ -382,28 +382,28 @@ - + Edited vertex color - + Construction geometry - + Fully constrained geometry - + The color of construction geometry in edit mode @@ -423,7 +423,7 @@ - + The color of fully constrained geometry in edit mode @@ -443,7 +443,7 @@ - + The color of vertices being edited @@ -463,7 +463,7 @@ - + The color of edges being edited @@ -483,6 +483,30 @@ + + + + Cursor text color + + + + + + + + 0 + 0 + 255 + + + + CursorTextColor + + + View + + + @@ -530,6 +554,11 @@ checkBoxSelection HighlightColor SelectionColor + CursorTextColor + EditedEdgeColor + EditedVertexColor + ConstructionColor + FullyConstrainedColor radioButtonSimple radioButtonGradient checkMidColor diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 7c0072a16..ac165e199 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2735,9 +2735,14 @@ void ViewProviderSketch::createEditInventorNodes(void) edit->EditCurveSet = new SoLineSet; edit->EditRoot->addChild(edit->EditCurveSet); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View"); + float transparency; + SbColor cursorTextColor(0,0,1); + cursorTextColor.setPackedValue((uint32_t)hGrp->GetUnsigned("CursorTextColor", cursorTextColor.getPackedValue()), transparency); + // stuff for the edit coordinates ++++++++++++++++++++++++++++++++++++++ SoMaterial *EditMaterials = new SoMaterial; - EditMaterials->diffuseColor = SbColor(0,0,1); + EditMaterials->diffuseColor = cursorTextColor; edit->EditRoot->addChild(EditMaterials); SoSeparator *Coordsep = new SoSeparator(); From 0d351e98e20982384282aab554b144c40d9cbe63 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 11 Aug 2012 10:58:54 +0200 Subject: [PATCH 488/517] Proper handling of SystemExitException in Python --- src/Gui/Application.cpp | 22 +++++++++++++++++----- src/Gui/Command.cpp | 3 +++ src/Gui/Macro.cpp | 2 +- src/Gui/MainWindow.cpp | 3 +-- src/Gui/PythonConsole.cpp | 2 +- src/Main/MainGui.cpp | 3 +++ src/Mod/Web/Gui/BrowserView.cpp | 14 ++++++++------ src/Mod/Web/Gui/BrowserView.h | 6 +++--- 8 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index b7b8a8ea3..53dec5681 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -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& cfg = App::Application::Config(); std::map::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"); diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index 40fdb9557..f66adf95e 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -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()); diff --git a/src/Gui/Macro.cpp b/src/Gui/Macro.cpp index 1ac796478..20a7f49c4 100644 --- a/src/Gui/Macro.cpp +++ b/src/Gui/Macro.cpp @@ -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", diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index a13a16c2c..cccdf146b 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -1157,8 +1157,7 @@ void MainWindow::delayedStartup() App::Application::processCmdLineFiles(); } catch (const Base::SystemExitException&) { - QApplication::quit(); - return; + throw; } const std::map& cfg = App::Application::Config(); diff --git a/src/Gui/PythonConsole.cpp b/src/Gui/PythonConsole.cpp index 780789b71..eaa7f53cb 100644 --- a/src/Gui/PythonConsole.cpp +++ b/src/Gui/PythonConsole.cpp @@ -709,7 +709,7 @@ void PythonConsole::runSource(const QString& line) } if (ret == QMessageBox::Yes) { PyErr_Clear(); - qApp->quit(); + throw; } else { PyErr_Clear(); diff --git a/src/Main/MainGui.cpp b/src/Main/MainGui.cpp index 5552bd6b4..288bc3df2 100644 --- a/src/Main/MainGui.cpp +++ b/src/Main/MainGui.cpp @@ -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()); } diff --git a/src/Mod/Web/Gui/BrowserView.cpp b/src/Mod/Web/Gui/BrowserView.cpp index 81c02dd8b..04739a351 100644 --- a/src/Mod/Web/Gui/BrowserView.cpp +++ b/src/Mod/Web/Gui/BrowserView.cpp @@ -114,7 +114,7 @@ BrowserView::BrowserView(QWidget* parent) connect(view, SIGNAL(loadProgress(int)), this, SLOT(onLoadProgress(int))); connect(view, SIGNAL(loadFinished(bool)), - this, SLOT(onLoadFinished())); + this, SLOT(onLoadFinished(bool))); connect(view, SIGNAL(linkClicked(const QUrl &)), this, SLOT(onLinkClicked(const QUrl &))); connect(view->page(), SIGNAL(downloadRequested(const QNetworkRequest &)), @@ -242,12 +242,14 @@ void BrowserView::onLoadProgress(int step) bar->setValue(step); } -void BrowserView::onLoadFinished() +void BrowserView::onLoadFinished(bool ok) { - QProgressBar* bar = Sequencer::instance()->getProgressBar(); - bar->setValue(100); - bar->hide(); - getMainWindow()->statusBar()->showMessage(QString()); + if (ok) { + QProgressBar* bar = Sequencer::instance()->getProgressBar(); + bar->setValue(100); + bar->hide(); + getMainWindow()->statusBar()->showMessage(QString()); + } isLoading = false; } diff --git a/src/Mod/Web/Gui/BrowserView.h b/src/Mod/Web/Gui/BrowserView.h index c32dfd659..553ccd160 100644 --- a/src/Mod/Web/Gui/BrowserView.h +++ b/src/Mod/Web/Gui/BrowserView.h @@ -92,10 +92,10 @@ public: protected Q_SLOTS: void onLoadStarted(); void onLoadProgress(int); - void onLoadFinished(); - void onLinkClicked ( const QUrl & url ) ; + void onLoadFinished(bool); + void onLinkClicked (const QUrl& url); bool chckHostAllowed(const QString& host); - void onDownloadRequested(const QNetworkRequest & request); + void onDownloadRequested(const QNetworkRequest& request); private: WebView* view; From 1859ec25597f3e133af7d07b5b3f12274dd8a2f0 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 11 Aug 2012 15:09:08 +0200 Subject: [PATCH 489/517] Add utility class to better debug algorithms --- src/Base/CMakeLists.txt | 3 ++ src/Base/Debugger.cpp | 80 +++++++++++++++++++++++++++++ src/Base/Debugger.h | 76 +++++++++++++++++++++++++++ src/Base/PreCompiled.h | 2 + src/Mod/Mesh/App/Core/Algorithm.cpp | 11 ++++ src/Mod/Mesh/App/Core/Algorithm.h | 4 ++ 6 files changed, 176 insertions(+) create mode 100644 src/Base/Debugger.cpp create mode 100644 src/Base/Debugger.h diff --git a/src/Base/CMakeLists.txt b/src/Base/CMakeLists.txt index 3cab43354..4b5a06170 100644 --- a/src/Base/CMakeLists.txt +++ b/src/Base/CMakeLists.txt @@ -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 diff --git a/src/Base/Debugger.cpp b/src/Base/Debugger.cpp new file mode 100644 index 000000000..2b08f0aa4 --- /dev/null +++ b/src/Base/Debugger.cpp @@ -0,0 +1,80 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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 +# include +#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" diff --git a/src/Base/Debugger.h b/src/Base/Debugger.h new file mode 100644 index 000000000..114b7e38b --- /dev/null +++ b/src/Base/Debugger.h @@ -0,0 +1,76 @@ +/*************************************************************************** + * Copyright (c) 2012 Werner Mayer * + * * + * 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 +#include + +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 diff --git a/src/Base/PreCompiled.h b/src/Base/PreCompiled.h index f3b7dba3b..8d9663454 100644 --- a/src/Base/PreCompiled.h +++ b/src/Base/PreCompiled.h @@ -105,6 +105,8 @@ // QtCore #include #include +#include +#include #include #include #include diff --git a/src/Mod/Mesh/App/Core/Algorithm.cpp b/src/Mod/Mesh/App/Core/Algorithm.cpp index f72bba760..828a6675a 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.cpp +++ b/src/Mod/Mesh/App/Core/Algorithm.cpp @@ -255,6 +255,17 @@ float MeshAlgorithm::GetAverageEdgeLength() const return fLen; } +Base::Vector3f MeshAlgorithm::GetGravityPoint() const +{ + Base::Vector3f center; + MeshPointIterator cP(_rclMesh); + for (cP.Init(); cP.More(); cP.Next()) { + center += *cP; + } + + return center / (float)_rclMesh.CountPoints(); +} + void MeshAlgorithm::GetMeshBorders (std::list > &rclBorders) const { std::vector aulAllFacets(_rclMesh.CountFacets()); diff --git a/src/Mod/Mesh/App/Core/Algorithm.h b/src/Mod/Mesh/App/Core/Algorithm.h index 78a4caf5b..7d55d6e94 100644 --- a/src/Mod/Mesh/App/Core/Algorithm.h +++ b/src/Mod/Mesh/App/Core/Algorithm.h @@ -115,6 +115,10 @@ public: * Calculates the average length of edges. */ float GetAverageEdgeLength() const; + /** + * Calculates the gravity point of the mesh. + */ + Base::Vector3f GetGravityPoint() const; /** * Returns all boundaries of the mesh. */ From 7a338f30cb9c16bf678248ab8de3559482bdbbb3 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 11 Aug 2012 18:28:18 -0300 Subject: [PATCH 490/517] 0000634: Draft to Sketch conversion --- src/Mod/Draft/Draft.py | 45 ++++++++++++++++----------------- src/Mod/Draft/DraftGeomUtils.py | 29 +++++++++++---------- src/Mod/Draft/DraftTools.py | 2 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index d9e4d0a99..337d49756 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1562,10 +1562,8 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,name="Sketch"): if tp == "BSpline": print "makeSketch: BSplines not supported" elif tp == "Circle": - if obj.FirstAngle == obj.LastAngle: - nobj.addGeometry(obj.Shape.Edges[0].Curve) - else: - nobj.addGeometry(Part.ArcOfCircle(obj.Shape.Edges[0].Curve,math.radians(obj.FirstAngle),math.radians(obj.LastAngle))) + g = (DraftGeomUtils.geom(obj.Shape.Edges[0],nobj.Placement)) + nobj.addGeometry(g) # TODO add Radius constraits ok = True elif tp == "Rectangle": @@ -1586,25 +1584,26 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,name="Sketch"): nobj.addConstraint(Constraint("Vertical",last)) ok = True elif tp in ["Wire","Polygon"]: - closed = False - if tp == "Polygon": - closed = True - elif hasattr(obj,"Closed"): - closed = obj.Closed - for edge in obj.Shape.Edges: - nobj.addGeometry(edge.Curve) - if autoconstraints: - last = nobj.GeometryCount - segs = range(last-len(obj.Shape.Edges),last-1) - for seg in segs: - nobj.addConstraint(Constraint("Coincident",seg,EndPoint,seg+1,StartPoint)) - if DraftGeomUtils.isAligned(nobj.Geometry[seg],"x"): - nobj.addConstraint(Constraint("Vertical",seg)) - elif DraftGeomUtils.isAligned(nobj.Geometry[seg],"y"): - nobj.addConstraint(Constraint("Horizontal",seg)) - if closed: - nobj.addConstraint(Constraint("Coincident",last-1,EndPoint,segs[0],StartPoint)) - ok = True + if obj.FilletRadius == 0: + closed = False + if tp == "Polygon": + closed = True + elif hasattr(obj,"Closed"): + closed = obj.Closed + for edge in obj.Shape.Edges: + nobj.addGeometry(edge.Curve) + if autoconstraints: + last = nobj.GeometryCount + segs = range(last-len(obj.Shape.Edges),last-1) + for seg in segs: + nobj.addConstraint(Constraint("Coincident",seg,EndPoint,seg+1,StartPoint)) + if DraftGeomUtils.isAligned(nobj.Geometry[seg],"x"): + nobj.addConstraint(Constraint("Vertical",seg)) + elif DraftGeomUtils.isAligned(nobj.Geometry[seg],"y"): + nobj.addConstraint(Constraint("Horizontal",seg)) + if closed: + nobj.addConstraint(Constraint("Coincident",last-1,EndPoint,segs[0],StartPoint)) + ok = True if (not ok) and obj.isDerivedFrom("Part::Feature"): if not DraftGeomUtils.isPlanar(obj.Shape): print "Error: The given object is not planar and cannot be converted into a sketch." diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index 10ee860a0..441809d22 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -39,14 +39,14 @@ precision = params.GetInt("precision") def vec(edge): - "vec(edge) or vec(line) -- returns a vector from an edge or a Part.line" - # if edge is not straight, you'll get strange results! - if isinstance(edge,Part.Shape): - return edge.Vertexes[-1].Point.sub(edge.Vertexes[0].Point) - elif isinstance(edge,Part.Line): - return edge.EndPoint.sub(edge.StartPoint) - else: - return None + "vec(edge) or vec(line) -- returns a vector from an edge or a Part.line" + # if edge is not straight, you'll get strange results! + if isinstance(edge,Part.Shape): + return edge.Vertexes[-1].Point.sub(edge.Vertexes[0].Point) + elif isinstance(edge,Part.Line): + return edge.EndPoint.sub(edge.StartPoint) + else: + return None def edg(p1,p2): "edg(Vector,Vector) -- returns an edge from 2 vectors" @@ -370,17 +370,18 @@ def geom(edge,plac=FreeCAD.Placement()): c = edge.Curve.Center cu = Part.Circle(edge.Curve.Center,normal,edge.Curve.Radius) ref = plac.Rotation.multVec(Vector(1,0,0)) - a1 = math.pi + DraftVecUtils.angle(v1.sub(c),ref,normal) - a2 = DraftVecUtils.angle(v2.sub(c),ref,normal) + a1 = DraftVecUtils.angle(v1.sub(c),ref,DraftVecUtils.neg(normal)) + a2 = DraftVecUtils.angle(v2.sub(c),ref,DraftVecUtils.neg(normal)) # direction check - if a1 > a2: + if edge.Curve.Axis.getAngle(normal) > 1: a1,a2 = a2,a1 - #print "creating sketch arc from ",cu, ", p1=",v1, " (",math.degrees(a1), "d) p2=",v2," (", math.degrees(a2),"d)" + p= Part.ArcOfCircle(cu,a1,a2) return p else: + print edge.Curve return edge.Curve def mirror (point, edge): @@ -772,8 +773,8 @@ def getNormal(shape): if (shape.ShapeType == "Face") and hasattr(shape,"normalAt"): n = shape.normalAt(0.5,0.5) elif shape.ShapeType == "Edge": - if isinstance(shape.Curve,Part.Circle): - n = shape.Curve.Axis + if isinstance(shape.Edges[0].Curve,Part.Circle): + n = shape.Edges[0].Curve.Axis else: for e in shape.Edges: if isinstance(e.Curve,Part.Circle): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 10d1bb382..916632716 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3711,7 +3711,7 @@ class Draft2Sketch(): elif obj.isDerivedFrom("Part::Part2DObjectPython"): Draft.makeSketch(obj,autoconstraints=True) elif obj.isDerivedFrom("Part::Feature"): - if len(obj.Shape.Wires) == 1: + if (len(obj.Shape.Wires) == 1) or (len(obj.Shape.Edges) == 1): Draft.makeSketch(obj,autoconstraints=False) FreeCAD.ActiveDocument.commitTransaction() From 96c5dda4ebc4c0d3f9d693008c16fe092d622cd9 Mon Sep 17 00:00:00 2001 From: logari81 Date: Sun, 12 Aug 2012 12:21:53 +0200 Subject: [PATCH 491/517] Sketcher: crashes fix and other small fixes for the polyline tool --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 48 +++++++++++---------- src/Mod/Sketcher/Gui/DrawSketchHandler.cpp | 2 +- src/Mod/Sketcher/Gui/DrawSketchHandler.h | 2 +- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 10 ++--- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 2 +- 5 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index f008aa82b..26a5e23d2 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -152,9 +152,8 @@ public: else if (Mode==STATUS_SEEK_Second){ float length = (onSketchPos - EditCurve[0]).Length(); float angle = (onSketchPos - EditCurve[0]).GetAngle(Base::Vector2D(1.f,0.f)); - char buf[40]; - sprintf(buf, " (%.1f,%.1f)", length, angle * 180 / M_PI); - std::string text = buf; + SbString text; + text.sprintf(" (%.1f,%.1fdeg)", length, angle * 180 / M_PI); setPositionText(onSketchPos, text); EditCurve[1] = onSketchPos; @@ -318,9 +317,8 @@ public: else if (Mode==STATUS_SEEK_Second) { float dx = onSketchPos.fX - EditCurve[0].fX; float dy = onSketchPos.fY - EditCurve[0].fY; - char buf[40]; - sprintf(buf, " (%.1f x %.1f)", dx, dy); - std::string text = buf; + SbString text; + text.sprintf(" (%.1f x %.1f)", dx, dy); setPositionText(onSketchPos, text); EditCurve[2] = onSketchPos; @@ -529,6 +527,9 @@ public: virtual void registerPressedKey(bool pressed, int key) { + if (Mode != STATUS_SEEK_Second) + return; // SegmentMode can be changed only in STATUS_SEEK_Second mode + if (key == SoKeyboardEvent::M && pressed && previousCurve != -1) { // loop through the following modes: // SEGMENT_MODE_Line, TRANSITION_MODE_Free / TRANSITION_MODE_Tangent @@ -641,9 +642,8 @@ public: float length = (EditCurve[1] - EditCurve[0]).Length(); float angle = (EditCurve[1] - EditCurve[0]).GetAngle(Base::Vector2D(1.f,0.f)); - char buf[40]; - sprintf(buf, " (%.1f,%.1f)", length, angle * 180 / M_PI); - std::string text = buf; + SbString text; + text.sprintf(" (%.1f,%.1fdeg)", length, angle * 180 / M_PI); setPositionText(EditCurve[1], text); if (TransitionMode == TRANSITION_MODE_Free) { @@ -675,6 +675,8 @@ public: float y3 = onSketchPos.fY; if ((x2*y3-x3*y2)-(x1*y3-x3*y1)+(x1*y2-x2*y1) > 0) arcRadius *= -1; + if (isnan(arcRadius) || isinf(arcRadius)) + arcRadius = 0.f; CenterPoint = EditCurve[0] + Base::Vector2D(arcRadius * Tangent.fY, -arcRadius * Tangent.fX); @@ -686,6 +688,8 @@ public: float rxe = onSketchPos.fX - CenterPoint.fX; float rye = onSketchPos.fY - CenterPoint.fY; float arcAngle = atan2(-rxe*ry + rye*rx, rxe*rx + rye*ry); + if (isnan(arcAngle) || isinf(arcAngle)) + arcAngle = 0.f; if (arcRadius >= 0 && arcAngle > 0) arcAngle -= 2*M_PI; if (arcRadius < 0 && arcAngle < 0) @@ -704,9 +708,8 @@ public: sketchgui->drawEdit(EditCurve); - char buf[40]; - sprintf(buf, " (%.1fR,%.1f)", std::abs(arcRadius), arcAngle * 180 / M_PI); - std::string text = buf; + SbString text; + text.sprintf(" (%.1fR,%.1fdeg)", std::abs(arcRadius), arcAngle * 180 / M_PI); setPositionText(onSketchPos, text); if (seekAutoConstraint(sugConstr2, onSketchPos, Base::Vector2D(0.f,0.f))) { @@ -789,6 +792,10 @@ public: EditCurve[0].fX,EditCurve[0].fY,EditCurve[1].fX,EditCurve[1].fY); } else if (SegmentMode == SEGMENT_MODE_Arc) { // We're dealing with an Arc + if (!isnormal(arcRadius)) { + Mode = STATUS_SEEK_Second; + return true; + } Gui::Command::openCommand("Add arc to sketch wire"); Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.%s.addGeometry(Part.ArcOfCircle" @@ -887,7 +894,7 @@ public: } SegmentMode = SEGMENT_MODE_Line; EditCurve[1] = EditCurve[0]; - sketchgui->drawEdit(EditCurve); + mouseMove(onSketchPos); // trigger an update of EditCurve } } return true; @@ -1048,9 +1055,8 @@ public: float radius = (onSketchPos - EditCurve[0]).Length(); float angle = atan2f(dy_ , dx_); - char buf[40]; - sprintf(buf, " (%.1fR,%.1f)", radius, angle * 180 / M_PI); - std::string text = buf; + SbString text; + text.sprintf(" (%.1fR,%.1fdeg)", radius, angle * 180 / M_PI); setPositionText(onSketchPos, text); sketchgui->drawEdit(EditCurve); @@ -1074,9 +1080,8 @@ public: // Display radius and arc angle float radius = (onSketchPos - EditCurve[0]).Length(); - char buf[40]; - sprintf(buf, " (%.1fR,%.1f)", radius, arcAngle * 180 / M_PI); - std::string text = buf; + SbString text; + text.sprintf(" (%.1fR,%.1fdeg)", radius, arcAngle * 180 / M_PI); setPositionText(onSketchPos, text); sketchgui->drawEdit(EditCurve); @@ -1284,9 +1289,8 @@ public: // Display radius for user float radius = (onSketchPos - EditCurve[0]).Length(); - char buf[40]; - sprintf(buf, " (%.1fR)", radius); - std::string text = buf; + SbString text; + text.sprintf(" (%.1fR)", radius); setPositionText(onSketchPos, text); sketchgui->drawEdit(EditCurve); diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp index f5a308b78..acd593f54 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp @@ -381,7 +381,7 @@ void DrawSketchHandler::renderSuggestConstraintsCursor(std::vectorsetPositionText(Pos, text); } diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandler.h b/src/Mod/Sketcher/Gui/DrawSketchHandler.h index 15043e1ea..84bf628c1 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandler.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.h @@ -89,7 +89,7 @@ public: void createAutoConstraints(const std::vector &autoConstrs, int geoId, Sketcher::PointPos pointPos=Sketcher::none); - void setPositionText(const Base::Vector2D &Pos, const std::string &text); + void setPositionText(const Base::Vector2D &Pos, const SbString &text); void setPositionText(const Base::Vector2D &Pos); void resetPositionText(void); void renderSuggestConstraintsCursor(std::vector &suggestedConstraints); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index ac165e199..5106f3c9a 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2830,17 +2830,17 @@ void ViewProviderSketch::unsetEditViewer(Gui::View3DInventorViewer* viewer) static_cast(root)->selectionRole.setValue(TRUE); } -void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos, const std::string &text) +void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos, const SbString &text) { - edit->textX->string = text.c_str(); + edit->textX->string = text; edit->textPos->translation = SbVec3f(Pos.fX,Pos.fY,zText); } void ViewProviderSketch::setPositionText(const Base::Vector2D &Pos) { - char buf[40]; - sprintf(buf, " (%.1f,%.1f)", Pos.fX, Pos.fY); - edit->textX->string = buf; + SbString text; + text.sprintf(" (%.1f,%.1f)", Pos.fX, Pos.fY); + edit->textX->string = text; edit->textPos->translation = SbVec3f(Pos.fX,Pos.fY,zText); } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 9b05d69cc..f60e15ded 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -199,7 +199,7 @@ protected: /// build up the visual of the constraints void rebuildConstraintsVisual(void); - void setPositionText(const Base::Vector2D &Pos, const std::string &txt); + void setPositionText(const Base::Vector2D &Pos, const SbString &txt); void setPositionText(const Base::Vector2D &Pos); void resetPositionText(void); From ec0ae08612652c5a1a0d2145cb6f58c5441a7bdb Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 13 Aug 2012 10:26:02 +0200 Subject: [PATCH 492/517] Fix build errors on Windows --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 7 ++++--- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 26a5e23d2..3822e1214 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -25,6 +25,7 @@ #ifndef _PreComp_ #endif +#include #include #include @@ -675,7 +676,7 @@ public: float y3 = onSketchPos.fY; if ((x2*y3-x3*y2)-(x1*y3-x3*y1)+(x1*y2-x2*y1) > 0) arcRadius *= -1; - if (isnan(arcRadius) || isinf(arcRadius)) + if (boost::math::isnan(arcRadius) || boost::math::isinf(arcRadius)) arcRadius = 0.f; CenterPoint = EditCurve[0] + Base::Vector2D(arcRadius * Tangent.fY, -arcRadius * Tangent.fX); @@ -688,7 +689,7 @@ public: float rxe = onSketchPos.fX - CenterPoint.fX; float rye = onSketchPos.fY - CenterPoint.fY; float arcAngle = atan2(-rxe*ry + rye*rx, rxe*rx + rye*ry); - if (isnan(arcAngle) || isinf(arcAngle)) + if (boost::math::isnan(arcAngle) || boost::math::isinf(arcAngle)) arcAngle = 0.f; if (arcRadius >= 0 && arcAngle > 0) arcAngle -= 2*M_PI; @@ -792,7 +793,7 @@ public: EditCurve[0].fX,EditCurve[0].fY,EditCurve[1].fX,EditCurve[1].fY); } else if (SegmentMode == SEGMENT_MODE_Arc) { // We're dealing with an Arc - if (!isnormal(arcRadius)) { + if (!boost::math::isnormal(arcRadius)) { Mode = STATUS_SEEK_Second; return true; } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index f60e15ded..4a850ae3c 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -43,6 +43,7 @@ class SoMarkerSet; class SoText2; class SoTranslation; +class SbString; class SbTime; struct EditData; From 53697d3bd207ed4f970d7a726625e315975b7147 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 13 Aug 2012 12:50:07 +0200 Subject: [PATCH 493/517] Convert unicode into string for de-serialized strings from JSON --- src/Gui/ViewProviderPythonFeature.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Gui/ViewProviderPythonFeature.cpp b/src/Gui/ViewProviderPythonFeature.cpp index ed84b97dd..144d15815 100644 --- a/src/Gui/ViewProviderPythonFeature.cpp +++ b/src/Gui/ViewProviderPythonFeature.cpp @@ -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(); } From 81c839059a3d77dbbdcaf606d27f60869052c230 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 12 Aug 2012 22:55:17 -0300 Subject: [PATCH 494/517] 0000630: User-defined defaults for shape colors The default colors for new geometry (light grey + 2px black line) are now a user preference (In Display->Colors properties) --- src/Gui/DlgSettingsViewColor.cpp | 6 ++ src/Gui/DlgSettingsViewColor.ui | 124 ++++++++++++++++++++++--- src/Gui/ViewProviderGeometryObject.cpp | 10 +- src/Mod/Part/Gui/ViewProviderExt.cpp | 11 ++- 4 files changed, 132 insertions(+), 19 deletions(-) diff --git a/src/Gui/DlgSettingsViewColor.cpp b/src/Gui/DlgSettingsViewColor.cpp index aff8c5067..2bba4faac 100644 --- a/src/Gui/DlgSettingsViewColor.cpp +++ b/src/Gui/DlgSettingsViewColor.cpp @@ -71,6 +71,9 @@ void DlgSettingsViewColor::saveSettings() EditedVertexColor->onSave(); ConstructionColor->onSave(); FullyConstrainedColor->onSave(); + DefaultShapeColor->onSave(); + DefaultShapeLineColor->onSave(); + DefaultShapeLineWidth->onSave(); } void DlgSettingsViewColor::loadSettings() @@ -91,6 +94,9 @@ void DlgSettingsViewColor::loadSettings() EditedVertexColor->onRestore(); ConstructionColor->onRestore(); FullyConstrainedColor->onRestore(); + DefaultShapeColor->onRestore(); + DefaultShapeLineColor->onRestore(); + DefaultShapeLineWidth->onRestore(); } /** diff --git a/src/Gui/DlgSettingsViewColor.ui b/src/Gui/DlgSettingsViewColor.ui index 709e7675b..bcd5cd44f 100644 --- a/src/Gui/DlgSettingsViewColor.ui +++ b/src/Gui/DlgSettingsViewColor.ui @@ -361,7 +361,20 @@ Default colors - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + 0 @@ -509,18 +522,98 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - + + + + + + + 240 + 0 + + + + Default shape color + + + + + + + The default color for new shapes + + + + 204 + 204 + 204 + + + + DefaultShapeColor + + + View + + + + + + + + + + + + 182 + 0 + + + + Default line width and color + + + + + + + The default line color for new shapes + + + + 25 + 25 + 25 + + + + DefaultShapeLineColor + + + View + + + + + + + The default line thickness for new shapes + + + px + + + 2 + + + DefaultShapeLineWidth + + + View + + + + @@ -533,6 +626,11 @@ QPushButton
    Gui/Widgets.h
    + + Gui::PrefSpinBox + QSpinBox +
    Gui/PrefWidgets.h
    +
    Gui::PrefColorButton Gui::ColorButton diff --git a/src/Gui/ViewProviderGeometryObject.cpp b/src/Gui/ViewProviderGeometryObject.cpp index 4e17a85e1..4b5b33c3a 100644 --- a/src/Gui/ViewProviderGeometryObject.cpp +++ b/src/Gui/ViewProviderGeometryObject.cpp @@ -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(); diff --git a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp index 1c2584813..b066476eb 100644 --- a/src/Mod/Part/Gui/ViewProviderExt.cpp +++ b/src/Mod/Part/Gui/ViewProviderExt.cpp @@ -125,9 +125,14 @@ ViewProviderPartExt::ViewProviderPartExt() { VisualTouched = true; + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View"); + unsigned long lcol = hGrp->GetUnsigned("DefaultShapeLineColor",421075455UL); // dark grey (25,25,25) + float r,g,b; + r = ((lcol >> 24) & 0xff) / 255.0; g = ((lcol >> 16) & 0xff) / 255.0; b = ((lcol >> 8) & 0xff) / 255.0; + int lwidth = hGrp->GetInt("DefaultShapeLineWidth",2); App::Material mat; mat.ambientColor.set(0.2f,0.2f,0.2f); - mat.diffuseColor.set(0.1f,0.1f,0.1f); + mat.diffuseColor.set(r,g,b); mat.specularColor.set(0.0f,0.0f,0.0f); mat.emissiveColor.set(0.0f,0.0f,0.0f); mat.shininess = 1.0f; @@ -137,10 +142,10 @@ ViewProviderPartExt::ViewProviderPartExt() ADD_PROPERTY(LineColor,(mat.diffuseColor)); ADD_PROPERTY(PointColor,(mat.diffuseColor)); ADD_PROPERTY(DiffuseColor,(ShapeColor.getValue())); - ADD_PROPERTY(LineWidth,(2.0f)); + ADD_PROPERTY(LineWidth,(lwidth)); LineWidth.setConstraints(&sizeRange); PointSize.setConstraints(&sizeRange); - ADD_PROPERTY(PointSize,(2.0f)); + ADD_PROPERTY(PointSize,(lwidth)); ADD_PROPERTY(Deviation,(0.5f)); Deviation.setConstraints(&tessRange); ADD_PROPERTY(ControlPoints,(false)); From 36e48afce10d66f66a4d6724257c45ce7ba89f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Fri, 3 Aug 2012 12:25:14 +0200 Subject: [PATCH 495/517] Linear system matrix generation developed (only fluid involved for the moment) --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 3 +- src/Mod/Ship/simRun/Sim/__init__.py | 3 +- src/Mod/Ship/simRun/Sim/initialization.py | 10 +-- src/Mod/Ship/simRun/Sim/matrixGen.py | 82 +++++++++++++++++++++++ src/Mod/Ship/simRun/Simulation.py | 21 +++--- 6 files changed, 103 insertions(+), 17 deletions(-) create mode 100644 src/Mod/Ship/simRun/Sim/matrixGen.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 432c91576..822aa5f51 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -150,6 +150,7 @@ SET(SimRun_SRCS simRun/clSim/Utils.py simRun/Sim/__init__.py simRun/Sim/initialization.py + simRun/Sim/matrixGen.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index f2477550b..624a9c375 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -102,7 +102,8 @@ nobase_data_DATA = \ simRun/clSim/initialization.py \ simRun/clSim/Utils.py \ simRun/Sim/__init__.py \ - simRun/Sim/initialization.py + simRun/Sim/initialization.py \ + simRun/Sim/matrixGen.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py index f5acc886b..2e7a8647c 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -21,4 +21,5 @@ #* * #*************************************************************************** -import initialization +from initialization import * +from matrixGen import * diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py index 1c443ca85..87b2cbbfb 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -26,9 +26,9 @@ import numpy as np grav=9.81 -class perform: +class simInitialization: def __init__(self, FSmesh, waves, context=None, queue=None): - """ Constructor, includes program loading. + """ Constructor. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). @param context OpenCL context where apply. Only for compatibility, @@ -54,9 +54,9 @@ class perform: v = np.ndarray((nx,ny, 3), dtype=np.float32) f = np.ndarray((nx,ny, 3), dtype=np.float32) n = np.ndarray((nx,ny, 3), dtype=np.float32) - a = np.ndarray((nx,ny, 1), dtype=np.float32) - phi = np.ndarray((nx,ny, 1), dtype=np.float32) - Phi = np.ndarray((nx,ny, 1), dtype=np.float32) + a = np.ndarray((nx,ny), dtype=np.float32) + phi = np.ndarray((nx,ny), dtype=np.float32) + Phi = np.ndarray((nx,ny), dtype=np.float32) for i in range(0, nx): for j in range(0, ny): pos = FSmesh[i][j].pos diff --git a/src/Mod/Ship/simRun/Sim/matrixGen.py b/src/Mod/Ship/simRun/Sim/matrixGen.py new file mode 100644 index 000000000..5115735df --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/matrixGen.py @@ -0,0 +1,82 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# numpy +import numpy as np + +grav=9.81 + +class simMatrixGen: + def __init__(self, context=None, queue=None): + """ Constructor. + @param context OpenCL context where apply. Only for compatibility, + must be None. + @param queue OpenCL command queue. Only for compatibility, + must be None. + """ + self.context = context + self.queue = queue + + def execute(self, fs): + """ Compute system matrix. + @param fs Free surface instance. + @return Linear system matrix. + """ + self.fs = fs + nx = self.fs['Nx'] + ny = self.fs['Ny'] + nF = nx*ny + nB = 0 # No body for the moment + # Allocate matrix + N = nx*ny + nB + A = np.ndarray((N, N), dtype=np.float32) + # Fluid sources rows + for i in range(0,nx): + for j in range(0,ny): + # Append fluid effect + pos = self.fs['pos'][i,j] + A[i*ny+j,0:nF] = self.fluidEffect(pos) + # Append body effect + # ... + return A + + def fluidEffect(self, pos): + """ Compute fluid effect terms over desired position. Desingularized + sources must taken into account. + @param pos Point to evaluate. + @return Fluid effect row. + """ + nx = self.fs['Nx'] + ny = self.fs['Ny'] + nF = nx*ny + row = np.ndarray(nF, dtype=np.float32) + for i in range(0,nx): + for j in range(0,ny): + # Get source position (desingularized) + source = np.copy(self.fs['pos'][i,j]) + area = self.fs['area'][i,j] + source[2] = source[2] + np.sqrt(area) + # Get distance between points + d = np.linalg.norm(pos-source) + row[i*ny+j] = np.log(d)*area + return row \ No newline at end of file diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index a06f6b0d2..98117c639 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -21,7 +21,6 @@ #* * #*************************************************************************** -import time from math import * import threading @@ -80,19 +79,21 @@ class FreeCADShipSimulation(threading.Thread): self.active = True # Simulation stuff if self.device == None: - from Sim import initialization + from Sim import * else: - from clSim import initialization - msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") + from clSim import * + msg = Translator.translate("\t[Sim]: Initializating...\n") FreeCAD.Console.PrintMessage(msg) - init = initialization.perform(self.FSmesh,self.waves,self.context,self.queue) - msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") + init = simInitialization(self.FSmesh,self.waves,self.context,self.queue) + matGen = simMatrixGen(self.context,self.queue) + FS = init.fs + waves = init.waves + msg = Translator.translate("\t[Sim]: Iterating...\n") FreeCAD.Console.PrintMessage(msg) while self.active: - print("Im thread, Im running...") - time.sleep(1) - # ... - print("Im thread, step done!") + msg = Translator.translate("\t\t[Sim]: Generating linear system matrix...\n") + FreeCAD.Console.PrintMessage(msg) + A = matGen.execute(FS) # Set thread as stopped (and prepare it to restarting) self.active = False threading.Event().set() From 9bc0f7eea459014da3cd48813dd302ecbe5f6016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Fri, 3 Aug 2012 16:55:24 +0200 Subject: [PATCH 496/517] Linear systems solver developed (only fluid involved) --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 3 +- src/Mod/Ship/simRun/Sim/__init__.py | 1 + src/Mod/Ship/simRun/Sim/computeSources.py | 69 +++++++++++++++++++++++ src/Mod/Ship/simRun/Sim/initialization.py | 14 ++++- src/Mod/Ship/simRun/Sim/matrixGen.py | 7 +-- src/Mod/Ship/simRun/Simulation.py | 7 ++- 7 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 src/Mod/Ship/simRun/Sim/computeSources.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 822aa5f51..68fc8e924 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -151,6 +151,7 @@ SET(SimRun_SRCS simRun/Sim/__init__.py simRun/Sim/initialization.py simRun/Sim/matrixGen.py + simRun/Sim/computeSources.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 624a9c375..3a8c9718d 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -103,7 +103,8 @@ nobase_data_DATA = \ simRun/clSim/Utils.py \ simRun/Sim/__init__.py \ simRun/Sim/initialization.py \ - simRun/Sim/matrixGen.py + simRun/Sim/matrixGen.py \ + simRun/Sim/computeSources.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py index 2e7a8647c..a2fd6db39 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -23,3 +23,4 @@ from initialization import * from matrixGen import * +from computeSources import * diff --git a/src/Mod/Ship/simRun/Sim/computeSources.py b/src/Mod/Ship/simRun/Sim/computeSources.py new file mode 100644 index 000000000..fb57daa4e --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/computeSources.py @@ -0,0 +1,69 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# numpy +import numpy as np + +grav=9.81 + +class simComputeSources: + def __init__(self, context=None, queue=None): + """ Constructor. + @param context OpenCL context where apply. Only for compatibility, + must be None. + @param queue OpenCL command queue. Only for compatibility, + must be None. + """ + self.context = context + self.queue = queue + + def execute(self, fs, A): + """ Compute potential sources (for velocity potential and + acceleration potential). + @param fs Free surface instance. + @param A Linear system matrix. + """ + self.fs = fs + # Allocate memory + nx = self.fs['Nx'] + ny = self.fs['Ny'] + nF = nx*ny + nB = 0 # No body for the moment + N = nx*ny + nB + b = np.ndarray(N, dtype=np.float32) + bb = np.ndarray(N, dtype=np.float32) + s = np.ndarray(N, dtype=np.float32) + ss = np.ndarray(N, dtype=np.float32) + # Create independent terms + for i in range(0,nx): + for j in range(0,ny): + b[i*ny+j] = self.fs['velPot'][i,j] + bb[i*ny+j] = self.fs['accPot'][i,j] + # Solve systems + s = np.linalg.solve(A, b) + ss = np.linalg.solve(A, bb) + # Store sources + for i in range(0,nx): + for j in range(0,ny): + self.fs['velSrc'][i,j] = s[i*ny+j] + self.fs['accSrc'][i,j] = ss[i*ny+j] diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py index 87b2cbbfb..823ff535e 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -57,6 +57,8 @@ class simInitialization: a = np.ndarray((nx,ny), dtype=np.float32) phi = np.ndarray((nx,ny), dtype=np.float32) Phi = np.ndarray((nx,ny), dtype=np.float32) + s = np.ndarray((nx,ny), dtype=np.float32) + ss = np.ndarray((nx,ny), dtype=np.float32) for i in range(0, nx): for j in range(0, ny): pos = FSmesh[i][j].pos @@ -75,8 +77,13 @@ class simInitialization: n[i,j,1] = normal.y n[i,j,2] = normal.z a[i,j] = area + phi[i,j] = 0. + Phi[i,j] = 0. + s[i,j] = 0. + ss[i,j] = 0. self.fs = {'Nx':nx, 'Ny':ny, 'pos':p, 'vel':v, 'acc':f, \ - 'normal':n, 'area':a, 'velPot':phi, 'accPot':Phi} + 'normal':n, 'area':a, 'velPot':phi, 'accPot':Phi, \ + 'velSrc':s, 'accSrc':ss} # Waves data w = np.ndarray((nW, 4), dtype=np.float32) for i in range(0,nW): @@ -85,6 +92,11 @@ class simInitialization: w[i,2] = waves[i][2] w[i,3] = waves[i][3] self.waves = {'N':nW, 'data':w} + # Linear system matrix + nF = nx*ny + nB = 0 # No body for the moment + N = nx*ny + nB + self.A = np.ndarray((N, N), dtype=np.float32) def execute(self): """ Compute initial conditions. """ diff --git a/src/Mod/Ship/simRun/Sim/matrixGen.py b/src/Mod/Ship/simRun/Sim/matrixGen.py index 5115735df..4eab537bc 100644 --- a/src/Mod/Ship/simRun/Sim/matrixGen.py +++ b/src/Mod/Ship/simRun/Sim/matrixGen.py @@ -37,19 +37,17 @@ class simMatrixGen: self.context = context self.queue = queue - def execute(self, fs): + def execute(self, fs, A): """ Compute system matrix. @param fs Free surface instance. - @return Linear system matrix. + @param A Linear system matrix. """ self.fs = fs nx = self.fs['Nx'] ny = self.fs['Ny'] nF = nx*ny nB = 0 # No body for the moment - # Allocate matrix N = nx*ny + nB - A = np.ndarray((N, N), dtype=np.float32) # Fluid sources rows for i in range(0,nx): for j in range(0,ny): @@ -58,7 +56,6 @@ class simMatrixGen: A[i*ny+j,0:nF] = self.fluidEffect(pos) # Append body effect # ... - return A def fluidEffect(self, pos): """ Compute fluid effect terms over desired position. Desingularized diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 98117c639..a0bb2ff37 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -86,6 +86,8 @@ class FreeCADShipSimulation(threading.Thread): FreeCAD.Console.PrintMessage(msg) init = simInitialization(self.FSmesh,self.waves,self.context,self.queue) matGen = simMatrixGen(self.context,self.queue) + solver = simComputeSources(self.context,self.queue) + A = init.A FS = init.fs waves = init.waves msg = Translator.translate("\t[Sim]: Iterating...\n") @@ -93,7 +95,10 @@ class FreeCADShipSimulation(threading.Thread): while self.active: msg = Translator.translate("\t\t[Sim]: Generating linear system matrix...\n") FreeCAD.Console.PrintMessage(msg) - A = matGen.execute(FS) + matGen.execute(FS, A) + msg = Translator.translate("\t\t[Sim]: Solving linear systems...\n") + FreeCAD.Console.PrintMessage(msg) + solver.execute(FS, A) # Set thread as stopped (and prepare it to restarting) self.active = False threading.Event().set() From bc181f3df3ad1d9b3a888dbb1d74b4f06f6cb02c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Sat, 4 Aug 2012 17:11:41 +0200 Subject: [PATCH 497/517] Developed time integrator for fluid --- src/Mod/Ship/CMakeLists.txt | 1 + src/Mod/Ship/Makefile.am | 3 +- src/Mod/Ship/simRun/Sim/__init__.py | 1 + src/Mod/Ship/simRun/Sim/fsEvolution.py | 136 ++++++++++++++++++++++ src/Mod/Ship/simRun/Sim/initialization.py | 17 +-- src/Mod/Ship/simRun/Simulation.py | 8 ++ 6 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 src/Mod/Ship/simRun/Sim/fsEvolution.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 68fc8e924..300f999f8 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -152,6 +152,7 @@ SET(SimRun_SRCS simRun/Sim/initialization.py simRun/Sim/matrixGen.py simRun/Sim/computeSources.py + simRun/Sim/fsEvolution.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 3a8c9718d..308131bba 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -104,7 +104,8 @@ nobase_data_DATA = \ simRun/Sim/__init__.py \ simRun/Sim/initialization.py \ simRun/Sim/matrixGen.py \ - simRun/Sim/computeSources.py + simRun/Sim/computeSources.py \ + simRun/Sim/fsEvolution.py CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py index a2fd6db39..aabf4a621 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -24,3 +24,4 @@ from initialization import * from matrixGen import * from computeSources import * +from fsEvolution import * diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.py b/src/Mod/Ship/simRun/Sim/fsEvolution.py new file mode 100644 index 000000000..cd68fe085 --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/fsEvolution.py @@ -0,0 +1,136 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# numpy +import numpy as np + +grav=9.81 + +class simFSEvolution: + def __init__(self, context=None, queue=None): + """ Constructor. + @param context OpenCL context where apply. Only for compatibility, + must be None. + @param queue OpenCL command queue. Only for compatibility, + must be None. + """ + self.context = context + self.queue = queue + + def execute(self, fs, waves, dt, t): + """ Compute free surface for next time step. + @param fs Free surface instance. + @param waves Waves instance. + @param dt Time step. + @param t Actual time (without adding dt). + """ + self.fs = fs + # Allocate memory + nx = self.fs['Nx'] + ny = self.fs['Ny'] + nF = nx*ny + # Evaluate potential gradients + grad = self.evaluateGradient() + # Integrate variables + for i in range(0,nx): + for j in range(0,ny): + # Free surface points position + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*grad[i*ny+j][2] + # Velocity potential + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + \ + dt*self.fs['accPot'][i,j] - \ + 0.5*dt*dt*grav*grad[i*ny+j][2] + # Acceleration potential + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - \ + dt*grav*grad[i*ny+j][2] + # Force boundary conditions + for i in range(0,nx): + for j in [0,ny-1]: + self.boundaryCondition(i,j, waves, dt, t) + + def evaluateGradient(self): + """ Evaluate potential gradients over free surface. + @return Potential gradients. + """ + nx = self.fs['Nx'] + ny = self.fs['Ny'] + nF = nx*ny + grad = np.ndarray((nF,3), dtype=np.float32) + for i in range(0,nx): + for j in range(0,ny): + pos = self.fs['pos'][i,j] + grad[i*ny+j] = self.gradientphi(pos) + return grad + + def gradientphi(self, pos): + """ Compute gradient over desired position. + @param pos Point to evaluate. + @return Potential gradient. + """ + nx = self.fs['Nx'] + ny = self.fs['Ny'] + grad = np.ndarray(3, dtype=np.float32) + for i in range(0,nx): + for j in range(0,ny): + # Get source position (desingularized) + srcPos = np.copy(self.fs['pos'][i,j]) + area = self.fs['area'][i,j] + srcPos[2] = srcPos[2] + np.sqrt(area) + src = self.fs['velSrc'][i,j] + # Get distance between points + d = pos-srcPos + grad = grad + d/np.dot(d,d)*src*area + return grad + + def boundaryCondition(self, i,j, waves, dt, t): + """ Compute free surface at boundaries, assuming that only + incident wave can be taken into account. + @param i First free surface cell index. + @param j Second free surface cell index. + @param waves Waves instance. + @param dt Time step. + @param t Actual time (without adding dt). + """ + pos = self.fs['pos'][i,j] + pos[2] = 0. + for w in waves['data']: + A = w[0] + T = w[1] + phase = w[2] + heading = np.pi*w[3]/180.0 + wl = 0.5 * grav / np.pi * T*T + k = 2.0*np.pi/wl + frec = 2.0*np.pi/T + pos = self.fs['pos'][i,j] + l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) + amp = A*np.sin(k*l - frec*(t+dt) + phase) + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp + amp = frec*A*np.cos(k*l - frec*(t+dt) + phase) + self.fs['vel'][i,j][2] = self.fs['vel'][i,j][2] - amp + amp = frec*frec*A*np.sin(k*l - frec*(t+dt) + phase) + self.fs['acc'][i,j][2] = self.fs['acc'][i,j][2] - amp + amp = grav/frec*A*np.sin(k*l - frec*(t+dt) + phase) + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp + amp = grav*A*np.cos(k*l - frec*(t+dt) + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp + \ No newline at end of file diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py index 823ff535e..b2da085ff 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -40,6 +40,10 @@ class simInitialization: self.queue = queue self.loadData(FSmesh, waves) self.execute() + # Compute time step + self.dt = 0.1 + for w in self.waves['data']: + self.dt = np.min(self.dt, w[1]/200.0) def loadData(self, FSmesh, waves): """ Convert data to numpy format. @@ -51,8 +55,6 @@ class simInitialization: nW = len(waves) # Mesh data p = np.ndarray((nx,ny, 3), dtype=np.float32) - v = np.ndarray((nx,ny, 3), dtype=np.float32) - f = np.ndarray((nx,ny, 3), dtype=np.float32) n = np.ndarray((nx,ny, 3), dtype=np.float32) a = np.ndarray((nx,ny), dtype=np.float32) phi = np.ndarray((nx,ny), dtype=np.float32) @@ -67,12 +69,6 @@ class simInitialization: p[i,j,0] = pos.x p[i,j,1] = pos.y p[i,j,2] = pos.z - v[i,j,0] = 0. - v[i,j,1] = 0. - v[i,j,2] = 0. - f[i,j,0] = 0. - f[i,j,1] = 0. - f[i,j,2] = 0. n[i,j,0] = normal.x n[i,j,1] = normal.y n[i,j,2] = normal.z @@ -81,9 +77,8 @@ class simInitialization: Phi[i,j] = 0. s[i,j] = 0. ss[i,j] = 0. - self.fs = {'Nx':nx, 'Ny':ny, 'pos':p, 'vel':v, 'acc':f, \ - 'normal':n, 'area':a, 'velPot':phi, 'accPot':Phi, \ - 'velSrc':s, 'accSrc':ss} + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p, 'normal':n, 'area':a, \ + 'velPot':phi, 'accPot':Phi, 'velSrc':s, 'accSrc':ss} # Waves data w = np.ndarray((nW, 4), dtype=np.float32) for i in range(0,nW): diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index a0bb2ff37..598b6178e 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -87,9 +87,12 @@ class FreeCADShipSimulation(threading.Thread): init = simInitialization(self.FSmesh,self.waves,self.context,self.queue) matGen = simMatrixGen(self.context,self.queue) solver = simComputeSources(self.context,self.queue) + fsEvol = simFSEvolution(self.context,self.queue) A = init.A FS = init.fs waves = init.waves + dt = init.dt + t = 0.0 msg = Translator.translate("\t[Sim]: Iterating...\n") FreeCAD.Console.PrintMessage(msg) while self.active: @@ -99,6 +102,11 @@ class FreeCADShipSimulation(threading.Thread): msg = Translator.translate("\t\t[Sim]: Solving linear systems...\n") FreeCAD.Console.PrintMessage(msg) solver.execute(FS, A) + msg = Translator.translate("\t\t[Sim]: Time integrating...\n") + FreeCAD.Console.PrintMessage(msg) + fsEvol.execute(FS, waves, dt, t) + t = t + dt + FreeCAD.Console.PrintMessage('t = %g s' % (t)) # Set thread as stopped (and prepare it to restarting) self.active = False threading.Event().set() From 76c641bed88c73a9a41e92857a357640ff056d6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Sun, 5 Aug 2012 16:15:17 +0200 Subject: [PATCH 498/517] Changed (and accelerated) simulation creation process. --- src/Mod/Ship/SimInstance.py | 1330 ++++++++++++++------------- src/Mod/Ship/simCreate/TaskPanel.py | 351 +++---- 2 files changed, 850 insertions(+), 831 deletions(-) diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py index 3d047e3a1..85740d034 100644 --- a/src/Mod/Ship/SimInstance.py +++ b/src/Mod/Ship/SimInstance.py @@ -1,657 +1,673 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -import time -from math import * -import threading - -# COIN -from pivy.coin import * -from pivy import coin - -# FreeCAD -import FreeCAD,FreeCADGui -from FreeCAD import Base, Vector -import Part - -# Ship design module -from shipUtils import Paths, Translator, Math - -class FreeSurfaceFace: - def __init__(self, pos, normal, l, b): - """ Face storage. - @param pos Face position. - @param normal Face normal. - @param l Element length (distance between elements at x direction) - @param b Element beam (distance between elements at y direction) - """ - self.pos = pos - self.normal = normal - self.area = l*b - - def __init__(self, pos, normal, area): - """ Face storage. - @param pos Face position. - @param normal Face normal. - @param area Element area - """ - self.pos = pos - self.normal = normal - self.area = area - -class ShipSimulation: - def __init__(self, obj, fsMeshData, waves): - """ Creates a new simulation instance on active document. - @param obj Created Part::FeaturePython object. - @param fsMeshData [L,B,N] Free surface mesh data, with lenght - (x), Beam (y) and desired number of points. - @param waves [[A,T,phi,heading],] Waves involved - """ - # Add uniqueness property to identify Tank instances - obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True - # Compute free surface mesh - self.createFSMesh(obj,fsMeshData) - # Store waves - obj.addProperty("App::PropertyVectorList","Waves","ShipSimulation", str(Translator.translate("Waves (Amplitude,period,phase)"))).Waves=[] - obj.addProperty("App::PropertyFloatList","Waves_Dir","ShipSimulation", str(Translator.translate("Waves direction (0 deg to stern waves)"))).Waves_Dir=[] - w = [] - d = [] - for i in range(0,len(waves)): - w.append(Vector(waves[i][0], waves[i][1], waves[i][2])) - d.append(waves[i][3]) - obj.Waves = w - obj.Waves_Dir = d - # Add shapes - shape = self.computeShape(obj) - if not shape: - obj.IsShipSimulation=False - return - obj.Shape = shape - obj.Proxy = self - - def onChanged(self, fp, prop): - """ Property changed, tank must be recomputed """ - if prop == "IsShipSimulation": - FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") - - def execute(self, obj): - """ Shape recomputation called """ - obj.Shape = self.computeShape(obj) - - def createFSMesh(self, obj, fsMeshData): - """ Create or modify free surface mesh. - @param obj Created Part::FeaturePython object. - @param fsMeshData [L,B,N] Free surface mesh data, with lenght - (x), Beam (y) and desired number of points. - """ - # Study input object - try: - props = obj.PropertiesList - props.index("IsShipSimulation") - if not obj.IsShipSimulation: - msg = str(Translator.translate("Object is not a valid ship simulation.\n")) - FreeCAD.Console.PrintError(msg) - return - except ValueError: - msg = str(Translator.translate("Object is not a ship simulation.\n")) - FreeCAD.Console.PrintError(msg) - return - # Get areas and number of elements per direction - L = fsMeshData[0] - B = fsMeshData[1] - N = fsMeshData[2] - A = L*B - area = A/N - l = sqrt(area) - b = sqrt(area) - nx = int(round(L / l)) - ny = int(round(B / b)) - # Start data fields if not already exist - props = obj.PropertiesList - try: - props.index("FS_Nx") - except ValueError: - obj.addProperty("App::PropertyInteger","FS_Nx","ShipSimulation", str(Translator.translate("Free surface number of elements at x direction"))).FS_Nx=0 - try: - props.index("FS_Ny") - except ValueError: - obj.addProperty("App::PropertyInteger","FS_Ny","ShipSimulation", str(Translator.translate("Free surface number of elements at y direction"))).FS_Ny=0 - try: - props.index("FS_Position") - except ValueError: - obj.addProperty("App::PropertyVectorList","FS_Position","ShipSimulation", str(Translator.translate("Free surface elements position"))).FS_Position=[] - try: - props.index("FS_Area") - except ValueError: - obj.addProperty("App::PropertyFloatList","FS_Area","ShipSimulation", str(Translator.translate("Free surface elements area"))).FS_Area=[] - try: - props.index("FS_Normal") - except ValueError: - obj.addProperty("App::PropertyVectorList","FS_Normal","ShipSimulation", str(Translator.translate("Free surface elements normal"))).FS_Normal=[] - # Fill data - obj.FS_Nx = nx - obj.FS_Ny = ny - pos = [] - areas = [] - normal = [] - for i in range(0,nx): - for j in range(0,ny): - pos.append(Vector(-0.5*L + (i+0.5)*l,-0.5*B + (j+0.5)*b,0.0)) - areas.append(l*b) - normal.append(Vector(0.0,0.0,1.0)) - obj.FS_Position = pos[:] - obj.FS_Area = areas[:] - obj.FS_Normal = normal[:] - - def computeShape(self, obj): - """ Computes simulation involved shapes. - @param obj Created Part::FeaturePython object. - @return Shape - """ - print("[ShipSimulation] Computing mesh shape...") - nx = obj.FS_Nx - ny = obj.FS_Ny - mesh = FSMesh(obj) - planes = [] - # Create planes - Percentage = 0 - Count = 0 - print("0%") - for i in range(1,nx-1): - for j in range(1,ny-1): - Count = Count+1 - done = int(round(100 * Count / ((nx-2)*(ny-2)))) - if done != Percentage: - Percentage = done - print("%i%%" % (done)) - v0 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j-1].pos + mesh[i-1][j-1].pos).multiply(0.25) - v1 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j-1].pos + mesh[i+1][j-1].pos).multiply(0.25) - v2 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j+1].pos + mesh[i+1][j+1].pos).multiply(0.25) - v3 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j+1].pos + mesh[i-1][j+1].pos).multiply(0.25) - p = Part.makePolygon([v0,v1,v2,v3,v0]) - planes.append(Part.makeFilledFace(p.Edges)) - # Join into a compound - return Part.makeCompound(planes) - -class ViewProviderShipSimulation: - def __init__(self, obj): - """ Set this object to the proxy object of the actual view provider """ - obj.Proxy = self - - def attach(self, obj): - """ Setup the scene sub-graph of the view provider, this method is mandatory """ - return - - def updateData(self, fp, prop): - """ If a property of the handled feature has changed we have the chance to handle this here """ - return - - def getDisplayModes(self,obj): - ''' Return a list of display modes. ''' - modes=[] - return modes - - def getDefaultDisplayMode(self): - ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' - return "Flat Lines" - - def setDisplayMode(self,mode): - ''' Map the display mode defined in attach with those defined in getDisplayModes. - Since they have the same names nothing needs to be done. This method is optinal. - ''' - return mode - - def onChanged(self, vp, prop): - ''' Print the name of the property that has changed ''' - # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") - - def __getstate__(self): - ''' When saving the document this object gets stored using Python's cPickle module. - Since we have some un-pickable here -- the Coin stuff -- we must define this method - to return a tuple of all pickable objects or None. - ''' - return None - - def __setstate__(self,state): - ''' When restoring the pickled object from document we have the chance to set some - internals here. Since no data were pickled nothing needs to be done here. - ''' - return None - - def getIcon(self): - return """ - /* XPM */ - static char * Sim_xpm[] = { - "32 32 301 2", - " c None", - ". c #CCCCCC", - "+ c #A9A9A9", - "@ c #989898", - "# c #A1A1A1", - "$ c #C3C3C3", - "% c #C1C0C1", - "& c #BFBFBF", - "* c #A7A7A7", - "= c #808080", - "- c #5C5C5C", - "; c #565655", - "> c #4E4E4E", - ", c #676767", - "' c #898989", - ") c #B6B5B6", - "! c #BABABA", - "~ c #B9B9B9", - "{ c #A5A5A5", - "] c #7E7E7E", - "^ c #595A59", - "/ c #575656", - "( c #535353", - "_ c #505050", - ": c #4D4D4C", - "< c #474747", - "[ c #404040", - "} c #4D4D4D", - "| c #787878", - "1 c #B8B7B8", - "2 c #B6B6B6", - "3 c #888888", - "4 c #7C7C7C", - "5 c #575657", - "6 c #535354", - "7 c #4E4D4E", - "8 c #4A4A4A", - "9 c #444444", - "0 c #414141", - "a c #3E3E3E", - "b c #393938", - "c c #313131", - "d c #393939", - "e c #636363", - "f c #ABABAB", - "g c #B3B3B3", - "h c #848484", - "i c #787979", - "j c #545454", - "k c #515151", - "l c #4B4B4B", - "m c #484748", - "n c #3B3B3B", - "o c #383838", - "p c #353535", - "q c #323232", - "r c #2F2F2E", - "s c #2A2A2A", - "t c #222323", - "u c #252625", - "v c #AFAFAF", - "w c #767676", - "x c #484848", - "y c #454545", - "z c #424242", - "A c #3F3F3E", - "B c #3B3B3C", - "C c #393838", - "D c #2F2F2F", - "E c #2C2C2C", - "F c #292929", - "G c #262626", - "H c #222222", - "I c #1F1F20", - "J c #171716", - "K c #959595", - "L c #747474", - "M c #4E4E4F", - "N c #4C4B4C", - "O c #484849", - "P c #424243", - "Q c #282828", - "R c #525251", - "S c #373737", - "T c #353636", - "U c #333233", - "V c #30302F", - "W c #2C2D2D", - "X c #232323", - "Y c #201F20", - "Z c #1D1D1D", - "` c #151414", - " . c #717272", - ".. c #4C4C4C", - "+. c #484949", - "@. c #464545", - "#. c #424343", - "$. c #3A3A3A", - "%. c #5D4A49", - "&. c #7E7E86", - "*. c #56569F", - "=. c #3E3E41", - "-. c #757575", - ";. c #575757", - ">. c #222221", - ",. c #262627", - "'. c #242423", - "). c #212020", - "!. c #1A1A1A", - "~. c #121212", - "{. c #939493", - "]. c #6F6F6F", - "^. c #494949", - "/. c #464646", - "(. c #434343", - "_. c #554545", - ":. c #686863", - "<. c #939394", - "[. c #BDBDBD", - "}. c #202021", - "|. c #1E1E1E", - "1. c #171718", - "2. c #0F0F0F", - "3. c #929292", - "4. c #6C6D6D", - "5. c #464746", - "6. c #525F73", - "7. c #444648", - "8. c #3D3D3D", - "9. c #2D2C2A", - "0. c #A1A2A2", - "a. c #AAACAC", - "b. c #A6A7A7", - "c. c #A8AAAA", - "d. c #AFB0B0", - "e. c #777676", - "f. c #9A9A9A", - "g. c #1B1B1B", - "h. c #181818", - "i. c #0C0C0C", - "j. c #909090", - "k. c #6B6A6B", - "l. c #55657E", - "m. c #6990FB", - "n. c #6483CD", - "o. c #5871B2", - "p. c #434E7E", - "q. c #A97C76", - "r. c #AB7777", - "s. c #AC7070", - "t. c #A26565", - "u. c #805C5C", - "v. c #848686", - "w. c #424342", - "x. c #151515", - "y. c #0A0909", - "z. c #8F8F8F", - "A. c #676868", - "B. c #3B3A3A", - "C. c #383738", - "D. c #353534", - "E. c #45525F", - "F. c #6367AC", - "G. c #804682", - "H. c #942A39", - "I. c #991312", - "J. c #540901", - "K. c #393742", - "L. c #1C1C1C", - "M. c #191919", - "N. c #161515", - "O. c #121313", - "P. c #070707", - "Q. c #8D8E8D", - "R. c #656566", - "S. c #3E3F3F", - "T. c #2F2E2F", - "U. c #353838", - "V. c #35496A", - "W. c #3E4D88", - "X. c #354889", - "Y. c #5573D7", - "Z. c #5D80FB", - "`. c #374899", - " + c #293338", - ".+ c #101010", - "++ c #0D0D0D", - "@+ c #040404", - "#+ c #8C8C8C", - "$+ c #8B8B8B", - "%+ c #4B4A4B", - "&+ c #303030", - "*+ c #333232", - "=+ c #2F2F30", - "-+ c #232223", - ";+ c #1A1919", - ">+ c #2E3949", - ",+ c #5C7BA3", - "'+ c #36467D", - ")+ c #536F93", - "!+ c #0A0A0A", - "~+ c #010101", - "{+ c #C1C1C1", - "]+ c #B8B8B8", - "^+ c #A0A0A0", - "/+ c #3F3F3F", - "(+ c #222122", - "_+ c #202020", - ":+ c #161717", - "<+ c #141414", - "[+ c #111011", - "}+ c #0D0E0E", - "|+ c #0B0B0A", - "1+ c #000000", - "2+ c #525252", - "3+ c #686868", - "4+ c #ADADAD", - "5+ c #9E9F9F", - "6+ c #6D6D6D", - "7+ c #3C3C3C", - "8+ c #131414", - "9+ c #111111", - "0+ c #0E0E0E", - "a+ c #0B0B0B", - "b+ c #080708", - "c+ c #050504", - "d+ c #4C4D4C", - "e+ c #4D4C4D", - "f+ c #494A4A", - "g+ c #454444", - "h+ c #9D9D9D", - "i+ c #9E9E9E", - "j+ c #AEAEAE", - "k+ c #BEBEBF", - "l+ c #BEBDBD", - "m+ c #979797", - "n+ c #6A6B6A", - "o+ c #3F3F40", - "p+ c #020202", - "q+ c #030303", - "r+ c #878787", - "s+ c #69696A", - "t+ c #868685", - "u+ c #646464", - "v+ c #474647", - "w+ c #656565", - "x+ c #9E9F9E", - "y+ c #A8A8A8", - "z+ c #AFAFAE", - "A+ c #A4A4A4", - "B+ c #7A7A7A", - "C+ c #969696", - "D+ c #363636", - "E+ c #777776", - "F+ c #8C8D8D", - "G+ c #7D7D7D", - "H+ c #5E5E5E", - "I+ c #4F4F50", - "J+ c #808181", - "K+ c #707070", - "L+ c #909191", - "M+ c #9C9C9C", - "N+ c #787877", - "O+ c #696969", - "P+ c #616161", - "Q+ c #6E6E6E", - "R+ c #7C7B7C", - "S+ c #777677", - "T+ c #6F6E6E", - "U+ c #595959", - "V+ c #717171", - "W+ c #8D8D8D", - "X+ c #515051", - "Y+ c #49494A", - "Z+ c #4B4A4A", - "`+ c #606060", - " @ c #6A6A6A", - ".@ c #616162", - "+@ c #6C6D6C", - "@@ c #767777", - "#@ c #727272", - "$@ c #6B6B6B", - "%@ c #828283", - "&@ c #757475", - "*@ c #444545", - "=@ c #565656", - "-@ c #5A595A", - ";@ c #666666", - ">@ c #878687", - ",@ c #8A8A8A", - "'@ c #797979", - ")@ c #444344", - "!@ c #7F8080", - "~@ c #737373", - "{@ c #484747", - "]@ c #707170", - "^@ c #7F7F7F", - "/@ c #676867", - "(@ c #4D4C4C", - "_@ c #5F5F5F", - ":@ c #434444", - " ", - " ", - " . + ", - " @ # $ % & * ", - " = - ; > , ' ) ! ~ { ", - " ] ^ / ( _ : < [ } | # 1 2 # 3 ", - " 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ", - " i j k 7 l m 9 0 a n o p q r s t u < | v ", - " w k > l x y z A B C p q D E F G H I J K ", - " L M N O y P Q R S T U V W F G X Y Z ` K ", - " ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ", - " ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ", - " 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ", - " k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ", - " A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ", - " R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ", - " $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ", - " {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ", - " k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ", - " %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ", - " s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ", - " E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ", - " L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ", - " V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ", - " ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ", - " ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ", - " e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ", - " - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ", - " =@_@O+L ~@#@~@L _ 9 9 :@ ", - " ;.H+ @-._ (. ", - " ", - " "}; - """ - -def FSMesh(obj, recompute=False): - """ Get free surface mesh in matrix mode. - @param obj Created Part::FeaturePython object. - @param recompute True if mesh must be recomputed, False otherwise. - @return Faces matrix - """ - nx = obj.FS_Nx - ny = obj.FS_Ny - if not recompute: - faces = [] - for i in range(0,nx): - faces.append([]) - for j in range(0,ny): - faces[i].append(FreeSurfaceFace(obj.FS_Position[j + i*ny], - obj.FS_Normal[j + i*ny], - obj.FS_Area[j + i*ny])) - return faces - # Transform positions into a mesh - pos = [] - for i in range(0,nx): - pos.append([]) - for j in range(0,ny): - pos[i].append(obj.FS_Position[j + i*ny]) - # Recompute normals and dimensions - normal = [] - l = [] - b = [] - for i in range(0,nx): - normal.append([]) - l.append([]) - b.append([]) - for j in range(0,ny): - i0 = i-1 - i1 = i+1 - fi = 1.0 - j0 = j-1 - j1 = j+1 - fj = 1.0 - if i == 0: - i0 = i - i1 = i+1 - fi = 2.0 - if i == nx-1: - i0 = i-1 - i1 = i - fi = 2.0 - if j == 0: - j0 = j - j1 = j+1 - fj = 2.0 - if j == ny-1: - j0 = j-1 - j1 = j - fj = 2.0 - l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) - b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) - xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, - obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, - obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) - yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, - obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, - obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) - n = Vector(xvec.cross(yvec)) # Z positive - normal[i].append(n.normalize()) - # Create faces - faces = [] - for i in range(0,nx): - faces.append([]) - for j in range(0,ny): - faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) - # Reconstruct mesh data - for i in range(0,nx): - for j in range(0,ny): - obj.FS_Position[j + i*ny] = faces[i][j].pos - obj.FS_Normal[j + i*ny] = faces[i][j].normal - obj.FS_Area[j + i*ny] = faces[i][j].area - return faces +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +from math import * +import threading + +# COIN +from pivy.coin import * +from pivy import coin + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Base, Vector +import Part + +# Ship design module +from shipUtils import Paths, Translator, Math + +class FreeSurfaceFace: + def __init__(self, pos, normal, l, b): + """ Face storage. + @param pos Face position. + @param normal Face normal. + @param l Element length (distance between elements at x direction) + @param b Element beam (distance between elements at y direction) + """ + self.pos = pos + self.normal = normal + self.area = l*b + + def __init__(self, pos, normal, area): + """ Face storage. + @param pos Face position. + @param normal Face normal. + @param area Element area + """ + self.pos = pos + self.normal = normal + self.area = area + +class ShipSimulation: + def __init__(self, obj, fsMeshData, waves): + """ Creates a new simulation instance on active document. + @param obj Created Part::FeaturePython object. + @param fsMeshData [L,B,N] Free surface mesh data, with lenght + (x), Beam (y) and desired number of points. + @param waves [[A,T,phi,heading],] Waves involved + """ + # Add uniqueness property to identify Tank instances + obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True + # Compute free surface mesh + self.createFSMesh(obj,fsMeshData) + self.computeWaves(obj,waves) + # Store waves + obj.addProperty("App::PropertyVectorList","Waves","ShipSimulation", str(Translator.translate("Waves (Amplitude,period,phase)"))).Waves=[] + obj.addProperty("App::PropertyFloatList","Waves_Dir","ShipSimulation", str(Translator.translate("Waves direction (0 deg to stern waves)"))).Waves_Dir=[] + w = [] + d = [] + for i in range(0,len(waves)): + w.append(Vector(waves[i][0], waves[i][1], waves[i][2])) + d.append(waves[i][3]) + obj.Waves = w + obj.Waves_Dir = d + # Add shapes + shape = self.computeShape(obj) + if not shape: + obj.IsShipSimulation=False + return + obj.Shape = shape + obj.Proxy = self + + def onChanged(self, fp, prop): + """ Property changed, tank must be recomputed """ + if prop == "IsShipSimulation": + FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") + + def execute(self, obj): + """ Shape recomputation called """ + obj.Shape = self.computeShape(obj) + + def createFSMesh(self, obj, fsMeshData): + """ Create or modify free surface mesh. + @param obj Created Part::FeaturePython object. + @param fsMeshData [L,B,N] Free surface mesh data, with lenght + (x), Beam (y) and desired number of points. + """ + # Study input object + try: + props = obj.PropertiesList + props.index("IsShipSimulation") + if not obj.IsShipSimulation: + msg = str(Translator.translate("Object is not a valid ship simulation.\n")) + FreeCAD.Console.PrintError(msg) + return + except ValueError: + msg = str(Translator.translate("Object is not a ship simulation.\n")) + FreeCAD.Console.PrintError(msg) + return + # Get areas and number of elements per direction + L = fsMeshData[0] + B = fsMeshData[1] + N = fsMeshData[2] + A = L*B + area = A/N + l = sqrt(area) + b = sqrt(area) + nx = int(round(L / l)) + ny = int(round(B / b)) + # Start data fields if not already exist + props = obj.PropertiesList + try: + props.index("FS_Nx") + except ValueError: + obj.addProperty("App::PropertyInteger","FS_Nx","ShipSimulation", str(Translator.translate("Free surface number of elements at x direction"))).FS_Nx=0 + try: + props.index("FS_Ny") + except ValueError: + obj.addProperty("App::PropertyInteger","FS_Ny","ShipSimulation", str(Translator.translate("Free surface number of elements at y direction"))).FS_Ny=0 + try: + props.index("FS_Position") + except ValueError: + obj.addProperty("App::PropertyVectorList","FS_Position","ShipSimulation", str(Translator.translate("Free surface elements position"))).FS_Position=[] + try: + props.index("FS_Area") + except ValueError: + obj.addProperty("App::PropertyFloatList","FS_Area","ShipSimulation", str(Translator.translate("Free surface elements area"))).FS_Area=[] + try: + props.index("FS_Normal") + except ValueError: + obj.addProperty("App::PropertyVectorList","FS_Normal","ShipSimulation", str(Translator.translate("Free surface elements normal"))).FS_Normal=[] + # Fill data + obj.FS_Nx = nx + obj.FS_Ny = ny + pos = [] + areas = [] + normal = [] + for i in range(0,nx): + for j in range(0,ny): + pos.append(Vector(-0.5*L + (i+0.5)*l,-0.5*B + (j+0.5)*b,0.0)) + areas.append(l*b) + normal.append(Vector(0.0,0.0,1.0)) + obj.FS_Position = pos[:] + obj.FS_Area = areas[:] + obj.FS_Normal = normal[:] + + def computeWaves(self, obj, waves): + """ Add waves effect to free surface mesh positions. + @param obj Created Part::FeaturePython object. + @param waves waves data [A,T,phase, heading]. + """ + grav = 9.81 + positions = obj.FS_Position[:] + for i in range(0, len(positions)): + for w in waves: + A = w[0] + T = w[1] + phase = w[2] + heading = pi*w[3]/180.0 + wl = 0.5 * grav / pi * T*T + k = 2.0*pi/wl + frec = 2.0*pi/T + pos = obj.FS_Position[i] + l = pos.x*cos(heading) + pos.y*sin(heading) + amp = A*sin(k*l + phase) + positions[i].z = positions[i].z + amp + obj.FS_Position = positions[:] + + def computeShape(self, obj): + """ Computes simulation involved shapes. + @param obj Created Part::FeaturePython object. + @return Shape + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + mesh = FSMesh(obj) + # Create BSpline surface + surf = Part.BSplineSurface() + for i in range(1,nx-1): + u = i / float(nx-1) + surf.insertUKnot(u,i,0.000001) + for i in range(1,ny-1): + v = i / float(ny-1) + surf.insertVKnot(v,i,0.000001) + for i in range(0,nx): + for j in range(0,ny): + u = i / float(nx-1) + v = j / float(ny-1) + point = mesh[i][j].pos + surf.movePoint(u,v,point,i+1,i+1,j+1,j+1) + return surf.toShape() + +class ViewProviderShipSimulation: + def __init__(self, obj): + """ Set this object to the proxy object of the actual view provider """ + obj.Proxy = self + + def attach(self, obj): + """ Setup the scene sub-graph of the view provider, this method is mandatory """ + return + + def updateData(self, fp, prop): + """ If a property of the handled feature has changed we have the chance to handle this here """ + return + + def getDisplayModes(self,obj): + ''' Return a list of display modes. ''' + modes=[] + return modes + + def getDefaultDisplayMode(self): + ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' + return "Flat Lines" + + def setDisplayMode(self,mode): + ''' Map the display mode defined in attach with those defined in getDisplayModes. + Since they have the same names nothing needs to be done. This method is optinal. + ''' + return mode + + def onChanged(self, vp, prop): + ''' Print the name of the property that has changed ''' + # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") + + def __getstate__(self): + ''' When saving the document this object gets stored using Python's cPickle module. + Since we have some un-pickable here -- the Coin stuff -- we must define this method + to return a tuple of all pickable objects or None. + ''' + return None + + def __setstate__(self,state): + ''' When restoring the pickled object from document we have the chance to set some + internals here. Since no data were pickled nothing needs to be done here. + ''' + return None + + def getIcon(self): + return """ + /* XPM */ + static char * Sim_xpm[] = { + "32 32 301 2", + " c None", + ". c #CCCCCC", + "+ c #A9A9A9", + "@ c #989898", + "# c #A1A1A1", + "$ c #C3C3C3", + "% c #C1C0C1", + "& c #BFBFBF", + "* c #A7A7A7", + "= c #808080", + "- c #5C5C5C", + "; c #565655", + "> c #4E4E4E", + ", c #676767", + "' c #898989", + ") c #B6B5B6", + "! c #BABABA", + "~ c #B9B9B9", + "{ c #A5A5A5", + "] c #7E7E7E", + "^ c #595A59", + "/ c #575656", + "( c #535353", + "_ c #505050", + ": c #4D4D4C", + "< c #474747", + "[ c #404040", + "} c #4D4D4D", + "| c #787878", + "1 c #B8B7B8", + "2 c #B6B6B6", + "3 c #888888", + "4 c #7C7C7C", + "5 c #575657", + "6 c #535354", + "7 c #4E4D4E", + "8 c #4A4A4A", + "9 c #444444", + "0 c #414141", + "a c #3E3E3E", + "b c #393938", + "c c #313131", + "d c #393939", + "e c #636363", + "f c #ABABAB", + "g c #B3B3B3", + "h c #848484", + "i c #787979", + "j c #545454", + "k c #515151", + "l c #4B4B4B", + "m c #484748", + "n c #3B3B3B", + "o c #383838", + "p c #353535", + "q c #323232", + "r c #2F2F2E", + "s c #2A2A2A", + "t c #222323", + "u c #252625", + "v c #AFAFAF", + "w c #767676", + "x c #484848", + "y c #454545", + "z c #424242", + "A c #3F3F3E", + "B c #3B3B3C", + "C c #393838", + "D c #2F2F2F", + "E c #2C2C2C", + "F c #292929", + "G c #262626", + "H c #222222", + "I c #1F1F20", + "J c #171716", + "K c #959595", + "L c #747474", + "M c #4E4E4F", + "N c #4C4B4C", + "O c #484849", + "P c #424243", + "Q c #282828", + "R c #525251", + "S c #373737", + "T c #353636", + "U c #333233", + "V c #30302F", + "W c #2C2D2D", + "X c #232323", + "Y c #201F20", + "Z c #1D1D1D", + "` c #151414", + " . c #717272", + ".. c #4C4C4C", + "+. c #484949", + "@. c #464545", + "#. c #424343", + "$. c #3A3A3A", + "%. c #5D4A49", + "&. c #7E7E86", + "*. c #56569F", + "=. c #3E3E41", + "-. c #757575", + ";. c #575757", + ">. c #222221", + ",. c #262627", + "'. c #242423", + "). c #212020", + "!. c #1A1A1A", + "~. c #121212", + "{. c #939493", + "]. c #6F6F6F", + "^. c #494949", + "/. c #464646", + "(. c #434343", + "_. c #554545", + ":. c #686863", + "<. c #939394", + "[. c #BDBDBD", + "}. c #202021", + "|. c #1E1E1E", + "1. c #171718", + "2. c #0F0F0F", + "3. c #929292", + "4. c #6C6D6D", + "5. c #464746", + "6. c #525F73", + "7. c #444648", + "8. c #3D3D3D", + "9. c #2D2C2A", + "0. c #A1A2A2", + "a. c #AAACAC", + "b. c #A6A7A7", + "c. c #A8AAAA", + "d. c #AFB0B0", + "e. c #777676", + "f. c #9A9A9A", + "g. c #1B1B1B", + "h. c #181818", + "i. c #0C0C0C", + "j. c #909090", + "k. c #6B6A6B", + "l. c #55657E", + "m. c #6990FB", + "n. c #6483CD", + "o. c #5871B2", + "p. c #434E7E", + "q. c #A97C76", + "r. c #AB7777", + "s. c #AC7070", + "t. c #A26565", + "u. c #805C5C", + "v. c #848686", + "w. c #424342", + "x. c #151515", + "y. c #0A0909", + "z. c #8F8F8F", + "A. c #676868", + "B. c #3B3A3A", + "C. c #383738", + "D. c #353534", + "E. c #45525F", + "F. c #6367AC", + "G. c #804682", + "H. c #942A39", + "I. c #991312", + "J. c #540901", + "K. c #393742", + "L. c #1C1C1C", + "M. c #191919", + "N. c #161515", + "O. c #121313", + "P. c #070707", + "Q. c #8D8E8D", + "R. c #656566", + "S. c #3E3F3F", + "T. c #2F2E2F", + "U. c #353838", + "V. c #35496A", + "W. c #3E4D88", + "X. c #354889", + "Y. c #5573D7", + "Z. c #5D80FB", + "`. c #374899", + " + c #293338", + ".+ c #101010", + "++ c #0D0D0D", + "@+ c #040404", + "#+ c #8C8C8C", + "$+ c #8B8B8B", + "%+ c #4B4A4B", + "&+ c #303030", + "*+ c #333232", + "=+ c #2F2F30", + "-+ c #232223", + ";+ c #1A1919", + ">+ c #2E3949", + ",+ c #5C7BA3", + "'+ c #36467D", + ")+ c #536F93", + "!+ c #0A0A0A", + "~+ c #010101", + "{+ c #C1C1C1", + "]+ c #B8B8B8", + "^+ c #A0A0A0", + "/+ c #3F3F3F", + "(+ c #222122", + "_+ c #202020", + ":+ c #161717", + "<+ c #141414", + "[+ c #111011", + "}+ c #0D0E0E", + "|+ c #0B0B0A", + "1+ c #000000", + "2+ c #525252", + "3+ c #686868", + "4+ c #ADADAD", + "5+ c #9E9F9F", + "6+ c #6D6D6D", + "7+ c #3C3C3C", + "8+ c #131414", + "9+ c #111111", + "0+ c #0E0E0E", + "a+ c #0B0B0B", + "b+ c #080708", + "c+ c #050504", + "d+ c #4C4D4C", + "e+ c #4D4C4D", + "f+ c #494A4A", + "g+ c #454444", + "h+ c #9D9D9D", + "i+ c #9E9E9E", + "j+ c #AEAEAE", + "k+ c #BEBEBF", + "l+ c #BEBDBD", + "m+ c #979797", + "n+ c #6A6B6A", + "o+ c #3F3F40", + "p+ c #020202", + "q+ c #030303", + "r+ c #878787", + "s+ c #69696A", + "t+ c #868685", + "u+ c #646464", + "v+ c #474647", + "w+ c #656565", + "x+ c #9E9F9E", + "y+ c #A8A8A8", + "z+ c #AFAFAE", + "A+ c #A4A4A4", + "B+ c #7A7A7A", + "C+ c #969696", + "D+ c #363636", + "E+ c #777776", + "F+ c #8C8D8D", + "G+ c #7D7D7D", + "H+ c #5E5E5E", + "I+ c #4F4F50", + "J+ c #808181", + "K+ c #707070", + "L+ c #909191", + "M+ c #9C9C9C", + "N+ c #787877", + "O+ c #696969", + "P+ c #616161", + "Q+ c #6E6E6E", + "R+ c #7C7B7C", + "S+ c #777677", + "T+ c #6F6E6E", + "U+ c #595959", + "V+ c #717171", + "W+ c #8D8D8D", + "X+ c #515051", + "Y+ c #49494A", + "Z+ c #4B4A4A", + "`+ c #606060", + " @ c #6A6A6A", + ".@ c #616162", + "+@ c #6C6D6C", + "@@ c #767777", + "#@ c #727272", + "$@ c #6B6B6B", + "%@ c #828283", + "&@ c #757475", + "*@ c #444545", + "=@ c #565656", + "-@ c #5A595A", + ";@ c #666666", + ">@ c #878687", + ",@ c #8A8A8A", + "'@ c #797979", + ")@ c #444344", + "!@ c #7F8080", + "~@ c #737373", + "{@ c #484747", + "]@ c #707170", + "^@ c #7F7F7F", + "/@ c #676867", + "(@ c #4D4C4C", + "_@ c #5F5F5F", + ":@ c #434444", + " ", + " ", + " . + ", + " @ # $ % & * ", + " = - ; > , ' ) ! ~ { ", + " ] ^ / ( _ : < [ } | # 1 2 # 3 ", + " 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ", + " i j k 7 l m 9 0 a n o p q r s t u < | v ", + " w k > l x y z A B C p q D E F G H I J K ", + " L M N O y P Q R S T U V W F G X Y Z ` K ", + " ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ", + " ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ", + " 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ", + " k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ", + " A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ", + " R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ", + " $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ", + " {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ", + " k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ", + " %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ", + " s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ", + " E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ", + " L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ", + " V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ", + " ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ", + " ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ", + " e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ", + " - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ", + " =@_@O+L ~@#@~@L _ 9 9 :@ ", + " ;.H+ @-._ (. ", + " ", + " "}; + """ + +def FSMesh(obj, recompute=False): + """ Get free surface mesh in matrix mode. + @param obj Created Part::FeaturePython object. + @param recompute True if mesh must be recomputed, False otherwise. + @return Faces matrix + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + if not recompute: + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(obj.FS_Position[j + i*ny], + obj.FS_Normal[j + i*ny], + obj.FS_Area[j + i*ny])) + return faces + # Transform positions into a mesh + pos = [] + for i in range(0,nx): + pos.append([]) + for j in range(0,ny): + pos[i].append(obj.FS_Position[j + i*ny]) + # Recompute normals and dimensions + normal = [] + l = [] + b = [] + for i in range(0,nx): + normal.append([]) + l.append([]) + b.append([]) + for j in range(0,ny): + i0 = i-1 + i1 = i+1 + fi = 1.0 + j0 = j-1 + j1 = j+1 + fj = 1.0 + if i == 0: + i0 = i + i1 = i+1 + fi = 2.0 + if i == nx-1: + i0 = i-1 + i1 = i + fi = 2.0 + if j == 0: + j0 = j + j1 = j+1 + fj = 2.0 + if j == ny-1: + j0 = j-1 + j1 = j + fj = 2.0 + l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) + b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) + xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, + obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, + obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) + yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, + obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, + obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) + n = Vector(xvec.cross(yvec)) # Z positive + normal[i].append(n.normalize()) + # Create faces + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) + # Reconstruct mesh data + for i in range(0,nx): + for j in range(0,ny): + obj.FS_Position[j + i*ny] = faces[i][j].pos + obj.FS_Normal[j + i*ny] = faces[i][j].normal + obj.FS_Area[j + i*ny] = faces[i][j].area + return faces diff --git a/src/Mod/Ship/simCreate/TaskPanel.py b/src/Mod/Ship/simCreate/TaskPanel.py index e14f4c964..38ea00b96 100644 --- a/src/Mod/Ship/simCreate/TaskPanel.py +++ b/src/Mod/Ship/simCreate/TaskPanel.py @@ -1,174 +1,177 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -# FreeCAD modules -import FreeCAD as App -import FreeCADGui as Gui -# Qt library -from PyQt4 import QtGui,QtCore -# Module -import SimInstance -from shipUtils import Paths, Translator - -class TaskPanel: - def __init__(self): - self.ui = Paths.modulePath() + "/simCreate/TaskPanel.ui" - - def accept(self): - form = self.form - # Read waves data - w = [] - for i in range(0,form.waves.rowCount() - 1): - item = form.waves.item(i,0) - A = item.text().toFloat()[0] - item = form.waves.item(i,1) - T = item.text().toFloat()[0] - item = form.waves.item(i,2) - phi = item.text().toFloat()[0] - item = form.waves.item(i,3) - head = item.text().toFloat()[0] - w.append([A,T,phi,head]) - obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation") - sim = SimInstance.ShipSimulation(obj, - [form.length.value(), form.beam.value(), form.n.value()], - w) - SimInstance.ViewProviderShipSimulation(obj.ViewObject) - return True - - def reject(self): - return True - - def clicked(self, index): - pass - - def open(self): - pass - - def needsFullSpace(self): - return True - - def isAllowedAlterSelection(self): - return False - - def isAllowedAlterView(self): - return True - - def isAllowedAlterDocument(self): - return False - - def helpRequested(self): - pass - - def setupUi(self): - mw = self.getMainWindow() - form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") - form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") - form.n = form.findChild(QtGui.QSpinBox, "N") - form.waves = form.findChild(QtGui.QTableWidget, "Waves") - self.form = form - # Initial values - if self.initValues(): - return True - self.retranslateUi() - # Connect Signals and Slots - QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS) - QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS) - QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS) - QtCore.QObject.connect(form.waves,QtCore.SIGNAL("cellChanged(int,int)"),self.onWaves); - - def getMainWindow(self): - "returns the main window" - # using QtGui.qApp.activeWindow() isn't very reliable because if another - # widget than the mainwindow is active (e.g. a dialog) the wrong widget is - # returned - toplevel = QtGui.qApp.topLevelWidgets() - for i in toplevel: - if i.metaObject().className() == "Gui::MainWindow": - return i - raise Exception("No main window found") - - def initValues(self): - """ Set initial values for fields - """ - msg = Translator.translate("Ready to work\n") - App.Console.PrintMessage(msg) - return False - - def retranslateUi(self): - """ Set user interface locale strings. - """ - self.form.setWindowTitle(Translator.translate("Create a new ship simulation")) - self.form.findChild(QtGui.QGroupBox, "FSDataBox").setTitle(Translator.translate("Free surface")) - self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) - self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) - self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) - self.form.findChild(QtGui.QGroupBox, "WavesDataBox").setTitle(Translator.translate("Waves")) - labels = [] - labels.append(Translator.translate("Amplitude") + " [m]") - labels.append(Translator.translate("Period") + " [s]") - labels.append(Translator.translate("Phase") + " [rad]") - labels.append(Translator.translate("Heading") + " [deg]") - self.form.waves.setHorizontalHeaderLabels(labels) - - def onFS(self, value): - """ Method called when free surface data is changed. - @param value Changed value. - """ - pass - - def onWaves(self, row, column): - """ Method called when waves data is changed. - @param row Affected row. - @param col Affected column. - """ - item = self.form.waves.item(row,column) - # Row deletion - if column == 0: - if not item.text(): - self.form.waves.removeRow(row) - # Ensure that exist one empty item at the end - nRow = self.form.waves.rowCount() - last = self.form.waves.item(nRow-1,0) - if last: - if(last.text() != ''): - self.form.waves.setRowCount(nRow+1) - # Fields must be numbers - for i in range(0,self.form.waves.rowCount()-1): # Avoid last row - for j in range(0,self.form.waves.columnCount()): # Avoid name column - item = self.form.waves.item(i,j) - if not item: - item = QtGui.QTableWidgetItem('0.0') - self.form.waves.setItem(i,j,item) - continue - (number,flag) = item.text().toFloat() - if not flag: - item.setText('0.0') - -def createTask(): - panel = TaskPanel() - Gui.Control.showDialog(panel) - if panel.setupUi(): - Gui.Control.closeDialog(panel) - return None - return panel +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +import SimInstance +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simCreate/TaskPanel.ui" + + def accept(self): + form = self.form + # Read waves data + w = [] + for i in range(0,form.waves.rowCount() - 1): + item = form.waves.item(i,0) + A = item.text().toFloat()[0] + item = form.waves.item(i,1) + T = item.text().toFloat()[0] + item = form.waves.item(i,2) + phi = item.text().toFloat()[0] + item = form.waves.item(i,3) + head = item.text().toFloat()[0] + w.append([A,T,phi,head]) + obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation") + sim = SimInstance.ShipSimulation(obj, + [form.length.value(), form.beam.value(), form.n.value()], + w) + SimInstance.ViewProviderShipSimulation(obj.ViewObject) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") + form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") + form.n = form.findChild(QtGui.QSpinBox, "N") + form.waves = form.findChild(QtGui.QTableWidget, "Waves") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS) + QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS) + QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS) + QtCore.QObject.connect(form.waves,QtCore.SIGNAL("cellChanged(int,int)"),self.onWaves); + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Create a new ship simulation")) + self.form.findChild(QtGui.QGroupBox, "FSDataBox").setTitle(Translator.translate("Free surface")) + self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) + self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) + self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) + self.form.findChild(QtGui.QGroupBox, "WavesDataBox").setTitle(Translator.translate("Waves")) + labels = [] + labels.append(Translator.translate("Amplitude") + " [m]") + labels.append(Translator.translate("Period") + " [s]") + labels.append(Translator.translate("Phase") + " [rad]") + labels.append(Translator.translate("Heading") + " [deg]") + self.form.waves.setHorizontalHeaderLabels(labels) + + def onFS(self, value): + """ Method called when free surface data is changed. + @param value Changed value. + """ + pass + + def onWaves(self, row, column): + """ Method called when waves data is changed. + @param row Affected row. + @param col Affected column. + """ + item = self.form.waves.item(row,column) + # Row deletion + if column == 0: + if not item.text(): + self.form.waves.removeRow(row) + # Ensure that exist one empty item at the end + nRow = self.form.waves.rowCount() + if not nRow: + self.form.waves.setRowCount(1) + else: + last = self.form.waves.item(nRow-1,0) + if last: + if(last.text() != ''): + self.form.waves.setRowCount(nRow+1) + # Fields must be numbers + for i in range(0,self.form.waves.rowCount()-1): # Avoid last row + for j in range(0,self.form.waves.columnCount()): # Avoid name column + item = self.form.waves.item(i,j) + if not item: + item = QtGui.QTableWidgetItem('0.0') + self.form.waves.setItem(i,j,item) + continue + (number,flag) = item.text().toFloat() + if not flag: + item.setText('0.0') + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel From 87c42d512cfcedeb8491dd2eb16b9deb51ea7a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Mon, 6 Aug 2012 18:24:18 +0200 Subject: [PATCH 499/517] Fixed several free surface evolution bugs --- src/Mod/Ship/simRun/Sim/fsEvolution.py | 20 ++++++++++++++------ src/Mod/Ship/simRun/Sim/initialization.py | 10 ++++------ src/Mod/Ship/simRun/Simulation.py | 19 ++++++++++++++++--- src/Mod/Ship/simRun/TaskPanel.py | 2 +- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.py b/src/Mod/Ship/simRun/Sim/fsEvolution.py index cd68fe085..fd0be670a 100644 --- a/src/Mod/Ship/simRun/Sim/fsEvolution.py +++ b/src/Mod/Ship/simRun/Sim/fsEvolution.py @@ -54,6 +54,11 @@ class simFSEvolution: # Integrate variables for i in range(0,nx): for j in range(0,ny): + # Get value at pos using characteristics method + gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) + gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + \ + dt*np.linalg.norm(grad[i*ny+j]) # Free surface points position self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*grad[i*ny+j][2] # Velocity potential @@ -67,6 +72,9 @@ class simFSEvolution: for i in range(0,nx): for j in [0,ny-1]: self.boundaryCondition(i,j, waves, dt, t) + for j in range(0,ny): + for i in [0,nx-1]: + self.boundaryCondition(i,j, waves, dt, t) def evaluateGradient(self): """ Evaluate potential gradients over free surface. @@ -89,7 +97,7 @@ class simFSEvolution: """ nx = self.fs['Nx'] ny = self.fs['Ny'] - grad = np.ndarray(3, dtype=np.float32) + grad = np.zeros(3, dtype=np.float32) for i in range(0,nx): for j in range(0,ny): # Get source position (desingularized) @@ -100,6 +108,8 @@ class simFSEvolution: # Get distance between points d = pos-srcPos grad = grad + d/np.dot(d,d)*src*area + # Discard Z induced effect by desingularization + grad[2] = 0. return grad def boundaryCondition(self, i,j, waves, dt, t): @@ -113,6 +123,8 @@ class simFSEvolution: """ pos = self.fs['pos'][i,j] pos[2] = 0. + self.fs['velPot'][i,j] = 0. + self.fs['accPot'][i,j] = 0. for w in waves['data']: A = w[0] T = w[1] @@ -125,11 +137,7 @@ class simFSEvolution: l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) amp = A*np.sin(k*l - frec*(t+dt) + phase) self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp - amp = frec*A*np.cos(k*l - frec*(t+dt) + phase) - self.fs['vel'][i,j][2] = self.fs['vel'][i,j][2] - amp - amp = frec*frec*A*np.sin(k*l - frec*(t+dt) + phase) - self.fs['acc'][i,j][2] = self.fs['acc'][i,j][2] - amp - amp = grav/frec*A*np.sin(k*l - frec*(t+dt) + phase) + amp = - grav/frec*A*np.sin(k*l - frec*(t+dt) + phase) self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp amp = grav*A*np.cos(k*l - frec*(t+dt) + phase) self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py index b2da085ff..e89192c14 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -43,7 +43,8 @@ class simInitialization: # Compute time step self.dt = 0.1 for w in self.waves['data']: - self.dt = np.min(self.dt, w[1]/200.0) + if(self.dt > w[1]/200.0): + self.dt = w[1]/200.0 def loadData(self, FSmesh, waves): """ Convert data to numpy format. @@ -99,6 +100,7 @@ class simInitialization: ny = self.fs['Ny'] for i in range(0,nx): for j in range(0,ny): + self.fs['pos'][i,j][2] = 0. for w in self.waves['data']: A = w[0] T = w[1] @@ -111,11 +113,7 @@ class simInitialization: l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) amp = A*np.sin(k*l + phase) self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp - amp = frec*A*np.cos(k*l + phase) - self.fs['vel'][i,j][2] = self.fs['vel'][i,j][2] - amp - amp = frec*frec*A*np.sin(k*l + phase) - self.fs['acc'][i,j][2] = self.fs['acc'][i,j][2] - amp - amp = grav/frec*A*np.sin(k*l + phase) + amp = - grav/frec*A*np.sin(k*l + phase) self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp amp = grav*A*np.cos(k*l + phase) self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 598b6178e..01375633f 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -48,11 +48,12 @@ class Singleton(type): class FreeCADShipSimulation(threading.Thread): __metaclass__ = Singleton - def __init__ (self, device, endTime, output, FSmesh, waves): + def __init__ (self, device, endTime, output, simInstance, FSmesh, waves): """ Thread constructor. @param device Device to use. @param endTime Maximum simulation time. @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param simInstance Simulaation instance. @param FSmesh Free surface mesh faces. @param waves Waves parameters (A,T,phi,heading) """ @@ -70,6 +71,7 @@ class FreeCADShipSimulation(threading.Thread): # Storage data self.endTime = endTime self.output = output + self.sim = simInstance self.FSmesh = FSmesh self.waves = waves @@ -93,9 +95,11 @@ class FreeCADShipSimulation(threading.Thread): waves = init.waves dt = init.dt t = 0.0 + nx = FS['Nx'] + ny = FS['Ny'] msg = Translator.translate("\t[Sim]: Iterating...\n") FreeCAD.Console.PrintMessage(msg) - while self.active: + while self.active and t < self.endTime: msg = Translator.translate("\t\t[Sim]: Generating linear system matrix...\n") FreeCAD.Console.PrintMessage(msg) matGen.execute(FS, A) @@ -106,7 +110,16 @@ class FreeCADShipSimulation(threading.Thread): FreeCAD.Console.PrintMessage(msg) fsEvol.execute(FS, waves, dt, t) t = t + dt - FreeCAD.Console.PrintMessage('t = %g s' % (t)) + FreeCAD.Console.PrintMessage('t = %g s\n' % (t)) + # Update FreeCAD + """ + pos = self.sim.FS_Position[:] + for i in range(0, nx): + for j in range(0, ny): + pos[i*ny+j].z = float(FS['pos'][i,j][2]) + self.sim.FS_Position = pos[:] + FreeCAD.ActiveDocument.recompute() + """ # Set thread as stopped (and prepare it to restarting) self.active = False threading.Event().set() diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index d2c34b8b7..58faa2b2d 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -69,7 +69,7 @@ class TaskPanel: msg = Translator.translate("Launching simulation...\n") App.Console.PrintMessage(msg) # Build simulation thread - simulator = Sim(device, endTime, output, FSMesh, waves) + simulator = Sim(device, endTime, output, self.sim, FSMesh, waves) simulator.start() msg = Translator.translate("Done!\n") App.Console.PrintMessage(msg) From 3d0328134d109a5e9b79e1e3281149170cfc95d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Tue, 7 Aug 2012 12:59:34 +0200 Subject: [PATCH 500/517] First simulator draft version. --- src/Mod/Ship/CMakeLists.txt | 17 +- src/Mod/Ship/Icons/SimIco.xcf | Bin 55163 -> 58237 bytes src/Mod/Ship/Icons/SimPostIco.png | Bin 0 -> 13708 bytes src/Mod/Ship/Icons/SimPostIco.xpm | 2077 +++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 136 +- src/Mod/Ship/Makefile.am | 7 +- src/Mod/Ship/ShipGui.py | 352 ++-- src/Mod/Ship/simPost/TaskPanel.py | 156 ++ src/Mod/Ship/simPost/TaskPanel.ui | 81 + src/Mod/Ship/simPost/__init__.py | 40 + src/Mod/Ship/simRun/Sim/fsEvolution.py | 59 +- src/Mod/Ship/simRun/Sim/fsEvolution.pyc | Bin 0 -> 4941 bytes src/Mod/Ship/simRun/Simulation.py | 28 +- src/Mod/Ship/simRun/Simulation.pyc | Bin 0 -> 4343 bytes 14 files changed, 2684 insertions(+), 269 deletions(-) create mode 100644 src/Mod/Ship/Icons/SimPostIco.png create mode 100644 src/Mod/Ship/Icons/SimPostIco.xpm create mode 100644 src/Mod/Ship/simPost/TaskPanel.py create mode 100644 src/Mod/Ship/simPost/TaskPanel.ui create mode 100644 src/Mod/Ship/simPost/__init__.py create mode 100644 src/Mod/Ship/simRun/Sim/fsEvolution.pyc create mode 100644 src/Mod/Ship/simRun/Simulation.pyc diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 300f999f8..9e7ed7347 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -45,6 +45,8 @@ SET(ShipIcons_SRCS Icons/SimRunIco.xpm Icons/SimStopIco.png Icons/SimStopIco.xpm + Icons/SimPostIco.png + Icons/SimPostIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -156,7 +158,14 @@ SET(SimRun_SRCS ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS}) +SET(SimPost_SRCS + simPost/__init__.py + simPost/TaskPanel.py + simPost/TaskPanel.ui +) +SOURCE_GROUP("simpost" FILES ${SimPost_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS} ${SimPost_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -242,6 +251,12 @@ INSTALL( DESTINATION Mod/Ship/simRun ) +INSTALL( + FILES + ${SimPost_SRCS} + DESTINATION + Mod/Ship/simPost +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf index 8d250eb82f8e3c0da77f2f8765d0f0dedbbb1cc4..1c00aefe1875587f8987d1253f87003bd98f6186 100644 GIT binary patch delta 3348 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 c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #C7C6C6", +"J) c #C5C6C6", +"K) c #C6C5C6", +"L) c #B2B3B3", +"M) c #949494", +"N) c #7E7E7E", +"O) c #171718", +"P) c #0D0E0D", +"Q) c #09090A", +"R) c #080909", +"S) c #070607", +"T) c #060504", +"U) c #020303", +"V) c #B3B3B4", +"W) c #666666", +"X) c #9F9F9F", +"Y) c #C4C3C4", +"Z) c #C2C2C3", +"`) c #C0C0BF", +" ! c #BCBBBB", +".! c #909191", +"+! c #141516", +"@! c #121211", +"#! c #0F0E0F", +"$! c #090908", +"%! c #070606", +"&! c #050605", +"*! c #020101", +"=! c #B2B3B2", +"-! c #4D4E4D", +";! c #929292", +">! c #C2C3C2", +",! c #C1C2C2", +"'! c #C2C1C2", +")! c #0B0C0B", +"!! c #030202", +"~! c #000100", +"{! c #B3B2B2", +"]! c #4B4C4B", +"^! c #464745", +"/! c #AFB0AF", +"(! c #ADAEAE", +"_! c #ABAAAA", +":! c #BFBFBE", +"~ c #565756", +",~ c #989998", +"'~ c #A0A1A0", +")~ c #A4A3A4", +"!~ c #B0B1B1", +"~~ c #B1B0B1", +"{~ c #B6B7B7", +"]~ c #787877", +"^~ c #757676", +"/~ c #747474", +"(~ c #8C8D8C", +"_~ c #9D9C9D", +":~ c #A8A8A7", +"<~ c #545353", +"[~ c #989797", +"}~ c #9F9F9E", +"|~ c #A0A1A1", +"1~ c #8C8C8B", +"2~ c #706F70", +"3~ c #B1B1B0", +"4~ c #B4B5B5", +"5~ c #777677", +"6~ c #727172", +"7~ c #6B6C6C", +"8~ c #80807F", +"9~ c #919090", +"0~ c #9E9E9F", +"a~ c #A4A5A4", +"b~ c #A6A7A6", +"c~ c #898888", +"d~ c #6E6E6D", +"e~ c #5F5F60", +"f~ c #797A7A", +"g~ c #7E7F7F", +"h~ c #777777", +"i~ c #616060", +"j~ c #626263", +"k~ c #767777", +"l~ c #767675", +"m~ c #717171", +"n~ c #6E6E6F", +"o~ c #6C6D6D", +"p~ c #6A6969", +"q~ c #676767", +"r~ c #656665", +"s~ c #676766", +"t~ c #727373", +"u~ c #5C5C5B", +"v~ c #6A6A6B", +"w~ c #7B7A7B", +"x~ c #626262", +"y~ c #6B6A6B", +"z~ c #6C6B6B", +"A~ c #B1B1B2", +"B~ c #777676", +"C~ c #747575", +"D~ c #717271", +"E~ c #6D6E6D", +"F~ c #6B6B6A", +"G~ c #686767", +"H~ c #646363", +"I~ c #5D5D5C", +"J~ c #777776", +"K~ c #878788", +"L~ c #969596", +"M~ c #9A9898", +"N~ c #9A9A99", +"O~ c #646463", +"P~ c #7B7C7C", +"Q~ c #7B7C7B", +"R~ c #707170", +"S~ c #575756", +"T~ c #696968", +"U~ c #B0B0B1", +"V~ c #ABACAB", +"W~ c #787777", +"X~ c #717170", +"Y~ c #696869", +"Z~ c #666565", +"`~ c #646465", +" { c #636363", +".{ c #605F5F", +"+{ c #575758", +"@{ c #8B8A8B", +"#{ c #949393", +"${ c #666566", +"%{ c #A5A4A4", +"&{ c #969797", +"*{ c #787778", +"={ c #636364", +"-{ c #606161", +";{ c #5D5C5C", +">{ c #585958", +",{ c #5C5C5D", +"'{ c #868787", +"){ c #7F807F", +"!{ c #606160", +"~{ c #616261", +"{{ c #656566", +"]{ c #666767", +"^{ c #ADADAC", +"/{ c #A8A9A8", +"({ c #9A9999", +"_{ c #6A6A69", +":{ c #626261", +"<{ c #5F605F", +"[{ c #818081", +"}{ c #868685", +"|{ c #636362", +"1{ c #7C7B7B", +"2{ c #939292", +"3{ c #8A8B8A", +"4{ c #676768", +"5{ c #848485", +"6{ c #818281", +"7{ c #7F7E7E", +"8{ c #7B7B7A", +"9{ c #A5A6A6", +"0{ c #9F9FA0", +"a{ c #8B8C8B", +"b{ c #818180", +"c{ c #7E7D7E", +"d{ c #7C7C7D", +"e{ c #787978", +"f{ c #636463", +"g{ c #5D5D5E", +"h{ c #616160", +"i{ c #626161", +"j{ c #7C7D7C", +"k{ c #9B9A9A", +"l{ c #666667", +"m{ c #818182", +"n{ c #7D7E7D", +"o{ c #757475", +"p{ c #5F6060", +"q{ c #707171", +"r{ c #807F80", +"s{ c #8E8E8F", +"t{ c #979696", +"u{ c #959594", +"v{ c #686869", +"w{ c #7F8080", +"x{ c #7E7E7F", +"y{ c #7C7D7D", +"z{ c #737374", +"A{ c #4C4E4E", +"B{ c #535453", +"C{ c #5B595B", +"D{ c #5F5F5E", +"E{ c #747473", +"F{ c #838384", +"G{ c #908F90", +"H{ c #919192", +"I{ c #7D7C7D", +"J{ c #818282", +"K{ c #808081", +"L{ c #7F7F80", +"M{ c #5B5A5C", +"N{ c #5C5D5D", +"O{ c #828181", +"P{ c #5A595A", +"Q{ c #676667", +"R{ c #8A8A8A", +"S{ c #7A7A7B", +"T{ c #9E9E9D", +"U{ c #838282", +"V{ c #767576", +"W{ c #868585", +"X{ c #797A79", +"Y{ c #737273", +"Z{ c #626363", +"`{ c #F5F5F5", +" ] c #FDFDFD", +".] c #6E6D6D", +"+] c #7F7E7F", +"@] c #989897", +"#] c #9C9D9C", +"$] c #5E5E5F", +"%] c #CACBCB", +"&] c #FFFFFF", +"*] c #9C9B9C", +"=] c #9B9B9A", +"-] c #666665", +";] c #626362", +">] c #838483", +",] c #8D8D8C", +"'] c #959696", +")] c #959795", +"!] c #757574", +"~] c #656666", +"{] c #7D7E7E", +"]] c #737372", +"^] c #6C6C6D", +"/] c #747374", +"(] c #979796", +"_] c #939392", +":] c #7D7D7E", +"<] c #777878", +"[] c #747373", +"}] c #717071", +"|] c #858685", +"1] c #7A7B7B", +"2] c #929393", +"3] c #7C7C7B", +"4] c #F8F8F8", +"5] c #F3F3F3", +"6] c #7A7B7A", +"7] c #929293", +"8] c #898A8A", +"9] c #898988", +"0] c #787879", +"a] c #797978", +"b] c #757675", +"c] c #89898A", +"d] c #848384", +"e] c #808180", +"f] c #757576", +"g] c #747475", +"h] c #C0BFC0", +"i] c #E6FBFA", +"j] c #83EFE8", +"k] c #41E6DC", +"l] c #18DDD1", +"m] c #20DACF", +"n] c #41DBD2", +"o] c #83E5E0", +"p] c #E6F9F8", +"q] c #888788", +"r] c #838382", +"s] c #747576", +"t] c #737473", +"u] c #A4F2EE", +"v] c #20E5DA", +"w] c #19E7DB", +"x] c #18E5D9", +"y] c #18E0D4", +"z] c #18DBD0", +"A] c #18D6CB", +"B] c #19D1C6", +"C] c #21CDC3", +"D] c #A4E8E4", +"E] c #79797A", +"F] c #7A7A79", +"G] c #767776", +"H] c #A4F1EC", +"I] c #18E1D6", +"J] c #18E7DA", +"K] c #18ECDF", +"L] c #18D7CC", +"M] c #18D2C7", +"N] c #18CCC2", +"O] c #18C7BC", +"P] c #A4E6E3", +"Q] c #6B6A6A", +"R] c #747574", +"S] c #E6FAF9", +"T] c #20DCD1", +"U] c #18E4D9", +"V] c #18E6DB", +"W] c #18DCD0", +"X] c #18D7CB", +"Y] c #19CCC2", +"Z] c #18C7BD", +"`] c #20C3BA", +" ^ c #E6F7F6", +".^ c #84E8E2", +"+^ c #19D9CE", +"@^ c #19E0D5", +"#^ c #18E1D5", +"$^ c #17DED1", +"%^ c #119D95", +"&^ c #119A93", +"*^ c #17D2C6", +"=^ c #18D0C5", +"-^ c #18CBC0", +";^ c #18C6BC", +">^ c #19C0B6", +",^ c #84DAD5", +"'^ c #41DAD0", +")^ c #19D5CA", +"!^ c #18D9CD", +"~^ c #17D9CE", +"{^ c #010F0E", +"]^ c #010E0D", +"^^ c #18CBBF", +"/^ c #18C9BE", +"(^ c #18C4BA", +"_^ c #19BFB5", +":^ c #41C6BE", +"<^ c #1FCFC4", +"[^ c #18D1C6", +"}^ c #18D5C9", +"|^ c #19D6CB", +"1^ c #119990", +"2^ c #119089", +"3^ c #18C1B7", +"4^ c #18BCB3", +"5^ c #1FBAB0", +"6^ c #20CBC1", +"7^ c #19CDC3", +"8^ c #18CFC5", +"9^ c #11958E", +"0^ c #118D86", +"a^ c #19C3B9", +"b^ c #18BBB1", +"c^ c #20B7AE", +"d^ c #8A898A", +"e^ c #41D0C8", +"f^ c #19C8BE", +"g^ c #19CAC0", +"h^ c #19CCC1", +"i^ c #18CABF", +"j^ c #010D0D", +"k^ c #17C0B6", +"l^ c #18BCB2", +"m^ c #19B8AD", +"n^ c #42C0B9", +"o^ c #83DDD9", +"p^ c #19C4BA", +"q^ c #18C5BC", +"r^ c #19C7BD", +"s^ c #17C3B9", +"t^ c #118C85", +"u^ c #118B84", +"v^ c #18BFB5", +"w^ c #19BEB5", +"x^ c #19BBB1", +"y^ c #19B8AE", +"z^ c #19B3AB", +"A^ c #83D6D1", +"B^ c #878786", +"C^ c #F6F6F6", +"D^ c #E6F8F6", +"E^ c #21C1B7", +"F^ c #18C2B8", +"G^ c #18C1B8", +"H^ c #19C0B7", +"I^ c #18BCB4", +"J^ c #18BAB1", +"K^ c #18B7AE", +"L^ c #18B4AB", +"M^ c #21B5AD", +"N^ c #E6F6F6", +"O^ c #EFEFEF", +"P^ c #838283", +"Q^ c #A4E3E0", +"R^ c #19BBB2", +"S^ c #19BCB3", +"T^ c #19BDB3", +"U^ c #18BAB0", +"V^ c #18B8AF", +"W^ c #18B5AC", +"X^ c #19B3A9", +"Y^ c #19B3AA", +"Z^ c #A4E1DD", +"`^ c #A4E2DE", +" / c #21B9B0", +"./ c #18B8AE", +"+/ c #19B7AE", +"@/ c #18B6AD", +"#/ c #19B4AC", +"$/ c #18B3AA", +"%/ c #84D6D1", +"&/ c #41C0B9", +"*/ c #20B5AC", +"=/ c #6E6F6F", +"-/ c #BEBEBD", +";/ c #6F706F", +">/ c #6D6D6C", +",/ c #5E5F5E", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ", +" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ", +" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ", +" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ", +" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ", +" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ", +" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ", +" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&+~!~~~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ", +" P.{~l*(&!*}-]~0*^~/~s![-(~_~=&E&=&=&=&y*:~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$<~s !*. a)C![~}~|~|~/#/#e*1*/#e*1~. 2~K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ", +" P.4~/&/&}-*+5~F=F=s!6~5.V&S.7~-*8~9~0~9&R*R*a~b~X)c~d~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r e~}*i&V&/~f~g~N):&[*D+h~W)i~) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.$+0 j~ ", +" P.Q!L!L!*+k~l~/~/~}=m~2~n~o~p.p~w q~r~s~t~S&M)}~Y!}~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M u~! W)v~5.^~w~[-h~-*S.)*x~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.P...i&y~z~ ", +" P.A~2*H!B~^~C~s!s!D~5.n~E~p.F~.*G~W)}*H~g*! m I~Q J~K~L~F!M~N~F!|%. S.O~v I.a+$+#+Q.P.P.P.P.P.P.P.p.m~J~P~Q~0*R~p.W)1=a S~*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.g.W).*q~T~i& ", +" P.U~V~| !@W~s!-*-*X~V&d~S.< i&Y~s~Z~`~ {1=.{9 a H I +{M :.Y~. @{E@#{#{M!>)}-m~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.P.n.`.! W)N%Y&${q~w ", +" P.j*7.N!A*A*%{&{U&*{w*S.p.< .*w W)Y&={x~-{) A.;{H >{M@M P g.`.}.7@,{1!D+|%C!A!'{){}-s! {[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.n.f*H x~!{~{x~={}*{{]{ ", +" P.^{/{l!e*%{=&T.V*V*x*({;*h~_{q~W)}* {:{! ) 0 u~r .v ]@N+&.`.-.1.3.4.n.<#}.<{6~[{}{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.M.F#f.A.0 9 ) ! 1=|{ {N%Z~ ", +" P.0!-+-+%@!*1{!@2{!=x*x*c+`!Q*e*3{*+4{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+5{S&6{:&7{=*8{]~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.O.l+%.B.s I H ,{F E ! 1=1=j~H~ ", +" P.7.i*9{!*}-]~0*^~/~-*. x&,.X)_&'~0{n!e*a{}-4{c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)b{D+c{d{. f~*+e{h~-*f{g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.P.;.q$$.N M L K r c a g{9 ) ! h{i{ ", +" P.=&]&]&}-*+5~F=F=s!6~5.V&S.7~5.j{a{/=/#X*k{e*s%1~!*l{v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&m{:&;~n{P~8{p=*+J~0*o{s!/~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0 g.P.P.P.P.3.[.[.o+;.P N M v t I H u~I~9 ) e~p{ ", +" P.b~Q*Q**+k~l~/~/~}=m~2~n~o~p.p~w q~r~s~q{r{s{%~/=t{6.u{A!b%v{M [+4.Q@C+p+2+P.P.P.P.a)[*w{x{y{b%!*}-*+J~F=z{-*-*-*s!/~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N 0 P.P.Y$k.2.A{k.M.[.g.B{N M v ..K C{:.a 0 n D{ ", +" P.c+_&_&B~^~C~s!s!D~5.n~E~p.F~.*G~W)}*H~g*! m I~Z~E{F{G{H{.!&@M!|%I{.*N 0%P.P.P.P.P.J{K{L{x{[-. !*}-W~-&F=s!-*-*-*-*-*-*-*s!/~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.3.W)p+_#-%R+4.2.1.M.[.O+&.%.O N ^+O M.s r M{,{N{ ", +" P.R*i!X)O{B~s!-*-*X~V&d~S.< i&Y~s~Z~`~ {1=.{9 a H I +{M P{Q{W~!@C!A!|%R{x&N)< ..n.P.6{:&D+N)b%S{f~e{h~0*/~s!-*-*-*-*-*-*-*-*-*-*-*s!/~F=5.q~9 ..&.I.P.#+Q.Q.P.P.P.P.1.I.L.O.H#4$o+Y@|@!$4@G>$#C@y+>.i.`.&.g.#.N +#v+..s Y.r H ", +" P.[=!=T{!=!=N~M!U{V{w*S.p.< .*w W)Y&={x~-{) A.;{H >{M@M P g.`.}.}.{+< [ ~ '{W{O'S&[-b{L{N)[-%@!*X{D!0*F=/~Y{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!/~/~V&q~1=H g.n.#+v P `.&$Z{K{I!e#6 `{ ]`{k F%s%.]n%$#u#x#T$<.O+g.o+l$&.>~v .. .s ", +" P.+]#{@]N~#]_~X*X*X*k{,#S&F=_{q~W)}* {:{! ) 0 u~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%J{:&D+N)d{. !**+h~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!s!w*$]G e~U&%]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]'*x~a'~*;%`.*#A+P N N M S~]+ ", +" P.8+v+1.W)D+A!,#/=1**]=]e*s%s%,#O'F=4{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+;~[-. !*v&*+k~F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-];]z{c%&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]_&-#l%+&2$F#g.P O N M ", +" P.#+8+9+#+_+w b%>],]=+e*s%%~&{'])];!!@!]~]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+{]d{. !*v&W~0*F=/~]]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*^].**+G+&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]o*O#]*a%f*&.g.<~P 8) ", +" Q.a+ v+p+M W)/]c{|%=+:=(],._]_];!,#~ V{`~v h.`.[.k. +4.J.o+p+P.P.P.P.P.:]y{P~w~p=<]h~V{/~[]}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}]}]l*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]|]2&K=[.:+f*A+z) ", +" 8+#+R+N 1=7~1]|%=+,.2]&@M!a&a&^=~ B~${N [+4.Q@C+p+2+P.P.P.P.[-3]. f~}-h~0*F=/~t~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*F=x&4]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]5]q@L-}.x@>, ", +" $+P.4.g.H q~6]1~7],#a&1~R{8];*x&|!*+-]Z.0%P.P.P.P.P.b%. !*}-*+h~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}-R*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]9 4)@>O. ", +" Q.O.I.F.N q~b%A!C!|%9]U&~ !@O'S&a)0]w M o+P.b%1]!*a]h~0*b]z{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*[-8*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]b%>,<+ ", +" P.O.M.o+g.w =*c]U&|]d]a)e]:&D+{]d{e{. !*}-*+0*f]g]s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*O{h]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]i]j]k]l]m]n]o]p]&]&]&]&]&]&]&]&]&]q]>, ", +" P.P.P.P.p+N < =*r]b{e]N):]d{%@S{}-v&W~0*s]t]}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~ c%&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]u]v]w]x]y]z]A]B]C]D]&]&]&]&]&]&]&]&]&]!*K, z) ", +" P.Q.#+$+M. .Z*E]%@!*. F]v&*{G]F=[]t~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*R{{ &]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]H]I]J]K]J]I]l]L]M]N]O]P]&]&]&]&]&]&]&]&]&]r S) z) ", +" P.#+$+a+f@H Q]/~t]R]f]T&s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*A!!=&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]S]T]y]U]V]U]y]W]X]B]Y]Z]`] ^&]&]&]&]&]&]&]&]&]@#o)z) ", +" P.Q.$+a+#+1.H q~< S.m~s!s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*A!E@&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&].^+^l]@^#^$^%^&^*^=^-^;^>^,^&]&]&]&]&]&]&]&]&]E%x) ", +" P.#+a+a+P.k.s {q~p.m~/~s!-*-*-*-*-*-*-*-*-*-*-*A!M%&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]'^)^!^z]~^{^z)z)]^^^/^(^_^:^&]&]&]&]&]&]&]&]J$@> ", +" Q. $+M.}...) W)S.s!/~s!-*-*-*-*-*-*-*-*A!{ &]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]<^[^}^|^1^z)z)z)z)2^;^3^4^5^&]&]&]&]&]&]&]c @= ", +" Q.o+}.M 0 Y&V&F=/~s!-*-*-*-*-*|%V)&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]6^7^8^[^9^z)z)z)z)0^a^_^b^c^&]&]&]&]&]&]Q]K& ", +" #+P.n.k.&.H q~m~0*/~s!-*-*d^*@&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]e^f^g^h^i^]^z)z)j^k^_^l^m^n^&]&]&]&]&]i~O) ", +" Q.O.n.3.`.a .*s!F=/~x&1*&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]o^p^q^O]r^s^t^u^v^w^x^y^z^A^&]&]&]&]:#B$ ", +" P.O.M.n.`.9 p.B^|%C^&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]D^E^3^F^G^3^H^v^I^J^K^L^M^N^&]&]O^w@Z# ", +" P.P.O.O.M.!@P^E&&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]Q^R^S^T^S^R^U^V^W^X^Y^Z^&]&]m~b#t# ", +" P.P.d [*S&E$&]&]&]&]&]&]&]&]&]&]&]&]&]&]`^ /./+/@/#/$/Y^M^Z^&]Q*q@S#0# ", +" L{$~:&o*&]&]&]&]&]&]&]&]&]&]&]&]&]N^%/&/$/*/&/%/N^x 4$k,9$ ", +" . }-B~x&E$&]&]&]&]&]&]&]&]&]&]&]&]&]&]&]/&0 H$z+B+ ", +" h~/~m~=/m~a)/#-/V 5] ]5]^.{~M!i&l+N.3$5+8+ ", +" ;/>/i&G~N%i{,/a .M g.[.F._@o+ ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 77298ad84..e735befa1 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -1,68 +1,68 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -class ShipWorkbench ( Workbench ): - """ @brief Workbench of Ship design module. Here toolbars & icons are append. """ - from shipUtils import Paths, Translator - import ShipGui - - Icon = Paths.iconsPath() + "/Ico.png" - MenuText = str(Translator.translate("Ship design")) - ToolTip = str(Translator.translate("Ship design")) - - def Initialize(self): - from shipUtils import Translator - # ToolBar - list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] - self.appendToolbar("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Weights",list) - # Simulation stuff only if pyOpenCL & numpy are present - hasOpenCL = True - hasNumpy = True - try: - import pyopencl - except ImportError: - hasOpenCL = False - msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") - App.Console.PrintWarning(msg) - try: - import numpy - except ImportError: - hasNumpy = False - msg = Translator.translate("numpy not installed, ship simulations disabled\n") - App.Console.PrintWarning(msg) - if hasOpenCL and hasNumpy: - list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] - self.appendToolbar("Simulation",list) - - # Menu - list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] - self.appendMenu("Ship design",list) - list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendMenu("Weights",list) - if hasOpenCL and hasNumpy: - list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] - self.appendMenu("Simulation",list) - -Gui.addWorkbench(ShipWorkbench()) +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +class ShipWorkbench ( Workbench ): + """ @brief Workbench of Ship design module. Here toolbars & icons are append. """ + from shipUtils import Paths, Translator + import ShipGui + + Icon = Paths.iconsPath() + "/Ico.png" + MenuText = str(Translator.translate("Ship design")) + ToolTip = str(Translator.translate("Ship design")) + + def Initialize(self): + from shipUtils import Translator + # ToolBar + list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] + self.appendToolbar("Ship design",list) + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] + self.appendToolbar("Weights",list) + # Simulation stuff only if pyOpenCL & numpy are present + hasOpenCL = True + hasNumpy = True + try: + import pyopencl + except ImportError: + hasOpenCL = False + msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + try: + import numpy + except ImportError: + hasNumpy = False + msg = Translator.translate("numpy not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + if hasOpenCL and hasNumpy: + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim"] + self.appendToolbar("Simulation",list) + + # Menu + list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] + self.appendMenu("Ship design",list) + list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] + self.appendMenu("Weights",list) + if hasOpenCL and hasNumpy: + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim", "Ship_TrackSim"] + self.appendMenu("Simulation",list) + +Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 308131bba..2c643646c 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -46,6 +46,8 @@ nobase_data_DATA = \ Icons/SimRunIco.xpm \ Icons/SimStopIco.png \ Icons/SimStopIco.xpm \ + Icons/SimPostIco.png \ + Icons/SimPostIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -105,7 +107,10 @@ nobase_data_DATA = \ simRun/Sim/initialization.py \ simRun/Sim/matrixGen.py \ simRun/Sim/computeSources.py \ - simRun/Sim/fsEvolution.py + simRun/Sim/fsEvolution.py \ + simPost/__init__.py \ + simPost/TaskPanel.py \ + simPost/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 821bb01ac..4848a6609 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -1,169 +1,183 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -from PyQt4 import QtCore, QtGui -import FreeCAD, FreeCADGui, os - -class LoadExample: - def Activated(self): - import shipLoadExample - shipLoadExample.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/LoadIco.png" - MenuText = str(Translator.translate('Load an example ship geometry')) - ToolTip = str(Translator.translate('Load an example ship geometry able to be converted into a ship.')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class CreateShip: - def Activated(self): - import shipCreateShip - shipCreateShip.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/Ico.png" - MenuText = str(Translator.translate('Create a new ship')) - ToolTip = str(Translator.translate('Create a new ship in order to work with them')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class OutlineDraw: - def Activated(self): - import shipOutlineDraw - shipOutlineDraw.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/OutlineDrawIco.png" - MenuText = str(Translator.translate('Outline draw')) - ToolTip = str(Translator.translate('Plot ship outline draw')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class AreasCurve: - def Activated(self): - import shipAreasCurve - shipAreasCurve.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/AreaCurveIco.png" - MenuText = str(Translator.translate('Areas curve')) - ToolTip = str(Translator.translate('Plot transversal areas curve')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class Hydrostatics: - def Activated(self): - import shipHydrostatics - shipHydrostatics.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" - MenuText = str(Translator.translate('Hydrostatics')) - ToolTip = str(Translator.translate('Plot ship hydrostatics')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class SetWeights: - def Activated(self): - import tankWeights - tankWeights.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/Weight.png" - MenuText = str(Translator.translate('Set ship weights')) - ToolTip = str(Translator.translate('Set ship weights, tanks must be added later')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class CreateTank: - def Activated(self): - import tankCreateTank - tankCreateTank.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/Tank.png" - MenuText = str(Translator.translate('Create a new tank')) - ToolTip = str(Translator.translate('Create a new ship tank')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class GZ: - def Activated(self): - import tankGZ - tankGZ.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" - MenuText = str(Translator.translate('GZ curve')) - ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class CreateSim: - def Activated(self): - import simCreate - simCreate.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/SimCreateIco.png" - MenuText = str(Translator.translate('Create a new simulation')) - ToolTip = str(Translator.translate('Create a new simulation in order to process later')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class RunSim: - def Activated(self): - import simRun - simRun.load() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/SimRunIco.png" - MenuText = str(Translator.translate('Run a simulation')) - ToolTip = str(Translator.translate('Run a simulation')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -class StopSim: - def Activated(self): - import simRun - simRun.stop() - - def GetResources(self): - from shipUtils import Paths, Translator - IconPath = Paths.iconsPath() + "/SimStopIco.png" - MenuText = str(Translator.translate('Stop active simulation')) - ToolTip = str(Translator.translate('Stop active simulation')) - return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} - -FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) -FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) -FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) -FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) -FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) -FreeCADGui.addCommand('Ship_Weights', SetWeights()) -FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) -FreeCADGui.addCommand('Ship_GZ', GZ()) -FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) -FreeCADGui.addCommand('Ship_RunSim', RunSim()) -FreeCADGui.addCommand('Ship_StopSim', StopSim()) +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +from PyQt4 import QtCore, QtGui +import FreeCAD, FreeCADGui, os + +class LoadExample: + def Activated(self): + import shipLoadExample + shipLoadExample.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/LoadIco.png" + MenuText = str(Translator.translate('Load an example ship geometry')) + ToolTip = str(Translator.translate('Load an example ship geometry able to be converted into a ship.')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class CreateShip: + def Activated(self): + import shipCreateShip + shipCreateShip.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Ico.png" + MenuText = str(Translator.translate('Create a new ship')) + ToolTip = str(Translator.translate('Create a new ship in order to work with them')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class OutlineDraw: + def Activated(self): + import shipOutlineDraw + shipOutlineDraw.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/OutlineDrawIco.png" + MenuText = str(Translator.translate('Outline draw')) + ToolTip = str(Translator.translate('Plot ship outline draw')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class AreasCurve: + def Activated(self): + import shipAreasCurve + shipAreasCurve.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/AreaCurveIco.png" + MenuText = str(Translator.translate('Areas curve')) + ToolTip = str(Translator.translate('Plot transversal areas curve')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class Hydrostatics: + def Activated(self): + import shipHydrostatics + shipHydrostatics.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" + MenuText = str(Translator.translate('Hydrostatics')) + ToolTip = str(Translator.translate('Plot ship hydrostatics')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class SetWeights: + def Activated(self): + import tankWeights + tankWeights.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Weight.png" + MenuText = str(Translator.translate('Set ship weights')) + ToolTip = str(Translator.translate('Set ship weights, tanks must be added later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class CreateTank: + def Activated(self): + import tankCreateTank + tankCreateTank.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/Tank.png" + MenuText = str(Translator.translate('Create a new tank')) + ToolTip = str(Translator.translate('Create a new ship tank')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class GZ: + def Activated(self): + import tankGZ + tankGZ.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/HydrostaticsIco.png" + MenuText = str(Translator.translate('GZ curve')) + ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class CreateSim: + def Activated(self): + import simCreate + simCreate.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimCreateIco.png" + MenuText = str(Translator.translate('Create a new simulation')) + ToolTip = str(Translator.translate('Create a new simulation in order to process later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class RunSim: + def Activated(self): + import simRun + simRun.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimRunIco.png" + MenuText = str(Translator.translate('Run a simulation')) + ToolTip = str(Translator.translate('Run a simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class StopSim: + def Activated(self): + import simRun + simRun.stop() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimStopIco.png" + MenuText = str(Translator.translate('Stop active simulation')) + ToolTip = str(Translator.translate('Stop active simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + +class TrackSim: + def Activated(self): + import simPost + simPost.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimPostIco.png" + MenuText = str(Translator.translate('Track simulation')) + ToolTip = str(Translator.translate('Track simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + + +FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) +FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) +FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) +FreeCADGui.addCommand('Ship_AreasCurve', AreasCurve()) +FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) +FreeCADGui.addCommand('Ship_Weights', SetWeights()) +FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) +FreeCADGui.addCommand('Ship_GZ', GZ()) +FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) +FreeCADGui.addCommand('Ship_RunSim', RunSim()) +FreeCADGui.addCommand('Ship_StopSim', StopSim()) +FreeCADGui.addCommand('Ship_TrackSim', TrackSim()) diff --git a/src/Mod/Ship/simPost/TaskPanel.py b/src/Mod/Ship/simPost/TaskPanel.py new file mode 100644 index 000000000..9c6ca53c3 --- /dev/null +++ b/src/Mod/Ship/simPost/TaskPanel.py @@ -0,0 +1,156 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# pyOpenCL +import pyopencl as cl +# Module +import SimInstance +from shipUtils import Paths, Translator +from simRun import Simulation +Sim = Simulation.FreeCADShipSimulation +# from Simulation import FreeCADShipSimulation as Sim + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simPost/TaskPanel.ui" + + def accept(self): + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.time = form.findChild(QtGui.QLabel, "TimeLabel") + form.first = form.findChild(QtGui.QPushButton, "First") + form.prev = form.findChild(QtGui.QPushButton, "Prev") + form.now = form.findChild(QtGui.QPushButton, "Now") + form.next = form.findChild(QtGui.QPushButton, "Next") + form.last = form.findChild(QtGui.QPushButton, "Last") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.first, QtCore.SIGNAL("pressed()"), self.onFirst) + QtCore.QObject.connect(form.prev, QtCore.SIGNAL("pressed()"), self.onPrev) + QtCore.QObject.connect(form.now, QtCore.SIGNAL("pressed()"), self.onNow) + QtCore.QObject.connect(form.next, QtCore.SIGNAL("pressed()"), self.onNext) + QtCore.QObject.connect(form.last, QtCore.SIGNAL("pressed()"), self.onLast) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Track simulation")) + self.form.findChild(QtGui.QPushButton, "Now").setText(Translator.translate("Now")) + + def onFirst(self): + """ Called when first frame button is pressed. + """ + + def onPrev(self): + """ Called when previous frame button is pressed. + """ + + def onNow(self): + """ Called when actual frame button is pressed. + """ + sim = Sim() + pos = sim.sim.FS_Position[:] + nx = sim.FS['Nx'] + ny = sim.FS['Ny'] + for i in range(0, nx): + for j in range(0, ny): + pos[i*ny+j].z = float(sim.FS['pos'][i,j][2]) + sim.sim.FS_Position = pos[:] + App.ActiveDocument.recompute() + self.form.time.setText("t = %g s" % (sim.t)) + + def onNext(self): + """ Called when next frame button is pressed. + """ + + def onLast(self): + """ Called when last frame button is pressed. + """ + +def createTask(): + try: + simulator = Sim() + except: + msg = Translator.translate("Can't find any active simulation!\n") + App.Console.PrintError(msg) + return + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/simPost/TaskPanel.ui b/src/Mod/Ship/simPost/TaskPanel.ui new file mode 100644 index 000000000..dd43f4c9d --- /dev/null +++ b/src/Mod/Ship/simPost/TaskPanel.ui @@ -0,0 +1,81 @@ + + + TaskPanel + + + + 0 + 0 + 300 + 102 + + + + + 0 + 1 + + + + + 0 + 100 + + + + + 300 + 16777215 + + + + Track simulation + + + + + + |< + + + + + + + < + + + + + + + > + + + + + + + >| + + + + + + + Now + + + + + + + t = 0 s + + + + + + + + diff --git a/src/Mod/Ship/simPost/__init__.py b/src/Mod/Ship/simPost/__init__.py new file mode 100644 index 000000000..64c597c02 --- /dev/null +++ b/src/Mod/Ship/simPost/__init__.py @@ -0,0 +1,40 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() + +def stop(): + """ Stops the simulation """ + TaskPanel.stopSimulation() diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.py b/src/Mod/Ship/simRun/Sim/fsEvolution.py index fd0be670a..a4d2e0161 100644 --- a/src/Mod/Ship/simRun/Sim/fsEvolution.py +++ b/src/Mod/Ship/simRun/Sim/fsEvolution.py @@ -57,24 +57,47 @@ class simFSEvolution: # Get value at pos using characteristics method gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) - self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + \ - dt*np.linalg.norm(grad[i*ny+j]) - # Free surface points position - self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*grad[i*ny+j][2] + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*gradVal # Velocity potential self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + \ - dt*self.fs['accPot'][i,j] - \ - 0.5*dt*dt*grav*grad[i*ny+j][2] - # Acceleration potential - self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - \ - dt*grav*grad[i*ny+j][2] - # Force boundary conditions + dt*self.fs['accPot'][i,j] + \ + 0.5*dt*dt*grav*self.fs['pos'][i,j][2] + # Acceleration potential. This is really hard to simulate + # accurately due to numerical diffusion of the function, so + # external waves, and diffracted waves will be computed + # in two different ways: + # * External waves will be considered analitically, + # substracting waves at t, and adding waves at t+dt + # * Second order waves will be computed substracting external + # waves to free surface height, and then imposing boundary + # condition. + pos = np.copy(self.fs['pos'][i,j]) + for w in waves['data']: + A = w[0] + T = w[1] + phase = w[2] + heading = np.pi*w[3]/180.0 + wl = 0.5 * grav / np.pi * T*T + k = 2.0*np.pi/wl + frec = 2.0*np.pi/T + l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) + # Substract external waves height in order to know second + # order waves free surface amplitude. + amp = A*np.sin(k*l - frec*(t+dt) + phase) + pos[2] = pos[2] - amp + # Compute analitic external waves acceleration potential + amp0 = grav*A*np.cos(k*l - frec*t + phase) + amp1 = grav*A*np.cos(k*l - frec*(t+dt) + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - amp0 + amp1 + # Now impose free surface boundary condition + # self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + grav*pos[2] + # Impose values at beach (far free surface) for i in range(0,nx): for j in [0,ny-1]: - self.boundaryCondition(i,j, waves, dt, t) + self.beach(i,j, waves, dt, t) for j in range(0,ny): for i in [0,nx-1]: - self.boundaryCondition(i,j, waves, dt, t) + self.beach(i,j, waves, dt, t) def evaluateGradient(self): """ Evaluate potential gradients over free surface. @@ -84,10 +107,15 @@ class simFSEvolution: ny = self.fs['Ny'] nF = nx*ny grad = np.ndarray((nF,3), dtype=np.float32) + FF = open('gradient', 'w') for i in range(0,nx): for j in range(0,ny): pos = self.fs['pos'][i,j] grad[i*ny+j] = self.gradientphi(pos) + gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) + gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) + FF.write('%g\t%g\n' % (pos[1], gradVal)) + FF.close() return grad def gradientphi(self, pos): @@ -112,9 +140,9 @@ class simFSEvolution: grad[2] = 0. return grad - def boundaryCondition(self, i,j, waves, dt, t): - """ Compute free surface at boundaries, assuming that only - incident wave can be taken into account. + def beach(self, i,j, waves, dt, t): + """ Compute far free surface where only + incident waves can be taken into account. @param i First free surface cell index. @param j Second free surface cell index. @param waves Waves instance. @@ -133,7 +161,6 @@ class simFSEvolution: wl = 0.5 * grav / np.pi * T*T k = 2.0*np.pi/wl frec = 2.0*np.pi/T - pos = self.fs['pos'][i,j] l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) amp = A*np.sin(k*l - frec*(t+dt) + phase) self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.pyc b/src/Mod/Ship/simRun/Sim/fsEvolution.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8cf2ab57f85012e37793c30e682c17326e5a245 GIT binary patch literal 4941 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 literal 0 HcmV?d00001 From 060d63c6c91b9be39377fc3e1d3573ee116ab31e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Fri, 10 Aug 2012 11:42:03 +0200 Subject: [PATCH 501/517] Removed surfaces modules (broken due to Part import) --- src/Mod/Ship/shipAreasCurve/TaskPanel.py | 3 +-- src/Mod/Ship/shipLoadExample/TaskPanel.py | 1 - src/Mod/Ship/shipOutlineDraw/Plot.py | 31 +++++++++++++++++++++-- src/Mod/Ship/shipOutlineDraw/TaskPanel.py | 3 +-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Mod/Ship/shipAreasCurve/TaskPanel.py b/src/Mod/Ship/shipAreasCurve/TaskPanel.py index 01389551a..e027f5f9e 100644 --- a/src/Mod/Ship/shipAreasCurve/TaskPanel.py +++ b/src/Mod/Ship/shipAreasCurve/TaskPanel.py @@ -31,7 +31,6 @@ from PyQt4 import QtGui,QtCore import Preview, Plot import Instance from shipUtils import Paths, Translator -from surfUtils import Geometry from shipHydrostatics import Tools as Hydrostatics class TaskPanel: @@ -114,7 +113,7 @@ class TaskPanel: """ Set initial values for fields """ # Get objects - selObjs = Geometry.getSelectedObjs() + selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) diff --git a/src/Mod/Ship/shipLoadExample/TaskPanel.py b/src/Mod/Ship/shipLoadExample/TaskPanel.py index 2ab325d7d..b325a9236 100644 --- a/src/Mod/Ship/shipLoadExample/TaskPanel.py +++ b/src/Mod/Ship/shipLoadExample/TaskPanel.py @@ -28,7 +28,6 @@ import FreeCADGui as Gui from PyQt4 import QtGui,QtCore # Module from shipUtils import Paths, Translator -from surfUtils import Geometry class TaskPanel: def __init__(self): diff --git a/src/Mod/Ship/shipOutlineDraw/Plot.py b/src/Mod/Ship/shipOutlineDraw/Plot.py index 682c15678..004ab9b40 100644 --- a/src/Mod/Ship/shipOutlineDraw/Plot.py +++ b/src/Mod/Ship/shipOutlineDraw/Plot.py @@ -27,7 +27,6 @@ from FreeCAD import Base, Vector import Part # FreeCADShip modules from shipUtils import Paths, Translator -from surfUtils import Geometry def Plot(scale, sections, shape): """ Creates the outline draw. @@ -52,7 +51,7 @@ def Plot(scale, sections, shape): x0 = xMid - 0.5*xTot y0 = 297.0 - yMid - 0.5*yTot # 297 = A3_width # Get border - edges = Geometry.getEdges([shape]) + edges = self.getEdges([shape]) border = edges[0] for i in range(0,len(edges)): border = border.oldFuse(edges[i]) # Only group objects, don't try to build more complex entities @@ -95,3 +94,31 @@ def Plot(scale, sections, shape): FreeCAD.ActiveDocument.OutlineDrawPlot.addObject(FreeCAD.ActiveDocument.OutlineDrawUpView) FreeCAD.ActiveDocument.recompute() return obj + +def getEdges(self, objs=None): + """ Returns object edges (list of them) + @param objs Object to get the faces, none if selected + object may used. + @return Selected edges. None if errors happens + """ + edges = [] + if not objs: + objs = FreeCADGui.Selection.getSelection() + if not objs: + return None + for i in range(0, len(objs)): + obj = objs[i] + if obj.isDerivedFrom('Part::Feature'): + # get shape + shape = obj.Shape + if not shape: + return None + obj = shape + if not obj.isDerivedFrom('Part::TopoShape'): + return None + objEdges = obj.Edges + if not objEdges: + continue + for j in range(0, len(objEdges)): + edges.append(objEdges[j]) + return edges diff --git a/src/Mod/Ship/shipOutlineDraw/TaskPanel.py b/src/Mod/Ship/shipOutlineDraw/TaskPanel.py index 834738a0c..c49abcd0d 100644 --- a/src/Mod/Ship/shipOutlineDraw/TaskPanel.py +++ b/src/Mod/Ship/shipOutlineDraw/TaskPanel.py @@ -30,7 +30,6 @@ from PyQt4 import QtGui,QtCore import Preview, Plot import Instance from shipUtils import Paths, Translator -from surfUtils import Geometry class TaskPanel: def __init__(self): @@ -116,7 +115,7 @@ class TaskPanel: """ Set initial values for fields """ # Get selected objects - selObjs = Geometry.getSelectedObjs() + selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) From b349147ea2ad0c294085dedd0f5f86013c40c502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20Pita?= Date: Fri, 10 Aug 2012 16:57:58 +0200 Subject: [PATCH 502/517] Improved free surface evolving method in order to support long simulations. --- src/Mod/Ship/simRun/Sim/fsEvolution.py | 70 +++++++++++++----------- src/Mod/Ship/simRun/Sim/fsEvolution.pyc | Bin 4941 -> 0 bytes src/Mod/Ship/simRun/Simulation.py | 8 --- src/Mod/Ship/simRun/Simulation.pyc | Bin 4343 -> 0 bytes 4 files changed, 38 insertions(+), 40 deletions(-) delete mode 100644 src/Mod/Ship/simRun/Sim/fsEvolution.pyc delete mode 100644 src/Mod/Ship/simRun/Simulation.pyc diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.py b/src/Mod/Ship/simRun/Sim/fsEvolution.py index a4d2e0161..14fdf4ba3 100644 --- a/src/Mod/Ship/simRun/Sim/fsEvolution.py +++ b/src/Mod/Ship/simRun/Sim/fsEvolution.py @@ -45,33 +45,19 @@ class simFSEvolution: @param t Actual time (without adding dt). """ self.fs = fs - # Allocate memory nx = self.fs['Nx'] ny = self.fs['Ny'] nF = nx*ny - # Evaluate potential gradients grad = self.evaluateGradient() - # Integrate variables + # In order to improve results in really long simulations free surface + # will performed considering external waves and second order effects + # in two different ways. First external waves at time t will be + # substracted, then second order waves will be computed, and finally + # external waves at t+dt will be added. for i in range(0,nx): for j in range(0,ny): - # Get value at pos using characteristics method - gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) - gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) - self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*gradVal - # Velocity potential - self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + \ - dt*self.fs['accPot'][i,j] + \ - 0.5*dt*dt*grav*self.fs['pos'][i,j][2] - # Acceleration potential. This is really hard to simulate - # accurately due to numerical diffusion of the function, so - # external waves, and diffracted waves will be computed - # in two different ways: - # * External waves will be considered analitically, - # substracting waves at t, and adding waves at t+dt - # * Second order waves will be computed substracting external - # waves to free surface height, and then imposing boundary - # condition. pos = np.copy(self.fs['pos'][i,j]) + # Substract external waves at time t. for w in waves['data']: A = w[0] T = w[1] @@ -81,16 +67,39 @@ class simFSEvolution: k = 2.0*np.pi/wl frec = 2.0*np.pi/T l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) - # Substract external waves height in order to know second - # order waves free surface amplitude. - amp = A*np.sin(k*l - frec*(t+dt) + phase) + amp = A*np.sin(k*l - frec*t + phase) pos[2] = pos[2] - amp - # Compute analitic external waves acceleration potential - amp0 = grav*A*np.cos(k*l - frec*t + phase) - amp1 = grav*A*np.cos(k*l - frec*(t+dt) + phase) - self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - amp0 + amp1 - # Now impose free surface boundary condition - # self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + grav*pos[2] + amp = - grav/frec*A*np.sin(k*l - frec*t + phase) + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] - amp + amp = grav*A*np.cos(k*l - frec*t + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] - amp + # Now compute second order waves using position copy, + # where external waves are excluded, in order impose + # free surface boundary condition relative to second + # order phenomena. + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + \ + dt*self.fs['accPot'][i,j] + # self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + \ + # grav*pos[2] + # Restore external waves to velocity and acceleration + # potentials. + for w in waves['data']: + A = w[0] + T = w[1] + phase = w[2] + heading = np.pi*w[3]/180.0 + wl = 0.5 * grav / np.pi * T*T + k = 2.0*np.pi/wl + frec = 2.0*np.pi/T + l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) + amp = - grav/frec*A*np.sin(k*l - frec*(t+dt) + phase) + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp + amp = grav*A*np.cos(k*l - frec*(t+dt) + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp + # Update free surface point position + gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) + gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + dt*gradVal # Impose values at beach (far free surface) for i in range(0,nx): for j in [0,ny-1]: @@ -107,15 +116,12 @@ class simFSEvolution: ny = self.fs['Ny'] nF = nx*ny grad = np.ndarray((nF,3), dtype=np.float32) - FF = open('gradient', 'w') for i in range(0,nx): for j in range(0,ny): pos = self.fs['pos'][i,j] grad[i*ny+j] = self.gradientphi(pos) gradVal = np.dot(np.abs(grad[i*ny+j]),grad[i*ny+j]) gradVal = np.copysign(np.sqrt(np.abs(gradVal)), gradVal) - FF.write('%g\t%g\n' % (pos[1], gradVal)) - FF.close() return grad def gradientphi(self, pos): diff --git a/src/Mod/Ship/simRun/Sim/fsEvolution.pyc b/src/Mod/Ship/simRun/Sim/fsEvolution.pyc deleted file mode 100644 index e8cf2ab57f85012e37793c30e682c17326e5a245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4941 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 From 969f4b57ebd70f726b0535152c4d17d30e856232 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 14 Aug 2012 20:41:18 -0300 Subject: [PATCH 503/517] 0000715: Draft axis constraints --- src/Mod/Draft/DraftGui.py | 2 +- src/Mod/Draft/DraftSnap.py | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 1e84dbce8..85c6f8385 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -990,7 +990,7 @@ class DraftToolBar: def setCurrentText(self,tstr): if (not self.taskmode) or (self.taskmode and self.isTaskOn): self.textValue.setText(tstr) - + def sendText(self): ''' this function sends the entered text to the active draft command diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index ddc66e528..5a36e70ff 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -317,16 +317,16 @@ class Snapper: "returns a 3D point, projected on the current working plane" view = Draft.get3DView() pt = view.getPoint(x,y) - if hasattr(FreeCAD,"DraftWorkingPlane"): - if view.getCameraType() == "Perspective": - camera = view.getCameraNode() - p = camera.getField("position").getValue() - dv = pt.sub(Vector(p[0],p[1],p[2])) - else: - dv = view.getViewDirection() - return FreeCAD.DraftWorkingPlane.projectPoint(pt,dv) - else: - return pt + if self.mask != "z": + if hasattr(FreeCAD,"DraftWorkingPlane"): + if view.getCameraType() == "Perspective": + camera = view.getCameraNode() + p = camera.getField("position").getValue() + dv = pt.sub(Vector(p[0],p[1],p[2])) + else: + dv = view.getViewDirection() + return FreeCAD.DraftWorkingPlane.projectPoint(pt,dv) + return pt def snapToExtensions(self,point,last,constrain,eline): "returns a point snapped to extension or parallel line to last object, if any" From afc84ed8f7053214900a4feed35704230f56089f Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 15 Aug 2012 10:24:49 +0200 Subject: [PATCH 504/517] Add measure distance tool to toolbar in Complete workbench, disable unused command --- src/Gui/CommandStd.cpp | 2 +- src/Mod/Complete/Gui/Workbench.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Gui/CommandStd.cpp b/src/Gui/CommandStd.cpp index dba6d5f71..4bb0148a2 100644 --- a/src/Gui/CommandStd.cpp +++ b/src/Gui/CommandStd.cpp @@ -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()); } diff --git a/src/Mod/Complete/Gui/Workbench.cpp b/src/Mod/Complete/Gui/Workbench.cpp index 149f50ea5..d51928c2f 100644 --- a/src/Mod/Complete/Gui/Workbench.cpp +++ b/src/Mod/Complete/Gui/Workbench.cpp @@ -452,7 +452,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const view->setCommand("View"); *view << "Std_ViewFitAll" << "Separator" << "Std_ViewAxo" << "Separator" << "Std_ViewFront" << "Std_ViewRight" << "Std_ViewTop" << "Separator" << "Std_ViewRear" << "Std_ViewLeft" - << "Std_ViewBottom"; + << "Std_ViewBottom" << "Separator" << "Std_MeasureDistance"; // Part Design Gui::ToolBarItem* part_design = new Gui::ToolBarItem( root ); From 0d983553d9c1f074ce69f36acef7c9ba02c9a7fa Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 15 Aug 2012 13:18:19 +0200 Subject: [PATCH 505/517] Show popup menu on mouse button release to avoid problems with navigation style --- src/Gui/MouseSelection.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Gui/MouseSelection.cpp b/src/Gui/MouseSelection.cpp index 97262f601..a4733b545 100644 --- a/src/Gui/MouseSelection.cpp +++ b/src/Gui/MouseSelection.cpp @@ -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(); From 7510657f2a219c57f59574ea3ab8ce4c3354fd3a Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 15 Aug 2012 13:20:28 +0200 Subject: [PATCH 506/517] Fix possible crash when exporting STEP files --- src/Mod/Part/App/TopoShape.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index d8a5a13e2..1d50d9b13 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -145,6 +145,7 @@ # include # include # include +# include # include #include @@ -696,7 +697,7 @@ void TopoShape::exportStep(const char *filename) const STEPControl_Writer aWriter; Handle_Message_ProgressIndicator pi = new ProgressIndicator(100); - aWriter.WS()->MapReader()->SetProgress(pi); + aWriter.WS()->MapWriter()->SetProgress(pi); pi->NewScope(100, "Writing STEP file..."); pi->Show(); From b5706a8ba2ba61e619fe67e29575ee2d490a7f56 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 15 Aug 2012 15:47:57 +0200 Subject: [PATCH 507/517] Trimming & cutting from python --- src/Base/Matrix.cpp | 10 +++++ src/Base/Matrix.h | 2 + src/Mod/Mesh/App/Mesh.cpp | 79 +++++++++++++++++++++++++++++++++- src/Mod/Mesh/App/Mesh.h | 7 ++- src/Mod/Mesh/App/MeshPy.xml | 18 ++++++++ src/Mod/Mesh/App/MeshPyImp.cpp | 42 +++++++++++++++++- 6 files changed, 154 insertions(+), 4 deletions(-) diff --git a/src/Base/Matrix.cpp b/src/Base/Matrix.cpp index ba936e13f..18072b6b0 100644 --- a/src/Base/Matrix.cpp +++ b/src/Base/Matrix.cpp @@ -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]; diff --git a/src/Base/Matrix.h b/src/Base/Matrix.h index 333ae860a..b6aa5349d 100644 --- a/src/Base/Matrix.h +++ b/src/Base/Matrix.h @@ -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); //@} diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index dec5da73b..928c57edd 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include "Core/Builder.h" #include "Core/MeshKernel.h" @@ -46,6 +47,8 @@ #include "Core/Degeneration.h" #include "Core/Segmentation.h" #include "Core/SetOperations.h" +#include "Core/Triangulation.h" +#include "Core/Trim.h" #include "Core/Visitor.h" #include "Mesh.h" @@ -812,6 +815,80 @@ void MeshObject::crossSections(const std::vector& planes, st } } +void MeshObject::cut(const std::vector& polygon, MeshObject::CutType type) +{ + MeshCore::FlatTriangulator tria; + tria.SetPolygon(polygon); + // this gives us the inverse matrix + Base::Matrix4D inv = tria.GetTransformToFitPlane(); + // compute the matrix for the coordinate transformation + Base::Matrix4D mat = inv; + mat.inverseOrthogonal(); + + std::vector poly = tria.ProjectToFitPlane(); + + Base::ViewProjMatrix proj(mat); + Base::Polygon2D polygon2d; + for (std::vector::const_iterator it = poly.begin(); it != poly.end(); ++it) + polygon2d.Add(Base::Vector2D(it->x, it->y)); + + MeshCore::MeshAlgorithm meshAlg(this->_kernel); + std::vector check; + + bool inner; + switch (type) { + case INNER: + inner = true; + break; + case OUTER: + inner = false; + break; + } + + MeshCore::MeshFacetGrid meshGrid(this->_kernel); + meshAlg.CheckFacets(meshGrid, &proj, polygon2d, inner, check); + if (!check.empty()) + this->deleteFacets(check); +} + +void MeshObject::trim(const std::vector& polygon, MeshObject::CutType type) +{ + MeshCore::FlatTriangulator tria; + tria.SetPolygon(polygon); + // this gives us the inverse matrix + Base::Matrix4D inv = tria.GetTransformToFitPlane(); + // compute the matrix for the coordinate transformation + Base::Matrix4D mat = inv; + mat.inverseOrthogonal(); + + std::vector poly = tria.ProjectToFitPlane(); + + Base::ViewProjMatrix proj(mat); + Base::Polygon2D polygon2d; + for (std::vector::const_iterator it = poly.begin(); it != poly.end(); ++it) + polygon2d.Add(Base::Vector2D(it->x, it->y)); + MeshCore::MeshTrimming trim(this->_kernel, &proj, polygon2d); + std::vector check; + std::vector triangle; + + switch (type) { + case INNER: + trim.SetInnerOrOuter(MeshCore::MeshTrimming::INNER); + break; + case OUTER: + trim.SetInnerOrOuter(MeshCore::MeshTrimming::OUTER); + break; + } + + MeshCore::MeshFacetGrid meshGrid(this->_kernel); + trim.CheckFacets(meshGrid, check); + trim.TrimFacets(check, triangle); + if (!check.empty()) + this->deleteFacets(check); + if (!triangle.empty()) + this->_kernel.AddFacets(triangle); +} + MeshObject* MeshObject::unite(const MeshObject& mesh) const { MeshCore::MeshKernel result; @@ -1423,7 +1500,7 @@ MeshObject* MeshObject::meshFromSegment(const std::vector& indice return new MeshObject(kernel, _Mtrx); } -std::vector MeshObject::getSegmentsFromType(MeshObject::Type type, const Segment& aSegment, +std::vector MeshObject::getSegmentsFromType(MeshObject::GeometryType type, const Segment& aSegment, float dev, unsigned long minFacets) const { std::vector segm; diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index 3d884517f..441db4de3 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -66,7 +66,8 @@ class MeshExport MeshObject : public Data::ComplexGeoData TYPESYSTEM_HEADER(); public: - enum Type {PLANE, CYLINDER, SPHERE}; + enum GeometryType {PLANE, CYLINDER, SPHERE}; + enum CutType {INNER, OUTER}; // typedef needed for cross-section typedef std::pair TPlane; @@ -198,6 +199,8 @@ public: Base::Vector3d getPointNormal(unsigned long) const; void crossSections(const std::vector&, std::vector §ions, float fMinEps = 1.0e-2f, bool bConnectPolygons = false) const; + void cut(const std::vector& polygon, CutType); + void trim(const std::vector& polygon, CutType); //@} /** @name Selection */ @@ -266,7 +269,7 @@ public: const Segment& getSegment(unsigned long) const; Segment& getSegment(unsigned long); MeshObject* meshFromSegment(const std::vector&) const; - std::vector getSegmentsFromType(Type, const Segment& aSegment, float dev, unsigned long minFacets) const; + std::vector getSegmentsFromType(GeometryType, const Segment& aSegment, float dev, unsigned long minFacets) const; //@} /** @name Primitives */ diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index 116979807..d8dc7c78e 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -327,6 +327,24 @@ for c in mesh.getSeparatecomponents(): Get a list of facet indices and intersection points + + + Cuts the mesh with a given closed polygon +cut(list, int) -> None +The argument list is an array of points, a polygon +The argument int is the mode: 0=inner, 1=outer + + + + + + Trims the mesh with a given closed polygon +trim(list, int) -> None +The argument list is an array of points, a polygon +The argument int is the mode: 0=inner, 1=outer + + + diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index a2a1e6302..6d7c542f4 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -35,12 +35,12 @@ #include "MeshPy.cpp" #include "MeshProperties.h" #include "Core/Algorithm.h" +#include "Core/Triangulation.h" #include "Core/Iterator.h" #include "Core/Degeneration.h" #include "Core/Elements.h" #include "Core/Grid.h" #include "Core/MeshKernel.h" -#include "Core/Triangulation.h" #include "Core/Segmentation.h" #include "Core/Curvature.h" @@ -1280,6 +1280,46 @@ PyObject* MeshPy::foraminate(PyObject *args) } } +PyObject* MeshPy::cut(PyObject *args) +{ + PyObject* poly; + int mode; + if (!PyArg_ParseTuple(args, "O!i", &PyList_Type, &poly, &mode)) + return NULL; + + Py::List list(poly); + std::vector polygon; + polygon.reserve(list.size()); + for (Py::List::iterator it = list.begin(); it != list.end(); ++it) { + Base::Vector3d pnt = Py::Vector(*it).toVector(); + polygon.push_back(Base::convertTo(pnt)); + } + + getMeshObjectPtr()->cut(polygon, MeshObject::CutType(mode)); + + Py_Return; +} + +PyObject* MeshPy::trim(PyObject *args) +{ + PyObject* poly; + int mode; + if (!PyArg_ParseTuple(args, "O!i", &PyList_Type, &poly, &mode)) + return NULL; + + Py::List list(poly); + std::vector polygon; + polygon.reserve(list.size()); + for (Py::List::iterator it = list.begin(); it != list.end(); ++it) { + Base::Vector3d pnt = Py::Vector(*it).toVector(); + polygon.push_back(Base::convertTo(pnt)); + } + + getMeshObjectPtr()->trim(polygon, MeshObject::CutType(mode)); + + Py_Return; +} + PyObject* MeshPy::smooth(PyObject *args) { int iter=1; From e4e997fd12c1babd4bdeee474becf6584c4057b5 Mon Sep 17 00:00:00 2001 From: jriegel Date: Wed, 15 Aug 2012 16:40:03 +0200 Subject: [PATCH 508/517] extend boost fix for newer boost versions --- src/App/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index e6a399926..948748fcc 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -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; } } From c2955998282fa63acab0d513e4a70382105ae236 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 15 Aug 2012 12:20:19 -0300 Subject: [PATCH 509/517] Arch: small optimizations --- src/Mod/Arch/ArchSectionPlane.py | 86 ++++++++++++++++++-------------- src/Mod/Arch/ArchStructure.py | 17 ++++--- src/Mod/Arch/ArchWall.py | 76 ++++++++++++++-------------- 3 files changed, 97 insertions(+), 82 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 8dbb779ab..5f9be09d5 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -199,6 +199,7 @@ class _ArchDrawingView: def onChanged(self, obj, prop): if prop in ["Source","RenderingMode"]: + self.buildSVG(obj) obj.ViewResult = self.updateSVG(obj) def __getstate__(self): @@ -221,7 +222,7 @@ class _ArchDrawingView: [V0,V1,H0,H1] = Drawing.project(self.baseshape,self.direction) return V0.Edges+V1.Edges else: - print "No shape has been computed yet" + print "No shape has been computed yet, use wireframe rendering and re-render" return None def getDXF(self): @@ -232,24 +233,20 @@ class _ArchDrawingView: DxfOutput = Drawing.projectToDXF(self.baseshape,self.direction) return DxfOutput else: - print "No shape has been computed yet" + print "No shape has been computed yet, use wireframe rendering and re-render" return None - def updateSVG(self, obj,join=False): - "encapsulates a svg fragment into a transformation node" + 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.removeHidden(objs) - svg = '' - - st = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetFloat("CutLineThickness") - if not st: st = 2 + self.svg = '' # generating SVG - linewidth = obj.LineWidth/obj.Scale if obj.RenderingMode == "Solid": # render using the Arch Vector Renderer import ArchVRM @@ -257,10 +254,10 @@ class _ArchDrawingView: render.setWorkingPlane(obj.Source.Placement) render.addObjects(Draft.getGroupContents(objs,walls=True)) render.cut(obj.Source.Shape,obj.ShowCut) - svg += render.getViewSVG(linewidth=linewidth) - svg += render.getSectionSVG(linewidth=linewidth*st) + self.svg += render.getViewSVG(linewidth="LWPlaceholder") + self.svg += render.getSectionSVG(linewidth="SWPLaceholder") if obj.ShowCut: - svg += render.getHiddenSVG(linewidth=linewidth) + self.svg += render.getHiddenSVG(linewidth="LWPlaceholder") # print render.info() else: @@ -282,6 +279,8 @@ class _ArchDrawingView: 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) @@ -294,20 +293,20 @@ class _ArchDrawingView: 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="' + str(linewidth) + 'px"') - svgf = svgf.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') - svgf = svgf.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px') - svg += svgf + 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="' + str(linewidth) + 'px"') - svgh = svgh.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') - svgh = svgh.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px') + 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"') - svg += svgh + self.svg += svgh if sshapes: edges = [] for s in sshapes: @@ -320,22 +319,35 @@ class _ArchDrawingView: sshapes = Part.makeCompound(faces) svgs = Drawing.projectToSVG(sshapes,self.direction) if svgs: - svgs = svgs.replace('stroke-width="0.35"','stroke-width="' + str(linewidth*st) + 'px"') - svgs = svgs.replace('stroke-width="1"','stroke-width="' + str(linewidth*st) + 'px"') - svgs = svgs.replace('stroke-width:0.01','stroke-width:' + str(linewidth*st) + 'px') - svg += 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 += ' Date: Wed, 15 Aug 2012 18:39:53 -0300 Subject: [PATCH 510/517] Arch: Fixed strings to be translated --- src/Mod/Arch/ArchCommands.py | 22 ++++++++++------------ src/Mod/Arch/ArchComponent.py | 3 ++- src/Mod/Arch/ArchSectionPlane.py | 6 +++--- src/Mod/Arch/ArchWall.py | 2 +- src/Mod/Arch/ArchWindow.py | 6 +----- src/Mod/Arch/importDAE.py | 7 ++++--- src/Mod/Arch/importIFC.py | 7 ++++--- src/Mod/Arch/importOBJ.py | 3 ++- src/Mod/Draft/Draft.py | 9 ++++++++- 9 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 44dd537c2..1268dd89f 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -111,9 +111,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) @@ -127,10 +125,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: @@ -293,7 +291,7 @@ def getCutVolume(cutplane,shapes): 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): - print "No objects are cut by the plane" + 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), @@ -475,19 +473,19 @@ def check(objectslist,includehidden=False): else: s = o.Shape if (not s.isClosed()) and (not (Draft.getType(o) == "Axis")): - bad.append([o,"is not closed"]) + bad.append([o,str(translate("Arch","is not closed"))]) elif not s.isValid(): - bad.append([o,"is not valid"]) + bad.append([o,str(translate("Arch","is not valid"))]) elif (not s.Solids) and (not (Draft.getType(o) == "Axis")): - bad.append([o,"doesn't contain any solid"]) + 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 @@ -589,7 +587,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(): @@ -694,7 +692,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: diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index b97d022ed..a2646dcc0 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -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 @@ -317,7 +318,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 diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 5f9be09d5..96f55f982 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -222,7 +222,7 @@ class _ArchDrawingView: [V0,V1,H0,H1] = Drawing.project(self.baseshape,self.direction) return V0.Edges+V1.Edges else: - print "No shape has been computed yet, use wireframe rendering and re-render" + FreeCAD.Console.PrintMessage(str(translate("Arch","No shape has been computed yet, select wireframe rendering and render again"))) return None def getDXF(self): @@ -233,7 +233,7 @@ class _ArchDrawingView: DxfOutput = Drawing.projectToDXF(self.baseshape,self.direction) return DxfOutput else: - print "No shape has been computed yet, use wireframe rendering and re-render" + 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): @@ -273,7 +273,7 @@ class _ArchDrawingView: if o.Shape.isValid(): shapes.extend(o.Shape.Solids) else: - FreeCAD.Console.PrintWarning("Skipping invalid object: "+o.Name) + FreeCAD.Console.PrintWarning(str(translate("Arch","Skipping invalid object: "))+o.Name) cutface,cutvolume,invcutvolume = ArchCommands.getCutVolume(obj.Source.Shape.copy(),shapes) if cutvolume: nsh = [] diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 8d1258e26..d39e1c1df 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -390,7 +390,7 @@ class _Wall(ArchComponent.Component): if sh.isClosed() and sh.isValid() and sh.Solids and (not sh.isNull()): base = sh else: - FreeCAD.Console.PrintWarning("This mesh is an invalid solid") + FreeCAD.Console.PrintWarning(str(translate("Arch","This mesh is an invalid solid"))) obj.Base.ViewObject.show() if base: diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 5a78ce627..36051685e 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -161,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) @@ -440,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) diff --git a/src/Mod/Arch/importDAE.py b/src/Mod/Arch/importDAE.py index 123adadae..408dccce0 100644 --- a/src/Mod/Arch/importDAE.py +++ b/src/Mod/Arch/importDAE.py @@ -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) diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 17dc3d166..f99a3df30 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -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)) diff --git a/src/Mod/Arch/importOBJ.py b/src/Mod/Arch/importOBJ.py index f947afbcd..1042d1425 100644 --- a/src/Mod/Arch/importOBJ.py +++ b/src/Mod/Arch/importOBJ.py @@ -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) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 337d49756..4843a1863 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -74,7 +74,6 @@ How it works / how to extend: # import FreeCAD modules import FreeCAD, math, sys, os, DraftVecUtils, Draft_rc from FreeCAD import Vector -from pivy import coin if FreeCAD.GuiUp: import FreeCADGui, WorkingPlane @@ -220,6 +219,7 @@ def ungroup(obj): def dimSymbol(): "returns the current dim symbol from the preferences as a pivy SoMarkerSet" s = getParam("dimsymbol") + from pivy import coin marker = coin.SoMarkerSet() if s == 0: marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_5_5 elif s == 1: marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_7_7 @@ -1816,6 +1816,7 @@ class _ViewProviderDimension: def calcGeom(self,obj): import Part, DraftGeomUtils + from pivy import coin p1 = obj.Start p4 = obj.End base = Part.Line(p1,p4).toShape() @@ -1866,6 +1867,7 @@ class _ViewProviderDimension: return p1,p2,p3,p4,tbase,norm,rot def attach(self, obj): + from pivy import coin self.Object = obj.Object p1,p2,p3,p4,tbase,norm,rot = self.calcGeom(obj.Object) self.color = coin.SoBaseColor() @@ -1932,6 +1934,7 @@ class _ViewProviderDimension: self.onChanged(obj,"FontName") def updateData(self, obj, prop): + from pivy import coin try: dm = obj.ViewObject.DisplayMode except: @@ -2122,6 +2125,7 @@ class _ViewProviderAngularDimension: obj.Override = '' def attach(self, vobj): + from pivy import coin self.Object = vobj.Object self.arc = None c,tbase,trot,p2,p3 = self.calcGeom(vobj.Object) @@ -2202,6 +2206,7 @@ class _ViewProviderAngularDimension: return cir, tbase, trot, cir.Vertexes[0].Point, cir.Vertexes[-1].Point def updateData(self, obj, prop): + from pivy import coin text = None ivob = None c,tbase,trot,p2,p3 = self.calcGeom(obj) @@ -2492,6 +2497,7 @@ class _ViewProviderWire(_ViewProviderDraft): "Displays a dim symbol at the end of the wire") def attach(self, obj): + from pivy import coin self.Object = obj.Object col = coin.SoBaseColor() col.rgb.setValue(obj.LineColor[0], @@ -2646,6 +2652,7 @@ class _BSpline: class _ViewProviderBSpline(_ViewProviderDraft): "A View Provider for the BSPline object" def __init__(self, obj): + from pivy import coin _ViewProviderDraft.__init__(self,obj) obj.addProperty("App::PropertyBool","EndArrow", "Base","Displays a dim symbol at the end of the wire") From 0d475b6fe04d614fb097a61843b1da30cc1881e3 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 16 Aug 2012 12:24:45 -0300 Subject: [PATCH 511/517] Misc polishes to Arch and Draft + The Draft Drawing tool can make additional views of SectionPlanes + Draft Dimensions have a readonly "Distance" property that show the length + The Draft WB can be completely switched off (since all tools are also in Arch) --- src/Mod/Arch/ArchSectionPlane.py | 17 +- src/Mod/Draft/Draft.py | 33 +- src/Mod/Draft/Draft_rc.py | 627 ++++++++++--------- src/Mod/Draft/InitGui.py | 4 +- src/Mod/Draft/Resources/ui/userprefs-base.ui | 19 + 5 files changed, 372 insertions(+), 328 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 96f55f982..d9eecb8e5 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -253,11 +253,15 @@ class _ArchDrawingView: render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) render.addObjects(Draft.getGroupContents(objs,walls=True)) - render.cut(obj.Source.Shape,obj.ShowCut) + 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 obj.ShowCut: - self.svg += render.getHiddenSVG(linewidth="LWPlaceholder") + if hasattr(obj,"ShowCut"): + if obj.ShowCut: + self.svg += render.getHiddenSVG(linewidth="LWPlaceholder") # print render.info() else: @@ -285,9 +289,10 @@ class _ArchDrawingView: s = sol.section(cutface) nsh.extend(c.Solids) sshapes.append(s) - if obj.ShowCut: - c = sol.cut(invcutvolume) - hshapes.append(c) + if hasattr(obj,"ShowCut"): + if obj.ShowCut: + c = sol.cut(invcutvolume) + hshapes.append(c) shapes = nsh if shapes: self.shapes = shapes diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 4843a1863..909aaf916 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1510,15 +1510,23 @@ def makeDrawingView(obj,page,lwmod=None,tmod=None): given page. lwmod modifies lineweights (in percent), tmod modifies text heights (in percent). The Hint scale, X and Y of the page are used. ''' - viewobj = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View"+obj.Name) - _DrawingView(viewobj) - page.addObject(viewobj) - viewobj.Scale = page.ViewObject.HintScale - viewobj.X = page.ViewObject.HintOffsetX - viewobj.Y = page.ViewObject.HintOffsetY - viewobj.Source = obj - if lwmod: viewobj.LineweightModifier = lwmod - if tmod: viewobj.TextModifier = tmod + if getType(obj) == "SectionPlane": + import ArchSectionPlane + viewobj = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View") + page.addObject(viewobj) + ArchSectionPlane._ArchDrawingView(viewobj) + viewobj.Source = obj + viewobj.Label = "View of "+obj.Name + else: + viewobj = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View"+obj.Name) + _DrawingView(viewobj) + page.addObject(viewobj) + viewobj.Scale = page.ViewObject.HintScale + viewobj.X = page.ViewObject.HintOffsetX + viewobj.Y = page.ViewObject.HintOffsetY + viewobj.Source = obj + if lwmod: viewobj.LineweightModifier = lwmod + if tmod: viewobj.TextModifier = tmod return viewobj def makeShape2DView(baseobj,projectionVector=None): @@ -1785,6 +1793,7 @@ class _Dimension: "The base object this dimension is linked to") obj.addProperty("App::PropertyIntegerList","LinkedVertices","Base", "The indices of the vertices from the base object to measure") + obj.addProperty("App::PropertyLength","Distance","Base","The measurement of this dimension") obj.Start = FreeCAD.Vector(0,0,0) obj.End = FreeCAD.Vector(1,0,0) obj.Dimline = FreeCAD.Vector(0,1,0) @@ -1792,7 +1801,7 @@ class _Dimension: self.Type = "Dimension" def onChanged(self, obj, prop): - pass + obj.setEditorMode('Distance',1) def execute(self, obj): if obj.ViewObject: @@ -1992,6 +2001,10 @@ class _ViewProviderDimension: self.line.numVertices.setValues([3,3]) self.coord1.point.setValue((p2.x,p2.y,p2.z)) self.coord2.point.setValue((p3.x,p3.y,p3.z)) + if hasattr(obj,"Distance"): + l = p3.sub(p2).Length + if round(obj.Distance,precision()) != round(l,precision()): + obj.Distance = l def onChanged(self, vp, prop): self.Object = vp.Object diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py index 4028d367e..770792e39 100644 --- a/src/Mod/Draft/Draft_rc.py +++ b/src/Mod/Draft/Draft_rc.py @@ -2,8 +2,8 @@ # Resource object code # -# Created: Wed Jun 6 16:21:23 2012 -# by: The Resource Compiler for PyQt (Qt v4.8.1) +# Created: Thu Aug 16 12:22:58 2012 +# by: The Resource Compiler for PyQt (Qt v4.8.2) # # WARNING! All changes made in this file will be lost! @@ -26767,263 +26767,268 @@ qt_resource_data = "\ \x33\x2e\x72\x9f\xc2\xcc\xa8\x77\x7d\x66\xc6\x1b\xcc\xef\xf2\x48\ \xa6\x8c\x0e\x28\xa3\x2d\x9e\x88\x63\x66\x74\x00\x9f\x1b\xd5\x84\ \x37\x0f\xfe\x01\xbd\x89\x17\xfc\ -\x00\x00\x0f\xe1\ +\x00\x00\x10\x37\ \x00\ -\x00\xa3\x4a\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ -\x0f\x45\x0f\xc8\xc6\xb1\xf3\x6e\x1d\x2f\xda\xf4\x09\x74\x77\xbb\ -\x75\xda\xde\xde\x97\x05\x2d\xd1\x36\xaf\xb2\xe8\x8a\x74\x12\x2f\ -\xee\xc7\xdf\x0c\x49\x59\x8f\xc8\x72\x64\x59\x96\xdd\xba\x28\x10\ -\x89\xa4\xc8\xe1\x70\x5e\x9c\x19\xd2\xed\x5f\xef\x47\x1e\xb9\x65\ -\x81\xe4\xc2\xbf\xda\x6f\x1e\x1e\xed\x13\xe6\x3b\xc2\xe5\xfe\xe0\ -\x6a\xff\xf3\xcd\x9b\x5f\x2e\xf6\x7f\xed\xec\xb5\x27\x3c\x6a\x74\ -\x02\x8d\x3a\x7b\xa4\xed\x78\x54\xca\xce\xdb\x09\x7f\xf6\xec\x15\ -\xa7\x9e\x18\xc0\x5f\x6f\xd0\x65\x4a\xc1\xc7\xf2\x55\x40\xfb\xaa\ -\xdd\x30\x8d\xa0\xf5\x1d\x77\x07\x4c\x11\xfd\x7e\xb5\xff\xe7\x57\ -\xfd\xba\x4f\x7c\x3a\x62\x57\xfb\xb9\x9d\xe0\x60\xa4\x3d\x0e\xc4\ -\x98\x05\x6a\x6a\xbf\x18\x30\x31\x62\x2a\x98\xea\x4a\xd2\x0e\x98\ -\xa3\xf4\x13\x69\xdf\x77\x8e\xda\x8d\x7b\xfb\x32\xc5\x97\xa9\x7d\ -\x01\x10\xd4\xb0\x73\x7a\x09\x45\xe6\xd1\x14\x0f\x19\x1f\x0c\x55\ -\xe7\xec\xb8\xd5\x6e\xd8\x67\xdd\x67\x23\xec\xb4\xdd\x08\x07\xcf\ -\x82\xe4\x8e\xfb\xae\xb8\xbb\xe1\xca\x63\x16\x18\xa9\x02\x00\xbe\ -\xf3\x96\xf9\x2c\xa0\x1e\x91\x76\x32\xed\x86\xad\x78\xd8\xa5\x47\ -\xa7\x62\x12\x21\xe7\xcb\x4b\x71\xff\x41\x17\xd9\x1e\x53\x43\xca\ -\x31\x75\xa0\xa3\x7d\x3b\x01\x7f\x32\xea\xb1\xa0\x73\xd6\x6e\xd8\ -\x27\x03\x7e\x7c\x84\x07\x5d\x8c\x68\x30\xe0\x7e\xaa\x87\xcb\xdc\ -\x1e\xb8\x62\xa3\x08\x93\xf1\xc5\x7c\x1b\x88\xc9\x18\x60\x0e\x97\ -\x73\x10\xbe\x9b\xe6\x0f\x06\x57\x11\xb2\x32\xf0\xa5\x17\x9d\x74\ -\x33\xb0\xf6\x10\xa8\x5c\xdc\xd9\xd1\x80\x70\x15\x77\xa8\x67\x4a\ -\xff\x6e\x45\x03\x47\x33\xca\xe8\xe8\xdd\x83\x8e\x86\x22\xe0\xff\ -\x08\x5f\xcd\xba\x6a\x5e\xce\xfa\x4a\xf7\xf6\x10\x49\x1f\x68\x8f\ -\x79\x61\x57\x1e\xbe\x24\xbf\xcf\x40\x13\xbb\x57\x89\x06\x33\x54\ -\x19\x14\x71\x5f\xb1\xa0\x4f\x1d\x46\x46\xc2\x65\x29\x44\x65\x63\ -\xcb\x14\x1a\xc8\x62\xa0\x37\x92\xb0\x2f\x98\x8a\xe6\xd6\x8f\x01\ -\xeb\x5f\x8b\x51\x4f\xc4\xd7\x1d\x2b\xc6\x50\xe1\x60\x45\x4f\xdc\ -\xff\x7d\x92\x3f\x41\x21\xbc\x1b\x3e\xce\x9e\xe3\xcd\x90\x4b\x02\ -\xff\xd5\x90\x91\xcf\xef\xf5\x14\x61\xc6\xe4\x6e\xc8\x9d\xa1\x2e\ -\x34\x48\x80\xf2\x89\xc7\xc8\x1d\xf7\x3c\x72\x27\x82\x6f\xcf\xc8\ -\x0d\xf4\xda\xa3\x81\xf9\x42\x97\x8f\x3d\x44\x12\xf5\x42\xda\x0a\ -\x39\x12\xfb\xa3\xf0\x36\xa6\x01\x55\x8c\x28\xf3\xe1\x01\x8e\x01\ -\x5d\x2a\x2a\xbf\x25\xfb\x99\x48\xa6\x47\x7e\x13\x30\x76\xfd\xe2\ -\x15\xb9\x81\x16\xb7\x9c\xdd\x11\x39\x95\x80\x31\xd2\x17\x81\x1e\ -\x85\x2b\x89\x6d\x03\xb3\x42\xd4\x51\x20\x37\x1f\xbd\x3c\x0f\xb0\ -\x84\x08\x7d\xed\xa3\xac\x23\x52\xb9\x00\xfb\xd5\xfe\x51\x0a\x65\ -\x8e\xed\xfb\x33\xff\x4d\x53\x82\x53\x66\xac\x8f\x54\x0d\x17\x0f\ -\x05\x03\x35\x42\x19\xff\xe8\xd1\x52\x74\xf5\x18\x92\x8f\xe8\xc1\ -\xac\x4e\x16\x1e\xe7\x0d\xd7\x48\x8f\x57\x0e\x00\xbb\xda\x65\x20\ -\x58\xc8\x7b\xed\x86\x11\x43\x33\x19\x95\xa8\x2e\x2d\xb1\x5a\xe5\ -\x04\x56\x6b\x59\x79\xc5\xfa\x74\xe2\x41\xd7\xc2\x13\x99\x2b\x58\ -\xb9\xa0\x82\x71\x5f\x4e\x94\x12\x7e\x86\xac\x82\xba\x9e\xa9\x5b\ -\x5a\x58\xa1\x54\x70\xe3\x93\xd4\xb2\xc0\x07\xd1\x20\x7a\xff\x05\ -\x33\x22\xad\xc6\xf2\x68\x26\x35\xae\xee\x2e\xcd\x84\x58\x96\xa2\ -\xd2\x80\xb9\x68\xec\xe0\x9f\x64\xc5\x00\xa4\x95\x8f\x55\xe6\x21\ -\x59\xd9\xf3\x26\x0c\xeb\xf4\xdf\x24\x41\x3f\x18\x64\xe5\xe2\xca\ -\x92\xc3\x66\x4a\xab\xd2\xd4\x97\xc5\x40\x0b\xf4\xe1\x5c\x06\xea\ -\xfa\x74\xbc\xe9\xdc\xb3\x48\x3a\x14\xe7\x1f\x89\xb3\x96\x53\xb0\ -\x25\xbc\x1d\x03\x25\xc0\xb7\xb8\x40\x04\xfd\x7c\x4c\xb4\xac\xd5\ -\x7c\x2d\x7c\x78\x9a\x68\x73\x6c\xe3\x99\xe9\x78\x35\x96\xf3\x43\ -\xa6\xb2\x0a\x89\xf4\x18\xb4\x25\x6e\x40\xef\x7c\x6b\xf0\x72\xc4\ -\x4a\x0c\x45\x68\xf8\x1e\xae\x87\xef\x4e\x4e\xe6\x33\x5e\xb3\x75\ -\x9a\xc3\x7a\xad\xd3\xd3\xda\xb4\x57\x84\xab\x9f\x8f\x09\x17\xd0\ -\xe7\x42\x53\xd0\xe3\x60\x1d\xa1\x17\xa6\x06\x1e\xec\x8e\xb9\x9f\ -\xb5\x6d\x95\x50\xde\x8b\xdc\x16\xd9\x33\x7b\xac\x1a\x9b\x4d\x70\ -\x75\xa6\xe0\x2d\x05\x3a\x4f\x8d\x6c\x1d\x36\xad\x84\xeb\xa6\x50\ -\xaf\x05\x48\x3e\xb6\x68\x5b\x4a\xea\x15\xef\xaf\x8e\x4b\xee\xaf\ -\x8e\x4a\xa9\x36\xca\xb5\xd0\xde\x48\x4f\xd0\x69\x19\x7d\xc6\xc8\ -\x6c\x82\xa8\xb4\x60\x8e\xbc\xcf\x59\x40\xbe\xb1\xe9\x5a\xfc\x2a\ -\x30\xa0\x13\x02\xb0\xa9\xa4\x5f\xce\xb9\x21\x87\x1c\x07\xab\xcb\ -\xb7\xe2\xa8\xc0\xab\x6f\x74\xea\x95\x9a\xfa\x12\x6c\x84\x1e\x7c\ -\xa0\xdf\xb4\x14\xe9\xea\xe2\x05\xbc\x02\xad\x19\x34\x46\xb3\x23\ -\x45\x3d\x0c\x54\x40\xe7\x4f\xf5\xec\xd9\xbb\x59\x8f\xed\x86\x2e\ -\x2c\x4c\xaa\x92\xff\xc3\xde\x71\x5f\xcd\x27\x55\x6c\x91\x42\xa7\ -\x89\xaa\x9c\x24\xe3\x2b\xb3\x5a\x1b\x5b\x69\x1d\x25\xc2\x2c\x11\ -\x58\xe9\x0e\xe7\x88\x2c\x83\xba\x95\xda\x32\xad\x66\x99\x6d\xf9\ -\xa6\x4a\xdc\xb3\x72\x12\x57\xda\xb9\xad\x40\xd2\x3a\x93\x20\x00\ -\x92\x7d\xef\xbb\xec\x3e\xdb\x7c\x69\xae\xc5\x7c\x81\xd9\xe0\xac\ -\x76\x12\xdc\x94\xee\x24\x78\x54\xb0\x62\x09\x9e\xcf\x7b\x3b\x09\ -\xbe\x72\x09\xbe\x6c\x64\xe2\x85\xa7\x36\x56\x80\x9f\x97\x13\xe0\ -\xd4\x4c\x6d\x2d\xf2\x7b\x3d\xdb\x4f\x98\x8d\x66\xf4\x9d\xf8\xde\ -\x89\xef\x4d\x8a\xaa\x36\xe3\x54\xb4\x4c\x1e\x48\xb9\x6d\xbf\x75\ -\xd7\xea\xac\x1b\xfd\x49\x0d\xd2\xec\x03\xf7\xd9\x6b\x97\xab\x07\ -\xd2\x0c\x5d\x46\x0c\x2a\xca\x44\x87\xb2\x1c\xda\xd1\x6c\xb5\x7f\ -\x2d\xe1\xb8\x0e\x93\xc3\x96\x97\x78\x8f\x43\xf9\x5a\x7c\x0f\xf1\ -\x99\xe9\x49\x9b\x15\xde\x4c\x19\x58\x37\x27\x9e\x3c\x9e\x11\x23\ -\x45\x3c\x64\xce\xb7\x4c\x45\x8c\x15\xa5\xfc\xc1\xba\x07\x20\x5b\ -\x24\xdf\x3e\x01\x08\xc9\x1d\xf5\x15\x51\x62\x96\x4a\xa4\x03\x07\ -\x8d\x98\xaf\x38\x10\x23\x5d\x61\x93\x91\x08\x95\x21\xc9\x57\x41\ -\xcd\x5d\x7a\x0b\x30\x18\xf5\x6e\x63\x44\xd4\x77\x63\xbe\x6b\xea\ -\x04\x42\x4a\x22\x99\xc4\xe4\xcf\x12\xbe\xeb\x22\x51\x4d\x00\x4a\ -\xf8\xec\x9e\x6f\xac\xaa\xaf\x9b\xcc\xcf\xab\x20\xf3\x32\x2e\xda\ -\xf7\x7d\x4b\xe5\x92\xe8\xee\x98\x7b\x00\xe4\x34\x9e\xc6\x92\xe7\ -\x7a\x0c\x8c\xd0\xb1\x0a\x29\x0a\xac\xdc\x11\x90\xda\x01\x11\x40\ -\xed\xc1\x1d\x97\x2c\x2c\x92\xa6\x3d\xf5\xee\xe8\x14\x28\x4f\xd1\ -\x00\x53\x1d\x89\x2f\x7e\x99\xf5\x58\x05\x2b\xbc\xf5\x44\x8f\x7a\ -\x64\x05\x63\x58\x0c\xa4\x86\xe9\x01\xfe\x3a\x20\xc8\xa1\x63\xfd\ -\x58\xad\xce\x18\x4f\x47\x1b\x9c\x09\x58\x37\xff\x34\x2f\x2a\x61\ -\xa0\x12\x31\xfb\xdf\x45\x30\xa2\x9e\x37\x3d\x20\x80\x48\x16\x68\ -\x32\xc4\x50\x87\x8d\x19\x1e\x58\x65\x31\xe6\x4c\x12\x04\x4e\x32\ -\x0f\xca\x99\x7b\x48\x42\xd6\x13\x63\x6d\xfb\xc4\x39\x10\xbf\xe9\ -\x51\xe0\xac\x30\xe6\x1f\x32\x62\xf8\x35\xf0\x95\x54\x8c\xba\x25\ -\xa2\xfc\x39\xba\x45\x0f\x92\x04\x20\x31\xb9\xf5\x28\x13\x0d\xc5\ -\x4b\x00\xe2\x8f\x30\xfc\xba\xe3\x89\x2c\x9e\x38\xad\x84\x25\x2e\ -\x56\xab\x53\xb4\x09\x15\xd7\x0e\xe8\xa4\x06\x73\x0a\x8c\x05\xa9\ -\x62\xfc\x62\x33\x5a\x30\xbb\x05\x4a\x35\x93\xf8\x42\xc5\xbe\xef\ -\x19\x07\xf7\x58\x7f\xe3\x7b\x53\xf8\x80\xf9\x04\x40\x07\x3b\x07\ -\x8a\xae\x6f\x3e\x7d\xa8\x84\x29\x5e\x24\xe1\x0e\xc1\x7d\xea\x72\ -\x49\x7b\x5e\xe4\x75\x47\x87\xcd\xbf\xb6\x59\x05\x99\x05\xea\x6e\ -\xb0\xbb\x7d\xe5\x4e\xdf\xfc\x1d\xee\xce\xe9\xbb\x6a\xa7\x6f\xb3\ -\xa4\x83\x34\xa0\x2e\x9f\xc8\x59\xa6\xa9\x96\x05\xc0\x93\x72\xcc\ -\x1c\x0e\x96\xe0\x58\x00\x22\xe5\x21\x9e\x44\xc2\xe2\x23\x93\xc7\ -\x23\x08\xb0\xaa\xa2\xbe\xc3\xc8\x53\xee\xf7\xb9\x0f\x70\x97\x60\ -\xd4\x05\xb1\xc5\x80\xfa\x83\x3a\xdc\x39\x0b\x32\xa4\x16\x90\xba\ -\x9c\xf4\xfb\x3c\xed\x29\xb6\x73\x18\xdf\xaf\x47\xed\x03\xf6\x3e\ -\x19\xe4\x6d\xa9\xf4\xa9\xfa\x24\x48\x01\x9f\x65\x01\x7d\x5f\xe2\ -\xc0\x57\x96\xbe\x9f\xf1\xa5\x56\xda\xa0\xc2\x89\x70\x9c\x49\x40\ -\xe8\x80\xa2\xe9\x1a\x33\x6c\xd5\x10\xd4\x66\x80\x4e\x15\xea\x6b\ -\xc3\x97\xfb\x2e\x77\x28\x1a\xb9\x26\x32\x41\x44\x9f\x30\x98\x55\ -\x09\x1f\xc6\xa2\x44\x00\x7a\xcf\x47\x93\x51\x25\x5a\xbb\x4f\x3d\ -\xb9\x0e\xb5\x0d\x73\xf8\x99\x74\xf6\x4e\x63\xcf\xc7\x74\x15\x61\ -\xda\xfc\x1d\x32\xf3\xd1\x06\x5e\x3d\xfd\xe7\x8a\x9d\xdf\x0c\xd7\ -\xa6\xa5\x04\xaa\xfc\x1e\xd3\x71\x05\xee\xb2\x00\xc4\x48\xdc\x4e\ -\xa8\x42\x86\xcc\x01\x64\x03\xb5\x7f\x7e\x76\x43\x55\xab\x68\xc5\ -\x6b\x76\x00\xfa\xf2\xf2\x72\xf9\x10\x74\x5e\x5e\xf5\xc9\x7a\x22\ -\xdb\x46\xec\xbe\x36\x0b\xbe\xa5\xb2\xb7\x6a\x8b\xa5\x59\x89\xc5\ -\x52\x62\x13\x01\x16\x4b\xc2\xd7\xd6\x35\xbb\x7a\x13\xb8\x99\xb9\ -\x19\x86\x42\x9f\xb0\x61\x3e\xbb\x05\xb6\x46\x0f\x04\x06\x7f\xaa\ -\x94\x24\x5d\x18\x32\xbc\x46\x21\x06\xd2\x36\xbb\x13\x10\x8b\x38\ -\x97\x97\xf4\xc7\x3d\x66\x53\x80\x68\x97\x3d\x02\xf7\x0e\x74\x59\ -\x78\x09\x42\x9c\x58\x8d\x5f\x76\x22\x4b\x44\x3d\x0a\x2c\xe6\x10\ -\xa0\xd8\xf6\xc5\xac\x3a\x42\x51\xe0\xa4\x7e\x01\xba\x69\x2e\xc8\ -\x74\xce\x93\x76\x3c\x26\xed\x28\xb1\x20\xd8\x5d\x96\x76\x9d\x0c\ -\xa3\x50\x32\xde\xc4\x81\x65\x63\x8f\xfa\x8c\xc4\x0c\x69\x02\x52\ -\x8f\xd1\x40\x12\x77\x82\x9d\x86\x1e\x5a\x82\x60\xe8\x06\xd5\x6c\ -\xcf\x50\x20\x7e\xb5\x30\x7d\xd4\x30\xa9\x80\xc2\x54\x4a\xc8\xc4\ -\x82\xc2\x4b\x8f\x7a\x13\x0e\xba\x23\xfa\x2c\xa2\xaf\x26\x2a\x57\ -\x22\x0f\x3e\xcb\x25\x91\x88\xa5\x19\x6a\xc6\x24\x8d\x3e\xbc\xc2\ -\x26\x21\x4a\xd7\x38\x24\x7f\x84\x91\x6d\x6d\x1d\x4c\xd3\x5f\xdc\ -\x71\x80\x32\x28\x92\xae\x55\x80\xe2\xdf\xe0\x58\xb3\xa3\xbe\xd3\ -\xf2\x39\x24\x05\xc8\x1d\x51\xb1\x8b\x3e\xcf\x27\xf3\xb2\xb7\x46\ -\x95\xbd\x85\x25\x21\x9c\x37\x32\xf3\x39\x7f\x86\x05\x48\xd1\x92\ -\xfd\xd7\x8f\x9b\x4a\x8b\xe5\xf2\x66\x7f\x17\xd9\x0b\xb8\x9e\xac\ -\xdd\x7f\xff\x45\x9e\xde\x88\x71\x66\xf4\x63\x4d\x10\xfc\x87\x3c\ -\x7d\x13\x00\x6f\xd5\x08\xc3\x5f\x00\x43\x17\x0c\xda\x52\x20\xd4\ -\x2d\x92\x9a\xd5\x64\x94\x95\xc8\xf9\x7d\x9f\xb0\x36\x07\x01\x77\ -\x13\xfa\x53\x87\xeb\xad\xf1\x58\x85\xfe\xfc\x0c\x5b\x74\x1c\x74\ -\xab\x9d\xf9\x66\x02\x9b\x29\xf8\x56\x1e\x7d\xcf\xf7\xe3\xec\x7c\ -\xf9\x65\x7c\xf9\x45\x76\x98\xf9\x67\x19\x6a\x71\xf1\xa7\xfd\x74\ -\xc6\x01\x12\x93\x29\x26\x29\xa7\xc7\xc8\x2d\x97\x1c\xd3\x70\xb4\ -\x78\x89\x9a\xa2\xc5\xd4\x63\xbe\x33\xc4\x9d\x00\xde\xe7\x78\xcb\ -\x62\xe6\x7d\x2c\x81\x68\xa2\xb3\x87\x68\x98\xca\x5a\x65\x06\x11\ -\xec\x29\xd7\x62\xcd\xdb\x44\x1e\x18\xee\xed\x8f\x25\x4e\x1e\x61\ -\x69\xe7\x67\x44\x57\x46\xcb\xf3\x73\x94\x91\x64\xed\xed\xbf\x35\ -\x18\xee\xaf\xc4\x04\x26\x3c\x2f\x3a\xe4\xea\xda\x30\x46\xb4\x81\ -\x91\x3e\x7d\xaa\xdd\x20\x0f\x78\x5d\xdd\x31\x60\x58\x46\x81\xa9\ -\xb5\x24\xc0\x33\x0f\xcb\x33\x94\xcb\x1c\x3e\x02\xc8\xb3\xa3\x48\ -\x25\x82\x48\xd9\x51\x2f\x83\x6b\x8c\x7a\x5d\x1e\x5e\x5e\x5c\xce\ -\xfe\x9d\x5f\xb4\xda\x0d\x5b\x59\x78\xa8\xac\x30\x98\xed\xab\x79\ -\x78\x94\xfc\xb7\xfc\x28\x05\xed\x97\x6e\x48\xed\x3f\x93\xdc\xa9\ -\x27\xc0\x9a\x17\x9a\xe6\xbe\x66\x10\x49\x30\x88\xf5\xf8\x83\x75\ -\xeb\x8b\x49\xe7\x27\x1e\xd5\x94\x59\xc0\x7d\x83\xb4\x30\x16\x68\ -\x6e\xdb\x53\x43\x8e\x5e\xe0\x43\xd2\xc5\x4c\xc3\xfe\x94\x80\x1d\ -\xc1\x08\xba\xa8\xc1\x66\x98\x12\xf9\x7d\x42\x03\x26\x67\x22\x6a\ -\x14\x76\x53\x22\x21\x39\x27\xc2\xdd\x3c\x5a\x4b\x84\x1b\x79\xf9\ -\xb5\xa1\x9d\x2d\xe5\xe4\xaa\xb7\xe0\x25\xef\x0e\x5b\x90\x69\x3f\ -\x97\xb7\xdf\xe3\x1d\xe5\x3e\xe6\xbb\x06\x40\x8d\x78\xca\x8f\x78\ -\xc0\xe4\x99\xa7\xc1\x6b\xe6\xf1\x7c\x9b\xc2\x6a\xca\x2e\xec\x88\ -\x1e\xbb\xeb\x3a\xcb\xdf\x75\x35\xcf\xce\xcf\xcf\x5b\xcd\xd3\x32\ -\x7b\xaf\xe2\x26\x4a\x94\xff\x13\x1a\x15\x78\xfc\x8d\x87\xcb\xe4\ -\x08\x11\xb8\xdc\xa7\x8a\xc9\x58\xd4\x8c\x3c\xc5\xf4\x24\x76\x7f\ -\x48\x8e\xc9\x15\x39\x02\x75\xdd\x2c\x91\x95\x9c\x23\x2e\xce\xd6\ -\x22\x2d\x66\xb4\xb8\xb5\xd2\xa2\xa8\xfb\x22\x5f\x7f\xed\xdc\x17\ -\x2b\x3f\x3c\xb0\xac\xbc\x7c\xc5\x47\xcc\xd7\x87\xa1\xb7\x40\x62\ -\xe6\x6f\x60\x73\x33\xea\x2e\xaa\xc9\xa7\x5b\x8b\xf8\x70\xf9\xe8\ -\xe3\xd6\x4b\x90\xaa\xed\x8d\x02\x07\xfe\xb2\x18\x68\x41\xde\xdc\ -\x5c\xfe\xb9\x11\x1e\x28\x2d\xdf\xa9\x34\xf2\x98\x2f\x6b\xf3\x59\ -\x7f\x27\x6b\x57\xe2\x2a\x2e\xe0\x2c\xfa\x09\xcc\xba\xe8\x02\x1b\ -\x2d\x1c\x31\xd5\xce\xc5\xbc\x8c\xfe\xc4\x77\x8c\x01\xa7\x86\x54\ -\xe9\xcc\x50\x4a\x54\xc8\x22\x87\x7b\x5f\xb0\xb5\x3d\xdf\xe2\xf2\ -\x7e\x1f\x76\x8a\x50\x8e\x9b\x43\x0f\xf6\x8b\x3a\x39\xc5\x74\x18\ -\x6e\x31\x55\xc0\xf4\xa1\x17\x2a\x89\x04\xc0\x4a\xec\x19\x73\x4e\ -\x71\x35\x96\x21\x78\x7f\x00\xe4\xa0\x58\x1a\x45\xd6\x8f\x04\x26\ -\x6b\x73\x45\x1e\xa6\x1c\x3f\x16\x8c\x72\xba\x7e\x3f\x96\x8a\x44\ -\xde\x4e\x17\x65\xe9\xa2\xb3\x72\xaa\x68\x41\x86\xd7\xc2\x84\x18\ -\x6c\x41\x8c\x2c\xd8\x70\xaf\x7a\x7e\x40\xfd\x47\x10\x95\xe1\x9a\ -\x98\xf1\xf4\xa1\x1b\x5c\x1e\xa9\xef\x25\x72\x67\xb6\xf7\x6a\xf7\ -\xb6\x33\xe9\xd0\xaa\xc1\xcb\x8d\xd3\x0b\x89\x6f\x4b\xc5\x43\x51\ -\x03\x2c\xdf\x91\xb3\x33\xc0\x56\xbd\xd9\x5d\x70\xb3\xd3\xe3\x04\ -\x64\x1f\xf0\xbd\x89\x37\x0b\x2e\x9f\x63\x94\x75\xaf\x20\xce\x52\ -\x7f\x3b\xfb\x35\x47\x93\x02\x90\x25\x84\x0e\xf7\xde\x03\xbc\xd4\ -\x47\xbb\x8b\xc6\xbe\x94\x13\x67\x88\x06\xd8\x93\xef\x13\xa1\x9e\ -\xbf\x08\x38\xf5\xcc\x23\xa6\x32\x85\x03\x49\x35\xf5\xd2\x4d\x25\ -\xf5\x65\xd8\xd2\x96\xb0\x80\xf7\xcd\xe3\x1e\xc0\x63\x9e\x46\xc2\ -\x17\x61\x33\x04\x92\xf4\xe9\x88\x7b\xd3\xac\x71\x0f\xde\x31\xef\ -\x96\xe1\xef\x9f\x1e\x44\x9d\x9b\x8f\x34\xa8\xda\xb0\xa4\x06\x98\ -\xbd\x8c\xef\x9f\xbd\x14\x9e\x6b\xde\x2b\x49\x66\xc0\x31\x96\xef\ -\x98\x7a\x7c\xe0\xc3\x6a\x3c\xe8\x1d\x08\x0f\xc5\xc4\x0b\xac\xff\ -\x84\xac\xf8\xbf\xd9\xeb\x4d\x40\x39\x90\xce\x20\x2a\xf9\x72\xcd\ -\xd0\xb9\x0a\x60\x30\x55\x1c\x86\x82\x92\xde\x70\xd1\x96\xca\xf9\ -\xaa\x5d\x12\x05\x4e\xf8\x65\xfa\xf4\x96\xbd\xc7\x3f\x92\x73\xa3\ -\xb1\x87\x3f\x05\x2b\x87\x8c\x55\x2a\xec\xf2\xf5\xe3\x82\x89\xec\ -\x14\xe4\x4a\x3c\x14\x6f\xb8\xc7\xae\x87\x42\x80\x8c\x7d\xa0\x5c\ -\xfa\x50\xe7\x98\xba\x45\x46\x37\xf7\x8b\x1a\xdd\xc7\x47\xf9\x08\ -\x2a\x85\x9f\xe2\x01\x27\x37\x4d\xfd\xf6\x7e\x52\x9d\xd1\xe6\xa0\ -\x3f\xc1\x24\xb5\xe1\x6f\x58\x85\xe7\xb5\x8a\x31\x48\x39\xa1\x69\ -\xa0\xda\x09\xcd\x39\x42\xb3\xc0\x9d\xb7\x19\x42\xb3\x7c\x14\xe4\ -\x09\x1d\x8d\x9f\x93\x0f\x8c\xba\x20\xd0\x68\x10\x88\x3b\x63\x4e\ -\x6c\xe2\xc9\x92\x95\x9d\x2b\xe1\x23\xf3\xbb\xa4\x9b\x4a\x95\xe5\ -\xce\x34\xbc\x12\x8a\x9c\xd6\x77\xa4\x02\x87\x3f\xaf\x77\xf8\xcb\ -\xfa\x86\xbf\xe6\x81\x03\x3b\x83\x1a\xf1\x6f\x21\xa8\x71\x09\x2c\ -\x04\x35\xae\x42\x17\x44\xcb\xb0\xce\x45\x30\x00\xd4\xb8\x06\x06\ -\x80\x1a\x97\xe0\x25\x75\xbe\xc9\xba\x97\x21\x02\xa2\xc6\xa5\x88\ -\x80\x28\xb5\x1c\xb5\x9b\x2a\x25\xfd\xfc\xcd\xfc\x24\x99\xf9\xd6\ -\xca\x17\x68\xc5\x1d\xea\xc5\x7c\x37\xc6\xa7\x15\xdb\x49\x6d\xa2\ -\xb9\xb2\xaa\x5f\x81\x8e\x5f\xc0\x20\xfa\xc6\xdf\x15\x62\xc2\x7a\ -\xb6\xec\x89\x17\xd8\xf0\xc4\x91\x44\x03\x46\x6e\x2d\xf2\x0e\x49\ -\xb8\x4d\x86\x5e\x3d\xd6\x57\x07\x78\xcb\xae\x39\x13\x83\x3d\xbe\ -\xef\xfe\x81\xb7\xb5\xfb\x2e\x0d\xca\x5c\x28\x5d\xcc\x0a\x4b\x2c\ -\xe0\x8f\x68\x8a\x7d\x00\x44\x93\xa7\x71\xdc\xd6\x78\xd6\xf5\xd3\ -\xbc\x10\xd9\x96\x48\xa0\x92\xe2\x67\xd9\xdf\xbc\x7e\xe1\xe9\xdc\ -\x4d\xd8\x59\x77\xbf\xbc\x25\x40\x68\xf8\x0a\x3c\x24\x9c\xca\x25\ -\xcf\x02\x3f\x53\xfe\x61\xbd\x9d\x9f\x69\xad\x7e\xa6\x05\xe9\xcd\ -\x5b\xed\x67\x7a\x87\x47\x1c\xf0\xee\x33\x0c\x97\x48\x7b\xee\x81\ -\x82\xaa\x09\x98\xa3\x44\x30\xc5\x8b\x16\x95\xfd\x79\x67\x64\x12\ -\xc4\x8b\x8c\x17\x3e\xf1\xd4\xf3\xb1\xe1\x9c\x27\x03\xf5\x1c\x9d\ -\x56\x78\xf7\x72\x94\x3a\x13\xc6\x61\x5c\x97\xb9\xe8\xc1\x42\x95\ -\x14\x8a\x4c\x1b\xc3\x81\x66\xa0\xae\x6c\x2f\xeb\xf9\x2d\x1b\x3b\ -\x18\x92\xc0\xa6\xea\xa7\x72\x32\x39\x59\x99\xe8\x2b\x6a\x17\x6b\ -\x14\x6b\x61\xe5\xf7\x2c\x20\x66\x4e\x7a\x5d\xed\x9f\xed\x93\x11\ -\x0d\x06\xdc\xbf\xda\x6f\x36\xf7\x31\xd7\xa8\x3d\xe6\xf7\x23\x3a\ -\x0e\x93\xa5\x3a\xdf\x3f\xea\xf7\x37\x81\x18\xfd\x06\xc6\x4a\x57\ -\x4c\x02\x4c\xae\x49\xb5\x82\xef\x9c\x89\x54\x62\x64\x46\x94\x1a\ -\x92\x78\x89\x81\x52\xb3\x6b\x47\x73\x6b\x8c\x53\x01\x7f\xba\x5c\ -\x37\x01\xc9\xce\x7c\x57\x76\xfe\xfc\xaa\xbf\x03\x51\x67\x0b\xf6\ -\x0c\x37\xa1\xeb\x0b\x7b\x68\x60\x07\xaf\x38\xf5\xc4\xe0\x70\x88\ -\xcc\xa5\x2b\x34\x02\xd2\xe3\xe6\x03\x72\x8d\x3f\xc5\xf4\x72\xa2\ -\x94\x36\x6b\x32\x00\xf9\x38\x91\xc3\xb0\x7e\x1e\x30\x06\x58\x59\ -\x0e\x92\x94\x00\xcb\x84\xe6\x21\xee\xe6\x81\x84\xbd\xad\x0c\x2c\ -\x9b\x32\x93\x8d\xa0\x59\xe5\x5a\x40\x59\xb4\x5e\x0f\x17\x75\x3d\ -\x60\xd9\xe3\xfa\xd9\x28\x8a\x6a\xd7\x84\x23\xb3\xdb\x99\x03\xcc\ -\xac\x76\x2d\xc0\x84\x59\x05\xd9\xc0\x44\xb5\x6b\x01\x26\x91\x01\ -\x96\x0d\x51\xaa\x49\x79\xb0\x92\x05\xd8\x53\x3b\x60\x52\x0b\x52\ -\xa9\x45\x2e\xe8\x5e\x9f\x99\xdc\x54\x33\x8b\xd9\xbb\x19\x55\x02\ -\x00\xd0\x77\xc6\xa5\x2f\x18\x48\xf7\xed\xb8\x68\x9d\x0c\x7c\xea\ -\x75\x1c\x0f\x0f\x3d\xba\x4f\xf1\x9c\x25\xee\x60\x4c\xa9\x6e\x01\ -\x26\x00\xe3\xb7\xf1\xbe\x52\x47\xc9\xdb\x8d\x59\x13\xd3\xa5\x27\ -\x54\x07\xd4\xe0\x6b\x73\xaa\x73\xd6\x27\x16\x1b\x8c\xe0\x2f\x37\ -\x58\x8d\x84\xcf\x44\x4d\xc7\x68\x6a\xea\xe9\x25\xc2\x1e\xed\xfb\ -\xce\x25\x00\x7c\x1f\xbe\x4e\x3b\xc7\xe7\x97\xed\xc6\x34\x54\x67\ -\xf8\xf5\xc3\x8e\x5c\x86\xbf\x36\xa3\x0d\xe3\x74\x6f\x27\xcd\xf3\ -\x64\x77\x17\xcd\xac\xee\xcc\xa3\xb4\x4b\x93\x40\xed\x5a\x31\x3d\ -\x3b\x3e\x5b\x2d\x8e\x11\xa7\x09\x1c\x1f\x97\xc1\xf1\xe9\x79\x33\ -\xd5\xdd\x49\x65\x38\x3e\x59\x1d\x8e\xcf\xaa\xc5\xf1\x59\x92\xf0\ -\x5a\xe7\x47\xab\xc4\x71\xeb\xbc\xb5\x81\x38\x0e\xaf\x95\xaf\x18\ -\xb3\xad\x95\x62\xb6\x79\xb6\x36\xcc\x2e\x2f\x21\xc2\x1b\x50\xaa\ -\xc5\xec\xe9\x45\x92\x91\xcf\x4e\xcb\x60\xf6\xf8\xf4\x64\x0b\x64\ -\x6f\x78\xc7\x43\xb5\x98\x3d\x3e\x4e\x61\xf6\x7c\x95\x34\x5b\x25\ -\x66\xcf\xcb\x4b\xdc\xe8\x9e\xec\x6a\x91\xdc\x4c\xd1\x6f\xeb\xb2\ -\x94\x64\x38\x41\x7f\x4d\xa2\xbb\x4c\x35\xb9\x29\xb6\x43\xec\xce\ -\xaf\x8a\xad\x87\xb4\x85\x56\x4a\x4a\xb4\x5a\x67\x8f\x31\x46\xe6\ -\x63\x39\xfe\x0a\xf5\xed\xc6\x84\x77\xf6\xfe\x0f\x9b\x41\x85\x54\ -\ +\x00\xa6\x66\x78\x9c\xed\x1d\x6b\x6f\xdb\x38\xf2\x7b\x7e\x05\x91\ +\x0f\xbd\x1e\x90\x8d\x63\xe7\xdd\x3a\x3e\xb4\xe9\x13\x68\x77\xdb\ +\x3a\x6d\x6f\xef\xcb\x82\x96\x68\x9b\x57\x59\xf4\x92\x72\x12\x2f\ +\xee\xc7\xdf\x0c\x49\x59\x8f\xc8\x72\x64\x59\x96\xbd\x75\x51\x20\ +\x16\x49\x91\xc3\xe1\xbc\x38\x33\xa4\xda\xff\xba\x1f\x79\xe4\x96\ +\x49\xc5\x85\x7f\xb5\xdf\x3c\x3c\xda\x27\xcc\x77\x84\xcb\xfd\xc1\ +\xd5\xfe\xd7\x9b\x37\xbf\x5c\xec\xff\xab\xb3\xd7\x9e\xf0\xa8\xd1\ +\x09\x34\xea\xec\x91\xb6\xe3\x51\xa5\x3a\x6f\x27\xfc\xd9\xb3\x57\ +\x9c\x7a\x62\x00\x7f\xbd\x41\x97\x05\x01\xbc\xac\x5e\x49\xda\x0f\ +\xda\x0d\xd3\x08\x5a\xdf\x71\x77\xc0\x02\xa2\x9f\xaf\xf6\x3f\x7f\ +\xd7\x8f\xfb\xc4\xa7\x23\x76\xb5\x9f\xdb\x09\x0e\x46\xda\x63\x29\ +\xc6\x4c\x06\x53\xfb\xc6\x80\x89\x11\x0b\xe4\x54\x57\x92\xb6\x64\ +\x4e\xa0\x7f\x91\xf6\x7d\xe7\xa8\xdd\xb8\xb7\x0f\x53\x7c\x98\xda\ +\x07\x00\x21\x18\x76\x4e\x2f\xa1\xc8\xfc\x34\xc5\x43\xc6\x07\xc3\ +\xa0\x73\x76\xdc\x6a\x37\xec\x6f\xdd\x67\x23\xec\xb4\xdd\x08\x07\ +\xcf\x82\xe4\x8e\xfb\xae\xb8\xbb\xe1\x81\xc7\x2c\x30\x2a\x90\x00\ +\x7c\xe7\x2d\xf3\x99\xa4\x1e\x51\x76\x32\xed\x86\xad\x78\xd8\xa5\ +\x47\xa7\x62\x12\x21\xe7\xdb\x4b\x71\xff\x41\x17\xd9\x1e\x53\x43\ +\xaa\x31\x75\xa0\xa3\x7d\x3b\x01\x7f\x32\xea\x31\xd9\x39\x6b\x37\ +\xec\x2f\x03\x7e\x7c\x84\x07\x5d\x8c\xa8\x1c\x70\x3f\xd5\xc3\x65\ +\x6e\x0f\x3c\x60\xa3\x08\x93\xf1\xc5\x7c\x2b\xc5\x64\x0c\x30\x87\ +\xcb\x39\x08\x9f\x4d\xf3\x07\x83\x07\x11\xb2\x32\xf0\xa5\x17\x9d\ +\x74\x33\xb0\xf6\x10\xa8\x5c\xdc\xd9\xd1\x80\x70\x03\xee\x50\xcf\ +\x94\xfe\xd1\x8a\x06\x8e\x66\x94\xd1\xd1\xbb\x07\x1d\x0d\x85\xe4\ +\x7f\x09\x3f\x98\x75\xd5\xbc\x9c\xf5\x95\xee\xed\x01\x92\x34\x89\ +\x7f\x92\xac\x7f\x3d\x64\xce\x8f\x38\xb2\xb0\x62\x0c\x15\x0e\x56\ +\xf4\xc4\xfd\x1f\xcd\x56\xac\xdb\x0c\xec\x09\xe1\xdd\xf0\x71\xa2\ +\xcd\x0c\x89\xef\xfb\x24\x18\x72\x45\xe0\xbf\xee\x8f\xb9\x07\x50\ +\xc0\x2c\x52\xef\x84\xfc\xd1\x03\xfe\x1e\xc2\x2f\xff\x1f\x01\xa1\ +\xe3\x31\xa3\xf2\x90\x7c\x55\xac\x3f\x01\x4a\xe5\xbe\xc3\x08\xf5\ +\x3c\x22\xfa\xb1\xb7\x70\x40\x45\xa8\xc4\x2a\x25\x08\xf7\x75\xdd\ +\x0b\xa9\xbb\xb1\x1d\x1e\xa6\xd6\x29\x7b\xb1\xb2\xe7\xc3\xee\x83\ +\xec\xc9\xbc\xe3\xee\x03\xc8\x97\x1f\x07\x71\xfc\xda\x47\x99\x41\ +\x54\xe0\x02\x57\x5e\xed\x1f\xa5\xc6\x75\x6c\xdf\x43\x18\x58\x8f\ +\xfb\x3d\x1a\xd6\x29\x33\xee\x27\x1a\x0c\x17\x0f\xfb\x51\xb8\x8d\ +\x50\x6e\x3e\x72\x34\x2d\xca\x80\xcc\x62\x74\xd8\x48\x12\xe2\x02\ +\xba\xfc\xfc\x81\xf6\x98\x17\x12\xa3\x87\x0f\x49\xba\x2e\xb2\x60\ +\x66\xad\xb8\x1f\x30\xd9\xa7\x40\x4a\x23\xe1\xb2\xe5\x17\x8c\x7a\ +\x7c\xe0\x8f\x98\xff\x60\x30\x98\xee\xe7\xe0\xd9\xb3\x17\x58\xff\ +\x05\x05\xf6\xff\x66\x8f\x37\x92\x72\x0f\x46\x8b\x4a\xbe\x5d\x33\ +\x84\x07\xc0\x88\x63\xa9\x2a\x74\x46\x6c\x2e\x46\x3d\x91\xc9\xe6\ +\x58\x81\x6c\x7e\xb2\x3c\x97\xdf\x58\x16\x47\x3e\xfc\xfa\x5e\xa3\ +\x19\xd9\xf2\x6e\xc8\x81\x27\x23\xc6\x85\xf2\x89\xc7\xc8\x1d\x07\ +\x8e\x46\x06\x7a\x46\x6e\xa0\xd7\x1e\x95\xe6\x0d\x5d\x3e\xf6\xa8\ +\xe5\x79\xf3\x4e\xa8\xad\xb0\x3f\x0a\x4f\x63\x2a\x69\xc0\xb4\x0c\ +\x80\x17\x0f\x70\x0c\xe8\x32\xa0\xea\x47\xb2\x9f\x89\x62\x7a\xe4\ +\x37\x92\xb1\xeb\x17\xaf\xc8\x0d\xb4\xb8\xe5\xec\x8e\xa8\xa9\x02\ +\x8c\x91\xbe\x90\x7a\x14\x1e\x28\x6c\x2b\x0d\x95\x50\x27\x00\x9b\ +\x62\x2d\x3c\xfd\x95\x7f\xd4\xd4\xb8\x99\x7c\xfc\x80\xae\x1e\xc3\ +\x76\x11\x3d\x98\xd5\xc9\xc2\xe3\xbc\xe1\x1a\xe9\xf1\xca\x01\x60\ +\x57\xbb\x0c\x04\x0b\x79\xaf\xdd\x30\x2a\x7a\xa6\xbf\x13\xd5\xa5\ +\xb5\x79\xeb\xf1\xca\x3c\x4b\x68\x2e\x50\xda\xf3\x65\x26\xeb\xd3\ +\x89\x07\x5d\x0b\x4f\x64\xae\x60\xe5\x82\x0a\xc6\x7d\x39\x09\x02\ +\xe1\x67\xc8\x2a\xa8\xeb\x99\xba\xa5\x85\x15\x4a\x05\x37\x3e\x49\ +\x2d\x0b\x7c\x10\x0d\xa2\xf7\x5f\x30\xb1\xd3\x26\x5e\x1e\xcd\xa4\ +\xc6\xd5\xdd\xa5\x99\x10\xcb\x52\x54\x2a\x99\x8b\x1b\x01\xfc\x93\ +\xac\x18\x80\xb4\xf2\xb1\xca\xfc\x48\x56\xf6\xbc\x09\xc3\x3a\xfd\ +\x37\x49\xd0\x0f\x06\x59\xb9\xb8\xb2\xe4\xb0\x99\xd2\xaa\x12\xab\ +\x63\x81\x3e\x9c\xcb\x40\x5d\x9f\x8e\x37\x9d\x7b\x16\x49\x87\xe2\ +\xfc\xa3\x70\xd6\x6a\x0a\xb6\x84\xb7\x63\xa0\x04\xf8\x16\x17\x88\ +\xa0\x9f\x8f\x89\x96\xb5\xdc\xaf\x85\x0f\xbf\x26\xda\x1c\xdb\x78\ +\x66\x3a\x5e\x8d\xe5\xfc\x90\xa9\xac\x42\x22\x3d\x06\x6d\x89\x2b\ +\xe9\x9d\x6f\x0d\x5e\x8e\x58\x89\xa1\x08\x0d\xdf\x12\x7b\xde\x22\ +\x7c\x77\x72\x32\x9f\xf1\x9a\xad\xd3\x1c\xd6\x6b\x9d\x9e\xd6\xa6\ +\xbd\x22\x5c\xfd\x7c\x4c\xb8\x80\x3e\x17\x9a\x82\xb0\x81\x65\xda\ +\x43\x59\x03\x0f\x76\xc7\xdc\xcf\xda\xb6\x2a\x28\xef\x45\x2e\xbd\ +\xec\x99\x3d\x56\x8d\xcd\x26\xb8\x3a\x53\xf0\x96\x02\x9d\xa7\x46\ +\xb6\xce\xcc\x56\xc2\xad\x59\xa8\xd7\x02\x24\x1f\x5b\xb4\x2d\x25\ +\xf5\x8a\xf7\x57\xc7\x25\xf7\x57\x47\xa5\x54\x1b\xe5\x5a\x68\xd7\ +\xa2\xd5\x16\x79\x82\x4e\xcb\xe8\x33\x46\x66\x13\x44\xa5\x05\x73\ +\xe4\x7d\xce\x24\xf9\xc1\xa6\x6b\xf1\xab\xc0\x80\x4e\x08\xc0\xa6\ +\x92\x7e\x39\xe7\x86\x1a\x72\x1c\xac\x2e\xdf\x8a\x13\x48\xaf\xbe\ +\xd1\xa9\x57\x6a\xea\x4b\xb0\x11\x46\xb7\x80\x7e\xd3\x52\xa4\xab\ +\x8b\x17\xf0\x0a\xb4\x66\xd0\x18\xcd\x8e\x14\xf5\x30\x50\x01\xda\ +\x6b\xfc\x6e\xd6\x63\xbb\xa1\x0b\x0b\x93\xaa\xe2\x7f\xb1\x77\xdc\ +\x0f\xe6\x93\x2a\xb6\x48\xa1\xd3\x44\x1c\x4f\x92\xb1\xc7\x59\xad\ +\x8d\x3b\xb6\x8e\x12\x21\xc8\x08\xac\x74\x87\x73\x44\x96\x41\xdd\ +\x4a\x6d\x99\x56\xb3\xcc\xb6\x7c\x53\x25\xee\x59\x39\x89\xab\xec\ +\xdc\x56\x20\x69\x9d\x89\x94\x40\xb2\xef\x7d\x97\xdd\x67\x9b\x2f\ +\xcd\xb5\x98\x2f\x30\x1b\x9c\xd5\x4e\x82\x9b\xd2\x9d\x04\x8f\x0a\ +\x56\x2c\xc1\xf3\x79\x6f\x27\xc1\x57\x2e\xc1\x97\x8d\x4c\xbc\xf0\ +\x82\x8d\x15\xe0\xe7\xe5\x04\x38\x35\x53\x5b\x8b\xfc\x5e\xcf\xf6\ +\x13\x66\xa3\x19\x7d\x27\xbe\x77\xe2\x7b\x93\xa2\xaa\xcd\x38\x15\ +\x2d\x93\x8b\x52\x6e\xdb\x6f\xdd\xb5\x3a\x23\x4d\xbf\x52\x83\x34\ +\xfb\xc0\x7d\xf6\xda\xe5\xc1\x03\x69\x86\x2e\x23\x06\x15\x65\xa2\ +\x43\x59\x0e\xed\x68\xb6\xda\xbf\x96\x70\x5c\x87\x89\x93\x55\xe4\ +\x6b\xc5\x51\xbe\x16\xdf\x43\x7c\x66\x7a\xd2\x66\x85\x37\x53\x06\ +\xd6\xcd\x89\x27\x8f\x67\xc4\xc7\x27\x2b\x2e\x4f\xb8\xba\x07\x9b\ +\xac\xd8\x27\x00\x21\xb9\xa3\x3e\x26\x1b\xce\x52\x89\x74\xe0\xa0\ +\x11\xf3\x15\x4b\x31\xd2\x15\x36\x19\x89\x50\x15\x92\x7c\x15\xd4\ +\xdc\xa5\xb7\x00\x83\x51\xef\x36\x46\x44\x7d\x37\xe6\xbb\xa6\x8e\ +\x14\x4a\x11\xc5\x14\x26\x46\x97\xf0\x5d\x17\x89\x6a\x02\x50\xc2\ +\x67\xf7\x7c\x63\x55\x7d\xdd\x64\x7e\x5e\x05\x99\x97\x71\xd1\x66\ +\xa5\xe4\x3a\x62\x3c\x8d\x25\xcf\xf5\x18\x18\xa1\xe3\x20\xa4\x28\ +\xb0\x72\x47\x40\x6a\x07\x44\x00\xb5\xcb\x3b\xae\x58\x58\xa4\x4c\ +\x7b\xea\xdd\xd1\x29\x50\x5e\x40\x25\xa6\x5b\x12\x5f\xfc\x32\xeb\ +\xb1\x0a\x56\x78\xeb\x89\x1e\xf5\xc8\x0a\xc6\xb0\x18\x48\x0d\xd3\ +\x03\xfc\x75\x40\x90\x43\xc7\xfa\x67\xb5\x3a\x63\x3c\x1d\x6d\x70\ +\x26\x60\xdd\xfc\xd3\xbc\xa8\x84\x81\x4a\xc4\xec\x7f\x15\x72\x44\ +\x3d\x6f\x7a\x40\x00\x91\x4c\x6a\x32\xc4\x50\x87\x8d\x19\x1e\x58\ +\x65\x31\xe6\x4c\x11\x04\x4e\x31\x0f\xca\x99\x7b\x48\x42\xd6\x13\ +\x63\x6d\xfb\xa4\x93\xe2\x7b\x14\x38\x2b\x8c\xf9\x87\x8c\x18\xbe\ +\x0d\x7c\xa5\x02\x46\xdd\x4a\x32\xdb\xbb\x7a\x90\x24\x00\x89\xc9\ +\xad\x47\x99\x68\x28\x5e\x02\x10\xbf\x85\xe1\xd7\x1d\x4f\x64\xf1\ +\xc4\x69\x25\x2c\x71\xb1\x5a\x9d\xa2\x4d\xa8\xb8\x76\x40\x27\x35\ +\x98\x53\x60\x2c\xa8\x20\xc6\x2f\x36\xa3\x05\xb3\x5b\xa0\x54\x33\ +\x89\x2f\x82\xd8\xfb\x3d\xe3\xe0\x1e\xeb\x77\x7c\x6f\x0a\x2f\x30\ +\x9f\x00\xe8\x60\xe7\x40\xd1\xf5\xcd\x97\x0f\x95\x30\xc5\x8b\x24\ +\xdc\x21\xb8\x4f\x5d\xae\x68\xcf\x8b\xbc\xee\xe8\xb0\xf9\xe7\x36\ +\xab\x20\xb3\x40\xdd\x0d\x76\xb7\xaf\xdc\xe9\x9b\xbf\xc3\xdd\x39\ +\x7d\x57\xed\xf4\x6d\x96\x74\x90\x4a\xea\xf2\x89\x9a\x65\x9a\x6a\ +\x59\x00\x3c\xa9\xc6\xcc\xe1\x60\x09\x8e\x05\x20\x52\x1d\xe2\x29\ +\x3d\x2c\x3e\x32\x79\x3c\x82\x00\xab\x06\x14\x0f\x91\x3d\xe5\x7e\ +\x9f\xfb\x00\x77\x09\x46\x5d\x10\x5b\x94\xd4\x1f\xd4\xe1\xce\x59\ +\x90\x21\xb5\x80\xd4\xd5\xa4\xdf\xe7\x69\x4f\xb1\x9d\xc3\xf8\x7e\ +\x3d\x6a\x1f\xb0\xf7\xc5\x20\x6f\x4b\xa5\x4f\xd5\x27\x41\x0a\xf8\ +\x2c\x0b\xe8\xfb\x12\x07\xbe\xb2\xf4\xfd\x8c\x2f\xb5\xd2\x06\x15\ +\x4e\x84\xe3\x4c\x24\xa1\x03\x8a\xa6\x6b\xcc\xb0\x0d\x86\xa0\x36\ +\x25\x3a\x55\xa8\x39\xbb\xc9\x7d\x97\x3b\x14\x8d\x5c\x13\x99\xc0\ +\xf3\x9e\x0c\x66\x55\xc2\x87\xb1\x28\x11\x80\xde\xf3\xd1\x64\x54\ +\x89\xd6\xee\x53\x4f\xad\x43\x6d\xc3\x1c\x7e\x26\x9d\xbd\xd3\xd8\ +\xf3\x31\x5d\x45\x98\x36\x7f\x87\xcc\x7c\xb4\x81\x57\x4f\xff\xb9\ +\x62\xe7\xa3\xe1\xda\xb4\x94\x40\x95\xdf\x63\x3a\xae\xc0\x5d\x26\ +\x41\x8c\xc4\xed\x84\x2a\x64\xc8\x1c\x40\x36\x50\xfb\xe7\x67\x37\ +\x54\xb5\x8a\x56\xbc\x66\x07\xa0\x2f\x2f\x2f\x97\x0f\x41\xe7\xe5\ +\x55\x9f\xac\x27\xb2\x6d\xc4\xee\x6b\xb3\xe0\x5b\x2a\x7b\xab\xb6\ +\x58\x9a\x95\x58\x2c\x25\x36\x11\x60\xb1\x24\x7c\x6d\x5d\xb3\xab\ +\x37\x81\x9b\x99\x9b\x61\x28\xf4\x09\x1b\xe6\xb3\x5b\x60\x6b\xf4\ +\x40\x60\xf0\xa7\x4a\x49\xd2\x85\x21\xc3\x2b\x46\x62\x20\x6d\xb3\ +\x3b\x01\xb1\x88\x73\x79\x49\xff\xbe\xc7\x6c\x0a\x10\xed\xb2\x47\ +\xe0\x62\xb7\x8d\xa8\x38\xb1\x1a\xbf\xec\x44\x95\x88\x7a\x14\xbc\ +\x7a\x64\xdb\x17\xb3\xea\x08\x45\x81\x93\xfa\x45\xae\xdd\x59\x90\ +\xe9\x9c\x27\xed\x78\x4c\xda\x51\x62\x41\xb0\xbb\x2c\xed\x3a\x19\ +\x46\xa1\x64\xbc\x89\x03\xcb\xc6\x1e\xf5\x19\x89\x19\xd2\xf6\x3a\ +\x1e\x45\xdc\x09\x76\x1a\x7a\x68\x09\x82\xa1\x1b\x54\xb3\x3d\x43\ +\x81\xf8\xdd\xc2\xf4\x49\xc3\x14\x48\x0a\x53\x29\x21\x13\x0b\x0a\ +\x2f\x3d\xea\x4d\x38\xe8\x8e\xe8\xb3\x88\xbe\x9a\xa8\x5c\x89\x3c\ +\xf8\x2c\x97\x44\x22\x96\x66\xa8\x19\x93\x34\xfa\xf0\x08\x9b\x84\ +\x28\x5d\xe3\x90\xfc\x16\x46\xb6\xb5\x75\x30\x4d\xbf\x71\xc7\x01\ +\x4a\x59\x24\x5d\xab\x00\xc5\xbf\xc1\xb1\x66\x47\x7d\xa7\xe5\x73\ +\x48\x0a\x90\x3b\xa2\x62\x17\x7d\x9e\x4f\xe6\x05\x6e\x54\xcb\x74\ +\x7b\x97\xbd\x85\x25\x21\x9c\x37\x32\xf3\x39\x7f\x86\x05\x48\xd1\ +\x92\xfd\xf7\x4f\x9b\x4a\x8b\xe5\xf2\x66\x7f\x15\xd9\x0b\xb8\x9e\ +\xac\xdd\x7f\xff\x4e\x9e\xde\x88\x71\x66\xf4\x63\x4d\x10\xfc\x87\ +\x3c\x7d\x23\x81\xb7\x6a\x84\xe1\x77\x80\xa1\x0b\x06\x6d\x29\x10\ +\xea\x16\x49\xcd\x6a\x32\xca\xca\x5d\xf2\x18\xb3\x36\x07\x92\xbb\ +\x09\xfd\xa9\xc3\xf5\xd6\x78\xac\x42\x7f\x7e\x85\x2d\x3a\x0e\xba\ +\xd5\xce\x7c\x33\x81\xcd\x14\x7c\x2b\x8f\xbe\xe7\xfb\x71\x76\xbe\ +\xfc\x32\xbe\xfc\x22\x3b\xcc\xfc\xb3\x0c\xb5\xb8\xf8\xd3\x7e\x3a\ +\xe3\x00\x89\xc9\x14\x93\x94\xd3\x63\xe4\x96\x2b\x8e\x69\x38\x5a\ +\xbc\x64\xdd\x29\x0b\x3b\x01\xbc\xcf\xf1\x96\xc5\xcc\xfb\x58\x02\ +\xd1\x44\x67\x0f\xd1\x30\x95\xb5\xca\x0c\x22\xd8\x53\xae\xc5\x9a\ +\xb7\x89\x3c\x30\xdc\xdb\xbf\x97\x38\x79\x84\xa5\x9d\x9f\x11\x5d\ +\x19\x2d\xcf\xcf\x51\x46\x92\xb5\x37\x63\xd7\x60\xb8\xbf\x12\x13\ +\x98\xf0\xbc\xe8\x90\xab\x6b\xc3\x18\xd1\x06\x46\xfa\xf4\xa9\x76\ +\x83\x3c\xe0\xf5\xe0\x8e\x01\xc3\x32\x0a\x4c\xad\x25\x01\x9e\x79\ +\x58\x9e\xa1\x5c\xe6\xf0\x11\x40\x9e\x1d\x45\x2a\x11\x44\xca\x8e\ +\x7a\x19\x5c\x63\xd4\xeb\xf2\xf0\xf2\xe2\x72\xf6\xef\xfc\xa2\xd5\ +\x6e\xd8\xca\xc2\x43\x65\x85\xc1\x6c\x5f\xcd\xc3\xa3\xe4\xbf\xe5\ +\x47\x29\x68\xbf\x74\x43\x6a\xff\x99\xe4\x4e\x3d\x01\xd6\xbc\xd0\ +\x34\xf7\x35\x83\x28\x82\x41\xac\xc7\x1f\xac\x5b\x5f\x4c\x3a\x3f\ +\xf1\xa8\xa6\xcc\x02\xee\x1b\xa4\x85\xb1\x40\x73\xdb\x5e\x30\xe4\ +\xe8\x05\x3e\x24\x5d\xcc\x34\xec\x4f\x09\xd8\x11\x8c\xa0\x8b\x1a\ +\x6c\x86\x29\x51\x7f\x4e\xa8\x64\x6a\x26\xa2\x46\x61\x37\x25\x12\ +\x92\x73\x22\xdc\xcd\xa3\xb5\x44\xb8\x91\x97\x5f\x1b\xda\xd9\x52\ +\x4e\xae\x7a\x0b\x5e\xf2\xee\xb0\x05\x99\xf6\x73\x79\xfb\x3d\xde\ +\x51\xee\x63\xbe\xab\x04\x6a\xc4\x53\x7e\xc4\x03\x26\xcf\x3c\x0d\ +\x5e\x33\x8f\xe7\xdb\x14\x56\x53\x76\x61\x47\xf4\xd8\x5d\xd7\x59\ +\xfe\xae\xab\x79\x76\x7e\x7e\xde\x6a\x9e\x96\xd9\x7b\x15\x37\x51\ +\xa2\xfc\x9f\xd0\xa8\xc0\xe3\x6f\x3c\x5c\x26\x47\x08\xe9\x72\x9f\ +\x06\x4c\xc5\xa2\x66\xe4\x29\xa6\x27\xb1\xfb\x43\x72\x4c\xae\xc8\ +\x11\xa8\xeb\x66\x89\xac\xe4\x1c\x71\x71\xb6\x16\x69\x31\xa3\xc5\ +\xad\x95\x16\x45\xdd\x17\xf9\xfa\x6b\xe7\xbe\x58\xf9\xe1\x81\x65\ +\xe5\xe5\x2b\x3e\x62\xbe\x3e\x0c\xbd\x05\x12\x33\x7f\x03\x9b\x9b\ +\x51\x77\x51\x4d\x3e\xdd\x5a\xc4\x87\xcb\x47\x9f\xb6\x5e\x82\x54\ +\x6d\x6f\x14\x38\xf0\x97\xc5\x40\x0b\xf2\xe6\xe6\xf2\xcf\x8d\xf0\ +\x40\x69\xf9\x4e\xa5\x91\xc7\x7c\x59\x9b\xcf\xfa\x3b\x59\xbb\x12\ +\x57\x71\x01\x67\xd1\x4f\x60\xd6\x45\x17\xd8\x68\xe1\x88\xa9\x76\ +\x2e\xe6\x65\xf4\x27\xbe\x63\x0c\xb8\x60\x48\x03\x9d\x19\x4a\x49\ +\x10\xb2\xc8\xe1\xde\x37\x6c\x6d\xcf\xb7\xb8\xbc\xdf\x87\x9d\x22\ +\x94\xe3\xe6\xd0\x83\xfd\xa2\x4e\x4e\x31\x1d\x86\x5b\xcc\x40\x32\ +\x7d\xe8\x85\x2a\xa2\x00\xb0\x12\x7b\xc6\x9c\x53\x5c\x8d\x65\x08\ +\xde\x1f\x00\x39\x04\x2c\x8d\x22\xeb\x47\x02\x93\xb5\xb9\x22\x0f\ +\x53\x8e\x1f\x0b\x46\x39\x5d\xbf\x1f\x2b\x88\x44\xde\x4e\x17\x65\ +\xe9\xa2\xb3\x72\xaa\x68\x41\x86\xd7\xc2\x84\x18\x6c\x41\x8c\x2c\ +\xd8\x70\xaf\x7a\x7e\x40\xfd\xef\x20\x2a\xc3\x35\x31\xe3\xe9\x43\ +\x37\xb8\x3c\x4a\xdf\x4b\xe4\xce\x6c\xef\xd5\xee\x6d\x67\xd2\xa1\ +\x55\x83\x97\x1b\xa7\x17\x12\xdf\x96\x8a\x87\xa2\x06\x58\xbe\x23\ +\x67\x67\x80\xad\x7a\xb3\xbb\xe0\x66\xa7\xc7\x09\xc8\x3e\xe0\x7b\ +\x13\x6f\x16\x5c\x3e\xc7\x28\xeb\x5e\x41\x9c\xa5\x7e\x77\xf6\x35\ +\x47\xfb\x81\xd8\x0c\x21\x74\xb8\xf7\x1e\xe0\xa5\x3e\xda\x5d\x34\ +\xf6\xa6\x9a\x38\x43\x34\xc0\x9e\xfc\x39\x11\xc1\xf3\x17\x92\x53\ +\xcf\xfc\xc4\x54\xa6\x70\x20\x15\x4c\xbd\x74\x53\x45\x7d\x15\xb6\ +\xb4\x25\x4c\xf2\xbe\xf9\xb9\x07\xf0\x98\x5f\x23\xe1\x8b\xb0\x19\ +\x02\x49\xfa\x74\xc4\xbd\x69\xd6\xb8\x07\xef\x98\x77\xcb\xf0\xdb\ +\xc0\x07\x51\xe7\xe6\x25\x0d\xaa\x36\x2c\xa9\x01\x66\x2f\xe3\xfd\ +\x67\x2f\x85\xe7\x9a\xe7\x4a\x92\x19\x70\x8c\xad\xfa\x7a\x6a\x59\ +\x49\x6f\xb8\x68\x4b\xe5\x7c\xd5\x2e\x89\x02\x27\xfc\x32\x7d\x7a\ +\xcb\xde\xe3\x1f\xc9\xb9\xd1\xd8\xc3\x4f\xc1\xaa\x21\x63\x95\x0a\ +\xbb\x7c\xfd\xb8\x60\x22\x3b\x05\xb9\x12\x0f\xc5\x1b\xee\xb1\xeb\ +\xa1\x10\x20\x63\x1f\x28\x97\x3e\xd4\x39\xa6\x6e\x91\xd1\xcd\xfd\ +\xa2\x46\xf7\xf1\x51\x3e\x82\x4a\xe1\xa7\x78\xc0\xc9\x4d\x53\xbf\ +\xbd\x9f\x54\x67\xb4\x39\xe8\x4f\x30\x49\x6d\xf8\x0d\xab\xf0\xbc\ +\x56\x31\x06\x29\x27\x34\x0d\x54\x3b\xa1\x39\x47\x68\x16\xb8\xf3\ +\x36\x43\x68\x96\x8f\x82\x3c\xa1\xa3\xf1\x73\xf2\x81\x51\x17\x04\ +\x1a\x95\x52\xdc\x19\x73\x62\x13\x4f\x96\xac\xec\x5c\x09\x1f\x99\ +\xef\x92\x6e\x2a\x55\x96\x3b\xd3\xf0\x4a\x04\xe4\xb4\xbe\x23\x15\ +\x38\xfc\x79\xbd\xc3\x5f\xd6\x37\xfc\x35\x97\x0e\xec\x0c\x6a\xc4\ +\xbf\x85\xa0\xc6\x25\xb0\x10\xd4\xb8\x0a\x5d\x10\x2d\xc3\x3a\x17\ +\xc1\x00\x50\xe3\x1a\x18\x00\x6a\x5c\x82\x97\xd4\xf9\xa1\xea\x5e\ +\x86\x08\x88\x1a\x97\x22\x02\xa2\xd4\x72\xd4\x6e\xaa\x94\xf4\xf3\ +\x37\xf3\x93\x64\xe6\x5b\x2b\xdf\xa0\x15\x77\xa8\x17\xf3\xdd\x18\ +\x9f\x56\x6c\x27\xb5\x89\xe6\xca\xaa\xbe\x02\x1d\xbf\x80\x41\xf4\ +\x8d\xbf\x2b\xc4\x84\xf5\x6c\xd9\x13\x2f\xb0\xe1\x89\x23\x89\x4a\ +\x46\x6e\x2d\xf2\x0e\x49\xb8\x4d\x86\x5e\x3d\xd6\x0f\x0e\xf0\x96\ +\x5d\x73\x26\x06\x7b\x7c\xdf\xfd\x0d\x6f\x6b\xf7\x5d\x2a\xcb\x5c\ +\x28\x5d\xcc\x0a\x4b\x2c\xe0\xdf\xd1\x14\xfb\x00\x88\x26\x4f\xe3\ +\xb8\xad\xf1\xac\xeb\x97\x79\x21\xb2\x2d\x91\x40\x25\xc5\xcf\xb2\ +\xdf\xbc\x7e\xe1\xe9\xdc\x4d\xd8\x59\x77\xbf\xbd\x25\x40\x68\xf8\ +\x08\x3c\x24\x9c\xca\x25\xcf\x02\x3f\x53\xfe\x61\xbd\x9d\x9f\x69\ +\xad\x7e\xa6\x05\xe9\xcd\x5b\xed\x67\x7a\x87\x47\x1c\xf0\xee\x33\ +\x0c\x97\x28\x7b\xee\x81\x82\xaa\x91\xcc\x09\x84\x9c\xe2\x45\x8b\ +\x81\xfd\xbc\x33\x32\x09\xe2\x45\xc5\x0b\x9f\x78\xc1\xf3\xb1\xe1\ +\x9c\x27\x83\xe0\x39\x3a\xad\xf0\xee\xe5\x28\x75\x26\x8c\xc3\xb8\ +\x2e\x73\xd1\x83\x85\x2a\x29\x14\x99\x36\x86\x03\xcd\x40\x5d\xd9\ +\x5e\xd6\xf3\x2d\x1b\x3b\x18\x92\xc0\xa6\xea\xa7\x72\x32\x39\x59\ +\x99\xe8\x2b\x6a\x17\x6b\x14\x6b\x61\xe5\xf7\x2c\x20\x66\x4e\x7a\ +\x5d\xed\x9f\xed\x93\x11\x95\x03\xee\x5f\xed\x37\x9b\xfb\x98\x6b\ +\xd4\x1e\xf3\xfb\x11\x1d\x87\xc9\x52\x9d\x3f\x3f\xe9\xe7\x37\x52\ +\x8c\x3e\x82\xb1\xd2\x15\x13\x89\xc9\x35\xa9\x56\xf0\x9e\x33\x51\ +\x81\x18\x99\x11\x95\x86\x24\x5e\x62\xa0\xd4\xec\xda\xd1\xdc\x1a\ +\xe3\x54\xc0\x9f\x2e\xd7\x4d\x40\xb2\x33\xdf\x55\x9d\xcf\xdf\xf5\ +\x7b\x20\xea\x6c\xc1\x9e\xe1\x26\x74\x7d\x61\x0f\x0d\xec\xe0\x15\ +\xa7\x9e\x18\x1c\x0e\x91\xb9\x74\x85\x46\x40\x7a\xdc\x7c\x40\xae\ +\xf1\x53\x4c\x2f\x27\x41\xa0\xcd\x9a\x0c\x40\x3e\x4d\xd4\x30\xac\ +\x9f\x07\x8c\x01\x56\x95\x83\x24\x25\xc0\x32\xa1\x79\x88\xbb\x79\ +\x20\x61\x6f\x2b\x03\xcb\xa6\xcc\x64\x23\x68\x56\xb9\x16\x50\x16\ +\xad\xd7\xc3\x45\x5d\x0f\x58\xf6\xb8\x7e\x36\x8a\xa2\xda\x35\xe1\ +\xc8\xec\x76\xe6\x00\x33\xab\x5d\x0b\x30\x61\x56\x41\x36\x30\x51\ +\xed\x5a\x80\x49\x64\x80\x65\x43\x94\x6a\x52\x1e\xac\x64\x01\xf6\ +\xd4\x96\x4c\x69\x41\xaa\xb4\xc8\x05\xdd\xeb\x33\x93\x9b\x6a\x66\ +\x31\x7b\x36\xa3\x2a\x00\x00\xfa\xce\xb8\xf4\x05\x03\xe9\xbe\x1d\ +\x17\xad\x93\x81\x4f\xbd\x8e\xe3\xe1\xa1\x47\xf7\x29\x9e\xb3\xc4\ +\x1d\x8c\x29\xd5\x2d\xc0\x04\x60\xfc\x36\xde\x57\xea\x28\x79\xbb\ +\x31\x6b\x62\xba\xf4\x44\xd0\x01\x35\xf8\xda\x9c\xea\x9c\xf5\x89\ +\xc5\x06\x23\xf8\xe5\x06\xab\x91\xf0\x37\x09\xa6\x63\x34\x35\xf5\ +\xf4\x12\x61\x8f\xf6\x7d\xe7\x12\x00\xbe\x0f\x1f\xa7\x9d\xe3\xf3\ +\xcb\x76\x63\x1a\xaa\x33\x7c\xfb\x61\x47\x2e\xc3\xaf\xcd\x68\xc3\ +\x38\xdd\xdb\x49\xf3\x3c\xd9\xdd\x45\x33\xab\x3b\xf3\x53\xd9\xa5\ +\x49\xa0\x76\xad\x98\x9e\x1d\x9f\xad\x16\xc7\x88\xd3\x04\x8e\x8f\ +\xcb\xe0\xf8\xf4\xbc\x99\xea\xee\xa4\x32\x1c\x9f\xac\x0e\xc7\x67\ +\xd5\xe2\xf8\x2c\x49\x78\xad\xf3\xa3\x55\xe2\xb8\x75\xde\xda\x40\ +\x1c\x87\xd7\xca\x57\x8c\xd9\xd6\x4a\x31\xdb\x3c\x5b\x1b\x66\x97\ +\x97\x10\xe1\x0d\x28\xd5\x62\xf6\xf4\x22\xc9\xc8\x67\xa7\x65\x30\ +\x7b\x7c\x7a\xb2\x05\xb2\x37\xbc\xe3\xa1\x5a\xcc\x1e\x1f\xa7\x30\ +\x7b\xbe\x4a\x9a\xad\x12\xb3\xe7\xe5\x25\x6e\x74\x4f\x76\xb5\x48\ +\x6e\xa6\xe8\xb7\x75\x59\x4a\x32\x9c\xa0\xbf\x26\xd1\x5d\xa6\x9a\ +\xdc\x14\xdb\x21\x76\xe7\x57\xc5\xd6\x43\xda\x42\x2b\x25\x25\x5a\ +\xad\xb3\xc7\x18\x23\xf3\xb1\x1c\x7f\x84\xfa\x76\x63\xc2\x3b\x7b\ +\xff\x07\xbf\xef\x72\xe5\ \x00\x00\x07\xb5\ \x00\ \x00\x1a\x6e\x78\x9c\xed\x58\x5d\x6f\xe3\xb8\x15\x7d\xcf\xaf\x50\ @@ -37873,59 +37878,59 @@ qt_resource_struct = "\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\ \x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\ \x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\ -\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x70\xc5\ -\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xc2\x72\ -\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x24\x8f\ -\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xe3\x77\ -\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x0d\x59\ -\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x8e\x0f\ -\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe6\xad\ -\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb7\xde\ -\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x5e\x1e\ -\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xff\x87\ -\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xdb\x94\ -\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xec\x71\ -\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x7b\x79\ -\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xe1\x13\ -\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa6\xd4\ -\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xd1\x28\ -\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc5\xbd\ -\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x9c\xbc\ -\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x28\x78\ -\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xb1\xc7\ -\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xbc\x29\ -\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x16\x5f\ -\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x95\x03\ -\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x0d\x65\ -\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x6e\x66\ -\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x39\xe8\ -\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x85\x19\ -\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xce\x80\ -\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xfc\x7b\ -\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xee\x11\ -\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x51\x27\ -\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa4\xc3\ -\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x0b\x60\ -\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\xa2\xa0\ -\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xb9\xe3\ -\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x2d\x38\ -\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xce\x4a\ -\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x63\x66\ -\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc4\xcf\ -\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x49\x8d\ -\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x07\x03\x18\ -\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xe0\x38\ -\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x34\x69\ -\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x64\x93\ -\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x08\x01\xf3\ -\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x14\xb9\ -\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd8\xf5\ -\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x97\xf0\ -\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xf4\x32\ -\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xf2\x21\ -\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x41\xcd\ -\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x9d\x60\ -\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x34\x89\ +\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x07\x71\x1b\ +\x00\x00\x03\xb0\x00\x00\x00\x00\x00\x01\x00\x06\xc2\xc8\ +\x00\x00\x08\x38\x00\x01\x00\x00\x00\x01\x00\x08\x24\xe5\ +\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x08\xe3\xcd\ +\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x07\x0d\xaf\ +\x00\x00\x06\x4a\x00\x00\x00\x00\x00\x01\x00\x07\x8e\x65\ +\x00\x00\x07\x5e\x00\x01\x00\x00\x00\x01\x00\x07\xe7\x03\ +\x00\x00\x06\xbe\x00\x00\x00\x00\x00\x01\x00\x07\xb8\x34\ +\x00\x00\x08\xd2\x00\x01\x00\x00\x00\x01\x00\x08\x5e\x74\ +\x00\x00\x0a\xce\x00\x01\x00\x00\x00\x01\x00\x08\xff\xdd\ +\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x06\xdb\xea\ +\x00\x00\x07\x84\x00\x01\x00\x00\x00\x01\x00\x07\xec\xc7\ +\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x07\x7b\xcf\ +\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x06\xe1\x69\ +\x00\x00\x06\x92\x00\x01\x00\x00\x00\x01\x00\x07\xa7\x2a\ +\x00\x00\x03\xd2\x00\x01\x00\x00\x00\x01\x00\x06\xd1\x7e\ +\x00\x00\x0a\x08\x00\x00\x00\x00\x00\x01\x00\x08\xc6\x13\ +\x00\x00\x03\x30\x00\x01\x00\x00\x00\x01\x00\x06\x9d\x12\ +\x00\x00\x05\x0a\x00\x01\x00\x00\x00\x01\x00\x07\x28\xce\ +\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x08\xb2\x1d\ +\x00\x00\x09\xe2\x00\x01\x00\x00\x00\x01\x00\x08\xbc\x7f\ +\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x07\x16\xb5\ +\x00\x00\x02\xfe\x00\x01\x00\x00\x00\x01\x00\x06\x95\x59\ +\x00\x00\x07\xee\x00\x01\x00\x00\x00\x01\x00\x08\x0d\xbb\ +\x00\x00\x09\x2c\x00\x00\x00\x00\x00\x01\x00\x08\x6e\xbc\ +\x00\x00\x05\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x3a\x3e\ +\x00\x00\x09\x50\x00\x00\x00\x00\x00\x01\x00\x08\x85\x6f\ +\x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x07\xce\xd6\ +\x00\x00\x04\x6c\x00\x01\x00\x00\x00\x01\x00\x06\xfc\xd1\ +\x00\x00\x0a\x9e\x00\x00\x00\x00\x00\x01\x00\x08\xee\x67\ +\x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x07\x51\x7d\ +\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x06\xa5\x19\ +\x00\x00\x0a\xfe\x00\x00\x00\x00\x00\x01\x00\x09\x0b\xb6\ +\x00\x00\x09\x98\x00\x00\x00\x00\x00\x01\x00\x08\xa2\xf6\ +\x00\x00\x03\x80\x00\x01\x00\x00\x00\x01\x00\x06\xba\x39\ +\x00\x00\x08\x5a\x00\x01\x00\x00\x00\x01\x00\x08\x2d\x8e\ +\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x08\xce\xa0\ +\x00\x00\x05\xe0\x00\x01\x00\x00\x00\x01\x00\x07\x63\xbc\ +\x00\x00\x06\xf0\x00\x01\x00\x00\x00\x01\x00\x07\xc5\x25\ +\x00\x00\x08\xb0\x00\x00\x00\x00\x00\x01\x00\x08\x49\xe3\ +\x00\x00\x04\x90\x00\x01\x00\x00\x00\x01\x00\x07\x03\x6e\ +\x00\x00\x07\x3e\x00\x01\x00\x00\x00\x01\x00\x07\xe0\x8e\ +\x00\x00\x05\x3e\x00\x01\x00\x00\x00\x01\x00\x07\x34\xbf\ +\x00\x00\x08\xfc\x00\x01\x00\x00\x00\x01\x00\x08\x64\xe9\ +\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x08\x02\x49\ +\x00\x00\x08\x10\x00\x01\x00\x00\x00\x01\x00\x08\x15\x0f\ +\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x08\xd9\x4b\ +\x00\x00\x09\x74\x00\x01\x00\x00\x00\x01\x00\x08\x98\x46\ +\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\xf4\x88\ +\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x07\xf2\x77\ +\x00\x00\x05\x8c\x00\x00\x00\x00\x00\x01\x00\x07\x42\x23\ +\x00\x00\x06\x72\x00\x01\x00\x00\x00\x01\x00\x07\x9d\xb6\ +\x00\x00\x08\x7e\x00\x00\x00\x00\x00\x01\x00\x08\x34\xdf\ \x00\x00\x02\xaa\x00\x01\x00\x00\x00\x01\x00\x06\x7b\xb1\ \x00\x00\x02\xd6\x00\x01\x00\x00\x00\x01\x00\x06\x85\x1e\ " diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index ea71b0d00..8f74063b8 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -230,7 +230,9 @@ class DraftWorkbench (Workbench): def GetClassName(self): return "Gui::PythonWorkbench" -FreeCADGui.addWorkbench(DraftWorkbench) +# ability to turn off the Draft workbench (since it is also all included in Arch) +if not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetBool("hideDraftWorkbench"): + FreeCADGui.addWorkbench(DraftWorkbench) App.addImportType("Autodesk DXF (*.dxf)","importDXF") App.addImportType("SVG as geometry (*.svg)","importSVG") App.addImportType("Open CAD Format (*.oca *.gcad)","importOCA") diff --git a/src/Mod/Draft/Resources/ui/userprefs-base.ui b/src/Mod/Draft/Resources/ui/userprefs-base.ui index ebf2bdbd9..a24aa0db6 100755 --- a/src/Mod/Draft/Resources/ui/userprefs-base.ui +++ b/src/Mod/Draft/Resources/ui/userprefs-base.ui @@ -28,11 +28,30 @@ + + + + If this is checked, the Draft workbench won't appear. Useful since all of the Draft tools are also in the Arch workbench. + + + Hide Draft workbench + + + hideDraftWorkbench + + + Mod/Draft + + + Draft interface mode + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + From 3a8f6dff5993e548cedf12cd66ecb688572848a8 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 16 Aug 2012 16:09:56 -0300 Subject: [PATCH 512/517] Updated translation files --- src/Gui/Language/FreeCAD.ts | 465 +- src/Gui/Language/FreeCAD_af.ts | 6142 +++++++++-------- src/Gui/Language/FreeCAD_de.ts | 474 +- src/Gui/Language/FreeCAD_es.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_fi.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_fr.ts | 6134 ++++++++-------- src/Gui/Language/FreeCAD_hr.ts | 6122 ++++++++-------- src/Gui/Language/FreeCAD_hu.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_it.ts | 6140 ++++++++-------- src/Gui/Language/FreeCAD_ja.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_nl.ts | 6122 ++++++++-------- src/Gui/Language/FreeCAD_no.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_pl.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_pt.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_ru.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_se.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_uk.ts | 6132 ++++++++-------- src/Gui/Language/FreeCAD_zh.ts | 6132 ++++++++-------- src/Mod/Arch/Resources/translations/Arch.ts | 696 +- .../Gui/Resources/translations/Assembly_af.ts | 40 +- .../Gui/Resources/translations/Assembly_de.ts | 40 +- .../Gui/Resources/translations/Assembly_es.ts | 40 +- .../Gui/Resources/translations/Assembly_fi.ts | 40 +- .../Gui/Resources/translations/Assembly_fr.ts | 40 +- .../Gui/Resources/translations/Assembly_hr.ts | 40 +- .../Gui/Resources/translations/Assembly_hu.ts | 40 +- .../Gui/Resources/translations/Assembly_it.ts | 40 +- .../Gui/Resources/translations/Assembly_ja.ts | 40 +- .../Gui/Resources/translations/Assembly_nl.ts | 40 +- .../Gui/Resources/translations/Assembly_no.ts | 40 +- .../Gui/Resources/translations/Assembly_pl.ts | 40 +- .../Gui/Resources/translations/Assembly_pt.ts | 40 +- .../Gui/Resources/translations/Assembly_ru.ts | 40 +- .../Gui/Resources/translations/Assembly_se.ts | 40 +- .../Gui/Resources/translations/Assembly_uk.ts | 40 +- .../Gui/Resources/translations/Assembly_zh.ts | 40 +- .../Gui/Resources/translations/Complete_af.ts | 85 +- .../Gui/Resources/translations/Complete_de.ts | 85 +- .../Gui/Resources/translations/Complete_es.ts | 85 +- .../Gui/Resources/translations/Complete_fi.ts | 85 +- .../Gui/Resources/translations/Complete_fr.ts | 85 +- .../Gui/Resources/translations/Complete_hr.ts | 85 +- .../Gui/Resources/translations/Complete_hu.ts | 85 +- .../Gui/Resources/translations/Complete_it.ts | 85 +- .../Gui/Resources/translations/Complete_ja.ts | 85 +- .../Gui/Resources/translations/Complete_nl.ts | 85 +- .../Gui/Resources/translations/Complete_no.ts | 85 +- .../Gui/Resources/translations/Complete_pl.ts | 85 +- .../Gui/Resources/translations/Complete_pt.ts | 85 +- .../Gui/Resources/translations/Complete_ru.ts | 85 +- .../Gui/Resources/translations/Complete_se.ts | 85 +- .../Gui/Resources/translations/Complete_uk.ts | 85 +- .../Gui/Resources/translations/Complete_zh.ts | 85 +- src/Mod/Draft/Resources/translations/Draft.ts | 951 ++- .../Gui/Resources/translations/Drawing_af.ts | 653 +- .../Gui/Resources/translations/Drawing_de.ts | 653 +- .../Gui/Resources/translations/Drawing_es.ts | 653 +- .../Gui/Resources/translations/Drawing_fi.ts | 653 +- .../Gui/Resources/translations/Drawing_fr.ts | 653 +- .../Gui/Resources/translations/Drawing_hr.ts | 653 +- .../Gui/Resources/translations/Drawing_hu.ts | 653 +- .../Gui/Resources/translations/Drawing_it.ts | 653 +- .../Gui/Resources/translations/Drawing_ja.ts | 653 +- .../Gui/Resources/translations/Drawing_nl.ts | 653 +- .../Gui/Resources/translations/Drawing_no.ts | 653 +- .../Gui/Resources/translations/Drawing_pl.ts | 653 +- .../Gui/Resources/translations/Drawing_pt.ts | 653 +- .../Gui/Resources/translations/Drawing_ru.ts | 653 +- .../Gui/Resources/translations/Drawing_se.ts | 653 +- .../Gui/Resources/translations/Drawing_uk.ts | 653 +- .../Gui/Resources/translations/Drawing_zh.ts | 653 +- .../Fem/Gui/Resources/translations/Fem_af.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_de.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_es.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_fi.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_fr.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_hr.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_hu.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_it.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_ja.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_nl.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_no.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_pl.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_pt.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_ru.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_se.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_uk.ts | 65 +- .../Fem/Gui/Resources/translations/Fem_zh.ts | 65 +- .../Gui/Resources/translations/Image_af.ts | 192 +- .../Gui/Resources/translations/Image_de.ts | 192 +- .../Gui/Resources/translations/Image_es.ts | 192 +- .../Gui/Resources/translations/Image_fi.ts | 192 +- .../Gui/Resources/translations/Image_fr.ts | 192 +- .../Gui/Resources/translations/Image_hr.ts | 192 +- .../Gui/Resources/translations/Image_hu.ts | 192 +- .../Gui/Resources/translations/Image_it.ts | 192 +- .../Gui/Resources/translations/Image_ja.ts | 192 +- .../Gui/Resources/translations/Image_nl.ts | 192 +- .../Gui/Resources/translations/Image_no.ts | 192 +- .../Gui/Resources/translations/Image_pl.ts | 192 +- .../Gui/Resources/translations/Image_pt.ts | 192 +- .../Gui/Resources/translations/Image_ru.ts | 192 +- .../Gui/Resources/translations/Image_se.ts | 192 +- .../Gui/Resources/translations/Image_uk.ts | 192 +- .../Gui/Resources/translations/Image_zh.ts | 192 +- .../Gui/Resources/translations/Mesh_af.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_de.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_es.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_fi.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_fr.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_hr.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_hu.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_it.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_ja.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_nl.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_no.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_pl.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_pt.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_ru.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_se.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_uk.ts | 1243 ++-- .../Gui/Resources/translations/Mesh_zh.ts | 1243 ++-- .../Gui/Resources/translations/MeshPart_af.ts | 73 +- .../Gui/Resources/translations/MeshPart_de.ts | 73 +- .../Gui/Resources/translations/MeshPart_es.ts | 73 +- .../Gui/Resources/translations/MeshPart_fi.ts | 73 +- .../Gui/Resources/translations/MeshPart_fr.ts | 73 +- .../Gui/Resources/translations/MeshPart_hr.ts | 73 +- .../Gui/Resources/translations/MeshPart_hu.ts | 73 +- .../Gui/Resources/translations/MeshPart_it.ts | 73 +- .../Gui/Resources/translations/MeshPart_ja.ts | 73 +- .../Gui/Resources/translations/MeshPart_nl.ts | 73 +- .../Gui/Resources/translations/MeshPart_no.ts | 73 +- .../Gui/Resources/translations/MeshPart_pl.ts | 73 +- .../Gui/Resources/translations/MeshPart_pt.ts | 73 +- .../Gui/Resources/translations/MeshPart_ru.ts | 73 +- .../Gui/Resources/translations/MeshPart_se.ts | 73 +- .../Gui/Resources/translations/MeshPart_uk.ts | 73 +- .../Gui/Resources/translations/MeshPart_zh.ts | 73 +- .../Gui/Resources/translations/Part_af.ts | 2626 ++++--- .../Gui/Resources/translations/Part_de.ts | 2624 ++++--- .../Gui/Resources/translations/Part_es.ts | 2624 ++++--- .../Gui/Resources/translations/Part_fi.ts | 2624 ++++--- .../Gui/Resources/translations/Part_fr.ts | 2624 ++++--- .../Gui/Resources/translations/Part_hr.ts | 2624 ++++--- .../Gui/Resources/translations/Part_hu.ts | 2624 ++++--- .../Gui/Resources/translations/Part_it.ts | 2624 ++++--- .../Gui/Resources/translations/Part_ja.ts | 2624 ++++--- .../Gui/Resources/translations/Part_nl.ts | 2624 ++++--- .../Gui/Resources/translations/Part_no.ts | 2624 ++++--- .../Gui/Resources/translations/Part_pl.ts | 2624 ++++--- .../Gui/Resources/translations/Part_pt.ts | 2624 ++++--- .../Gui/Resources/translations/Part_ru.ts | 2624 ++++--- .../Gui/Resources/translations/Part_se.ts | 2624 ++++--- .../Gui/Resources/translations/Part_uk.ts | 2624 ++++--- .../Gui/Resources/translations/Part_zh.ts | 2624 ++++--- .../Resources/translations/PartDesign_af.ts | 803 ++- .../Resources/translations/PartDesign_de.ts | 801 ++- .../Resources/translations/PartDesign_es.ts | 801 ++- .../Resources/translations/PartDesign_fi.ts | 801 ++- .../Resources/translations/PartDesign_fr.ts | 801 ++- .../Resources/translations/PartDesign_hr.ts | 801 ++- .../Resources/translations/PartDesign_hu.ts | 801 ++- .../Resources/translations/PartDesign_it.ts | 801 ++- .../Resources/translations/PartDesign_ja.ts | 801 ++- .../Resources/translations/PartDesign_nl.ts | 801 ++- .../Resources/translations/PartDesign_no.ts | 801 ++- .../Resources/translations/PartDesign_pl.ts | 801 ++- .../Resources/translations/PartDesign_pt.ts | 801 ++- .../Resources/translations/PartDesign_ru.ts | 801 ++- .../Resources/translations/PartDesign_se.ts | 801 ++- .../Resources/translations/PartDesign_uk.ts | 801 ++- .../Resources/translations/PartDesign_zh.ts | 801 ++- .../Gui/Resources/translations/Points_af.ts | 260 +- .../Gui/Resources/translations/Points_de.ts | 260 +- .../Gui/Resources/translations/Points_es.ts | 260 +- .../Gui/Resources/translations/Points_fi.ts | 260 +- .../Gui/Resources/translations/Points_fr.ts | 260 +- .../Gui/Resources/translations/Points_hr.ts | 260 +- .../Gui/Resources/translations/Points_hu.ts | 260 +- .../Gui/Resources/translations/Points_it.ts | 260 +- .../Gui/Resources/translations/Points_ja.ts | 260 +- .../Gui/Resources/translations/Points_nl.ts | 260 +- .../Gui/Resources/translations/Points_no.ts | 260 +- .../Gui/Resources/translations/Points_pl.ts | 260 +- .../Gui/Resources/translations/Points_pt.ts | 260 +- .../Gui/Resources/translations/Points_ru.ts | 260 +- .../Gui/Resources/translations/Points_se.ts | 260 +- .../Gui/Resources/translations/Points_uk.ts | 260 +- .../Gui/Resources/translations/Points_zh.ts | 260 +- .../Resources/translations/Raytracing_af.ts | 262 +- .../Resources/translations/Raytracing_de.ts | 262 +- .../Resources/translations/Raytracing_es.ts | 262 +- .../Resources/translations/Raytracing_fi.ts | 262 +- .../Resources/translations/Raytracing_fr.ts | 262 +- .../Resources/translations/Raytracing_hr.ts | 262 +- .../Resources/translations/Raytracing_hu.ts | 262 +- .../Resources/translations/Raytracing_it.ts | 262 +- .../Resources/translations/Raytracing_ja.ts | 262 +- .../Resources/translations/Raytracing_nl.ts | 262 +- .../Resources/translations/Raytracing_no.ts | 262 +- .../Resources/translations/Raytracing_pl.ts | 262 +- .../Resources/translations/Raytracing_pt.ts | 262 +- .../Resources/translations/Raytracing_ru.ts | 262 +- .../Resources/translations/Raytracing_se.ts | 262 +- .../Resources/translations/Raytracing_uk.ts | 262 +- .../Resources/translations/Raytracing_zh.ts | 262 +- .../translations/ReverseEngineering_af.ts | 51 +- .../translations/ReverseEngineering_de.ts | 51 +- .../translations/ReverseEngineering_es.ts | 51 +- .../translations/ReverseEngineering_fi.ts | 51 +- .../translations/ReverseEngineering_fr.ts | 51 +- .../translations/ReverseEngineering_hr.ts | 51 +- .../translations/ReverseEngineering_hu.ts | 51 +- .../translations/ReverseEngineering_it.ts | 51 +- .../translations/ReverseEngineering_ja.ts | 51 +- .../translations/ReverseEngineering_nl.ts | 51 +- .../translations/ReverseEngineering_no.ts | 51 +- .../translations/ReverseEngineering_pl.ts | 51 +- .../translations/ReverseEngineering_pt.ts | 51 +- .../translations/ReverseEngineering_ru.ts | 51 +- .../translations/ReverseEngineering_se.ts | 51 +- .../translations/ReverseEngineering_uk.ts | 51 +- .../translations/ReverseEngineering_zh.ts | 51 +- .../Gui/Resources/translations/Robot_af.ts | 1129 +-- .../Gui/Resources/translations/Robot_de.ts | 1129 +-- .../Gui/Resources/translations/Robot_es.ts | 1129 +-- .../Gui/Resources/translations/Robot_fi.ts | 1129 +-- .../Gui/Resources/translations/Robot_fr.ts | 1129 +-- .../Gui/Resources/translations/Robot_hr.ts | 1129 +-- .../Gui/Resources/translations/Robot_hu.ts | 1129 +-- .../Gui/Resources/translations/Robot_it.ts | 1129 +-- .../Gui/Resources/translations/Robot_ja.ts | 1129 +-- .../Gui/Resources/translations/Robot_nl.ts | 1129 +-- .../Gui/Resources/translations/Robot_no.ts | 1129 +-- .../Gui/Resources/translations/Robot_pl.ts | 1129 +-- .../Gui/Resources/translations/Robot_pt.ts | 1129 +-- .../Gui/Resources/translations/Robot_ru.ts | 1129 +-- .../Gui/Resources/translations/Robot_se.ts | 1129 +-- .../Gui/Resources/translations/Robot_uk.ts | 1129 +-- .../Gui/Resources/translations/Robot_zh.ts | 1129 +-- .../Gui/Resources/translations/Sketcher_af.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_de.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_es.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_fi.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_fr.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_hr.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_hu.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_it.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_ja.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_nl.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_no.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_pl.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_pt.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_ru.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_se.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_uk.ts | 1361 ++-- .../Gui/Resources/translations/Sketcher_zh.ts | 1361 ++-- .../Gui/Resources/translations/StartPage.ts | 96 +- .../Gui/Resources/translations/Test_af.ts | 108 +- .../Gui/Resources/translations/Test_de.ts | 106 +- .../Gui/Resources/translations/Test_es.ts | 106 +- .../Gui/Resources/translations/Test_fi.ts | 106 +- .../Gui/Resources/translations/Test_fr.ts | 110 +- .../Gui/Resources/translations/Test_hr.ts | 106 +- .../Gui/Resources/translations/Test_hu.ts | 106 +- .../Gui/Resources/translations/Test_it.ts | 108 +- .../Gui/Resources/translations/Test_ja.ts | 106 +- .../Gui/Resources/translations/Test_nl.ts | 106 +- .../Gui/Resources/translations/Test_no.ts | 106 +- .../Gui/Resources/translations/Test_pl.ts | 106 +- .../Gui/Resources/translations/Test_pt.ts | 106 +- .../Gui/Resources/translations/Test_ru.ts | 106 +- .../Gui/Resources/translations/Test_se.ts | 106 +- .../Gui/Resources/translations/Test_uk.ts | 106 +- .../Gui/Resources/translations/Test_zh.ts | 106 +- 276 files changed, 148579 insertions(+), 104292 deletions(-) diff --git a/src/Gui/Language/FreeCAD.ts b/src/Gui/Language/FreeCAD.ts index 024b5a7f1..107a438bf 100644 --- a/src/Gui/Language/FreeCAD.ts +++ b/src/Gui/Language/FreeCAD.ts @@ -63,6 +63,44 @@ + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + + + + Remove + + + + Move up + + + + Move down + + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + Gui::BlenderNavigationStyle @@ -160,6 +198,10 @@ License... + + Copy to clipboard + + Gui::Dialog::ButtonModel @@ -708,10 +750,6 @@ Please define another shortcut. Viewing mode - - Display mode: - - Plot mode: @@ -736,6 +774,10 @@ Please define another shortcut. Color plot: + + Document window: + + Gui::Dialog::DlgEditorSettings @@ -1482,6 +1524,14 @@ Specify another directory, please. Invert zoom + + Zoom at cursor + + + + Zoom step + + Gui::Dialog::DlgSettings3DViewImp @@ -1722,6 +1772,10 @@ Specify another directory, please. Items + + Current line highlight + + Gui::Dialog::DlgSettingsImage @@ -1956,6 +2010,14 @@ Specify another directory, please. Macro path + + General macro settings + + + + Run macros in local environment + + Gui::Dialog::DlgSettingsUnits @@ -2046,14 +2108,6 @@ Specify another directory, please. Fully constrained geometry - - The color of construction geometry in editmode - - - - The color of fully constrained geometry in editmode - - The color of vertices being edited @@ -2062,6 +2116,42 @@ Specify another directory, please. The color of edges being edited + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + Gui::Dialog::DlgTipOfTheDay @@ -2124,7 +2214,39 @@ Specify another directory, please. Gui::Dialog::DownloadDialog - Canceled. + Download + + + + Cancel + + + + Close + + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + + + + Downloaded %1 to current directory. @@ -2162,6 +2284,13 @@ Specify another directory, please. + + Gui::Dialog::LicenseDialog + + Copyright + + + Gui::Dialog::MouseButtons @@ -2847,6 +2976,25 @@ Do you want to save your changes? + + Gui::LocationWidget + + X: + + + + Y: + + + + Z: + + + + Direction: + + + Gui::MacroCommand @@ -2877,6 +3025,88 @@ Do you want to save your changes? + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + Gui::NetworkRetriever @@ -3020,6 +3250,10 @@ Do you want to exit without saving your data? Select All + + Clear console + + Gui::PythonEditor @@ -3158,10 +3392,6 @@ Do you want to specify another directory? Gui::TaskView::TaskAppearance - - Display mode: - - Plot mode: @@ -3182,6 +3412,10 @@ Do you want to specify another directory? Appearance + + Document window: + + Gui::TaskView::TaskEditControl @@ -3206,9 +3440,21 @@ Do you want to specify another directory? - Gui::Translator + Gui::TouchpadNavigationStyle - English + Press left mouse button + + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button @@ -3464,14 +3710,6 @@ Do you want to specify another directory? A general error occurred while loading the workbench - - File not found - - - - Cannot open file %1 - - Save views... @@ -3769,6 +4007,17 @@ You either have to finish or cancel the editing in the task panel. + + StdBoxSelection + + Standard-View + + + + Box selection + + + StdCmdAbout @@ -3829,6 +4078,21 @@ You either have to finish or cancel the editing in the task panel. + + StdCmdAlignment + + Edit + + + + Alignment... + + + + Align the selected objects + + + StdCmdArrangeIcons @@ -3945,21 +4209,6 @@ You either have to finish or cancel the editing in the task panel. - - StdCmdDDuplicateSelection - - Edit - - - - Duplicate selection - - - - Put duplicates of the selected objects to the active document - - - StdCmdDelete @@ -4106,6 +4355,40 @@ You either have to finish or cancel the editing in the task panel. + + StdCmdDuplicateSelection + + Edit + + + + Duplicate selection + + + + Put duplicates of the selected objects to the active document + + + + + StdCmdEdit + + Edit + + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + StdCmdExport @@ -4121,7 +4404,26 @@ You either have to finish or cancel the editing in the task panel. - Supported formats + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document @@ -4297,11 +4599,11 @@ You either have to finish or cancel the editing in the task panel. - Mesure distance + Measures distance between two selected objects - Measures distance between two selected objects + Measure distance @@ -4354,21 +4656,6 @@ You either have to finish or cancel the editing in the task panel. - - StdCmdOnlineHelpPython - - Help - - - - Python Manuals - - - - Show the Python documentation - - - StdCmdOnlineHelpWebsite @@ -5183,6 +5470,36 @@ You either have to finish or cancel the editing in the task panel. + + StdCmdViewRotateLeft + + Standard-View + + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + StdCmdViewTop @@ -5366,6 +5683,34 @@ You either have to finish or cancel the editing in the task panel. + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + Workbench diff --git a/src/Gui/Language/FreeCAD_af.ts b/src/Gui/Language/FreeCAD_af.ts index 4ba0e26ca..d2ddf2c47 100644 --- a/src/Gui/Language/FreeCAD_af.ts +++ b/src/Gui/Language/FreeCAD_af.ts @@ -1,5488 +1,5906 @@ - - + + Angle - Form - Vorm + Form + Vorm - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Hoekspronge + Angle Snap + Hoekspronge - - 1 ° - + + 1 ° + - - 2 ° - + + 2 ° + - - 5 ° - + + 5 ° + - - 10 ° - 10° + + 10 ° + 10° - - 20 ° - 20° + + 20 ° + 20° - - 45 ° - 45° + + 45 ° + 45° - - 90 ° - 90° + + 90 ° + 90° - - 180 ° - 180° + + 180 ° + 180° - - + + Gui::AccelLineEdit - none - geen + none + geen - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Voeg by + + + Remove + Verwyder + + + Move up + Skuif op + + + Move down + Skuif neer + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Druk linker muisknoppie + Press left mouse button + Druk linker muisknoppie - Press SHIFT and middle mouse button - Press SHIFT and middle mouse button + Press SHIFT and middle mouse button + Press SHIFT and middle mouse button - Press middle mouse button - Druk middelste muisknoppie + Press middle mouse button + Druk middelste muisknoppie - Scroll middle mouse button - Blaai neer met middelste muisknoppie + Scroll middle mouse button + Blaai neer met middelste muisknoppie - - + + Gui::CADNavigationStyle - Press left mouse button - Druk linker muisknoppie + Press left mouse button + Druk linker muisknoppie - Press middle mouse button - Druk middelste muisknoppie + Press middle mouse button + Druk middelste muisknoppie - Press left and middle mouse button - Druk linker- en middelste muisknoppie + Press left and middle mouse button + Druk linker- en middelste muisknoppie - Scroll middle mouse button - Blaai neer met middelste muisknoppie + Scroll middle mouse button + Blaai neer met middelste muisknoppie - - + + Gui::Command - Standard - Standaard + Standard + Standaard - - + + Gui::ContainerDialog - &OK - &Goedgekeur + &OK + &Goedgekeur - &Cancel - &Kanselleer + &Cancel + &Kanselleer - - + + Gui::ControlSingleton - Task panel - Taakpaneel + Task panel + Taakpaneel - - + + Gui::Dialog::AboutApplication - About - Aangaande + About + Aangaande - Revision number - Hersieningsnommer + Revision number + Hersieningsnommer - Version - Weergawe + Version + Weergawe - OK - Goed + OK + Goed - - + + - Release date - Uitgawedatum + Release date + Uitgawedatum - Platform - Platform + Platform + Platform - License... - License... + License... + License... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Button %1 + Button %1 + Button %1 - Out Of Range - Out Of Range + Out Of Range + Out Of Range - - + + Gui::Dialog::CommandModel - Commands - Bevele + Commands + Bevele - - + + Gui::Dialog::DemoMode - View Turntable - Kyk na Draaitafel + View Turntable + Kyk na Draaitafel - Speed - Spoed + Speed + Spoed - Maximum - Maksimum + Maximum + Maksimum - Minimum - Minimum + Minimum + Minimum - Fullscreen - Volskerm + Fullscreen + Volskerm - Enable timer - Aktiveer tydhouer + Enable timer + Aktiveer tydhouer - s - s + s + s - Angle - Hoek + Angle + Hoek + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Speel - -90° - -90° + Stop + Stop - Play - Speel + Close + Maak toe - - Stop - Stop - - - Close - Maak toe - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Kies Venster + Choose Window + Kies Venster - &Activate - &Aktiveer + &Activate + &Aktiveer - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Kanselleer + &Cancel + &Kanselleer - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Vensters + Windows + Vensters - - + + Gui::Dialog::DlgAuthorization - Authorization - Magtiging + Authorization + Magtiging - &OK - &Goedgekeur + &OK + &Goedgekeur - &Cancel - &Kanselleer + &Cancel + &Kanselleer - Password: - Wagwoord: + Password: + Wagwoord: - User name: - Gebruikersnaam: + User name: + Gebruikersnaam: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Kies ikoon + Choose Icon + Kies ikoon - OK - Goed + OK + Goed - Cancel - Kanselleer + Cancel + Kanselleer - Add icons... - Add icons... + Add icons... + Add icons... - - + + Gui::Dialog::DlgCustomActions - Macros - Makros + Macros + Makros - Setup Custom Macros - Maak Pasgemaakte Makros + Setup Custom Macros + Maak Pasgemaakte Makros - Macro: - Makro: + Macro: + Makro: - ... - ... + ... + ... - Pixmap - Beeldelementkaart + Pixmap + Beeldelementkaart - Accelerator: - Versneller: + Accelerator: + Versneller: - What's this: - Wat is dit: + What's this: + Wat is dit: - Status text: - Status teks: + Status text: + Status teks: - Tool tip: - Werktuigwenk: + Tool tip: + Werktuigwenk: - Menu text: - Kieslys teks: + Menu text: + Kieslys teks: - Add - Voeg by + Add + Voeg by - Remove - Verwyder + Remove + Verwyder - Replace - Vervang + Replace + Vervang - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ikone + Icons + Ikone - Macros - Makros + Macros + Makros - No macro - Geen makro + No macro + Geen makro - No macros found. - Geen makros gevind nie. + No macros found. + Geen makros gevind nie. - Macro not found - Makro nie gevind nie + Macro not found + Makro nie gevind nie - Sorry, couldn't find macro file '%1'. - Jammer, kon nie die makro-lêer '%1' vind nie. + Sorry, couldn't find macro file '%1'. + Jammer, kon nie die makro-lêer '%1' vind nie. - Empty macro - Leë makro + Empty macro + Leë makro - Please specify the macro first. - Kies asseblief eers 'n makro. + Please specify the macro first. + Kies asseblief eers 'n makro. - Empty text - Leë teks + Empty text + Leë teks - Please specify the menu text first. - Spesifiseer asseblief eers die kieslysteks. + Please specify the menu text first. + Spesifiseer asseblief eers die kieslysteks. - No item selected - Geen item gekies + No item selected + Geen item gekies - Please select a macro item first. - Kies eers 'n makro-item. + Please select a macro item first. + Kies eers 'n makro-item. - - + + Gui::Dialog::DlgCustomCommands - Commands - Bevele + Commands + Bevele - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategorie + Category + Kategorie - Icon - Ikoon + Icon + Ikoon - Command - Bevel + Command + Bevel - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Sleutelbord + Keyboard + Sleutelbord - Description: - Beskrywing: + Description: + Beskrywing: - &Category: - &Kategorie: + &Category: + &Kategorie: - C&ommands: - &Bevele: + C&ommands: + &Bevele: - Current shortcut: - Huidige kortpad: + Current shortcut: + Huidige kortpad: - Press &new shortcut: - Druk & nuwe kortpad: + Press &new shortcut: + Druk & nuwe kortpad: - Currently assigned to: - Tans toegeken aan: + Currently assigned to: + Tans toegeken aan: - &Assign - &KenToe + &Assign + &KenToe - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - Herstel + &Reset + Herstel - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - &Herstel Alles + Re&set All + &Herstel Alles - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ikoon + Icon + Ikoon - Command - Bevel + Command + Bevel - none - geen + none + geen - Multiple defined shortcut - Veelvuldig gedefinieerde kortpad + Multiple defined shortcut + Veelvuldig gedefinieerde kortpad - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Die kortpad '%1' is meer as een keer gedefinieer. Dit kan lei tot onverwagte gedrag. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Die kortpad '%1' is meer as een keer gedefinieer. Dit kan lei tot onverwagte gedrag. - Already defined shortcut - Reeds gedefinieerde kortpad + Already defined shortcut + Reeds gedefinieerde kortpad - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Die kortpad '%1' is reeds toegeken aan '%2'. -Definieer asseblief 'n ander kortpad. + Die kortpad '%1' is reeds toegeken aan '%2'. +Definieer asseblief 'n ander kortpad. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Gereedskapskisbalke + Toolbox bars + Gereedskapskisbalke - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Nutsbalke + Toolbars + Nutsbalke - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> Die veranderinge word aktief die volgende keer wat jy die gepaste werkbank gebruik</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> Die veranderinge word aktief die volgende keer wat jy die gepaste werkbank gebruik</p></body></html> - Move right - Skuif na regs + Move right + Skuif na regs - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Beweeg die gekose item een vlak neer.</b><p>Dit sal ook die vlak van die oueritem verander.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Beweeg die gekose item een vlak neer.</b><p>Dit sal ook die vlak van die oueritem verander.</p> - Move left - Skuif na links + Move left + Skuif na links - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Beweeg die gekose item een vlak op.</b><p>Dit sal ook die vlak van die oueritem verander.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Beweeg die gekose item een vlak op.</b><p>Dit sal ook die vlak van die oueritem verander.</p> - Move down - Skuif neer + Move down + Skuif neer - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Beweeg die gekose item neer.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Beweeg die gekose item neer.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> - Move up - Skuif op + Move up + Skuif op - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Beweeg die gekose item op.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Beweeg die gekose item op.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> - New... - Nuwe... + New... + Nuwe... - Rename... - Hernoem... + Rename... + Hernoem... - Delete - Vee uit + Delete + Vee uit - Icon - Ikoon + Icon + Ikoon - Command - Bevel + Command + Bevel - <Separator> - <Verdeler> + <Separator> + <Verdeler> - New toolbar - Nuwe nutsbalk + New toolbar + Nuwe nutsbalk - Toolbar name: - Nutsbalknaam: + Toolbar name: + Nutsbalknaam: - Duplicated name - Gedupliseerde naam + Duplicated name + Gedupliseerde naam - The toolbar name '%1' is already used - Die nutsbalknaam '%1' is reeds in gebruik + The toolbar name '%1' is already used + Die nutsbalknaam '%1' is reeds in gebruik - Rename toolbar - Hernoem nutsbalk + Rename toolbar + Hernoem nutsbalk - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Pas aan + Customize + Pas aan - &Help - &Help + &Help + &Help - &Close - &Maak toe + &Close + &Maak toe - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Buttons + Buttons + Buttons - Clear - Maak skoon + Clear + Maak skoon - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Vertoon eienskappe + Display properties + Vertoon eienskappe - Display - Vertoon + Display + Vertoon - Transparency: - Deursigtigheid: + Transparency: + Deursigtigheid: - Line width: - Lynwydte: + Line width: + Lynwydte: - Point size: - Puntgrootte: + Point size: + Puntgrootte: - Material - Materiaal + Material + Materiaal - ... - ... + ... + ... - Close - Maak toe + Close + Maak toe - Viewing mode - Besigtingsmodus + Viewing mode + Besigtingsmodus - Display mode: - Vertoningsmodus: + Display mode: + Vertoningsmodus: - Plot mode: - Plotmodus: + Plot mode: + Plotmodus: - - + + - Line transparency: - Lyndeursigtigheid: + Line transparency: + Lyndeursigtigheid: - Line color: - Lynkleur: + Line color: + Lynkleur: - Shape color: - Vormkleur: + Shape color: + Vormkleur: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Redakteur + Editor + Redakteur - Options - Opsies + Options + Opsies - Enable line numbers - Aktiveer lynnommers + Enable line numbers + Aktiveer lynnommers - Enable folding - Aktiveer vouing + Enable folding + Aktiveer vouing - Indentation - Verskuiwing + Indentation + Verskuiwing - Insert spaces - Voeg spasies in + Insert spaces + Voeg spasies in - Tab size: - Spronggrootte: + Tab size: + Spronggrootte: - Indent size: - Verskuiwinggrootte: + Indent size: + Verskuiwinggrootte: - Keep tabs - Behou spronge + Keep tabs + Behou spronge - Display Items - Wys items + Display Items + Wys items - Family: - Familie: + Family: + Familie: - Size: - Grootte: + Size: + Grootte: - Preview: - Voorskou: + Preview: + Voorskou: - - + + - - + + Gui::Dialog::DlgGeneral - General - Algemeen + General + Algemeen - Start up - Begin + Start up + Begin - Enable splash screen at start up - Aktiveer introduksiebeeld gedurende programaanvang + Enable splash screen at start up + Aktiveer introduksiebeeld gedurende programaanvang - Switch to tab of report window: - Slaan oor na die blad van die rapporteringsvenster: + Switch to tab of report window: + Slaan oor na die blad van die rapporteringsvenster: - Auto load module after start up: - Autolaai module na programaanvang: + Auto load module after start up: + Autolaai module na programaanvang: - Language - Taal + Language + Taal - Change language: - Verander taal: + Change language: + Verander taal: - Main window - Hoofvenster + Main window + Hoofvenster - Size of recent file list - Grootte van onlangse lêerlys + Size of recent file list + Grootte van onlangse lêerlys - Window style: - Vensterstyl: + Window style: + Vensterstyl: - Size of toolbar icons: - Size of toolbar icons: + Size of toolbar icons: + Size of toolbar icons: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Default (%1 x %1) + Default (%1 x %1) + Default (%1 x %1) - Small (%1 x %1) - Small (%1 x %1) + Small (%1 x %1) + Small (%1 x %1) - Large (%1 x %1) - Large (%1 x %1) + Large (%1 x %1) + Large (%1 x %1) - Extra large (%1 x %1) - Extra large (%1 x %1) + Extra large (%1 x %1) + Extra large (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Invoer + Input + Invoer - OK - Goed + OK + Goed - Cancel - Kanselleer + Cancel + Kanselleer - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Toneelinspekteur + Scene Inspector + Toneelinspekteur - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Voer makro uit + Execute macro + Voer makro uit - Macro name: - Makronaam: + Macro name: + Makronaam: - Macro destination: - Makrobestemming: + Macro destination: + Makrobestemming: - Execute - Voer uit + Execute + Voer uit - Close - Maak toe + Close + Maak toe - Create - Skep + Create + Skep - Delete - Vee uit + Delete + Vee uit - Edit - Wysig + Edit + Wysig - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makros + Macros + Makros - Macro file - Makro-lêer + Macro file + Makro-lêer - Enter a file name, please: - Gee 'n lêernaam, asseblief: + Enter a file name, please: + Gee 'n lêernaam, asseblief: - Existing file - Bestaande lêer + Existing file + Bestaande lêer - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Hierdie lêer bestaan reeds. - Delete macro - Verwyder makro + Delete macro + Verwyder makro - Do you really want to delete the macro '%1'? - Wil jy regtig die makro '%1' verwyder? + Do you really want to delete the macro '%1'? + Wil jy regtig die makro '%1' verwyder? - Cannot create file - Kan nie lêer skep nie + Cannot create file + Kan nie lêer skep nie - Creation of file '%1' failed. - Wat is hierdie? + Creation of file '%1' failed. + Wat is hierdie? - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Makro-opname + Macro recording + Makro-opname - Macro name: - Makronaam: + Macro name: + Makronaam: - Stop - Stop + Stop + Stop - Cancel - Kanselleer + Cancel + Kanselleer - Macro path: - Makropad: + Macro path: + Makropad: - ... - ... + ... + ... - Record - Neem op + Record + Neem op - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Makro-opnemer + Macro recorder + Makro-opnemer - Specify first a place to save. - Spesifiseer eers waar om te spaar. + Specify first a place to save. + Spesifiseer eers waar om te spaar. - Existing macro - Bestaande makro + Existing macro + Bestaande makro - The macro '%1' already exists. Do you want to overwrite? - Die makro '%1' bestaan reeds. Wil jy hom vervang? + The macro '%1' already exists. Do you want to overwrite? + Die makro '%1' bestaan reeds. Wil jy hom vervang? - The macro directory doesn't exist. Please, choose another one. - Die makrogids bestaan nie. Kies asseblief 'n ander een. + The macro directory doesn't exist. Please, choose another one. + Die makrogids bestaan nie. Kies asseblief 'n ander een. - Choose macro directory - Kies makrogids + Choose macro directory + Kies makrogids - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Materiaaleienskappe + Material properties + Materiaaleienskappe - &Close - &Maak toe + &Close + &Maak toe - Alt+C - Alt+C + Alt+C + Alt+C - Material - Materiaal + Material + Materiaal - Diffuse color: - Diffuse kleur: + Diffuse color: + Diffuse kleur: - Specular color: - Reflekterende kleur: + Specular color: + Reflekterende kleur: - Shininess: - Blinkheid: + Shininess: + Blinkheid: - % - % + % + % - Ambient color: - Skadukleur: + Ambient color: + Skadukleur: - - + + - Emissive color: - Uitstralende kleur: + Emissive color: + Uitstralende kleur: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Internethulp + On-line help + Internethulp - Help viewer - Hulpbeskouer + Help viewer + Hulpbeskouer - Location of start page - Ligging van tuisblad + Location of start page + Ligging van tuisblad - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML-lêers (*.html *.htm) + HTML files (*.html *.htm) + HTML-lêers (*.html *.htm) - Access denied - Toegang geweier + Access denied + Toegang geweier - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Toegang geweier vir '%1' -Spesifiseer asseblief 'n ander gids. + Toegang geweier vir '%1' +Spesifiseer asseblief 'n ander gids. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Parameter Wysiger + Parameter Editor + Parameter Wysiger - Save to disk - Stoor op skyf + Save to disk + Stoor op skyf - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Maak toe + &Close + &Maak toe - - + + Gui::Dialog::DlgParameterImp - Group - Groep + Group + Groep - Name - Naam + Name + Naam - Type - Soort + Type + Soort - Value - Waarde + Value + Waarde - User parameter - Gebruikersparameter + User parameter + Gebruikersparameter - Invalid input - Ongeldige inset + Invalid input + Ongeldige inset - Invalid key name '%1' - Ongeldige sleutelnaam '%1' + Invalid key name '%1' + Ongeldige sleutelnaam '%1' - System parameter - Stelselparameter + System parameter + Stelselparameter - - + + Gui::Dialog::DlgPreferences - Preferences - Voorkeure + Preferences + Voorkeure - &Help - &Help + &Help + &Help - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &Goedgekeur + &OK + &Goedgekeur - &Apply - &Pas toe + &Apply + &Pas toe - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Kanselleer + &Cancel + &Kanselleer - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Verkeerde parameter + Wrong parameter + Verkeerde parameter - - + + Gui::Dialog::DlgProjectInformation - Project information - Projekinformasie + Project information + Projekinformasie - Information - Inligting + Information + Inligting - &Name: - &Naam: + &Name: + &Naam: - Commen&t: - &Kommentaar: + Commen&t: + &Kommentaar: - Path: - Pad: + Path: + Pad: - &Last modified by: - &Laas verander deur: + &Last modified by: + &Laas verander deur: - Created &by: - &Geskep deur: + Created &by: + &Geskep deur: - Com&pany: - &Maatskappy: + Com&pany: + &Maatskappy: - Last &modification date: - &Laaste veranderingsdatum: + Last &modification date: + &Laaste veranderingsdatum: - Creation &date: - &Skeppingsdatum: + Creation &date: + &Skeppingsdatum: - &OK - &Goedgekeur + &OK + &Goedgekeur - &Cancel - &Kanselleer + &Cancel + &Kanselleer - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project utility + Project utility + Project utility - Extract project - Extract project + Extract project + Extract project - Source - Source + Source + Source - Project file (*.fcstd) - Project file (*.fcstd) + Project file (*.fcstd) + Project file (*.fcstd) - Destination - Destination + Destination + Destination - Extract - Extract + Extract + Extract - Create project - Create project + Create project + Create project - Document.xml - Document.xml + Document.xml + Document.xml - Create - Skep + Create + Skep - Load project file after creation - Load project file after creation + Load project file after creation + Load project file after creation - Empty source - Empty source + Empty source + Empty source - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Empty destination + Empty destination + Empty destination - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - Resultaatvenster + Output window + Resultaatvenster - Output - Resultaat + Output + Resultaat - Record log messages - Stoor opgawesboodskappe + Record log messages + Stoor opgawesboodskappe - Record warnings - Stoor waarskuwings + Record warnings + Stoor waarskuwings - Record error messages - Stoor foutboodskappe + Record error messages + Stoor foutboodskappe - Colors - Kleure + Colors + Kleure - Normal messages: - Algemene boodskappe: + Normal messages: + Algemene boodskappe: - Log messages: - Opgawesboodskappe: + Log messages: + Opgawesboodskappe: - Warnings: - Waarskuwings: + Warnings: + Waarskuwings: - Errors: - Foute: + Errors: + Foute: - - + + - Redirect internal Python errors to report view - Herlei interne Python foute na die rapportvenster + Redirect internal Python errors to report view + Herlei interne Python foute na die rapportvenster - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - Loop eksterne program + Running external program + Loop eksterne program - TextLabel - TeksEtiket + TextLabel + TeksEtiket - Advanced >> - Gevorderd >> + Advanced >> + Gevorderd >> - ... - ... + ... + ... - Accept changes - Aanvaar veranderinge + Accept changes + Aanvaar veranderinge - Discard changes - Laat vaar veranderinge + Discard changes + Laat vaar veranderinge - Abort program - Stop program + Abort program + Stop program - Help - Hulp + Help + Hulp - Select a file - Kies 'n lêer + Select a file + Kies 'n lêer - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D-aansig + 3D View + 3D-aansig - 3D View settings - 3D-aansig instellings + 3D View settings + 3D-aansig instellings - Show coordinate system in the corner - Wys koördinaatstelsel in die hoek + Show coordinate system in the corner + Wys koördinaatstelsel in die hoek - Show counter of frames per second - Wys rame per sekonde teller + Show counter of frames per second + Wys rame per sekonde teller - Enable animation - Aktiveer animasie + Enable animation + Aktiveer animasie - Enable anti-aliasing (slower) - Aktiveer kantversagting (stadiger) + Enable anti-aliasing (slower) + Aktiveer kantversagting (stadiger) - Eye to eye distance for stereo modes: - Oog-na-oog afstand vir stereomodusse: + Eye to eye distance for stereo modes: + Oog-na-oog afstand vir stereomodusse: - Camera type - Kamerasoort + Camera type + Kamerasoort - Orthographic rendering - Ortografiese weergawe + Orthographic rendering + Ortografiese weergawe - Perspective rendering - Perspektief weergawe + Perspective rendering + Perspektief weergawe - - + + - 3D Navigation - 3D Navigasie + 3D Navigation + 3D Navigasie - Mouse... - Muis... + Mouse... + Muis... - Intensity of backlight - Intensiteit van die agterlig + Intensity of backlight + Intensiteit van die agterlig - Enable backlight color - Aktiveer agterligkleur + Enable backlight color + Aktiveer agterligkleur - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigasie + %1 navigation + %1 navigasie - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Kleurmodel + Color model + Kleurmodel - &Gradient: - &Gradiënt: + &Gradient: + &Gradiënt: - red-yellow-green-cyan-blue - rooi-geel-groen-siaan-blou + red-yellow-green-cyan-blue + rooi-geel-groen-siaan-blou - blue-cyan-green-yellow-red - blou-siaan-groen-geel-rooi + blue-cyan-green-yellow-red + blou-siaan-groen-geel-rooi - white-black - wit-swart + white-black + wit-swart - black-white - swart-wit + black-white + swart-wit - Visibility - Sigbaarheid + Visibility + Sigbaarheid - Out g&rayed - &Uitvergrys + Out g&rayed + &Uitvergrys - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - &Uitonsigbaar + Out &invisible + &Uitonsigbaar - Alt+I - Alt+I + Alt+I + Alt+I - Style - Styl + Style + Styl - &Zero - &Nul + &Zero + &Nul - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Vloei + &Flow + &Vloei - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &Goedgekeur + &OK + &Goedgekeur - &Cancel - &Kanselleer + &Cancel + &Kanselleer - Parameter range - Parameteromvang + Parameter range + Parameteromvang - Mi&nimum: - &Minimum: + Mi&nimum: + &Minimum: - Ma&ximum: - &Maximum: + Ma&ximum: + &Maximum: - &Labels: - &Etikette: + &Labels: + &Etikette: - &Decimals: - &Desimale: + &Decimals: + &Desimale: - - + + - Color-gradient settings - Kleurgradiënt instellings + Color-gradient settings + Kleurgradiënt instellings - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Verkeerde parameter + Wrong parameter + Verkeerde parameter - The maximum value must be higher than the minimum value. - Die maksimum waarde moet hoër wees as die minimum waarde. + The maximum value must be higher than the minimum value. + Die maksimum waarde moet hoër wees as die minimum waarde. - - + + Gui::Dialog::DlgSettingsDocument - Document - Dokument + Document + Dokument - General - Algemeen + General + Algemeen - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Kompressievlak vir dokumentstoring + Kompressievlak vir dokumentstoring (0 = geen, 9 = hoogste, 3 = versuimwaarde) - Create new document at start up - Skep nuwe dokument tydens programaanvang + Create new document at start up + Skep nuwe dokument tydens programaanvang - Storage - Stoorplek + Storage + Stoorplek - Saving transactions (Auto-save) - Stoor transaksies (Autospaar) + Saving transactions (Auto-save) + Stoor transaksies (Autospaar) - Discard saved transaction after saving document - Vee gestoorde transaksie uit na dokument gestoor is + Discard saved transaction after saving document + Vee gestoorde transaksie uit na dokument gestoor is - Save thumbnail into project file when saving document - Stoor miniatuurvoorskou in projeklêer wanneer dokument gestoor word + Save thumbnail into project file when saving document + Stoor miniatuurvoorskou in projeklêer wanneer dokument gestoor word - Create up to backup files when resaving document - Skep rugsteunlêers wanneer dokument weer gestoor word + Create up to backup files when resaving document + Skep rugsteunlêers wanneer dokument weer gestoor word - Document objects - Dokumentvoorwerpe + Document objects + Dokumentvoorwerpe - Allow duplicate object labels in one document - Laat duplikaat voorwerpetikette toe in een dokument + Allow duplicate object labels in one document + Laat duplikaat voorwerpetikette toe in een dokument - Maximum Undo/Redo steps - Maximum Undo/Redo steps + Maximum Undo/Redo steps + Maximum Undo/Redo steps - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Teks + Text + Teks - Bookmark - Boekmerk + Bookmark + Boekmerk - Breakpoint - Breekpunt + Breakpoint + Breekpunt - Keyword - Sleutelwoord + Keyword + Sleutelwoord - Comment - Opmerking + Comment + Opmerking - Block comment - Blok kommentaar + Block comment + Blok kommentaar - Number - Syfer + Number + Syfer - String - String + String + String - Character - Karakter + Character + Karakter - Class name - Klasnaam + Class name + Klasnaam - Define name - Definieer naam + Define name + Definieer naam - Operator - Operateur + Operator + Operateur - Python output - Python resultaat + Python output + Python resultaat - Python error - Python fout + Python error + Python fout - Items - Items + Items + Items - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Beeldinstellings + Image settings + Beeldinstellings - Image properties - Beeldeienskappe + Image properties + Beeldeienskappe - Back&ground: - &Agtergrond: + Back&ground: + &Agtergrond: - Current - Huidige + Current + Huidige - White - Wit + White + Wit - Black - Swart + Black + Swart - Transparent - Deursigtig + Transparent + Deursigtig - Image dimensions - Beelddimensies + Image dimensions + Beelddimensies - Pixel - Beeldelement + Pixel + Beeldelement - &Width: - &Wydte: + &Width: + &Wydte: - Current screen - Huidige skerm + Current screen + Huidige skerm - Icon 32 x 32 - Ikoon 32 x 32 + Icon 32 x 32 + Ikoon 32 x 32 - Icon 64 x 64 - Ikoon 64 x 64 + Icon 64 x 64 + Ikoon 64 x 64 - Icon 128 x 128 - Ikoon 128 x 128 + Icon 128 x 128 + Ikoon 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA + 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA + 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standaardgroottes: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Hoogte: - Standard sizes: - Standaardgroottes: + Aspect ratio: + Vormverhouding: - &Height: - &Hoogte: + &Screen + &Skerm - Aspect ratio: - Vormverhouding: + Alt+S + Alt+S - &Screen - &Skerm + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Beeldkommentaar - Alt+1 - Alt+1 + Insert MIBA + Voeg MIBA in - Image comment - Beeldkommentaar + Insert comment + Voeg opmerking in - - Insert MIBA - Voeg MIBA in - - - Insert comment - Voeg opmerking in - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Makro + Macro + Makro - Macro recording settings - Makro-opname instellings + Macro recording settings + Makro-opname instellings - Logging Commands - Noteer bevele + Logging Commands + Noteer bevele - Show script commands in python console - Wys bevele in pythonvenster + Show script commands in python console + Wys bevele in pythonvenster - Log all commands issued by menus to file: - Noteer alle bevele vanuit kieslyse na lêer: + Log all commands issued by menus to file: + Noteer alle bevele vanuit kieslyse na lêer: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Grafiese Gebruikerskoppelvlak (GGKV) instruksies + Gui commands + Grafiese Gebruikerskoppelvlak (GGKV) instruksies - Recording GUI commands - Neem Grafiese Gebruikerskoppelvlak (GGKV) instruksies op + Recording GUI commands + Neem Grafiese Gebruikerskoppelvlak (GGKV) instruksies op - Record as comment - Neem op as opmerking + Record as comment + Neem op as opmerking - Macro path - Makropad + Macro path + Makropad - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Eenhede + Units + Eenhede - Units settings - Eenheidsinstellings + Units settings + Eenheidsinstellings - Standard (mm/kg/s/degree) - Standaard (mm/kg/s/graad) + Standard (mm/kg/s/degree) + Standaard (mm/kg/s/graad) - MKS (m/kg/s/degree) - MKS (m/kg/s/graad) + MKS (m/kg/s/degree) + MKS (m/kg/s/graad) - Magnitude - Grootte + Magnitude + Grootte - Unit - Eenheid + Unit + Eenheid - User system: - Gebruikerstelsel: + User system: + Gebruikerstelsel: - Imperial (in/lb) - Engelse eenhede (duim/pond) + Imperial (in/lb) + Engelse eenhede (duim/pond) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Kleure + Colors + Kleure - Selection - Seleksie + Selection + Seleksie - Enable selection highlighting - Aktiveer seleksieverligting + Enable selection highlighting + Aktiveer seleksieverligting - Enable preselection highlighting - Aktiveer seleksieverligting + Enable preselection highlighting + Aktiveer seleksieverligting - Background color - Agtergrond kleur + Background color + Agtergrond kleur - Middle color - Middelste kleur + Middle color + Middelste kleur - Color gradient - Kleurgradient + Color gradient + Kleurgradient - Simple color - Eenvoudige kleur + Simple color + Eenvoudige kleur - Default colors - Default colors + Default colors + Default colors - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Wenk van die dag + Tip of the day + Wenk van die dag - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Het jy geweet...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Het jy geweet...</font></font></b> - &Show tips at start up - &Wys wenke tydens programaanvang + &Show tips at start up + &Wys wenke tydens programaanvang - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Volgende Wenk + &Next Tip + &Volgende Wenk - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Maak toe + &Close + &Maak toe - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Aflaai het misluk: '%1' + Aflaai het misluk: '%1' - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - As jy meer wil weet oor FreeCAD moet jy gaan na '%1' of druk die Help item in die Hulpkieslys. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + As jy meer wil weet oor FreeCAD moet jy gaan na '%1' of druk die Help item in die Hulpkieslys. - - + + Gui::Dialog::DockablePlacement - Placement - Plasing + Placement + Plasing - - + + Gui::Dialog::DownloadDialog - Canceled. - Canceled. + Canceled. + Canceled. - - + + Download + + + + Cancel + Kanselleer + + + Close + Maak toe + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Aflaai het misluk: '%1'. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Add icon + Add icon + Add icon - - + + Gui::Dialog::InputVector - Input vector - Invoervektor + Input vector + Invoervektor - Vector - Vektor + Vector + Vektor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - Goed + OK + Goed - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Muisknoppies + Mouse buttons + Muisknoppies - Configuration - Opstelling + Configuration + Opstelling - Selection: - Seleksie: + Selection: + Seleksie: - Panning - Panorama + Panning + Panorama - Rotation: - Rotasie: + Rotation: + Rotasie: - Zooming: - Nabyheid: + Zooming: + Nabyheid: - - + + Gui::Dialog::ParameterGroup - Expand - Brei uit + Expand + Brei uit - Add sub-group - Voeg subgroep by + Add sub-group + Voeg subgroep by - Remove group - Verwyder groep + Remove group + Verwyder groep - Rename group - Hernoem groep + Rename group + Hernoem groep - Export parameter - Voer parameter uit + Export parameter + Voer parameter uit - Import parameter - Voer parameter in + Import parameter + Voer parameter in - Collapse - Stort ineen + Collapse + Stort ineen - Do really want to remove this parameter group? - Wil jy regtig hierdie parametergroep verwyder? + Do really want to remove this parameter group? + Wil jy regtig hierdie parametergroep verwyder? - Existing sub-group - Bestaande subgroep + Existing sub-group + Bestaande subgroep - The sub-group '%1' already exists. - Die subgroep '%1' bestaan reeds. + The sub-group '%1' already exists. + Die subgroep '%1' bestaan reeds. - Export parameter to file - Voer parameter uit na 'n lêer + Export parameter to file + Voer parameter uit na 'n lêer - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Voer parameter in van lêer + Import parameter from file + Voer parameter in van lêer - Import Error - Invoer Fout + Import Error + Invoer Fout - Reading from '%1' failed. - Lees van '%1' het misluk. + Reading from '%1' failed. + Lees van '%1' het misluk. - - + + Gui::Dialog::ParameterValue - Change value - Verander waarde + Change value + Verander waarde - Remove key - Verwyder sleutel + Remove key + Verwyder sleutel - Rename key - Hernoem sleutel + Rename key + Hernoem sleutel - New - Nuwe + New + Nuwe - New string item - Nuwe stringitem + New string item + Nuwe stringitem - New float item - Nuwe dryfitem + New float item + Nuwe dryfitem - New integer item - Nuwe heelgetalitem + New integer item + Nuwe heelgetalitem - New unsigned item - Nuwe onondertekende item + New unsigned item + Nuwe onondertekende item - New Boolean item - Nuwe Boole-item + New Boolean item + Nuwe Boole-item - Existing item - Bestaande item + Existing item + Bestaande item - The item '%1' already exists. - Die item '%1' bestaan reeds. + The item '%1' already exists. + Die item '%1' bestaan reeds. - - + + Gui::Dialog::Placement - Placement - Plasing + Placement + Plasing - OK - Goed + OK + Goed - Translation: - Omsetting: + Translation: + Omsetting: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotasie: + Rotation: + Rotasie: - Angle: - Hoek: + Angle: + Hoek: - Axis: - As: + Axis: + As: - Center: - Sentreer: + Center: + Sentreer: - Pitch: - Styghoek: + Pitch: + Styghoek: - Roll: - Kantelhoek: + Roll: + Kantelhoek: - Yaw: - Rigtinghoek: + Yaw: + Rigtinghoek: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Eulerhoeke + Euler angles + Eulerhoeke - Apply placement changes immediately - Pas plasingveranderings onmiddellik toe + Apply placement changes immediately + Pas plasingveranderings onmiddellik toe - Apply incremental changes to object placement - Pas inkrementele veranderinge toe met die plasing van die voorwerp + Apply incremental changes to object placement + Pas inkrementele veranderinge toe met die plasing van die voorwerp - Apply - Pas toe + Apply + Pas toe - Reset - Herstel + Reset + Herstel - Close - Maak toe + Close + Maak toe - - + + Gui::Dialog::PrintModel - Button - Button + Button + Button - Command - Bevel + Command + Bevel - - + + Gui::Dialog::SceneInspector - Dialog - Dialoog + Dialog + Dialoog - Close - Maak toe + Close + Maak toe - Refresh - Verfris + Refresh + Verfris - - + + Gui::Dialog::SceneModel - Inventor Tree - Uitvinderboom + Inventor Tree + Uitvinderboom - Nodes - Knooppunte + Nodes + Knooppunte - - + + Gui::Dialog::TextureMapping - Texture - Tekstuur + Texture + Tekstuur - Texture mapping - Tekstuurkartering + Texture mapping + Tekstuurkartering - Global - Globaal + Global + Globaal - Environment - Omgewing + Environment + Omgewing - Image files (%1) - Beeldlêers (%1) + Image files (%1) + Beeldlêers (%1) - No image - Geen beeld + No image + Geen beeld - The specified file is not a valid image file. - Die gespesifiseerde lêer is nie 'n geldige beeldlêer nie. + The specified file is not a valid image file. + Die gespesifiseerde lêer is nie 'n geldige beeldlêer nie. - No 3d view - Geen 3D aansig + No 3d view + Geen 3D aansig - No active 3d view found. - Geen aktiewe 3D aansig gevind nie. + No active 3d view found. + Geen aktiewe 3D aansig gevind nie. - - + + Gui::Dialog::Transform - Cancel - Kanselleer + Cancel + Kanselleer - Transform - Omskep + Transform + Omskep - - + + Gui::DlgTreeWidget - Dialog - Dialoog + Dialog + Dialoog - Items - Items + Items + Items - OK - Goed + OK + Goed - Cancel - Kanselleer + Cancel + Kanselleer - - + + - - + + Gui::DockWnd::CombiView - CombiView - SaamgesteldeVoorkoms + CombiView + SaamgesteldeVoorkoms - Project - Projek + Project + Projek - Tasks - Take + Tasks + Take - - + + Gui::DockWnd::HelpView - Previous - Vorige + Previous + Vorige - Next - Volgende + Next + Volgende - Home - Tuis + Home + Tuis - Open - Maak oop + Open + Maak oop - Open file - Maak lêer oop + Open file + Maak lêer oop - All HTML files (*.html *.htm) - Alle HTML-lêers (*.html *.htm) + All HTML files (*.html *.htm) + Alle HTML-lêers (*.html *.htm) - External browser - Eksterne leser + External browser + Eksterne leser - No external browser found. Specify in preferences, please - Geen eksterne leser gevind nie. Spesifiseer asseblief in die voorkeure + No external browser found. Specify in preferences, please + Geen eksterne leser gevind nie. Spesifiseer asseblief in die voorkeure - Starting of %1 failed - Begin van '%1' het misluk + Starting of %1 failed + Begin van '%1' het misluk - - + + Gui::DockWnd::PropertyDockView - Property View - Eiendomsaansig + Property View + Eiendomsaansig - - + + Gui::DockWnd::ReportOutput - Logging - Opgawe + Logging + Opgawe - Warning - Waarskuwing + Warning + Waarskuwing - Error - Fout + Error + Fout - Options - Opsies + Options + Opsies - Clear - Maak skoon + Clear + Maak skoon - Save As... - Stoor as... + Save As... + Stoor as... - Save Report Output - Stoor Rapportresultaat + Save Report Output + Stoor Rapportresultaat - Plain Text Files (*.txt *.log) - Eenvoudige Tekslêers (*.txt *.log) + Plain Text Files (*.txt *.log) + Eenvoudige Tekslêers (*.txt *.log) - Go to end - Gaan na die einde + Go to end + Gaan na die einde - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Herlei Python foute + Redirect Python errors + Herlei Python foute - - + + Gui::DockWnd::ReportView - Output - Resultaat + Output + Resultaat - Python console - Pythonkonsole + Python console + Pythonkonsole - - + + Gui::DockWnd::SelectionView - Property View - Eiendomsaansig + Property View + Eiendomsaansig - - + + Gui::DockWnd::TaskPanelView - Task View - Taakaansig + Task View + Taakaansig - - + + Gui::DockWnd::TextBrowser - Could not open file. - Kon nie lêer oopmaak nie. + Could not open file. + Kon nie lêer oopmaak nie. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Jy het probeer om die adres '%1' wat tans onbeskikbaar is, oop te maak. Maak asseblief seker dat die URL bestaan, en probeer die blad herlaai. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Jy het probeer om die adres '%1' wat tans onbeskikbaar is, oop te maak. Maak asseblief seker dat die URL bestaan, en probeer die blad herlaai. - Connecting to %1 - Verbind met '%1' + Connecting to %1 + Verbind met '%1' - Sending to %1 - Stuur na '%1' + Sending to %1 + Stuur na '%1' - Reading from %1 - Lees van '%1' + Reading from %1 + Lees van '%1' - Download failed: %1. - Aflaai het misluk: '%1'. + Download failed: %1. + Aflaai het misluk: '%1'. - Previous - Vorige + Previous + Vorige - Forward - Vorentoe + Forward + Vorentoe - Home - Tuis + Home + Tuis - Refresh - Verfris + Refresh + Verfris - Copy - Kopieer + Copy + Kopieer - Select all - Kies alles + Select all + Kies alles - No description for - Geen beskrywing vir + No description for + Geen beskrywing vir - - + + Gui::DocumentModel - Application - Toepassing + Application + Toepassing - Labels & Attributes - Etikette & Eienskappe + Labels & Attributes + Etikette & Eienskappe - - + + Gui::EditorView - Modified file - Gewysigde lêer + Modified file + Gewysigde lêer - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - '%1'. + '%1'. Dit is verander buite die bronwysiger. Wil jy dit herlaai? - Unsaved document - Ongestoorde dokument + Unsaved document + Ongestoorde dokument - The document has been modified. + The document has been modified. Do you want to save your changes? - Die dokument is verander. + Die dokument is verander. Wil jy jou veranderinge stoor? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD makro (*.FCMacro); Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD makro (*.FCMacro); Python (*.py) - Export PDF - Stoor na PDF + Export PDF + Stoor na PDF - PDF file (*.pdf) - PDF-lêer (*.pdf) + PDF file (*.pdf) + PDF-lêer (*.pdf) - untitled[*] - ongetiteld[*] + untitled[*] + ongetiteld[*] - - Editor - -Wysiger + - Editor + -Wysiger - %1 chars removed - %1 karakters verwyder + %1 chars removed + %1 karakters verwyder - %1 chars added - %1 karakters bygevoeg + %1 chars added + %1 karakters bygevoeg - Formatted - Geformateer + Formatted + Geformateer - - + + Gui::FileChooser - Select a file - Kies 'n lêer + Select a file + Kies 'n lêer - Select a directory - Kies 'n gids + Select a directory + Kies 'n gids - - + + Gui::FileDialog - Save as - Stoor as + Save as + Stoor as - Open - Maak oop + Open + Maak oop - - + + Gui::FileOptionsDialog - Extended - Uitgebrei + Extended + Uitgebrei - All files (*.*) - Alle lêers (*.*) + All files (*.*) + Alle lêers (*.*) - - + + Gui::Flag - Top left - Bo links + Top left + Bo links - Bottom left - Onder links + Bottom left + Onder links - Top right - Bo regs + Top right + Bo regs - Bottom right - Onder regs + Bottom right + Onder regs - Remove - Verwyder + Remove + Verwyder - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Druk CTRL en linker muisknoppie + Press CTRL and left mouse button + Druk CTRL en linker muisknoppie - Press middle mouse button - Druk middelste muisknoppie + Press middle mouse button + Druk middelste muisknoppie - Press left mouse button - Druk linker muisknoppie + Press left mouse button + Druk linker muisknoppie - Scroll middle mouse button - Blaai neer met middelste muisknoppie + Scroll middle mouse button + Blaai neer met middelste muisknoppie - - + + Gui::LocationDialog - Wrong direction - Verkeerde rigting + Wrong direction + Verkeerde rigting - Direction must not be the null vector - Rigting moet nie die nul vektor wees nie + Direction must not be the null vector + Rigting moet nie die nul vektor wees nie - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Gebruikergedefinieerd... + User defined... + Gebruikergedefinieerd... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makros + Macros + Makros - - + + Gui::MainWindow - Dimension - Dimensioneer + Dimension + Dimensioneer - Ready - Gereed + Ready + Gereed - Toggles this toolbar - Aktiveer/Inaktiveer die nutsbalk + Toggles this toolbar + Aktiveer/Inaktiveer die nutsbalk - Toggles this dockable window - Aktiveer/inaktiveer hierdie ingebedde venster + Toggles this dockable window + Aktiveer/inaktiveer hierdie ingebedde venster - Close All - Maak alles toe + Close All + Maak alles toe - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Aflaai het begin... + Aflaai het begin... - - + + Gui::ProgressBar - Remaining: %1 - Oorblywende: %1 + Remaining: %1 + Oorblywende: %1 - Aborting - Staak + Aborting + Staak - Do you really want to abort the operation? - Wil jy regtig die aksie staak? + Do you really want to abort the operation? + Wil jy regtig die aksie staak? - - + + Gui::ProgressDialog - Remaining: %1 - Oorblywende: %1 + Remaining: %1 + Oorblywende: %1 - Aborting - Staak + Aborting + Staak - Do you really want to abort the operation? - Wil jy regtig die aksie staak? + Do you really want to abort the operation? + Wil jy regtig die aksie staak? - - + + Gui::PropertyEditor::PropertyModel - Property - Eienskap + Property + Eienskap - Value - Waarde + Value + Waarde - - + + Gui::PropertyView - View - Voorkoms + View + Voorkoms - Data - Data + Data + Data - - + + Gui::PythonConsole - System exit - Verlaat stelsel + System exit + Verlaat stelsel - The application is still running. + The application is still running. Do you want to exit without saving your data? - Die program loop nog. + Die program loop nog. Wil jy afsluit sonder om jou data te stoor? - Python console - Pythonkonsole + Python console + Pythonkonsole - Unhandled PyCXX exception. - Ongehanteerde PyCXX uitsondering. + Unhandled PyCXX exception. + Ongehanteerde PyCXX uitsondering. - Unhandled FreeCAD exception. - Ongehanteerde FreeCAD uitsondering. + Unhandled FreeCAD exception. + Ongehanteerde FreeCAD uitsondering. - Unhandled unknown C++ exception. - Ongehanteerde onbekende C++ uitsondering. + Unhandled unknown C++ exception. + Ongehanteerde onbekende C++ uitsondering. - &Copy command - &Kopieer bevel + &Copy command + &Kopieer bevel - &Copy history - &Kopieer geskiedenis + &Copy history + &Kopieer geskiedenis - Save history as... - Stoor geskiedenis as... + Save history as... + Stoor geskiedenis as... - Insert file name... - Gee lêernaam... + Insert file name... + Gee lêernaam... - Save History - Stoor geskiedenis + Save History + Stoor geskiedenis - Macro Files (*.FCMacro *.py) - Makro-lêers (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Makro-lêers (*.FCMacro *.py) - Insert file name - Gee lêernaam + Insert file name + Gee lêernaam - All Files (*.*) - Alle lêers (*.*) + All Files (*.*) + Alle lêers (*.*) - Python Input Dialog - Python Invoer Dialoog + Python Input Dialog + Python Invoer Dialoog - Unhandled std C++ exception. - Ongehanteerde std C++ uitsondering. + Unhandled std C++ exception. + Ongehanteerde std C++ uitsondering. - Word wrap - Woordomvouding + Word wrap + Woordomvouding - &Copy - &Kopieer + &Copy + &Kopieer - &Paste - &Plak + &Paste + &Plak - Select All - Kies alles + Select All + Kies alles - - + + Clear console + + + + Gui::PythonEditor - Comment - Opmerking + Comment + Opmerking - Uncomment - Verwyder opmerking + Uncomment + Verwyder opmerking - - + + Gui::PythonInputField - OK - Goed + OK + Goed - Clear - Maak skoon + Clear + Maak skoon - - + + Gui::RecentFilesAction - Open file %1 - Maak lêer '%1' oop + Open file %1 + Maak lêer '%1' oop - File not found - Lêer nie gevind nie + File not found + Lêer nie gevind nie - The file '%1' cannot be opened. - Die lêer '%1' kan nie oopgemaak word nie. + The file '%1' cannot be opened. + Die lêer '%1' kan nie oopgemaak word nie. - - + + Gui::SelectModule - Select module - Kies module + Select module + Kies module - Open %1 as - Maak '%1' oop as + Open %1 as + Maak '%1' oop as - Select - Kies + Select + Kies - - + + Gui::StdCmdDescription - Help - Hulp + Help + Hulp - Des&cription - &Beskrywing + Des&cription + &Beskrywing - Long description of commands - Lang beskrywing van bevele + Long description of commands + Lang beskrywing van bevele - - + + Gui::StdCmdDownloadOnlineHelp - Help - Hulp + Help + Hulp - Download online help - Laai internethulp af + Download online help + Laai internethulp af - Download %1's online help - Laai %1 se internethulp af + Download %1's online help + Laai %1 se internethulp af - Non-existing directory - Gids bestaan nie + Non-existing directory + Gids bestaan nie - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Die gids '%1' bestaan nie. -Wil jy 'n bestaande gids spesifiseer? + Die gids '%1' bestaan nie. +Wil jy 'n bestaande gids spesifiseer? - Missing permission - Toestemming ontbreek + Missing permission + Toestemming ontbreek - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Jy het nie toestemming om te skryf na '%1' nie -Wil jy 'n ander gids aangee? + Jy het nie toestemming om te skryf na '%1' nie +Wil jy 'n ander gids aangee? - Stop downloading - Stop aflaai + Stop downloading + Stop aflaai - - + + Gui::StdCmdPythonHelp - Tools - Gereedskap + Tools + Gereedskap - Python Modules - Pythonmodules + Python Modules + Pythonmodules - Opens a browser to show the Python modules - Maak 'n leser oop om die Pythonmodules te wys + Opens a browser to show the Python modules + Maak 'n leser oop om die Pythonmodules te wys - - + + Gui::TaskBoxAngle - Angle - Hoek + Angle + Hoek - - + + Gui::TaskBoxPosition - Position - Posisie + Position + Posisie - - + + Gui::TaskView::TaskAppearance - Display mode: - Vertoningsmodus: + Display mode: + Vertoningsmodus: - Plot mode: - Plotmodus: + Plot mode: + Plotmodus: - Point size: - Puntgrootte: + Point size: + Puntgrootte: - Line width: - Lynwydte: + Line width: + Lynwydte: - Transparency: - Deursigtigheid: + Transparency: + Deursigtigheid: - Appearance - Voorkoms + Appearance + Voorkoms - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Wysig + Edit + Wysig - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Voorkoms + Appearance + Voorkoms - ... - ... + ... + ... - edit selection - Wysig seleksie + edit selection + Wysig seleksie - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Druk linker muisknoppie + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Engels + English + Engels - - + + Gui::TreeDockWidget - Tree view - Boomvoorkoms + Tree view + Boomvoorkoms - - + + Gui::TreeWidget - Create group... - Skep groep ... + Create group... + Skep groep ... - Create a group - Skep 'n groep + Create a group + Skep 'n groep - Group - Groep + Group + Groep - Rename - Hernoem + Rename + Hernoem - Rename object - Hernoem voorwerp + Rename object + Hernoem voorwerp - Labels & Attributes - Etikette & Eienskappe + Labels & Attributes + Etikette & Eienskappe - Application - Toepassing + Application + Toepassing - Finish editing - Klaar gewysig + Finish editing + Klaar gewysig - Finish editing object - Voltooi voorwerpwysiging + Finish editing object + Voltooi voorwerpwysiging - Activate document - Aktiveer dokument + Activate document + Aktiveer dokument - Activate document %1 - Aktiveer dokument %1 + Activate document %1 + Aktiveer dokument %1 - - + + Gui::View3DInventor - Export PDF - Stoor na PDF + Export PDF + Stoor na PDF - PDF file (*.pdf) - PDF-lêer (*.pdf) + PDF file (*.pdf) + PDF-lêer (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Kies die '%1' werkbank + Select the '%1' workbench + Kies die '%1' werkbank - - + + Position - Form - Vorm + Form + Vorm - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Gidslynvashegting + Grid Snap in + Gidslynvashegting - - + + QDockWidget - Tree view - Boomvoorkoms + Tree view + Boomvoorkoms - Property view - Eiendomsaansig + Property view + Eiendomsaansig - Selection view - Seleksieaansig + Selection view + Seleksieaansig - Report view - Rapportaansig + Report view + Rapportaansig - Task View - Taakaansig + Task View + Taakaansig - Combo View - Saamgestelde aansig + Combo View + Saamgestelde aansig - Toolbox - Gereedskapskis + Toolbox + Gereedskapskis - Python console - Pythonkonsole + Python console + Pythonkonsole - Display properties - Vertoon eienskappe + Display properties + Vertoon eienskappe - - + + QObject - General - Algemeen + General + Algemeen - Display - Vertoon + Display + Vertoon - Unknown filetype - Onbekende lêersoort + Unknown filetype + Onbekende lêersoort - Cannot open unknown filetype: %1 - Kan nie onbekende lêersoort oop maak nie: '%1' + Cannot open unknown filetype: %1 + Kan nie onbekende lêersoort oop maak nie: '%1' - Cannot save to unknown filetype: %1 - Kan nie stoor na 'n onbekende lêersoort nie: '%1' + Cannot save to unknown filetype: %1 + Kan nie stoor na 'n onbekende lêersoort nie: '%1' - Workbench failure - Werkbankmislukking + Workbench failure + Werkbankmislukking - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Kan nie Qt-assistent (%1) lanseer nie + Unable to launch Qt Assistant (%1) + Kan nie Qt-assistent (%1) lanseer nie - Exception - Uitsondering + Exception + Uitsondering - Open document - Maak dokument oop + Open document + Maak dokument oop - Import file - Voer lêer in + Import file + Voer lêer in - Export file - Voer lêer uit + Export file + Voer lêer uit - Printing... - Druk tans... + Printing... + Druk tans... - Cannot load workbench - Kan nie werkbank laai nie + Cannot load workbench + Kan nie werkbank laai nie - A general error occurred while loading the workbench - 'n Algemene fout het voorgekom tydens die laai van die werkbank + A general error occurred while loading the workbench + 'n Algemene fout het voorgekom tydens die laai van die werkbank - File not found - Lêer nie gevind nie + File not found + Lêer nie gevind nie - Cannot open file %1 - Kan nie lêer '%1' oop maak nie + Cannot open file %1 + Kan nie lêer '%1' oop maak nie - Save views... - Stoor aansigte... + Save views... + Stoor aansigte... - Load views... - Laai aansigte... + Load views... + Laai aansigte... - Freeze view - Vries aansig + Freeze view + Vries aansig - Clear views - Maak aansigte skoon + Clear views + Maak aansigte skoon - Restore view &%1 - Herstel aansig &%1 + Restore view &%1 + Herstel aansig &%1 - Save frozen views - Stoor gevriesde aansigte + Save frozen views + Stoor gevriesde aansigte - Frozen views (*.cam) - Bevrore aansigte (*.cam) + Frozen views (*.cam) + Bevrore aansigte (*.cam) - Restore views - Herstel aansigte + Restore views + Herstel aansigte - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Die invoer van die herstelde aansigte verwyder die reeds gestoorde aansigte. Wil jy voortgaan? + Die invoer van die herstelde aansigte verwyder die reeds gestoorde aansigte. Wil jy voortgaan? - Restore frozen views - Herstel bevrore aansigte + Restore frozen views + Herstel bevrore aansigte - Cannot open file '%1'. - Kan nie lêer '%1' oop maak nie. + Cannot open file '%1'. + Kan nie lêer '%1' oop maak nie. - Docked - Vasgekoppel + Docked + Vasgekoppel - Undocked - Losgekoppel + Undocked + Losgekoppel - Fullscreen - Volskerm + Fullscreen + Volskerm - files - lêers + files + lêers - Save picture - Stoor beeld + Save picture + Stoor beeld - New sub-group - Nuwe subgroep + New sub-group + Nuwe subgroep - Enter the name: - Gee die naam: + Enter the name: + Gee die naam: - New text item - Nuwe teksitem + New text item + Nuwe teksitem - Enter your text: - Gee jou teks: + Enter your text: + Gee jou teks: - New integer item - Nuwe heelgetalitem + New integer item + Nuwe heelgetalitem - Enter your number: - Gee jou nommer: + Enter your number: + Gee jou nommer: - New unsigned item - Nuwe onondertekende item + New unsigned item + Nuwe onondertekende item - New float item - Nuwe dryfitem + New float item + Nuwe dryfitem - New Boolean item - Nuwe Boole-item + New Boolean item + Nuwe Boole-item - Choose an item: - Kies 'n item: + Choose an item: + Kies 'n item: - Rename group - Hernoem groep + Rename group + Hernoem groep - The group '%1' cannot be renamed. - Die groep '%1' kan nie hernoem word nie. + The group '%1' cannot be renamed. + Die groep '%1' kan nie hernoem word nie. - Existing group - Bestaande groep + Existing group + Bestaande groep - The group '%1' already exists. - Die groep '%1' bestaan reeds. + The group '%1' already exists. + Die groep '%1' bestaan reeds. - Change value - Verander waarde + Change value + Verander waarde - Save document under new filename... - Stoor dokument onder 'n nuwe lêernaam ... + Save document under new filename... + Stoor dokument onder 'n nuwe lêernaam ... - Saving aborted - Storing gestaak + Saving aborted + Storing gestaak - Unsaved document - Ongestoorde dokument + Unsaved document + Ongestoorde dokument - Save document before close? - Stoor dokument voor jy dit toe maak? + Save document before close? + Stoor dokument voor jy dit toe maak? - Save Macro - Stoor Makro + Save Macro + Stoor Makro - Finish - Voltooi + Finish + Voltooi - Clear - Maak skoon + Clear + Maak skoon - Cancel - Kanselleer + Cancel + Kanselleer - Inner - Binneste + Inner + Binneste - Outer - Buitenste + Outer + Buitenste - No Browser - Geen Leser + No Browser + Geen Leser - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Kan nie jou webleser oop maak nie. -Maak asb. 'n leservenster oop en tik in http://localhost:%1 + Kan nie jou webleser oop maak nie. +Maak asb. 'n leservenster oop en tik in http://localhost:%1 - No Server - Geen Bediener + No Server + Geen Bediener - Unable to start the server to port %1: %2. - Nie in staat om die bediener te begin na poort %1:%2 nie. + Unable to start the server to port %1: %2. + Nie in staat om die bediener te begin na poort %1:%2 nie. - Unable to open your system browser. - Nie in staat om stelselleser oop te maak nie. + Unable to open your system browser. + Nie in staat om stelselleser oop te maak nie. - Options... - Opsies... + Options... + Opsies... - Out of memory - Onvoldoende geheue + Out of memory + Onvoldoende geheue - Not enough memory available to display the data. - Nie genoeg geheue is beskikbaar om die data te vertoon nie. + Not enough memory available to display the data. + Nie genoeg geheue is beskikbaar om die data te vertoon nie. - Cannot find file %1 - Kan nie lêer '%1' vind nie + Cannot find file %1 + Kan nie lêer '%1' vind nie - Cannot find file %1 neither in %2 nor in %3 - Kan nie lêer '%1' vind nie, nie in '%2' of '%3' nie + Cannot find file %1 neither in %2 nor in %3 + Kan nie lêer '%1' vind nie, nie in '%2' of '%3' nie - Save %1 Document - Stoor '%1' Dokument + Save %1 Document + Stoor '%1' Dokument - %1 document (*.FCStd) - %1-dokument (*.FCStd) + %1 document (*.FCStd) + %1-dokument (*.FCStd) - Save As - Stoor as + Save As + Stoor as - %1 already exists. + %1 already exists. Do you want to replace it? - %1 bestaan reeds. Wil jy dit vervang? + %1 bestaan reeds. Wil jy dit vervang? - Document not closable - Dokument nie toemaakbaar nie + Document not closable + Dokument nie toemaakbaar nie - The document is not closable for the moment. - Die dokument is huidiglik nie toemaakbaar nie. + The document is not closable for the moment. + Die dokument is huidiglik nie toemaakbaar nie. - No OpenGL - Geen OpenGL + No OpenGL + Geen OpenGL - This system does not support OpenGL - Hierdie stelsel ondersteun nie OpenGL nie + This system does not support OpenGL + Hierdie stelsel ondersteun nie OpenGL nie - Help - Hulp + Help + Hulp - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Kan nie dokumentasie laai nie. + Kan nie dokumentasie laai nie. Om dit te laai word Qt 4.4 of hoër benodig. - %1 Help - %1 Hulp + %1 Help + %1 Hulp - Exporting PDF... - Voer PDF uit... + Exporting PDF... + Voer PDF uit... - Wrong selection - Verkeerde keuse + Wrong selection + Verkeerde keuse - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Slegs een voorwerp gekies. Kies asseblief twee. + Slegs een voorwerp gekies. Kies asseblief twee. Wees bewus dat die plek waar jy kliek belangrik is. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Kies asseblief twee voorwerpe. + Kies asseblief twee voorwerpe. Wees bewus dat die punt waar jy kliek belangrik is. - New boolean item - Nuwe Boole-item + New boolean item + Nuwe Boole-item - Navigation styles - Navigasiestyle + Navigation styles + Navigasiestyle - %1 navigation - %1 navigasie + %1 navigation + %1 navigasie - Move annotation - Skuif annotasie + Move annotation + Skuif annotasie - Transform - Omskep + Transform + Omskep - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + Standaardaansig + + + Box selection + + + + StdCmdAbout - Help - Hulp + Help + Hulp - &About %1 - &Aangaande %1 + &About %1 + &Aangaande %1 - About %1 - Aangaande %1 + About %1 + Aangaande %1 - - + + StdCmdAboutQt - Help - Hulp + Help + Hulp - About &Qt - &Aangaande Qt + About &Qt + &Aangaande Qt - About Qt - Aangaande Qt + About Qt + Aangaande Qt - - + + StdCmdActivateNextWindow - Window - Venster + Window + Venster - Ne&xt - &Volgende + Ne&xt + &Volgende - Activate next window - Aktiveer volgende venster + Activate next window + Aktiveer volgende venster - - + + StdCmdActivatePrevWindow - Window - Venster + Window + Venster - Pre&vious - &Vorige + Pre&vious + &Vorige - Activate previous window - Aktiveer vorige venster + Activate previous window + Aktiveer vorige venster - - + + + StdCmdAlignment + + Edit + Wysig + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Venster + Window + Venster - Arrange &Icons - &Organiseer Ikone + Arrange &Icons + &Organiseer Ikone - Arrange Icons - Organiseer Ikone + Arrange Icons + Organiseer Ikone - - + + StdCmdAxisCross - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Venster + Window + Venster - &Cascade - &Kaskade + &Cascade + &Kaskade - Tile pragmatic - Teël pragmaties + Tile pragmatic + Teël pragmaties - - + + StdCmdCloseActiveWindow - Window - Venster + Window + Venster - Cl&ose - &Maak toe + Cl&ose + &Maak toe - Close active window - Maak aktiewe venster toe + Close active window + Maak aktiewe venster toe - - + + StdCmdCloseAllWindows - Window - Venster + Window + Venster - Close Al&l - &Maak alles toe + Close Al&l + &Maak alles toe - Close all windows - Maak alle vensters toe + Close all windows + Maak alle vensters toe - - + + StdCmdCommandLine - Tools - Gereedskap + Tools + Gereedskap - Start command &line... - &Begin bevelmodus... + Start command &line... + &Begin bevelmodus... - Opens the command line in the console - Maak bevelmodus oop in die konsool + Opens the command line in the console + Maak bevelmodus oop in die konsool - - + + StdCmdCopy - Edit - Wysig + Edit + Wysig - C&opy - &Kopieer + C&opy + &Kopieer - Copy operation - Kopieer verwerking + Copy operation + Kopieer verwerking - - + + StdCmdCut - Edit - Wysig + Edit + Wysig - &Cut - &Knip + &Cut + &Knip - Cut out - Knip uit + Cut out + Knip uit - - + + StdCmdDDuplicateSelection - Edit - Wysig + Edit + Wysig - Duplicate selection - Duplikaatseleksie + Duplicate selection + Duplikaatseleksie - Put duplicates of the selected objects to the active document - Plaas duplikate van die geselekteerde voorwerpe in die aktiewe dokument + Put duplicates of the selected objects to the active document + Plaas duplikate van die geselekteerde voorwerpe in die aktiewe dokument - - + + StdCmdDelete - Edit - Wysig + Edit + Wysig - &Delete - &Verwyder + &Delete + &Verwyder - Deletes the selected objects - Verwyder die geselekteerde voorwerpe + Deletes the selected objects + Verwyder die geselekteerde voorwerpe - - + + StdCmdDemoMode - Standard-View - Standaardaansig + Standard-View + Standaardaansig - View turntable... - Wys draaitafel... + View turntable... + Wys draaitafel... - View turntable - Wys draaitafel + View turntable + Wys draaitafel - - + + StdCmdDlgCustomize - Tools - Gereedskap + Tools + Gereedskap - Cu&stomize... - &Aanpassing... + Cu&stomize... + &Aanpassing... - Customize toolbars and command bars - Verander nutsbalke and bevelbalke + Customize toolbars and command bars + Verander nutsbalke and bevelbalke - - + + StdCmdDlgMacroExecute - Macros ... - Makros... + Macros ... + Makros... - Opens a dialog to let you execute a recorded macro - Maak 'n dialoog oop om 'n opgeneemde makro uit te voer + Opens a dialog to let you execute a recorded macro + Maak 'n dialoog oop om 'n opgeneemde makro uit te voer - Macro - Makro + Macro + Makro - - + + StdCmdDlgMacroExecuteDirect - Macro - Makro + Macro + Makro - Execute macro - Voer makro uit + Execute macro + Voer makro uit - Execute the macro in the editor - Voer die makro in die wysiger uit + Execute the macro in the editor + Voer die makro in die wysiger uit - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Makro-opname... + &Macro recording ... + &Makro-opname... - Opens a dialog to record a macro - Maak 'n dialoog oop om 'n makro op te neem + Opens a dialog to record a macro + Maak 'n dialoog oop om 'n makro op te neem - Macro - Makro + Macro + Makro - - + + StdCmdDlgParameter - Tools - Gereedskap + Tools + Gereedskap - E&dit parameters ... - &Wysig parameters... + E&dit parameters ... + &Wysig parameters... - Opens a Dialog to edit the parameters - Maak 'n dialoog oop om die parameters te wysig + Opens a Dialog to edit the parameters + Maak 'n dialoog oop om die parameters te wysig - - + + StdCmdDlgPreferences - Tools - Gereedskap + Tools + Gereedskap - &Preferences ... - &Voorkeure... + &Preferences ... + &Voorkeure... - Opens a Dialog to edit the preferences - Maak 'n dialoog oop om die voorkeure te wysig + Opens a Dialog to edit the preferences + Maak 'n dialoog oop om die voorkeure te wysig - - + + StdCmdDockViewMenu - View - Voorkoms + View + Voorkoms - Vie&ws - &Aansigte + Vie&ws + &Aansigte - Toggles this window - Aktiveer/inaktiveer hierdie venster + Toggles this window + Aktiveer/inaktiveer hierdie venster - - + + StdCmdDrawStyle - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Wysig + + + Duplicate selection + Duplikaatseleksie + + + Put duplicates of the selected objects to the active document + Plaas duplikate van die geselekteerde voorwerpe in die aktiewe dokument + + + + StdCmdEdit + + Edit + Wysig + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Lêer + File + Lêer - &Export... - &Voer uit... + &Export... + &Voer uit... - Export an object in the active document - Voer 'n voorwerp in die aktiewe dokument uit + Export an object in the active document + Voer 'n voorwerp in die aktiewe dokument uit - Supported formats - Ondersteunde formate + Supported formats + Ondersteunde formate - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Gereedskap + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Lêer + File + Lêer - &Recompute - &Herbereken + &Recompute + &Herbereken - Recompute feature or document - Herbereken eienskap of dokument + Recompute feature or document + Herbereken eienskap of dokument - - + + StdCmdFreeCADWebsite - Help - Hulp + Help + Hulp - FreeCAD Website - FreeCAD Webwerf + FreeCAD Website + FreeCAD Webwerf - The FreeCAD website - Die FreeCAD webwerf + The FreeCAD website + Die FreeCAD webwerf - - + + StdCmdFreezeViews - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Freeze display - Vries vertoning + Freeze display + Vries vertoning - Freezes the current view position - Vries die huidige aansigposisie + Freezes the current view position + Vries die huidige aansigposisie - - + + StdCmdHideObjects - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Hide all objects - Verskuil al die voorwerpe + Hide all objects + Verskuil al die voorwerpe - Hide all objects in the document - Verskuil al die voorwerpe in die dokument + Hide all objects in the document + Verskuil al die voorwerpe in die dokument - - + + StdCmdHideSelection - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Hide selection - Verskuil seleksie + Hide selection + Verskuil seleksie - Hide all selected objects - Verskuil al die gekose voorwerpe + Hide all selected objects + Verskuil al die gekose voorwerpe - - + + StdCmdImport - File - Lêer + File + Lêer - &Import... - &Voer in... + &Import... + &Voer in... - Import a file in the active document - Voer 'n lêer in in die aktiewe dokument + Import a file in the active document + Voer 'n lêer in in die aktiewe dokument - Supported formats - Ondersteunde formate + Supported formats + Ondersteunde formate - All files (*.*) - Alle lêers (*.*) + All files (*.*) + Alle lêers (*.*) - - + + StdCmdMacroStartDebug - Macro - Makro + Macro + Makro - Debug macro - Stel foute in die makro reg + Debug macro + Stel foute in die makro reg - Start debugging of macro - Begin om makrofoute te soek + Start debugging of macro + Begin om makrofoute te soek - - + + StdCmdMacroStepOver - Macro - Makro + Macro + Makro - Step over - Spring oor + Step over + Spring oor - - + + StdCmdMacroStopDebug - Macro - Makro + Macro + Makro - Stop debugging - Stop foutsoeking + Stop debugging + Stop foutsoeking - Stop debugging of macro - Stop makrofoutsoeking + Stop debugging of macro + Stop makrofoutsoeking - - + + StdCmdMacroStopRecord - Macro - Makro + Macro + Makro - S&top macro recording - &Stop makro opname + S&top macro recording + &Stop makro opname - Stop the macro recording session - Stop die makro opnamesessie + Stop the macro recording session + Stop die makro opnamesessie - - + + StdCmdMeasureDistance - View - Voorkoms + View + Voorkoms - Measure distance - Meet afstand + Measure distance + Meet afstand - - + + StdCmdMeasurementSimple - Tools - Gereedskap + Tools + Gereedskap - Mesure distance - Meet afstand + Mesure distance + Meet afstand - Measures distance between two selected objects - Meet afstand tussen twee geselekteerde voorwerpe + Measures distance between two selected objects + Meet afstand tussen twee geselekteerde voorwerpe - - + + Measure distance + Meet afstand + + + StdCmdMergeProjects - File - Lêer + File + Lêer - Merge project... - Verenig projek ... + Merge project... + Verenig projek ... - Merge project - Verenig projek + Merge project + Verenig projek - %1 document (*.fcstd) - %1 dokument (*.fcstd) + %1 document (*.fcstd) + %1 dokument (*.fcstd) - Cannot merge project with itself. - Kan nie die projek met homself verenig nie. + Cannot merge project with itself. + Kan nie die projek met homself verenig nie. - - + + StdCmdNew - File - Lêer + File + Lêer - &New - &Nuwe + &New + &Nuwe - Create a new empty document - Skep 'n nuwe leë dokument + Create a new empty document + Skep 'n nuwe leë dokument - - + + StdCmdOnlineHelp - Help - Hulp + Help + Hulp - Show help to the application - Wys hulp vir die toepassing + Show help to the application + Wys hulp vir die toepassing - - + + StdCmdOnlineHelpPython - Help - Hulp + Help + Hulp - Python Manuals - Python Handleidings + Python Manuals + Python Handleidings - Show the Python documentation - Wys die Python dokumentasie + Show the Python documentation + Wys die Python dokumentasie - - + + StdCmdOnlineHelpWebsite - Help - Hulp + Help + Hulp - Help Website - Hulpwebwerf + Help Website + Hulpwebwerf - The website where the help is maintained - Die webwerf waar die hulp in stand gehou word + The website where the help is maintained + Die webwerf waar die hulp in stand gehou word - - + + StdCmdOpen - File - Lêer + File + Lêer - &Open... - &Maak oop... + &Open... + &Maak oop... - Open a document or import files - Maak 'n dokument oop of voer lêers in + Open a document or import files + Maak 'n dokument oop of voer lêers in - Supported formats - Ondersteunde formate + Supported formats + Ondersteunde formate - All files (*.*) - Alle lêers (*.*) + All files (*.*) + Alle lêers (*.*) - - + + StdCmdPaste - Edit - Wysig + Edit + Wysig - &Paste - &Plak + &Paste + &Plak - Paste operation - Plak operasie + Paste operation + Plak operasie - - + + StdCmdPlacement - Edit - Wysig + Edit + Wysig - Placement... - Plasing... + Placement... + Plasing... - Place the selected objects - Plaseer die geselekteerde objekte + Place the selected objects + Plaseer die geselekteerde objekte - - + + StdCmdPrint - File - Lêer + File + Lêer - &Print... - &Druk... + &Print... + &Druk... - Print the document - Druk die dokument + Print the document + Druk die dokument - - + + StdCmdPrintPdf - File - Lêer + File + Lêer - &Export PDF... - &Stoor na PDF... + &Export PDF... + &Stoor na PDF... - Export the document as PDF - Voer die dokument uit na PDF + Export the document as PDF + Voer die dokument uit na PDF - - + + StdCmdPrintPreview - File - Lêer + File + Lêer - &Print preview... - &Print preview... + &Print preview... + &Print preview... - Print the document - Druk die dokument + Print the document + Druk die dokument - Print preview - Print preview + Print preview + Print preview - - + + StdCmdProjectInfo - File - Lêer + File + Lêer - Project i&nformation... - &Projekinligting... + Project i&nformation... + &Projekinligting... - Show details of the currently active project - Wys besonderhede van die aktiewe projek + Show details of the currently active project + Wys besonderhede van die aktiewe projek - - + + StdCmdProjectUtil - Tools - Gereedskap + Tools + Gereedskap - Project utility... - Project utility... + Project utility... + Project utility... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - Hulp + Help + Hulp - Python Website - Python Webwerf + Python Website + Python Webwerf - The official Python website - Die amptelike Python webwerf + The official Python website + Die amptelike Python webwerf - - + + StdCmdQuit - File - Lêer + File + Lêer - E&xit - &Verlaat + E&xit + &Verlaat - Quits the application - Verlaat die toepassing + Quits the application + Verlaat die toepassing - - + + StdCmdRandomColor - File - Lêer + File + Lêer - Random color - Willekeurige kleur + Random color + Willekeurige kleur - - + + StdCmdRecentFiles - File - Lêer + File + Lêer - Recent files - Onlangse lêers + Recent files + Onlangse lêers - Recent file list - Onlangse lêerlys + Recent file list + Onlangse lêerlys - - + + StdCmdRedo - Edit - Wysig + Edit + Wysig - &Redo - &Herdoen + &Redo + &Herdoen - Redoes a previously undone action - Herdoen 'n voorheen ongedane aksie + Redoes a previously undone action + Herdoen 'n voorheen ongedane aksie - - + + StdCmdRefresh - Edit - Wysig + Edit + Wysig - &Refresh - &Verfris + &Refresh + &Verfris - Recomputes the current active document - Herbereken die huidige aktiewe dokument + Recomputes the current active document + Herbereken die huidige aktiewe dokument - - + + StdCmdSave - File - Lêer + File + Lêer - &Save - &Stoor + &Save + &Stoor - Save the active document - Stoor die aktiewe dokument + Save the active document + Stoor die aktiewe dokument - - + + StdCmdSaveAs - File - Lêer + File + Lêer - Save &As... - &Stoor as... + Save &As... + &Stoor as... - Save the active document under a new file name - Stoor die aktiewe dokument onder 'n nuwe lêernaam + Save the active document under a new file name + Stoor die aktiewe dokument onder 'n nuwe lêernaam - - + + StdCmdSceneInspector - Tools - Gereedskap + Tools + Gereedskap - Scene inspector... - Toneelinspekteur... + Scene inspector... + Toneelinspekteur... - Scene inspector - Toneelinspekteur + Scene inspector + Toneelinspekteur - - + + StdCmdSelectAll - Edit - Wysig + Edit + Wysig - Select &All - &Kies alles + Select &All + &Kies alles - Select all - Kies alles + Select all + Kies alles - - + + StdCmdSetAppearance - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Appearance... - Voorkoms ... + Appearance... + Voorkoms ... - Sets the display properties of the selected object - Stel die vertooneienskappe van die gekose objek + Sets the display properties of the selected object + Stel die vertooneienskappe van die gekose objek - - + + StdCmdShowObjects - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Show all objects - Wys alle voorwerpe + Show all objects + Wys alle voorwerpe - Show all objects in the document - Wys alle voorwerpe in die dokument + Show all objects in the document + Wys alle voorwerpe in die dokument - - + + StdCmdShowSelection - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Show selection - Wys seleksie + Show selection + Wys seleksie - Show all selected objects - Wys alle gekose voorwerpe + Show all selected objects + Wys alle gekose voorwerpe - - + + StdCmdStatusBar - View - Voorkoms + View + Voorkoms - Status bar - Statusbalk + Status bar + Statusbalk - Toggles the status bar - Aktiveer/inaktiveer die statusbalk + Toggles the status bar + Aktiveer/inaktiveer die statusbalk - - + + StdCmdTextureMapping - Tools - Gereedskap + Tools + Gereedskap - Texture mapping... - Tekstuurkartering... + Texture mapping... + Tekstuurkartering... - Texture mapping - Tekstuurkartering + Texture mapping + Tekstuurkartering - - + + StdCmdTileWindows - Window - Venster + Window + Venster - &Tile - &Teël + &Tile + &Teël - Tile the windows - Teël die vensters + Tile the windows + Teël die vensters - - + + StdCmdToggleBreakpoint - Macro - Makro + Macro + Makro - Toggle breakpoint - Aktiveer/Inaktiveer Breekpunt + Toggle breakpoint + Aktiveer/Inaktiveer Breekpunt - - + + StdCmdToggleClipPlane - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Clipping plane - Knipvlak + Clipping plane + Knipvlak - Toggles clipping plane for active view - Aktiveer/inaktiveer knipvlak vir aktiewe aansig + Toggles clipping plane for active view + Aktiveer/inaktiveer knipvlak vir aktiewe aansig - - + + StdCmdToggleNavigation - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Toggle navigation/Edit mode - Kies navigasie- of wysigingsmodus + Toggle navigation/Edit mode + Kies navigasie- of wysigingsmodus - Toggle between navigation and edit mode - Skakel tussen die navigasie- en wysigingsmodus + Toggle between navigation and edit mode + Skakel tussen die navigasie- en wysigingsmodus - - + + StdCmdToggleObjects - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Toggle all objects - Aktiveer/inaktiveer alle voorwerpe + Toggle all objects + Aktiveer/inaktiveer alle voorwerpe - Toggles visibility of all objects in the active document - Verander sigbaarheid van al die voorwerpe in die aktiewe dokument + Toggles visibility of all objects in the active document + Verander sigbaarheid van al die voorwerpe in die aktiewe dokument - - + + StdCmdToggleSelectability - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Toggle selectability - Aktiveer/Inaktiveer kiesbaarheid + Toggle selectability + Aktiveer/Inaktiveer kiesbaarheid - Toggles the property of the objects to get selected in the 3D-View - Aktiveer/inaktiveer die eienskap van die voorwerpe om gekies te word in die 3D-aansig + Toggles the property of the objects to get selected in the 3D-View + Aktiveer/inaktiveer die eienskap van die voorwerpe om gekies te word in die 3D-aansig - - + + StdCmdToggleVisibility - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Toggle visibility - Verander sigbaarheid + Toggle visibility + Verander sigbaarheid - Toggles visibility - Verander sigbaarheid + Toggles visibility + Verander sigbaarheid - - + + StdCmdToolBarMenu - View - Voorkoms + View + Voorkoms - Tool&bars - &Nutsbalke + Tool&bars + &Nutsbalke - Toggles this window - Aktiveer/inaktiveer hierdie venster + Toggles this window + Aktiveer/inaktiveer hierdie venster - - + + StdCmdTransform - Edit - Wysig + Edit + Wysig - Transform... - Omskep... + Transform... + Omskep... - Transform the geometry of selected objects - Omskep die geometrie van gekose voorwerpe + Transform the geometry of selected objects + Omskep die geometrie van gekose voorwerpe - - + + StdCmdTreeSelection - View - Voorkoms + View + Voorkoms - Go to selection - Gaan na seleksie + Go to selection + Gaan na seleksie - Scroll to first selected item - Blaai na die eerste geselekteerde item + Scroll to first selected item + Blaai na die eerste geselekteerde item - - + + StdCmdUndo - Edit - Wysig + Edit + Wysig - &Undo - &Herstel + &Undo + &Herstel - Undo exactly one action - Herstel presies een aksie + Undo exactly one action + Herstel presies een aksie - - + + StdCmdUserInterface - View - Voorkoms + View + Voorkoms - Dock views - Koppel aansigte vas + Dock views + Koppel aansigte vas - Dock all top-level views - Koppel alle topvlak aansigte vas + Dock all top-level views + Koppel alle topvlak aansigte vas - - + + StdCmdViewAxo - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Axometric - Aksonometries + Axometric + Aksonometries - Set to axometric view - Ingestel op aksonometriese aansig + Set to axometric view + Ingestel op aksonometriese aansig - - + + StdCmdViewBottom - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Bottom - Bodem + Bottom + Bodem - Set to bottom view - Stel in op onderaansig + Set to bottom view + Stel in op onderaansig - - + + StdCmdViewCreate - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Create new view - Skep nuwe aansig + Create new view + Skep nuwe aansig - Creates a new view window for the active document - Skep 'n nuwe aansigvenster vir die aktiewe dokument + Creates a new view window for the active document + Skep 'n nuwe aansigvenster vir die aktiewe dokument - - + + StdCmdViewExample1 - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Inventor example #1 - Uitvinder voorbeeld #1 + Inventor example #1 + Uitvinder voorbeeld #1 - Shows a 3D texture with manipulator - Toon 'n 3D tekstuur met manipuleerder + Shows a 3D texture with manipulator + Toon 'n 3D tekstuur met manipuleerder - - + + StdCmdViewExample2 - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Inventor example #2 - Uitvinder voorbeeld #2 + Inventor example #2 + Uitvinder voorbeeld #2 - Shows spheres and drag-lights - Wys sfere en sleepligte + Shows spheres and drag-lights + Wys sfere en sleepligte - - + + StdCmdViewExample3 - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Inventor example #3 - Uitvinder voorbeeld #3 + Inventor example #3 + Uitvinder voorbeeld #3 - Shows a animated texture - Wys 'n geanimeerde tekstuur + Shows a animated texture + Wys 'n geanimeerde tekstuur - - + + StdCmdViewFitAll - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Fit all - Pas alles + Fit all + Pas alles - Fits the whole content on the screen - Pas die hele inhoud op die skerm + Fits the whole content on the screen + Pas die hele inhoud op die skerm - - + + StdCmdViewFitSelection - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Fit selection - Pas seleksie + Fit selection + Pas seleksie - Fits the selected content on the screen - Pas die geselekteerde inhoud op die skerm + Fits the selected content on the screen + Pas die geselekteerde inhoud op die skerm - - + + StdCmdViewFront - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Front - Vooraansig + Front + Vooraansig - Set to front view - Ingestel op vooraansig + Set to front view + Ingestel op vooraansig - - + + StdCmdViewIvIssueCamPos - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Issue camera position - Stel kameraposisie + Issue camera position + Stel kameraposisie - Issue the camera position to the console and to a macro, to easily recall this position - Stuur die kameraposisie na die konsool en na 'n makro, om hierdie posisie maklik te onthou + Issue the camera position to the console and to a macro, to easily recall this position + Stuur die kameraposisie na die konsool en na 'n makro, om hierdie posisie maklik te onthou - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Stereo Interleaved Columns - Stereo oorvleuelende kolomme + Stereo Interleaved Columns + Stereo oorvleuelende kolomme - Switch stereo viewing to Interleaved Columns - Verander stereo vertoning na Oorvleuelende Kolomme + Switch stereo viewing to Interleaved Columns + Verander stereo vertoning na Oorvleuelende Kolomme - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Stereo Interleaved Rows - Stereo Oorvleuelende Rye + Stereo Interleaved Rows + Stereo Oorvleuelende Rye - Switch stereo viewing to Interleaved Rows - Verander stereo vertoning na Oorvleuelende Rye + Switch stereo viewing to Interleaved Rows + Verander stereo vertoning na Oorvleuelende Rye - - + + StdCmdViewIvStereoOff - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Stereo Off - Stereo Af + Stereo Off + Stereo Af - Switch stereo viewing off - Skakel stereo vertoning af + Switch stereo viewing off + Skakel stereo vertoning af - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Stereo quad buffer - Stereo viervuldige buffer + Stereo quad buffer + Stereo viervuldige buffer - Switch stereo viewing to quad buffer - Verander stereo beskouing na viervuldige buffer + Switch stereo viewing to quad buffer + Verander stereo beskouing na viervuldige buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Stereo red/green - Stereo rooi/groen + Stereo red/green + Stereo rooi/groen - Switch stereo viewing to red/green - Verander stereo vertoning na rooi/groen + Switch stereo viewing to red/green + Verander stereo vertoning na rooi/groen - - + + StdCmdViewLeft - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Left - Links + Left + Links - Set to left view - Ingestel op linkeraansig + Set to left view + Ingestel op linkeraansig - - + + StdCmdViewRear - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Rear - Agterste + Rear + Agterste - Set to rear view - Stel na agteraansig + Set to rear view + Stel na agteraansig - - + + StdCmdViewRight - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Right - Regs + Right + Regs - Set to right view - Stel op regteraansig + Set to right view + Stel op regteraansig - - + + + StdCmdViewRotateLeft + + Standard-View + Standaardaansig + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standaardaansig + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Top - Bo-aansig + Top + Bo-aansig - Set to top view - Stel op bo-aansig + Set to top view + Stel op bo-aansig - - + + StdCmdWhatsThis - Help - Hulp + Help + Hulp - &What's This? - &Wat is hierdie? + &What's This? + &Wat is hierdie? - What's This - Wat is hierdie? + What's This + Wat is hierdie? - - + + StdCmdWindows - Window - Venster + Window + Venster - &Windows... - &Vensters... + &Windows... + &Vensters... - Windows list - Vensterlys + Windows list + Vensterlys - - + + StdCmdWindowsMenu - Window - Venster + Window + Venster - Activates this window - Aktiveer hierdie venster + Activates this window + Aktiveer hierdie venster - - + + StdCmdWorkbench - View - Voorkoms + View + Voorkoms - Workbench - Werkbank + Workbench + Werkbank - Switch between workbenches - Skakel tussen werkbanke + Switch between workbenches + Skakel tussen werkbanke - - + + StdOrthographicCamera - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Orthographic view - Ortografiese aansig + Orthographic view + Ortografiese aansig - Switches to orthographic view mode - Skakel na ortografiese aansigmodus + Switches to orthographic view mode + Skakel na ortografiese aansigmodus - - + + StdPerspectiveCamera - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Perspective view - Perspektief aansig + Perspective view + Perspektief aansig - Switches to perspective view mode - Skakel na perspektief aansigmodus + Switches to perspective view mode + Skakel na perspektief aansigmodus - - + + StdViewBoxZoom - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Box zoom - Bokszoem + Box zoom + Bokszoem - - + + StdViewDockUndockFullscreen - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Document window - Dokument venster + Document window + Dokument venster - Display the active view either in fullscreen, in undocked or docked mode - Vertoon die aktiewe aansig in volskerm, losgekoppelde, of vasgekoppelde modus + Display the active view either in fullscreen, in undocked or docked mode + Vertoon die aktiewe aansig in volskerm, losgekoppelde, of vasgekoppelde modus - - + + StdViewScreenShot - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Save picture... - Stoor beeld... + Save picture... + Stoor beeld... - Creates a screenshot of the active view - Vang 'n beeld van die huidige aansig + Creates a screenshot of the active view + Vang 'n beeld van die huidige aansig - - + + StdViewZoomIn - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Zoom In - Zoem in + Zoom In + Zoem in - - + + StdViewZoomOut - Standard-View - Standaardaansig + Standard-View + Standaardaansig - Zoom Out - Zoem Uit + Zoom Out + Zoem Uit - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Lêer + &File + &Lêer - &Edit - &Wysig + &Edit + &Wysig - Standard views - Standaard voorkomste + Standard views + Standaard voorkomste - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Nabyheid + &Zoom + &Nabyheid - Visibility - Sigbaarheid + Visibility + Sigbaarheid - &View - &Voorkoms + &View + &Voorkoms - &Tools - &Gereedskap + &Tools + &Gereedskap - &Macro - &Makro + &Macro + &Makro - &Windows - &Vensters + &Windows + &Vensters - &On-line help - &Internethulp + &On-line help + &Internethulp - &Help - &Help + &Help + &Help - File - Lêer + File + Lêer - Macro - Makro + Macro + Makro - View - Voorkoms + View + Voorkoms - Special Ops - Spesiale verwerkings + Special Ops + Spesiale verwerkings - - + + testClass - test - Toets + test + Toets - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaakPaneel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Geskep vir Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaakPaneel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Geskep vir Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Kies die styl van die taakpaneel + Choose the style of the Task Panel + Kies die styl van die taakpaneel - Default - Versuiminstelling + Default + Versuiminstelling - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_de.ts b/src/Gui/Language/FreeCAD_de.ts index 79e5131c2..07c2a2f0b 100644 --- a/src/Gui/Language/FreeCAD_de.ts +++ b/src/Gui/Language/FreeCAD_de.ts @@ -23,35 +23,35 @@ Angle Snap Einrastwinkel - + 1 ° 1 ° - + 2 ° 2 ° - + 5 ° 5 ° - + 10 ° 10 ° - + 20 ° 20 ° - + 45 ° 45 ° - + 90 ° 90 ° - + 180 ° 180 ° @@ -63,6 +63,44 @@ kein + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Hinzufügen + + + Remove + Entfernen + + + Move up + Noch oben verschieben + + + Move down + Nache unten verschieben + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + Gui::BlenderNavigationStyle @@ -160,6 +198,10 @@ License... Lizenz... + + Copy to clipboard + + Gui::Dialog::ButtonModel @@ -213,11 +255,11 @@ Angle Winkel - + 90° 90° - + -90° -90 ° @@ -711,7 +753,7 @@ Wählen Sie bitte eine andere Tastenkombination. Display mode: - Anzeigemodus: + Anzeigemodus: Plot mode: @@ -737,6 +779,10 @@ Wählen Sie bitte eine andere Tastenkombination. Color plot: Farb-Plot: + + Document window: + + Gui::Dialog::DlgEditorSettings @@ -1486,6 +1532,14 @@ Wählen Sie bitte ein anderes Verzeichnis aus. Invert zoom Zoom umkehren + + Zoom at cursor + + + + Zoom step + + Gui::Dialog::DlgSettings3DViewImp @@ -1727,6 +1781,10 @@ Wählen Sie bitte ein anderes Verzeichnis aus. Items Elemente + + Current line highlight + + Gui::Dialog::DlgSettingsImage @@ -1850,11 +1908,11 @@ Wählen Sie bitte ein anderes Verzeichnis aus. QSXGA 2560 x 2048 QSXGA 2560 x 2024 - + QUXGA 3200 × 2400 QUXGA 3200 x 2400 - + HUXGA 6400 × 4800 HUXGA 6400 x 4800 @@ -1961,6 +2019,14 @@ Wählen Sie bitte ein anderes Verzeichnis aus. Macro path Makro-Zielpfad + + General macro settings + + + + Run macros in local environment + + Gui::Dialog::DlgSettingsUnits @@ -2053,11 +2119,11 @@ Wählen Sie bitte ein anderes Verzeichnis aus. The color of construction geometry in editmode - Die Farbe der Konstruktionsgeometrien im Editier-Modus + Die Farbe der Konstruktionsgeometrien im Editier-Modus The color of fully constrained geometry in editmode - Die Farbe der komplett festgelegten Geometrien im Editier-Modus + Die Farbe der komplett festgelegten Geometrien im Editier-Modus The color of vertices being edited @@ -2067,6 +2133,42 @@ Wählen Sie bitte ein anderes Verzeichnis aus. The color of edges being edited Die Farbe der zu bearbeitenden Kanten + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + Gui::Dialog::DlgTipOfTheDay @@ -2131,7 +2233,43 @@ Wählen Sie bitte ein anderes Verzeichnis aus. Gui::Dialog::DownloadDialog Canceled. - Abgebrochen. + Abgebrochen. + + + Download + + + + Cancel + Abbrechen + + + Close + Schließen + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Download fehlgeschlagen: %1. + + + Downloaded %1 to current directory. + @@ -2168,6 +2306,13 @@ Wählen Sie bitte ein anderes Verzeichnis aus. OK + + Gui::Dialog::LicenseDialog + + Copyright + + + Gui::Dialog::MouseButtons @@ -2856,6 +3001,25 @@ Sollen die Änderungen gespeichert werden? Benutzerdefiniert... + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + Gui::MacroCommand @@ -2886,6 +3050,88 @@ Sollen die Änderungen gespeichert werden? Alles schließen + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + Gui::NetworkRetriever @@ -3031,6 +3277,10 @@ Wollen Sie sie beenden, ohne Ihre Daten zu speichern? Select All Alles auswählen + + Clear console + + Gui::PythonEditor @@ -3175,7 +3425,7 @@ Möchten Sie ein anderes Verzeichnis angeben? Gui::TaskView::TaskAppearance Display mode: - Anzeigemodus: + Anzeigemodus: Plot mode: @@ -3197,6 +3447,10 @@ Möchten Sie ein anderes Verzeichnis angeben? Appearance Erscheinungsbild + + Document window: + + Gui::TaskView::TaskEditControl @@ -3220,11 +3474,30 @@ Möchten Sie ein anderes Verzeichnis angeben? Selektion bearbeiten + + Gui::TouchpadNavigationStyle + + Press left mouse button + Drücken Sie die linke Maustaste + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + Gui::Translator English - Englisch + Englisch @@ -3481,11 +3754,11 @@ Möchten Sie ein anderes Verzeichnis angeben? File not found - Datei nicht gefunden + Datei nicht gefunden Cannot open file %1 - Kann Datei %1 nicht öffnen + Kann Datei %1 nicht öffnen Save views... @@ -3792,6 +4065,17 @@ You either have to finish or cancel the editing in the task panel. Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufgabenfensters abbrechen. + + StdBoxSelection + + Standard-View + Standardansicht + + + Box selection + + + StdCmdAbout @@ -3852,6 +4136,21 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Vorheriges Fenster aktivieren + + StdCmdAlignment + + Edit + Bearbeiten + + + Alignment... + + + + Align the selected objects + + + StdCmdArrangeIcons @@ -3972,15 +4271,15 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg StdCmdDDuplicateSelection Edit - Bearbeiten + Bearbeiten Duplicate selection - Auswahl duplizieren + Auswahl duplizieren Put duplicates of the selected objects to the active document - Duplikate der selektierten Objekte in aktives Dokument einfügen + Duplikate der selektierten Objekte in aktives Dokument einfügen @@ -4129,6 +4428,40 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Zeichenstil + + StdCmdDuplicateSelection + + Edit + Bearbeiten + + + Duplicate selection + Auswahl duplizieren + + + Put duplicates of the selected objects to the active document + Duplikate der selektierten Objekte in aktives Dokument einfügen + + + + StdCmdEdit + + Edit + Bearbeiten + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + StdCmdExport @@ -4145,7 +4478,30 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Supported formats - Unterstützte Formate + Unterstützte Formate + + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Werkzeuge + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + @@ -4321,12 +4677,16 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Mesure distance - Abstand messen + Abstand messen Measures distance between two selected objects Misst die Distanz zwischen zwei ausgewählten Objekten + + Measure distance + Abstand messen + StdCmdMergeProjects @@ -4381,15 +4741,15 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg StdCmdOnlineHelpPython Help - Hilfe + Hilfe Python Manuals - Python-Handbuch + Python-Handbuch Show the Python documentation - Python-Dokumentation anzeigen + Python-Dokumentation anzeigen @@ -5206,6 +5566,36 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Rechtsansicht + + StdCmdViewRotateLeft + + Standard-View + Standardansicht + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standardansicht + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + StdCmdViewTop @@ -5389,6 +5779,34 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg Drahtgitter-Modus + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + Workbench diff --git a/src/Gui/Language/FreeCAD_es.ts b/src/Gui/Language/FreeCAD_es.ts index 089b96e95..328b1b2f9 100644 --- a/src/Gui/Language/FreeCAD_es.ts +++ b/src/Gui/Language/FreeCAD_es.ts @@ -1,5494 +1,5912 @@ - - + + Angle - Form - Formulario + Form + Formulario - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Ajuste angular + Angle Snap + Ajuste angular - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - ninguno + none + ninguno - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Añadir + + + Remove + Quitar + + + Move up + Mover hacia arriba + + + Move down + Mover hacia abajo + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Cliquee el botón izquierdo del mouse + Press left mouse button + Cliquee el botón izquierdo del mouse - Press SHIFT and middle mouse button - Pulse SHIFT y el botón central del mouse + Press SHIFT and middle mouse button + Pulse SHIFT y el botón central del mouse - Press middle mouse button - Cliquee el botón central del mouse + Press middle mouse button + Cliquee el botón central del mouse - Scroll middle mouse button - Despláce botón central del mouse + Scroll middle mouse button + Despláce botón central del mouse - - + + Gui::CADNavigationStyle - Press left mouse button - Cliquee el botón izquierdo del mouse + Press left mouse button + Cliquee el botón izquierdo del mouse - Press middle mouse button - Cliquee el botón central del mouse + Press middle mouse button + Cliquee el botón central del mouse - Press left and middle mouse button - Cliquee el botón central e izquierdo del mouse + Press left and middle mouse button + Cliquee el botón central e izquierdo del mouse - Scroll middle mouse button - Despláce botón central del mouse + Scroll middle mouse button + Despláce botón central del mouse - - + + Gui::Command - Standard - Estándar + Standard + Estándar - - + + Gui::ContainerDialog - &OK - &Aceptar + &OK + &Aceptar - &Cancel - &Cancelar + &Cancel + &Cancelar - - + + Gui::ControlSingleton - Task panel - Panel de tareas + Task panel + Panel de tareas - - + + Gui::Dialog::AboutApplication - About - Acerca de + About + Acerca de - Revision number - Número de revisión + Revision number + Número de revisión - Version - Versión + Version + Versión - OK - Aceptar + OK + Aceptar - - (Vacio) + + (Vacio) - Release date - Fecha de la versión + Release date + Fecha de la versión - Platform - Plataforma + Platform + Plataforma - License... - Licencia... + License... + Licencia... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Botón %1 + Button %1 + Botón %1 - Out Of Range - Out Of Range + Out Of Range + Out Of Range - - + + Gui::Dialog::CommandModel - Commands - Comandos + Commands + Comandos - - + + Gui::Dialog::DemoMode - View Turntable - Ver Torno + View Turntable + Ver Torno - Speed - Velocidad + Speed + Velocidad - Maximum - Valor máximo + Maximum + Valor máximo - Minimum - Valor mínimo + Minimum + Valor mínimo - Fullscreen - Pantalla completa + Fullscreen + Pantalla completa - Enable timer - Activar el temporizador + Enable timer + Activar el temporizador - s - s + s + s - Angle - Ángulo + Angle + Ángulo + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Reproducir - -90° - -90° + Stop + Parar - Play - Reproducir + Close + Cerrar - - Stop - Parar - - - Close - Cerrar - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Seleccionar ventana + Choose Window + Seleccionar ventana - &Activate - &Activar + &Activate + &Activar - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Cancelar + &Cancel + &Cancelar - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Ventanas + Windows + Ventanas - - + + Gui::Dialog::DlgAuthorization - Authorization - Autorización + Authorization + Autorización - &OK - &Aceptar + &OK + &Aceptar - &Cancel - &Cancelar + &Cancel + &Cancelar - Password: - Contraseña: + Password: + Contraseña: - User name: - Nombre de usuario: + User name: + Nombre de usuario: - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Seleccionar icono + Choose Icon + Seleccionar icono - OK - Aceptar + OK + Aceptar - Cancel - Cancelar + Cancel + Cancelar - Add icons... - Add icons... + Add icons... + Add icons... - - + + Gui::Dialog::DlgCustomActions - Macros - Macros + Macros + Macros - Setup Custom Macros - Macros de sistema personalizadas + Setup Custom Macros + Macros de sistema personalizadas - Macro: - Macro: + Macro: + Macro: - ... - ... + ... + ... - Pixmap - Pixmap + Pixmap + Pixmap - Accelerator: - Acelerador: + Accelerator: + Acelerador: - What's this: - Qué es esto: + What's this: + Qué es esto: - Status text: - Texto de estado: + Status text: + Texto de estado: - Tool tip: - sugerencia: + Tool tip: + sugerencia: - Menu text: - Texto de menú: + Menu text: + Texto de menú: - Add - Añadir + Add + Añadir - Remove - Quitar + Remove + Quitar - Replace - Reemplazar + Replace + Reemplazar - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Iconos + Icons + Iconos - Macros - Macros + Macros + Macros - No macro - Ninguna macro + No macro + Ninguna macro - No macros found. - Ninguna macro encontrada. + No macros found. + Ninguna macro encontrada. - Macro not found - Macro no encontrada + Macro not found + Macro no encontrada - Sorry, couldn't find macro file '%1'. - Lo siento, no se ha podido encontrar el archivo de macro '%1'. + Sorry, couldn't find macro file '%1'. + Lo siento, no se ha podido encontrar el archivo de macro '%1'. - Empty macro - Macro vacía + Empty macro + Macro vacía - Please specify the macro first. - Por favor especifique la macro primero. + Please specify the macro first. + Por favor especifique la macro primero. - Empty text - Texto vacío + Empty text + Texto vacío - Please specify the menu text first. - Por favor, especifique el texto del menú primero. + Please specify the menu text first. + Por favor, especifique el texto del menú primero. - No item selected - Ningún elemento seleccionado + No item selected + Ningún elemento seleccionado - Please select a macro item first. - Por favor seleccione un elemento de macro primero. + Please select a macro item first. + Por favor seleccione un elemento de macro primero. - - + + Gui::Dialog::DlgCustomCommands - Commands - Comandos + Commands + Comandos - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Categoría + Category + Categoría - Icon - Icono + Icon + Icono - Command - Comando + Command + Comando - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Teclado + Keyboard + Teclado - Description: - Descripción: + Description: + Descripción: - &Category: - &Categoría: + &Category: + &Categoría: - C&ommands: - C&omandos: + C&ommands: + C&omandos: - Current shortcut: - Atajo de teclado actual: + Current shortcut: + Atajo de teclado actual: - Press &new shortcut: - Presionar &nuevo atajo de teclado: + Press &new shortcut: + Presionar &nuevo atajo de teclado: - Currently assigned to: - Actualmente asignado a: + Currently assigned to: + Actualmente asignado a: - &Assign - &Asignar + &Assign + &Asignar - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Restaurar + &Reset + &Restaurar - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Re&staurar todo + Re&set All + Re&staurar todo - Alt+S - Alt+S + Alt+S + Alt+S - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Icono + Icon + Icono - Command - Comando + Command + Comando - none - ninguno + none + ninguno - Multiple defined shortcut - Múltiples atajos de teclado definidos + Multiple defined shortcut + Múltiples atajos de teclado definidos - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - El atajo de teclado '%1' está definido más de una vez. Esto puede ocasionar un comportamiento inesperado. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + El atajo de teclado '%1' está definido más de una vez. Esto puede ocasionar un comportamiento inesperado. - Already defined shortcut - Atajo de teclado ya definido + Already defined shortcut + Atajo de teclado ya definido - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - El atajo de teclado '%1' ya está asignado a '%2'. + El atajo de teclado '%1' ya está asignado a '%2'. Por favor defina otro atajo de teclado. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Barras de herramientas + Toolbox bars + Barras de herramientas - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Barras de herramientas + Toolbars + Barras de herramientas - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> Los cambios se activarán la próxima vez que cargue el entorno apropiado</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> Los cambios se activarán la próxima vez que cargue el entorno apropiado</p></body></html> - Move right - Mover a la derecha + Move right + Mover a la derecha - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Mueva el elemento seleccionado un nivel hacia abajo.</b><p>Esto también cambiará el nivel del elemento padre.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Mueva el elemento seleccionado un nivel hacia abajo.</b><p>Esto también cambiará el nivel del elemento padre.</p> - Move left - Mover a la izquierda + Move left + Mover a la izquierda - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Mueva el elemento seleccionado un nivel hacia arriba.</b><p>Esto también cambiará el nivel del elemento padre.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Mueva el elemento seleccionado un nivel hacia arriba.</b><p>Esto también cambiará el nivel del elemento padre.</p> - Move down - Mover hacia abajo + Move down + Mover hacia abajo - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mueva el elemento seleccionado hacia abajo.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mueva el elemento seleccionado hacia abajo.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> - Move up - Mover hacia arriba + Move up + Mover hacia arriba - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mueva el elemento seleccionado hacia arriba.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mueva el elemento seleccionado hacia arriba.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> - New... - Nuevo... + New... + Nuevo... - Rename... - Renombrar... + Rename... + Renombrar... - Delete - Borrar + Delete + Borrar - Icon - Icono + Icon + Icono - Command - Comando + Command + Comando - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Nueva barra de herramientas + New toolbar + Nueva barra de herramientas - Toolbar name: - Nombre de la barra de herramientas: + Toolbar name: + Nombre de la barra de herramientas: - Duplicated name - Nombre duplicado + Duplicated name + Nombre duplicado - The toolbar name '%1' is already used - El nombre de la barra de herramientas '%1' ya se está utilizando + The toolbar name '%1' is already used + El nombre de la barra de herramientas '%1' ya se está utilizando - Rename toolbar - Renombrar barra de herramientas + Rename toolbar + Renombrar barra de herramientas - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgCustomizeImp - Customize - Personalizar + Customize + Personalizar - &Help - Ay&uda + &Help + Ay&uda - &Close - &Cerrar + &Close + &Cerrar - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Botones + Buttons + Botones - Clear - Limpiar + Clear + Limpiar - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Propiedades de visualización + Display properties + Propiedades de visualización - Display - Visualización + Display + Visualización - Transparency: - Transparencia: + Transparency: + Transparencia: - Line width: - Ancho de línea: + Line width: + Ancho de línea: - Point size: - Tamaño de punto: + Point size: + Tamaño de punto: - Material - Material + Material + Material - ... - ... + ... + ... - Close - Cerrar + Close + Cerrar - Viewing mode - Modo de visualización + Viewing mode + Modo de visualización - Display mode: - Modo de visualización: + Display mode: + Modo de visualización: - Plot mode: - Modo de impresión: + Plot mode: + Modo de impresión: - - (Vacio) + + (Vacio) - Line transparency: - Transparencia de la línea: + Line transparency: + Transparencia de la línea: - Line color: - Color de la línea: + Line color: + Color de la línea: - Shape color: - Color del cuerpo: + Shape color: + Color del cuerpo: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Editor + Editor + Editor - Options - Opciones + Options + Opciones - Enable line numbers - Permite números de línea + Enable line numbers + Permite números de línea - Enable folding - Permite el plegado + Enable folding + Permite el plegado - Indentation - Sangrado + Indentation + Sangrado - Insert spaces - Insertar espacios + Insert spaces + Insertar espacios - Tab size: - Tamaño de la tabulación: + Tab size: + Tamaño de la tabulación: - Indent size: - Tamaño de sangrado: + Indent size: + Tamaño de sangrado: - Keep tabs - Mantener la tabulación + Keep tabs + Mantener la tabulación - Display Items - Visualizar elementos + Display Items + Visualizar elementos - Family: - Familia: + Family: + Familia: - Size: - Tamaño: + Size: + Tamaño: - Preview: - Previsualización: + Preview: + Previsualización: - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgGeneral - General - General + General + General - Start up - Iniciar + Start up + Iniciar - Enable splash screen at start up - Activar página de bienvenida en el inicio + Enable splash screen at start up + Activar página de bienvenida en el inicio - Switch to tab of report window: - Cambiar a la pestaña de ventana de informe: + Switch to tab of report window: + Cambiar a la pestaña de ventana de informe: - Auto load module after start up: - Carga automática del módulo después de iniciar: + Auto load module after start up: + Carga automática del módulo después de iniciar: - Language - Idioma + Language + Idioma - Change language: - Cambiar idioma: + Change language: + Cambiar idioma: - Main window - Ventana principal + Main window + Ventana principal - Size of recent file list - Tamaño de la lista de archivos recientes + Size of recent file list + Tamaño de la lista de archivos recientes - Window style: - Estilo de ventana: + Window style: + Estilo de ventana: - Size of toolbar icons: - Tamaño de los iconos de la barra de herramientas: + Size of toolbar icons: + Tamaño de los iconos de la barra de herramientas: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Predeterminado (%1 x %1) + Default (%1 x %1) + Predeterminado (%1 x %1) - Small (%1 x %1) - Pequeño (%1 x %1) + Small (%1 x %1) + Pequeño (%1 x %1) - Large (%1 x %1) - Grande (%1 x %1) + Large (%1 x %1) + Grande (%1 x %1) - Extra large (%1 x %1) - Extra lgrande (%1 x %1) + Extra large (%1 x %1) + Extra lgrande (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - introducir + Input + introducir - OK - Aceptar + OK + Aceptar - Cancel - Cancelar + Cancel + Cancelar - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgInspector - Scene Inspector - Inspector de escena + Scene Inspector + Inspector de escena - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Ejecutar macro + Execute macro + Ejecutar macro - Macro name: - Nombre de la macro: + Macro name: + Nombre de la macro: - Macro destination: - Destino de la macro: + Macro destination: + Destino de la macro: - Execute - Ejecutar + Execute + Ejecutar - Close - Cerrar + Close + Cerrar - Create - Crear + Create + Crear - Delete - Borrar + Delete + Borrar - Edit - Editar + Edit + Editar - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Macros + Macros + Macros - Macro file - Archivo de macro + Macro file + Archivo de macro - Enter a file name, please: - Introduzca un nombre de archivo, por favor: + Enter a file name, please: + Introduzca un nombre de archivo, por favor: - Existing file - Archivo existente + Existing file + Archivo existente - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Este archivo ya existe. - Delete macro - Borrar macro + Delete macro + Borrar macro - Do you really want to delete the macro '%1'? - ¿Realmente quiere borrar la macro '%1'? + Do you really want to delete the macro '%1'? + ¿Realmente quiere borrar la macro '%1'? - Cannot create file - No se puede crear el archivo + Cannot create file + No se puede crear el archivo - Creation of file '%1' failed. - Falló la creación del archivo '%1'. + Creation of file '%1' failed. + Falló la creación del archivo '%1'. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Grabando macro + Macro recording + Grabando macro - Macro name: - Nombre de la macro: + Macro name: + Nombre de la macro: - Stop - Parar + Stop + Parar - Cancel - Cancelar + Cancel + Cancelar - Macro path: - Ruta de la macro: + Macro path: + Ruta de la macro: - ... - ... + ... + ... - Record - Grabar + Record + Grabar - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Grabador de macros + Macro recorder + Grabador de macros - Specify first a place to save. - Especificar primero donde guardar. + Specify first a place to save. + Especificar primero donde guardar. - Existing macro - Macro existente + Existing macro + Macro existente - The macro '%1' already exists. Do you want to overwrite? - La macro '%1' ya existe. ¿Desea sobreescribirla? + The macro '%1' already exists. Do you want to overwrite? + La macro '%1' ya existe. ¿Desea sobreescribirla? - The macro directory doesn't exist. Please, choose another one. - No existe el directorio de macro. Por favor, seleccione otro. + The macro directory doesn't exist. Please, choose another one. + No existe el directorio de macro. Por favor, seleccione otro. - Choose macro directory - Elija el directorio de macro + Choose macro directory + Elija el directorio de macro - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Propiedades de material + Material properties + Propiedades de material - &Close - &Cerrar + &Close + &Cerrar - Alt+C - Alt+C + Alt+C + Alt+C - Material - Material + Material + Material - Diffuse color: - Color difuso: + Diffuse color: + Color difuso: - Specular color: - Color especular: + Specular color: + Color especular: - Shininess: - Luminosidad: + Shininess: + Luminosidad: - % - % + % + % - Ambient color: - Color ambiente: + Ambient color: + Color ambiente: - - (Vacio) + + (Vacio) - Emissive color: - Color emisivo: + Emissive color: + Color emisivo: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Ayuda online + On-line help + Ayuda online - Help viewer - Visor de ayuda + Help viewer + Visor de ayuda - Location of start page - Ubicación de la página de inicio + Location of start page + Ubicación de la página de inicio - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - Archivos HTML (*.html *.htm) + HTML files (*.html *.htm) + Archivos HTML (*.html *.htm) - Access denied - Acceso denegado + Access denied + Acceso denegado - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Acceso denegado a '%1' + Acceso denegado a '%1' Especifique otro directorio, por favor. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Editor de parámetros + Parameter Editor + Editor de parámetros - Save to disk - Guardar en disco + Save to disk + Guardar en disco - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Cerrar + &Close + &Cerrar - - + + Gui::Dialog::DlgParameterImp - Group - Grupo + Group + Grupo - Name - Nombre + Name + Nombre - Type - Tipo + Type + Tipo - Value - Valor + Value + Valor - User parameter - Parámetro del usuario + User parameter + Parámetro del usuario - Invalid input - Entrada incorrecta + Invalid input + Entrada incorrecta - Invalid key name '%1' - Nombre clave inválido '%1' + Invalid key name '%1' + Nombre clave inválido '%1' - System parameter - Parámetro del sistema + System parameter + Parámetro del sistema - - + + Gui::Dialog::DlgPreferences - Preferences - Preferencias + Preferences + Preferencias - &Help - Ay&uda + &Help + Ay&uda - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &Aceptar + &OK + &Aceptar - &Apply - &Aplicar + &Apply + &Aplicar - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Cancelar + &Cancel + &Cancelar - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Parámetro incorrecto + Wrong parameter + Parámetro incorrecto - - + + Gui::Dialog::DlgProjectInformation - Project information - Información del proyecto + Project information + Información del proyecto - Information - Información + Information + Información - &Name: - &Nombre: + &Name: + &Nombre: - Commen&t: - Comen&tario: + Commen&t: + Comen&tario: - Path: - Ruta: + Path: + Ruta: - &Last modified by: - &Última modificación por: + &Last modified by: + &Última modificación por: - Created &by: - Creado &por: + Created &by: + Creado &por: - Com&pany: - Em&presa: + Com&pany: + Em&presa: - Last &modification date: - Fecha de la última &modificación: + Last &modification date: + Fecha de la última &modificación: - Creation &date: - Fecha &de creación: + Creation &date: + Fecha &de creación: - &OK - &Aceptar + &OK + &Aceptar - &Cancel - &Cancelar + &Cancel + &Cancelar - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project utility + Project utility + Project utility - Extract project - Extract project + Extract project + Extract project - Source - Fuente + Source + Fuente - Project file (*.fcstd) - Archivo de proyecto (*. fcstd) + Project file (*.fcstd) + Archivo de proyecto (*. fcstd) - Destination - Destino + Destination + Destino - Extract - Extraer + Extract + Extraer - Create project - Crear proyecto + Create project + Crear proyecto - Document.xml - Document.xml + Document.xml + Document.xml - Create - Crear + Create + Crear - Load project file after creation - Cargar el archivo del proyecto después de la creación + Load project file after creation + Cargar el archivo del proyecto después de la creación - Empty source - Fuente vacía + Empty source + Fuente vacía - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Destino vacío + Empty destination + Destino vacío - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - Ventana de salida + Output window + Ventana de salida - Output - Salida + Output + Salida - Record log messages - Grabar lista de mensajes + Record log messages + Grabar lista de mensajes - Record warnings - Guardar advertencias + Record warnings + Guardar advertencias - Record error messages - Guardar mensajes de error + Record error messages + Guardar mensajes de error - Colors - Colores + Colors + Colores - Normal messages: - Mensajes normales: + Normal messages: + Mensajes normales: - Log messages: - Lista de mensajes: + Log messages: + Lista de mensajes: - Warnings: - Advertencias: + Warnings: + Advertencias: - Errors: - Errores: + Errors: + Errores: - - (Vacio) + + (Vacio) - Redirect internal Python errors to report view - Redirigir los errores internos de Python a un informe visual + Redirect internal Python errors to report view + Redirigir los errores internos de Python a un informe visual - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - Ejecutando programa externo + Running external program + Ejecutando programa externo - TextLabel - EtiquetaTexto + TextLabel + EtiquetaTexto - Advanced >> - Avanzado>> + Advanced >> + Avanzado>> - ... - ... + ... + ... - Accept changes - Aceptar cambios + Accept changes + Aceptar cambios - Discard changes - Descartar cambios + Discard changes + Descartar cambios - Abort program - Abortar programa + Abort program + Abortar programa - Help - Ayuda + Help + Ayuda - Select a file - Seleccionar un archivo + Select a file + Seleccionar un archivo - - + + Gui::Dialog::DlgSettings3DView - 3D View - Vista 3D + 3D View + Vista 3D - 3D View settings - Configuración de vista 3D + 3D View settings + Configuración de vista 3D - Show coordinate system in the corner - Mostrar sistema de coordenadas en la esquina + Show coordinate system in the corner + Mostrar sistema de coordenadas en la esquina - Show counter of frames per second - Mostrar contador de cuadros por segundo + Show counter of frames per second + Mostrar contador de cuadros por segundo - Enable animation - Activar animación + Enable animation + Activar animación - Enable anti-aliasing (slower) - Activar anti-aliasing (más lento) + Enable anti-aliasing (slower) + Activar anti-aliasing (más lento) - Eye to eye distance for stereo modes: - Distancia del punto de mira para los modos estéreo: + Eye to eye distance for stereo modes: + Distancia del punto de mira para los modos estéreo: - Camera type - Tipo de cámara + Camera type + Tipo de cámara - Orthographic rendering - Renderizado ortográfico + Orthographic rendering + Renderizado ortográfico - Perspective rendering - Renderizado en perspectiva + Perspective rendering + Renderizado en perspectiva - - (Vacio) + + (Vacio) - 3D Navigation - Navegación 3D + 3D Navigation + Navegación 3D - Mouse... - Mouse... + Mouse... + Mouse... - Intensity of backlight - Intensidad de luz de fondo + Intensity of backlight + Intensidad de luz de fondo - Enable backlight color - Habilitar color de luz de fondo + Enable backlight color + Habilitar color de luz de fondo - Orbit style - Estilo órbita + Orbit style + Estilo órbita - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navegación + %1 navigation + %1 navegación - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Color del modelo + Color model + Color del modelo - &Gradient: - &Gradiente: + &Gradient: + &Gradiente: - red-yellow-green-cyan-blue - rojo-amarillo-verde-cian-azul + red-yellow-green-cyan-blue + rojo-amarillo-verde-cian-azul - blue-cyan-green-yellow-red - azul-cian-verde-amarillo-rojo + blue-cyan-green-yellow-red + azul-cian-verde-amarillo-rojo - white-black - blanco-negro + white-black + blanco-negro - black-white - negro-blanco + black-white + negro-blanco - Visibility - Visibilidad + Visibility + Visibilidad - Out g&rayed - No &seleccionable + Out g&rayed + No &seleccionable - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Sin &visibilidad + Out &invisible + Sin &visibilidad - Alt+I - Alt+I + Alt+I + Alt+I - Style - Estilo + Style + Estilo - &Zero - &Cero + &Zero + &Cero - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Flujo + &Flow + &Flujo - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &Aceptar + &OK + &Aceptar - &Cancel - &Cancelar + &Cancel + &Cancelar - Parameter range - Rango de parámetros + Parameter range + Rango de parámetros - Mi&nimum: - Mín&imo: + Mi&nimum: + Mín&imo: - Ma&ximum: - Má&ximo: + Ma&ximum: + Má&ximo: - &Labels: - &Etiquetas: + &Labels: + &Etiquetas: - &Decimals: - &Decimales: + &Decimals: + &Decimales: - - (Vacio) + + (Vacio) - Color-gradient settings - Ajustes de degradado de color + Color-gradient settings + Ajustes de degradado de color - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Parámetro incorrecto + Wrong parameter + Parámetro incorrecto - The maximum value must be higher than the minimum value. - El valor máximo debe ser mayor que el valor mínimo. + The maximum value must be higher than the minimum value. + El valor máximo debe ser mayor que el valor mínimo. - - + + Gui::Dialog::DlgSettingsDocument - Document - Documento + Document + Documento - General - General + General + General - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Nivel de compresión de guardado del documento + Nivel de compresión de guardado del documento (0 = ninguno, 9 = el más alto, 3 = por defecto) - Create new document at start up - Crear un documento nuevo al iniciar + Create new document at start up + Crear un documento nuevo al iniciar - Storage - Almacenamiento + Storage + Almacenamiento - Saving transactions (Auto-save) - Guardando operaciones (Guardado automático) + Saving transactions (Auto-save) + Guardando operaciones (Guardado automático) - Discard saved transaction after saving document - Descartar operaciones guardadas depués de guardar el documento + Discard saved transaction after saving document + Descartar operaciones guardadas depués de guardar el documento - Save thumbnail into project file when saving document - Guardar la imagen en miniatura dentro del archivo de proyecto cuando se guarda un documento + Save thumbnail into project file when saving document + Guardar la imagen en miniatura dentro del archivo de proyecto cuando se guarda un documento - Create up to backup files when resaving document - Crear archivos de copia de seguridad cuando se vuelva a guardar el documento + Create up to backup files when resaving document + Crear archivos de copia de seguridad cuando se vuelva a guardar el documento - Document objects - Objetos del documento + Document objects + Objetos del documento - Allow duplicate object labels in one document - Permitir etiquetas de objetos duplicadas en un documento + Allow duplicate object labels in one document + Permitir etiquetas de objetos duplicadas en un documento - Maximum Undo/Redo steps - Maximum Undo/Redo steps + Maximum Undo/Redo steps + Maximum Undo/Redo steps - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Texto + Text + Texto - Bookmark - Marcador + Bookmark + Marcador - Breakpoint - Punto de parada + Breakpoint + Punto de parada - Keyword - Palabra clave + Keyword + Palabra clave - Comment - Comentar + Comment + Comentar - Block comment - Comentar bloque + Block comment + Comentar bloque - Number - Número + Number + Número - String - Cadena de texto + String + Cadena de texto - Character - Caracter + Character + Caracter - Class name - Nombre de clase + Class name + Nombre de clase - Define name - Definir nombre + Define name + Definir nombre - Operator - Operador + Operator + Operador - Python output - Salida de Python + Python output + Salida de Python - Python error - Error de Python + Python error + Error de Python - Items - Elementos + Items + Elementos - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Configuración de imagen + Image settings + Configuración de imagen - Image properties - Propiedades de imagen + Image properties + Propiedades de imagen - Back&ground: - C&olor de fondo: + Back&ground: + C&olor de fondo: - Current - Actual + Current + Actual - White - Blanco + White + Blanco - Black - Negro + Black + Negro - Transparent - Transparente + Transparent + Transparente - Image dimensions - Dimensiones de imagen + Image dimensions + Dimensiones de imagen - Pixel - Pixel + Pixel + Pixel - &Width: - &Ancho: + &Width: + &Ancho: - Current screen - Pantalla actual + Current screen + Pantalla actual - Icon 32 x 32 - Icono 32 x 32 + Icon 32 x 32 + Icono 32 x 32 - Icon 64 x 64 - Icono 64 x 64 + Icon 64 x 64 + Icono 64 x 64 - Icon 128 x 128 - Icono 128 x 128 + Icon 128 x 128 + Icono 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Tamaños estándar: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Altura: - Standard sizes: - Tamaños estándar: + Aspect ratio: + Relación de aspecto: - &Height: - &Altura: + &Screen + &Pantalla - Aspect ratio: - Relación de aspecto: + Alt+S + Alt+S - &Screen - &Pantalla + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Comentario de imagen - Alt+1 - Alt+1 + Insert MIBA + Introducir MIBA - Image comment - Comentario de imagen + Insert comment + Introducir comentario - - Insert MIBA - Introducir MIBA - - - Insert comment - Introducir comentario - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Macro + Macro + Macro - Macro recording settings - Configuración de la grabación de macros + Macro recording settings + Configuración de la grabación de macros - Logging Commands - Comandos de inicio de sesión + Logging Commands + Comandos de inicio de sesión - Show script commands in python console - Mostrar comandos de archivos de guión en la consola de Python + Show script commands in python console + Mostrar comandos de archivos de guión en la consola de Python - Log all commands issued by menus to file: - Registrar todos los comandos publicados por menús en el archivo: + Log all commands issued by menus to file: + Registrar todos los comandos publicados por menús en el archivo: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Comandos de interfaz de usuario + Gui commands + Comandos de interfaz de usuario - Recording GUI commands - Grabando comandos de interfaz de usuario + Recording GUI commands + Grabando comandos de interfaz de usuario - Record as comment - Grabar como comentario + Record as comment + Grabar como comentario - Macro path - Ruta de la macro + Macro path + Ruta de la macro - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Unidades + Units + Unidades - Units settings - Configuración de unidades + Units settings + Configuración de unidades - Standard (mm/kg/s/degree) - Estándar (mm/kg/s/grados) + Standard (mm/kg/s/degree) + Estándar (mm/kg/s/grados) - MKS (m/kg/s/degree) - MKS (m/kg/s/grado) + MKS (m/kg/s/degree) + MKS (m/kg/s/grado) - Magnitude - Magnitud + Magnitude + Magnitud - Unit - Unidad + Unit + Unidad - User system: - Sistema del usuario: + User system: + Sistema del usuario: - Imperial (in/lb) - Imperial (pulg/lb) + Imperial (in/lb) + Imperial (pulg/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Colores + Colors + Colores - Selection - Selección + Selection + Selección - Enable selection highlighting - Activar resaltado de selección + Enable selection highlighting + Activar resaltado de selección - Enable preselection highlighting - Activar resaltado de preselección + Enable preselection highlighting + Activar resaltado de preselección - Background color - Color de fondo + Background color + Color de fondo - Middle color - Color medio + Middle color + Color medio - Color gradient - Gradiente de color + Color gradient + Gradiente de color - Simple color - Color simple + Simple color + Color simple - Default colors - Colores predeterminados + Default colors + Colores predeterminados - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Consejo del día + Tip of the day + Consejo del día - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Sabías que...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Sabías que...</font></font></b> - &Show tips at start up - &Mostrar consejos al inicio + &Show tips at start up + &Mostrar consejos al inicio - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Siguiente consejo + &Next Tip + &Siguiente consejo - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Cerrar + &Close + &Cerrar - Alt+C - Alt+C + Alt+C + Alt+C - - (Vacio) + + (Vacio) - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Descarga fallida: %1 + Descarga fallida: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Si quieres aprender más sobre FreeCAD deberías ir a %1 o presionar el elemento de ayuda en el menú de ayuda. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Si quieres aprender más sobre FreeCAD deberías ir a %1 o presionar el elemento de ayuda en el menú de ayuda. - - + + Gui::Dialog::DockablePlacement - Placement - Ubicación + Placement + Ubicación - - + + Gui::Dialog::DownloadDialog - Canceled. - Cancelado. + Canceled. + Cancelado. - - + + Download + + + + Cancel + Cancelar + + + Close + Cerrar + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + La descarga ha fallado: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Agregar icono + Add icon + Agregar icono - - + + Gui::Dialog::InputVector - Input vector - Introducir vector + Input vector + Introducir vector - Vector - Vector + Vector + Vector - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - Aceptar + OK + Aceptar - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Botones del mouse + Mouse buttons + Botones del mouse - Configuration - Configuración + Configuration + Configuración - Selection: - Selección: + Selection: + Selección: - Panning - Encuadrar + Panning + Encuadrar - Rotation: - Rotación: + Rotation: + Rotación: - Zooming: - Zoom: + Zooming: + Zoom: - - + + Gui::Dialog::ParameterGroup - Expand - Expandir + Expand + Expandir - Add sub-group - Añadir subgrupo + Add sub-group + Añadir subgrupo - Remove group - Eliminar subgrupo + Remove group + Eliminar subgrupo - Rename group - Renombrar grupo + Rename group + Renombrar grupo - Export parameter - Exportar parámetro + Export parameter + Exportar parámetro - Import parameter - Importar parámetro + Import parameter + Importar parámetro - Collapse - Colapsar + Collapse + Colapsar - Do really want to remove this parameter group? - ¿Realmente desea eliminar este grupo de parámetros? + Do really want to remove this parameter group? + ¿Realmente desea eliminar este grupo de parámetros? - Existing sub-group - Subgrupo existente + Existing sub-group + Subgrupo existente - The sub-group '%1' already exists. - El subgrupo '%1' ya existe. + The sub-group '%1' already exists. + El subgrupo '%1' ya existe. - Export parameter to file - Exportar parámetro a archivo + Export parameter to file + Exportar parámetro a archivo - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Importar parámetro de archivo + Import parameter from file + Importar parámetro de archivo - Import Error - Error de importación + Import Error + Error de importación - Reading from '%1' failed. - La lectura de '%1' ha fallado. + Reading from '%1' failed. + La lectura de '%1' ha fallado. - - + + Gui::Dialog::ParameterValue - Change value - Cambiar valor + Change value + Cambiar valor - Remove key - Eliminar clave + Remove key + Eliminar clave - Rename key - Renombrar clave + Rename key + Renombrar clave - New - Nuevo + New + Nuevo - New string item - Nuevo elemento de cadena de texto + New string item + Nuevo elemento de cadena de texto - New float item - Nuevo elemento de coma flotante + New float item + Nuevo elemento de coma flotante - New integer item - Nuevo elemento entero + New integer item + Nuevo elemento entero - New unsigned item - Nuevo elemento sin signo + New unsigned item + Nuevo elemento sin signo - New Boolean item - nuevo elemento booleano + New Boolean item + nuevo elemento booleano - Existing item - Elemento existente + Existing item + Elemento existente - The item '%1' already exists. - El elemento '%1' ya existe. + The item '%1' already exists. + El elemento '%1' ya existe. - - + + Gui::Dialog::Placement - Placement - Ubicación + Placement + Ubicación - OK - Aceptar + OK + Aceptar - Translation: - Traslación: + Translation: + Traslación: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotación: + Rotation: + Rotación: - Angle: - Ángulo: + Angle: + Ángulo: - Axis: - Ejes: + Axis: + Ejes: - Center: - Centro: + Center: + Centro: - Pitch: - Tono: + Pitch: + Tono: - Roll: - Lanzar: + Roll: + Lanzar: - Yaw: - Del desvío: + Yaw: + Del desvío: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Ángulos de Euler + Euler angles + Ángulos de Euler - Apply placement changes immediately - Aplicar los cambios de posición de inmediato + Apply placement changes immediately + Aplicar los cambios de posición de inmediato - Apply incremental changes to object placement - Aplicar cambios incrementales a la posición de los objetos + Apply incremental changes to object placement + Aplicar cambios incrementales a la posición de los objetos - Apply - Aplicar + Apply + Aplicar - Reset - Reiniciar + Reset + Reiniciar - Close - Cerrar + Close + Cerrar - - + + Gui::Dialog::PrintModel - Button - Botón + Button + Botón - Command - Comando + Command + Comando - - + + Gui::Dialog::SceneInspector - Dialog - Diálogo + Dialog + Diálogo - Close - Cerrar + Close + Cerrar - Refresh - Actualizar pantalla + Refresh + Actualizar pantalla - - + + Gui::Dialog::SceneModel - Inventor Tree - Árbol de Inventor + Inventor Tree + Árbol de Inventor - Nodes - Nodos + Nodes + Nodos - - + + Gui::Dialog::TextureMapping - Texture - Textura + Texture + Textura - Texture mapping - Mapeo de textura + Texture mapping + Mapeo de textura - Global - Global + Global + Global - Environment - Entorno + Environment + Entorno - Image files (%1) - Archivos de imagen (%1) + Image files (%1) + Archivos de imagen (%1) - No image - No existe la imagen + No image + No existe la imagen - The specified file is not a valid image file. - El archivo especificado no es un archivo de imagen válido. + The specified file is not a valid image file. + El archivo especificado no es un archivo de imagen válido. - No 3d view - No exista vista 3d + No 3d view + No exista vista 3d - No active 3d view found. - No se encontró una vista activa en 3d. + No active 3d view found. + No se encontró una vista activa en 3d. - - + + Gui::Dialog::Transform - Cancel - Cancelar + Cancel + Cancelar - Transform - Transformar + Transform + Transformar - - + + Gui::DlgTreeWidget - Dialog - Diálogo + Dialog + Diálogo - Items - Elementos + Items + Elementos - OK - Aceptar + OK + Aceptar - Cancel - Cancelar + Cancel + Cancelar - - (Vacio) + + (Vacio) - - + + Gui::DockWnd::CombiView - CombiView - Vista combinada + CombiView + Vista combinada - Project - Proyecto + Project + Proyecto - Tasks - Tareas + Tasks + Tareas - - + + Gui::DockWnd::HelpView - Previous - Previo + Previous + Previo - Next - Siguiente + Next + Siguiente - Home - Inicio + Home + Inicio - Open - Abrir + Open + Abrir - Open file - Abrir archivo + Open file + Abrir archivo - All HTML files (*.html *.htm) - Todos los archivos HTML (*.html *.htm) + All HTML files (*.html *.htm) + Todos los archivos HTML (*.html *.htm) - External browser - Visor de ayuda + External browser + Visor de ayuda - No external browser found. Specify in preferences, please - No se ha encontrado ningún navegador externo. Especifíquelo en preferencias, por favor + No external browser found. Specify in preferences, please + No se ha encontrado ningún navegador externo. Especifíquelo en preferencias, por favor - Starting of %1 failed - Iniciando %1 ha fallado + Starting of %1 failed + Iniciando %1 ha fallado - - + + Gui::DockWnd::PropertyDockView - Property View - Vista de propiedades + Property View + Vista de propiedades - - + + Gui::DockWnd::ReportOutput - Logging - Inicio de sesión + Logging + Inicio de sesión - Warning - Advertencia + Warning + Advertencia - Error - Error + Error + Error - Options - Opciones + Options + Opciones - Clear - Limpiar + Clear + Limpiar - Save As... - Guardar como... + Save As... + Guardar como... - Save Report Output - Guardar salida de informe + Save Report Output + Guardar salida de informe - Plain Text Files (*.txt *.log) - Archivos de texto (*.txt *.log) + Plain Text Files (*.txt *.log) + Archivos de texto (*.txt *.log) - Go to end - Ir al final + Go to end + Ir al final - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Redirigir errores de Python + Redirect Python errors + Redirigir errores de Python - - + + Gui::DockWnd::ReportView - Output - Salida + Output + Salida - Python console - Consola de Python + Python console + Consola de Python - - + + Gui::DockWnd::SelectionView - Property View - Vista de propiedades + Property View + Vista de propiedades - - + + Gui::DockWnd::TaskPanelView - Task View - Vista de Tareas + Task View + Vista de Tareas - - + + Gui::DockWnd::TextBrowser - Could not open file. - No es posible abrir el archivo. + Could not open file. + No es posible abrir el archivo. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Has intentado acceder a la dirección %1 que no está disponible actualmente. Por favor asegurate de que la URL existe y prueba recargando la página. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Has intentado acceder a la dirección %1 que no está disponible actualmente. Por favor asegurate de que la URL existe y prueba recargando la página. - Connecting to %1 - Conectando con %1 + Connecting to %1 + Conectando con %1 - Sending to %1 - Enviando a %1 + Sending to %1 + Enviando a %1 - Reading from %1 - Leyendo de %1 + Reading from %1 + Leyendo de %1 - Download failed: %1. - La descarga ha fallado: %1. + Download failed: %1. + La descarga ha fallado: %1. - Previous - Previo + Previous + Previo - Forward - Adelante + Forward + Adelante - Home - Inicio + Home + Inicio - Refresh - Actualizar pantalla + Refresh + Actualizar pantalla - Copy - Copiar + Copy + Copiar - Select all - Seleccionar todo + Select all + Seleccionar todo - No description for - Sin descripción para + No description for + Sin descripción para - - + + Gui::DocumentModel - Application - Aplicación + Application + Aplicación - Labels & Attributes - Etiquetas & Atributos + Labels & Attributes + Etiquetas & Atributos - - + + Gui::EditorView - Modified file - Archivo modificado + Modified file + Archivo modificado - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Ha sido modificado fuera del editor de código fuente. Desea recargarlo? - Unsaved document - Documento sin guardar + Unsaved document + Documento sin guardar - The document has been modified. + The document has been modified. Do you want to save your changes? - El documento ha sido modificado. + El documento ha sido modificado. Desea guardar los cambios? - FreeCAD macro (*.FCMacro);;Python (*.py) - Macro de FreeCAD (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + Macro de FreeCAD (*.FCMacro);;Python (*.py) - Export PDF - Exportar PDF + Export PDF + Exportar PDF - PDF file (*.pdf) - Archivo PDF (*.pdf) + PDF file (*.pdf) + Archivo PDF (*.pdf) - untitled[*] - Sin título[*] + untitled[*] + Sin título[*] - - Editor - - Editor + - Editor + - Editor - %1 chars removed - %1 carácteres eliminados + %1 chars removed + %1 carácteres eliminados - %1 chars added - %1 carácteres añadidos + %1 chars added + %1 carácteres añadidos - Formatted - Formateado + Formatted + Formateado - - + + Gui::FileChooser - Select a file - Seleccionar un archivo + Select a file + Seleccionar un archivo - Select a directory - Seleccionar un directorio + Select a directory + Seleccionar un directorio - - + + Gui::FileDialog - Save as - Guardar como + Save as + Guardar como - Open - Abrir + Open + Abrir - - + + Gui::FileOptionsDialog - Extended - Extendida + Extended + Extendida - All files (*.*) - Todos los archivos (*.*) + All files (*.*) + Todos los archivos (*.*) - - + + Gui::Flag - Top left - Planta izquierda + Top left + Planta izquierda - Bottom left - Inferior izquierda + Bottom left + Inferior izquierda - Top right - OPlanta derecha + Top right + OPlanta derecha - Bottom right - Inferior derecha + Bottom right + Inferior derecha - Remove - Quitar + Remove + Quitar - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Presione la tecla CTRL y el botón izquierdo del mouse + Press CTRL and left mouse button + Presione la tecla CTRL y el botón izquierdo del mouse - Press middle mouse button - Cliquee el botón central del mouse + Press middle mouse button + Cliquee el botón central del mouse - Press left mouse button - Cliquee el botón izquierdo del mouse + Press left mouse button + Cliquee el botón izquierdo del mouse - Scroll middle mouse button - Despláce botón central del mouse + Scroll middle mouse button + Despláce botón central del mouse - - + + Gui::LocationDialog - Wrong direction - Dirección incorrecta + Wrong direction + Dirección incorrecta - Direction must not be the null vector - La dirección no puede ser el vector nulo + Direction must not be the null vector + La dirección no puede ser el vector nulo - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Definido por el usuario... + User defined... + Definido por el usuario... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Macros + Macros + Macros - - + + Gui::MainWindow - Dimension - Cota + Dimension + Cota - Ready - Preparado + Ready + Preparado - Toggles this toolbar - Muestra u oculta la barra de herramientas + Toggles this toolbar + Muestra u oculta la barra de herramientas - Toggles this dockable window - Alterna esta ventana acoplable + Toggles this dockable window + Alterna esta ventana acoplable - Close All - Cerrar todo + Close All + Cerrar todo - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Descarga comenzada... + Descarga comenzada... - - + + Gui::ProgressBar - Remaining: %1 - Restante: %1 + Remaining: %1 + Restante: %1 - Aborting - Abortando + Aborting + Abortando - Do you really want to abort the operation? - Realmente quieres abortar la operación? + Do you really want to abort the operation? + Realmente quieres abortar la operación? - - + + Gui::ProgressDialog - Remaining: %1 - Restante: %1 + Remaining: %1 + Restante: %1 - Aborting - Abortando + Aborting + Abortando - Do you really want to abort the operation? - Realmente quieres abortar la operación? + Do you really want to abort the operation? + Realmente quieres abortar la operación? - - + + Gui::PropertyEditor::PropertyModel - Property - Propiedad + Property + Propiedad - Value - Valor + Value + Valor - - + + Gui::PropertyView - View - Vista + View + Vista - Data - Datos + Data + Datos - - + + Gui::PythonConsole - System exit - Salida del sistema + System exit + Salida del sistema - The application is still running. + The application is still running. Do you want to exit without saving your data? - La aplicación aún se está ejecutando. + La aplicación aún se está ejecutando. Desea salir sin guardar sus datos? - Python console - Consola de Python + Python console + Consola de Python - Unhandled PyCXX exception. - Excepción de PyCXX no gestionada. + Unhandled PyCXX exception. + Excepción de PyCXX no gestionada. - Unhandled FreeCAD exception. - Excepción de FreeCAD no gestionada. + Unhandled FreeCAD exception. + Excepción de FreeCAD no gestionada. - Unhandled unknown C++ exception. - Excepción desconocida de C++ no gestionada. + Unhandled unknown C++ exception. + Excepción desconocida de C++ no gestionada. - &Copy command - &Comando copiar + &Copy command + &Comando copiar - &Copy history - &Copiar historia + &Copy history + &Copiar historia - Save history as... - Guardar historioa como... + Save history as... + Guardar historioa como... - Insert file name... - Insertar nombre de archivo... + Insert file name... + Insertar nombre de archivo... - Save History - Guardar historia + Save History + Guardar historia - Macro Files (*.FCMacro *.py) - Archivos de macro (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Archivos de macro (*.FCMacro *.py) - Insert file name - Introducir nombre de archivo + Insert file name + Introducir nombre de archivo - All Files (*.*) - Todos los archivos (*.*) + All Files (*.*) + Todos los archivos (*.*) - Python Input Dialog - Diálogo de entrada de Python + Python Input Dialog + Diálogo de entrada de Python - Unhandled std C++ exception. - Excepción de std C++ no gestionada. + Unhandled std C++ exception. + Excepción de std C++ no gestionada. - Word wrap - Ajuste de texto + Word wrap + Ajuste de texto - &Copy - &Copiar + &Copy + &Copiar - &Paste - &Pegar + &Paste + &Pegar - Select All - Seleccionar todo + Select All + Seleccionar todo - - + + Clear console + + + + Gui::PythonEditor - Comment - Comentar + Comment + Comentar - Uncomment - Quitar comentario + Uncomment + Quitar comentario - - + + Gui::PythonInputField - OK - Aceptar + OK + Aceptar - Clear - Limpiar + Clear + Limpiar - - + + Gui::RecentFilesAction - Open file %1 - Abrir archivo %1 + Open file %1 + Abrir archivo %1 - File not found - Archivo no encontrado + File not found + Archivo no encontrado - The file '%1' cannot be opened. - El archivo '%1' no se puede abrir. + The file '%1' cannot be opened. + El archivo '%1' no se puede abrir. - - + + Gui::SelectModule - Select module - Seleccionar módulo + Select module + Seleccionar módulo - Open %1 as - Abrir %1 como + Open %1 as + Abrir %1 como - Select - Seleccionar + Select + Seleccionar - - + + Gui::StdCmdDescription - Help - Ayuda + Help + Ayuda - Des&cription - Des&cripción + Des&cription + Des&cripción - Long description of commands - Descripción larga de comandos + Long description of commands + Descripción larga de comandos - - + + Gui::StdCmdDownloadOnlineHelp - Help - Ayuda + Help + Ayuda - Download online help - Descargar ayuda online + Download online help + Descargar ayuda online - Download %1's online help - Descargar %1's ayuda online + Download %1's online help + Descargar %1's ayuda online - Non-existing directory - Directorio no existente + Non-existing directory + Directorio no existente - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - El directorio '%1' no existe. + El directorio '%1' no existe. Desea especificar un directorio existente? - Missing permission - Permiso perdido + Missing permission + Permiso perdido - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - No tiene permisos de escritura para '%1' + No tiene permisos de escritura para '%1' Desea especificar otro directorio? - Stop downloading - Detener la descarga + Stop downloading + Detener la descarga - - + + Gui::StdCmdPythonHelp - Tools - Herramientas + Tools + Herramientas - Python Modules - Módulos de Python + Python Modules + Módulos de Python - Opens a browser to show the Python modules - Abre un explorador para mostrar los módulos de Python + Opens a browser to show the Python modules + Abre un explorador para mostrar los módulos de Python - - + + Gui::TaskBoxAngle - Angle - Ángulo + Angle + Ángulo - - + + Gui::TaskBoxPosition - Position - Posición + Position + Posición - - + + Gui::TaskView::TaskAppearance - Display mode: - Modo de visualización: + Display mode: + Modo de visualización: - Plot mode: - Modo de impresión: + Plot mode: + Modo de impresión: - Point size: - Tamaño de punto: + Point size: + Tamaño de punto: - Line width: - Ancho de línea: + Line width: + Ancho de línea: - Transparency: - Transparencia: + Transparency: + Transparencia: - Appearance - Apariencia + Appearance + Apariencia - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Editar + Edit + Editar - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Apariencia + Appearance + Apariencia - ... - ... + ... + ... - edit selection - Editar selección + edit selection + Editar selección - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Cliquee el botón izquierdo del mouse + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Inglés + English + Inglés - - + + Gui::TreeDockWidget - Tree view - Vista en árbol + Tree view + Vista en árbol - - + + Gui::TreeWidget - Create group... - Crear grupo... + Create group... + Crear grupo... - Create a group - Crear un grupo + Create a group + Crear un grupo - Group - Grupo + Group + Grupo - Rename - Renombrar + Rename + Renombrar - Rename object - Renombrar objeto + Rename object + Renombrar objeto - Labels & Attributes - Etiquetas & Atributos + Labels & Attributes + Etiquetas & Atributos - Application - Aplicación + Application + Aplicación - Finish editing - Finalizar la edición + Finish editing + Finalizar la edición - Finish editing object - Finalizar edición de objeto + Finish editing object + Finalizar edición de objeto - Activate document - Activar documento + Activate document + Activar documento - Activate document %1 - Activar documento %1 + Activate document %1 + Activar documento %1 - - + + Gui::View3DInventor - Export PDF - Exportar PDF + Export PDF + Exportar PDF - PDF file (*.pdf) - Archivo PDF (*.pdf) + PDF file (*.pdf) + Archivo PDF (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Seleccionar el escenario '%1' + Select the '%1' workbench + Seleccionar el escenario '%1' - - + + Position - Form - Formulario + Form + Formulario - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Ajuste de rejilla en + Grid Snap in + Ajuste de rejilla en - - + + QDockWidget - Tree view - Vista en árbol + Tree view + Vista en árbol - Property view - Vista de Propiedades + Property view + Vista de Propiedades - Selection view - Vista de selección + Selection view + Vista de selección - Report view - Vista de informe + Report view + Vista de informe - Task View - Vista de Tareas + Task View + Vista de Tareas - Combo View - Vista combinada + Combo View + Vista combinada - Toolbox - Caja de herramientas + Toolbox + Caja de herramientas - Python console - Consola de Python + Python console + Consola de Python - Display properties - Propiedades de visualización + Display properties + Propiedades de visualización - - + + QObject - General - General + General + General - Display - Visualización + Display + Visualización - Unknown filetype - Tipo de archivo desconocido + Unknown filetype + Tipo de archivo desconocido - Cannot open unknown filetype: %1 - No es posible abrir el tipo de archivo desconocido: %1 + Cannot open unknown filetype: %1 + No es posible abrir el tipo de archivo desconocido: %1 - Cannot save to unknown filetype: %1 - No es posible guardar el tipo de archivo desconocido: %1 + Cannot save to unknown filetype: %1 + No es posible guardar el tipo de archivo desconocido: %1 - Workbench failure - Fracaso de escenario + Workbench failure + Fracaso de escenario - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Incapaz de iniciar Qt Assistant (%1) + Unable to launch Qt Assistant (%1) + Incapaz de iniciar Qt Assistant (%1) - Exception - Excepción + Exception + Excepción - Open document - Abrir documento + Open document + Abrir documento - Import file - Importar archivo + Import file + Importar archivo - Export file - Exportar archivo + Export file + Exportar archivo - Printing... - Imprimiendo... + Printing... + Imprimiendo... - Cannot load workbench - No es posible cargar el escenario + Cannot load workbench + No es posible cargar el escenario - A general error occurred while loading the workbench - Un error general ocurrio mientras se cargaba el escenario + A general error occurred while loading the workbench + Un error general ocurrio mientras se cargaba el escenario - File not found - Archivo no encontrado + File not found + Archivo no encontrado - Cannot open file %1 - No es posible abrir el archivo %1 + Cannot open file %1 + No es posible abrir el archivo %1 - Save views... - Guardar vistas... + Save views... + Guardar vistas... - Load views... - Cargar vistas... + Load views... + Cargar vistas... - Freeze view - Congelar vista + Freeze view + Congelar vista - Clear views - Limpiar vistas + Clear views + Limpiar vistas - Restore view &%1 - Restaurar vista &%1 + Restore view &%1 + Restaurar vista &%1 - Save frozen views - Guardar vistas congeladas + Save frozen views + Guardar vistas congeladas - Frozen views (*.cam) - Vistas congeladas (*.cam) + Frozen views (*.cam) + Vistas congeladas (*.cam) - Restore views - Restaurar vistas + Restore views + Restaurar vistas - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - La importación de las vistas restauradas podría limpiar las vistas ya almacenadas. + La importación de las vistas restauradas podría limpiar las vistas ya almacenadas. Desea continuar? - Restore frozen views - Restaurar vistas congeladas + Restore frozen views + Restaurar vistas congeladas - Cannot open file '%1'. - No es posible abrir el archivo '%1'. + Cannot open file '%1'. + No es posible abrir el archivo '%1'. - Docked - Acoplado + Docked + Acoplado - Undocked - Sin acoplar + Undocked + Sin acoplar - Fullscreen - Pantalla completa + Fullscreen + Pantalla completa - files - archivos + files + archivos - Save picture - Guardar imagen + Save picture + Guardar imagen - New sub-group - Nuevo subgrupo + New sub-group + Nuevo subgrupo - Enter the name: - Introducir el nombre: + Enter the name: + Introducir el nombre: - New text item - Nuevo elemento de texto + New text item + Nuevo elemento de texto - Enter your text: - Introduzca su texto: + Enter your text: + Introduzca su texto: - New integer item - Nuevo elemento entero + New integer item + Nuevo elemento entero - Enter your number: - Introduzca su número: + Enter your number: + Introduzca su número: - New unsigned item - Nuevo elemento sin signo + New unsigned item + Nuevo elemento sin signo - New float item - Nuevo elemento de coma flotante + New float item + Nuevo elemento de coma flotante - New Boolean item - nuevo elemento booleano + New Boolean item + nuevo elemento booleano - Choose an item: - Seleccionar un elemento: + Choose an item: + Seleccionar un elemento: - Rename group - Renombrar grupo + Rename group + Renombrar grupo - The group '%1' cannot be renamed. - El grupo '%1' no puede renombrarse. + The group '%1' cannot be renamed. + El grupo '%1' no puede renombrarse. - Existing group - Grupo existente + Existing group + Grupo existente - The group '%1' already exists. - El grupo '%1' ya existe. + The group '%1' already exists. + El grupo '%1' ya existe. - Change value - Cambiar valor + Change value + Cambiar valor - Save document under new filename... - Guardar documento con un nombre de archivo nuevo... + Save document under new filename... + Guardar documento con un nombre de archivo nuevo... - Saving aborted - Guardar abortado + Saving aborted + Guardar abortado - Unsaved document - Documento sin guardar + Unsaved document + Documento sin guardar - Save document before close? - Guardar documento antes de cerrar? + Save document before close? + Guardar documento antes de cerrar? - Save Macro - Guardar macro + Save Macro + Guardar macro - Finish - Terminado + Finish + Terminado - Clear - Limpiar + Clear + Limpiar - Cancel - Cancelar + Cancel + Cancelar - Inner - Interior + Inner + Interior - Outer - Exterior + Outer + Exterior - No Browser - Ningún navegador + No Browser + Ningún navegador - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Incapaz de abrir su navegador. + Incapaz de abrir su navegador. Por favor abra una ventana del navegador y escriba en ella: http://localhost:%1. - No Server - Ningún servidor + No Server + Ningún servidor - Unable to start the server to port %1: %2. - Incapaz de iniciar el servidor al puerto %1: %2. + Unable to start the server to port %1: %2. + Incapaz de iniciar el servidor al puerto %1: %2. - Unable to open your system browser. - Incapaz de abrir su navegador del sistema. + Unable to open your system browser. + Incapaz de abrir su navegador del sistema. - Options... - Opciones... + Options... + Opciones... - Out of memory - Memoria insuficiente + Out of memory + Memoria insuficiente - Not enough memory available to display the data. - Insuficiente memoria disponible para mostrar los datos. + Not enough memory available to display the data. + Insuficiente memoria disponible para mostrar los datos. - Cannot find file %1 - No se puede encontrar el archivo %1 + Cannot find file %1 + No se puede encontrar el archivo %1 - Cannot find file %1 neither in %2 nor in %3 - No se pueden encontrar los archivos %1 ni %2 ni %3 + Cannot find file %1 neither in %2 nor in %3 + No se pueden encontrar los archivos %1 ni %2 ni %3 - Save %1 Document - Guardar el documento %1 + Save %1 Document + Guardar el documento %1 - %1 document (*.FCStd) - %1 documento (*.FCStd) + %1 document (*.FCStd) + %1 documento (*.FCStd) - Save As - Guardar como + Save As + Guardar como - %1 already exists. + %1 already exists. Do you want to replace it? - %1 ya existe. + %1 ya existe. Desea reemplazarlo? - Document not closable - El documento no se puede cerrar + Document not closable + El documento no se puede cerrar - The document is not closable for the moment. - El documento no se puede cerrar por el momento. + The document is not closable for the moment. + El documento no se puede cerrar por el momento. - No OpenGL - Sin OpenGL + No OpenGL + Sin OpenGL - This system does not support OpenGL - Este sistema no es compatible con OpenGL + This system does not support OpenGL + Este sistema no es compatible con OpenGL - Help - Ayuda + Help + Ayuda - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - No se puede cargar la documentación. + No se puede cargar la documentación. Para cargarlo es necesario Qt 4.4 o superior. - %1 Help - %1 Ayuda + %1 Help + %1 Ayuda - Exporting PDF... - Exportando a PDF... + Exporting PDF... + Exportando a PDF... - Wrong selection - Selección incorrecta + Wrong selection + Selección incorrecta - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Sólo un objeto seleccionado. Seleccione dos objetos. Tenga en cuenta el punto en que hace clic. + Sólo un objeto seleccionado. Seleccione dos objetos. Tenga en cuenta el punto en que hace clic. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Seleccione dos objetos. Tenga en cuenta el punto en que hace clic. + Seleccione dos objetos. Tenga en cuenta el punto en que hace clic. - New boolean item - Nuevo elemento booleano + New boolean item + Nuevo elemento booleano - Navigation styles - Estilos de navegación + Navigation styles + Estilos de navegación - %1 navigation - %1 navegación + %1 navigation + %1 navegación - Move annotation - Mover anotación + Move annotation + Mover anotación - Transform - Transformar + Transform + Transformar - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - El documento está en modo de edición y no puede ser cerrado en este momento. + El documento está en modo de edición y no puede ser cerrado en este momento. Tienes que finzalizar o cancelar la edición en el panel de tareas. - - + + + StdBoxSelection + + Standard-View + Vista estándar + + + Box selection + + + + StdCmdAbout - Help - Ayuda + Help + Ayuda - &About %1 - &Acerca de %1 + &About %1 + &Acerca de %1 - About %1 - Acerca de %1 + About %1 + Acerca de %1 - - + + StdCmdAboutQt - Help - Ayuda + Help + Ayuda - About &Qt - Acerca de &Qt + About &Qt + Acerca de &Qt - About Qt - Acerca de Qt + About Qt + Acerca de Qt - - + + StdCmdActivateNextWindow - Window - Ventana + Window + Ventana - Ne&xt - &Siguiente + Ne&xt + &Siguiente - Activate next window - Activar ventana siguiente + Activate next window + Activar ventana siguiente - - + + StdCmdActivatePrevWindow - Window - Ventana + Window + Ventana - Pre&vious - Pre&via + Pre&vious + Pre&via - Activate previous window - Activar ventana previa + Activate previous window + Activar ventana previa - - + + + StdCmdAlignment + + Edit + Editar + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Ventana + Window + Ventana - Arrange &Icons - Organizar &Iconos + Arrange &Icons + Organizar &Iconos - Arrange Icons - Organizar iconos + Arrange Icons + Organizar iconos - - + + StdCmdAxisCross - Standard-View - Vista estándar + Standard-View + Vista estándar - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Ventana + Window + Ventana - &Cascade - &Cascada + &Cascade + &Cascada - Tile pragmatic - Mosaico pragmático + Tile pragmatic + Mosaico pragmático - - + + StdCmdCloseActiveWindow - Window - Ventana + Window + Ventana - Cl&ose - &Cerrar + Cl&ose + &Cerrar - Close active window - Cerrar la ventana activa + Close active window + Cerrar la ventana activa - - + + StdCmdCloseAllWindows - Window - Ventana + Window + Ventana - Close Al&l - Cerrar &Todo + Close Al&l + Cerrar &Todo - Close all windows - Cerrar todas las ventanas + Close all windows + Cerrar todas las ventanas - - + + StdCmdCommandLine - Tools - Herramientas + Tools + Herramientas - Start command &line... - &Iniciar línea de comandos... + Start command &line... + &Iniciar línea de comandos... - Opens the command line in the console - Abre la línea de comandos en la consola + Opens the command line in the console + Abre la línea de comandos en la consola - - + + StdCmdCopy - Edit - Editar + Edit + Editar - C&opy - C&opiar + C&opy + C&opiar - Copy operation - Operación de copia + Copy operation + Operación de copia - - + + StdCmdCut - Edit - Editar + Edit + Editar - &Cut - &Cortar + &Cut + &Cortar - Cut out - Recortar + Cut out + Recortar - - + + StdCmdDDuplicateSelection - Edit - Editar + Edit + Editar - Duplicate selection - Duplicar la selección + Duplicate selection + Duplicar la selección - Put duplicates of the selected objects to the active document - Ponga los duplicados de los objetos seleccionados en el documento activo + Put duplicates of the selected objects to the active document + Ponga los duplicados de los objetos seleccionados en el documento activo - - + + StdCmdDelete - Edit - Editar + Edit + Editar - &Delete - &Borrar + &Delete + &Borrar - Deletes the selected objects - Borra los elementos seleccionados + Deletes the selected objects + Borra los elementos seleccionados - - + + StdCmdDemoMode - Standard-View - Vista estándar + Standard-View + Vista estándar - View turntable... - Ver torno... + View turntable... + Ver torno... - View turntable - Ver torno + View turntable + Ver torno - - + + StdCmdDlgCustomize - Tools - Herramientas + Tools + Herramientas - Cu&stomize... - &Personalizar... + Cu&stomize... + &Personalizar... - Customize toolbars and command bars - Personalizar barras de herramientas y comandos + Customize toolbars and command bars + Personalizar barras de herramientas y comandos - - + + StdCmdDlgMacroExecute - Macros ... - Macros... + Macros ... + Macros... - Opens a dialog to let you execute a recorded macro - Abre un cuadro de diálogo que te permite ejecutar una macro grabada + Opens a dialog to let you execute a recorded macro + Abre un cuadro de diálogo que te permite ejecutar una macro grabada - Macro - Macro + Macro + Macro - - + + StdCmdDlgMacroExecuteDirect - Macro - Macro + Macro + Macro - Execute macro - Ejecutar macro + Execute macro + Ejecutar macro - Execute the macro in the editor - Ejecutar macro en el editor + Execute the macro in the editor + Ejecutar macro en el editor - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Grabación de macro... + &Macro recording ... + &Grabación de macro... - Opens a dialog to record a macro - Abre un cuadro de diálogo para grabar una macro + Opens a dialog to record a macro + Abre un cuadro de diálogo para grabar una macro - Macro - Macro + Macro + Macro - - + + StdCmdDlgParameter - Tools - Herramientas + Tools + Herramientas - E&dit parameters ... - &Editar parámetros... + E&dit parameters ... + &Editar parámetros... - Opens a Dialog to edit the parameters - Abre un cuadro de diálogo para editar los parametros + Opens a Dialog to edit the parameters + Abre un cuadro de diálogo para editar los parametros - - + + StdCmdDlgPreferences - Tools - Herramientas + Tools + Herramientas - &Preferences ... - &Preferencias... + &Preferences ... + &Preferencias... - Opens a Dialog to edit the preferences - Abre un cuadro de diálogo para editar las preferencias + Opens a Dialog to edit the preferences + Abre un cuadro de diálogo para editar las preferencias - - + + StdCmdDockViewMenu - View - Vista + View + Vista - Vie&ws - &Vistas + Vie&ws + &Vistas - Toggles this window - Conmutar esta ventana + Toggles this window + Conmutar esta ventana - - + + StdCmdDrawStyle - Standard-View - Vista estándar + Standard-View + Vista estándar - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Editar + + + Duplicate selection + Duplicar la selección + + + Put duplicates of the selected objects to the active document + Ponga los duplicados de los objetos seleccionados en el documento activo + + + + StdCmdEdit + + Edit + Editar + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Archivo + File + Archivo - &Export... - &Exportar... + &Export... + &Exportar... - Export an object in the active document - Exportar un objeto en el documento activo + Export an object in the active document + Exportar un objeto en el documento activo - Supported formats - Formatos soportados + Supported formats + Formatos soportados - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Herramientas + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Archivo + File + Archivo - &Recompute - &Recalcular + &Recompute + &Recalcular - Recompute feature or document - Recalcular caracteristicas o documento + Recompute feature or document + Recalcular caracteristicas o documento - - + + StdCmdFreeCADWebsite - Help - Ayuda + Help + Ayuda - FreeCAD Website - Sitio web de FreeCAD + FreeCAD Website + Sitio web de FreeCAD - The FreeCAD website - El sitio web de FreeCAD + The FreeCAD website + El sitio web de FreeCAD - - + + StdCmdFreezeViews - Standard-View - Vista estándar + Standard-View + Vista estándar - Freeze display - Congelar visualización + Freeze display + Congelar visualización - Freezes the current view position - Congelar la posición de la vista actual + Freezes the current view position + Congelar la posición de la vista actual - - + + StdCmdHideObjects - Standard-View - Vista estándar + Standard-View + Vista estándar - Hide all objects - Ocultar todos los objetos + Hide all objects + Ocultar todos los objetos - Hide all objects in the document - Ocultar todos los objetos en el documento + Hide all objects in the document + Ocultar todos los objetos en el documento - - + + StdCmdHideSelection - Standard-View - Vista estándar + Standard-View + Vista estándar - Hide selection - Ocultar selección + Hide selection + Ocultar selección - Hide all selected objects - Ocultar todos los objetos seleccionados + Hide all selected objects + Ocultar todos los objetos seleccionados - - + + StdCmdImport - File - Archivo + File + Archivo - &Import... - &Importar... + &Import... + &Importar... - Import a file in the active document - Importar un archivo en el documento activo + Import a file in the active document + Importar un archivo en el documento activo - Supported formats - Formatos soportados + Supported formats + Formatos soportados - All files (*.*) - Todos los archivos (*.*) + All files (*.*) + Todos los archivos (*.*) - - + + StdCmdMacroStartDebug - Macro - Macro + Macro + Macro - Debug macro - Depurar macro + Debug macro + Depurar macro - Start debugging of macro - Iniciar depuración de macro + Start debugging of macro + Iniciar depuración de macro - - + + StdCmdMacroStepOver - Macro - Macro + Macro + Macro - Step over - Pasar al siguiente + Step over + Pasar al siguiente - - + + StdCmdMacroStopDebug - Macro - Macro + Macro + Macro - Stop debugging - Parar depuración + Stop debugging + Parar depuración - Stop debugging of macro - Parar depuración de macro + Stop debugging of macro + Parar depuración de macro - - + + StdCmdMacroStopRecord - Macro - Macro + Macro + Macro - S&top macro recording - &Detener la grabaciṕon de la macro + S&top macro recording + &Detener la grabaciṕon de la macro - Stop the macro recording session - Detener la sesión de grabación de la macro + Stop the macro recording session + Detener la sesión de grabación de la macro - - + + StdCmdMeasureDistance - View - Vista + View + Vista - Measure distance - Medir distancia + Measure distance + Medir distancia - - + + StdCmdMeasurementSimple - Tools - Herramientas + Tools + Herramientas - Mesure distance - Medir distancia + Mesure distance + Medir distancia - Measures distance between two selected objects - Medir distancias entre dos objetos seleccionados + Measures distance between two selected objects + Medir distancias entre dos objetos seleccionados - - + + Measure distance + Medir distancia + + + StdCmdMergeProjects - File - Archivo + File + Archivo - Merge project... - Fusionar proyecto... + Merge project... + Fusionar proyecto... - Merge project - Fusionar proyecto + Merge project + Fusionar proyecto - %1 document (*.fcstd) - Documento %1(*.fcstd) + %1 document (*.fcstd) + Documento %1(*.fcstd) - Cannot merge project with itself. - No se puede fusionar el proyecto consigo mismo. + Cannot merge project with itself. + No se puede fusionar el proyecto consigo mismo. - - + + StdCmdNew - File - Archivo + File + Archivo - &New - &Nuevo + &New + &Nuevo - Create a new empty document - Crear un documento vacío nuevo + Create a new empty document + Crear un documento vacío nuevo - - + + StdCmdOnlineHelp - Help - Ayuda + Help + Ayuda - Show help to the application - Mostrar ayuda de la aplicación + Show help to the application + Mostrar ayuda de la aplicación - - + + StdCmdOnlineHelpPython - Help - Ayuda + Help + Ayuda - Python Manuals - Manuales de Python + Python Manuals + Manuales de Python - Show the Python documentation - Mostrar la documentación de Python + Show the Python documentation + Mostrar la documentación de Python - - + + StdCmdOnlineHelpWebsite - Help - Ayuda + Help + Ayuda - Help Website - Sitio web de ayuda + Help Website + Sitio web de ayuda - The website where the help is maintained - El sitio web donde se mantiene la ayuda + The website where the help is maintained + El sitio web donde se mantiene la ayuda - - + + StdCmdOpen - File - Archivo + File + Archivo - &Open... - &Abrir... + &Open... + &Abrir... - Open a document or import files - Abrir un documento o importar archivos + Open a document or import files + Abrir un documento o importar archivos - Supported formats - Formatos soportados + Supported formats + Formatos soportados - All files (*.*) - Todos los archivos (*.*) + All files (*.*) + Todos los archivos (*.*) - - + + StdCmdPaste - Edit - Editar + Edit + Editar - &Paste - &Pegar + &Paste + &Pegar - Paste operation - Operación de pegar + Paste operation + Operación de pegar - - + + StdCmdPlacement - Edit - Editar + Edit + Editar - Placement... - Ubicación... + Placement... + Ubicación... - Place the selected objects - Sitúe los objetos seleccionados + Place the selected objects + Sitúe los objetos seleccionados - - + + StdCmdPrint - File - Archivo + File + Archivo - &Print... - &Imprimir... + &Print... + &Imprimir... - Print the document - Imprimir el documento + Print the document + Imprimir el documento - - + + StdCmdPrintPdf - File - Archivo + File + Archivo - &Export PDF... - &Exportar PDF... + &Export PDF... + &Exportar PDF... - Export the document as PDF - Exportar el documento como PDF + Export the document as PDF + Exportar el documento como PDF - - + + StdCmdPrintPreview - File - Archivo + File + Archivo - &Print preview... - &Print preview... + &Print preview... + &Print preview... - Print the document - Imprimir el documento + Print the document + Imprimir el documento - Print preview - Vista previa de impresión + Print preview + Vista previa de impresión - - + + StdCmdProjectInfo - File - Archivo + File + Archivo - Project i&nformation... - &Información del proyecto... + Project i&nformation... + &Información del proyecto... - Show details of the currently active project - Mostrar detalles del proyecto activo actual + Show details of the currently active project + Mostrar detalles del proyecto activo actual - - + + StdCmdProjectUtil - Tools - Herramientas + Tools + Herramientas - Project utility... - Project utility... + Project utility... + Project utility... - Utility to extract or create project files - Herramienta para extraer o crear archivos de proyectos + Utility to extract or create project files + Herramienta para extraer o crear archivos de proyectos - - + + StdCmdPythonWebsite - Help - Ayuda + Help + Ayuda - Python Website - Sitio web de Python + Python Website + Sitio web de Python - The official Python website - El sitio web oficial de Python + The official Python website + El sitio web oficial de Python - - + + StdCmdQuit - File - Archivo + File + Archivo - E&xit - &Salir + E&xit + &Salir - Quits the application - Salir de la aplicación + Quits the application + Salir de la aplicación - - + + StdCmdRandomColor - File - Archivo + File + Archivo - Random color - Color aleatorio + Random color + Color aleatorio - - + + StdCmdRecentFiles - File - Archivo + File + Archivo - Recent files - Archivos recientes + Recent files + Archivos recientes - Recent file list - Lista de archivos recientes + Recent file list + Lista de archivos recientes - - + + StdCmdRedo - Edit - Editar + Edit + Editar - &Redo - &Rehacer + &Redo + &Rehacer - Redoes a previously undone action - Rehace una acción previa de deshacer + Redoes a previously undone action + Rehace una acción previa de deshacer - - + + StdCmdRefresh - Edit - Editar + Edit + Editar - &Refresh - &Actualizar pantalla + &Refresh + &Actualizar pantalla - Recomputes the current active document - Recalcula el documento activo actual + Recomputes the current active document + Recalcula el documento activo actual - - + + StdCmdSave - File - Archivo + File + Archivo - &Save - &Guardar + &Save + &Guardar - Save the active document - Guarda el documento activo + Save the active document + Guarda el documento activo - - + + StdCmdSaveAs - File - Archivo + File + Archivo - Save &As... - Guardar &como... + Save &As... + Guardar &como... - Save the active document under a new file name - Guarda el documento activo con un nombre de archivo nuevo + Save the active document under a new file name + Guarda el documento activo con un nombre de archivo nuevo - - + + StdCmdSceneInspector - Tools - Herramientas + Tools + Herramientas - Scene inspector... - Inspector de escena... + Scene inspector... + Inspector de escena... - Scene inspector - Inspector de escena + Scene inspector + Inspector de escena - - + + StdCmdSelectAll - Edit - Editar + Edit + Editar - Select &All - Seleccionar &todo + Select &All + Seleccionar &todo - Select all - Seleccionar todo + Select all + Seleccionar todo - - + + StdCmdSetAppearance - Standard-View - Vista estándar + Standard-View + Vista estándar - Appearance... - Apariencia... + Appearance... + Apariencia... - Sets the display properties of the selected object - Establece las propiedades de visualización de los objetos seleccionados + Sets the display properties of the selected object + Establece las propiedades de visualización de los objetos seleccionados - - + + StdCmdShowObjects - Standard-View - Vista estándar + Standard-View + Vista estándar - Show all objects - Mostrar todos los objetos + Show all objects + Mostrar todos los objetos - Show all objects in the document - Mostrar todos los objetos en el documento + Show all objects in the document + Mostrar todos los objetos en el documento - - + + StdCmdShowSelection - Standard-View - Vista estándar + Standard-View + Vista estándar - Show selection - Mostrar selección + Show selection + Mostrar selección - Show all selected objects - Mostrar todos los objetos seleccionados + Show all selected objects + Mostrar todos los objetos seleccionados - - + + StdCmdStatusBar - View - Vista + View + Vista - Status bar - Barra de estado + Status bar + Barra de estado - Toggles the status bar - Conmutar la barra de estado + Toggles the status bar + Conmutar la barra de estado - - + + StdCmdTextureMapping - Tools - Herramientas + Tools + Herramientas - Texture mapping... - Mapeo de textura... + Texture mapping... + Mapeo de textura... - Texture mapping - Mapeo de textura + Texture mapping + Mapeo de textura - - + + StdCmdTileWindows - Window - Ventana + Window + Ventana - &Tile - &Mosaico + &Tile + &Mosaico - Tile the windows - Poner las ventanas en mosaico + Tile the windows + Poner las ventanas en mosaico - - + + StdCmdToggleBreakpoint - Macro - Macro + Macro + Macro - Toggle breakpoint - Conmutar punto de parada + Toggle breakpoint + Conmutar punto de parada - - + + StdCmdToggleClipPlane - Standard-View - Vista estándar + Standard-View + Vista estándar - Clipping plane - Plano de recorte + Clipping plane + Plano de recorte - Toggles clipping plane for active view - Conmuta el plano de recorte para la vista activa + Toggles clipping plane for active view + Conmuta el plano de recorte para la vista activa - - + + StdCmdToggleNavigation - Standard-View - Vista estándar + Standard-View + Vista estándar - Toggle navigation/Edit mode - Alternar en modo Navegación/Edición + Toggle navigation/Edit mode + Alternar en modo Navegación/Edición - Toggle between navigation and edit mode - Alternar entre el modo de navegación y edición + Toggle between navigation and edit mode + Alternar entre el modo de navegación y edición - - + + StdCmdToggleObjects - Standard-View - Vista estándar + Standard-View + Vista estándar - Toggle all objects - Conmutar todos los objetos + Toggle all objects + Conmutar todos los objetos - Toggles visibility of all objects in the active document - Conmuta la visibilidad de todos los objetos en el documento activo + Toggles visibility of all objects in the active document + Conmuta la visibilidad de todos los objetos en el documento activo - - + + StdCmdToggleSelectability - Standard-View - Vista estándar + Standard-View + Vista estándar - Toggle selectability - Conmutar selectividad + Toggle selectability + Conmutar selectividad - Toggles the property of the objects to get selected in the 3D-View - Conmutar la propiedad de los objetos de ser seleccionados en la Vista 3D + Toggles the property of the objects to get selected in the 3D-View + Conmutar la propiedad de los objetos de ser seleccionados en la Vista 3D - - + + StdCmdToggleVisibility - Standard-View - Vista estándar + Standard-View + Vista estándar - Toggle visibility - Conmutar visibilidad + Toggle visibility + Conmutar visibilidad - Toggles visibility - Conmuta la visibilidad + Toggles visibility + Conmuta la visibilidad - - + + StdCmdToolBarMenu - View - Vista + View + Vista - Tool&bars - &Barras de herramientas + Tool&bars + &Barras de herramientas - Toggles this window - Conmutar esta ventana + Toggles this window + Conmutar esta ventana - - + + StdCmdTransform - Edit - Editar + Edit + Editar - Transform... - Transformar... + Transform... + Transformar... - Transform the geometry of selected objects - Transformar la geometría de los objetos seleccionados + Transform the geometry of selected objects + Transformar la geometría de los objetos seleccionados - - + + StdCmdTreeSelection - View - Vista + View + Vista - Go to selection - Ir a la selección + Go to selection + Ir a la selección - Scroll to first selected item - Desplazarse al primer elemento seleccionado + Scroll to first selected item + Desplazarse al primer elemento seleccionado - - + + StdCmdUndo - Edit - Editar + Edit + Editar - &Undo - &Deshacer + &Undo + &Deshacer - Undo exactly one action - Deshacer exactamente una acción + Undo exactly one action + Deshacer exactamente una acción - - + + StdCmdUserInterface - View - Vista + View + Vista - Dock views - Acoplar vistas + Dock views + Acoplar vistas - Dock all top-level views - Acoplar todas las vistas de nivel superior + Dock all top-level views + Acoplar todas las vistas de nivel superior - - + + StdCmdViewAxo - Standard-View - Vista estándar + Standard-View + Vista estándar - Axometric - Axonométrica + Axometric + Axonométrica - Set to axometric view - Establecer la vista axonométrica + Set to axometric view + Establecer la vista axonométrica - - + + StdCmdViewBottom - Standard-View - Vista estándar + Standard-View + Vista estándar - Bottom - Inferior + Bottom + Inferior - Set to bottom view - Establece la vista inferior + Set to bottom view + Establece la vista inferior - - + + StdCmdViewCreate - Standard-View - Vista estándar + Standard-View + Vista estándar - Create new view - Crear una vista nueva + Create new view + Crear una vista nueva - Creates a new view window for the active document - Crea una ventana de vista nueva para el documento activo + Creates a new view window for the active document + Crea una ventana de vista nueva para el documento activo - - + + StdCmdViewExample1 - Standard-View - Vista estándar + Standard-View + Vista estándar - Inventor example #1 - Inventor ejemplo #1 + Inventor example #1 + Inventor ejemplo #1 - Shows a 3D texture with manipulator - Muestra una textura 3D con manipulador + Shows a 3D texture with manipulator + Muestra una textura 3D con manipulador - - + + StdCmdViewExample2 - Standard-View - Vista estándar + Standard-View + Vista estándar - Inventor example #2 - Inventor ejemplo #2 + Inventor example #2 + Inventor ejemplo #2 - Shows spheres and drag-lights - Muestra esferas y luces arrastradas + Shows spheres and drag-lights + Muestra esferas y luces arrastradas - - + + StdCmdViewExample3 - Standard-View - Vista estándar + Standard-View + Vista estándar - Inventor example #3 - Inventor ejemplo #3 + Inventor example #3 + Inventor ejemplo #3 - Shows a animated texture - Muestra una textura animada + Shows a animated texture + Muestra una textura animada - - + + StdCmdViewFitAll - Standard-View - Vista estándar + Standard-View + Vista estándar - Fit all - Ajustar todo + Fit all + Ajustar todo - Fits the whole content on the screen - Ajustar el contenido completo a la pantalla + Fits the whole content on the screen + Ajustar el contenido completo a la pantalla - - + + StdCmdViewFitSelection - Standard-View - Vista estándar + Standard-View + Vista estándar - Fit selection - Ajustar a la selección + Fit selection + Ajustar a la selección - Fits the selected content on the screen - Ajustar el contenido seleccionado a la pantalla + Fits the selected content on the screen + Ajustar el contenido seleccionado a la pantalla - - + + StdCmdViewFront - Standard-View - Vista estándar + Standard-View + Vista estándar - Front - Alzado + Front + Alzado - Set to front view - Establecer vista alzado + Set to front view + Establecer vista alzado - - + + StdCmdViewIvIssueCamPos - Standard-View - Vista estándar + Standard-View + Vista estándar - Issue camera position - Publicar la posición de la cámara + Issue camera position + Publicar la posición de la cámara - Issue the camera position to the console and to a macro, to easily recall this position - Publicar la posición de la cámara a la consola y a una macro, para rellamar fácilmente a esta posición + Issue the camera position to the console and to a macro, to easily recall this position + Publicar la posición de la cámara a la consola y a una macro, para rellamar fácilmente a esta posición - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Vista estándar + Standard-View + Vista estándar - Stereo Interleaved Columns - Estéreo columnas intercaladas + Stereo Interleaved Columns + Estéreo columnas intercaladas - Switch stereo viewing to Interleaved Columns - Cambiar la visualización estéreo a columnas intercaladas + Switch stereo viewing to Interleaved Columns + Cambiar la visualización estéreo a columnas intercaladas - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Vista estándar + Standard-View + Vista estándar - Stereo Interleaved Rows - Estéreo filas intercaladas + Stereo Interleaved Rows + Estéreo filas intercaladas - Switch stereo viewing to Interleaved Rows - Cambiar la visualización estéreo a filas intercaladas + Switch stereo viewing to Interleaved Rows + Cambiar la visualización estéreo a filas intercaladas - - + + StdCmdViewIvStereoOff - Standard-View - Vista estándar + Standard-View + Vista estándar - Stereo Off - Estéreo apagado + Stereo Off + Estéreo apagado - Switch stereo viewing off - Cambiar la visualización estéreo a apagado + Switch stereo viewing off + Cambiar la visualización estéreo a apagado - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Vista estándar + Standard-View + Vista estándar - Stereo quad buffer - Estéreo cuádruple buffer + Stereo quad buffer + Estéreo cuádruple buffer - Switch stereo viewing to quad buffer - Cambiar la visualización estéreo a cuádruple buffer + Switch stereo viewing to quad buffer + Cambiar la visualización estéreo a cuádruple buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Vista estándar + Standard-View + Vista estándar - Stereo red/green - Estéreo rojo/verde + Stereo red/green + Estéreo rojo/verde - Switch stereo viewing to red/green - Cambiar la visualización estéreo a rojo/verde + Switch stereo viewing to red/green + Cambiar la visualización estéreo a rojo/verde - - + + StdCmdViewLeft - Standard-View - Vista estándar + Standard-View + Vista estándar - Left - Izquierda + Left + Izquierda - Set to left view - Establecer vista izquierda + Set to left view + Establecer vista izquierda - - + + StdCmdViewRear - Standard-View - Vista estándar + Standard-View + Vista estándar - Rear - Posterior + Rear + Posterior - Set to rear view - Establecer vista posterior + Set to rear view + Establecer vista posterior - - + + StdCmdViewRight - Standard-View - Vista estándar + Standard-View + Vista estándar - Right - Derecha + Right + Derecha - Set to right view - Establecer vista derecha + Set to right view + Establecer vista derecha - - + + + StdCmdViewRotateLeft + + Standard-View + Vista estándar + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Vista estándar + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Vista estándar + Standard-View + Vista estándar - Top - Planta + Top + Planta - Set to top view - Establecer vista en planta + Set to top view + Establecer vista en planta - - + + StdCmdWhatsThis - Help - Ayuda + Help + Ayuda - &What's This? - &Qué es esto? + &What's This? + &Qué es esto? - What's This - Qué es esto + What's This + Qué es esto - - + + StdCmdWindows - Window - Ventana + Window + Ventana - &Windows... - &Ventanas... + &Windows... + &Ventanas... - Windows list - Lista de ventanas + Windows list + Lista de ventanas - - + + StdCmdWindowsMenu - Window - Ventana + Window + Ventana - Activates this window - Activa esta ventana + Activates this window + Activa esta ventana - - + + StdCmdWorkbench - View - Vista + View + Vista - Workbench - Escenario + Workbench + Escenario - Switch between workbenches - Cambiar entre escenarios + Switch between workbenches + Cambiar entre escenarios - - + + StdOrthographicCamera - Standard-View - Vista estándar + Standard-View + Vista estándar - Orthographic view - Vista ortográfica + Orthographic view + Vista ortográfica - Switches to orthographic view mode - Cambiar a modo de vista ortográfica + Switches to orthographic view mode + Cambiar a modo de vista ortográfica - - + + StdPerspectiveCamera - Standard-View - Vista estándar + Standard-View + Vista estándar - Perspective view - Vista perspectiva + Perspective view + Vista perspectiva - Switches to perspective view mode - Cambiar a modo de vista perspectiva + Switches to perspective view mode + Cambiar a modo de vista perspectiva - - + + StdViewBoxZoom - Standard-View - Vista estándar + Standard-View + Vista estándar - Box zoom - Zona de zoom + Box zoom + Zona de zoom - - + + StdViewDockUndockFullscreen - Standard-View - Vista estándar + Standard-View + Vista estándar - Document window - Ventana de documento + Document window + Ventana de documento - Display the active view either in fullscreen, in undocked or docked mode - Muestra la vista activa a pantalla completa, en modo desacoplado o acoplado + Display the active view either in fullscreen, in undocked or docked mode + Muestra la vista activa a pantalla completa, en modo desacoplado o acoplado - - + + StdViewScreenShot - Standard-View - Vista estándar + Standard-View + Vista estándar - Save picture... - Guardar imagen... + Save picture... + Guardar imagen... - Creates a screenshot of the active view - Crea una captura de pantalla de la vista activa + Creates a screenshot of the active view + Crea una captura de pantalla de la vista activa - - + + StdViewZoomIn - Standard-View - Vista estándar + Standard-View + Vista estándar - Zoom In - Aumentar con el zoom + Zoom In + Aumentar con el zoom - - + + StdViewZoomOut - Standard-View - Vista estándar + Standard-View + Vista estándar - Zoom Out - Reducir con el zoom + Zoom Out + Reducir con el zoom - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Archivo + &File + &Archivo - &Edit - &Editar + &Edit + &Editar - Standard views - Vistas estándar + Standard views + Vistas estándar - &Stereo - &Estéreo + &Stereo + &Estéreo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Visibilidad + Visibility + Visibilidad - &View - &Ver + &View + &Ver - &Tools - &Herramientas + &Tools + &Herramientas - &Macro - &Macro + &Macro + &Macro - &Windows - &Ventanas + &Windows + &Ventanas - &On-line help - &Ayuda online + &On-line help + &Ayuda online - &Help - Ay&uda + &Help + Ay&uda - File - Archivo + File + Archivo - Macro - Macro + Macro + Macro - View - Vista + View + Vista - Special Ops - Operaciones especiales + Special Ops + Operaciones especiales - - + + testClass - test - prueba + test + prueba - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Creado por Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Creado por Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Seleccionar el estilo del Panel de Tareas + Choose the style of the Task Panel + Seleccionar el estilo del Panel de Tareas - Default - Por defecto + Default + Por defecto - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_fi.ts b/src/Gui/Language/FreeCAD_fi.ts index ec9cde9a0..b6b7ceb0c 100644 --- a/src/Gui/Language/FreeCAD_fi.ts +++ b/src/Gui/Language/FreeCAD_fi.ts @@ -1,5485 +1,5903 @@ - - + + Angle - Form - Lomake + Form + Lomake - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Angle Snap + Angle Snap + Angle Snap - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - ei mitään + none + ei mitään - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Lisää + + + Remove + Poista + + + Move up + Siirrä ylös + + + Move down + Siirrä alas + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Paina hiiren vasenta painiketta + Press left mouse button + Paina hiiren vasenta painiketta - Press SHIFT and middle mouse button - Press SHIFT and middle mouse button + Press SHIFT and middle mouse button + Press SHIFT and middle mouse button - Press middle mouse button - Paina hiiren keskipainiketta + Press middle mouse button + Paina hiiren keskipainiketta - Scroll middle mouse button - Selaa hiiren keskimmäisellä painikkeella + Scroll middle mouse button + Selaa hiiren keskimmäisellä painikkeella - - + + Gui::CADNavigationStyle - Press left mouse button - Paina hiiren vasenta painiketta + Press left mouse button + Paina hiiren vasenta painiketta - Press middle mouse button - Paina hiiren keskipainiketta + Press middle mouse button + Paina hiiren keskipainiketta - Press left and middle mouse button - Paina hiiren keskimmäistä ja vasenta painiketta + Press left and middle mouse button + Paina hiiren keskimmäistä ja vasenta painiketta - Scroll middle mouse button - Selaa hiiren keskimmäisellä painikkeella + Scroll middle mouse button + Selaa hiiren keskimmäisellä painikkeella - - + + Gui::Command - Standard - Standardi + Standard + Standardi - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Peruuta + &Cancel + &Peruuta - - + + Gui::ControlSingleton - Task panel - Tehtävä paneeli + Task panel + Tehtävä paneeli - - + + Gui::Dialog::AboutApplication - About - Tietoja + About + Tietoja - Revision number - Versionumero + Revision number + Versionumero - Version - Versio + Version + Versio - OK - OK + OK + OK - - + + - Release date - Julkaisupäivä + Release date + Julkaisupäivä - Platform - Platform + Platform + Platform - License... - License... + License... + License... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Button %1 + Button %1 + Button %1 - Out Of Range - Out Of Range + Out Of Range + Out Of Range - - + + Gui::Dialog::CommandModel - Commands - Komennot + Commands + Komennot - - + + Gui::Dialog::DemoMode - View Turntable - Näkymän kääntöpöytä + View Turntable + Näkymän kääntöpöytä - Speed - Nopeus + Speed + Nopeus - Maximum - Maksimi + Maximum + Maksimi - Minimum - Minimi + Minimum + Minimi - Fullscreen - Kokoruututila + Fullscreen + Kokoruututila - Enable timer - Ota ajastin käyttöön + Enable timer + Ota ajastin käyttöön - s - s + s + s - Angle - Angle + Angle + Angle + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Play - -90° - -90° + Stop + Pysäytä - Play - Play + Close + Sulje - - Stop - Pysäytä - - - Close - Sulje - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Valitse Ikkuna + Choose Window + Valitse Ikkuna - &Activate - &Aktivoi + &Activate + &Aktivoi - Alt+A - ALT+A + Alt+A + ALT+A - &Cancel - &Peruuta + &Cancel + &Peruuta - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Ikkunat + Windows + Ikkunat - - + + Gui::Dialog::DlgAuthorization - Authorization - Tunnistautuminen + Authorization + Tunnistautuminen - &OK - &OK + &OK + &OK - &Cancel - &Peruuta + &Cancel + &Peruuta - Password: - Salasana: + Password: + Salasana: - User name: - Käyttäjätunnus: + User name: + Käyttäjätunnus: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Valitse kuvake + Choose Icon + Valitse kuvake - OK - OK + OK + OK - Cancel - Peruuta + Cancel + Peruuta - Add icons... - Add icons... + Add icons... + Add icons... - - + + Gui::Dialog::DlgCustomActions - Macros - Makrot + Macros + Makrot - Setup Custom Macros - Asennuksen mukautetut makrot + Setup Custom Macros + Asennuksen mukautetut makrot - Macro: - Makro: + Macro: + Makro: - ... - ... + ... + ... - Pixmap - Pikselikartta + Pixmap + Pikselikartta - Accelerator: - Pikanäppäin: + Accelerator: + Pikanäppäin: - What's this: - Mikä tämä on: + What's this: + Mikä tämä on: - Status text: - Tila teksti: + Status text: + Tila teksti: - Tool tip: - Työkaluvihje: + Tool tip: + Työkaluvihje: - Menu text: - Valikko teksti: + Menu text: + Valikko teksti: - Add - Lisää + Add + Lisää - Remove - Poista + Remove + Poista - Replace - Korvaa + Replace + Korvaa - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Kuvakkeet + Icons + Kuvakkeet - Macros - Makrot + Macros + Makrot - No macro - Ei makro + No macro + Ei makro - No macros found. - Makroja ei löydy. + No macros found. + Makroja ei löydy. - Macro not found - makroa ei löytynyt + Macro not found + makroa ei löytynyt - Sorry, couldn't find macro file '%1'. - Valitettavasti makro tiedostoa '%1' ei löydy. + Sorry, couldn't find macro file '%1'. + Valitettavasti makro tiedostoa '%1' ei löydy. - Empty macro - Tyhjä makro + Empty macro + Tyhjä makro - Please specify the macro first. - Ole hyvä ja määritä ensin makro. + Please specify the macro first. + Ole hyvä ja määritä ensin makro. - Empty text - Tyhjä teksti + Empty text + Tyhjä teksti - Please specify the menu text first. - Ole hyvä ja määritä valikon teksti. + Please specify the menu text first. + Ole hyvä ja määritä valikon teksti. - No item selected - Ei valittuja kohteita + No item selected + Ei valittuja kohteita - Please select a macro item first. - Ole hyvä ja valitse makro kohde. + Please select a macro item first. + Ole hyvä ja valitse makro kohde. - - + + Gui::Dialog::DlgCustomCommands - Commands - Komennot + Commands + Komennot - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategoria + Category + Kategoria - Icon - kuvake + Icon + kuvake - Command - Komento + Command + Komento - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Näppäimistö + Keyboard + Näppäimistö - Description: - Kuvaus: + Description: + Kuvaus: - &Category: - &Kategoria: + &Category: + &Kategoria: - C&ommands: - &Komennot: + C&ommands: + &Komennot: - Current shortcut: - Nykyinen pikakuvake: + Current shortcut: + Nykyinen pikakuvake: - Press &new shortcut: - Paina &uusi pikakuvaketta: + Press &new shortcut: + Paina &uusi pikakuvaketta: - Currently assigned to: - Tällä hetkellä määritetty: + Currently assigned to: + Tällä hetkellä määritetty: - &Assign - &Määrittää + &Assign + &Määrittää - Alt+A - ALT+A + Alt+A + ALT+A - &Reset - &Palauta + &Reset + &Palauta - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Nollaa Kaikki + Re&set All + Nollaa Kaikki - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - kuvake + Icon + kuvake - Command - Komento + Command + Komento - none - ei mitään + none + ei mitään - Multiple defined shortcut - Useasti määritetty pikakuvake + Multiple defined shortcut + Useasti määritetty pikakuvake - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Pikakuvake "%1" on määritelty enemmän kuin kerran. Tämä saattaa johtaa odottamattomaan lopputulokseen. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Pikakuvake "%1" on määritelty enemmän kuin kerran. Tämä saattaa johtaa odottamattomaan lopputulokseen. - Already defined shortcut - Jo aikaisemmin määritelty pikakuvake + Already defined shortcut + Jo aikaisemmin määritelty pikakuvake - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Jo aikaisemmin määritelty pikakuvake + Jo aikaisemmin määritelty pikakuvake - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Työkaluryhmän palkit + Toolbox bars + Työkaluryhmän palkit - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Työkalurivit + Toolbars + Työkalurivit - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - Move right - Siirrä oikealle + Move right + Siirrä oikealle - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - Move left - Siirrä vasemmalle + Move left + Siirrä vasemmalle - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - Move down - Siirrä alas + Move down + Siirrä alas - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - Move up - Siirrä ylös + Move up + Siirrä ylös - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - New... - Uusi ... + New... + Uusi ... - Rename... - Nimeä uudelleen ... + Rename... + Nimeä uudelleen ... - Delete - Poista + Delete + Poista - Icon - kuvake + Icon + kuvake - Command - Komento + Command + Komento - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Uusi työkalurivi + New toolbar + Uusi työkalurivi - Toolbar name: - Työkalurivin nimi: + Toolbar name: + Työkalurivin nimi: - Duplicated name - Duplicated name + Duplicated name + Duplicated name - The toolbar name '%1' is already used - The toolbar name '%1' is already used + The toolbar name '%1' is already used + The toolbar name '%1' is already used - Rename toolbar - Uudelleennimeä työkalurivi + Rename toolbar + Uudelleennimeä työkalurivi - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Mukauttaminen + Customize + Mukauttaminen - &Help - &Ohje + &Help + &Ohje - &Close - &Sulje + &Close + &Sulje - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Buttons + Buttons + Buttons - Clear - Tyhjennä + Clear + Tyhjennä - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Näytön ominaisuudet + Display properties + Näytön ominaisuudet - Display - Näyttö + Display + Näyttö - Transparency: - Läpinäkyvyys: + Transparency: + Läpinäkyvyys: - Line width: - Viivan leveys: + Line width: + Viivan leveys: - Point size: - Pistekoko: + Point size: + Pistekoko: - Material - Materiaali + Material + Materiaali - ... - ... + ... + ... - Close - Sulje + Close + Sulje - Viewing mode - Viewing mode + Viewing mode + Viewing mode - Display mode: - Display mode: + Display mode: + Display mode: - Plot mode: - Plot mode: + Plot mode: + Plot mode: - - + + - Line transparency: - Line transparency: + Line transparency: + Line transparency: - Line color: - Line color: + Line color: + Line color: - Shape color: - Shape color: + Shape color: + Shape color: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Muokkain + Editor + Muokkain - Options - Asetukset + Options + Asetukset - Enable line numbers - Ota rivinumerot käyttöön + Enable line numbers + Ota rivinumerot käyttöön - Enable folding - Ota taivutus käyttöön + Enable folding + Ota taivutus käyttöön - Indentation - Indentation + Indentation + Indentation - Insert spaces - Insert spaces + Insert spaces + Insert spaces - Tab size: - Sarkaimen koko: + Tab size: + Sarkaimen koko: - Indent size: - Sisennä koko: + Indent size: + Sisennä koko: - Keep tabs - Keep tabs + Keep tabs + Keep tabs - Display Items - Display Items + Display Items + Display Items - Family: - Family: + Family: + Family: - Size: - Koko: + Size: + Koko: - Preview: - Esikatselu: + Preview: + Esikatselu: - - + + - - + + Gui::Dialog::DlgGeneral - General - Yleiset + General + Yleiset - Start up - käynnistys + Start up + käynnistys - Enable splash screen at start up - Enable splash screen at start up + Enable splash screen at start up + Enable splash screen at start up - Switch to tab of report window: - Switch to tab of report window: + Switch to tab of report window: + Switch to tab of report window: - Auto load module after start up: - Auto load module after start up: + Auto load module after start up: + Auto load module after start up: - Language - Kieli + Language + Kieli - Change language: - Vaihda kieli: + Change language: + Vaihda kieli: - Main window - Pääikkuna + Main window + Pääikkuna - Size of recent file list - Size of recent file list + Size of recent file list + Size of recent file list - Window style: - Ikkuna tyyli: + Window style: + Ikkuna tyyli: - Size of toolbar icons: - Size of toolbar icons: + Size of toolbar icons: + Size of toolbar icons: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Default (%1 x %1) + Default (%1 x %1) + Default (%1 x %1) - Small (%1 x %1) - Small (%1 x %1) + Small (%1 x %1) + Small (%1 x %1) - Large (%1 x %1) - Large (%1 x %1) + Large (%1 x %1) + Large (%1 x %1) - Extra large (%1 x %1) - Extra large (%1 x %1) + Extra large (%1 x %1) + Extra large (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Syöttö + Input + Syöttö - OK - OK + OK + OK - Cancel - Peruuta + Cancel + Peruuta - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Scene Inspector + Scene Inspector + Scene Inspector - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Suorita makro + Execute macro + Suorita makro - Macro name: - Makron nimi: + Macro name: + Makron nimi: - Macro destination: - Makro kohde: + Macro destination: + Makro kohde: - Execute - Suorita + Execute + Suorita - Close - Sulje + Close + Sulje - Create - Luo + Create + Luo - Delete - Poista + Delete + Poista - Edit - Muokkaa + Edit + Muokkaa - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makrot + Macros + Makrot - Macro file - Makro-tiedosto + Macro file + Makro-tiedosto - Enter a file name, please: - Anna tiedoston nimi, kiitos: + Enter a file name, please: + Anna tiedoston nimi, kiitos: - Existing file - Olemassa oleva tiedosto + Existing file + Olemassa oleva tiedosto - '%1'. + '%1'. This file already exists. - "%1". Tämä tiedosto on jo olemassa. + "%1". Tämä tiedosto on jo olemassa. - Delete macro - Poista makro + Delete macro + Poista makro - Do you really want to delete the macro '%1'? - Haluatko varmasti poistaa makron "%1"? + Do you really want to delete the macro '%1'? + Haluatko varmasti poistaa makron "%1"? - Cannot create file - Cannot create file + Cannot create file + Cannot create file - Creation of file '%1' failed. - Creation of file '%1' failed. + Creation of file '%1' failed. + Creation of file '%1' failed. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Makron tallennus + Macro recording + Makron tallennus - Macro name: - Makron nimi: + Macro name: + Makron nimi: - Stop - Pysäytä + Stop + Pysäytä - Cancel - Peruuta + Cancel + Peruuta - Macro path: - Macro path: + Macro path: + Macro path: - ... - ... + ... + ... - Record - Record + Record + Record - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Makro-tallennin + Macro recorder + Makro-tallennin - Specify first a place to save. - Määritä ensin tallennuspaikka. + Specify first a place to save. + Määritä ensin tallennuspaikka. - Existing macro - Aiemmin luotu makro + Existing macro + Aiemmin luotu makro - The macro '%1' already exists. Do you want to overwrite? - Makro '%1' on jo olemassa. Haluatko korvata? + The macro '%1' already exists. Do you want to overwrite? + Makro '%1' on jo olemassa. Haluatko korvata? - The macro directory doesn't exist. Please, choose another one. - The macro directory doesn't exist. Please, choose another one. + The macro directory doesn't exist. Please, choose another one. + The macro directory doesn't exist. Please, choose another one. - Choose macro directory - Choose macro directory + Choose macro directory + Choose macro directory - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Materiaaliominaisuudet + Material properties + Materiaaliominaisuudet - &Close - &Sulje + &Close + &Sulje - Alt+C - Alt+C + Alt+C + Alt+C - Material - Materiaali + Material + Materiaali - Diffuse color: - Diffuse color: + Diffuse color: + Diffuse color: - Specular color: - Heijastuneen valon väri: + Specular color: + Heijastuneen valon väri: - Shininess: - Shininess: + Shininess: + Shininess: - % - % + % + % - Ambient color: - Ympäristön väri: + Ambient color: + Ympäristön väri: - - + + - Emissive color: - Emissive color: + Emissive color: + Emissive color: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Käytönaikainen ohje + On-line help + Käytönaikainen ohje - Help viewer - Ohjeen katseluohjelma + Help viewer + Ohjeen katseluohjelma - Location of start page - Aloitussivun sijainti + Location of start page + Aloitussivun sijainti - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML-tiedostot (*.html *.htm) + HTML files (*.html *.htm) + HTML-tiedostot (*.html *.htm) - Access denied - Pääsy evätty + Access denied + Pääsy evätty - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Pääsy evätty "%1" Määritä toinen hakemisto, ole hyvä. + Pääsy evätty "%1" Määritä toinen hakemisto, ole hyvä. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Parametrimuokkain + Parameter Editor + Parametrimuokkain - Save to disk - Tallenna levylle + Save to disk + Tallenna levylle - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Sulje + &Close + &Sulje - - + + Gui::Dialog::DlgParameterImp - Group - Ryhmä + Group + Ryhmä - Name - Nimi + Name + Nimi - Type - Tyyppi + Type + Tyyppi - Value - Arvo + Value + Arvo - User parameter - Käyttäjäparametri + User parameter + Käyttäjäparametri - Invalid input - Virheellinen syöte + Invalid input + Virheellinen syöte - Invalid key name '%1' - Virheellinen avaimen nimi "%1" + Invalid key name '%1' + Virheellinen avaimen nimi "%1" - System parameter - Järjestelmäparametri + System parameter + Järjestelmäparametri - - + + Gui::Dialog::DlgPreferences - Preferences - Preferences + Preferences + Preferences - &Help - &Ohje + &Help + &Ohje - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &OK + &OK + &OK - &Apply - &Apply + &Apply + &Apply - Alt+A - ALT+A + Alt+A + ALT+A - &Cancel - &Peruuta + &Cancel + &Peruuta - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Wrong parameter + Wrong parameter + Wrong parameter - - + + Gui::Dialog::DlgProjectInformation - Project information - Project information + Project information + Project information - Information - Information + Information + Information - &Name: - &Name: + &Name: + &Name: - Commen&t: - Commen&t: + Commen&t: + Commen&t: - Path: - Path: + Path: + Path: - &Last modified by: - &Last modified by: + &Last modified by: + &Last modified by: - Created &by: - Created &by: + Created &by: + Created &by: - Com&pany: - Com&pany: + Com&pany: + Com&pany: - Last &modification date: - Last &modification date: + Last &modification date: + Last &modification date: - Creation &date: - Creation &date: + Creation &date: + Creation &date: - &OK - &OK + &OK + &OK - &Cancel - &Peruuta + &Cancel + &Peruuta - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project utility + Project utility + Project utility - Extract project - Extract project + Extract project + Extract project - Source - Source + Source + Source - Project file (*.fcstd) - Project file (*.fcstd) + Project file (*.fcstd) + Project file (*.fcstd) - Destination - Destination + Destination + Destination - Extract - Extract + Extract + Extract - Create project - Create project + Create project + Create project - Document.xml - Document.xml + Document.xml + Document.xml - Create - Luo + Create + Luo - Load project file after creation - Load project file after creation + Load project file after creation + Load project file after creation - Empty source - Empty source + Empty source + Empty source - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Empty destination + Empty destination + Empty destination - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - Output window + Output window + Output window - Output - Output + Output + Output - Record log messages - Record log messages + Record log messages + Record log messages - Record warnings - Record warnings + Record warnings + Record warnings - Record error messages - Record error messages + Record error messages + Record error messages - Colors - Colors + Colors + Colors - Normal messages: - Normal messages: + Normal messages: + Normal messages: - Log messages: - Log messages: + Log messages: + Log messages: - Warnings: - Warnings: + Warnings: + Warnings: - Errors: - Virheet: + Errors: + Virheet: - - + + - Redirect internal Python errors to report view - Redirect internal Python errors to report view + Redirect internal Python errors to report view + Redirect internal Python errors to report view - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - Ulkoisen ohjelman käynnistäminen + Running external program + Ulkoisen ohjelman käynnistäminen - TextLabel - TextLabel + TextLabel + TextLabel - Advanced >> - Advanced >> + Advanced >> + Advanced >> - ... - ... + ... + ... - Accept changes - Hyväksy muutokset + Accept changes + Hyväksy muutokset - Discard changes - Hylkää muutokset + Discard changes + Hylkää muutokset - Abort program - Keskeytä ohjelma + Abort program + Keskeytä ohjelma - Help - Ohje + Help + Ohje - Select a file - Valitse tiedosto + Select a file + Valitse tiedosto - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D View + 3D View + 3D View - 3D View settings - 3D-näkymän asetukset + 3D View settings + 3D-näkymän asetukset - Show coordinate system in the corner - Show coordinate system in the corner + Show coordinate system in the corner + Show coordinate system in the corner - Show counter of frames per second - Show counter of frames per second + Show counter of frames per second + Show counter of frames per second - Enable animation - Ota animaatiot käyttöön + Enable animation + Ota animaatiot käyttöön - Enable anti-aliasing (slower) - Enable anti-aliasing (slower) + Enable anti-aliasing (slower) + Enable anti-aliasing (slower) - Eye to eye distance for stereo modes: - Eye to eye distance for stereo modes: + Eye to eye distance for stereo modes: + Eye to eye distance for stereo modes: - Camera type - Kameratyyppi + Camera type + Kameratyyppi - Orthographic rendering - Orthographic rendering + Orthographic rendering + Orthographic rendering - Perspective rendering - Perspektiivin renderöinti + Perspective rendering + Perspektiivin renderöinti - - + + - 3D Navigation - 3D navigointi + 3D Navigation + 3D navigointi - Mouse... - Hiiri... + Mouse... + Hiiri... - Intensity of backlight - Taustavalon intensiteetti + Intensity of backlight + Taustavalon intensiteetti - Enable backlight color - Ota taustavalon väri käyttöön + Enable backlight color + Ota taustavalon väri käyttöön - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigointi + %1 navigation + %1 navigointi - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Värimalli + Color model + Värimalli - &Gradient: - &Liukuväri: + &Gradient: + &Liukuväri: - red-yellow-green-cyan-blue - red-yellow-green-cyan-blue + red-yellow-green-cyan-blue + red-yellow-green-cyan-blue - blue-cyan-green-yellow-red - blue-cyan-green-yellow-red + blue-cyan-green-yellow-red + blue-cyan-green-yellow-red - white-black - valko-musta + white-black + valko-musta - black-white - musta-valko + black-white + musta-valko - Visibility - Näkyvyys + Visibility + Näkyvyys - Out g&rayed - Out g&rayed + Out g&rayed + Out g&rayed - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Out &invisible + Out &invisible + Out &invisible - Alt+I - Alt+I + Alt+I + Alt+I - Style - Tyyli + Style + Tyyli - &Zero - &Nolla + &Zero + &Nolla - Alt+Z - ALT+Z + Alt+Z + ALT+Z - &Flow - &Virtaukset + &Flow + &Virtaukset - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Peruuta + &Cancel + &Peruuta - Parameter range - Parameter range + Parameter range + Parameter range - Mi&nimum: - Mi&nimi: + Mi&nimum: + Mi&nimi: - Ma&ximum: - Ma&ximi: + Ma&ximum: + Ma&ximi: - &Labels: - &Labels: + &Labels: + &Labels: - &Decimals: - &Desimaalit: + &Decimals: + &Desimaalit: - - + + - Color-gradient settings - Liukuvärin värin asetukset + Color-gradient settings + Liukuvärin värin asetukset - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Wrong parameter + Wrong parameter + Wrong parameter - The maximum value must be higher than the minimum value. - Maksimiarvon pitää olla suurempi kuin minimiarvo. + The maximum value must be higher than the minimum value. + Maksimiarvon pitää olla suurempi kuin minimiarvo. - - + + Gui::Dialog::DlgSettingsDocument - Document - Asiakirja + Document + Asiakirja - General - Yleiset + General + Yleiset - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Asiakirja tallennetaan pakkaustasolla (0 = ei yhtään, 9 = suurin, 3 = oletus) + Asiakirja tallennetaan pakkaustasolla (0 = ei yhtään, 9 = suurin, 3 = oletus) - Create new document at start up - Luo uusi asiakirja käynnistettäessä + Create new document at start up + Luo uusi asiakirja käynnistettäessä - Storage - Talletuspaikka + Storage + Talletuspaikka - Saving transactions (Auto-save) - Saving transactions (Auto-save) + Saving transactions (Auto-save) + Saving transactions (Auto-save) - Discard saved transaction after saving document - Discard saved transaction after saving document + Discard saved transaction after saving document + Discard saved transaction after saving document - Save thumbnail into project file when saving document - Tallenna pikkukuva projektitiedostoon asiakirjaa tallennettaessa + Save thumbnail into project file when saving document + Tallenna pikkukuva projektitiedostoon asiakirjaa tallennettaessa - Create up to backup files when resaving document - Luo varmuuskopion tiedostoista, kun asiakirja tallennetaan uudestaan + Create up to backup files when resaving document + Luo varmuuskopion tiedostoista, kun asiakirja tallennetaan uudestaan - Document objects - Asiakirjan objektit + Document objects + Asiakirjan objektit - Allow duplicate object labels in one document - Allow duplicate object labels in one document + Allow duplicate object labels in one document + Allow duplicate object labels in one document - Maximum Undo/Redo steps - Maximum Undo/Redo steps + Maximum Undo/Redo steps + Maximum Undo/Redo steps - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Teksti + Text + Teksti - Bookmark - Kirjanmerkki + Bookmark + Kirjanmerkki - Breakpoint - Keskeytyskohta + Breakpoint + Keskeytyskohta - Keyword - Avainsana + Keyword + Avainsana - Comment - Kommentti + Comment + Kommentti - Block comment - Estä kommentti + Block comment + Estä kommentti - Number - Numero + Number + Numero - String - Merkkijono + String + Merkkijono - Character - Merkki + Character + Merkki - Class name - Luokan nimi + Class name + Luokan nimi - Define name - Määritä nimi + Define name + Määritä nimi - Operator - Operaattori + Operator + Operaattori - Python output - Python ulostulo + Python output + Python ulostulo - Python error - Python virhe + Python error + Python virhe - Items - Osat + Items + Osat - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Kuvan asetukset + Image settings + Kuvan asetukset - Image properties - Kuvan ominaisuudet + Image properties + Kuvan ominaisuudet - Back&ground: - Tausta&kuva: + Back&ground: + Tausta&kuva: - Current - Nykyinen + Current + Nykyinen - White - Valkoinen + White + Valkoinen - Black - Musta + Black + Musta - Transparent - Läpinäkyvä + Transparent + Läpinäkyvä - Image dimensions - Kuvan mitat + Image dimensions + Kuvan mitat - Pixel - Pikseli + Pixel + Pikseli - &Width: - &Leveys: + &Width: + &Leveys: - Current screen - Nykyinen näyttö + Current screen + Nykyinen näyttö - Icon 32 x 32 - Kuvake 32 x 32 + Icon 32 x 32 + Kuvake 32 x 32 - Icon 64 x 64 - Kuvake 64 x 64 + Icon 64 x 64 + Kuvake 64 x 64 - Icon 128 x 128 - Kuvake 128 x 128 + Icon 128 x 128 + Kuvake 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1 024 x 768 + XGA 1024 x 768 + XGA 1 024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA + 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA + 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standard sizes: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Height: - Standard sizes: - Standard sizes: + Aspect ratio: + Aspect ratio: - &Height: - &Height: + &Screen + &Screen - Aspect ratio: - Aspect ratio: + Alt+S + Alt+S - &Screen - &Screen + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Image comment - Alt+1 - Alt+1 + Insert MIBA + Insert MIBA - Image comment - Image comment + Insert comment + Insert comment - - Insert MIBA - Insert MIBA - - - Insert comment - Insert comment - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Macro + Macro + Macro - Macro recording settings - Macro recording settings + Macro recording settings + Macro recording settings - Logging Commands - Logging Commands + Logging Commands + Logging Commands - Show script commands in python console - Show script commands in python console + Show script commands in python console + Show script commands in python console - Log all commands issued by menus to file: - Log all commands issued by menus to file: + Log all commands issued by menus to file: + Log all commands issued by menus to file: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Gui commands + Gui commands + Gui commands - Recording GUI commands - GUI komentojen nauhoitus + Recording GUI commands + GUI komentojen nauhoitus - Record as comment - Tallenna kommenttina + Record as comment + Tallenna kommenttina - Macro path - Makron polku + Macro path + Makron polku - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Yksiköt + Units + Yksiköt - Units settings - Yksiköiden asetukset + Units settings + Yksiköiden asetukset - Standard (mm/kg/s/degree) - Standardi (mm/kg/s/astetta) + Standard (mm/kg/s/degree) + Standardi (mm/kg/s/astetta) - MKS (m/kg/s/degree) - MKS (m/kg/s/astetta) + MKS (m/kg/s/degree) + MKS (m/kg/s/astetta) - Magnitude - Suuruusluokka + Magnitude + Suuruusluokka - Unit - Yksikkö + Unit + Yksikkö - User system: - User system: + User system: + User system: - Imperial (in/lb) - Imperial (in/lb) + Imperial (in/lb) + Imperial (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Colors + Colors + Colors - Selection - Valinta + Selection + Valinta - Enable selection highlighting - Enable selection highlighting + Enable selection highlighting + Enable selection highlighting - Enable preselection highlighting - Ota esivalinnan korostaminen käyttöön + Enable preselection highlighting + Ota esivalinnan korostaminen käyttöön - Background color - Taustaväri + Background color + Taustaväri - Middle color - Middle color + Middle color + Middle color - Color gradient - Color gradient + Color gradient + Color gradient - Simple color - Yksinkertainen väri + Simple color + Yksinkertainen väri - Default colors - Default colors + Default colors + Default colors - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Päivän vihje + Tip of the day + Päivän vihje - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - &Show tips at start up - &Näytä vihjeet käynnistyksen yhteydessä + &Show tips at start up + &Näytä vihjeet käynnistyksen yhteydessä - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Seuraava vihje + &Next Tip + &Seuraava vihje - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Sulje + &Close + &Sulje - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Lataus epäonnistui: %1 + Lataus epäonnistui: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - - + + Gui::Dialog::DockablePlacement - Placement - Sijainti + Placement + Sijainti - - + + Gui::Dialog::DownloadDialog - Canceled. - Canceled. + Canceled. + Canceled. - - + + Download + + + + Cancel + Peruuta + + + Close + Sulje + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Lataus epäonnistui: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Add icon + Add icon + Add icon - - + + Gui::Dialog::InputVector - Input vector - Sisääntulo vektori + Input vector + Sisääntulo vektori - Vector - Vektori + Vector + Vektori - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Hiiren painikkeet + Mouse buttons + Hiiren painikkeet - Configuration - Asetustiedostot + Configuration + Asetustiedostot - Selection: - Valinta: + Selection: + Valinta: - Panning - Panorointi + Panning + Panorointi - Rotation: - Kierto: + Rotation: + Kierto: - Zooming: - Zoomaus: + Zooming: + Zoomaus: - - + + Gui::Dialog::ParameterGroup - Expand - Expand + Expand + Expand - Add sub-group - Lisää alaryhmä + Add sub-group + Lisää alaryhmä - Remove group - Poista ryhmä + Remove group + Poista ryhmä - Rename group - Nimeä ryhmä uudelleen + Rename group + Nimeä ryhmä uudelleen - Export parameter - Vie parametri + Export parameter + Vie parametri - Import parameter - Tuo parametri + Import parameter + Tuo parametri - Collapse - Kutista + Collapse + Kutista - Do really want to remove this parameter group? - Haluatko todella poistaa tämän parametriryhmän? + Do really want to remove this parameter group? + Haluatko todella poistaa tämän parametriryhmän? - Existing sub-group - Nykyinen alaryhmä + Existing sub-group + Nykyinen alaryhmä - The sub-group '%1' already exists. - Alaryhmä "%1" on jo olemassa. + The sub-group '%1' already exists. + Alaryhmä "%1" on jo olemassa. - Export parameter to file - Vie parametri tiedostoon + Export parameter to file + Vie parametri tiedostoon - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Tuo parametri tiedostosta + Import parameter from file + Tuo parametri tiedostosta - Import Error - Virhe tuotaessa + Import Error + Virhe tuotaessa - Reading from '%1' failed. - '%1' lukeminen epäonnistui. + Reading from '%1' failed. + '%1' lukeminen epäonnistui. - - + + Gui::Dialog::ParameterValue - Change value - Muuta arvoa + Change value + Muuta arvoa - Remove key - Poista avain + Remove key + Poista avain - Rename key - Nimeä avain + Rename key + Nimeä avain - New - Uusi + New + Uusi - New string item - Uuden merkkijonon kohde + New string item + Uuden merkkijonon kohde - New float item - Uuden sijainnin kohde + New float item + Uuden sijainnin kohde - New integer item - Uuden kokonaisluvun kohde + New integer item + Uuden kokonaisluvun kohde - New unsigned item - Uusi allekirjoittamaton kohde + New unsigned item + Uusi allekirjoittamaton kohde - New Boolean item - New Boolean item + New Boolean item + New Boolean item - Existing item - Nykyinen kohde + Existing item + Nykyinen kohde - The item '%1' already exists. - Kohde "%1" on jo olemassa. + The item '%1' already exists. + Kohde "%1" on jo olemassa. - - + + Gui::Dialog::Placement - Placement - Sijainti + Placement + Sijainti - OK - OK + OK + OK - Translation: - Käännös: + Translation: + Käännös: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Kierto: + Rotation: + Kierto: - Angle: - Kulma: + Angle: + Kulma: - Axis: - Axis: + Axis: + Axis: - Center: - Keskitetty: + Center: + Keskitetty: - Pitch: - Pitch: + Pitch: + Pitch: - Roll: - Roll: + Roll: + Roll: - Yaw: - Yaw: + Yaw: + Yaw: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Euler kulmat + Euler angles + Euler kulmat - Apply placement changes immediately - Apply placement changes immediately + Apply placement changes immediately + Apply placement changes immediately - Apply incremental changes to object placement - Apply incremental changes to object placement + Apply incremental changes to object placement + Apply incremental changes to object placement - Apply - Käytä + Apply + Käytä - Reset - Palauta + Reset + Palauta - Close - Sulje + Close + Sulje - - + + Gui::Dialog::PrintModel - Button - Button + Button + Button - Command - Komento + Command + Komento - - + + Gui::Dialog::SceneInspector - Dialog - Dialog + Dialog + Dialog - Close - Sulje + Close + Sulje - Refresh - Päivitä + Refresh + Päivitä - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor Tree + Inventor Tree + Inventor Tree - Nodes - Nodes + Nodes + Nodes - - + + Gui::Dialog::TextureMapping - Texture - Materiaalikuvio + Texture + Materiaalikuvio - Texture mapping - Texture mapping + Texture mapping + Texture mapping - Global - Järjestelmän laajuinen + Global + Järjestelmän laajuinen - Environment - Ympäristö + Environment + Ympäristö - Image files (%1) - Kuvatiedostot (%1) + Image files (%1) + Kuvatiedostot (%1) - No image - Ei kuvaa + No image + Ei kuvaa - The specified file is not a valid image file. - The specified file is not a valid image file. + The specified file is not a valid image file. + The specified file is not a valid image file. - No 3d view - Ei 3D näkymää + No 3d view + Ei 3D näkymää - No active 3d view found. - Ei löytynyt aktiivista 3D näkymää. + No active 3d view found. + Ei löytynyt aktiivista 3D näkymää. - - + + Gui::Dialog::Transform - Cancel - Peruuta + Cancel + Peruuta - Transform - Transform + Transform + Transform - - + + Gui::DlgTreeWidget - Dialog - Dialog + Dialog + Dialog - Items - Osat + Items + Osat - OK - OK + OK + OK - Cancel - Peruuta + Cancel + Peruuta - - + + - - + + Gui::DockWnd::CombiView - CombiView - CombiView + CombiView + CombiView - Project - Projekti + Project + Projekti - Tasks - Tehtävät + Tasks + Tehtävät - - + + Gui::DockWnd::HelpView - Previous - Edellinen + Previous + Edellinen - Next - Seuraava + Next + Seuraava - Home - Home + Home + Home - Open - Avaa + Open + Avaa - Open file - Avaa tiedosto + Open file + Avaa tiedosto - All HTML files (*.html *.htm) - Kaikki HTML-tiedostot (*.html *.htm) + All HTML files (*.html *.htm) + Kaikki HTML-tiedostot (*.html *.htm) - External browser - Ulkoinen selain + External browser + Ulkoinen selain - No external browser found. Specify in preferences, please - No external browser found. Specify in preferences, please + No external browser found. Specify in preferences, please + No external browser found. Specify in preferences, please - Starting of %1 failed - %1 käynnistäminen epäonnistui + Starting of %1 failed + %1 käynnistäminen epäonnistui - - + + Gui::DockWnd::PropertyDockView - Property View - Näytä ominaisuudet + Property View + Näytä ominaisuudet - - + + Gui::DockWnd::ReportOutput - Logging - Logging + Logging + Logging - Warning - Varoitus + Warning + Varoitus - Error - Virhe + Error + Virhe - Options - Asetukset + Options + Asetukset - Clear - Tyhjennä + Clear + Tyhjennä - Save As... - Tallenna nimellä... + Save As... + Tallenna nimellä... - Save Report Output - Save Report Output + Save Report Output + Save Report Output - Plain Text Files (*.txt *.log) - Teksti-tiedostot (*.txt *.log) + Plain Text Files (*.txt *.log) + Teksti-tiedostot (*.txt *.log) - Go to end - Siirry loppuun + Go to end + Siirry loppuun - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Redirect Python errors + Redirect Python errors + Redirect Python errors - - + + Gui::DockWnd::ReportView - Output - Output + Output + Output - Python console - Python-konsoli + Python console + Python-konsoli - - + + Gui::DockWnd::SelectionView - Property View - Näytä ominaisuudet + Property View + Näytä ominaisuudet - - + + Gui::DockWnd::TaskPanelView - Task View - Task View + Task View + Task View - - + + Gui::DockWnd::TextBrowser - Could not open file. - Tiedostoa ei voitu avata. + Could not open file. + Tiedostoa ei voitu avata. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Connecting to %1 - Yhdistetään %1 + Connecting to %1 + Yhdistetään %1 - Sending to %1 - Lähetetään %1 + Sending to %1 + Lähetetään %1 - Reading from %1 - Luetaan %1 + Reading from %1 + Luetaan %1 - Download failed: %1. - Lataus epäonnistui: %1. + Download failed: %1. + Lataus epäonnistui: %1. - Previous - Edellinen + Previous + Edellinen - Forward - Eteenpäin + Forward + Eteenpäin - Home - Home + Home + Home - Refresh - Päivitä + Refresh + Päivitä - Copy - Kopioi + Copy + Kopioi - Select all - Valitse kaikki + Select all + Valitse kaikki - No description for - Ei kuvausta + No description for + Ei kuvausta - - + + Gui::DocumentModel - Application - Application + Application + Application - Labels & Attributes - Labels & Attributes + Labels & Attributes + Labels & Attributes - - + + Gui::EditorView - Modified file - Muokattu tiedosto + Modified file + Muokattu tiedosto - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - Unsaved document - Tallentamaton asiakirja + Unsaved document + Tallentamaton asiakirja - The document has been modified. + The document has been modified. Do you want to save your changes? - Asiakirjaa on muokattu. Haluatko tallentaa muutokset? + Asiakirjaa on muokattu. Haluatko tallentaa muutokset? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) - Export PDF - Export PDF + Export PDF + Export PDF - PDF file (*.pdf) - PDF-tiedosto (*.pdf) + PDF file (*.pdf) + PDF-tiedosto (*.pdf) - untitled[*] - Nimetön[*] + untitled[*] + Nimetön[*] - - Editor - -Muokkain + - Editor + -Muokkain - %1 chars removed - %1 merkit poistettu + %1 chars removed + %1 merkit poistettu - %1 chars added - %1 merkkiä lisätty + %1 chars added + %1 merkkiä lisätty - Formatted - Alustettu + Formatted + Alustettu - - + + Gui::FileChooser - Select a file - Valitse tiedosto + Select a file + Valitse tiedosto - Select a directory - Valitse hakemisto + Select a directory + Valitse hakemisto - - + + Gui::FileDialog - Save as - Tallenna nimellä + Save as + Tallenna nimellä - Open - Avaa + Open + Avaa - - + + Gui::FileOptionsDialog - Extended - Laajennettu + Extended + Laajennettu - All files (*.*) - Kaikki tiedostot (*.*) + All files (*.*) + Kaikki tiedostot (*.*) - - + + Gui::Flag - Top left - Vasen ylhäällä + Top left + Vasen ylhäällä - Bottom left - Alas vasemmalle + Bottom left + Alas vasemmalle - Top right - Oikeasta yläkulmasta + Top right + Oikeasta yläkulmasta - Bottom right - Alas oikealle + Bottom right + Alas oikealle - Remove - Poista + Remove + Poista - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Paina CTRL ja hiiren vasenta painiketta + Press CTRL and left mouse button + Paina CTRL ja hiiren vasenta painiketta - Press middle mouse button - Paina hiiren keskipainiketta + Press middle mouse button + Paina hiiren keskipainiketta - Press left mouse button - Paina hiiren vasenta painiketta + Press left mouse button + Paina hiiren vasenta painiketta - Scroll middle mouse button - Selaa hiiren keskimmäisellä painikkeella + Scroll middle mouse button + Selaa hiiren keskimmäisellä painikkeella - - + + Gui::LocationDialog - Wrong direction - Väärä suunta + Wrong direction + Väärä suunta - Direction must not be the null vector - Suunta ei saa olla null-arvoinen vektori + Direction must not be the null vector + Suunta ei saa olla null-arvoinen vektori - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - User defined... + User defined... + User defined... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makrot + Macros + Makrot - - + + Gui::MainWindow - Dimension - Mitta + Dimension + Mitta - Ready - Valmis + Ready + Valmis - Toggles this toolbar - Näyttä tai piilota tämä työkalurivi + Toggles this toolbar + Näyttä tai piilota tämä työkalurivi - Toggles this dockable window - Näytä tai piilota telakointiasema ikkunasta + Toggles this dockable window + Näytä tai piilota telakointiasema ikkunasta - Close All - Sulje kaikki + Close All + Sulje kaikki - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Download started... + Download started... - - + + Gui::ProgressBar - Remaining: %1 - Jäljellä: %1 + Remaining: %1 + Jäljellä: %1 - Aborting - Keskeytetään + Aborting + Keskeytetään - Do you really want to abort the operation? - Haluatko todella keskeyttää toiminnon? + Do you really want to abort the operation? + Haluatko todella keskeyttää toiminnon? - - + + Gui::ProgressDialog - Remaining: %1 - Jäljellä: %1 + Remaining: %1 + Jäljellä: %1 - Aborting - Keskeytetään + Aborting + Keskeytetään - Do you really want to abort the operation? - Haluatko todella keskeyttää toiminnon? + Do you really want to abort the operation? + Haluatko todella keskeyttää toiminnon? - - + + Gui::PropertyEditor::PropertyModel - Property - Ominaisuus + Property + Ominaisuus - Value - Arvo + Value + Arvo - - + + Gui::PropertyView - View - Näytä + View + Näytä - Data - Tiedot + Data + Tiedot - - + + Gui::PythonConsole - System exit - Poistu järjestelmästä + System exit + Poistu järjestelmästä - The application is still running. + The application is still running. Do you want to exit without saving your data? - Sovellus on edelleen käynnissä. Haluatko lopettaa tallentamatta tietoja? + Sovellus on edelleen käynnissä. Haluatko lopettaa tallentamatta tietoja? - Python console - Python-konsoli + Python console + Python-konsoli - Unhandled PyCXX exception. - Käsittelemätön PyCXX poikkeus. + Unhandled PyCXX exception. + Käsittelemätön PyCXX poikkeus. - Unhandled FreeCAD exception. - Käsittelemätön FreeCAD poikkeus. + Unhandled FreeCAD exception. + Käsittelemätön FreeCAD poikkeus. - Unhandled unknown C++ exception. - Käsittelemätön tuntematon C++-poikkeus. + Unhandled unknown C++ exception. + Käsittelemätön tuntematon C++-poikkeus. - &Copy command - &Kopiointi-komento + &Copy command + &Kopiointi-komento - &Copy history - &Kopiointi historia + &Copy history + &Kopiointi historia - Save history as... - Tallenna historia nimellä... + Save history as... + Tallenna historia nimellä... - Insert file name... - Lisää tiedostonimi... + Insert file name... + Lisää tiedostonimi... - Save History - Tallenna historia + Save History + Tallenna historia - Macro Files (*.FCMacro *.py) - Makro-tiedostot (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Makro-tiedostot (*.FCMacro *.py) - Insert file name - Lisää tiedostonimi + Insert file name + Lisää tiedostonimi - All Files (*.*) - Kaikki tiedostot (*.*) + All Files (*.*) + Kaikki tiedostot (*.*) - Python Input Dialog - Python Input-valintaikkuna + Python Input Dialog + Python Input-valintaikkuna - Unhandled std C++ exception. - Unhandled std C++ exception. + Unhandled std C++ exception. + Unhandled std C++ exception. - Word wrap - Word wrap + Word wrap + Word wrap - &Copy - &Kopioi + &Copy + &Kopioi - &Paste - &Liitä + &Paste + &Liitä - Select All - Valitse kaikki + Select All + Valitse kaikki - - + + Clear console + + + + Gui::PythonEditor - Comment - Kommentti + Comment + Kommentti - Uncomment - Poista kommentti + Uncomment + Poista kommentti - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Tyhjennä + Clear + Tyhjennä - - + + Gui::RecentFilesAction - Open file %1 - Avaa tiedosto %1 + Open file %1 + Avaa tiedosto %1 - File not found - Tiedostoa ei löydy + File not found + Tiedostoa ei löydy - The file '%1' cannot be opened. - Tiedostoa '%1' ei voi avata. + The file '%1' cannot be opened. + Tiedostoa '%1' ei voi avata. - - + + Gui::SelectModule - Select module - Valitse moduuli + Select module + Valitse moduuli - Open %1 as - Avaa kuin %1 + Open %1 as + Avaa kuin %1 - Select - Valitse + Select + Valitse - - + + Gui::StdCmdDescription - Help - Ohje + Help + Ohje - Des&cription - Des&cription + Des&cription + Des&cription - Long description of commands - Long description of commands + Long description of commands + Long description of commands - - + + Gui::StdCmdDownloadOnlineHelp - Help - Ohje + Help + Ohje - Download online help - Lataa online-ohje + Download online help + Lataa online-ohje - Download %1's online help - Download %1's online help + Download %1's online help + Download %1's online help - Non-existing directory - Olemassa olematon hakemisto + Non-existing directory + Olemassa olematon hakemisto - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Missing permission - Vajavaiset käyttöoikeudet + Missing permission + Vajavaiset käyttöoikeudet - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Stop downloading - Stop downloading + Stop downloading + Stop downloading - - + + Gui::StdCmdPythonHelp - Tools - Työkalut + Tools + Työkalut - Python Modules - Python-moduulit + Python Modules + Python-moduulit - Opens a browser to show the Python modules - Avaa selain nähdäksesi python-moduulit + Opens a browser to show the Python modules + Avaa selain nähdäksesi python-moduulit - - + + Gui::TaskBoxAngle - Angle - Angle + Angle + Angle - - + + Gui::TaskBoxPosition - Position - Sijainti + Position + Sijainti - - + + Gui::TaskView::TaskAppearance - Display mode: - Display mode: + Display mode: + Display mode: - Plot mode: - Plot mode: + Plot mode: + Plot mode: - Point size: - Pistekoko: + Point size: + Pistekoko: - Line width: - Viivan leveys: + Line width: + Viivan leveys: - Transparency: - Läpinäkyvyys: + Transparency: + Läpinäkyvyys: - Appearance - Appearance + Appearance + Appearance - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Muokkaa + Edit + Muokkaa - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Appearance + Appearance + Appearance - ... - ... + ... + ... - edit selection - edit selection + edit selection + edit selection - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Paina hiiren vasenta painiketta + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - English + English + English - - + + Gui::TreeDockWidget - Tree view - Tree view + Tree view + Tree view - - + + Gui::TreeWidget - Create group... - Create group... + Create group... + Create group... - Create a group - Create a group + Create a group + Create a group - Group - Ryhmä + Group + Ryhmä - Rename - Rename + Rename + Rename - Rename object - Rename object + Rename object + Rename object - Labels & Attributes - Labels & Attributes + Labels & Attributes + Labels & Attributes - Application - Application + Application + Application - Finish editing - Lopeta muokkaaminen + Finish editing + Lopeta muokkaaminen - Finish editing object - Lopeta objektin muokkaaminen + Finish editing object + Lopeta objektin muokkaaminen - Activate document - Aktivoi asiakirja + Activate document + Aktivoi asiakirja - Activate document %1 - Aktivoi asiakirja %1 + Activate document %1 + Aktivoi asiakirja %1 - - + + Gui::View3DInventor - Export PDF - Export PDF + Export PDF + Export PDF - PDF file (*.pdf) - PDF-tiedosto (*.pdf) + PDF file (*.pdf) + PDF-tiedosto (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Select the '%1' workbench + Select the '%1' workbench + Select the '%1' workbench - - + + Position - Form - Lomake + Form + Lomake - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Grid Snap in + Grid Snap in + Grid Snap in - - + + QDockWidget - Tree view - Tree view + Tree view + Tree view - Property view - Property view + Property view + Property view - Selection view - Selection view + Selection view + Selection view - Report view - Report view + Report view + Report view - Task View - Task View + Task View + Task View - Combo View - Combo View + Combo View + Combo View - Toolbox - Työkalut + Toolbox + Työkalut - Python console - Python-konsoli + Python console + Python-konsoli - Display properties - Näytön ominaisuudet + Display properties + Näytön ominaisuudet - - + + QObject - General - Yleiset + General + Yleiset - Display - Näyttö + Display + Näyttö - Unknown filetype - Unknown filetype + Unknown filetype + Unknown filetype - Cannot open unknown filetype: %1 - Cannot open unknown filetype: %1 + Cannot open unknown filetype: %1 + Cannot open unknown filetype: %1 - Cannot save to unknown filetype: %1 - Cannot save to unknown filetype: %1 + Cannot save to unknown filetype: %1 + Cannot save to unknown filetype: %1 - Workbench failure - Workbench failure + Workbench failure + Workbench failure - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Unable to launch Qt Assistant (%1) + Unable to launch Qt Assistant (%1) + Unable to launch Qt Assistant (%1) - Exception - Exception + Exception + Exception - Open document - Open document + Open document + Open document - Import file - Import file + Import file + Import file - Export file - Export file + Export file + Export file - Printing... - Tulostaminen... + Printing... + Tulostaminen... - Cannot load workbench - Cannot load workbench + Cannot load workbench + Cannot load workbench - A general error occurred while loading the workbench - A general error occurred while loading the workbench + A general error occurred while loading the workbench + A general error occurred while loading the workbench - File not found - Tiedostoa ei löydy + File not found + Tiedostoa ei löydy - Cannot open file %1 - Tiedoston %1 avaaminen epäonnistui + Cannot open file %1 + Tiedoston %1 avaaminen epäonnistui - Save views... - Tallenna näkymät ... + Save views... + Tallenna näkymät ... - Load views... - Lataa näkymät... + Load views... + Lataa näkymät... - Freeze view - Jäädytä näkymä + Freeze view + Jäädytä näkymä - Clear views - Puhdista näkymät + Clear views + Puhdista näkymät - Restore view &%1 - Palauta näkymä &%1 + Restore view &%1 + Palauta näkymä &%1 - Save frozen views - Jäädytettyjen näkymien tallentaminen + Save frozen views + Jäädytettyjen näkymien tallentaminen - Frozen views (*.cam) - Jäädytetyt näkymät (*.cam) + Frozen views (*.cam) + Jäädytetyt näkymät (*.cam) - Restore views - Palauta näkymät + Restore views + Palauta näkymät - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Restore frozen views - Palauta jäädytetyt näkymät + Restore frozen views + Palauta jäädytetyt näkymät - Cannot open file '%1'. - Tiedostoa '%1' ei voi avata. + Cannot open file '%1'. + Tiedostoa '%1' ei voi avata. - Docked - Telakoitu + Docked + Telakoitu - Undocked - Irrallinen + Undocked + Irrallinen - Fullscreen - Kokoruututila + Fullscreen + Kokoruututila - files - tiedostot + files + tiedostot - Save picture - Tallenna kuva + Save picture + Tallenna kuva - New sub-group - Uusi alaryhmä + New sub-group + Uusi alaryhmä - Enter the name: - Kirjoita nimi: + Enter the name: + Kirjoita nimi: - New text item - Uusi kohdeteksti + New text item + Uusi kohdeteksti - Enter your text: - Kirjoita teksti: + Enter your text: + Kirjoita teksti: - New integer item - Uuden kokonaisluvun kohde + New integer item + Uuden kokonaisluvun kohde - Enter your number: - Syötä numero: + Enter your number: + Syötä numero: - New unsigned item - Uusi allekirjoittamaton kohde + New unsigned item + Uusi allekirjoittamaton kohde - New float item - Uuden sijainnin kohde + New float item + Uuden sijainnin kohde - New Boolean item - New Boolean item + New Boolean item + New Boolean item - Choose an item: - Valitse kohde: + Choose an item: + Valitse kohde: - Rename group - Nimeä ryhmä uudelleen + Rename group + Nimeä ryhmä uudelleen - The group '%1' cannot be renamed. - Ryhmää '%1' ei voi nimetä uudelleen. + The group '%1' cannot be renamed. + Ryhmää '%1' ei voi nimetä uudelleen. - Existing group - Aiemmin luotu ryhmä + Existing group + Aiemmin luotu ryhmä - The group '%1' already exists. - Ryhmä '%1' on jo olemassa. + The group '%1' already exists. + Ryhmä '%1' on jo olemassa. - Change value - Muuta arvoa + Change value + Muuta arvoa - Save document under new filename... - Tallenna asiakirja uudella tiedostonimellä... + Save document under new filename... + Tallenna asiakirja uudella tiedostonimellä... - Saving aborted - Tallentaminen keskeytettiin + Saving aborted + Tallentaminen keskeytettiin - Unsaved document - Tallentamaton asiakirja + Unsaved document + Tallentamaton asiakirja - Save document before close? - Tallennetaanko asiakirja ennen sulkemista? + Save document before close? + Tallennetaanko asiakirja ennen sulkemista? - Save Macro - Tallenna makro + Save Macro + Tallenna makro - Finish - Valmis + Finish + Valmis - Clear - Tyhjennä + Clear + Tyhjennä - Cancel - Peruuta + Cancel + Peruuta - Inner - Sisempi + Inner + Sisempi - Outer - Ulompi + Outer + Ulompi - No Browser - Ei selain + No Browser + Ei selain - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Selaimen avaaminen ei onnistu. Avaa selainikkuna ja kirjoita: http://localhost:%1. + Selaimen avaaminen ei onnistu. Avaa selainikkuna ja kirjoita: http://localhost:%1. - No Server - Ei Serveriä + No Server + Ei Serveriä - Unable to start the server to port %1: %2. - Ei voitu käynnistää palvelimen porttia %1:%2. + Unable to start the server to port %1: %2. + Ei voitu käynnistää palvelimen porttia %1:%2. - Unable to open your system browser. - Järjestelmä-selaimen avaaminen ei onnistu. + Unable to open your system browser. + Järjestelmä-selaimen avaaminen ei onnistu. - Options... - Asetukset... + Options... + Asetukset... - Out of memory - Muisti loppui + Out of memory + Muisti loppui - Not enough memory available to display the data. - Muisti ei riitä tietojen näyttämiseen. + Not enough memory available to display the data. + Muisti ei riitä tietojen näyttämiseen. - Cannot find file %1 - Tiedostoa %1 ei löydy + Cannot find file %1 + Tiedostoa %1 ei löydy - Cannot find file %1 neither in %2 nor in %3 - Ei voida löytää tiedostoja %1, %2 ja %3 + Cannot find file %1 neither in %2 nor in %3 + Ei voida löytää tiedostoja %1, %2 ja %3 - Save %1 Document - Tallenna asiakirja %1 + Save %1 Document + Tallenna asiakirja %1 - %1 document (*.FCStd) - asiakirja %1 (*.FCStd) + %1 document (*.FCStd) + asiakirja %1 (*.FCStd) - Save As - Tallenna nimellä + Save As + Tallenna nimellä - %1 already exists. + %1 already exists. Do you want to replace it? - %1 on jo olemassa. Haluatko korvata sen? + %1 on jo olemassa. Haluatko korvata sen? - Document not closable - Asiakirja ei ole suljettavissa + Document not closable + Asiakirja ei ole suljettavissa - The document is not closable for the moment. - Asiakirja ei ole tällä hetkellä suljettavissa. + The document is not closable for the moment. + Asiakirja ei ole tällä hetkellä suljettavissa. - No OpenGL - Ei OpenGL + No OpenGL + Ei OpenGL - This system does not support OpenGL - Tämä järjestelmä ei tue OpenGL:ää + This system does not support OpenGL + Tämä järjestelmä ei tue OpenGL:ää - Help - Ohje + Help + Ohje - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - %1 Help - %1 Ohjeet + %1 Help + %1 Ohjeet - Exporting PDF... - PDF vienti... + Exporting PDF... + PDF vienti... - Wrong selection - Väärä valinta + Wrong selection + Väärä valinta - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - New boolean item - New boolean item + New boolean item + New boolean item - Navigation styles - Navigointi tyylit + Navigation styles + Navigointi tyylit - %1 navigation - %1 navigointi + %1 navigation + %1 navigointi - Move annotation - Move annotation + Move annotation + Move annotation - Transform - Transform + Transform + Transform - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + Standardi-Näkymä + + + Box selection + + + + StdCmdAbout - Help - Ohje + Help + Ohje - &About %1 - &Tietoja %1 + &About %1 + &Tietoja %1 - About %1 - Tietoja %1 + About %1 + Tietoja %1 - - + + StdCmdAboutQt - Help - Ohje + Help + Ohje - About &Qt - Tietoja &Qt + About &Qt + Tietoja &Qt - About Qt - Tietoja Qt + About Qt + Tietoja Qt - - + + StdCmdActivateNextWindow - Window - Ikkuna + Window + Ikkuna - Ne&xt - Seur&aava + Ne&xt + Seur&aava - Activate next window - Aktivoi seuraava ikkuna + Activate next window + Aktivoi seuraava ikkuna - - + + StdCmdActivatePrevWindow - Window - Ikkuna + Window + Ikkuna - Pre&vious - Edell&inen + Pre&vious + Edell&inen - Activate previous window - Aktivoi edellinen ikkuna + Activate previous window + Aktivoi edellinen ikkuna - - + + + StdCmdAlignment + + Edit + Muokkaa + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Ikkuna + Window + Ikkuna - Arrange &Icons - Järjestä &kuvakkeet + Arrange &Icons + Järjestä &kuvakkeet - Arrange Icons - Järjestä kuvakkeet + Arrange Icons + Järjestä kuvakkeet - - + + StdCmdAxisCross - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Ikkuna + Window + Ikkuna - &Cascade - &Cascade + &Cascade + &Cascade - Tile pragmatic - Tile pragmatic + Tile pragmatic + Tile pragmatic - - + + StdCmdCloseActiveWindow - Window - Ikkuna + Window + Ikkuna - Cl&ose - Sulje + Cl&ose + Sulje - Close active window - Sulje aktiivinen ikkuna + Close active window + Sulje aktiivinen ikkuna - - + + StdCmdCloseAllWindows - Window - Ikkuna + Window + Ikkuna - Close Al&l - Sulje kaikki + Close Al&l + Sulje kaikki - Close all windows - Sulje kaikki ikkunat + Close all windows + Sulje kaikki ikkunat - - + + StdCmdCommandLine - Tools - Työkalut + Tools + Työkalut - Start command &line... - Start command &line... + Start command &line... + Start command &line... - Opens the command line in the console - Avaa komentorivin konsolissa + Opens the command line in the console + Avaa komentorivin konsolissa - - + + StdCmdCopy - Edit - Muokkaa + Edit + Muokkaa - C&opy - C&opy + C&opy + C&opy - Copy operation - Kopiointi toiminto + Copy operation + Kopiointi toiminto - - + + StdCmdCut - Edit - Muokkaa + Edit + Muokkaa - &Cut - &Leikkaa + &Cut + &Leikkaa - Cut out - Leikata pois + Cut out + Leikata pois - - + + StdCmdDDuplicateSelection - Edit - Muokkaa + Edit + Muokkaa - Duplicate selection - Moninkertainen valinta + Duplicate selection + Moninkertainen valinta - Put duplicates of the selected objects to the active document - Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document - - + + StdCmdDelete - Edit - Muokkaa + Edit + Muokkaa - &Delete - &Poista + &Delete + &Poista - Deletes the selected objects - Poistaa valitut objektit + Deletes the selected objects + Poistaa valitut objektit - - + + StdCmdDemoMode - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - View turntable... - View turntable... + View turntable... + View turntable... - View turntable - View turntable + View turntable + View turntable - - + + StdCmdDlgCustomize - Tools - Työkalut + Tools + Työkalut - Cu&stomize... - Mukauta... + Cu&stomize... + Mukauta... - Customize toolbars and command bars - Customize toolbars and command bars + Customize toolbars and command bars + Customize toolbars and command bars - - + + StdCmdDlgMacroExecute - Macros ... - Makrot ... + Macros ... + Makrot ... - Opens a dialog to let you execute a recorded macro - Opens a dialog to let you execute a recorded macro + Opens a dialog to let you execute a recorded macro + Opens a dialog to let you execute a recorded macro - Macro - Macro + Macro + Macro - - + + StdCmdDlgMacroExecuteDirect - Macro - Macro + Macro + Macro - Execute macro - Suorita makro + Execute macro + Suorita makro - Execute the macro in the editor - Suorittaa makron editorissa + Execute the macro in the editor + Suorittaa makron editorissa - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Makron tallennus ... + &Macro recording ... + &Makron tallennus ... - Opens a dialog to record a macro - Avaa valintaikkunan tallennettavalle makrolle + Opens a dialog to record a macro + Avaa valintaikkunan tallennettavalle makrolle - Macro - Macro + Macro + Macro - - + + StdCmdDlgParameter - Tools - Työkalut + Tools + Työkalut - E&dit parameters ... - M&uokkaa parametrejä... + E&dit parameters ... + M&uokkaa parametrejä... - Opens a Dialog to edit the parameters - Opens a Dialog to edit the parameters + Opens a Dialog to edit the parameters + Opens a Dialog to edit the parameters - - + + StdCmdDlgPreferences - Tools - Työkalut + Tools + Työkalut - &Preferences ... - &Asetukset ... + &Preferences ... + &Asetukset ... - Opens a Dialog to edit the preferences - Opens a Dialog to edit the preferences + Opens a Dialog to edit the preferences + Opens a Dialog to edit the preferences - - + + StdCmdDockViewMenu - View - Näytä + View + Näytä - Vie&ws - Näky&mät + Vie&ws + Näky&mät - Toggles this window - Näytä tai piilota tämä ikkuna + Toggles this window + Näytä tai piilota tämä ikkuna - - + + StdCmdDrawStyle - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Muokkaa + + + Duplicate selection + Moninkertainen valinta + + + Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document + + + + StdCmdEdit + + Edit + Muokkaa + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - File + File + File - &Export... - &Export... + &Export... + &Export... - Export an object in the active document - Export an object in the active document + Export an object in the active document + Export an object in the active document - Supported formats - Supported formats + Supported formats + Supported formats - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Työkalut + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - File + File + File - &Recompute - &Recompute + &Recompute + &Recompute - Recompute feature or document - Recompute feature or document + Recompute feature or document + Recompute feature or document - - + + StdCmdFreeCADWebsite - Help - Ohje + Help + Ohje - FreeCAD Website - FreeCAD Web-sivusto + FreeCAD Website + FreeCAD Web-sivusto - The FreeCAD website - FreeCAD-sivusto + The FreeCAD website + FreeCAD-sivusto - - + + StdCmdFreezeViews - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Freeze display - Näytön lukitseminen + Freeze display + Näytön lukitseminen - Freezes the current view position - Nykyisen näkymän sijainti jumittuu + Freezes the current view position + Nykyisen näkymän sijainti jumittuu - - + + StdCmdHideObjects - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Hide all objects - Piilota kaikki kohteet + Hide all objects + Piilota kaikki kohteet - Hide all objects in the document - Piilota kaikki objektit asiakirjassa + Hide all objects in the document + Piilota kaikki objektit asiakirjassa - - + + StdCmdHideSelection - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Hide selection - Piilota valinta + Hide selection + Piilota valinta - Hide all selected objects - Piilota kaikki valitut objektit + Hide all selected objects + Piilota kaikki valitut objektit - - + + StdCmdImport - File - File + File + File - &Import... - &Tuo... + &Import... + &Tuo... - Import a file in the active document - Tuo tiedosto aktiiviseen asiakirjaan + Import a file in the active document + Tuo tiedosto aktiiviseen asiakirjaan - Supported formats - Supported formats + Supported formats + Supported formats - All files (*.*) - Kaikki tiedostot (*.*) + All files (*.*) + Kaikki tiedostot (*.*) - - + + StdCmdMacroStartDebug - Macro - Macro + Macro + Macro - Debug macro - Makron debuggaus + Debug macro + Makron debuggaus - Start debugging of macro - Aloita makron debuggaus + Start debugging of macro + Aloita makron debuggaus - - + + StdCmdMacroStepOver - Macro - Macro + Macro + Macro - Step over - Step over + Step over + Step over - - + + StdCmdMacroStopDebug - Macro - Macro + Macro + Macro - Stop debugging - Lopeta debuggaus + Stop debugging + Lopeta debuggaus - Stop debugging of macro - Lopeta makron debuggaus + Stop debugging of macro + Lopeta makron debuggaus - - + + StdCmdMacroStopRecord - Macro - Macro + Macro + Macro - S&top macro recording - P&ysäytä makron tallentaminen + S&top macro recording + P&ysäytä makron tallentaminen - Stop the macro recording session - Lopeta makro istunnon tallentaminen + Stop the macro recording session + Lopeta makro istunnon tallentaminen - - + + StdCmdMeasureDistance - View - Näytä + View + Näytä - Measure distance - Mittaa etäisyys + Measure distance + Mittaa etäisyys - - + + StdCmdMeasurementSimple - Tools - Työkalut + Tools + Työkalut - Mesure distance - Mittaa etäisyys + Mesure distance + Mittaa etäisyys - Measures distance between two selected objects - Mittaa etäisyys kahden valitun objektin välillä + Measures distance between two selected objects + Mittaa etäisyys kahden valitun objektin välillä - - + + Measure distance + Mittaa etäisyys + + + StdCmdMergeProjects - File - File + File + File - Merge project... - Merge project... + Merge project... + Merge project... - Merge project - Merge project + Merge project + Merge project - %1 document (*.fcstd) - %1 document (*.fcstd) + %1 document (*.fcstd) + %1 document (*.fcstd) - Cannot merge project with itself. - Cannot merge project with itself. + Cannot merge project with itself. + Cannot merge project with itself. - - + + StdCmdNew - File - File + File + File - &New - &Uusi + &New + &Uusi - Create a new empty document - Luo uusi tyhjä dokumentti + Create a new empty document + Luo uusi tyhjä dokumentti - - + + StdCmdOnlineHelp - Help - Ohje + Help + Ohje - Show help to the application - Näytä ohje sovellukselle + Show help to the application + Näytä ohje sovellukselle - - + + StdCmdOnlineHelpPython - Help - Ohje + Help + Ohje - Python Manuals - Python Manuaalit + Python Manuals + Python Manuaalit - Show the Python documentation - Näytä python-asiakirjat + Show the Python documentation + Näytä python-asiakirjat - - + + StdCmdOnlineHelpWebsite - Help - Ohje + Help + Ohje - Help Website - Ohje Web-sivusto + Help Website + Ohje Web-sivusto - The website where the help is maintained - Verkkosivusto, josta saat pääasiallisen avun + The website where the help is maintained + Verkkosivusto, josta saat pääasiallisen avun - - + + StdCmdOpen - File - File + File + File - &Open... - &Avaa... + &Open... + &Avaa... - Open a document or import files - Avaa asiakirja tai tuo tiedostoja + Open a document or import files + Avaa asiakirja tai tuo tiedostoja - Supported formats - Supported formats + Supported formats + Supported formats - All files (*.*) - Kaikki tiedostot (*.*) + All files (*.*) + Kaikki tiedostot (*.*) - - + + StdCmdPaste - Edit - Muokkaa + Edit + Muokkaa - &Paste - &Liitä + &Paste + &Liitä - Paste operation - Liittämistoiminto + Paste operation + Liittämistoiminto - - + + StdCmdPlacement - Edit - Muokkaa + Edit + Muokkaa - Placement... - Sijainti... + Placement... + Sijainti... - Place the selected objects - Place the selected objects + Place the selected objects + Place the selected objects - - + + StdCmdPrint - File - File + File + File - &Print... - &Tulostaa... + &Print... + &Tulostaa... - Print the document - Tulosta asiakirja + Print the document + Tulosta asiakirja - - + + StdCmdPrintPdf - File - File + File + File - &Export PDF... - &Vie PDF-asiakirjaan... + &Export PDF... + &Vie PDF-asiakirjaan... - Export the document as PDF - Vie asiakirja PDF-tiedostona + Export the document as PDF + Vie asiakirja PDF-tiedostona - - + + StdCmdPrintPreview - File - File + File + File - &Print preview... - &Print preview... + &Print preview... + &Print preview... - Print the document - Tulosta asiakirja + Print the document + Tulosta asiakirja - Print preview - Print preview + Print preview + Print preview - - + + StdCmdProjectInfo - File - File + File + File - Project i&nformation... - Projektin t&iedot... + Project i&nformation... + Projektin t&iedot... - Show details of the currently active project - Näytä aktiivisen projektin tiedot + Show details of the currently active project + Näytä aktiivisen projektin tiedot - - + + StdCmdProjectUtil - Tools - Työkalut + Tools + Työkalut - Project utility... - Project utility... + Project utility... + Project utility... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - Ohje + Help + Ohje - Python Website - Python Web-sivusto + Python Website + Python Web-sivusto - The official Python website - The official Python website + The official Python website + The official Python website - - + + StdCmdQuit - File - File + File + File - E&xit - L&opeta + E&xit + L&opeta - Quits the application - Lopeta sovellus + Quits the application + Lopeta sovellus - - + + StdCmdRandomColor - File - File + File + File - Random color - Satunnainen väri + Random color + Satunnainen väri - - + + StdCmdRecentFiles - File - File + File + File - Recent files - Viimeisimmät tiedostot + Recent files + Viimeisimmät tiedostot - Recent file list - Viimeksi käytettyjen tiedostojen luettelo + Recent file list + Viimeksi käytettyjen tiedostojen luettelo - - + + StdCmdRedo - Edit - Muokkaa + Edit + Muokkaa - &Redo - &Tee uudelleen + &Redo + &Tee uudelleen - Redoes a previously undone action - Tekee uudelleen viimeksi kumotun toiminnon + Redoes a previously undone action + Tekee uudelleen viimeksi kumotun toiminnon - - + + StdCmdRefresh - Edit - Muokkaa + Edit + Muokkaa - &Refresh - &Päivitä + &Refresh + &Päivitä - Recomputes the current active document - Recomputes the current active document + Recomputes the current active document + Recomputes the current active document - - + + StdCmdSave - File - File + File + File - &Save - &Tallenna + &Save + &Tallenna - Save the active document - Tallenna aktiivinen asiakirja + Save the active document + Tallenna aktiivinen asiakirja - - + + StdCmdSaveAs - File - File + File + File - Save &As... - Tallenna &nimellä... + Save &As... + Tallenna &nimellä... - Save the active document under a new file name - Tallentaa aktiivisen asiakirjan uudella tiedostonimellä + Save the active document under a new file name + Tallentaa aktiivisen asiakirjan uudella tiedostonimellä - - + + StdCmdSceneInspector - Tools - Työkalut + Tools + Työkalut - Scene inspector... - Scene inspector... + Scene inspector... + Scene inspector... - Scene inspector - Scene inspector + Scene inspector + Scene inspector - - + + StdCmdSelectAll - Edit - Muokkaa + Edit + Muokkaa - Select &All - Valitse &kaikki + Select &All + Valitse &kaikki - Select all - Valitse kaikki + Select all + Valitse kaikki - - + + StdCmdSetAppearance - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Appearance... - Ulkoasu... + Appearance... + Ulkoasu... - Sets the display properties of the selected object - Sets the display properties of the selected object + Sets the display properties of the selected object + Sets the display properties of the selected object - - + + StdCmdShowObjects - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Show all objects - Show all objects + Show all objects + Show all objects - Show all objects in the document - Show all objects in the document + Show all objects in the document + Show all objects in the document - - + + StdCmdShowSelection - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Show selection - Show selection + Show selection + Show selection - Show all selected objects - Show all selected objects + Show all selected objects + Show all selected objects - - + + StdCmdStatusBar - View - Näytä + View + Näytä - Status bar - Status bar + Status bar + Status bar - Toggles the status bar - Toggles the status bar + Toggles the status bar + Toggles the status bar - - + + StdCmdTextureMapping - Tools - Työkalut + Tools + Työkalut - Texture mapping... - Texture mapping... + Texture mapping... + Texture mapping... - Texture mapping - Texture mapping + Texture mapping + Texture mapping - - + + StdCmdTileWindows - Window - Ikkuna + Window + Ikkuna - &Tile - &Tile + &Tile + &Tile - Tile the windows - Tile the windows + Tile the windows + Tile the windows - - + + StdCmdToggleBreakpoint - Macro - Macro + Macro + Macro - Toggle breakpoint - Toggle breakpoint + Toggle breakpoint + Toggle breakpoint - - + + StdCmdToggleClipPlane - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Clipping plane - Clipping plane + Clipping plane + Clipping plane - Toggles clipping plane for active view - Toggles clipping plane for active view + Toggles clipping plane for active view + Toggles clipping plane for active view - - + + StdCmdToggleNavigation - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Toggle navigation/Edit mode - Toggle navigation/Edit mode + Toggle navigation/Edit mode + Toggle navigation/Edit mode - Toggle between navigation and edit mode - Toggle between navigation and edit mode + Toggle between navigation and edit mode + Toggle between navigation and edit mode - - + + StdCmdToggleObjects - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Toggle all objects - Toggle all objects + Toggle all objects + Toggle all objects - Toggles visibility of all objects in the active document - Toggles visibility of all objects in the active document + Toggles visibility of all objects in the active document + Toggles visibility of all objects in the active document - - + + StdCmdToggleSelectability - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Toggle selectability - Toggle selectability + Toggle selectability + Toggle selectability - Toggles the property of the objects to get selected in the 3D-View - Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View - - + + StdCmdToggleVisibility - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Toggle visibility - Toggle visibility + Toggle visibility + Toggle visibility - Toggles visibility - Toggles visibility + Toggles visibility + Toggles visibility - - + + StdCmdToolBarMenu - View - Näytä + View + Näytä - Tool&bars - Tool&bars + Tool&bars + Tool&bars - Toggles this window - Näytä tai piilota tämä ikkuna + Toggles this window + Näytä tai piilota tämä ikkuna - - + + StdCmdTransform - Edit - Muokkaa + Edit + Muokkaa - Transform... - Transform... + Transform... + Transform... - Transform the geometry of selected objects - Transform the geometry of selected objects + Transform the geometry of selected objects + Transform the geometry of selected objects - - + + StdCmdTreeSelection - View - Näytä + View + Näytä - Go to selection - Go to selection + Go to selection + Go to selection - Scroll to first selected item - Scroll to first selected item + Scroll to first selected item + Scroll to first selected item - - + + StdCmdUndo - Edit - Muokkaa + Edit + Muokkaa - &Undo - &Undo + &Undo + &Undo - Undo exactly one action - Undo exactly one action + Undo exactly one action + Undo exactly one action - - + + StdCmdUserInterface - View - Näytä + View + Näytä - Dock views - Dock views + Dock views + Dock views - Dock all top-level views - Dock all top-level views + Dock all top-level views + Dock all top-level views - - + + StdCmdViewAxo - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Axometric - Axometric + Axometric + Axometric - Set to axometric view - Set to axometric view + Set to axometric view + Set to axometric view - - + + StdCmdViewBottom - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Bottom - Bottom + Bottom + Bottom - Set to bottom view - Aseta pohjan tarkastelu näkymä + Set to bottom view + Aseta pohjan tarkastelu näkymä - - + + StdCmdViewCreate - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Create new view - Luo uusi näkymä + Create new view + Luo uusi näkymä - Creates a new view window for the active document - Creates a new view window for the active document + Creates a new view window for the active document + Creates a new view window for the active document - - + + StdCmdViewExample1 - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Inventor example #1 - Inventor example #1 + Inventor example #1 + Inventor example #1 - Shows a 3D texture with manipulator - Shows a 3D texture with manipulator + Shows a 3D texture with manipulator + Shows a 3D texture with manipulator - - + + StdCmdViewExample2 - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Inventor example #2 - Inventor example #2 + Inventor example #2 + Inventor example #2 - Shows spheres and drag-lights - Shows spheres and drag-lights + Shows spheres and drag-lights + Shows spheres and drag-lights - - + + StdCmdViewExample3 - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Inventor example #3 - Inventor example #3 + Inventor example #3 + Inventor example #3 - Shows a animated texture - Shows a animated texture + Shows a animated texture + Shows a animated texture - - + + StdCmdViewFitAll - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Fit all - Fit all + Fit all + Fit all - Fits the whole content on the screen - Fits the whole content on the screen + Fits the whole content on the screen + Fits the whole content on the screen - - + + StdCmdViewFitSelection - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Fit selection - Sovita valinta + Fit selection + Sovita valinta - Fits the selected content on the screen - Fits the selected content on the screen + Fits the selected content on the screen + Fits the selected content on the screen - - + + StdCmdViewFront - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Front - Etupuoli + Front + Etupuoli - Set to front view - Aseta näkymä edestäpäin + Set to front view + Aseta näkymä edestäpäin - - + + StdCmdViewIvIssueCamPos - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Issue camera position - Issue camera position + Issue camera position + Issue camera position - Issue the camera position to the console and to a macro, to easily recall this position - Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Stereo Interleaved Columns - Stereo Interleaved Columns + Stereo Interleaved Columns + Stereo Interleaved Columns - Switch stereo viewing to Interleaved Columns - Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Stereo Interleaved Rows - Stereo Interleaved Rows + Stereo Interleaved Rows + Stereo Interleaved Rows - Switch stereo viewing to Interleaved Rows - Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows - - + + StdCmdViewIvStereoOff - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Stereo Off - Stereo Off + Stereo Off + Stereo Off - Switch stereo viewing off - Switch stereo viewing off + Switch stereo viewing off + Switch stereo viewing off - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Stereo red/green - Stereo red/green + Stereo red/green + Stereo red/green - Switch stereo viewing to red/green - Switch stereo viewing to red/green + Switch stereo viewing to red/green + Switch stereo viewing to red/green - - + + StdCmdViewLeft - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Left - Vasen + Left + Vasen - Set to left view - Aseta vasemmanpuoleinen näkymä + Set to left view + Aseta vasemmanpuoleinen näkymä - - + + StdCmdViewRear - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Rear - Takana + Rear + Takana - Set to rear view - Aseta Taustakamera + Set to rear view + Aseta Taustakamera - - + + StdCmdViewRight - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Right - Oikea + Right + Oikea - Set to right view - Aseta oikea näkymä + Set to right view + Aseta oikea näkymä - - + + + StdCmdViewRotateLeft + + Standard-View + Standardi-Näkymä + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standardi-Näkymä + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Top - Yläpuoli + Top + Yläpuoli - Set to top view - Aseta yläpuolen näkymä + Set to top view + Aseta yläpuolen näkymä - - + + StdCmdWhatsThis - Help - Ohje + Help + Ohje - &What's This? - &Mikä tämä on? + &What's This? + &Mikä tämä on? - What's This - Mikä tämä on + What's This + Mikä tämä on - - + + StdCmdWindows - Window - Ikkuna + Window + Ikkuna - &Windows... - &Ikkunat... + &Windows... + &Ikkunat... - Windows list - Lista ikkunoista + Windows list + Lista ikkunoista - - + + StdCmdWindowsMenu - Window - Ikkuna + Window + Ikkuna - Activates this window - Aktivoi tämä ikkuna + Activates this window + Aktivoi tämä ikkuna - - + + StdCmdWorkbench - View - Näytä + View + Näytä - Workbench - Workbench + Workbench + Workbench - Switch between workbenches - Switch between workbenches + Switch between workbenches + Switch between workbenches - - + + StdOrthographicCamera - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Orthographic view - Orthographic view + Orthographic view + Orthographic view - Switches to orthographic view mode - Switches to orthographic view mode + Switches to orthographic view mode + Switches to orthographic view mode - - + + StdPerspectiveCamera - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Perspective view - Perspektiivinäkymä + Perspective view + Perspektiivinäkymä - Switches to perspective view mode - Vaihtaa perspektiivinäkymään + Switches to perspective view mode + Vaihtaa perspektiivinäkymään - - + + StdViewBoxZoom - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Box zoom - Valitun alueen zoomaus + Box zoom + Valitun alueen zoomaus - - + + StdViewDockUndockFullscreen - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Document window - Asiakirjan ikkuna + Document window + Asiakirjan ikkuna - Display the active view either in fullscreen, in undocked or docked mode - Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode - - + + StdViewScreenShot - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Save picture... - Tallenna kuva... + Save picture... + Tallenna kuva... - Creates a screenshot of the active view - Luo kuvakaappaus aktiivisesta näkymästä + Creates a screenshot of the active view + Luo kuvakaappaus aktiivisesta näkymästä - - + + StdViewZoomIn - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Zoom In - Suurenna + Zoom In + Suurenna - - + + StdViewZoomOut - Standard-View - Standardi-Näkymä + Standard-View + Standardi-Näkymä - Zoom Out - Loitonna + Zoom Out + Loitonna - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Tiedosto + &File + &Tiedosto - &Edit - &Muokkaa + &Edit + &Muokkaa - Standard views - Standardi näkymät + Standard views + Standardi näkymät - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Näkyvyys + Visibility + Näkyvyys - &View - &Näytä + &View + &Näytä - &Tools - &Tools + &Tools + &Tools - &Macro - &Macro + &Macro + &Macro - &Windows - &Windows + &Windows + &Windows - &On-line help - &On-line help + &On-line help + &On-line help - &Help - &Ohje + &Help + &Ohje - File - File + File + File - Macro - Macro + Macro + Macro - View - Näytä + View + Näytä - Special Ops - Special Ops + Special Ops + Special Ops - - + + testClass - test - testi + test + testi - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Valitse tehtävä-paneelin tyyli + Choose the style of the Task Panel + Valitse tehtävä-paneelin tyyli - Default - Oletus + Default + Oletus - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_fr.ts b/src/Gui/Language/FreeCAD_fr.ts index f665da6bd..62ed9e6ed 100644 --- a/src/Gui/Language/FreeCAD_fr.ts +++ b/src/Gui/Language/FreeCAD_fr.ts @@ -1,5490 +1,5908 @@ - - + + Angle - Form - Forme + Form + Forme - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Angle d'accrochage + Angle Snap + Angle d'accrochage - - 1 ° - + + 1 ° + - - 2 ° - + + 2 ° + - - 5 ° - + + 5 ° + - - 10 ° - 10° + + 10 ° + 10° - - 20 ° - 20° + + 20 ° + 20° - - 45 ° - 45° + + 45 ° + 45° - - 90 ° - 90° + + 90 ° + 90° - - 180 ° - 180° + + 180 ° + 180° - - + + Gui::AccelLineEdit - none - aucun + none + aucun - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Ajouter + + + Remove + Enlever + + + Move up + Déplacer vers le haut + + + Move down + Déplacer vers le bas + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Appuyez sur le bouton gauche de la souris + Press left mouse button + Appuyez sur le bouton gauche de la souris - Press SHIFT and middle mouse button - Appuyez sur Maj et le bouton du milieu de la souris + Press SHIFT and middle mouse button + Appuyez sur Maj et le bouton du milieu de la souris - Press middle mouse button - Appuyez sur le bouton central de la souris + Press middle mouse button + Appuyez sur le bouton central de la souris - Scroll middle mouse button - Faites défiler le bouton milieu de la souris + Scroll middle mouse button + Faites défiler le bouton milieu de la souris - - + + Gui::CADNavigationStyle - Press left mouse button - Appuyez sur le bouton gauche de la souris + Press left mouse button + Appuyez sur le bouton gauche de la souris - Press middle mouse button - Appuyez sur le bouton central de la souris + Press middle mouse button + Appuyez sur le bouton central de la souris - Press left and middle mouse button - Appuyez sur le bouton gauche et le bouton central + Press left and middle mouse button + Appuyez sur le bouton gauche et le bouton central - Scroll middle mouse button - Faites défiler le bouton milieu de la souris + Scroll middle mouse button + Faites défiler le bouton milieu de la souris - - + + Gui::Command - Standard - Standard + Standard + Standard - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Annuler + &Cancel + &Annuler - - + + Gui::ControlSingleton - Task panel - Panneau de Tâches + Task panel + Panneau de Tâches - - + + Gui::Dialog::AboutApplication - About - À propos + About + À propos - Revision number - Numéro de révision + Revision number + Numéro de révision - Version - Version + Version + Version - OK - OK + OK + OK - - Texte source + + Texte source - Release date - Date de publication + Release date + Date de publication - Platform - Plate-forme + Platform + Plate-forme - License... - Licence... + License... + Licence... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Bouton %1 + Button %1 + Bouton %1 - Out Of Range - Hors de portée + Out Of Range + Hors de portée - - + + Gui::Dialog::CommandModel - Commands - Commandes + Commands + Commandes - - + + Gui::Dialog::DemoMode - View Turntable - Vue en rotation + View Turntable + Vue en rotation - Speed - Vitesse + Speed + Vitesse - Maximum - Maximum + Maximum + Maximum - Minimum - Minimum + Minimum + Minimum - Fullscreen - Plein écran + Fullscreen + Plein écran - Enable timer - Activer la minuterie + Enable timer + Activer la minuterie - s - s + s + s - Angle - Angle + Angle + Angle + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Exécuter - -90° - -90° + Stop + Arrêter - Play - Exécuter + Close + Fermer - - Stop - Arrêter - - - Close - Fermer - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Choisir la fenêtre + Choose Window + Choisir la fenêtre - &Activate - &Activer + &Activate + &Activer - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Annuler + &Cancel + &Annuler - - Texte source + + Texte source - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Fenêtres + Windows + Fenêtres - - + + Gui::Dialog::DlgAuthorization - Authorization - Autorisation + Authorization + Autorisation - &OK - &OK + &OK + &OK - &Cancel - &Annuler + &Cancel + &Annuler - Password: - Mot de passe : + Password: + Mot de passe : - User name: - Nom d'utilisateur : + User name: + Nom d'utilisateur : - - Texte source + + Texte source - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Choisir l'icône + Choose Icon + Choisir l'icône - OK - OK + OK + OK - Cancel - Annuler + Cancel + Annuler - Add icons... - Ajouter des icônes... + Add icons... + Ajouter des icônes... - - + + Gui::Dialog::DlgCustomActions - Macros - Macros + Macros + Macros - Setup Custom Macros - Installer des macros personnalisées + Setup Custom Macros + Installer des macros personnalisées - Macro: - Macro : + Macro: + Macro : - ... - ... + ... + ... - Pixmap - Pixmap + Pixmap + Pixmap - Accelerator: - Accélérateur: + Accelerator: + Accélérateur: - What's this: - Qu'est ce que c'est : + What's this: + Qu'est ce que c'est : - Status text: - Texte d'état: + Status text: + Texte d'état: - Tool tip: - infobulle + Tool tip: + infobulle - Menu text: - Texte menu : + Menu text: + Texte menu : - Add - Ajouter + Add + Ajouter - Remove - Enlever + Remove + Enlever - Replace - Remplacer + Replace + Remplacer - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Icônes + Icons + Icônes - Macros - Macros + Macros + Macros - No macro - Aucune macro + No macro + Aucune macro - No macros found. - Aucune macro trouvée. + No macros found. + Aucune macro trouvée. - Macro not found - Macro non trouvée + Macro not found + Macro non trouvée - Sorry, couldn't find macro file '%1'. - Désolé, impossible de trouver le fichier macro '%1'. + Sorry, couldn't find macro file '%1'. + Désolé, impossible de trouver le fichier macro '%1'. - Empty macro - Macro vide + Empty macro + Macro vide - Please specify the macro first. - Veuillez d'abord spécifier la macro. + Please specify the macro first. + Veuillez d'abord spécifier la macro. - Empty text - Texte vide + Empty text + Texte vide - Please specify the menu text first. - Veuillez d'abord spécifier le texte du menu. + Please specify the menu text first. + Veuillez d'abord spécifier le texte du menu. - No item selected - Aucun élément sélectionné + No item selected + Aucun élément sélectionné - Please select a macro item first. - Veuillez d'abord sélectionner un élément de macro. + Please select a macro item first. + Veuillez d'abord sélectionner un élément de macro. - - + + Gui::Dialog::DlgCustomCommands - Commands - Commandes + Commands + Commandes - - Texte source + + Texte source - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Catégorie + Category + Catégorie - Icon - Icône + Icon + Icône - Command - Commande + Command + Commande - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Clavier + Keyboard + Clavier - Description: - Description : + Description: + Description : - &Category: - &Catégorie : + &Category: + &Catégorie : - C&ommands: - C&ommandes : + C&ommands: + C&ommandes : - Current shortcut: - Raccourci actuel : + Current shortcut: + Raccourci actuel : - Press &new shortcut: - Appuyez &sur le nouveau raccourci : + Press &new shortcut: + Appuyez &sur le nouveau raccourci : - Currently assigned to: - Actuellement attribué à : + Currently assigned to: + Actuellement attribué à : - &Assign - &Attribuer + &Assign + &Attribuer - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Réinitialiser + &Reset + &Réinitialiser - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Tout réinitiali&ser + Re&set All + Tout réinitiali&ser - Alt+S - Alt+M + Alt+S + Alt+M - - Texte source + + Texte source - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Icône + Icon + Icône - Command - Commande + Command + Commande - none - aucun + none + aucun - Multiple defined shortcut - Raccourci défini plusieurs fois + Multiple defined shortcut + Raccourci défini plusieurs fois - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Le raccourci '%1' est défini plus d'une fois. Il pourrait en résulter un comportement inattendu. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Le raccourci '%1' est défini plus d'une fois. Il pourrait en résulter un comportement inattendu. - Already defined shortcut - Raccourci déjà défini + Already defined shortcut + Raccourci déjà défini - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Le raccourci '%1' est déjà attribué à '%2'. + Le raccourci '%1' est déjà attribué à '%2'. Veuillez définir un autre raccourci. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Barres des boîtes à outils + Toolbox bars + Barres des boîtes à outils - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Barre d'outils + Toolbars + Barre d'outils - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> Les changements seront pris en charge lors du prochain chargement de l'atelier approprié</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> Les changements seront pris en charge lors du prochain chargement de l'atelier approprié</p></body></html> - Move right - Déplacer vers la droite + Move right + Déplacer vers la droite - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Descendre l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Descendre l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> - Move left - Déplacer vers la gauche + Move left + Déplacer vers la gauche - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Monter l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Monter l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> - Move down - Déplacer vers le bas + Move down + Déplacer vers le bas - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Descendre l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Descendre l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> - Move up - Déplacer vers le haut + Move up + Déplacer vers le haut - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Monter l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Monter l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> - New... - Nouveau... + New... + Nouveau... - Rename... - Renommer... + Rename... + Renommer... - Delete - Supprimer + Delete + Supprimer - Icon - Icône + Icon + Icône - Command - Commande + Command + Commande - <Separator> - <Séparateur> + <Separator> + <Séparateur> - New toolbar - Nouvelle barre d'outils + New toolbar + Nouvelle barre d'outils - Toolbar name: - Nom de la barre d'outils : + Toolbar name: + Nom de la barre d'outils : - Duplicated name - Nom dupliqué + Duplicated name + Nom dupliqué - The toolbar name '%1' is already used - Le nom de barre d'outils '%1' est déjà utilisé + The toolbar name '%1' is already used + Le nom de barre d'outils '%1' est déjà utilisé - Rename toolbar - Renommer la barre d'outils + Rename toolbar + Renommer la barre d'outils - - Texte source + + Texte source - - + + Gui::Dialog::DlgCustomizeImp - Customize - Personnaliser + Customize + Personnaliser - &Help - &Aide + &Help + &Aide - &Close - &Fermer + &Close + &Fermer - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - SpaceBall + Spaceball + SpaceBall - No Spaceball Present - Aucun Spaceball trouvé + No Spaceball Present + Aucun Spaceball trouvé - Buttons - Boutons + Buttons + Boutons - Clear - Effacer + Clear + Effacer - Print Reference - Imprimer les références + Print Reference + Imprimer les références - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Propriétés d'affichage + Display properties + Propriétés d'affichage - Display - Affichage + Display + Affichage - Transparency: - Transparence : + Transparency: + Transparence : - Line width: - Épaisseur de ligne : + Line width: + Épaisseur de ligne : - Point size: - Taille de point : + Point size: + Taille de point : - Material - Matériau + Material + Matériau - ... - ... + ... + ... - Close - Fermer + Close + Fermer - Viewing mode - Mode d'affichage + Viewing mode + Mode d'affichage - Display mode: - Mode d'affichage : + Display mode: + Mode d'affichage : - Plot mode: - Mode de tracé : + Plot mode: + Mode de tracé : - - Texte source + + Texte source - Line transparency: - Transparence de trait : + Line transparency: + Transparence de trait : - Line color: - Couleur de trait : + Line color: + Couleur de trait : - Shape color: - Couleur de la forme : + Shape color: + Couleur de la forme : - Color plot: - Diagramme de couleur : + Color plot: + Diagramme de couleur : - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Éditeur + Editor + Éditeur - Options - Options + Options + Options - Enable line numbers - Activer la numérotation des lignes + Enable line numbers + Activer la numérotation des lignes - Enable folding - Activer le pliage + Enable folding + Activer le pliage - Indentation - Retrait + Indentation + Retrait - Insert spaces - Insérer des espaces + Insert spaces + Insérer des espaces - Tab size: - Taille des tabulations : + Tab size: + Taille des tabulations : - Indent size: - Taille de retrait : + Indent size: + Taille de retrait : - Keep tabs - Garder les tabulations + Keep tabs + Garder les tabulations - Display Items - Éléments d'affichage + Display Items + Éléments d'affichage - Family: - Police : + Family: + Police : - Size: - Taille : + Size: + Taille : - Preview: - Aperçu : + Preview: + Aperçu : - - Texte source + + Texte source - - + + Gui::Dialog::DlgGeneral - General - Général + General + Général - Start up - Démarrage + Start up + Démarrage - Enable splash screen at start up - Activer la page de garde au démarrage + Enable splash screen at start up + Activer la page de garde au démarrage - Switch to tab of report window: - Basculer vers l'onglet de la fenêtre de rapport : + Switch to tab of report window: + Basculer vers l'onglet de la fenêtre de rapport : - Auto load module after start up: - Charger automatiquement le module après le démarrage : + Auto load module after start up: + Charger automatiquement le module après le démarrage : - Language - Langue + Language + Langue - Change language: - Changer la langue : + Change language: + Changer la langue : - Main window - Fenêtre principale + Main window + Fenêtre principale - Size of recent file list - Taille de la liste des fichiers récents + Size of recent file list + Taille de la liste des fichiers récents - Window style: - Style de fenêtre : + Window style: + Style de fenêtre : - Size of toolbar icons: - Taille des icônes de la barre d'outils : + Size of toolbar icons: + Taille des icônes de la barre d'outils : - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Défaut (%1 x %1) + Default (%1 x %1) + Défaut (%1 x %1) - Small (%1 x %1) - Petit (%1 x %1) + Small (%1 x %1) + Petit (%1 x %1) - Large (%1 x %1) - Grand (%1 x %1) + Large (%1 x %1) + Grand (%1 x %1) - Extra large (%1 x %1) - Très grand (%1 x %1) + Extra large (%1 x %1) + Très grand (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Saisie + Input + Saisie - OK - OK + OK + OK - Cancel - Annuler + Cancel + Annuler - - Texte source + + Texte source - - + + Gui::Dialog::DlgInspector - Scene Inspector - Inspecteur de scène + Scene Inspector + Inspecteur de scène - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Lancer la macro + Execute macro + Lancer la macro - Macro name: - Nom de la macro : + Macro name: + Nom de la macro : - Macro destination: - Destination de la macro : + Macro destination: + Destination de la macro : - Execute - Lancer + Execute + Lancer - Close - Fermer + Close + Fermer - Create - Créer + Create + Créer - Delete - Supprimer + Delete + Supprimer - Edit - Éditer + Edit + Éditer - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Macros + Macros + Macros - Macro file - Fichier de macro + Macro file + Fichier de macro - Enter a file name, please: - Veuillez saisir un nom de fichier : + Enter a file name, please: + Veuillez saisir un nom de fichier : - Existing file - Fichier existant + Existing file + Fichier existant - '%1'. + '%1'. This file already exists. - '%1'. Ce fichier existe déjà. + '%1'. Ce fichier existe déjà. - Delete macro - Supprimer la macro + Delete macro + Supprimer la macro - Do you really want to delete the macro '%1'? - Voulez-vous vraiment supprimer la macro '% 1' ? + Do you really want to delete the macro '%1'? + Voulez-vous vraiment supprimer la macro '% 1' ? - Cannot create file - Impossible de créer le fichier + Cannot create file + Impossible de créer le fichier - Creation of file '%1' failed. - Échec de la création du fichier « %1 ». + Creation of file '%1' failed. + Échec de la création du fichier « %1 ». - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Enregistrement d'une macro + Macro recording + Enregistrement d'une macro - Macro name: - Nom de la macro : + Macro name: + Nom de la macro : - Stop - Arrêter + Stop + Arrêter - Cancel - Annuler + Cancel + Annuler - Macro path: - Chemin de la macro : + Macro path: + Chemin de la macro : - ... - ... + ... + ... - Record - Enregistrer + Record + Enregistrer - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Enregistreur de macro + Macro recorder + Enregistreur de macro - Specify first a place to save. - Spécifiez d'abord une destination de sauvegarde. + Specify first a place to save. + Spécifiez d'abord une destination de sauvegarde. - Existing macro - Macro existante + Existing macro + Macro existante - The macro '%1' already exists. Do you want to overwrite? - La macro '%1' existe déjà. Voulez-vous l'écraser? + The macro '%1' already exists. Do you want to overwrite? + La macro '%1' existe déjà. Voulez-vous l'écraser? - The macro directory doesn't exist. Please, choose another one. - Le répertoire de macro n'existe pas. Veuillez en choisir un autre. + The macro directory doesn't exist. Please, choose another one. + Le répertoire de macro n'existe pas. Veuillez en choisir un autre. - Choose macro directory - Choisir le répertoire de macro + Choose macro directory + Choisir le répertoire de macro - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Propriétés du matériau + Material properties + Propriétés du matériau - &Close - &Fermer + &Close + &Fermer - Alt+C - Alt+F + Alt+C + Alt+F - Material - Matériau + Material + Matériau - Diffuse color: - Couleur diffuse : + Diffuse color: + Couleur diffuse : - Specular color: - Couleur spéculaire : + Specular color: + Couleur spéculaire : - Shininess: - Brillance : + Shininess: + Brillance : - % - % + % + % - Ambient color: - Couleur ambiante : + Ambient color: + Couleur ambiante : - - Texte source + + Texte source - Emissive color: - Couleur émissive : + Emissive color: + Couleur émissive : - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Aide en ligne + On-line help + Aide en ligne - Help viewer - Visionneuse d'aide + Help viewer + Visionneuse d'aide - Location of start page - Emplacement de la page de démarrage + Location of start page + Emplacement de la page de démarrage - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - Fichiers HTML (*.html *.htm) + HTML files (*.html *.htm) + Fichiers HTML (*.html *.htm) - Access denied - Accès refusé + Access denied + Accès refusé - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Accès refusé à '%1' + Accès refusé à '%1' Veuillez spécifier un autre répertoire. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Éditeur de paramètres + Parameter Editor + Éditeur de paramètres - Save to disk - Sauvegarder sur le disque + Save to disk + Sauvegarder sur le disque - Alt+C - Alt+F + Alt+C + Alt+F - &Close - &Fermer + &Close + &Fermer - - + + Gui::Dialog::DlgParameterImp - Group - Groupe + Group + Groupe - Name - Nom + Name + Nom - Type - Type + Type + Type - Value - Valeur + Value + Valeur - User parameter - Paramètre utilisateur + User parameter + Paramètre utilisateur - Invalid input - Saisie invalide + Invalid input + Saisie invalide - Invalid key name '%1' - Nom de clé '%1' invalide + Invalid key name '%1' + Nom de clé '%1' invalide - System parameter - Paramètres système + System parameter + Paramètres système - - + + Gui::Dialog::DlgPreferences - Preferences - Préférences + Preferences + Préférences - &Help - &Aide + &Help + &Aide - Alt+H - Alt+A + Alt+H + Alt+A - &OK - &OK + &OK + &OK - &Apply - &Appliquer + &Apply + &Appliquer - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Annuler + &Cancel + &Annuler - - Texte source + + Texte source - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Paramètre erroné + Wrong parameter + Paramètre erroné - - + + Gui::Dialog::DlgProjectInformation - Project information - Informations sur le projet + Project information + Informations sur le projet - Information - Informations + Information + Informations - &Name: - &Nom : + &Name: + &Nom : - Commen&t: - Commen&taire : + Commen&t: + Commen&taire : - Path: - Chemin d'accès : + Path: + Chemin d'accès : - &Last modified by: - &Dernière modification par : + &Last modified by: + &Dernière modification par : - Created &by: - Créé &par : + Created &by: + Créé &par : - Com&pany: - So&ciété : + Com&pany: + So&ciété : - Last &modification date: - Date &de dernière modification : + Last &modification date: + Date &de dernière modification : - Creation &date: - &Date de création : + Creation &date: + &Date de création : - &OK - &OK + &OK + &OK - &Cancel - &Annuler + &Cancel + &Annuler - - Texte source + + Texte source - - + + Gui::Dialog::DlgProjectUtility - Project utility - Utilitaire de projet + Project utility + Utilitaire de projet - Extract project - Extraire le projet + Extract project + Extraire le projet - Source - Source + Source + Source - Project file (*.fcstd) - Fichier de projet (*.fcstd) + Project file (*.fcstd) + Fichier de projet (*.fcstd) - Destination - Destination + Destination + Destination - Extract - Extraire + Extract + Extraire - Create project - Créer un projet + Create project + Créer un projet - Document.xml - Document.xml + Document.xml + Document.xml - Create - Créer + Create + Créer - Load project file after creation - Charger le fichier de projet après la création + Load project file after creation + Charger le fichier de projet après la création - Empty source - Source vide + Empty source + Source vide - No source is defined. - Aucune source n'est définie. + No source is defined. + Aucune source n'est définie. - Empty destination - Destination vide + Empty destination + Destination vide - No destination is defined. - Aucune destination n'est définie. + No destination is defined. + Aucune destination n'est définie. - - + + Gui::Dialog::DlgReportView - Output window - Fenêtre de sortie + Output window + Fenêtre de sortie - Output - Sortie + Output + Sortie - Record log messages - Enregistrer les messages du journal + Record log messages + Enregistrer les messages du journal - Record warnings - Enregistrer les avertissements + Record warnings + Enregistrer les avertissements - Record error messages - Enregistrer les messages d'erreur + Record error messages + Enregistrer les messages d'erreur - Colors - Couleurs + Colors + Couleurs - Normal messages: - Messages normaux : + Normal messages: + Messages normaux : - Log messages: - Journal des messages : + Log messages: + Journal des messages : - Warnings: - Avertissements: + Warnings: + Avertissements: - Errors: - Erreurs : + Errors: + Erreurs : - - Texte source + + Texte source - Redirect internal Python errors to report view - Rediriger les erreurs internes de Python vers la vue rapport + Redirect internal Python errors to report view + Rediriger les erreurs internes de Python vers la vue rapport - Redirect internal Python output to report view - Rediriger les messages interne Python vers la Vue rapport + Redirect internal Python output to report view + Rediriger les messages interne Python vers la Vue rapport - - + + Gui::Dialog::DlgRunExternal - Running external program - Exécution de programme externe + Running external program + Exécution de programme externe - TextLabel - TextLabel + TextLabel + TextLabel - Advanced >> - Avancé >> + Advanced >> + Avancé >> - ... - ... + ... + ... - Accept changes - Accepter les modifications + Accept changes + Accepter les modifications - Discard changes - Abandonner les modifications + Discard changes + Abandonner les modifications - Abort program - Abandonner le programme + Abort program + Abandonner le programme - Help - Aide + Help + Aide - Select a file - Sélectionner un fichier + Select a file + Sélectionner un fichier - - + + Gui::Dialog::DlgSettings3DView - 3D View - Vue 3D + 3D View + Vue 3D - 3D View settings - Paramètres de la vue 3D + 3D View settings + Paramètres de la vue 3D - Show coordinate system in the corner - Afficher le système de coordonnées dans le coin + Show coordinate system in the corner + Afficher le système de coordonnées dans le coin - Show counter of frames per second - Afficher le compteur d'images par seconde + Show counter of frames per second + Afficher le compteur d'images par seconde - Enable animation - Permettre l'animation + Enable animation + Permettre l'animation - Enable anti-aliasing (slower) - Activer l'anticrénelage (plus lent) + Enable anti-aliasing (slower) + Activer l'anticrénelage (plus lent) - Eye to eye distance for stereo modes: - Distance entre les yeux pour les modes stéréo : + Eye to eye distance for stereo modes: + Distance entre les yeux pour les modes stéréo : - Camera type - Type de caméra + Camera type + Type de caméra - Orthographic rendering - Rendu orthographique + Orthographic rendering + Rendu orthographique - Perspective rendering - Rendu en perspective + Perspective rendering + Rendu en perspective - - Texte source + + Texte source - 3D Navigation - Navigation 3D + 3D Navigation + Navigation 3D - Mouse... - Souris... + Mouse... + Souris... - Intensity of backlight - Intensité du rétro-éclairage + Intensity of backlight + Intensité du rétro-éclairage - Enable backlight color - Activer la couleur de rétroéclairage + Enable backlight color + Activer la couleur de rétroéclairage - Orbit style - Style d'orbite + Orbit style + Style d'orbite - Turntable - Table tournante + Turntable + Table tournante - Trackball - Trackball + Trackball + Trackball - Invert zoom - Inverser le zoom + Invert zoom + Inverser le zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 de navigation + %1 navigation + %1 de navigation - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Modèle de couleurs + Color model + Modèle de couleurs - &Gradient: - Dé&gradé : + &Gradient: + Dé&gradé : - red-yellow-green-cyan-blue - rouge-jaune-vert-cyan-bleu + red-yellow-green-cyan-blue + rouge-jaune-vert-cyan-bleu - blue-cyan-green-yellow-red - bleu-cyan-vert-jaune-rouge + blue-cyan-green-yellow-red + bleu-cyan-vert-jaune-rouge - white-black - blanc-noir + white-black + blanc-noir - black-white - noir-blanc + black-white + noir-blanc - Visibility - Visibilité + Visibility + Visibilité - Out g&rayed - Sortie g&risée + Out g&rayed + Sortie g&risée - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Sortie &invisible + Out &invisible + Sortie &invisible - Alt+I - Alt+I + Alt+I + Alt+I - Style - Style + Style + Style - &Zero - &Zéro + &Zero + &Zéro - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Flux + &Flow + &Flux - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Annuler + &Cancel + &Annuler - Parameter range - Gamme de paramètres + Parameter range + Gamme de paramètres - Mi&nimum: - Mi&nimum : + Mi&nimum: + Mi&nimum : - Ma&ximum: - Ma&ximum : + Ma&ximum: + Ma&ximum : - &Labels: - É&tiquettes : + &Labels: + É&tiquettes : - &Decimals: - &Décimales : + &Decimals: + &Décimales : - - Texte source + + Texte source - Color-gradient settings - Paramètres du dégradé de couleurs + Color-gradient settings + Paramètres du dégradé de couleurs - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Paramètre erroné + Wrong parameter + Paramètre erroné - The maximum value must be higher than the minimum value. - La valeur maximale doit être plus grande que la valeur minimale. + The maximum value must be higher than the minimum value. + La valeur maximale doit être plus grande que la valeur minimale. - - + + Gui::Dialog::DlgSettingsDocument - Document - Document + Document + Document - General - Général + General + Général - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Niveau de compression pour la sauvegarde de document + Niveau de compression pour la sauvegarde de document (0 = aucune, 9 = forte, 3 = par défaut) - Create new document at start up - Créer un nouveau document au démarrage + Create new document at start up + Créer un nouveau document au démarrage - Storage - Stockage + Storage + Stockage - Saving transactions (Auto-save) - Sauvegardes des transactions (Auto-sauvegarde) + Saving transactions (Auto-save) + Sauvegardes des transactions (Auto-sauvegarde) - Discard saved transaction after saving document - Annuler les transactions enregistrées après la sauvegarde du document + Discard saved transaction after saving document + Annuler les transactions enregistrées après la sauvegarde du document - Save thumbnail into project file when saving document - Enregistrer la vignette dans le fichier projet lors de la sauvegarde du document + Save thumbnail into project file when saving document + Enregistrer la vignette dans le fichier projet lors de la sauvegarde du document - Create up to backup files when resaving document - Nombre maximal de sauvegardes crées lors du ré-enregistrement du document + Create up to backup files when resaving document + Nombre maximal de sauvegardes crées lors du ré-enregistrement du document - Document objects - objets Documents + Document objects + objets Documents - Allow duplicate object labels in one document - Autoriser la duplication des étiquettes dans un document + Allow duplicate object labels in one document + Autoriser la duplication des étiquettes dans un document - Maximum Undo/Redo steps - Nombre maximal d'actions Annuler/Rétablir + Maximum Undo/Redo steps + Nombre maximal d'actions Annuler/Rétablir - Using Undo/Redo on documents - Utiliser Annuler / Rétablir sur les documents + Using Undo/Redo on documents + Utiliser Annuler / Rétablir sur les documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Texte + Text + Texte - Bookmark - Marque-pages + Bookmark + Marque-pages - Breakpoint - Point d'arrêt + Breakpoint + Point d'arrêt - Keyword - Mot-clé + Keyword + Mot-clé - Comment - Commentaire + Comment + Commentaire - Block comment - Bloc commentaire + Block comment + Bloc commentaire - Number - Nombre + Number + Nombre - String - Chaîne + String + Chaîne - Character - Caractère + Character + Caractère - Class name - Nom de classe + Class name + Nom de classe - Define name - Définir le nom + Define name + Définir le nom - Operator - Opérateur + Operator + Opérateur - Python output - Sortie Python + Python output + Sortie Python - Python error - Erreur Python + Python error + Erreur Python - Items - Items + Items + Items - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Paramètres de l'image + Image settings + Paramètres de l'image - Image properties - Propriétés de l'image + Image properties + Propriétés de l'image - Back&ground: - Arr&ière-plan : + Back&ground: + Arr&ière-plan : - Current - Courant + Current + Courant - White - Blanc + White + Blanc - Black - Noir + Black + Noir - Transparent - Transparent + Transparent + Transparent - Image dimensions - Dimensions de l'image + Image dimensions + Dimensions de l'image - Pixel - Pixel + Pixel + Pixel - &Width: - &Largeur : + &Width: + &Largeur : - Current screen - Écran actuel + Current screen + Écran actuel - Icon 32 x 32 - Icône 32 x 32 + Icon 32 x 32 + Icône 32 x 32 - Icon 64 x 64 - Icône 64 x 64 + Icon 64 x 64 + Icône 64 x 64 - Icon 128 x 128 - Icône 128 x 128 + Icon 128 x 128 + Icône 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Tailles standards : - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Hauteur : - Standard sizes: - Tailles standards : + Aspect ratio: + Ratio d'aspect : - &Height: - &Hauteur : + &Screen + É&cran - Aspect ratio: - Ratio d'aspect : + Alt+S + Alt+M - &Screen - É&cran + &4:3 + &4:3 - Alt+S - Alt+M + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Commentaire de l'image - Alt+1 - Alt+1 + Insert MIBA + Insérer MIBA - Image comment - Commentaire de l'image + Insert comment + Insérer un commentaire - - Insert MIBA - Insérer MIBA - - - Insert comment - Insérer un commentaire - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Macro + Macro + Macro - Macro recording settings - Réglages d'enregistrement d'une macro + Macro recording settings + Réglages d'enregistrement d'une macro - Logging Commands - Enregistrement des commandes + Logging Commands + Enregistrement des commandes - Show script commands in python console - Montrer les commandes du script dans la console Python + Show script commands in python console + Montrer les commandes du script dans la console Python - Log all commands issued by menus to file: - Enregistrer toutes les commandes venant des menus vers le fichier : + Log all commands issued by menus to file: + Enregistrer toutes les commandes venant des menus vers le fichier : - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Commandes d'interface graphique Gui + Gui commands + Commandes d'interface graphique Gui - Recording GUI commands - Enregistrement des commandes de l'interface graphique + Recording GUI commands + Enregistrement des commandes de l'interface graphique - Record as comment - Enregistrer comme un commentaire + Record as comment + Enregistrer comme un commentaire - Macro path - Chemin de la macro + Macro path + Chemin de la macro - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Unités + Units + Unités - Units settings - Réglage des unités + Units settings + Réglage des unités - Standard (mm/kg/s/degree) - Standard (mm/kg/s/degrés) + Standard (mm/kg/s/degree) + Standard (mm/kg/s/degrés) - MKS (m/kg/s/degree) - MKS (m/kg/s/degrés) + MKS (m/kg/s/degree) + MKS (m/kg/s/degrés) - Magnitude - Amplitude + Magnitude + Amplitude - Unit - Unité + Unit + Unité - User system: - Système de l'utilisateur : + User system: + Système de l'utilisateur : - Imperial (in/lb) - Impérial (po/lb) + Imperial (in/lb) + Impérial (po/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Couleurs + Colors + Couleurs - Selection - Sélection + Selection + Sélection - Enable selection highlighting - Activer la surbrillance de la sélection + Enable selection highlighting + Activer la surbrillance de la sélection - Enable preselection highlighting - Activer la surbrillance de présélection + Enable preselection highlighting + Activer la surbrillance de présélection - Background color - Couleur d'arrière-plan + Background color + Couleur d'arrière-plan - Middle color - Couleur intermédiaire + Middle color + Couleur intermédiaire - Color gradient - Dégradé de couleurs + Color gradient + Dégradé de couleurs - Simple color - Couleur simple + Simple color + Couleur simple - Default colors - Couleurs par défaut + Default colors + Couleurs par défaut - Edited edge color - Couleur d'arête éditée + Edited edge color + Couleur d'arête éditée - Edited vertex color - Couleur de sommet édité + Edited vertex color + Couleur de sommet édité - Construction geometry - Géométrie de construction + Construction geometry + Géométrie de construction - Fully constrained geometry - Géométrie entièrement contrainte + Fully constrained geometry + Géométrie entièrement contrainte - The color of construction geometry in editmode - La couleur des géométries de construction en mode édition + The color of construction geometry in editmode + La couleur des géométries de construction en mode édition - The color of fully constrained geometry in editmode - Couleur d'une géométrie entièrement contrainte en mode édition + The color of fully constrained geometry in editmode + Couleur d'une géométrie entièrement contrainte en mode édition - The color of vertices being edited - La couleur des sommets en cours d'édition + The color of vertices being edited + La couleur des sommets en cours d'édition - The color of edges being edited - La couleur des arêtes en cours d'édition + The color of edges being edited + La couleur des arêtes en cours d'édition - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Astuce du jour + Tip of the day + Astuce du jour - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Saviez-vous...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Saviez-vous...</font></font></b> - &Show tips at start up - &Afficher les astuces au démarrage + &Show tips at start up + &Afficher les astuces au démarrage - Alt+S - Alt+M + Alt+S + Alt+M - &Next Tip - &Astuce suivante + &Next Tip + &Astuce suivante - Alt+N - Alt+A + Alt+N + Alt+A - &Close - &Fermer + &Close + &Fermer - Alt+C - Alt+F + Alt+C + Alt+F - - Texte source + + Texte source - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Téléchargement échoué: %1 + Téléchargement échoué: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Si vous voulez en apprendre plus à propos de FreeCAD, aller sur %1 ou choisissez 'Aide' dans le menu Aide. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Si vous voulez en apprendre plus à propos de FreeCAD, aller sur %1 ou choisissez 'Aide' dans le menu Aide. - - + + Gui::Dialog::DockablePlacement - Placement - Placement + Placement + Placement - - + + Gui::Dialog::DownloadDialog - Canceled. - Annulé. + Canceled. + Annulé. - - + + Download + + + + Cancel + Annuler + + + Close + Fermer + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Téléchargement échoué : %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Ajouter une icône + Add icon + Ajouter une icône - - + + Gui::Dialog::InputVector - Input vector - Vecteur d'entrée + Input vector + Vecteur d'entrée - Vector - Vecteur + Vector + Vecteur - Z: - Z : + Z: + Z : - Y: - Y : + Y: + Y : - X: - X : + X: + X : - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Boutons de la souris + Mouse buttons + Boutons de la souris - Configuration - Configuration + Configuration + Configuration - Selection: - Sélection : + Selection: + Sélection : - Panning - Panoramique + Panning + Panoramique - Rotation: - Rotation : + Rotation: + Rotation : - Zooming: - Zoom : + Zooming: + Zoom : - - + + Gui::Dialog::ParameterGroup - Expand - Développer + Expand + Développer - Add sub-group - Ajouter un sous-groupe + Add sub-group + Ajouter un sous-groupe - Remove group - Enlever le groupe + Remove group + Enlever le groupe - Rename group - Renommer le groupe + Rename group + Renommer le groupe - Export parameter - Exporter le paramètre + Export parameter + Exporter le paramètre - Import parameter - Importer un paramètre + Import parameter + Importer un paramètre - Collapse - Réduire + Collapse + Réduire - Do really want to remove this parameter group? - Voulez-vous vraiment enlever ce groupe de paramètres? + Do really want to remove this parameter group? + Voulez-vous vraiment enlever ce groupe de paramètres? - Existing sub-group - Sous-groupe existant + Existing sub-group + Sous-groupe existant - The sub-group '%1' already exists. - Le sous-groupe '%1' existe déjà. + The sub-group '%1' already exists. + Le sous-groupe '%1' existe déjà. - Export parameter to file - Exporter le paramètre vers un fichier + Export parameter to file + Exporter le paramètre vers un fichier - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Importer un paramètre depuis un fichier + Import parameter from file + Importer un paramètre depuis un fichier - Import Error - Erreur d'importation + Import Error + Erreur d'importation - Reading from '%1' failed. - La lecture à partir de '% 1' a échoué. + Reading from '%1' failed. + La lecture à partir de '% 1' a échoué. - - + + Gui::Dialog::ParameterValue - Change value - Changer la valeur + Change value + Changer la valeur - Remove key - Enlever la clé + Remove key + Enlever la clé - Rename key - Renommer la clé + Rename key + Renommer la clé - New - Nouveau + New + Nouveau - New string item - Nouvel article chaîne + New string item + Nouvel article chaîne - New float item - Nouvel article flottant + New float item + Nouvel article flottant - New integer item - Nouvel article entier + New integer item + Nouvel article entier - New unsigned item - Nouvel article non signé + New unsigned item + Nouvel article non signé - New Boolean item - Nouvel article booléen + New Boolean item + Nouvel article booléen - Existing item - Article existant + Existing item + Article existant - The item '%1' already exists. - L'article '%1' existe déjà. + The item '%1' already exists. + L'article '%1' existe déjà. - - + + Gui::Dialog::Placement - Placement - Placement + Placement + Placement - OK - OK + OK + OK - Translation: - Translation : + Translation: + Translation : - Z: - Z : + Z: + Z : - Y: - Y : + Y: + Y : - X: - X : + X: + X : - Rotation: - Rotation : + Rotation: + Rotation : - Angle: - Angle : + Angle: + Angle : - Axis: - Axe : + Axis: + Axe : - Center: - Centre : + Center: + Centre : - Pitch: - Axe de tangage : + Pitch: + Axe de tangage : - Roll: - Axe de roulis : + Roll: + Axe de roulis : - Yaw: - Axe de lacet : + Yaw: + Axe de lacet : - Rotation axis with angle - Axe de rotation et angle + Rotation axis with angle + Axe de rotation et angle - Euler angles - Angles d'Euler + Euler angles + Angles d'Euler - Apply placement changes immediately - Appliquer immédiatement les changements de position + Apply placement changes immediately + Appliquer immédiatement les changements de position - Apply incremental changes to object placement - Appliquer les modifications incrémentielles au placement de l'objet + Apply incremental changes to object placement + Appliquer les modifications incrémentielles au placement de l'objet - Apply - Appliquer + Apply + Appliquer - Reset - Réinitialiser + Reset + Réinitialiser - Close - Fermer + Close + Fermer - - + + Gui::Dialog::PrintModel - Button - Bouton + Button + Bouton - Command - Commande + Command + Commande - - + + Gui::Dialog::SceneInspector - Dialog - Fenêtre de dialogue + Dialog + Fenêtre de dialogue - Close - Fermer + Close + Fermer - Refresh - Actualiser + Refresh + Actualiser - - + + Gui::Dialog::SceneModel - Inventor Tree - Arbre Inventor + Inventor Tree + Arbre Inventor - Nodes - Nœuds + Nodes + Nœuds - - + + Gui::Dialog::TextureMapping - Texture - Texture + Texture + Texture - Texture mapping - Mappage de texture + Texture mapping + Mappage de texture - Global - Global + Global + Global - Environment - Environnement + Environment + Environnement - Image files (%1) - Fichiers image (%1) + Image files (%1) + Fichiers image (%1) - No image - Aucune image + No image + Aucune image - The specified file is not a valid image file. - Le fichier spécifié n'est pas un fichier image valide. + The specified file is not a valid image file. + Le fichier spécifié n'est pas un fichier image valide. - No 3d view - Aucune vue 3D + No 3d view + Aucune vue 3D - No active 3d view found. - Aucune vue 3D active trouvée. + No active 3d view found. + Aucune vue 3D active trouvée. - - + + Gui::Dialog::Transform - Cancel - Annuler + Cancel + Annuler - Transform - Transformer + Transform + Transformer - - + + Gui::DlgTreeWidget - Dialog - Fenêtre de dialogue + Dialog + Fenêtre de dialogue - Items - Items + Items + Items - OK - OK + OK + OK - Cancel - Annuler + Cancel + Annuler - - Texte source + + Texte source - - + + Gui::DockWnd::CombiView - CombiView - Vue combinée + CombiView + Vue combinée - Project - Projet + Project + Projet - Tasks - Tâches + Tasks + Tâches - - + + Gui::DockWnd::HelpView - Previous - Précédent + Previous + Précédent - Next - Suivant + Next + Suivant - Home - Accueil + Home + Accueil - Open - Ouvrir + Open + Ouvrir - Open file - Ouvrir un fichier + Open file + Ouvrir un fichier - All HTML files (*.html *.htm) - Tous les fichiers HTML (*.html *.htm) + All HTML files (*.html *.htm) + Tous les fichiers HTML (*.html *.htm) - External browser - Navigateur externe + External browser + Navigateur externe - No external browser found. Specify in preferences, please - Aucun navigateur externe trouvé. Veuillez le spécifier dans les préférences + No external browser found. Specify in preferences, please + Aucun navigateur externe trouvé. Veuillez le spécifier dans les préférences - Starting of %1 failed - Le démarrage de %1 a échoué + Starting of %1 failed + Le démarrage de %1 a échoué - - + + Gui::DockWnd::PropertyDockView - Property View - Affichage des propriétés + Property View + Affichage des propriétés - - + + Gui::DockWnd::ReportOutput - Logging - Enregistrement + Logging + Enregistrement - Warning - Alerte + Warning + Alerte - Error - Erreur + Error + Erreur - Options - Options + Options + Options - Clear - Effacer + Clear + Effacer - Save As... - Enregistrer sous… + Save As... + Enregistrer sous… - Save Report Output - Enregistrer la sortie du rapport + Save Report Output + Enregistrer la sortie du rapport - Plain Text Files (*.txt *.log) - Fichiers texte de base(*.txt *.log) + Plain Text Files (*.txt *.log) + Fichiers texte de base(*.txt *.log) - Go to end - Aller à la fin + Go to end + Aller à la fin - Redirect Python output - Rediriger la sortie de Python + Redirect Python output + Rediriger la sortie de Python - Redirect Python errors - Rediriger les erreurs de Python + Redirect Python errors + Rediriger les erreurs de Python - - + + Gui::DockWnd::ReportView - Output - Sortie + Output + Sortie - Python console - Console Python + Python console + Console Python - - + + Gui::DockWnd::SelectionView - Property View - Affichage des propriétés + Property View + Affichage des propriétés - - + + Gui::DockWnd::TaskPanelView - Task View - Afficher les tâches + Task View + Afficher les tâches - - + + Gui::DockWnd::TextBrowser - Could not open file. - Impossible d'ouvrir le fichier. + Could not open file. + Impossible d'ouvrir le fichier. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Vous essayez d'accéder à l'adresse %1, actuellement indisponible. Assurez-vous que l'URL existe et rechargez la page. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Vous essayez d'accéder à l'adresse %1, actuellement indisponible. Assurez-vous que l'URL existe et rechargez la page. - Connecting to %1 - Connexion à %1 + Connecting to %1 + Connexion à %1 - Sending to %1 - Envoi vers %1 + Sending to %1 + Envoi vers %1 - Reading from %1 - Lecture depuis %1 + Reading from %1 + Lecture depuis %1 - Download failed: %1. - Téléchargement échoué : %1. + Download failed: %1. + Téléchargement échoué : %1. - Previous - Précédent + Previous + Précédent - Forward - Suivant + Forward + Suivant - Home - Accueil + Home + Accueil - Refresh - Actualiser + Refresh + Actualiser - Copy - Copier + Copy + Copier - Select all - Tout sélectionner + Select all + Tout sélectionner - No description for - Pas de description pour + No description for + Pas de description pour - - + + Gui::DocumentModel - Application - Application + Application + Application - Labels & Attributes - Étiquettes & attributs + Labels & Attributes + Étiquettes & attributs - - + + Gui::EditorView - Modified file - Fichier modifié + Modified file + Fichier modifié - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. -Ce fichier a été modifié à l'extérieur de l'éditeur source. Voulez-vous le recharger? +Ce fichier a été modifié à l'extérieur de l'éditeur source. Voulez-vous le recharger? - Unsaved document - Document non sauvegardé + Unsaved document + Document non sauvegardé - The document has been modified. + The document has been modified. Do you want to save your changes? - Le document a été modifié. + Le document a été modifié. Voulez enregistrer les modifications ? - FreeCAD macro (*.FCMacro);;Python (*.py) - Macro FreeCAD (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + Macro FreeCAD (*.FCMacro);;Python (*.py) - Export PDF - Exporter vers PDF + Export PDF + Exporter vers PDF - PDF file (*.pdf) - Fichier PDF (*.pdf) + PDF file (*.pdf) + Fichier PDF (*.pdf) - untitled[*] - sansnom[*] + untitled[*] + sansnom[*] - - Editor - - Éditeur + - Editor + - Éditeur - %1 chars removed - %1 caractères supprimés + %1 chars removed + %1 caractères supprimés - %1 chars added - %1 caractères ajoutés + %1 chars added + %1 caractères ajoutés - Formatted - Formaté + Formatted + Formaté - - + + Gui::FileChooser - Select a file - Sélectionner un fichier + Select a file + Sélectionner un fichier - Select a directory - Sélectionner un répertoire + Select a directory + Sélectionner un répertoire - - + + Gui::FileDialog - Save as - Enregistrer sous + Save as + Enregistrer sous - Open - Ouvrir + Open + Ouvrir - - + + Gui::FileOptionsDialog - Extended - Étendu + Extended + Étendu - All files (*.*) - Tous les fichiers (*.*) + All files (*.*) + Tous les fichiers (*.*) - - + + Gui::Flag - Top left - En haut à gauche + Top left + En haut à gauche - Bottom left - En bas à gauche + Bottom left + En bas à gauche - Top right - En haut à droite + Top right + En haut à droite - Bottom right - En bas à droite + Bottom right + En bas à droite - Remove - Enlever + Remove + Enlever - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Appuyez sur CTRL et le bouton gauche de la souris + Press CTRL and left mouse button + Appuyez sur CTRL et le bouton gauche de la souris - Press middle mouse button - Appuyez sur le bouton central de la souris + Press middle mouse button + Appuyez sur le bouton central de la souris - Press left mouse button - Appuyez sur le bouton gauche de la souris + Press left mouse button + Appuyez sur le bouton gauche de la souris - Scroll middle mouse button - Faites défiler le bouton milieu de la souris + Scroll middle mouse button + Faites défiler le bouton milieu de la souris - - + + Gui::LocationDialog - Wrong direction - Mauvaise direction + Wrong direction + Mauvaise direction - Direction must not be the null vector - La direction ne peut pas être un vecteur nul + Direction must not be the null vector + La direction ne peut pas être un vecteur nul - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Défini par l'utilisateur... + User defined... + Défini par l'utilisateur... - - + + + Gui::LocationWidget + + X: + X : + + + Y: + Y : + + + Z: + Z : + + + Direction: + + + + Gui::MacroCommand - Macros - Macros + Macros + Macros - - + + Gui::MainWindow - Dimension - Dimension + Dimension + Dimension - Ready - Prêt + Ready + Prêt - Toggles this toolbar - Bascule cette barre d'outils + Toggles this toolbar + Bascule cette barre d'outils - Toggles this dockable window - Bascule cette fenêtre dockable + Toggles this dockable window + Bascule cette fenêtre dockable - Close All - Fermer tout + Close All + Fermer tout - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Téléchargement commencé... + Téléchargement commencé... - - + + Gui::ProgressBar - Remaining: %1 - Restant : %1 + Remaining: %1 + Restant : %1 - Aborting - Abandon + Aborting + Abandon - Do you really want to abort the operation? - Voulez-vous vraiment abandonner l'opération? + Do you really want to abort the operation? + Voulez-vous vraiment abandonner l'opération? - - + + Gui::ProgressDialog - Remaining: %1 - Restant : %1 + Remaining: %1 + Restant : %1 - Aborting - Abandon + Aborting + Abandon - Do you really want to abort the operation? - Voulez-vous vraiment abandonner l'opération? + Do you really want to abort the operation? + Voulez-vous vraiment abandonner l'opération? - - + + Gui::PropertyEditor::PropertyModel - Property - Propriété + Property + Propriété - Value - Valeur + Value + Valeur - - + + Gui::PropertyView - View - Vue + View + Vue - Data - Données + Data + Données - - + + Gui::PythonConsole - System exit - Sortie système + System exit + Sortie système - The application is still running. + The application is still running. Do you want to exit without saving your data? - L'application est en cours d'exécution. + L'application est en cours d'exécution. Voulez vous quitter sans sauvegarder vos données? - Python console - Console Python + Python console + Console Python - Unhandled PyCXX exception. - Exception PyCXX non gérée. + Unhandled PyCXX exception. + Exception PyCXX non gérée. - Unhandled FreeCAD exception. - Exception FreeCad non gérée. + Unhandled FreeCAD exception. + Exception FreeCad non gérée. - Unhandled unknown C++ exception. - Exception C++ non gérée et/ou inconnue. + Unhandled unknown C++ exception. + Exception C++ non gérée et/ou inconnue. - &Copy command - &Copier la commande + &Copy command + &Copier la commande - &Copy history - &Copier l'historique + &Copy history + &Copier l'historique - Save history as... - Sauvegarder l'historique sous... + Save history as... + Sauvegarder l'historique sous... - Insert file name... - Insérez un nom de fichier... + Insert file name... + Insérez un nom de fichier... - Save History - Sauvegarder l'historique + Save History + Sauvegarder l'historique - Macro Files (*.FCMacro *.py) - Fichiers Macro(*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Fichiers Macro(*.FCMacro *.py) - Insert file name - Insérez un nom de fichier + Insert file name + Insérez un nom de fichier - All Files (*.*) - Tous les fichiers (*.*) + All Files (*.*) + Tous les fichiers (*.*) - Python Input Dialog - Dialogue d'entrée Python + Python Input Dialog + Dialogue d'entrée Python - Unhandled std C++ exception. - Exception non gérée de std C++. + Unhandled std C++ exception. + Exception non gérée de std C++. - Word wrap - Retour à la ligne + Word wrap + Retour à la ligne - &Copy - C&opier + &Copy + C&opier - &Paste - &Coller + &Paste + &Coller - Select All - Tout sélectionner + Select All + Tout sélectionner - - + + Clear console + + + + Gui::PythonEditor - Comment - Commentaire + Comment + Commentaire - Uncomment - Décommenter + Uncomment + Décommenter - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Effacer + Clear + Effacer - - + + Gui::RecentFilesAction - Open file %1 - Ouvrir le fichier %1 + Open file %1 + Ouvrir le fichier %1 - File not found - Fichier introuvable + File not found + Fichier introuvable - The file '%1' cannot be opened. - Impossible d'ouvrir le fichier '%1'. + The file '%1' cannot be opened. + Impossible d'ouvrir le fichier '%1'. - - + + Gui::SelectModule - Select module - Sélectionner le module + Select module + Sélectionner le module - Open %1 as - Ouvrir '%1' comme + Open %1 as + Ouvrir '%1' comme - Select - Sélectionner + Select + Sélectionner - - + + Gui::StdCmdDescription - Help - Aide + Help + Aide - Des&cription - Des&cription + Des&cription + Des&cription - Long description of commands - Description longue des commandes + Long description of commands + Description longue des commandes - - + + Gui::StdCmdDownloadOnlineHelp - Help - Aide + Help + Aide - Download online help - Télécharger l'aide en ligne + Download online help + Télécharger l'aide en ligne - Download %1's online help - Télécharger l'aide en ligne de %1 + Download %1's online help + Télécharger l'aide en ligne de %1 - Non-existing directory - Dossier inexistant + Non-existing directory + Dossier inexistant - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Le dossier '%1' n'existe pas. + Le dossier '%1' n'existe pas. Voulez-vous spécifier un dossier existant? - Missing permission - Erreur de droit d'accès + Missing permission + Erreur de droit d'accès - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Vous n'avez pas l'accès en écriture à '%1'. Voulez-vous indiquer un autre dossier? + Vous n'avez pas l'accès en écriture à '%1'. Voulez-vous indiquer un autre dossier? - Stop downloading - Arrêter le téléchargement + Stop downloading + Arrêter le téléchargement - - + + Gui::StdCmdPythonHelp - Tools - Outils + Tools + Outils - Python Modules - Modules Python + Python Modules + Modules Python - Opens a browser to show the Python modules - Ouvre un navigateur pour afficher les modules Python + Opens a browser to show the Python modules + Ouvre un navigateur pour afficher les modules Python - - + + Gui::TaskBoxAngle - Angle - Angle + Angle + Angle - - + + Gui::TaskBoxPosition - Position - Position + Position + Position - - + + Gui::TaskView::TaskAppearance - Display mode: - Mode d'affichage : + Display mode: + Mode d'affichage : - Plot mode: - Mode de tracé : + Plot mode: + Mode de tracé : - Point size: - Taille de point : + Point size: + Taille de point : - Line width: - Épaisseur de ligne : + Line width: + Épaisseur de ligne : - Transparency: - Transparence : + Transparency: + Transparence : - Appearance - Apparence + Appearance + Apparence - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Éditer + Edit + Éditer - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Apparence + Appearance + Apparence - ... - ... + ... + ... - edit selection - modifier la sélection + edit selection + modifier la sélection - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Appuyez sur le bouton gauche de la souris + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Anglais + English + Anglais - - + + Gui::TreeDockWidget - Tree view - Vue arborescente + Tree view + Vue arborescente - - + + Gui::TreeWidget - Create group... - Créer un groupe... + Create group... + Créer un groupe... - Create a group - Créer un groupe + Create a group + Créer un groupe - Group - Groupe + Group + Groupe - Rename - Renommer + Rename + Renommer - Rename object - Renommer un objet + Rename object + Renommer un objet - Labels & Attributes - Étiquettes & attributs + Labels & Attributes + Étiquettes & attributs - Application - Application + Application + Application - Finish editing - Terminer l'édition + Finish editing + Terminer l'édition - Finish editing object - Terminer l'édition de l'objet + Finish editing object + Terminer l'édition de l'objet - Activate document - Activer le document + Activate document + Activer le document - Activate document %1 - Activer document %1 + Activate document %1 + Activer document %1 - - + + Gui::View3DInventor - Export PDF - Exporter vers PDF + Export PDF + Exporter vers PDF - PDF file (*.pdf) - Fichier PDF (*.pdf) + PDF file (*.pdf) + Fichier PDF (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Sélectionner l'atelier '%1' + Select the '%1' workbench + Sélectionner l'atelier '%1' - - + + Position - Form - Forme + Form + Forme - X: - X : + X: + X : - Y: - Y : + Y: + Y : - Z: - Z : + Z: + Z : - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Accrochage de grille + Grid Snap in + Accrochage de grille - - + + QDockWidget - Tree view - Vue arborescente + Tree view + Vue arborescente - Property view - Affichage des propriétés + Property view + Affichage des propriétés - Selection view - Afficher la sélection + Selection view + Afficher la sélection - Report view - Vue rapport + Report view + Vue rapport - Task View - Afficher les tâches + Task View + Afficher les tâches - Combo View - Vue combinée + Combo View + Vue combinée - Toolbox - Boîte à outils + Toolbox + Boîte à outils - Python console - Console Python + Python console + Console Python - Display properties - Propriétés d'affichage + Display properties + Propriétés d'affichage - - + + QObject - General - Général + General + Général - Display - Affichage + Display + Affichage - Unknown filetype - Type de fichier inconnu + Unknown filetype + Type de fichier inconnu - Cannot open unknown filetype: %1 - Impossible d'ouvrir un type de fichier inconnu : %1 + Cannot open unknown filetype: %1 + Impossible d'ouvrir un type de fichier inconnu : %1 - Cannot save to unknown filetype: %1 - Impossible de sauvegarder ce type de fichier inconnu : %1 + Cannot save to unknown filetype: %1 + Impossible de sauvegarder ce type de fichier inconnu : %1 - Workbench failure - Atelier défaillant + Workbench failure + Atelier défaillant - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Impossible de charger l'assistant Qt (%1) + Unable to launch Qt Assistant (%1) + Impossible de charger l'assistant Qt (%1) - Exception - Exception + Exception + Exception - Open document - Ouvrir un document + Open document + Ouvrir un document - Import file - Importer un fichier + Import file + Importer un fichier - Export file - Exporter un fichier + Export file + Exporter un fichier - Printing... - Impression... + Printing... + Impression... - Cannot load workbench - Impossible de charger l'atelier + Cannot load workbench + Impossible de charger l'atelier - A general error occurred while loading the workbench - Une erreur générale s'est produite lors du chargement de l'atelier + A general error occurred while loading the workbench + Une erreur générale s'est produite lors du chargement de l'atelier - File not found - Fichier introuvable + File not found + Fichier introuvable - Cannot open file %1 - Impossible d'ouvrir le fichier %1 + Cannot open file %1 + Impossible d'ouvrir le fichier %1 - Save views... - Enregistrer les vues... + Save views... + Enregistrer les vues... - Load views... - Charger les vues... + Load views... + Charger les vues... - Freeze view - Figer la vue + Freeze view + Figer la vue - Clear views - Effacer les vues + Clear views + Effacer les vues - Restore view &%1 - Restaurer la vue &%1 + Restore view &%1 + Restaurer la vue &%1 - Save frozen views - Enregistrer les vues figées + Save frozen views + Enregistrer les vues figées - Frozen views (*.cam) - Vues figées (*.cam) + Frozen views (*.cam) + Vues figées (*.cam) - Restore views - Restaurer les vues + Restore views + Restaurer les vues - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Importer des vues enregistrées effacera les vues déjà stockées. Voulez-vous continuer? + Importer des vues enregistrées effacera les vues déjà stockées. Voulez-vous continuer? - Restore frozen views - Restaurer les vues figées + Restore frozen views + Restaurer les vues figées - Cannot open file '%1'. - Impossible d'ouvrir le fichier '%1'. + Cannot open file '%1'. + Impossible d'ouvrir le fichier '%1'. - Docked - Dockée + Docked + Dockée - Undocked - Non dockée + Undocked + Non dockée - Fullscreen - Plein écran + Fullscreen + Plein écran - files - fichiers + files + fichiers - Save picture - Enregistrer l'image + Save picture + Enregistrer l'image - New sub-group - Nouveau sous-groupe + New sub-group + Nouveau sous-groupe - Enter the name: - Entrer le nom : + Enter the name: + Entrer le nom : - New text item - Nouvel article texte + New text item + Nouvel article texte - Enter your text: - Saisir votre texte : + Enter your text: + Saisir votre texte : - New integer item - Nouvel article entier + New integer item + Nouvel article entier - Enter your number: - Saisir votre nombre : + Enter your number: + Saisir votre nombre : - New unsigned item - Nouvel article non signé + New unsigned item + Nouvel article non signé - New float item - Nouvel article flottant + New float item + Nouvel article flottant - New Boolean item - Nouvel article booléen + New Boolean item + Nouvel article booléen - Choose an item: - Choisir un article : + Choose an item: + Choisir un article : - Rename group - Renommer le groupe + Rename group + Renommer le groupe - The group '%1' cannot be renamed. - Le groupe '%1' ne peut pas être renommé. + The group '%1' cannot be renamed. + Le groupe '%1' ne peut pas être renommé. - Existing group - Groupe existant + Existing group + Groupe existant - The group '%1' already exists. - Le groupe '%1' existe déjà. + The group '%1' already exists. + Le groupe '%1' existe déjà. - Change value - Changer la valeur + Change value + Changer la valeur - Save document under new filename... - Enregistrer le document sous un nouveau nom… + Save document under new filename... + Enregistrer le document sous un nouveau nom… - Saving aborted - Sauvegarde abandonnée + Saving aborted + Sauvegarde abandonnée - Unsaved document - Document non sauvegardé + Unsaved document + Document non sauvegardé - Save document before close? - Enregistrer le document avant de fermer ? + Save document before close? + Enregistrer le document avant de fermer ? - Save Macro - Enregistrer la macro + Save Macro + Enregistrer la macro - Finish - Terminer + Finish + Terminer - Clear - Effacer + Clear + Effacer - Cancel - Annuler + Cancel + Annuler - Inner - Intérieur + Inner + Intérieur - Outer - Extérieur + Outer + Extérieur - No Browser - Pas de navigateur + No Browser + Pas de navigateur - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Impossible d'ouvrir votre navigateur. + Impossible d'ouvrir votre navigateur. Veuillez ouvrir une fenêtre de navigateur et saisir : http://localhost:%1. - No Server - Aucun serveur + No Server + Aucun serveur - Unable to start the server to port %1: %2. - Impossible de démarrer le serveur sur le port %1: %2. + Unable to start the server to port %1: %2. + Impossible de démarrer le serveur sur le port %1: %2. - Unable to open your system browser. - Impossible d'ouvrir le navigateur système. + Unable to open your system browser. + Impossible d'ouvrir le navigateur système. - Options... - Options... + Options... + Options... - Out of memory - Mémoire insuffisante + Out of memory + Mémoire insuffisante - Not enough memory available to display the data. - Mémoire insuffisante pour afficher les données. + Not enough memory available to display the data. + Mémoire insuffisante pour afficher les données. - Cannot find file %1 - Fichier %1 introuvable + Cannot find file %1 + Fichier %1 introuvable - Cannot find file %1 neither in %2 nor in %3 - Impossible de trouver le fichier %1 ni dans %2 ni dans %3 + Cannot find file %1 neither in %2 nor in %3 + Impossible de trouver le fichier %1 ni dans %2 ni dans %3 - Save %1 Document - Enregistrer le document %1 + Save %1 Document + Enregistrer le document %1 - %1 document (*.FCStd) - Document %1 (*.FCStd) + %1 document (*.FCStd) + Document %1 (*.FCStd) - Save As - Enregistrer sous + Save As + Enregistrer sous - %1 already exists. + %1 already exists. Do you want to replace it? - %1 existe déjà. + %1 existe déjà. Voulez-vous le remplacer ? - Document not closable - Impossible de fermer le document + Document not closable + Impossible de fermer le document - The document is not closable for the moment. - Impossible de fermer le document pour le moment. + The document is not closable for the moment. + Impossible de fermer le document pour le moment. - No OpenGL - Pas d'OpenGL + No OpenGL + Pas d'OpenGL - This system does not support OpenGL - Ce système ne prend pas en charge OpenGL + This system does not support OpenGL + Ce système ne prend pas en charge OpenGL - Help - Aide + Help + Aide - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Impossible de charger la documentation. Qt 4.4 ou supérieur est requis. + Impossible de charger la documentation. Qt 4.4 ou supérieur est requis. - %1 Help - % 1 Aide + %1 Help + % 1 Aide - Exporting PDF... - Exportation PDF ... + Exporting PDF... + Exportation PDF ... - Wrong selection - Sélection invalide + Wrong selection + Sélection invalide - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Un seul objet sélectionné. Veuillez sélectionner deux objets. Soyez attentif à l'endroit où vous cliquez. + Un seul objet sélectionné. Veuillez sélectionner deux objets. Soyez attentif à l'endroit où vous cliquez. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Veuillez sélectionner deux objets. Soyez attentif à l'endroit où vous cliquez. + Veuillez sélectionner deux objets. Soyez attentif à l'endroit où vous cliquez. - New boolean item - Nouvel élément booléen + New boolean item + Nouvel élément booléen - Navigation styles - Styles de navigation + Navigation styles + Styles de navigation - %1 navigation - %1 de navigation + %1 navigation + %1 de navigation - Move annotation - Déplacer l'annotation + Move annotation + Déplacer l'annotation - Transform - Transformer + Transform + Transformer - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - Le document est en mode édition et ne peut donc être fermé pour le moment. Vous devez soit terminer ou annuler l'édition dans le panneau des Tâches. + Le document est en mode édition et ne peut donc être fermé pour le moment. Vous devez soit terminer ou annuler l'édition dans le panneau des Tâches. - - + + + StdBoxSelection + + Standard-View + Vue standard + + + Box selection + + + + StdCmdAbout - Help - Aide + Help + Aide - &About %1 - &À propos de %1 + &About %1 + &À propos de %1 - About %1 - À propos de %1 + About %1 + À propos de %1 - - + + StdCmdAboutQt - Help - Aide + Help + Aide - About &Qt - À propos de &Qt + About &Qt + À propos de &Qt - About Qt - À propos de Qt + About Qt + À propos de Qt - - + + StdCmdActivateNextWindow - Window - Fenêtre + Window + Fenêtre - Ne&xt - Su&ivante + Ne&xt + Su&ivante - Activate next window - Activer la fenêtre suivante + Activate next window + Activer la fenêtre suivante - - + + StdCmdActivatePrevWindow - Window - Fenêtre + Window + Fenêtre - Pre&vious - Pré&cédente + Pre&vious + Pré&cédente - Activate previous window - Activer la fenêtre précédente + Activate previous window + Activer la fenêtre précédente - - + + + StdCmdAlignment + + Edit + Éditer + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Fenêtre + Window + Fenêtre - Arrange &Icons - Organiser les &Icônes + Arrange &Icons + Organiser les &Icônes - Arrange Icons - Organiser les icônes + Arrange Icons + Organiser les icônes - - + + StdCmdAxisCross - Standard-View - Vue standard + Standard-View + Vue standard - Toggle axis cross - Afficher les axes de coordonnées + Toggle axis cross + Afficher les axes de coordonnées - - + + StdCmdCascadeWindows - Window - Fenêtre + Window + Fenêtre - &Cascade - &Fenêtres en cascade + &Cascade + &Fenêtres en cascade - Tile pragmatic - Organisation pragmatique + Tile pragmatic + Organisation pragmatique - - + + StdCmdCloseActiveWindow - Window - Fenêtre + Window + Fenêtre - Cl&ose - Fe&rmer + Cl&ose + Fe&rmer - Close active window - Fermer la fenêtre active + Close active window + Fermer la fenêtre active - - + + StdCmdCloseAllWindows - Window - Fenêtre + Window + Fenêtre - Close Al&l - Fermer &tout + Close Al&l + Fermer &tout - Close all windows - Fermer toutes les fenêtres + Close all windows + Fermer toutes les fenêtres - - + + StdCmdCommandLine - Tools - Outils + Tools + Outils - Start command &line... - Démarrer la &ligne de commande... + Start command &line... + Démarrer la &ligne de commande... - Opens the command line in the console - Ouvre la ligne de commande dans la console + Opens the command line in the console + Ouvre la ligne de commande dans la console - - + + StdCmdCopy - Edit - Éditer + Edit + Éditer - C&opy - C&opier + C&opy + C&opier - Copy operation - Opération de copie + Copy operation + Opération de copie - - + + StdCmdCut - Edit - Éditer + Edit + Éditer - &Cut - &Couper + &Cut + &Couper - Cut out - Découpe + Cut out + Découpe - - + + StdCmdDDuplicateSelection - Edit - Éditer + Edit + Éditer - Duplicate selection - Dupliquer la sélection + Duplicate selection + Dupliquer la sélection - Put duplicates of the selected objects to the active document - Mettre la duplication des objets sélectionnés dans le document actif + Put duplicates of the selected objects to the active document + Mettre la duplication des objets sélectionnés dans le document actif - - + + StdCmdDelete - Edit - Éditer + Edit + Éditer - &Delete - &Effacer + &Delete + &Effacer - Deletes the selected objects - Efface les objets sélectionnés + Deletes the selected objects + Efface les objets sélectionnés - - + + StdCmdDemoMode - Standard-View - Vue standard + Standard-View + Vue standard - View turntable... - Vue en rotation... + View turntable... + Vue en rotation... - View turntable - Vue en rotation + View turntable + Vue en rotation - - + + StdCmdDlgCustomize - Tools - Outils + Tools + Outils - Cu&stomize... - Per&sonnaliser... + Cu&stomize... + Per&sonnaliser... - Customize toolbars and command bars - Personnaliser les barres d'outils et de commandes + Customize toolbars and command bars + Personnaliser les barres d'outils et de commandes - - + + StdCmdDlgMacroExecute - Macros ... - Macros ... + Macros ... + Macros ... - Opens a dialog to let you execute a recorded macro - Ouvre une boite de dialogue pour exécuter une macro enregistrée + Opens a dialog to let you execute a recorded macro + Ouvre une boite de dialogue pour exécuter une macro enregistrée - Macro - Macro + Macro + Macro - - + + StdCmdDlgMacroExecuteDirect - Macro - Macro + Macro + Macro - Execute macro - Lancer la macro + Execute macro + Lancer la macro - Execute the macro in the editor - Exécutez la macro dans l'éditeur + Execute the macro in the editor + Exécutez la macro dans l'éditeur - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Enregistrement de macro ... + &Macro recording ... + &Enregistrement de macro ... - Opens a dialog to record a macro - Ouvre une boite de dialogue pour enregistrer une macro + Opens a dialog to record a macro + Ouvre une boite de dialogue pour enregistrer une macro - Macro - Macro + Macro + Macro - - + + StdCmdDlgParameter - Tools - Outils + Tools + Outils - E&dit parameters ... - É&diter paramètres ... + E&dit parameters ... + É&diter paramètres ... - Opens a Dialog to edit the parameters - Ouvre une boite de dialogue pour éditer les paramètres + Opens a Dialog to edit the parameters + Ouvre une boite de dialogue pour éditer les paramètres - - + + StdCmdDlgPreferences - Tools - Outils + Tools + Outils - &Preferences ... - &Préférences ... + &Preferences ... + &Préférences ... - Opens a Dialog to edit the preferences - Ouvre une boite de dialogue pour éditer les préférences + Opens a Dialog to edit the preferences + Ouvre une boite de dialogue pour éditer les préférences - - + + StdCmdDockViewMenu - View - Vue + View + Vue - Vie&ws - Vu&es + Vie&ws + Vu&es - Toggles this window - Bascule cette fenêtre + Toggles this window + Bascule cette fenêtre - - + + StdCmdDrawStyle - Standard-View - Vue standard + Standard-View + Vue standard - Draw style - Style de représentation + Draw style + Style de représentation - - + + + StdCmdDuplicateSelection + + Edit + Éditer + + + Duplicate selection + Dupliquer la sélection + + + Put duplicates of the selected objects to the active document + Mettre la duplication des objets sélectionnés dans le document actif + + + + StdCmdEdit + + Edit + Éditer + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Fichier + File + Fichier - &Export... - &Exporter... + &Export... + &Exporter... - Export an object in the active document - Exporter un fichier dans le document actif + Export an object in the active document + Exporter un fichier dans le document actif - Supported formats - Formats supportés + Supported formats + Formats supportés - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Outils + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Fichier + File + Fichier - &Recompute - &Recalculer + &Recompute + &Recalculer - Recompute feature or document - Recalculer la fonction ou le document + Recompute feature or document + Recalculer la fonction ou le document - - + + StdCmdFreeCADWebsite - Help - Aide + Help + Aide - FreeCAD Website - Site Web de FreeCAD + FreeCAD Website + Site Web de FreeCAD - The FreeCAD website - Le site web de FreeCAD + The FreeCAD website + Le site web de FreeCAD - - + + StdCmdFreezeViews - Standard-View - Vue standard + Standard-View + Vue standard - Freeze display - Figer l'affichage + Freeze display + Figer l'affichage - Freezes the current view position - Figer la position actuelle de la vue + Freezes the current view position + Figer la position actuelle de la vue - - + + StdCmdHideObjects - Standard-View - Vue standard + Standard-View + Vue standard - Hide all objects - Masquer tous les objets + Hide all objects + Masquer tous les objets - Hide all objects in the document - Masquer tous les objets dans le document + Hide all objects in the document + Masquer tous les objets dans le document - - + + StdCmdHideSelection - Standard-View - Vue standard + Standard-View + Vue standard - Hide selection - Masquer la sélection + Hide selection + Masquer la sélection - Hide all selected objects - Masquer tous les objets sélectionnés + Hide all selected objects + Masquer tous les objets sélectionnés - - + + StdCmdImport - File - Fichier + File + Fichier - &Import... - &Importer... + &Import... + &Importer... - Import a file in the active document - Importer un fichier dans le document actif + Import a file in the active document + Importer un fichier dans le document actif - Supported formats - Formats supportés + Supported formats + Formats supportés - All files (*.*) - Tous les fichiers (*.*) + All files (*.*) + Tous les fichiers (*.*) - - + + StdCmdMacroStartDebug - Macro - Macro + Macro + Macro - Debug macro - Déboguer la macro + Debug macro + Déboguer la macro - Start debugging of macro - Démarrer le débogage de macro + Start debugging of macro + Démarrer le débogage de macro - - + + StdCmdMacroStepOver - Macro - Macro + Macro + Macro - Step over - Passer outre + Step over + Passer outre - - + + StdCmdMacroStopDebug - Macro - Macro + Macro + Macro - Stop debugging - Arrêter le débogage + Stop debugging + Arrêter le débogage - Stop debugging of macro - Arrêter le débogage de macro + Stop debugging of macro + Arrêter le débogage de macro - - + + StdCmdMacroStopRecord - Macro - Macro + Macro + Macro - S&top macro recording - Arrê&ter l'enregistrement de la macro + S&top macro recording + Arrê&ter l'enregistrement de la macro - Stop the macro recording session - Arrêter le fonctionnement de la session d'enregistrement de macro + Stop the macro recording session + Arrêter le fonctionnement de la session d'enregistrement de macro - - + + StdCmdMeasureDistance - View - Vue + View + Vue - Measure distance - Mesurer une distance + Measure distance + Mesurer une distance - - + + StdCmdMeasurementSimple - Tools - Outils + Tools + Outils - Mesure distance - Mesurer la distance + Mesure distance + Mesurer la distance - Measures distance between two selected objects - Mesure la distance entre deux objets sélectionnés + Measures distance between two selected objects + Mesure la distance entre deux objets sélectionnés - - + + Measure distance + Mesurer une distance + + + StdCmdMergeProjects - File - Fichier + File + Fichier - Merge project... - Fusionner un projet... + Merge project... + Fusionner un projet... - Merge project - Fusionner un projet + Merge project + Fusionner un projet - %1 document (*.fcstd) - document %1 (*.fcstd) + %1 document (*.fcstd) + document %1 (*.fcstd) - Cannot merge project with itself. - Impossible de fusionner le projet avec lui-même. + Cannot merge project with itself. + Impossible de fusionner le projet avec lui-même. - - + + StdCmdNew - File - Fichier + File + Fichier - &New - &Nouveau + &New + &Nouveau - Create a new empty document - Créer un nouveau document vide + Create a new empty document + Créer un nouveau document vide - - + + StdCmdOnlineHelp - Help - Aide + Help + Aide - Show help to the application - Montrer l'aide dans l'application + Show help to the application + Montrer l'aide dans l'application - - + + StdCmdOnlineHelpPython - Help - Aide + Help + Aide - Python Manuals - Manuels Python + Python Manuals + Manuels Python - Show the Python documentation - Voir la documentation Python + Show the Python documentation + Voir la documentation Python - - + + StdCmdOnlineHelpWebsite - Help - Aide + Help + Aide - Help Website - Site Web d'aide + Help Website + Site Web d'aide - The website where the help is maintained - Le site web où l'aide est maintenue + The website where the help is maintained + Le site web où l'aide est maintenue - - + + StdCmdOpen - File - Fichier + File + Fichier - &Open... - &Ouvrir... + &Open... + &Ouvrir... - Open a document or import files - Ouvrir un document ou importer des fichiers + Open a document or import files + Ouvrir un document ou importer des fichiers - Supported formats - Formats supportés + Supported formats + Formats supportés - All files (*.*) - Tous les fichiers (*.*) + All files (*.*) + Tous les fichiers (*.*) - - + + StdCmdPaste - Edit - Éditer + Edit + Éditer - &Paste - &Coller + &Paste + &Coller - Paste operation - Opération de collage + Paste operation + Opération de collage - - + + StdCmdPlacement - Edit - Éditer + Edit + Éditer - Placement... - Positionnement... + Placement... + Positionnement... - Place the selected objects - Positionner les objets sélectionnés + Place the selected objects + Positionner les objets sélectionnés - - + + StdCmdPrint - File - Fichier + File + Fichier - &Print... - &Imprimer... + &Print... + &Imprimer... - Print the document - Imprimer le document + Print the document + Imprimer le document - - + + StdCmdPrintPdf - File - Fichier + File + Fichier - &Export PDF... - &Exporter au format PDF... + &Export PDF... + &Exporter au format PDF... - Export the document as PDF - Exporter le document au format PDF + Export the document as PDF + Exporter le document au format PDF - - + + StdCmdPrintPreview - File - Fichier + File + Fichier - &Print preview... - &Aperçu avant impression... + &Print preview... + &Aperçu avant impression... - Print the document - Imprimer le document + Print the document + Imprimer le document - Print preview - Aperçu avant impression + Print preview + Aperçu avant impression - - + + StdCmdProjectInfo - File - Fichier + File + Fichier - Project i&nformation... - I&nformations sur le projet ... + Project i&nformation... + I&nformations sur le projet ... - Show details of the currently active project - Afficher les détails du projet actif + Show details of the currently active project + Afficher les détails du projet actif - - + + StdCmdProjectUtil - Tools - Outils + Tools + Outils - Project utility... - Utilitaire de projet... + Project utility... + Utilitaire de projet... - Utility to extract or create project files - Utilitaire pour extraire ou créer des fichiers de projet + Utility to extract or create project files + Utilitaire pour extraire ou créer des fichiers de projet - - + + StdCmdPythonWebsite - Help - Aide + Help + Aide - Python Website - Site Web Python + Python Website + Site Web Python - The official Python website - Le site officiel de Python + The official Python website + Le site officiel de Python - - + + StdCmdQuit - File - Fichier + File + Fichier - E&xit - &Quitter + E&xit + &Quitter - Quits the application - Quitte l'application + Quits the application + Quitte l'application - - + + StdCmdRandomColor - File - Fichier + File + Fichier - Random color - Couleur aléatoire + Random color + Couleur aléatoire - - + + StdCmdRecentFiles - File - Fichier + File + Fichier - Recent files - Fichiers récents + Recent files + Fichiers récents - Recent file list - Liste des fichiers récents + Recent file list + Liste des fichiers récents - - + + StdCmdRedo - Edit - Éditer + Edit + Éditer - &Redo - &Rétablir + &Redo + &Rétablir - Redoes a previously undone action - Rétablit une action précédemment annulée + Redoes a previously undone action + Rétablit une action précédemment annulée - - + + StdCmdRefresh - Edit - Éditer + Edit + Éditer - &Refresh - &Rafraîchir + &Refresh + &Rafraîchir - Recomputes the current active document - Recalculer le document actif + Recomputes the current active document + Recalculer le document actif - - + + StdCmdSave - File - Fichier + File + Fichier - &Save - &Enregistrer + &Save + &Enregistrer - Save the active document - Enregistrer le document actif + Save the active document + Enregistrer le document actif - - + + StdCmdSaveAs - File - Fichier + File + Fichier - Save &As... - Enregistrer &sous… + Save &As... + Enregistrer &sous… - Save the active document under a new file name - Enregistrer le document actif sous un nouveau nom + Save the active document under a new file name + Enregistrer le document actif sous un nouveau nom - - + + StdCmdSceneInspector - Tools - Outils + Tools + Outils - Scene inspector... - Inspecteur de scène... + Scene inspector... + Inspecteur de scène... - Scene inspector - Inspecteur de scène + Scene inspector + Inspecteur de scène - - + + StdCmdSelectAll - Edit - Éditer + Edit + Éditer - Select &All - &Tout sélectionner + Select &All + &Tout sélectionner - Select all - Tout sélectionner + Select all + Tout sélectionner - - + + StdCmdSetAppearance - Standard-View - Vue standard + Standard-View + Vue standard - Appearance... - Apparence... + Appearance... + Apparence... - Sets the display properties of the selected object - Définit les propriétés d'affichage de l'objet sélectionné + Sets the display properties of the selected object + Définit les propriétés d'affichage de l'objet sélectionné - - + + StdCmdShowObjects - Standard-View - Vue standard + Standard-View + Vue standard - Show all objects - Afficher tous les objets + Show all objects + Afficher tous les objets - Show all objects in the document - Afficher tous les objets dans le document + Show all objects in the document + Afficher tous les objets dans le document - - + + StdCmdShowSelection - Standard-View - Vue standard + Standard-View + Vue standard - Show selection - Afficher la sélection + Show selection + Afficher la sélection - Show all selected objects - Afficher tous les objets sélectionnés + Show all selected objects + Afficher tous les objets sélectionnés - - + + StdCmdStatusBar - View - Vue + View + Vue - Status bar - Barre d'état + Status bar + Barre d'état - Toggles the status bar - Bascule l'affichage de la barre d'état + Toggles the status bar + Bascule l'affichage de la barre d'état - - + + StdCmdTextureMapping - Tools - Outils + Tools + Outils - Texture mapping... - Mappage de texture... + Texture mapping... + Mappage de texture... - Texture mapping - Mappage de texture + Texture mapping + Mappage de texture - - + + StdCmdTileWindows - Window - Fenêtre + Window + Fenêtre - &Tile - &Mosaïque + &Tile + &Mosaïque - Tile the windows - Disposer les fenêtres en mosaïque + Tile the windows + Disposer les fenêtres en mosaïque - - + + StdCmdToggleBreakpoint - Macro - Macro + Macro + Macro - Toggle breakpoint - Basculer le point d'arrêt + Toggle breakpoint + Basculer le point d'arrêt - - + + StdCmdToggleClipPlane - Standard-View - Vue standard + Standard-View + Vue standard - Clipping plane - Plan de coupe + Clipping plane + Plan de coupe - Toggles clipping plane for active view - Bascule le plan de coupe pour la vue active + Toggles clipping plane for active view + Bascule le plan de coupe pour la vue active - - + + StdCmdToggleNavigation - Standard-View - Vue standard + Standard-View + Vue standard - Toggle navigation/Edit mode - Basculer en mode navigation/édition + Toggle navigation/Edit mode + Basculer en mode navigation/édition - Toggle between navigation and edit mode - Basculer entre le mode navigation et le mode d'édition + Toggle between navigation and edit mode + Basculer entre le mode navigation et le mode d'édition - - + + StdCmdToggleObjects - Standard-View - Vue standard + Standard-View + Vue standard - Toggle all objects - Basculer tous les objets + Toggle all objects + Basculer tous les objets - Toggles visibility of all objects in the active document - Bascule la visibilité de tous les objets dans le document actif + Toggles visibility of all objects in the active document + Bascule la visibilité de tous les objets dans le document actif - - + + StdCmdToggleSelectability - Standard-View - Vue standard + Standard-View + Vue standard - Toggle selectability - Basculer la sélectivité + Toggle selectability + Basculer la sélectivité - Toggles the property of the objects to get selected in the 3D-View - Basculer la propriété des objets à sélectionner dans la vue 3D + Toggles the property of the objects to get selected in the 3D-View + Basculer la propriété des objets à sélectionner dans la vue 3D - - + + StdCmdToggleVisibility - Standard-View - Vue standard + Standard-View + Vue standard - Toggle visibility - Basculer la visibilité + Toggle visibility + Basculer la visibilité - Toggles visibility - Bascule la visibilité + Toggles visibility + Bascule la visibilité - - + + StdCmdToolBarMenu - View - Vue + View + Vue - Tool&bars - Barres d'&outils + Tool&bars + Barres d'&outils - Toggles this window - Bascule cette fenêtre + Toggles this window + Bascule cette fenêtre - - + + StdCmdTransform - Edit - Éditer + Edit + Éditer - Transform... - Transformer... + Transform... + Transformer... - Transform the geometry of selected objects - Transformer la géométrie des objets sélectionnés + Transform the geometry of selected objects + Transformer la géométrie des objets sélectionnés - - + + StdCmdTreeSelection - View - Vue + View + Vue - Go to selection - Aller à la sélection + Go to selection + Aller à la sélection - Scroll to first selected item - Défiler jusqu'au premier élément sélectionné + Scroll to first selected item + Défiler jusqu'au premier élément sélectionné - - + + StdCmdUndo - Edit - Éditer + Edit + Éditer - &Undo - &Annuler + &Undo + &Annuler - Undo exactly one action - Annuler exactement une action + Undo exactly one action + Annuler exactement une action - - + + StdCmdUserInterface - View - Vue + View + Vue - Dock views - Ancrer les vues + Dock views + Ancrer les vues - Dock all top-level views - Ancrer toutes les vues de premier niveau + Dock all top-level views + Ancrer toutes les vues de premier niveau - - + + StdCmdViewAxo - Standard-View - Vue standard + Standard-View + Vue standard - Axometric - Axonométrique + Axometric + Axonométrique - Set to axometric view - Passer en vue axonométrique + Set to axometric view + Passer en vue axonométrique - - + + StdCmdViewBottom - Standard-View - Vue standard + Standard-View + Vue standard - Bottom - Dessous + Bottom + Dessous - Set to bottom view - Afficher la vue de dessous + Set to bottom view + Afficher la vue de dessous - - + + StdCmdViewCreate - Standard-View - Vue standard + Standard-View + Vue standard - Create new view - Créer une nouvelle vue + Create new view + Créer une nouvelle vue - Creates a new view window for the active document - Créez une nouvelle fenêtre de vue pour le document actif + Creates a new view window for the active document + Créez une nouvelle fenêtre de vue pour le document actif - - + + StdCmdViewExample1 - Standard-View - Vue standard + Standard-View + Vue standard - Inventor example #1 - Exemple Inventor #1 + Inventor example #1 + Exemple Inventor #1 - Shows a 3D texture with manipulator - Affiche une texture 3D avec manipulation + Shows a 3D texture with manipulator + Affiche une texture 3D avec manipulation - - + + StdCmdViewExample2 - Standard-View - Vue standard + Standard-View + Vue standard - Inventor example #2 - Exemple Inventor #2 + Inventor example #2 + Exemple Inventor #2 - Shows spheres and drag-lights - Affiche des sphères et des lumières déplaçables + Shows spheres and drag-lights + Affiche des sphères et des lumières déplaçables - - + + StdCmdViewExample3 - Standard-View - Vue standard + Standard-View + Vue standard - Inventor example #3 - Exemple Inventor #3 + Inventor example #3 + Exemple Inventor #3 - Shows a animated texture - Affiche une texture animée + Shows a animated texture + Affiche une texture animée - - + + StdCmdViewFitAll - Standard-View - Vue standard + Standard-View + Vue standard - Fit all - Tout afficher + Fit all + Tout afficher - Fits the whole content on the screen - Affiche l'ensemble du contenu à l'écran + Fits the whole content on the screen + Affiche l'ensemble du contenu à l'écran - - + + StdCmdViewFitSelection - Standard-View - Vue standard + Standard-View + Vue standard - Fit selection - Affiche la sélection + Fit selection + Affiche la sélection - Fits the selected content on the screen - Affiche le contenu sélectionné à l'écran + Fits the selected content on the screen + Affiche le contenu sélectionné à l'écran - - + + StdCmdViewFront - Standard-View - Vue standard + Standard-View + Vue standard - Front - Face + Front + Face - Set to front view - Afficher la vue de face + Set to front view + Afficher la vue de face - - + + StdCmdViewIvIssueCamPos - Standard-View - Vue standard + Standard-View + Vue standard - Issue camera position - Récupérer la position de la caméra + Issue camera position + Récupérer la position de la caméra - Issue the camera position to the console and to a macro, to easily recall this position - Récupérer la position de la caméra dans la console et dans une macro, pour réutiliser facilement cette position + Issue the camera position to the console and to a macro, to easily recall this position + Récupérer la position de la caméra dans la console et dans une macro, pour réutiliser facilement cette position - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Vue standard + Standard-View + Vue standard - Stereo Interleaved Columns - Colonnes stéréo entrelacées + Stereo Interleaved Columns + Colonnes stéréo entrelacées - Switch stereo viewing to Interleaved Columns - Basculer la vision stéréo vers la technique des colonnes entrelacées + Switch stereo viewing to Interleaved Columns + Basculer la vision stéréo vers la technique des colonnes entrelacées - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Vue standard + Standard-View + Vue standard - Stereo Interleaved Rows - Lignes stéréo entrelacées + Stereo Interleaved Rows + Lignes stéréo entrelacées - Switch stereo viewing to Interleaved Rows - Basculer la vision stéréo vers la technique des ligne entrelacées + Switch stereo viewing to Interleaved Rows + Basculer la vision stéréo vers la technique des ligne entrelacées - - + + StdCmdViewIvStereoOff - Standard-View - Vue standard + Standard-View + Vue standard - Stereo Off - Désactiver la stéréo + Stereo Off + Désactiver la stéréo - Switch stereo viewing off - Désactiver la vision stéréo + Switch stereo viewing off + Désactiver la vision stéréo - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Vue standard + Standard-View + Vue standard - Stereo quad buffer - Tampon stéréo quadruple + Stereo quad buffer + Tampon stéréo quadruple - Switch stereo viewing to quad buffer - Basculer la vision stéreo vers la technique de tampon quadruple + Switch stereo viewing to quad buffer + Basculer la vision stéreo vers la technique de tampon quadruple - - + + StdCmdViewIvStereoRedGreen - Standard-View - Vue standard + Standard-View + Vue standard - Stereo red/green - Stéréo rouge/vert + Stereo red/green + Stéréo rouge/vert - Switch stereo viewing to red/green - Basculer la vue stéréo vers la technique anaglyphique rouge/vert + Switch stereo viewing to red/green + Basculer la vue stéréo vers la technique anaglyphique rouge/vert - - + + StdCmdViewLeft - Standard-View - Vue standard + Standard-View + Vue standard - Left - Gauche + Left + Gauche - Set to left view - Afficher la vue de gauche + Set to left view + Afficher la vue de gauche - - + + StdCmdViewRear - Standard-View - Vue standard + Standard-View + Vue standard - Rear - Arrière + Rear + Arrière - Set to rear view - Afficher la vue arrière + Set to rear view + Afficher la vue arrière - - + + StdCmdViewRight - Standard-View - Vue standard + Standard-View + Vue standard - Right - Droite + Right + Droite - Set to right view - Afficher la vue de droite + Set to right view + Afficher la vue de droite - - + + + StdCmdViewRotateLeft + + Standard-View + Vue standard + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Vue standard + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Vue standard + Standard-View + Vue standard - Top - Dessus + Top + Dessus - Set to top view - Afficher la vue de dessus + Set to top view + Afficher la vue de dessus - - + + StdCmdWhatsThis - Help - Aide + Help + Aide - &What's This? - &Qu'est-ce que c'est ? + &What's This? + &Qu'est-ce que c'est ? - What's This - Qu'est-ce que c'est + What's This + Qu'est-ce que c'est - - + + StdCmdWindows - Window - Fenêtre + Window + Fenêtre - &Windows... - &Fenêtres... + &Windows... + &Fenêtres... - Windows list - Liste des fenêtres + Windows list + Liste des fenêtres - - + + StdCmdWindowsMenu - Window - Fenêtre + Window + Fenêtre - Activates this window - Active cette fenêtre + Activates this window + Active cette fenêtre - - + + StdCmdWorkbench - View - Vue + View + Vue - Workbench - Atelier + Workbench + Atelier - Switch between workbenches - Basculer entre les ateliers + Switch between workbenches + Basculer entre les ateliers - - + + StdOrthographicCamera - Standard-View - Vue standard + Standard-View + Vue standard - Orthographic view - Vue orthographique + Orthographic view + Vue orthographique - Switches to orthographic view mode - Bascule vers le mode de vue orthographique + Switches to orthographic view mode + Bascule vers le mode de vue orthographique - - + + StdPerspectiveCamera - Standard-View - Vue standard + Standard-View + Vue standard - Perspective view - Vue en perspective + Perspective view + Vue en perspective - Switches to perspective view mode - Bascule en mode de vue perspective + Switches to perspective view mode + Bascule en mode de vue perspective - - + + StdViewBoxZoom - Standard-View - Vue standard + Standard-View + Vue standard - Box zoom - Zoom de sélection + Box zoom + Zoom de sélection - - + + StdViewDockUndockFullscreen - Standard-View - Vue standard + Standard-View + Vue standard - Document window - Fenêtre de document + Document window + Fenêtre de document - Display the active view either in fullscreen, in undocked or docked mode - Afficher la vue active soit en mode plein écran, non ancrée ou ancrée + Display the active view either in fullscreen, in undocked or docked mode + Afficher la vue active soit en mode plein écran, non ancrée ou ancrée - - + + StdViewScreenShot - Standard-View - Vue standard + Standard-View + Vue standard - Save picture... - Enregistrer l'image… + Save picture... + Enregistrer l'image… - Creates a screenshot of the active view - Crée une capture d'écran de la vue active + Creates a screenshot of the active view + Crée une capture d'écran de la vue active - - + + StdViewZoomIn - Standard-View - Vue standard + Standard-View + Vue standard - Zoom In - Zoom avant + Zoom In + Zoom avant - - + + StdViewZoomOut - Standard-View - Vue standard + Standard-View + Vue standard - Zoom Out - Zoom arrière + Zoom Out + Zoom arrière - - + + Std_DrawStyle - As is - Comme actuellement + As is + Comme actuellement - Normal mode - Mode normal + Normal mode + Mode normal - Wireframe - Filaire + Wireframe + Filaire - Wireframe mode - Mode filaire + Wireframe mode + Mode filaire - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Fichier + &File + &Fichier - &Edit - &Édition + &Edit + &Édition - Standard views - Vues standards + Standard views + Vues standards - &Stereo - &Stéréo + &Stereo + &Stéréo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Visibilité + Visibility + Visibilité - &View - &Affichage + &View + &Affichage - &Tools - &Outils + &Tools + &Outils - &Macro - &Macro + &Macro + &Macro - &Windows - &Fenêtre + &Windows + &Fenêtre - &On-line help - Aide en &ligne + &On-line help + Aide en &ligne - &Help - &Aide + &Help + &Aide - File - Fichier + File + Fichier - Macro - Macro + Macro + Macro - View - Vue + View + Vue - Special Ops - Opérations spéciales + Special Ops + Opérations spéciales - - + + testClass - test - test + test + test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">Panneau de tâches iis</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Créé pour Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">Panneau de tâches iis</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Créé pour Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Choisir le style du panneau de tâches + Choose the style of the Task Panel + Choisir le style du panneau de tâches - Default - Défaut + Default + Défaut - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_hr.ts b/src/Gui/Language/FreeCAD_hr.ts index 11e5c702b..9f48d1ef8 100644 --- a/src/Gui/Language/FreeCAD_hr.ts +++ b/src/Gui/Language/FreeCAD_hr.ts @@ -1,5477 +1,5895 @@ - - + + Angle - Form - Obrazac + Form + Obrazac - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Kut Snap + Angle Snap + Kut Snap - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - nijedan + none + nijedan - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Dodaj + + + Remove + Ukloniti + + + Move up + Pomakni gore + + + Move down + Pomakni dolje + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Pritisnite lijevu tipku miša + Press left mouse button + Pritisnite lijevu tipku miša - Press SHIFT and middle mouse button - Pritisnite tipku SHIFT i srednju tipku miša + Press SHIFT and middle mouse button + Pritisnite tipku SHIFT i srednju tipku miša - Press middle mouse button - Pritisnite srednju tipku miša + Press middle mouse button + Pritisnite srednju tipku miša - Scroll middle mouse button - Kotrljajte kotačić na mišu + Scroll middle mouse button + Kotrljajte kotačić na mišu - - + + Gui::CADNavigationStyle - Press left mouse button - Pritisnite lijevu tipku miša + Press left mouse button + Pritisnite lijevu tipku miša - Press middle mouse button - Pritisnite srednju tipku miša + Press middle mouse button + Pritisnite srednju tipku miša - Press left and middle mouse button - Pritisnite lijevu i srednju tipku miša + Press left and middle mouse button + Pritisnite lijevu i srednju tipku miša - Scroll middle mouse button - Kotrljajte kotačić na mišu + Scroll middle mouse button + Kotrljajte kotačić na mišu - - + + Gui::Command - Standard - Standard + Standard + Standard - - + + Gui::ContainerDialog - &OK - &U redu + &OK + &U redu - &Cancel - &Otkaži + &Cancel + &Otkaži - - + + Gui::ControlSingleton - Task panel - Ploča zadataka + Task panel + Ploča zadataka - - + + Gui::Dialog::AboutApplication - About - O + About + O - Revision number - Ispravljanje broja + Revision number + Ispravljanje broja - Version - Verzija + Version + Verzija - OK - U redu + OK + U redu - - + + - Release date - Datum isporuke + Release date + Datum isporuke - Platform - Platforma + Platform + Platforma - License... - Licenca ... + License... + Licenca ... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Tipka %1 + Button %1 + Tipka %1 - Out Of Range - Izvan dometa + Out Of Range + Izvan dometa - - + + Gui::Dialog::CommandModel - Commands - Naredbe + Commands + Naredbe - - + + Gui::Dialog::DemoMode - View Turntable - Prikaži Turntable + View Turntable + Prikaži Turntable - Speed - Brzina + Speed + Brzina - Maximum - Maksimum + Maximum + Maksimum - Minimum - Minimum + Minimum + Minimum - Fullscreen - Preko cijelog ekrana + Fullscreen + Preko cijelog ekrana - Enable timer - Omogući timer + Enable timer + Omogući timer - s - s + s + s - Angle - Kut + Angle + Kut + + + 90° + 90 ° + + + -90° + -90 ° - 90° - 90 ° + Play + Pokreni - -90° - -90 ° + Stop + Stop - Play - Pokreni + Close + Zatvori - - Stop - Stop - - - Close - Zatvori - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Odaberite Prozor + Choose Window + Odaberite Prozor - &Activate - &amp; Aktiviraj + &Activate + &amp; Aktiviraj - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Otkaži + &Cancel + &Otkaži - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Windows + Windows + Windows - - + + Gui::Dialog::DlgAuthorization - Authorization - Punomoć + Authorization + Punomoć - &OK - &U redu + &OK + &U redu - &Cancel - &Otkaži + &Cancel + &Otkaži - Password: - Lozinka: + Password: + Lozinka: - User name: - Korisničko ime: + User name: + Korisničko ime: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Odaberite Iconu + Choose Icon + Odaberite Iconu - OK - U redu + OK + U redu - Cancel - Otkazati + Cancel + Otkazati - Add icons... - Dodaj ikone ... + Add icons... + Dodaj ikone ... - - + + Gui::Dialog::DlgCustomActions - Macros - Makronaredbe + Macros + Makronaredbe - Setup Custom Macros - Postavljanje uobičajene makronaredbe + Setup Custom Macros + Postavljanje uobičajene makronaredbe - Macro: - Makro: + Macro: + Makro: - ... - ... + ... + ... - Pixmap - Pixmap + Pixmap + Pixmap - Accelerator: - Ubrzanje. + Accelerator: + Ubrzanje. - What's this: - Što je ovo: + What's this: + Što je ovo: - Status text: - Status teksta: + Status text: + Status teksta: - Tool tip: - Alat za savjet: + Tool tip: + Alat za savjet: - Menu text: - Izbornik teksta: + Menu text: + Izbornik teksta: - Add - Dodaj + Add + Dodaj - Remove - Ukloniti + Remove + Ukloniti - Replace - Zamijeniti + Replace + Zamijeniti - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ikone + Icons + Ikone - Macros - Makronaredbe + Macros + Makronaredbe - No macro - Nema makro + No macro + Nema makro - No macros found. - Nije pronađena makronaredba. + No macros found. + Nije pronađena makronaredba. - Macro not found - Makro nije pronađen + Macro not found + Makro nije pronađen - Sorry, couldn't find macro file '%1'. - Nažalost, ne mogu naći makro datoteku '%1;. + Sorry, couldn't find macro file '%1'. + Nažalost, ne mogu naći makro datoteku '%1;. - Empty macro - Prazan makro + Empty macro + Prazan makro - Please specify the macro first. - Navedite prvo macro. + Please specify the macro first. + Navedite prvo macro. - Empty text - Prazan tekst + Empty text + Prazan tekst - Please specify the menu text first. - Navedite tekst izbornika na prvom mjestu. + Please specify the menu text first. + Navedite tekst izbornika na prvom mjestu. - No item selected - Nije odabrana stavka + No item selected + Nije odabrana stavka - Please select a macro item first. - Molimo odaberite prvo predmet makronaredbe. + Please select a macro item first. + Molimo odaberite prvo predmet makronaredbe. - - + + Gui::Dialog::DlgCustomCommands - Commands - Naredbe + Commands + Naredbe - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategorija + Category + Kategorija - Icon - Ikona + Icon + Ikona - Command - Naredba + Command + Naredba - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Tipkovnica + Keyboard + Tipkovnica - Description: - Opis: + Description: + Opis: - &Category: - &Kategorija: + &Category: + &Kategorija: - C&ommands: - N&aredbe: + C&ommands: + N&aredbe: - Current shortcut: - Trenutni prečac: + Current shortcut: + Trenutni prečac: - Press &new shortcut: - Pritisnite &novi prečac: + Press &new shortcut: + Pritisnite &novi prečac: - Currently assigned to: - Trenutno dodijeljen: + Currently assigned to: + Trenutno dodijeljen: - &Assign - &Dodijeli + &Assign + &Dodijeli - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Poništi + &Reset + &Poništi - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Po&ništi sve + Re&set All + Po&ništi sve - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ikona + Icon + Ikona - Command - Naredba + Command + Naredba - none - nijedan + none + nijedan - Multiple defined shortcut - Višestruki prečaci definirani + Multiple defined shortcut + Višestruki prečaci definirani - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Prečac '%1' je definiran više od jednom. To bi moglo rezultirati neočekivanim ponašanjem. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Prečac '%1' je definiran više od jednom. To bi moglo rezultirati neočekivanim ponašanjem. - Already defined shortcut - Već definiran prečac + Already defined shortcut + Već definiran prečac - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Prečac '%1' je već dodijeljen u '%2'. Molimo definirati drugi prečac. + Prečac '%1' je već dodijeljen u '%2'. Molimo definirati drugi prečac. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Toolbox barovi + Toolbox bars + Toolbox barovi - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Alatne trake + Toolbars + Alatne trake - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Napomena:</span> promjene postanu aktivni sljedeći put kada se učitati prikladni radni stol </p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Napomena:</span> promjene postanu aktivni sljedeći put kada se učitati prikladni radni stol </p></body></html> - Move right - Pomakni desno + Move right + Pomakni desno - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Premještanje odabrane stavke jednu razinu prema dolje.</b> <p> To će također promijeniti razinu roditelja stavke. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Premještanje odabrane stavke jednu razinu prema dolje.</b> <p> To će također promijeniti razinu roditelja stavke. </p> - Move left - Pomakni lijevo + Move left + Pomakni lijevo - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Premještanje odabrane stavke jednu razinu gore.</b> <p> To će također promijeniti razinu roditelja stavke. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Premještanje odabrane stavke jednu razinu gore.</b> <p> To će također promijeniti razinu roditelja stavke. </p> - Move down - Pomakni dolje + Move down + Pomakni dolje - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Premještanje odabrane stavke prema dolje.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Premještanje odabrane stavke prema dolje.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> - Move up - Pomakni gore + Move up + Pomakni gore - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Premještanje odabrane stavke gore.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Premještanje odabrane stavke gore.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> - New... - Novi ... + New... + Novi ... - Rename... - Preimenuj ... + Rename... + Preimenuj ... - Delete - Izbriši + Delete + Izbriši - Icon - Ikona + Icon + Ikona - Command - Naredba + Command + Naredba - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Nova alatna traka + New toolbar + Nova alatna traka - Toolbar name: - Ime alatne trake: + Toolbar name: + Ime alatne trake: - Duplicated name - Dvostruki naziv + Duplicated name + Dvostruki naziv - The toolbar name '%1' is already used - Ime alatne trake '%1' se već koristi + The toolbar name '%1' is already used + Ime alatne trake '%1' se već koristi - Rename toolbar - Preimenuj alatnu traku + Rename toolbar + Preimenuj alatnu traku - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Prilagodi + Customize + Prilagodi - &Help - &Pomoć + &Help + &Pomoć - &Close - &Zatvori + &Close + &Zatvori - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - Spaceball nije pronađen + No Spaceball Present + Spaceball nije pronađen - Buttons - Tipke + Buttons + Tipke - Clear - Brisanje + Clear + Brisanje - Print Reference - Ispis Reference + Print Reference + Ispis Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Prikaz svojstava + Display properties + Prikaz svojstava - Display - Prikaz + Display + Prikaz - Transparency: - Prozirnost: + Transparency: + Prozirnost: - Line width: - Širina linije: + Line width: + Širina linije: - Point size: - Veličina točke: + Point size: + Veličina točke: - Material - Materijal + Material + Materijal - ... - ... + ... + ... - Close - Zatvori + Close + Zatvori - Viewing mode - Pregled + Viewing mode + Pregled - Display mode: - Prikaz: + Display mode: + Prikaz: - Plot mode: - nacrt: + Plot mode: + nacrt: - - + + - Line transparency: - Transparentnost linije: + Line transparency: + Transparentnost linije: - Line color: - Boja linije: + Line color: + Boja linije: - Shape color: - Boja oblika: + Shape color: + Boja oblika: - Color plot: - Boja grafa: + Color plot: + Boja grafa: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Urednik + Editor + Urednik - Options - Mogućnosti + Options + Mogućnosti - Enable line numbers - Uključi brojeve redaka + Enable line numbers + Uključi brojeve redaka - Enable folding - Omogući preklapanje + Enable folding + Omogući preklapanje - Indentation - Uvlačenje + Indentation + Uvlačenje - Insert spaces - Umetanje razmaka + Insert spaces + Umetanje razmaka - Tab size: - Veličina kartice: + Tab size: + Veličina kartice: - Indent size: - Uvučena veličina: + Indent size: + Uvučena veličina: - Keep tabs - Drži kartice + Keep tabs + Drži kartice - Display Items - Prikaz stavke + Display Items + Prikaz stavke - Family: - Obitelj: + Family: + Obitelj: - Size: - Veličina: + Size: + Veličina: - Preview: - Pregled: + Preview: + Pregled: - - + + - - + + Gui::Dialog::DlgGeneral - General - Općenito + General + Općenito - Start up - Pokrenuti + Start up + Pokrenuti - Enable splash screen at start up - Omogući štrcanje zaslon na start up + Enable splash screen at start up + Omogući štrcanje zaslon na start up - Switch to tab of report window: - Prebacite se na karticu prozora izvješća: + Switch to tab of report window: + Prebacite se na karticu prozora izvješća: - Auto load module after start up: - Automatski učitati modul nakon pokretanja: + Auto load module after start up: + Automatski učitati modul nakon pokretanja: - Language - Jezik + Language + Jezik - Change language: - Promijeni jezik: + Change language: + Promijeni jezik: - Main window - Glavni prozor + Main window + Glavni prozor - Size of recent file list - Veličina nedavnog popisa datoteka + Size of recent file list + Veličina nedavnog popisa datoteka - Window style: - Stil prozora: + Window style: + Stil prozora: - Size of toolbar icons: - Veličina ikona alatne trake: + Size of toolbar icons: + Veličina ikona alatne trake: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Zadane (%1 x %1) + Default (%1 x %1) + Zadane (%1 x %1) - Small (%1 x %1) - Male (%1 x %1) + Small (%1 x %1) + Male (%1 x %1) - Large (%1 x %1) - Velike (%1 x %1) + Large (%1 x %1) + Velike (%1 x %1) - Extra large (%1 x %1) - Jako velike (%1 x %1) + Extra large (%1 x %1) + Jako velike (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Ulazni + Input + Ulazni - OK - U redu + OK + U redu - Cancel - Otkazati + Cancel + Otkazati - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Pregled scene + Scene Inspector + Pregled scene - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Izvrši makro + Execute macro + Izvrši makro - Macro name: - Makro ime: + Macro name: + Makro ime: - Macro destination: - Makro odredište: + Macro destination: + Makro odredište: - Execute - Izvršiti + Execute + Izvršiti - Close - Zatvori + Close + Zatvori - Create - Stvoriti + Create + Stvoriti - Delete - Izbriši + Delete + Izbriši - Edit - Uredi + Edit + Uredi - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makronaredbe + Macros + Makronaredbe - Macro file - Makro datoteke + Macro file + Makro datoteke - Enter a file name, please: - Unesite naziv datoteke, molimo Vas da: + Enter a file name, please: + Unesite naziv datoteke, molimo Vas da: - Existing file - Postojeće datoteke + Existing file + Postojeće datoteke - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Ova datoteka već postoji. - Delete macro - Brisanje makro + Delete macro + Brisanje makro - Do you really want to delete the macro '%1'? - Želite li zaista obrisati makro '%1'? + Do you really want to delete the macro '%1'? + Želite li zaista obrisati makro '%1'? - Cannot create file - Ne mogu stvoriti datoteku + Cannot create file + Ne mogu stvoriti datoteku - Creation of file '%1' failed. - Kreiranje datoteke '%1' nije uspjelo. + Creation of file '%1' failed. + Kreiranje datoteke '%1' nije uspjelo. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Makro snimanje + Macro recording + Makro snimanje - Macro name: - Makro ime: + Macro name: + Makro ime: - Stop - Stop + Stop + Stop - Cancel - Otkazati + Cancel + Otkazati - Macro path: - Makro put: + Macro path: + Makro put: - ... - ... + ... + ... - Record - Snimak + Record + Snimak - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Makro snimanje + Macro recorder + Makro snimanje - Specify first a place to save. - Odredite prvo mjesto za spremanje. + Specify first a place to save. + Odredite prvo mjesto za spremanje. - Existing macro - Postojeći makro + Existing macro + Postojeći makro - The macro '%1' already exists. Do you want to overwrite? - Makro '%1' već postoji. Želite li prebrisati? + The macro '%1' already exists. Do you want to overwrite? + Makro '%1' već postoji. Želite li prebrisati? - The macro directory doesn't exist. Please, choose another one. - Makro direktorij ne postoji. Molimo, odaberite drugi. + The macro directory doesn't exist. Please, choose another one. + Makro direktorij ne postoji. Molimo, odaberite drugi. - Choose macro directory - Odaberite makro direktorij + Choose macro directory + Odaberite makro direktorij - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Svojstva materijala + Material properties + Svojstva materijala - &Close - &Zatvori + &Close + &Zatvori - Alt+C - Alt + C + Alt+C + Alt + C - Material - Materijal + Material + Materijal - Diffuse color: - Difuzna boja: + Diffuse color: + Difuzna boja: - Specular color: - Specular boja: + Specular color: + Specular boja: - Shininess: - Sjaj: + Shininess: + Sjaj: - % - % + % + % - Ambient color: - Boja ambienta: + Ambient color: + Boja ambienta: - - + + - Emissive color: - Emitivna boja: + Emissive color: + Emitivna boja: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - On-line pomoć + On-line help + On-line pomoć - Help viewer - Pomoć preglednik + Help viewer + Pomoć preglednik - Location of start page - Lokacija početne stranice + Location of start page + Lokacija početne stranice - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML datoteke (*. html *. htm) + HTML files (*.html *.htm) + HTML datoteke (*. html *. htm) - Access denied - Pristup odbijen + Access denied + Pristup odbijen - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Pristup je odbijen u '%1' Odredite drugi direktorij, molim. + Pristup je odbijen u '%1' Odredite drugi direktorij, molim. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Parametar Editor + Parameter Editor + Parametar Editor - Save to disk - Spremi na disk + Save to disk + Spremi na disk - Alt+C - Alt + C + Alt+C + Alt + C - &Close - &Zatvori + &Close + &Zatvori - - + + Gui::Dialog::DlgParameterImp - Group - Grupa + Group + Grupa - Name - Ime + Name + Ime - Type - Tip + Type + Tip - Value - Vrijednost + Value + Vrijednost - User parameter - Korisnički parametar + User parameter + Korisnički parametar - Invalid input - Neispravan unos + Invalid input + Neispravan unos - Invalid key name '%1' - Nevažeće ime '%1' + Invalid key name '%1' + Nevažeće ime '%1' - System parameter - Parametar sustava + System parameter + Parametar sustava - - + + Gui::Dialog::DlgPreferences - Preferences - Postavke + Preferences + Postavke - &Help - &Pomoć + &Help + &Pomoć - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &U redu + &OK + &U redu - &Apply - &Primijeni + &Apply + &Primijeni - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Otkaži + &Cancel + &Otkaži - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Pogrešan parametar + Wrong parameter + Pogrešan parametar - - + + Gui::Dialog::DlgProjectInformation - Project information - Informacije o projektu + Project information + Informacije o projektu - Information - Informacije + Information + Informacije - &Name: - &Ime: + &Name: + &Ime: - Commen&t: - Komen&tar: + Commen&t: + Komen&tar: - Path: - Put: + Path: + Put: - &Last modified by: - &Zadnja izmjena od: + &Last modified by: + &Zadnja izmjena od: - Created &by: - Kreirano &od: + Created &by: + Kreirano &od: - Com&pany: - Kom&panija: + Com&pany: + Kom&panija: - Last &modification date: - Posljednja iz&mjena i datum: + Last &modification date: + Posljednja iz&mjena i datum: - Creation &date: - &Datum izrade: + Creation &date: + &Datum izrade: - &OK - &U redu + &OK + &U redu - &Cancel - &Otkaži + &Cancel + &Otkaži - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Korisne opcije projekta + Project utility + Korisne opcije projekta - Extract project - Dohvati projekt + Extract project + Dohvati projekt - Source - Izvor + Source + Izvor - Project file (*.fcstd) - Datoteka projekta (*. fcstd) + Project file (*.fcstd) + Datoteka projekta (*. fcstd) - Destination - Odredište + Destination + Odredište - Extract - Dohvati + Extract + Dohvati - Create project - Kreiraj projekt + Create project + Kreiraj projekt - Document.xml - Dokument.xml + Document.xml + Dokument.xml - Create - Stvoriti + Create + Stvoriti - Load project file after creation - Učitaj datoteku projekta nakon stvaranja + Load project file after creation + Učitaj datoteku projekta nakon stvaranja - Empty source - Prazan izvor + Empty source + Prazan izvor - No source is defined. - Izvor nije definiran. + No source is defined. + Izvor nije definiran. - Empty destination - Prazno odredište + Empty destination + Prazno odredište - No destination is defined. - Odredište nije definirano. + No destination is defined. + Odredište nije definirano. - - + + Gui::Dialog::DlgReportView - Output window - Izlazni prozor + Output window + Izlazni prozor - Output - Izlaz + Output + Izlaz - Record log messages - Snimanje log poruke + Record log messages + Snimanje log poruke - Record warnings - Snimanje upozorenja + Record warnings + Snimanje upozorenja - Record error messages - Snimanje poruka o pogrešci + Record error messages + Snimanje poruka o pogrešci - Colors - Boje + Colors + Boje - Normal messages: - Normalne poruke: + Normal messages: + Normalne poruke: - Log messages: - Log poruke: + Log messages: + Log poruke: - Warnings: - Upozorenja: + Warnings: + Upozorenja: - Errors: - Pogreške: + Errors: + Pogreške: - - + + - Redirect internal Python errors to report view - Preusmjeravanje unutarnjih Python grešaka u prikaz pogrešaka + Redirect internal Python errors to report view + Preusmjeravanje unutarnjih Python grešaka u prikaz pogrešaka - Redirect internal Python output to report view - Preusmjeri interni Python izlaz na prikaz izvješća + Redirect internal Python output to report view + Preusmjeri interni Python izlaz na prikaz izvješća - - + + Gui::Dialog::DlgRunExternal - Running external program - Izvođenje vanjskog programa + Running external program + Izvođenje vanjskog programa - TextLabel - Tekst oznaka + TextLabel + Tekst oznaka - Advanced >> - Napredno >> + Advanced >> + Napredno >> - ... - ... + ... + ... - Accept changes - Prihvati promjene + Accept changes + Prihvati promjene - Discard changes - Odbaci promjene + Discard changes + Odbaci promjene - Abort program - Prekini program + Abort program + Prekini program - Help - Pomoć + Help + Pomoć - Select a file - Odaberite datoteku + Select a file + Odaberite datoteku - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D Prikaz + 3D View + 3D Prikaz - 3D View settings - Postavke 3D prikaza + 3D View settings + Postavke 3D prikaza - Show coordinate system in the corner - Prikaži koordinatni sustav u kutu + Show coordinate system in the corner + Prikaži koordinatni sustav u kutu - Show counter of frames per second - Pokaži brojač sličica u sekundi + Show counter of frames per second + Pokaži brojač sličica u sekundi - Enable animation - Omogući animacije + Enable animation + Omogući animacije - Enable anti-aliasing (slower) - Omogući anti-aliasing (sporije) + Enable anti-aliasing (slower) + Omogući anti-aliasing (sporije) - Eye to eye distance for stereo modes: - Oči u oči udaljenost, za stereo način: + Eye to eye distance for stereo modes: + Oči u oči udaljenost, za stereo način: - Camera type - Tip kamere + Camera type + Tip kamere - Orthographic rendering - Renderiranje pravopisa + Orthographic rendering + Renderiranje pravopisa - Perspective rendering - Perspektivna projekcija + Perspective rendering + Perspektivna projekcija - - + + - 3D Navigation - 3D navigacija + 3D Navigation + 3D navigacija - Mouse... - Miš... + Mouse... + Miš... - Intensity of backlight - Intenzitet osvjetljenja + Intensity of backlight + Intenzitet osvjetljenja - Enable backlight color - Omogući pozadinskog osvjetljenje + Enable backlight color + Omogući pozadinskog osvjetljenje - Orbit style - Način okretanja + Orbit style + Način okretanja - Turntable - Okretano + Turntable + Okretano - Trackball - Prećeno + Trackball + Prećeno - Invert zoom - Invertiraj zumiranje + Invert zoom + Invertiraj zumiranje - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigacija + %1 navigation + %1 navigacija - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Model boja + Color model + Model boja - &Gradient: - &Gradient: + &Gradient: + &Gradient: - red-yellow-green-cyan-blue - crveno-žuto-zeleno-cijan-plavo + red-yellow-green-cyan-blue + crveno-žuto-zeleno-cijan-plavo - blue-cyan-green-yellow-red - plavo-cijan-zeleno-žuto-crveno + blue-cyan-green-yellow-red + plavo-cijan-zeleno-žuto-crveno - white-black - bijelo-crna + white-black + bijelo-crna - black-white - crno-bijela + black-white + crno-bijela - Visibility - Vidljivost + Visibility + Vidljivost - Out g&rayed - Od G & rayed + Out g&rayed + Od G & rayed - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - van & nevidljiv + Out &invisible + van & nevidljiv - Alt+I - Alt+I + Alt+I + Alt+I - Style - Stil + Style + Stil - &Zero - &Nula + &Zero + &Nula - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Tok + &Flow + &Tok - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &U redu + &OK + &U redu - &Cancel - &Otkaži + &Cancel + &Otkaži - Parameter range - Raspon parametra + Parameter range + Raspon parametra - Mi&nimum: - Mi&nimum: + Mi&nimum: + Mi&nimum: - Ma&ximum: - Ma&ksimum: + Ma&ximum: + Ma&ksimum: - &Labels: - &Oznake: + &Labels: + &Oznake: - &Decimals: - &Decimale: + &Decimals: + &Decimale: - - + + - Color-gradient settings - Boja-gradijent postavke + Color-gradient settings + Boja-gradijent postavke - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Pogrešan parametar + Wrong parameter + Pogrešan parametar - The maximum value must be higher than the minimum value. - Maksimalna vrijednost mora biti veći od minimalne vrijednosti. + The maximum value must be higher than the minimum value. + Maksimalna vrijednost mora biti veći od minimalne vrijednosti. - - + + Gui::Dialog::DlgSettingsDocument - Document - Dokument + Document + Dokument - General - Općenito + General + Općenito - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Razina kompresije spremanja dokumenta (0 = ništa, 9 = najviši, 3 = zadana vrijednost) + Razina kompresije spremanja dokumenta (0 = ništa, 9 = najviši, 3 = zadana vrijednost) - Create new document at start up - Stvaranje novog dokumenta prilikom pokretanja + Create new document at start up + Stvaranje novog dokumenta prilikom pokretanja - Storage - Skladištenje + Storage + Skladištenje - Saving transactions (Auto-save) - Spremanje transakcije (Auto-save) + Saving transactions (Auto-save) + Spremanje transakcije (Auto-save) - Discard saved transaction after saving document - Odbaci spremljene transakcije nakon spremanja dokumenta + Discard saved transaction after saving document + Odbaci spremljene transakcije nakon spremanja dokumenta - Save thumbnail into project file when saving document - Spremi thumbnail u projekt datoteku prilikom spremanja dokumenta + Save thumbnail into project file when saving document + Spremi thumbnail u projekt datoteku prilikom spremanja dokumenta - Create up to backup files when resaving document - Napravite sigurnosnih kopija datoteka prilikom spremanja + Create up to backup files when resaving document + Napravite sigurnosnih kopija datoteka prilikom spremanja - Document objects - Objekti dokumenta + Document objects + Objekti dokumenta - Allow duplicate object labels in one document - Dopusti dvostruke nazive objekata u jednom dokumentu + Allow duplicate object labels in one document + Dopusti dvostruke nazive objekata u jednom dokumentu - Maximum Undo/Redo steps - Maksimalan broj Undo/Redo koraka + Maximum Undo/Redo steps + Maksimalan broj Undo/Redo koraka - Using Undo/Redo on documents - Koristi Undo/Redo na dokumentima + Using Undo/Redo on documents + Koristi Undo/Redo na dokumentima - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Tekst + Text + Tekst - Bookmark - Bookmark + Bookmark + Bookmark - Breakpoint - Prijelomna točka + Breakpoint + Prijelomna točka - Keyword - Kljušna riječ + Keyword + Kljušna riječ - Comment - Komentar + Comment + Komentar - Block comment - Blok komentar + Block comment + Blok komentar - Number - Broj + Number + Broj - String - Tekst (string) + String + Tekst (string) - Character - Simbol + Character + Simbol - Class name - Ime klase + Class name + Ime klase - Define name - Odredite naziv + Define name + Odredite naziv - Operator - Operator + Operator + Operator - Python output - Python izlaz + Python output + Python izlaz - Python error - Python pogreška + Python error + Python pogreška - Items - Jedinice + Items + Jedinice - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Postavke slike + Image settings + Postavke slike - Image properties - Opcije slike + Image properties + Opcije slike - Back&ground: - Poza&dina: + Back&ground: + Poza&dina: - Current - Trenutna + Current + Trenutna - White - Bijela + White + Bijela - Black - Crna + Black + Crna - Transparent - Transparentan + Transparent + Transparentan - Image dimensions - Dimenzije slike + Image dimensions + Dimenzije slike - Pixel - Piksel + Pixel + Piksel - &Width: - &Širina: + &Width: + &Širina: - Current screen - Trenutni ekran + Current screen + Trenutni ekran - Icon 32 x 32 - Ikona 32 x 32 + Icon 32 x 32 + Ikona 32 x 32 - Icon 64 x 64 - Ikona 64 x 64 + Icon 64 x 64 + Ikona 64 x 64 - Icon 128 x 128 - Icon 128 x 128 + Icon 128 x 128 + Icon 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA + 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA + 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standardne veličine: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Visina: - Standard sizes: - Standardne veličine: + Aspect ratio: + Omjer: - &Height: - &Visina: + &Screen + &Ekran - Aspect ratio: - Omjer: + Alt+S + Alt+S - &Screen - &Ekran + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Komentar slike - Alt+1 - Alt+1 + Insert MIBA + Umetni MIBA - Image comment - Komentar slike + Insert comment + Umetni komentar - - Insert MIBA - Umetni MIBA - - - Insert comment - Umetni komentar - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Makro + Macro + Makro - Macro recording settings - Postavke snimanja za makro + Macro recording settings + Postavke snimanja za makro - Logging Commands - Prijava Naredbi + Logging Commands + Prijava Naredbi - Show script commands in python console - Prikaži naredbe skripta u python konzoli + Show script commands in python console + Prikaži naredbe skripta u python konzoli - Log all commands issued by menus to file: - Prijavite se sve naredbe izdane od strane izbornika u datoteku: + Log all commands issued by menus to file: + Prijavite se sve naredbe izdane od strane izbornika u datoteku: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - GUI naredbe + Gui commands + GUI naredbe - Recording GUI commands - Snimanje GUI naredbi + Recording GUI commands + Snimanje GUI naredbi - Record as comment - Snimiti kao komentar + Record as comment + Snimiti kao komentar - Macro path - Makro put + Macro path + Makro put - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Mjerne jedinice + Units + Mjerne jedinice - Units settings - Postavke mjernih jedinica + Units settings + Postavke mjernih jedinica - Standard (mm/kg/s/degree) - Standardno (mm/kg/s/°) + Standard (mm/kg/s/degree) + Standardno (mm/kg/s/°) - MKS (m/kg/s/degree) - MKS (m/kg/s/°) + MKS (m/kg/s/degree) + MKS (m/kg/s/°) - Magnitude - Povečanje + Magnitude + Povečanje - Unit - Jedinica + Unit + Jedinica - User system: - Sustav korisnika: + User system: + Sustav korisnika: - Imperial (in/lb) - Imperial (u / lb) + Imperial (in/lb) + Imperial (u / lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Boje + Colors + Boje - Selection - Izbor + Selection + Izbor - Enable selection highlighting - Omogući odabir isticanja + Enable selection highlighting + Omogući odabir isticanja - Enable preselection highlighting - Omogući isticanje prelaskom miša + Enable preselection highlighting + Omogući isticanje prelaskom miša - Background color - Boja pozadine + Background color + Boja pozadine - Middle color - Srednja boja + Middle color + Srednja boja - Color gradient - Gradijent boje + Color gradient + Gradijent boje - Simple color - Jednostavna boja + Simple color + Jednostavna boja - Default colors - Zadane boje + Default colors + Zadane boje - Edited edge color - Boja izmjenjenog ruba + Edited edge color + Boja izmjenjenog ruba - Edited vertex color - Boja izmjenjenog vrha + Edited vertex color + Boja izmjenjenog vrha - Construction geometry - Geometrija za konstrukciju + Construction geometry + Geometrija za konstrukciju - Fully constrained geometry - Potpuno ograničena geometrija + Fully constrained geometry + Potpuno ograničena geometrija - The color of construction geometry in editmode - Boja geometrije za konstrukciju prilikom rada + The color of construction geometry in editmode + Boja geometrije za konstrukciju prilikom rada - The color of fully constrained geometry in editmode - Boja potpuno ograničene geometrije prilikom rada + The color of fully constrained geometry in editmode + Boja potpuno ograničene geometrije prilikom rada - The color of vertices being edited - Boja vrhova prilikom uređivanja + The color of vertices being edited + Boja vrhova prilikom uređivanja - The color of edges being edited - Boja rubova prilikom uređivanja + The color of edges being edited + Boja rubova prilikom uređivanja - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Savjet dana + Tip of the day + Savjet dana - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <font size="+3"><font face="Times New Roman"><b>Jeste li znali ...</b></font></font> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <font size="+3"><font face="Times New Roman"><b>Jeste li znali ...</b></font></font> - &Show tips at start up - &Pokaži savjete prilikom pokretanja + &Show tips at start up + &Pokaži savjete prilikom pokretanja - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Sljedeći savjet + &Next Tip + &Sljedeći savjet - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Zatvori + &Close + &Zatvori - Alt+C - Alt + C + Alt+C + Alt + C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Preuzimanje nije uspjelo: %1 + Preuzimanje nije uspjelo: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Ako želite saznati više o FreeCADu možete ići na %1 ili pritisnite Pomoć stavku u izborniku Pomoć. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Ako želite saznati više o FreeCADu možete ići na %1 ili pritisnite Pomoć stavku u izborniku Pomoć. - - + + Gui::Dialog::DockablePlacement - Placement - Položaj + Placement + Položaj - - + + Gui::Dialog::DownloadDialog - Canceled. - Otkazano. + Canceled. + Otkazano. - - + + Download + + + + Cancel + Otkazati + + + Close + Zatvori + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Preuzimanje nije uspjelo: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Dodaj ikonu + Add icon + Dodaj ikonu - - + + Gui::Dialog::InputVector - Input vector - Ulazni vektor + Input vector + Ulazni vektor - Vector - Vektor + Vector + Vektor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - U redu + OK + U redu - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Tipke miša + Mouse buttons + Tipke miša - Configuration - Konfiguracija + Configuration + Konfiguracija - Selection: - Odabrano: + Selection: + Odabrano: - Panning - Pomicanje pogleda + Panning + Pomicanje pogleda - Rotation: - Rotacija: + Rotation: + Rotacija: - Zooming: - Zumiranje: + Zooming: + Zumiranje: - - + + Gui::Dialog::ParameterGroup - Expand - Proširi + Expand + Proširi - Add sub-group - Dodaj podgrupu + Add sub-group + Dodaj podgrupu - Remove group - Ukloni grupu + Remove group + Ukloni grupu - Rename group - Preimenuj grupu + Rename group + Preimenuj grupu - Export parameter - Izvoz parametra + Export parameter + Izvoz parametra - Import parameter - Uvoz parametra + Import parameter + Uvoz parametra - Collapse - Kolaps + Collapse + Kolaps - Do really want to remove this parameter group? - Da li stvarno želite ukloniti ovu grupu parametara? + Do really want to remove this parameter group? + Da li stvarno želite ukloniti ovu grupu parametara? - Existing sub-group - Postojeća podgrupa + Existing sub-group + Postojeća podgrupa - The sub-group '%1' already exists. - Pod-grupa '%1' već postoji. + The sub-group '%1' already exists. + Pod-grupa '%1' već postoji. - Export parameter to file - Izvoz parametra u datoteku + Export parameter to file + Izvoz parametra u datoteku - XML (*.FCParam) - XML (*. FCParam) + XML (*.FCParam) + XML (*. FCParam) - Import parameter from file - Uvoz parametara iz datoteke + Import parameter from file + Uvoz parametara iz datoteke - Import Error - Greška uvoza + Import Error + Greška uvoza - Reading from '%1' failed. - Čitanje iz '%1' nije uspjelo. + Reading from '%1' failed. + Čitanje iz '%1' nije uspjelo. - - + + Gui::Dialog::ParameterValue - Change value - Promjena vrijednosti + Change value + Promjena vrijednosti - Remove key - Odbaci tipka + Remove key + Odbaci tipka - Rename key - Preimenuj tipka + Rename key + Preimenuj tipka - New - Novi + New + Novi - New string item - Nova niz (string) jedinica + New string item + Nova niz (string) jedinica - New float item - Nova float jedinica + New float item + Nova float jedinica - New integer item - Nova integer jedinica + New integer item + Nova integer jedinica - New unsigned item - Nova unsigned jedinica + New unsigned item + Nova unsigned jedinica - New Boolean item - Nova Boolean jedinica + New Boolean item + Nova Boolean jedinica - Existing item - Postojeća jedinica + Existing item + Postojeća jedinica - The item '%1' already exists. - Jedinica '%1' već postoji. + The item '%1' already exists. + Jedinica '%1' već postoji. - - + + Gui::Dialog::Placement - Placement - Položaj + Placement + Položaj - OK - U redu + OK + U redu - Translation: - Translacija: + Translation: + Translacija: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotacija: + Rotation: + Rotacija: - Angle: - Kut: + Angle: + Kut: - Axis: - Os: + Axis: + Os: - Center: - Centar: + Center: + Centar: - Pitch: - Vrh: + Pitch: + Vrh: - Roll: - Svitak: + Roll: + Svitak: - Yaw: - Skretati sa pravca: + Yaw: + Skretati sa pravca: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Eulerovi kutevi + Euler angles + Eulerovi kutevi - Apply placement changes immediately - Primijeni promjene položaja odmah + Apply placement changes immediately + Primijeni promjene položaja odmah - Apply incremental changes to object placement - Primijeni inkrementalne promjene položaju objekta + Apply incremental changes to object placement + Primijeni inkrementalne promjene položaju objekta - Apply - Primijeni + Apply + Primijeni - Reset - Odbaci + Reset + Odbaci - Close - Zatvori + Close + Zatvori - - + + Gui::Dialog::PrintModel - Button - Gumb + Button + Gumb - Command - Naredba + Command + Naredba - - + + Gui::Dialog::SceneInspector - Dialog - Dijalog + Dialog + Dijalog - Close - Zatvori + Close + Zatvori - Refresh - Osvježi + Refresh + Osvježi - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor stablo + Inventor Tree + Inventor stablo - Nodes - Čvorovi + Nodes + Čvorovi - - + + Gui::Dialog::TextureMapping - Texture - Tekstura + Texture + Tekstura - Texture mapping - Mapiranje tekstura + Texture mapping + Mapiranje tekstura - Global - Globalna + Global + Globalna - Environment - Okolina + Environment + Okolina - Image files (%1) - Slikovne datoteke (%1) + Image files (%1) + Slikovne datoteke (%1) - No image - Nema slike + No image + Nema slike - The specified file is not a valid image file. - Navedena datoteka nije valjana datoteka slike. + The specified file is not a valid image file. + Navedena datoteka nije valjana datoteka slike. - No 3d view - Nema 3D prikaza + No 3d view + Nema 3D prikaza - No active 3d view found. - Nije pronađen aktivni 3D prikaz. + No active 3d view found. + Nije pronađen aktivni 3D prikaz. - - + + Gui::Dialog::Transform - Cancel - Otkazati + Cancel + Otkazati - Transform - Transformiraj + Transform + Transformiraj - - + + Gui::DlgTreeWidget - Dialog - Dijalog + Dialog + Dijalog - Items - Jedinice + Items + Jedinice - OK - U redu + OK + U redu - Cancel - Otkazati + Cancel + Otkazati - - + + - - + + Gui::DockWnd::CombiView - CombiView - Mješani pogled + CombiView + Mješani pogled - Project - Projekt + Project + Projekt - Tasks - Zadaci + Tasks + Zadaci - - + + Gui::DockWnd::HelpView - Previous - Prethodna + Previous + Prethodna - Next - Slijedeća + Next + Slijedeća - Home - Početna stranica + Home + Početna stranica - Open - Otvori + Open + Otvori - Open file - Otvori datoteku + Open file + Otvori datoteku - All HTML files (*.html *.htm) - Sve HTML datoteke (*. html *. htm) + All HTML files (*.html *.htm) + Sve HTML datoteke (*. html *. htm) - External browser - Vanjski preglednik + External browser + Vanjski preglednik - No external browser found. Specify in preferences, please - Nije pronađen vanjski preglednik. Navedite u postavkama, molim + No external browser found. Specify in preferences, please + Nije pronađen vanjski preglednik. Navedite u postavkama, molim - Starting of %1 failed - Pokretanje %1 nije uspjelo + Starting of %1 failed + Pokretanje %1 nije uspjelo - - + + Gui::DockWnd::PropertyDockView - Property View - Pregled vlasništva + Property View + Pregled vlasništva - - + + Gui::DockWnd::ReportOutput - Logging - Prijava + Logging + Prijava - Warning - Upozorenje + Warning + Upozorenje - Error - Pogreška + Error + Pogreška - Options - Mogućnosti + Options + Mogućnosti - Clear - Brisanje + Clear + Brisanje - Save As... - Spremi kao ... + Save As... + Spremi kao ... - Save Report Output - Spremi izvješće izlaza + Save Report Output + Spremi izvješće izlaza - Plain Text Files (*.txt *.log) - Obične tekstualne datoteke (*. txt *. log) + Plain Text Files (*.txt *.log) + Obične tekstualne datoteke (*. txt *. log) - Go to end - Idi na kraj + Go to end + Idi na kraj - Redirect Python output - Preusmjeravanje Python izlaza + Redirect Python output + Preusmjeravanje Python izlaza - Redirect Python errors - Preusmjeravanje Python pogreški + Redirect Python errors + Preusmjeravanje Python pogreški - - + + Gui::DockWnd::ReportView - Output - Izlaz + Output + Izlaz - Python console - Python konzola + Python console + Python konzola - - + + Gui::DockWnd::SelectionView - Property View - Pregled vlasništva + Property View + Pregled vlasništva - - + + Gui::DockWnd::TaskPanelView - Task View - Pregled zadataka + Task View + Pregled zadataka - - + + Gui::DockWnd::TextBrowser - Could not open file. - Ne mogu otvoriti datoteku. + Could not open file. + Ne mogu otvoriti datoteku. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Pokušali ste pristupiti adresi %1, koja je trenutno nedostupna. Molimo provjerite je li URL postoji i pokušajte ponovno učitati stranicu. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Pokušali ste pristupiti adresi %1, koja je trenutno nedostupna. Molimo provjerite je li URL postoji i pokušajte ponovno učitati stranicu. - Connecting to %1 - Spajanje na %1 + Connecting to %1 + Spajanje na %1 - Sending to %1 - Slanje na %1 + Sending to %1 + Slanje na %1 - Reading from %1 - Čitanje iz %1 + Reading from %1 + Čitanje iz %1 - Download failed: %1. - Preuzimanje nije uspjelo: %1. + Download failed: %1. + Preuzimanje nije uspjelo: %1. - Previous - Prethodna + Previous + Prethodna - Forward - Naprijed + Forward + Naprijed - Home - Početna stranica + Home + Početna stranica - Refresh - Osvježi + Refresh + Osvježi - Copy - Kopiraj + Copy + Kopiraj - Select all - Označi sve + Select all + Označi sve - No description for - Nema opisa za + No description for + Nema opisa za - - + + Gui::DocumentModel - Application - Aplikacija + Application + Aplikacija - Labels & Attributes - Etikete i atributi + Labels & Attributes + Etikete i atributi - - + + Gui::EditorView - Modified file - Promjena datoteke + Modified file + Promjena datoteke - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Ovo je modificirano izvan izvornog editora. Želite li ga ponovno učitati? - Unsaved document - Nespremljeni dokument + Unsaved document + Nespremljeni dokument - The document has been modified. + The document has been modified. Do you want to save your changes? - Dokument je promijenjen. Želite li spremiti promjene? + Dokument je promijenjen. Želite li spremiti promjene? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD makro (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD makro (*.FCMacro);;Python (*.py) - Export PDF - Izvoz PDF + Export PDF + Izvoz PDF - PDF file (*.pdf) - PDF datoteka (*.pdf) + PDF file (*.pdf) + PDF datoteka (*.pdf) - untitled[*] - Bez imena[*] + untitled[*] + Bez imena[*] - - Editor - - Urednik + - Editor + - Urednik - %1 chars removed - %1 znakova uklonjeno + %1 chars removed + %1 znakova uklonjeno - %1 chars added - %1 znakova dodano + %1 chars added + %1 znakova dodano - Formatted - Oblikovano + Formatted + Oblikovano - - + + Gui::FileChooser - Select a file - Odaberite datoteku + Select a file + Odaberite datoteku - Select a directory - Odaberite direktorij + Select a directory + Odaberite direktorij - - + + Gui::FileDialog - Save as - Spremi kao + Save as + Spremi kao - Open - Otvori + Open + Otvori - - + + Gui::FileOptionsDialog - Extended - Produženo + Extended + Produženo - All files (*.*) - Sve datoteke (*.*) + All files (*.*) + Sve datoteke (*.*) - - + + Gui::Flag - Top left - Gore lijevo + Top left + Gore lijevo - Bottom left - Dolje lijevo + Bottom left + Dolje lijevo - Top right - Gore desno + Top right + Gore desno - Bottom right - Dolje desno + Bottom right + Dolje desno - Remove - Ukloniti + Remove + Ukloniti - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Pritisnite CTRL i lijevu tipku miša + Press CTRL and left mouse button + Pritisnite CTRL i lijevu tipku miša - Press middle mouse button - Pritisnite srednju tipku miša + Press middle mouse button + Pritisnite srednju tipku miša - Press left mouse button - Pritisnite lijevu tipku miša + Press left mouse button + Pritisnite lijevu tipku miša - Scroll middle mouse button - Kotrljajte kotačić na mišu + Scroll middle mouse button + Kotrljajte kotačić na mišu - - + + Gui::LocationDialog - Wrong direction - Pogrešan smjer + Wrong direction + Pogrešan smjer - Direction must not be the null vector - Smjer ne smije biti nula + Direction must not be the null vector + Smjer ne smije biti nula - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Korisnički definirano... + User defined... + Korisnički definirano... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makronaredbe + Macros + Makronaredbe - - + + Gui::MainWindow - Dimension - Dimenzija + Dimension + Dimenzija - Ready - Spreman + Ready + Spreman - Toggles this toolbar - Uključuje ove alatne trake + Toggles this toolbar + Uključuje ove alatne trake - Toggles this dockable window - Uključuje ovaj usidrivi prozor + Toggles this dockable window + Uključuje ovaj usidrivi prozor - Close All - Zatvori sve + Close All + Zatvori sve - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Preuzimanje je započelo... + Preuzimanje je započelo... - - + + Gui::ProgressBar - Remaining: %1 - Preostalo: %1 + Remaining: %1 + Preostalo: %1 - Aborting - Odustani + Aborting + Odustani - Do you really want to abort the operation? - Želite li zaista prekinuti operaciju? + Do you really want to abort the operation? + Želite li zaista prekinuti operaciju? - - + + Gui::ProgressDialog - Remaining: %1 - Preostalo: %1 + Remaining: %1 + Preostalo: %1 - Aborting - Odustani + Aborting + Odustani - Do you really want to abort the operation? - Želite li zaista prekinuti operaciju? + Do you really want to abort the operation? + Želite li zaista prekinuti operaciju? - - + + Gui::PropertyEditor::PropertyModel - Property - Opcije + Property + Opcije - Value - Vrijednost + Value + Vrijednost - - + + Gui::PropertyView - View - Pregled + View + Pregled - Data - Podaci + Data + Podaci - - + + Gui::PythonConsole - System exit - Izlaz iz sustava + System exit + Izlaz iz sustava - The application is still running. + The application is still running. Do you want to exit without saving your data? - Primjena se još uvijek izvršava. Želite li izaći bez snimanja podataka? + Primjena se još uvijek izvršava. Želite li izaći bez snimanja podataka? - Python console - Python konzola + Python console + Python konzola - Unhandled PyCXX exception. - Neobrađena PyCXX iznimka. + Unhandled PyCXX exception. + Neobrađena PyCXX iznimka. - Unhandled FreeCAD exception. - Neobrađena FreeCAD iznimka. + Unhandled FreeCAD exception. + Neobrađena FreeCAD iznimka. - Unhandled unknown C++ exception. - Neobrađena nepoznata C++ iznimka. + Unhandled unknown C++ exception. + Neobrađena nepoznata C++ iznimka. - &Copy command - &Kopiraj naredba + &Copy command + &Kopiraj naredba - &Copy history - &Kopiraj povijest + &Copy history + &Kopiraj povijest - Save history as... - Spremi povijest kao ... + Save history as... + Spremi povijest kao ... - Insert file name... - Umetni ime datoteke ... + Insert file name... + Umetni ime datoteke ... - Save History - Spremi povijest + Save History + Spremi povijest - Macro Files (*.FCMacro *.py) - Makro datoteke (*. FCMacro *. py) + Macro Files (*.FCMacro *.py) + Makro datoteke (*. FCMacro *. py) - Insert file name - Umetni ime datoteke + Insert file name + Umetni ime datoteke - All Files (*.*) - Sve datoteke (*.*) + All Files (*.*) + Sve datoteke (*.*) - Python Input Dialog - Ulazbi Python dijalog + Python Input Dialog + Ulazbi Python dijalog - Unhandled std C++ exception. - Neobrađena STD C++ iznimka. + Unhandled std C++ exception. + Neobrađena STD C++ iznimka. - Word wrap - Automatsko dovršavanje + Word wrap + Automatsko dovršavanje - &Copy - &Kopiraj + &Copy + &Kopiraj - &Paste - &Zalijepi + &Paste + &Zalijepi - Select All - Označi sve + Select All + Označi sve - - + + Clear console + + + + Gui::PythonEditor - Comment - Komentar + Comment + Komentar - Uncomment - Bez komentara + Uncomment + Bez komentara - - + + Gui::PythonInputField - OK - U redu + OK + U redu - Clear - Brisanje + Clear + Brisanje - - + + Gui::RecentFilesAction - Open file %1 - Otvoriti datoteku %1 + Open file %1 + Otvoriti datoteku %1 - File not found - Datoteka nije pronađena + File not found + Datoteka nije pronađena - The file '%1' cannot be opened. - Datoteka '%1' ne može biti otvorena. + The file '%1' cannot be opened. + Datoteka '%1' ne može biti otvorena. - - + + Gui::SelectModule - Select module - Odaberite modul + Select module + Odaberite modul - Open %1 as - Otvori %1 kao + Open %1 as + Otvori %1 kao - Select - Odaberite + Select + Odaberite - - + + Gui::StdCmdDescription - Help - Pomoć + Help + Pomoć - Des&cription - Opi&s + Des&cription + Opi&s - Long description of commands - Dugi opis naredbi + Long description of commands + Dugi opis naredbi - - + + Gui::StdCmdDownloadOnlineHelp - Help - Pomoć + Help + Pomoć - Download online help - Preuzimanje on-line pomoći + Download online help + Preuzimanje on-line pomoći - Download %1's online help - Preuzimanje %1 on-line pomoći + Download %1's online help + Preuzimanje %1 on-line pomoći - Non-existing directory - Nepostojeći direktorij + Non-existing directory + Nepostojeći direktorij - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Direktorij '%1' ne postoji. + Direktorij '%1' ne postoji. Želite li navesti postojeći direktorij? - Missing permission - Nedostaju ovlasti + Missing permission + Nedostaju ovlasti - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Nemate dopuštenje pisati u '%1' + Nemate dopuštenje pisati u '%1' Želite li odrediti drugi direktorij? - Stop downloading - Zaustavi preuzimanje + Stop downloading + Zaustavi preuzimanje - - + + Gui::StdCmdPythonHelp - Tools - Alati + Tools + Alati - Python Modules - Python moduli + Python Modules + Python moduli - Opens a browser to show the Python modules - Otvara preglednik za prikaz Python modula + Opens a browser to show the Python modules + Otvara preglednik za prikaz Python modula - - + + Gui::TaskBoxAngle - Angle - Kut + Angle + Kut - - + + Gui::TaskBoxPosition - Position - Položaj + Position + Položaj - - + + Gui::TaskView::TaskAppearance - Display mode: - Prikaz: + Display mode: + Prikaz: - Plot mode: - nacrt: + Plot mode: + nacrt: - Point size: - Veličina točke: + Point size: + Veličina točke: - Line width: - Širina linije: + Line width: + Širina linije: - Transparency: - Prozirnost: + Transparency: + Prozirnost: - Appearance - Izgled + Appearance + Izgled - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Uredi + Edit + Uredi - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Izgled + Appearance + Izgled - ... - ... + ... + ... - edit selection - uredi odabir + edit selection + uredi odabir - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Pritisnite lijevu tipku miša + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Engleski + English + Engleski - - + + Gui::TreeDockWidget - Tree view - Pogled hijerarhije + Tree view + Pogled hijerarhije - - + + Gui::TreeWidget - Create group... - Napravi grupu ... + Create group... + Napravi grupu ... - Create a group - Napravite grupu + Create a group + Napravite grupu - Group - Grupa + Group + Grupa - Rename - Preimenuj + Rename + Preimenuj - Rename object - Preimenovanje objekta + Rename object + Preimenovanje objekta - Labels & Attributes - Etikete i atributi + Labels & Attributes + Etikete i atributi - Application - Aplikacija + Application + Aplikacija - Finish editing - Završi uređivanje + Finish editing + Završi uređivanje - Finish editing object - Završi uređivanje objekta + Finish editing object + Završi uređivanje objekta - Activate document - Aktiviraj dokument + Activate document + Aktiviraj dokument - Activate document %1 - Aktiviraj dokument %1 + Activate document %1 + Aktiviraj dokument %1 - - + + Gui::View3DInventor - Export PDF - Izvoz PDF + Export PDF + Izvoz PDF - PDF file (*.pdf) - PDF datoteka (*.pdf) + PDF file (*.pdf) + PDF datoteka (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Odaberite '%1' radni stol + Select the '%1' workbench + Odaberite '%1' radni stol - - + + Position - Form - Obrazac + Form + Obrazac - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Uhvati Rešetku u + Grid Snap in + Uhvati Rešetku u - - + + QDockWidget - Tree view - Pogled hijerarhije + Tree view + Pogled hijerarhije - Property view - Pregled vlasništva + Property view + Pregled vlasništva - Selection view - Pregled selekcije + Selection view + Pregled selekcije - Report view - Pregled izvještaja + Report view + Pregled izvještaja - Task View - Pregled zadataka + Task View + Pregled zadataka - Combo View - Kombinirani pregled + Combo View + Kombinirani pregled - Toolbox - Traka s alatima + Toolbox + Traka s alatima - Python console - Python konzola + Python console + Python konzola - Display properties - Prikaz svojstava + Display properties + Prikaz svojstava - - + + QObject - General - Općenito + General + Općenito - Display - Prikaz + Display + Prikaz - Unknown filetype - Nepoznata vrsta datoteke + Unknown filetype + Nepoznata vrsta datoteke - Cannot open unknown filetype: %1 - Ne mogu otvoriti nepoznatu vrstu datoteke: %1 + Cannot open unknown filetype: %1 + Ne mogu otvoriti nepoznatu vrstu datoteke: %1 - Cannot save to unknown filetype: %1 - Ne mogu spremiti nepoznatu vrstu datoteke: %1 + Cannot save to unknown filetype: %1 + Ne mogu spremiti nepoznatu vrstu datoteke: %1 - Workbench failure - Workbench neuspjeh + Workbench failure + Workbench neuspjeh - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Nije moguće pokrenuti Qt Assistant (%1) + Unable to launch Qt Assistant (%1) + Nije moguće pokrenuti Qt Assistant (%1) - Exception - Iznimka + Exception + Iznimka - Open document - Otvori dokument + Open document + Otvori dokument - Import file - Uvoz datoteke + Import file + Uvoz datoteke - Export file - Izvoz datoteke + Export file + Izvoz datoteke - Printing... - Ispis ... + Printing... + Ispis ... - Cannot load workbench - Ne mogu učitati radni stol + Cannot load workbench + Ne mogu učitati radni stol - A general error occurred while loading the workbench - Došlo je do pogreške tijekom učitavanja radnog stola + A general error occurred while loading the workbench + Došlo je do pogreške tijekom učitavanja radnog stola - File not found - Datoteka nije pronađena + File not found + Datoteka nije pronađena - Cannot open file %1 - Ne mogu otvoriti datoteku %1 + Cannot open file %1 + Ne mogu otvoriti datoteku %1 - Save views... - Spremi poglede ... + Save views... + Spremi poglede ... - Load views... - Učitavanje pregleda ... + Load views... + Učitavanje pregleda ... - Freeze view - Zamrzni pogled + Freeze view + Zamrzni pogled - Clear views - Obriši poglede + Clear views + Obriši poglede - Restore view &%1 - Vrati pogled &%1 + Restore view &%1 + Vrati pogled &%1 - Save frozen views - Spremi smrznute poglede + Save frozen views + Spremi smrznute poglede - Frozen views (*.cam) - Smrznuti prikazi (*.cam) + Frozen views (*.cam) + Smrznuti prikazi (*.cam) - Restore views - Vraćanje pogleda + Restore views + Vraćanje pogleda - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Uvoz obnovljena pogleda bi obrisao već pohranjene poglede. Želite li nastaviti? + Uvoz obnovljena pogleda bi obrisao već pohranjene poglede. Želite li nastaviti? - Restore frozen views - Vraćanje smrznutih pogleda + Restore frozen views + Vraćanje smrznutih pogleda - Cannot open file '%1'. - Ne mogu otvoriti datoteku '%1'. + Cannot open file '%1'. + Ne mogu otvoriti datoteku '%1'. - Docked - Usidren + Docked + Usidren - Undocked - Odsidren + Undocked + Odsidren - Fullscreen - Preko cijelog ekrana + Fullscreen + Preko cijelog ekrana - files - datoteke + files + datoteke - Save picture - Spremi sliku + Save picture + Spremi sliku - New sub-group - Nova podgrupa + New sub-group + Nova podgrupa - Enter the name: - Unesite naziv: + Enter the name: + Unesite naziv: - New text item - Nova tekst jedinica + New text item + Nova tekst jedinica - Enter your text: - Unesite tekst: + Enter your text: + Unesite tekst: - New integer item - Nova integer jedinica + New integer item + Nova integer jedinica - Enter your number: - Unesite broj: + Enter your number: + Unesite broj: - New unsigned item - Nova unsigned jedinica + New unsigned item + Nova unsigned jedinica - New float item - Nova float jedinica + New float item + Nova float jedinica - New Boolean item - Nova Boolean jedinica + New Boolean item + Nova Boolean jedinica - Choose an item: - Izaberite jedinicu: + Choose an item: + Izaberite jedinicu: - Rename group - Preimenuj grupu + Rename group + Preimenuj grupu - The group '%1' cannot be renamed. - Grupa '%1' ne može biti preimenovana. + The group '%1' cannot be renamed. + Grupa '%1' ne može biti preimenovana. - Existing group - Postojeća grupa + Existing group + Postojeća grupa - The group '%1' already exists. - Grupa '%1' već postoji. + The group '%1' already exists. + Grupa '%1' već postoji. - Change value - Promjena vrijednosti + Change value + Promjena vrijednosti - Save document under new filename... - Spremi dokument pod novim imenom ... + Save document under new filename... + Spremi dokument pod novim imenom ... - Saving aborted - Spremanje prekinuto + Saving aborted + Spremanje prekinuto - Unsaved document - Nespremljeni dokument + Unsaved document + Nespremljeni dokument - Save document before close? - Spremi dokument prije zatvaranja? + Save document before close? + Spremi dokument prije zatvaranja? - Save Macro - Spremi Makro + Save Macro + Spremi Makro - Finish - Završiti + Finish + Završiti - Clear - Brisanje + Clear + Brisanje - Cancel - Otkazati + Cancel + Otkazati - Inner - Unutrašnji + Inner + Unutrašnji - Outer - Vanjski + Outer + Vanjski - No Browser - Nema preglednika + No Browser + Nema preglednika - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Nije moguće otvoriti pregledniku. Molimo vas da otvorite prozor preglednika i unesete: http://localhost:%1. + Nije moguće otvoriti pregledniku. Molimo vas da otvorite prozor preglednika i unesete: http://localhost:%1. - No Server - Nema Servera + No Server + Nema Servera - Unable to start the server to port %1: %2. - Nije moguće pokrenuti poslužitelja na portu %1: %2. + Unable to start the server to port %1: %2. + Nije moguće pokrenuti poslužitelja na portu %1: %2. - Unable to open your system browser. - Ne mogu otvoriti vaš preglednik sustava. + Unable to open your system browser. + Ne mogu otvoriti vaš preglednik sustava. - Options... - Opcije ... + Options... + Opcije ... - Out of memory - Bez memorije + Out of memory + Bez memorije - Not enough memory available to display the data. - Nema dovoljno dostupne memorije za prikaz podataka. + Not enough memory available to display the data. + Nema dovoljno dostupne memorije za prikaz podataka. - Cannot find file %1 - Ne mogu pronaći datoteku %1 + Cannot find file %1 + Ne mogu pronaći datoteku %1 - Cannot find file %1 neither in %2 nor in %3 - Ne mogu pronaći datoteku %1 niti u %2 niti u %3 + Cannot find file %1 neither in %2 nor in %3 + Ne mogu pronaći datoteku %1 niti u %2 niti u %3 - Save %1 Document - Spremi %1 dokument + Save %1 Document + Spremi %1 dokument - %1 document (*.FCStd) - %1 dokument (*.FCStd) + %1 document (*.FCStd) + %1 dokument (*.FCStd) - Save As - Spremi kao + Save As + Spremi kao - %1 already exists. + %1 already exists. Do you want to replace it? - %1 već postoji. Želite li ga zamijeniti? + %1 već postoji. Želite li ga zamijeniti? - Document not closable - Dokument nije moguće zatvoriti + Document not closable + Dokument nije moguće zatvoriti - The document is not closable for the moment. - Dokument trenutno nije moguće zatvoriti. + The document is not closable for the moment. + Dokument trenutno nije moguće zatvoriti. - No OpenGL - Nema OpenGL + No OpenGL + Nema OpenGL - This system does not support OpenGL - Ovaj sustav ne podržava OpenGL + This system does not support OpenGL + Ovaj sustav ne podržava OpenGL - Help - Pomoć + Help + Pomoć - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Nije moguće učitati dokument. + Nije moguće učitati dokument. Da bi se to omogućilo potreban je Qt verzije 4,4 ili više. - %1 Help - %1 Pomoć + %1 Help + %1 Pomoć - Exporting PDF... - Izvoz PDF ... + Exporting PDF... + Izvoz PDF ... - Wrong selection - Pogrešan odabir + Wrong selection + Pogrešan odabir - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Samo jedan objekt odabran. Odaberite dva objekta. + Samo jedan objekt odabran. Odaberite dva objekta. Pazite jer točke odabira utječu. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Odaberite dva objekta. + Odaberite dva objekta. Pazite jer točke odabira utječu. - New boolean item - Nova boolean jedinica + New boolean item + Nova boolean jedinica - Navigation styles - Načini navigacije + Navigation styles + Načini navigacije - %1 navigation - %1 navigacija + %1 navigation + %1 navigacija - Move annotation - Premjesti primjedbu + Move annotation + Premjesti primjedbu - Transform - Transformiraj + Transform + Transformiraj - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - Dokument je u načinu uređivanja pa se trenutno ne može zatvoriti. Trebate ili završiti uređivanje ili ga otkazati u ploči zadataka. + Dokument je u načinu uređivanja pa se trenutno ne može zatvoriti. Trebate ili završiti uređivanje ili ga otkazati u ploči zadataka. - - + + + StdBoxSelection + + Standard-View + Standardni pogled + + + Box selection + + + + StdCmdAbout - Help - Pomoć + Help + Pomoć - &About %1 - &O %1 + &About %1 + &O %1 - About %1 - O %1 + About %1 + O %1 - - + + StdCmdAboutQt - Help - Pomoć + Help + Pomoć - About &Qt - O &Qt + About &Qt + O &Qt - About Qt - O Qt + About Qt + O Qt - - + + StdCmdActivateNextWindow - Window - Prozor + Window + Prozor - Ne&xt - Slijede&ći + Ne&xt + Slijede&ći - Activate next window - Aktiviraj slijedeći prozor + Activate next window + Aktiviraj slijedeći prozor - - + + StdCmdActivatePrevWindow - Window - Prozor + Window + Prozor - Pre&vious - Pre&thodni + Pre&vious + Pre&thodni - Activate previous window - Aktiviraj prethodni prozor + Activate previous window + Aktiviraj prethodni prozor - - + + + StdCmdAlignment + + Edit + Uredi + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Prozor + Window + Prozor - Arrange &Icons - Rasporedi &ikone + Arrange &Icons + Rasporedi &ikone - Arrange Icons - Rasporedi ikone + Arrange Icons + Rasporedi ikone - - + + StdCmdAxisCross - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Toggle axis cross - Pokaži ishodište + Toggle axis cross + Pokaži ishodište - - + + StdCmdCascadeWindows - Window - Prozor + Window + Prozor - &Cascade - Na&slaži + &Cascade + Na&slaži - Tile pragmatic - Crijep pragmatičan + Tile pragmatic + Crijep pragmatičan - - + + StdCmdCloseActiveWindow - Window - Prozor + Window + Prozor - Cl&ose - Zatv&ori + Cl&ose + Zatv&ori - Close active window - Zatvori aktivni prozor + Close active window + Zatvori aktivni prozor - - + + StdCmdCloseAllWindows - Window - Prozor + Window + Prozor - Close Al&l - Zatvori Sv&e + Close Al&l + Zatvori Sv&e - Close all windows - Zatvori sve prozore + Close all windows + Zatvori sve prozore - - + + StdCmdCommandLine - Tools - Alati + Tools + Alati - Start command &line... - Pokreni komandnu &liniju ... + Start command &line... + Pokreni komandnu &liniju ... - Opens the command line in the console - Otvara komandnu liniju u konzoli + Opens the command line in the console + Otvara komandnu liniju u konzoli - - + + StdCmdCopy - Edit - Uredi + Edit + Uredi - C&opy - K&opiraj + C&opy + K&opiraj - Copy operation - Kopirati + Copy operation + Kopirati - - + + StdCmdCut - Edit - Uredi + Edit + Uredi - &Cut - &Izreži + &Cut + &Izreži - Cut out - Izrezati + Cut out + Izrezati - - + + StdCmdDDuplicateSelection - Edit - Uredi + Edit + Uredi - Duplicate selection - Udvostruči odabir + Duplicate selection + Udvostruči odabir - Put duplicates of the selected objects to the active document - Stavilja kopije odabranih objekata na aktivni dokument + Put duplicates of the selected objects to the active document + Stavilja kopije odabranih objekata na aktivni dokument - - + + StdCmdDelete - Edit - Uredi + Edit + Uredi - &Delete - &Izbriši + &Delete + &Izbriši - Deletes the selected objects - Briše odabrane objekte + Deletes the selected objects + Briše odabrane objekte - - + + StdCmdDemoMode - Standard-View - Standardni pogled + Standard-View + Standardni pogled - View turntable... - Prikaži okretnicu... + View turntable... + Prikaži okretnicu... - View turntable - Prikaži okretnicu + View turntable + Prikaži okretnicu - - + + StdCmdDlgCustomize - Tools - Alati + Tools + Alati - Cu&stomize... - Prilago&dba... + Cu&stomize... + Prilago&dba... - Customize toolbars and command bars - Prilagodba alatnih traka i traki s naredbama + Customize toolbars and command bars + Prilagodba alatnih traka i traki s naredbama - - + + StdCmdDlgMacroExecute - Macros ... - Makronaredbe ... + Macros ... + Makronaredbe ... - Opens a dialog to let you execute a recorded macro - Otvara dijalog kako bi Vam omogućio izvršavanje snimljenih makro naredbi + Opens a dialog to let you execute a recorded macro + Otvara dijalog kako bi Vam omogućio izvršavanje snimljenih makro naredbi - Macro - Makro + Macro + Makro - - + + StdCmdDlgMacroExecuteDirect - Macro - Makro + Macro + Makro - Execute macro - Izvrši makro + Execute macro + Izvrši makro - Execute the macro in the editor - Izvrši makro u editoru + Execute the macro in the editor + Izvrši makro u editoru - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Makro snimanje ... + &Macro recording ... + &Makro snimanje ... - Opens a dialog to record a macro - Otvara dijalog za snimanje makro naredbe + Opens a dialog to record a macro + Otvara dijalog za snimanje makro naredbe - Macro - Makro + Macro + Makro - - + + StdCmdDlgParameter - Tools - Alati + Tools + Alati - E&dit parameters ... - Ure&đivanje parametara ... + E&dit parameters ... + Ure&đivanje parametara ... - Opens a Dialog to edit the parameters - Otvara Dialog za uređivanje parametara + Opens a Dialog to edit the parameters + Otvara Dialog za uređivanje parametara - - + + StdCmdDlgPreferences - Tools - Alati + Tools + Alati - &Preferences ... - &Postavke ... + &Preferences ... + &Postavke ... - Opens a Dialog to edit the preferences - Otvara Dialog kako biste uredili postavke + Opens a Dialog to edit the preferences + Otvara Dialog kako biste uredili postavke - - + + StdCmdDockViewMenu - View - Pregled + View + Pregled - Vie&ws - Pogl&edi + Vie&ws + Pogl&edi - Toggles this window - Uključuje ovaj prozor + Toggles this window + Uključuje ovaj prozor - - + + StdCmdDrawStyle - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Uredi + + + Duplicate selection + Udvostruči odabir + + + Put duplicates of the selected objects to the active document + Stavilja kopije odabranih objekata na aktivni dokument + + + + StdCmdEdit + + Edit + Uredi + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Datoteka + File + Datoteka - &Export... - Iz&voz... + &Export... + Iz&voz... - Export an object in the active document - Izvoz objekta u aktivni dokument + Export an object in the active document + Izvoz objekta u aktivni dokument - Supported formats - Podržani formati + Supported formats + Podržani formati - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Alati + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Datoteka + File + Datoteka - &Recompute - &Ponovno proračunavanje + &Recompute + &Ponovno proračunavanje - Recompute feature or document - Ponovno proračunaj značajku ili dokument + Recompute feature or document + Ponovno proračunaj značajku ili dokument - - + + StdCmdFreeCADWebsite - Help - Pomoć + Help + Pomoć - FreeCAD Website - FreeCAD Web stranica + FreeCAD Website + FreeCAD Web stranica - The FreeCAD website - FreeCAD web stranica + The FreeCAD website + FreeCAD web stranica - - + + StdCmdFreezeViews - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Freeze display - Zamrzni prikaz + Freeze display + Zamrzni prikaz - Freezes the current view position - Zamrznii trenutni prikaz položaja + Freezes the current view position + Zamrznii trenutni prikaz položaja - - + + StdCmdHideObjects - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Hide all objects - Sakrij sve objekte + Hide all objects + Sakrij sve objekte - Hide all objects in the document - Sakrij sve objekte u dokument + Hide all objects in the document + Sakrij sve objekte u dokument - - + + StdCmdHideSelection - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Hide selection - Sakrij odabir + Hide selection + Sakrij odabir - Hide all selected objects - Sakrij sve odabrane objekte + Hide all selected objects + Sakrij sve odabrane objekte - - + + StdCmdImport - File - Datoteka + File + Datoteka - &Import... - &Uvoz... + &Import... + &Uvoz... - Import a file in the active document - Uvoz datoteke u aktivnom dokumentu + Import a file in the active document + Uvoz datoteke u aktivnom dokumentu - Supported formats - Podržani formati + Supported formats + Podržani formati - All files (*.*) - Sve datoteke (*.*) + All files (*.*) + Sve datoteke (*.*) - - + + StdCmdMacroStartDebug - Macro - Makro + Macro + Makro - Debug macro - Ispravljanje pogrešaka na makro naredbi + Debug macro + Ispravljanje pogrešaka na makro naredbi - Start debugging of macro - Pokreni ispravljanje pogrešaka na makro naredbi + Start debugging of macro + Pokreni ispravljanje pogrešaka na makro naredbi - - + + StdCmdMacroStepOver - Macro - Makro + Macro + Makro - Step over - Korak preko + Step over + Korak preko - - + + StdCmdMacroStopDebug - Macro - Makro + Macro + Makro - Stop debugging - Zaustavi provjeru pogrešaka + Stop debugging + Zaustavi provjeru pogrešaka - Stop debugging of macro - Zaustavi provjeru pogrešaka na makro naredbi + Stop debugging of macro + Zaustavi provjeru pogrešaka na makro naredbi - - + + StdCmdMacroStopRecord - Macro - Makro + Macro + Makro - S&top macro recording - Zaus&tavljanje snimanja makro naredbe + S&top macro recording + Zaus&tavljanje snimanja makro naredbe - Stop the macro recording session - Zaustavljanje snimanja makro naredbe + Stop the macro recording session + Zaustavljanje snimanja makro naredbe - - + + StdCmdMeasureDistance - View - Pregled + View + Pregled - Measure distance - Mjerenje udaljenosti + Measure distance + Mjerenje udaljenosti - - + + StdCmdMeasurementSimple - Tools - Alati + Tools + Alati - Mesure distance - Izmjeri udaljenost + Mesure distance + Izmjeri udaljenost - Measures distance between two selected objects - Mjeri udaljenost između dvaju odabranih objekata + Measures distance between two selected objects + Mjeri udaljenost između dvaju odabranih objekata - - + + Measure distance + Mjerenje udaljenosti + + + StdCmdMergeProjects - File - Datoteka + File + Datoteka - Merge project... - Spoji projekt ... + Merge project... + Spoji projekt ... - Merge project - Spoji projekt + Merge project + Spoji projekt - %1 document (*.fcstd) - %1 dokument (*.fcstd) + %1 document (*.fcstd) + %1 dokument (*.fcstd) - Cannot merge project with itself. - Ne mogu spojiti projekt sa samim sobom. + Cannot merge project with itself. + Ne mogu spojiti projekt sa samim sobom. - - + + StdCmdNew - File - Datoteka + File + Datoteka - &New - &Novi + &New + &Novi - Create a new empty document - Kreira novi prazni dokument + Create a new empty document + Kreira novi prazni dokument - - + + StdCmdOnlineHelp - Help - Pomoć + Help + Pomoć - Show help to the application - Pokaži pomoć za primjenu + Show help to the application + Pokaži pomoć za primjenu - - + + StdCmdOnlineHelpPython - Help - Pomoć + Help + Pomoć - Python Manuals - Python priručnici + Python Manuals + Python priručnici - Show the Python documentation - Pokaži Python dokumentaciju + Show the Python documentation + Pokaži Python dokumentaciju - - + + StdCmdOnlineHelpWebsite - Help - Pomoć + Help + Pomoć - Help Website - Pomoć Web stranica + Help Website + Pomoć Web stranica - The website where the help is maintained - Web stranica gdje se održava pomoć + The website where the help is maintained + Web stranica gdje se održava pomoć - - + + StdCmdOpen - File - Datoteka + File + Datoteka - &Open... - &Otvori... + &Open... + &Otvori... - Open a document or import files - Otvorite dokument ili uvoz datoteke + Open a document or import files + Otvorite dokument ili uvoz datoteke - Supported formats - Podržani formati + Supported formats + Podržani formati - All files (*.*) - Sve datoteke (*.*) + All files (*.*) + Sve datoteke (*.*) - - + + StdCmdPaste - Edit - Uredi + Edit + Uredi - &Paste - &Zalijepi + &Paste + &Zalijepi - Paste operation - Zalijepi + Paste operation + Zalijepi - - + + StdCmdPlacement - Edit - Uredi + Edit + Uredi - Placement... - Postavljanje... + Placement... + Postavljanje... - Place the selected objects - Postavlja odabrane objekte + Place the selected objects + Postavlja odabrane objekte - - + + StdCmdPrint - File - Datoteka + File + Datoteka - &Print... - Is&pis ... + &Print... + Is&pis ... - Print the document - Ispis dokumenta + Print the document + Ispis dokumenta - - + + StdCmdPrintPdf - File - Datoteka + File + Datoteka - &Export PDF... - PDF I&zvoz... + &Export PDF... + PDF I&zvoz... - Export the document as PDF - Izvoz kao PDF dokument + Export the document as PDF + Izvoz kao PDF dokument - - + + StdCmdPrintPreview - File - Datoteka + File + Datoteka - &Print preview... - &Pregled ispisa ... + &Print preview... + &Pregled ispisa ... - Print the document - Ispis dokumenta + Print the document + Ispis dokumenta - Print preview - Pregled ispisa + Print preview + Pregled ispisa - - + + StdCmdProjectInfo - File - Datoteka + File + Datoteka - Project i&nformation... - I&nformacije o projektu ... + Project i&nformation... + I&nformacije o projektu ... - Show details of the currently active project - Pokaži detalje o trenutno aktivnom projektu + Show details of the currently active project + Pokaži detalje o trenutno aktivnom projektu - - + + StdCmdProjectUtil - Tools - Alati + Tools + Alati - Project utility... - Korisne opcije projekta... + Project utility... + Korisne opcije projekta... - Utility to extract or create project files - Pomoć prilikom dohvata ili stvaranja projektnih datoteka + Utility to extract or create project files + Pomoć prilikom dohvata ili stvaranja projektnih datoteka - - + + StdCmdPythonWebsite - Help - Pomoć + Help + Pomoć - Python Website - Python Web stranica + Python Website + Python Web stranica - The official Python website - Službena web stranica Python + The official Python website + Službena web stranica Python - - + + StdCmdQuit - File - Datoteka + File + Datoteka - E&xit - Iz&laz + E&xit + Iz&laz - Quits the application - Zatvara aplikaciju + Quits the application + Zatvara aplikaciju - - + + StdCmdRandomColor - File - Datoteka + File + Datoteka - Random color - Random boja + Random color + Random boja - - + + StdCmdRecentFiles - File - Datoteka + File + Datoteka - Recent files - Nedavne datoteke + Recent files + Nedavne datoteke - Recent file list - Popis nedavnih datoteka + Recent file list + Popis nedavnih datoteka - - + + StdCmdRedo - Edit - Uredi + Edit + Uredi - &Redo - &Ponovi + &Redo + &Ponovi - Redoes a previously undone action - Vraća prethodno poništenog akciju + Redoes a previously undone action + Vraća prethodno poništenog akciju - - + + StdCmdRefresh - Edit - Uredi + Edit + Uredi - &Refresh - &Osvježi + &Refresh + &Osvježi - Recomputes the current active document - Ponovno proračunava trenutni aktivni dokument + Recomputes the current active document + Ponovno proračunava trenutni aktivni dokument - - + + StdCmdSave - File - Datoteka + File + Datoteka - &Save - &Spremi + &Save + &Spremi - Save the active document - Spremi aktivni dokument + Save the active document + Spremi aktivni dokument - - + + StdCmdSaveAs - File - Datoteka + File + Datoteka - Save &As... - Spremi k&ao... + Save &As... + Spremi k&ao... - Save the active document under a new file name - Spremi aktivni dokument pod novim imenom + Save the active document under a new file name + Spremi aktivni dokument pod novim imenom - - + + StdCmdSceneInspector - Tools - Alati + Tools + Alati - Scene inspector... - Pregled scene... + Scene inspector... + Pregled scene... - Scene inspector - Pregled scene + Scene inspector + Pregled scene - - + + StdCmdSelectAll - Edit - Uredi + Edit + Uredi - Select &All - Ozn&ači sve + Select &All + Ozn&ači sve - Select all - Označi sve + Select all + Označi sve - - + + StdCmdSetAppearance - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Appearance... - Izgled... + Appearance... + Izgled... - Sets the display properties of the selected object - Postavlja prikaz svojstava odabranog objekta + Sets the display properties of the selected object + Postavlja prikaz svojstava odabranog objekta - - + + StdCmdShowObjects - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Show all objects - Prikaži sve objekte + Show all objects + Prikaži sve objekte - Show all objects in the document - Prikazuje sve objekte u dokument + Show all objects in the document + Prikazuje sve objekte u dokument - - + + StdCmdShowSelection - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Show selection - Prikaži izbor + Show selection + Prikaži izbor - Show all selected objects - Prikazuje sve odabrane objekte + Show all selected objects + Prikazuje sve odabrane objekte - - + + StdCmdStatusBar - View - Pregled + View + Pregled - Status bar - Statusna traka + Status bar + Statusna traka - Toggles the status bar - Uključuje/isključuje statusnu traku + Toggles the status bar + Uključuje/isključuje statusnu traku - - + + StdCmdTextureMapping - Tools - Alati + Tools + Alati - Texture mapping... - Mapiranje tekstura ... + Texture mapping... + Mapiranje tekstura ... - Texture mapping - Mapiranje tekstura + Texture mapping + Mapiranje tekstura - - + + StdCmdTileWindows - Window - Prozor + Window + Prozor - &Tile - &Naslov + &Tile + &Naslov - Tile the windows - Tile Windows + Tile the windows + Tile Windows - - + + StdCmdToggleBreakpoint - Macro - Makro + Macro + Makro - Toggle breakpoint - Uključi/isključi prijelomnu točku + Toggle breakpoint + Uključi/isključi prijelomnu točku - - + + StdCmdToggleClipPlane - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Clipping plane - ravni isječak + Clipping plane + ravni isječak - Toggles clipping plane for active view - Uključuje ravni isječak za aktivan prikaz + Toggles clipping plane for active view + Uključuje ravni isječak za aktivan prikaz - - + + StdCmdToggleNavigation - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Toggle navigation/Edit mode - Toggle navigacija / Edit modu + Toggle navigation/Edit mode + Toggle navigacija / Edit modu - Toggle between navigation and edit mode - Šetanje između navigacije i način za uređivanje + Toggle between navigation and edit mode + Šetanje između navigacije i način za uređivanje - - + + StdCmdToggleObjects - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Toggle all objects - Uključi / isključi sve objekte + Toggle all objects + Uključi / isključi sve objekte - Toggles visibility of all objects in the active document - Uključuje/isključuje vidljivost svih objekata u aktivnom dokumentu + Toggles visibility of all objects in the active document + Uključuje/isključuje vidljivost svih objekata u aktivnom dokumentu - - + + StdCmdToggleSelectability - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Toggle selectability - Uključi/isključi mogućnost odabira + Toggle selectability + Uključi/isključi mogućnost odabira - Toggles the property of the objects to get selected in the 3D-View - Uključiuje/isključuje mogućnost odabira objekta u 3D prikazu + Toggles the property of the objects to get selected in the 3D-View + Uključiuje/isključuje mogućnost odabira objekta u 3D prikazu - - + + StdCmdToggleVisibility - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Toggle visibility - Promjeni vidljivost + Toggle visibility + Promjeni vidljivost - Toggles visibility - Uključuje/isključuje vidljivost + Toggles visibility + Uključuje/isključuje vidljivost - - + + StdCmdToolBarMenu - View - Pregled + View + Pregled - Tool&bars - Alatne tra&ke + Tool&bars + Alatne tra&ke - Toggles this window - Uključuje ovaj prozor + Toggles this window + Uključuje ovaj prozor - - + + StdCmdTransform - Edit - Uredi + Edit + Uredi - Transform... - Transformacija ... + Transform... + Transformacija ... - Transform the geometry of selected objects - Preobraziti geometriju odabranih objekata + Transform the geometry of selected objects + Preobraziti geometriju odabranih objekata - - + + StdCmdTreeSelection - View - Pregled + View + Pregled - Go to selection - Idi na odabrane objekte + Go to selection + Idi na odabrane objekte - Scroll to first selected item - Dođite na prvu odabranu stavku + Scroll to first selected item + Dođite na prvu odabranu stavku - - + + StdCmdUndo - Edit - Uredi + Edit + Uredi - &Undo - Poni&šti + &Undo + Poni&šti - Undo exactly one action - Poništi točno jednu radnju + Undo exactly one action + Poništi točno jednu radnju - - + + StdCmdUserInterface - View - Pregled + View + Pregled - Dock views - Usidri poglede + Dock views + Usidri poglede - Dock all top-level views - Usidri sve poglede najviše razine + Dock all top-level views + Usidri sve poglede najviše razine - - + + StdCmdViewAxo - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Axometric - Axometric + Axometric + Axometric - Set to axometric view - Postavite axometric prikaz + Set to axometric view + Postavite axometric prikaz - - + + StdCmdViewBottom - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Bottom - Ispod + Bottom + Ispod - Set to bottom view - Postavite pogled od dolje + Set to bottom view + Postavite pogled od dolje - - + + StdCmdViewCreate - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Create new view - Napravi novi pogled + Create new view + Napravi novi pogled - Creates a new view window for the active document - Stvara novi prikaz prozora za aktivni dokument + Creates a new view window for the active document + Stvara novi prikaz prozora za aktivni dokument - - + + StdCmdViewExample1 - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Inventor example #1 - Inventor primjer #1 + Inventor example #1 + Inventor primjer #1 - Shows a 3D texture with manipulator - Pokazuje 3D teksturu sa manipulatorom + Shows a 3D texture with manipulator + Pokazuje 3D teksturu sa manipulatorom - - + + StdCmdViewExample2 - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Inventor example #2 - Inventor primjer #2 + Inventor example #2 + Inventor primjer #2 - Shows spheres and drag-lights - Pokazuje sferu i pomicanje svjetla + Shows spheres and drag-lights + Pokazuje sferu i pomicanje svjetla - - + + StdCmdViewExample3 - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Inventor example #3 - Inventor primjer #3 + Inventor example #3 + Inventor primjer #3 - Shows a animated texture - Pokazuje animirane teksture + Shows a animated texture + Pokazuje animirane teksture - - + + StdCmdViewFitAll - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Fit all - Prikaži sve + Fit all + Prikaži sve - Fits the whole content on the screen - Prikazuje sav sadržaj na zaslonu + Fits the whole content on the screen + Prikazuje sav sadržaj na zaslonu - - + + StdCmdViewFitSelection - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Fit selection - Prikaži odabir + Fit selection + Prikaži odabir - Fits the selected content on the screen - Prikazuje odabrani sadržaj na zaslonu + Fits the selected content on the screen + Prikazuje odabrani sadržaj na zaslonu - - + + StdCmdViewFront - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Front - Ispred + Front + Ispred - Set to front view - Postavlja pogled od gore + Set to front view + Postavlja pogled od gore - - + + StdCmdViewIvIssueCamPos - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Issue camera position - Upit za položaj kamere + Issue camera position + Upit za položaj kamere - Issue the camera position to the console and to a macro, to easily recall this position - Sprema poziciju kamere na konzolu i makro, radi lakšeg vraćanja na ovaj pogled + Issue the camera position to the console and to a macro, to easily recall this position + Sprema poziciju kamere na konzolu i makro, radi lakšeg vraćanja na ovaj pogled - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Stereo Interleaved Columns - Stereo Interleaved Kolumne + Stereo Interleaved Columns + Stereo Interleaved Kolumne - Switch stereo viewing to Interleaved Columns - Prebaci stereo gledanje na Interleaved stupce + Switch stereo viewing to Interleaved Columns + Prebaci stereo gledanje na Interleaved stupce - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Stereo Interleaved Rows - Stereo Interleaved redak + Stereo Interleaved Rows + Stereo Interleaved redak - Switch stereo viewing to Interleaved Rows - Prebaci stereo gledanje na retke Interleaved + Switch stereo viewing to Interleaved Rows + Prebaci stereo gledanje na retke Interleaved - - + + StdCmdViewIvStereoOff - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Stereo Off - Stereo Off + Stereo Off + Stereo Off - Switch stereo viewing off - Prebacite stereo gledanje off + Switch stereo viewing off + Prebacite stereo gledanje off - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Stereo quad buffer - Stereo quad tampon + Stereo quad buffer + Stereo quad tampon - Switch stereo viewing to quad buffer - Prebaci stereo gledanje na quad tampon + Switch stereo viewing to quad buffer + Prebaci stereo gledanje na quad tampon - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Stereo red/green - Stereo crveno / zeleno + Stereo red/green + Stereo crveno / zeleno - Switch stereo viewing to red/green - Prebaci stereo gledanje u crveno / zeleno + Switch stereo viewing to red/green + Prebaci stereo gledanje u crveno / zeleno - - + + StdCmdViewLeft - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Left - Lijevo + Left + Lijevo - Set to left view - Postavlja pogled s lijeve strane + Set to left view + Postavlja pogled s lijeve strane - - + + StdCmdViewRear - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Rear - Iza + Rear + Iza - Set to rear view - Postavlja pogled sa stražnje strane + Set to rear view + Postavlja pogled sa stražnje strane - - + + StdCmdViewRight - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Right - Desno + Right + Desno - Set to right view - Postavlja pogled sa desne strane + Set to right view + Postavlja pogled sa desne strane - - + + + StdCmdViewRotateLeft + + Standard-View + Standardni pogled + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standardni pogled + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Top - Gore + Top + Gore - Set to top view - Postavlja pogled sa gornje strane + Set to top view + Postavlja pogled sa gornje strane - - + + StdCmdWhatsThis - Help - Pomoć + Help + Pomoć - &What's This? - &Što je ovo? + &What's This? + &Što je ovo? - What's This - Što je ovo + What's This + Što je ovo - - + + StdCmdWindows - Window - Prozor + Window + Prozor - &Windows... - &Prozori ... + &Windows... + &Prozori ... - Windows list - Popis prozora + Windows list + Popis prozora - - + + StdCmdWindowsMenu - Window - Prozor + Window + Prozor - Activates this window - Aktivira ovaj prozor + Activates this window + Aktivira ovaj prozor - - + + StdCmdWorkbench - View - Pregled + View + Pregled - Workbench - Workbench + Workbench + Workbench - Switch between workbenches - Prebacivanje između workbenches + Switch between workbenches + Prebacivanje između workbenches - - + + StdOrthographicCamera - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Orthographic view - Ortografski pogled + Orthographic view + Ortografski pogled - Switches to orthographic view mode - Postavlja ortografski način pregleda + Switches to orthographic view mode + Postavlja ortografski način pregleda - - + + StdPerspectiveCamera - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Perspective view - Perspektivni pogled + Perspective view + Perspektivni pogled - Switches to perspective view mode - Prebacuje u perspektivan način pregleda + Switches to perspective view mode + Prebacuje u perspektivan način pregleda - - + + StdViewBoxZoom - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Box zoom - Zumiranje u okvir + Box zoom + Zumiranje u okvir - - + + StdViewDockUndockFullscreen - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Document window - Dokument prozor + Document window + Dokument prozor - Display the active view either in fullscreen, in undocked or docked mode - Prikaz aktivnog pogleda preko cijelog zaslona, u plutajućem ili usidrenom načinu + Display the active view either in fullscreen, in undocked or docked mode + Prikaz aktivnog pogleda preko cijelog zaslona, u plutajućem ili usidrenom načinu - - + + StdViewScreenShot - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Save picture... - Spremi sliku... + Save picture... + Spremi sliku... - Creates a screenshot of the active view - Stvara sliku aktivnog pogleda + Creates a screenshot of the active view + Stvara sliku aktivnog pogleda - - + + StdViewZoomIn - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Zoom In - Zumirati unutra + Zoom In + Zumirati unutra - - + + StdViewZoomOut - Standard-View - Standardni pogled + Standard-View + Standardni pogled - Zoom Out - Zumirati van + Zoom Out + Zumirati van - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Datoteka + &File + &Datoteka - &Edit - &Uredi + &Edit + &Uredi - Standard views - Standardni pogledi + Standard views + Standardni pogledi - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Zumiraj + &Zoom + &Zumiraj - Visibility - Vidljivost + Visibility + Vidljivost - &View - &Pogled + &View + &Pogled - &Tools - &Alati + &Tools + &Alati - &Macro - &Makro + &Macro + &Makro - &Windows - &Prozori + &Windows + &Prozori - &On-line help - &On-line pomoć + &On-line help + &On-line pomoć - &Help - &Pomoć + &Help + &Pomoć - File - Datoteka + File + Datoteka - Macro - Makro + Macro + Makro - View - Pregled + View + Pregled - Special Ops - Specijalne radnje + Special Ops + Specijalne radnje - - + + testClass - test - test + test + test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> <span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"> <span style=" font-size:12pt;">Kreirano za Qt 4.3.x</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"> www.ii-system.com </p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> <span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"> <span style=" font-size:12pt;">Kreirano za Qt 4.3.x</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"> www.ii-system.com </p></body></html> - Choose the style of the Task Panel - Odaberite stil Radne ploče + Choose the style of the Task Panel + Odaberite stil Radne ploče - Default - Inicijalno + Default + Inicijalno - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_hu.ts b/src/Gui/Language/FreeCAD_hu.ts index 74d0db3b5..11a94b222 100644 --- a/src/Gui/Language/FreeCAD_hu.ts +++ b/src/Gui/Language/FreeCAD_hu.ts @@ -1,5489 +1,5907 @@ - - + + Angle - Form - Űrlap + Form + Űrlap - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Szögtartás + Angle Snap + Szögtartás - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - egyik sem + none + egyik sem - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Hozzáad + + + Remove + Törlés + + + Move up + Mozgatás felfelé + + + Move down + Mozgatás lefelé + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Nyomja meg a bal egérgombot + Press left mouse button + Nyomja meg a bal egérgombot - Press SHIFT and middle mouse button - Nyomja le a SHIFT BILLENTYŰT, és a középső egérgomb + Press SHIFT and middle mouse button + Nyomja le a SHIFT BILLENTYŰT, és a középső egérgomb - Press middle mouse button - Nyomja meg a középső egérgombot + Press middle mouse button + Nyomja meg a középső egérgombot - Scroll middle mouse button - Görgesse a középső egérgombot + Scroll middle mouse button + Görgesse a középső egérgombot - - + + Gui::CADNavigationStyle - Press left mouse button - Nyomja meg a bal egérgombot + Press left mouse button + Nyomja meg a bal egérgombot - Press middle mouse button - Nyomja meg a középső egérgombot + Press middle mouse button + Nyomja meg a középső egérgombot - Press left and middle mouse button - Nyomja meg a bal és a középső egérgombot + Press left and middle mouse button + Nyomja meg a bal és a középső egérgombot - Scroll middle mouse button - Görgesse a középső egérgombot + Scroll middle mouse button + Görgesse a középső egérgombot - - + + Gui::Command - Standard - Szabvány + Standard + Szabvány - - + + Gui::ContainerDialog - &OK - OK + &OK + OK - &Cancel - Mégse + &Cancel + Mégse - - + + Gui::ControlSingleton - Task panel - Feladat panel + Task panel + Feladat panel - - + + Gui::Dialog::AboutApplication - About - Névjegy + About + Névjegy - Revision number - Felülvizsgálati szám + Revision number + Felülvizsgálati szám - Version - Verzió + Version + Verzió - OK - OK + OK + OK - - Program infó + + Program infó - Release date - Megjelenés éve + Release date + Megjelenés éve - Platform - Platform + Platform + Platform - License... - Licenc... + License... + Licenc... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Gomb % 1 + Button %1 + Gomb % 1 - Out Of Range - Tartományon kívüli + Out Of Range + Tartományon kívüli - - + + Gui::Dialog::CommandModel - Commands - Parancsok + Commands + Parancsok - - + + Gui::Dialog::DemoMode - View Turntable - Forgó asztal nézet + View Turntable + Forgó asztal nézet - Speed - Sebesség + Speed + Sebesség - Maximum - Maximális + Maximum + Maximális - Minimum - Minimális + Minimum + Minimális - Fullscreen - Teljes képernyős + Fullscreen + Teljes képernyős - Enable timer - Időzítő engedélezése + Enable timer + Időzítő engedélezése - s - s + s + s - Angle - Szög + Angle + Szög + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Lejátszás - -90° - -90° + Stop + Megállít - Play - Lejátszás + Close + Bezárás - - Stop - Megállít - - - Close - Bezárás - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Válasszon ablakot + Choose Window + Válasszon ablakot - &Activate - &Aktiválás + &Activate + &Aktiválás - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - Mégse + &Cancel + Mégse - - Program infó + + Program infó - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Ablak + Windows + Ablak - - + + Gui::Dialog::DlgAuthorization - Authorization - Azonosítás + Authorization + Azonosítás - &OK - OK + &OK + OK - &Cancel - Mégse + &Cancel + Mégse - Password: - Jelszó: + Password: + Jelszó: - User name: - Felhasználói név: + User name: + Felhasználói név: - - Program infó + + Program infó - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Válassz ikont + Choose Icon + Válassz ikont - OK - OK + OK + OK - Cancel - Mégse + Cancel + Mégse - Add icons... - Ikon hozzáadása... + Add icons... + Ikon hozzáadása... - - + + Gui::Dialog::DlgCustomActions - Macros - Makrók + Macros + Makrók - Setup Custom Macros - Egyedi makrók beállítása + Setup Custom Macros + Egyedi makrók beállítása - Macro: - Makró: + Macro: + Makró: - ... - ... + ... + ... - Pixmap - Pixkép + Pixmap + Pixkép - Accelerator: - Gyorsító: + Accelerator: + Gyorsító: - What's this: - Mi ez: + What's this: + Mi ez: - Status text: - Állapot szöveg: + Status text: + Állapot szöveg: - Tool tip: - Eszközleírás: + Tool tip: + Eszközleírás: - Menu text: - Menü szöveg: + Menu text: + Menü szöveg: - Add - Hozzáad + Add + Hozzáad - Remove - Törlés + Remove + Törlés - Replace - Módosít + Replace + Módosít - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ikonok + Icons + Ikonok - Macros - Makrók + Macros + Makrók - No macro - Nincs makró + No macro + Nincs makró - No macros found. - Nem találhatók makrók. + No macros found. + Nem találhatók makrók. - Macro not found - Makró nem található + Macro not found + Makró nem található - Sorry, couldn't find macro file '%1'. - Sajnáljuk, nem található makró file '%1'. + Sorry, couldn't find macro file '%1'. + Sajnáljuk, nem található makró file '%1'. - Empty macro - Üres makró + Empty macro + Üres makró - Please specify the macro first. - Először adjon meg makrót. + Please specify the macro first. + Először adjon meg makrót. - Empty text - Üres szöveg + Empty text + Üres szöveg - Please specify the menu text first. - Először adjon meg menü szöveget. + Please specify the menu text first. + Először adjon meg menü szöveget. - No item selected - Nincs elem kiválasztva + No item selected + Nincs elem kiválasztva - Please select a macro item first. - Kérem előbb adjon meg makró elemet. + Please select a macro item first. + Kérem előbb adjon meg makró elemet. - - + + Gui::Dialog::DlgCustomCommands - Commands - Parancsok + Commands + Parancsok - - Program infó + + Program infó - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategória + Category + Kategória - Icon - Ikon + Icon + Ikon - Command - Parancs + Command + Parancs - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Billentyűzet + Keyboard + Billentyűzet - Description: - Leírás: + Description: + Leírás: - &Category: - &Csoportosítás: + &Category: + &Csoportosítás: - C&ommands: - Parancs&ok: + C&ommands: + Parancs&ok: - Current shortcut: - Meglévő útvonal: + Current shortcut: + Meglévő útvonal: - Press &new shortcut: - Nyomja le új elérési úthoz: + Press &new shortcut: + Nyomja le új elérési úthoz: - Currently assigned to: - Aktuális hozzárendelés: + Currently assigned to: + Aktuális hozzárendelés: - &Assign - Hozzárendelés + &Assign + Hozzárendelés - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - Visszaállít + &Reset + Visszaállít - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Mind visszaállít + Re&set All + Mind visszaállít - Alt+S - Alt+S + Alt+S + Alt+S - - Program infó + + Program infó - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ikon + Icon + Ikon - Command - Parancs + Command + Parancs - none - egyik sem + none + egyik sem - Multiple defined shortcut - Többszörösen definiált elérési út + Multiple defined shortcut + Többszörösen definiált elérési út - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Az '%1' elérési út többszőr lett definiálva. Ez nem megfelelő működéshez vezethet. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Az '%1' elérési út többszőr lett definiálva. Ez nem megfelelő működéshez vezethet. - Already defined shortcut - Már definiált elérési út + Already defined shortcut + Már definiált elérési út - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - A '%1' elérési út már a '%2' hoz rendelve. + A '%1' elérési út már a '%2' hoz rendelve. Kérem másik elérési utat definiálni. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Eszköztár ablakok + Toolbox bars + Eszköztár ablakok - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Eszköztárak + Toolbars + Eszköztárak - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> A változások következő alkalommal válnak aktívvá, amikor betölti a megfelelő munkafelületet </p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> A változások következő alkalommal válnak aktívvá, amikor betölti a megfelelő munkafelületet </p></body></html> - Move right - Mozgatás jobbra + Move right + Mozgatás jobbra - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> - Move left - Mozgatás balra + Move left + Mozgatás balra - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> - Move down - Mozgatás lefelé + Move down + Mozgatás lefelé - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> - Move up - Mozgatás felfelé + Move up + Mozgatás felfelé - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> - New... - Új... + New... + Új... - Rename... - Átnevezés... + Rename... + Átnevezés... - Delete - Törlés + Delete + Törlés - Icon - Ikon + Icon + Ikon - Command - Parancs + Command + Parancs - <Separator> - <Szóköz> + <Separator> + <Szóköz> - New toolbar - Új eszköztár + New toolbar + Új eszköztár - Toolbar name: - Eszköztár neve: + Toolbar name: + Eszköztár neve: - Duplicated name - Ismételt név + Duplicated name + Ismételt név - The toolbar name '%1' is already used - Az '%1' eszköztár név már használatban + The toolbar name '%1' is already used + Az '%1' eszköztár név már használatban - Rename toolbar - Eszköztár átnevezése + Rename toolbar + Eszköztár átnevezése - - Program infó + + Program infó - - + + Gui::Dialog::DlgCustomizeImp - Customize - Testreszabás + Customize + Testreszabás - &Help - &Súgó + &Help + &Súgó - &Close - Be&zárás + &Close + Be&zárás - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Gombok + Buttons + Gombok - Clear - Törlés + Clear + Törlés - Print Reference - Nyomtatási hivatkozás + Print Reference + Nyomtatási hivatkozás - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Tulajdonságok megjelenítése + Display properties + Tulajdonságok megjelenítése - Display - Megjelenítés + Display + Megjelenítés - Transparency: - Átlátszóság: + Transparency: + Átlátszóság: - Line width: - Vonalstílus: + Line width: + Vonalstílus: - Point size: - Méret: + Point size: + Méret: - Material - Anyag + Material + Anyag - ... - ... + ... + ... - Close - Bezárás + Close + Bezárás - Viewing mode - Nézet + Viewing mode + Nézet - Display mode: - Megjelenítési mód: + Display mode: + Megjelenítési mód: - Plot mode: - Nyomtatási mód: + Plot mode: + Nyomtatási mód: - - Program infó + + Program infó - Line transparency: - Vonal átláthatóság: + Line transparency: + Vonal átláthatóság: - Line color: - Vonal színe: + Line color: + Vonal színe: - Shape color: - Alakzat színe: + Shape color: + Alakzat színe: - Color plot: - Színes nyomtatás: + Color plot: + Színes nyomtatás: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Szerkesztő + Editor + Szerkesztő - Options - Beállítások + Options + Beállítások - Enable line numbers - Sorszámozás bekapcsolása + Enable line numbers + Sorszámozás bekapcsolása - Enable folding - Hajlítás bekapcsolása + Enable folding + Hajlítás bekapcsolása - Indentation - Azonosítás + Indentation + Azonosítás - Insert spaces - Szóközök beszúrása + Insert spaces + Szóközök beszúrása - Tab size: - Tabulátorméret: + Tab size: + Tabulátorméret: - Indent size: - Azonosítási méret: + Indent size: + Azonosítási méret: - Keep tabs - Tabulátorok megtartása + Keep tabs + Tabulátorok megtartása - Display Items - Részletek megtekintése + Display Items + Részletek megtekintése - Family: - Szülő: + Family: + Szülő: - Size: - Méret: + Size: + Méret: - Preview: - Előnézet: + Preview: + Előnézet: - - Program infó + + Program infó - - + + Gui::Dialog::DlgGeneral - General - Általános + General + Általános - Start up - Kezdő oldal + Start up + Kezdő oldal - Enable splash screen at start up - Felugró ablak bekapcsolása a kezdő oldalon + Enable splash screen at start up + Felugró ablak bekapcsolása a kezdő oldalon - Switch to tab of report window: - Váltás a jelentés ablakra: + Switch to tab of report window: + Váltás a jelentés ablakra: - Auto load module after start up: - Modul automatikus betöltése indulás után: + Auto load module after start up: + Modul automatikus betöltése indulás után: - Language - Nyelv + Language + Nyelv - Change language: - Nyelvválasztás: + Change language: + Nyelvválasztás: - Main window - Főablak + Main window + Főablak - Size of recent file list - Utoljára megnyitott fájlok listájának mérete + Size of recent file list + Utoljára megnyitott fájlok listájának mérete - Window style: - Ablakstílus: + Window style: + Ablakstílus: - Size of toolbar icons: - Eszköztárikonok mérete: + Size of toolbar icons: + Eszköztárikonok mérete: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Alapértelmezett (% 1 x% 1) + Default (%1 x %1) + Alapértelmezett (% 1 x% 1) - Small (%1 x %1) - Kicsi (% 1 x% 1) + Small (%1 x %1) + Kicsi (% 1 x% 1) - Large (%1 x %1) - Nagy (% 1 x% 1) + Large (%1 x %1) + Nagy (% 1 x% 1) - Extra large (%1 x %1) - Extra nagy (%1 x%1) + Extra large (%1 x %1) + Extra nagy (%1 x%1) - - + + Gui::Dialog::DlgInputDialog - Input - Bevitel + Input + Bevitel - OK - OK + OK + OK - Cancel - Mégse + Cancel + Mégse - - Program infó + + Program infó - - + + Gui::Dialog::DlgInspector - Scene Inspector - Jelenet felügyelő + Scene Inspector + Jelenet felügyelő - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Makró végrehajtása + Execute macro + Makró végrehajtása - Macro name: - Makrónév: + Macro name: + Makrónév: - Macro destination: - Makró helye: + Macro destination: + Makró helye: - Execute - Végrehajtás + Execute + Végrehajtás - Close - Bezárás + Close + Bezárás - Create - Létrehozás + Create + Létrehozás - Delete - Törlés + Delete + Törlés - Edit - Módosítás + Edit + Módosítás - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makrók + Macros + Makrók - Macro file - Makró fájl + Macro file + Makró fájl - Enter a file name, please: - Kérem, adja meg a fájl nevét: + Enter a file name, please: + Kérem, adja meg a fájl nevét: - Existing file - Létező fájl + Existing file + Létező fájl - '%1'. + '%1'. This file already exists. - '%1'. Ez a fájl már létezik. + '%1'. Ez a fájl már létezik. - Delete macro - Makró törlése + Delete macro + Makró törlése - Do you really want to delete the macro '%1'? - Valóban törölni szeretné a "'%1'" nevű makrót? + Do you really want to delete the macro '%1'? + Valóban törölni szeretné a "'%1'" nevű makrót? - Cannot create file - Nem lehet létrehozni a fájlt + Cannot create file + Nem lehet létrehozni a fájlt - Creation of file '%1' failed. - Nem sikerült létrehozni a(z) '%1'. + Creation of file '%1' failed. + Nem sikerült létrehozni a(z) '%1'. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Makró rögzítése + Macro recording + Makró rögzítése - Macro name: - Makrónév: + Macro name: + Makrónév: - Stop - Megállít + Stop + Megállít - Cancel - Mégse + Cancel + Mégse - Macro path: - Makró elérési útja: + Macro path: + Makró elérési útja: - ... - ... + ... + ... - Record - Rögzítés + Record + Rögzítés - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Makrórögzítő + Macro recorder + Makrórögzítő - Specify first a place to save. - Először adjon meg egy helyet a mentésnek. + Specify first a place to save. + Először adjon meg egy helyet a mentésnek. - Existing macro - Létező makró + Existing macro + Létező makró - The macro '%1' already exists. Do you want to overwrite? - A '%1' makró már létezik. Szeretné felülírni? + The macro '%1' already exists. Do you want to overwrite? + A '%1' makró már létezik. Szeretné felülírni? - The macro directory doesn't exist. Please, choose another one. - A makró könyvtár nem létezik. Kérjük, válasszon egy másikat. + The macro directory doesn't exist. Please, choose another one. + A makró könyvtár nem létezik. Kérjük, válasszon egy másikat. - Choose macro directory - Válassza ki a makró könyvtárat + Choose macro directory + Válassza ki a makró könyvtárat - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Alapanyag tulajdonságai + Material properties + Alapanyag tulajdonságai - &Close - Be&zárás + &Close + Be&zárás - Alt+C - Alt + C + Alt+C + Alt + C - Material - Anyag + Material + Anyag - Diffuse color: - Szórt szín: + Diffuse color: + Szórt szín: - Specular color: - Tükröződési szín: + Specular color: + Tükröződési szín: - Shininess: - Fényesség: + Shininess: + Fényesség: - % - % + % + % - Ambient color: - Környezeti szín: + Ambient color: + Környezeti szín: - - Program infó + + Program infó - Emissive color: - Sugárzó szín: + Emissive color: + Sugárzó szín: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - On-line segítség + On-line help + On-line segítség - Help viewer - Segítség nézegető + Help viewer + Segítség nézegető - Location of start page - A start oldal helye + Location of start page + A start oldal helye - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML file-k (*.html *.htm) + HTML files (*.html *.htm) + HTML file-k (*.html *.htm) - Access denied - Hozzáférés megtagadva + Access denied + Hozzáférés megtagadva - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Az '%1' -hez hozzáférés megtagadva + Az '%1' -hez hozzáférés megtagadva Kérem válasszon másik könyvtárat. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Paraméterszerkesztő + Parameter Editor + Paraméterszerkesztő - Save to disk - Mentés lemezre + Save to disk + Mentés lemezre - Alt+C - Alt + C + Alt+C + Alt + C - &Close - Be&zárás + &Close + Be&zárás - - + + Gui::Dialog::DlgParameterImp - Group - Csoport + Group + Csoport - Name - Név + Name + Név - Type - Típus + Type + Típus - Value - Érték + Value + Érték - User parameter - Felhasználói paraméterek + User parameter + Felhasználói paraméterek - Invalid input - Érvénytelen adat + Invalid input + Érvénytelen adat - Invalid key name '%1' - Érvénytelen kulcs név '%1' + Invalid key name '%1' + Érvénytelen kulcs név '%1' - System parameter - Rendszer paraméter + System parameter + Rendszer paraméter - - + + Gui::Dialog::DlgPreferences - Preferences - Testreszabás + Preferences + Testreszabás - &Help - &Súgó + &Help + &Súgó - Alt+H - Alt+H + Alt+H + Alt+H - &OK - OK + &OK + OK - &Apply - Alkalmaz + &Apply + Alkalmaz - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - Mégse + &Cancel + Mégse - - Program infó + + Program infó - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Hibás paraméter + Wrong parameter + Hibás paraméter - - + + Gui::Dialog::DlgProjectInformation - Project information - Információ a feladatról + Project information + Információ a feladatról - Information - Információ + Information + Információ - &Name: - &Név: + &Name: + &Név: - Commen&t: - Megjegyzés: + Commen&t: + Megjegyzés: - Path: - Útvonalak: + Path: + Útvonalak: - &Last modified by: - &Utoljára módosította: + &Last modified by: + &Utoljára módosította: - Created &by: - Létrehozta: + Created &by: + Létrehozta: - Com&pany: - Szervezet: + Com&pany: + Szervezet: - Last &modification date: - Utolsó &módosítás dátuma: + Last &modification date: + Utolsó &módosítás dátuma: - Creation &date: - Létrehozás &dátuma: + Creation &date: + Létrehozás &dátuma: - &OK - OK + &OK + OK - &Cancel - Mégse + &Cancel + Mégse - - Program infó + + Program infó - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project segédprogram + Project utility + Project segédprogram - Extract project - Terv kivonat + Extract project + Terv kivonat - Source - Forrás + Source + Forrás - Project file (*.fcstd) - Project file (*. fcstd) + Project file (*.fcstd) + Project file (*. fcstd) - Destination - Célállomás + Destination + Célállomás - Extract - Kivonat + Extract + Kivonat - Create project - Projekt létrehozása + Create project + Projekt létrehozása - Document.xml - Document.xml + Document.xml + Document.xml - Create - Létrehozás + Create + Létrehozás - Load project file after creation - Betöltése után a projekt fájl létrehozása + Load project file after creation + Betöltése után a projekt fájl létrehozása - Empty source - Üres forrás. + Empty source + Üres forrás. - No source is defined. - Nincs forrás definiálva. + No source is defined. + Nincs forrás definiálva. - Empty destination - Üres célállomás. + Empty destination + Üres célállomás. - No destination is defined. - Nincs célállomás meghatározva. + No destination is defined. + Nincs célállomás meghatározva. - - + + Gui::Dialog::DlgReportView - Output window - Kimeneti ablak + Output window + Kimeneti ablak - Output - Kimenet + Output + Kimenet - Record log messages - Változások naplózása + Record log messages + Változások naplózása - Record warnings - Riasztások feljegyzése + Record warnings + Riasztások feljegyzése - Record error messages - Hibák feljegyzése + Record error messages + Hibák feljegyzése - Colors - Színek + Colors + Színek - Normal messages: - Normal üzenetek: + Normal messages: + Normal üzenetek: - Log messages: - Naplóüzenetek: + Log messages: + Naplóüzenetek: - Warnings: - Riasztások: + Warnings: + Riasztások: - Errors: - Hibaüzenetek: + Errors: + Hibaüzenetek: - - Program infó + + Program infó - Redirect internal Python errors to report view - Belső Python hibák átirányítása a jelentés nézetbe + Redirect internal Python errors to report view + Belső Python hibák átirányítása a jelentés nézetbe - Redirect internal Python output to report view - Belső Python kimenet átirányítása jelentés megtekintéséhez + Redirect internal Python output to report view + Belső Python kimenet átirányítása jelentés megtekintéséhez - - + + Gui::Dialog::DlgRunExternal - Running external program - Külső program futtatása + Running external program + Külső program futtatása - TextLabel - TextLabel + TextLabel + TextLabel - Advanced >> - Haladó >> + Advanced >> + Haladó >> - ... - ... + ... + ... - Accept changes - Módosítások elfogadása + Accept changes + Módosítások elfogadása - Discard changes - Módosítások elvetése + Discard changes + Módosítások elvetése - Abort program - Megszakítja a programot + Abort program + Megszakítja a programot - Help - Súgó + Help + Súgó - Select a file - Válasszon ki egy fájlt + Select a file + Válasszon ki egy fájlt - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D-s nézet + 3D View + 3D-s nézet - 3D View settings - 3D-s nézet beállítások + 3D View settings + 3D-s nézet beállítások - Show coordinate system in the corner - Koordináta rendszer mutatása a sarokban + Show coordinate system in the corner + Koordináta rendszer mutatása a sarokban - Show counter of frames per second - A keret / másodperc mutatása + Show counter of frames per second + A keret / másodperc mutatása - Enable animation - Animáció engedélyezése + Enable animation + Animáció engedélyezése - Enable anti-aliasing (slower) - Élsimítás engedélyezése (lassab megjelenítés) + Enable anti-aliasing (slower) + Élsimítás engedélyezése (lassab megjelenítés) - Eye to eye distance for stereo modes: - Szem távolságának a sztereó módhoz: + Eye to eye distance for stereo modes: + Szem távolságának a sztereó módhoz: - Camera type - Kamera típus + Camera type + Kamera típus - Orthographic rendering - Függőleges vetület leképezés + Orthographic rendering + Függőleges vetület leképezés - Perspective rendering - Perspektivikus leképezés + Perspective rendering + Perspektivikus leképezés - - Program infó + + Program infó - 3D Navigation - 3D-s navigáció + 3D Navigation + 3D-s navigáció - Mouse... - Egér ... + Mouse... + Egér ... - Intensity of backlight - Háttérvilágítás intenzitása + Intensity of backlight + Háttérvilágítás intenzitása - Enable backlight color - Háttérvilágítás színének engedélyezése + Enable backlight color + Háttérvilágítás színének engedélyezése - Orbit style - Orbit stílus + Orbit style + Orbit stílus - Turntable - Fordítótábla + Turntable + Fordítótábla - Trackball - Trackball + Trackball + Trackball - Invert zoom - Kicsinyítés + Invert zoom + Kicsinyítés - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigáció + %1 navigation + %1 navigáció - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Színmodell + Color model + Színmodell - &Gradient: - &Színátmenet + &Gradient: + &Színátmenet - red-yellow-green-cyan-blue - piros-sárga-zöld-cián-kék + red-yellow-green-cyan-blue + piros-sárga-zöld-cián-kék - blue-cyan-green-yellow-red - kék-cián-zöld-sárga-piros + blue-cyan-green-yellow-red + kék-cián-zöld-sárga-piros - white-black - fehér-fekete + white-black + fehér-fekete - black-white - fekete-fehér + black-white + fekete-fehér - Visibility - Láthatóság + Visibility + Láthatóság - Out g&rayed - Kiszűrkít + Out g&rayed + Kiszűrkít - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Kívül esik&láthatatlan: + Out &invisible + Kívül esik&láthatatlan: - Alt+I - Alt+I + Alt+I + Alt+I - Style - Stílus + Style + Stílus - &Zero - $Zéró + &Zero + $Zéró - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Folyás + &Flow + &Folyás - Alt+F - Alt+F + Alt+F + Alt+F - &OK - OK + &OK + OK - &Cancel - Mégse + &Cancel + Mégse - Parameter range - Paraméter-tartomány + Parameter range + Paraméter-tartomány - Mi&nimum: - Mi&nimum: + Mi&nimum: + Mi&nimum: - Ma&ximum: - Ma&ximum: + Ma&ximum: + Ma&ximum: - &Labels: - &Cimke: + &Labels: + &Cimke: - &Decimals: - &Tizedesjegyek: + &Decimals: + &Tizedesjegyek: - - Program infó + + Program infó - Color-gradient settings - Színátmenet beállítások + Color-gradient settings + Színátmenet beállítások - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Hibás paraméter + Wrong parameter + Hibás paraméter - The maximum value must be higher than the minimum value. - A maximális értéknek magasabbnak kell lennie, mint a minimális érték. + The maximum value must be higher than the minimum value. + A maximális értéknek magasabbnak kell lennie, mint a minimális érték. - - + + Gui::Dialog::DlgSettingsDocument - Document - Dokumentum + Document + Dokumentum - General - Általános + General + Általános - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Dokumentum mentésének tömörítési szintje + Dokumentum mentésének tömörítési szintje (0=nincs, 9=legnagyobb, 3=alapértelmezett) - Create new document at start up - Indításkor egy új munkalap létrehozása + Create new document at start up + Indításkor egy új munkalap létrehozása - Storage - Tárolás + Storage + Tárolás - Saving transactions (Auto-save) - Mentési tranzakciók (Automatikus mentés) + Saving transactions (Auto-save) + Mentési tranzakciók (Automatikus mentés) - Discard saved transaction after saving document - Dobja el a mentett tranzakciókat a munkalap mentését követően + Discard saved transaction after saving document + Dobja el a mentett tranzakciókat a munkalap mentését követően - Save thumbnail into project file when saving document - Bélyegkép mentése a projektfájlba, munkalap mentésekor + Save thumbnail into project file when saving document + Bélyegkép mentése a projektfájlba, munkalap mentésekor - Create up to backup files when resaving document - Készítsen biztonsági másolatot a fájlról, ha a munkát újra szeretné menteni + Create up to backup files when resaving document + Készítsen biztonsági másolatot a fájlról, ha a munkát újra szeretné menteni - Document objects - Dokumentum objektumok + Document objects + Dokumentum objektumok - Allow duplicate object labels in one document - Engedélyezi, hogy egy dokumentumban duplikált objektumazonosítók legyenek + Allow duplicate object labels in one document + Engedélyezi, hogy egy dokumentumban duplikált objektumazonosítók legyenek - Maximum Undo/Redo steps - Maximális Visszalépés / Újra létrehozás lépések + Maximum Undo/Redo steps + Maximális Visszalépés / Újra létrehozás lépések - Using Undo/Redo on documents - Visszalépés / Újra létrehozás használata a dokumentumokhoz + Using Undo/Redo on documents + Visszalépés / Újra létrehozás használata a dokumentumokhoz - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Szöveg + Text + Szöveg - Bookmark - Könyvjelző + Bookmark + Könyvjelző - Breakpoint - Töréspont + Breakpoint + Töréspont - Keyword - Kulcsszó + Keyword + Kulcsszó - Comment - Megjegyzés + Comment + Megjegyzés - Block comment - Megjegyzés tömb + Block comment + Megjegyzés tömb - Number - Szám + Number + Szám - String - Karakterlánc + String + Karakterlánc - Character - Karakter + Character + Karakter - Class name - Osztálynév + Class name + Osztálynév - Define name - Definiált név + Define name + Definiált név - Operator - Irányító + Operator + Irányító - Python output - Python kimenet + Python output + Python kimenet - Python error - Python hiba + Python error + Python hiba - Items - Elemek + Items + Elemek - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Kép beállításai + Image settings + Kép beállításai - Image properties - Kép tulajdonságai + Image properties + Kép tulajdonságai - Back&ground: - Háttér: + Back&ground: + Háttér: - Current - Aktiális + Current + Aktiális - White - Fehér + White + Fehér - Black - Fekete + Black + Fekete - Transparent - Átlátszó + Transparent + Átlátszó - Image dimensions - Kép méretei + Image dimensions + Kép méretei - Pixel - Képpont + Pixel + Képpont - &Width: - Szélesség: + &Width: + Szélesség: - Current screen - Aktuális képernyő + Current screen + Aktuális képernyő - Icon 32 x 32 - Ikon 32 x 32 + Icon 32 x 32 + Ikon 32 x 32 - Icon 64 x 64 - Ikon 64 x 64 + Icon 64 x 64 + Ikon 64 x 64 - Icon 128 x 128 - Ikon 128 x 128 + Icon 128 x 128 + Ikon 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Alap méretek: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + Magasság: - Standard sizes: - Alap méretek: + Aspect ratio: + Méretarány: - &Height: - Magasság: + &Screen + Képernyő - Aspect ratio: - Méretarány: + Alt+S + Alt+S - &Screen - Képernyő + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Kép Megjegyzés - Alt+1 - Alt+1 + Insert MIBA + MIBA beszúrása - Image comment - Kép Megjegyzés + Insert comment + Megjegyzés beszúrása - - Insert MIBA - MIBA beszúrása - - - Insert comment - Megjegyzés beszúrása - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Makró + Macro + Makró - Macro recording settings - Makró felvétel beállításai + Macro recording settings + Makró felvétel beállításai - Logging Commands - Naplózási parancsok + Logging Commands + Naplózási parancsok - Show script commands in python console - A parancsutasítások megjelenítése a python konzolon + Show script commands in python console + A parancsutasítások megjelenítése a python konzolon - Log all commands issued by menus to file: - Naplózza fájlba a menük által kiadott összes parancsot: + Log all commands issued by menus to file: + Naplózza fájlba a menük által kiadott összes parancsot: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - GUI parancsok + Gui commands + GUI parancsok - Recording GUI commands - GUI parancsok rögzítése + Recording GUI commands + GUI parancsok rögzítése - Record as comment - Rögzítés megjegyzésként + Record as comment + Rögzítés megjegyzésként - Macro path - Makró elérési út + Macro path + Makró elérési út - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Egységek + Units + Egységek - Units settings - Egységek beállítása + Units settings + Egységek beállítása - Standard (mm/kg/s/degree) - Standard (mm/kg/s/fok) + Standard (mm/kg/s/degree) + Standard (mm/kg/s/fok) - MKS (m/kg/s/degree) - MKS (m/kg/s/fok) + MKS (m/kg/s/degree) + MKS (m/kg/s/fok) - Magnitude - Méret + Magnitude + Méret - Unit - Egység + Unit + Egység - User system: - Felhasználó rendszer: + User system: + Felhasználó rendszer: - Imperial (in/lb) - Angolszász(in/lb) + Imperial (in/lb) + Angolszász(in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Színek + Colors + Színek - Selection - Kijelölés + Selection + Kijelölés - Enable selection highlighting - Kijelölésnél kiemelés alkalmazása + Enable selection highlighting + Kijelölésnél kiemelés alkalmazása - Enable preselection highlighting - Előválasztás kiemelést tesz lehetővé + Enable preselection highlighting + Előválasztás kiemelést tesz lehetővé - Background color - Háttér szín + Background color + Háttér szín - Middle color - Középső szín + Middle color + Középső szín - Color gradient - Színátmenet + Color gradient + Színátmenet - Simple color - Egyszínű + Simple color + Egyszínű - Default colors - Alapértelmezett színek + Default colors + Alapértelmezett színek - Edited edge color - Szerkesztett él színek + Edited edge color + Szerkesztett él színek - Edited vertex color - Szerkesztett vertex színek + Edited vertex color + Szerkesztett vertex színek - Construction geometry - Építőipari geometria + Construction geometry + Építőipari geometria - Fully constrained geometry - Teljesen korlátozott geometria + Fully constrained geometry + Teljesen korlátozott geometria - The color of construction geometry in editmode - Az építési geometria színei szerkesztő módban + The color of construction geometry in editmode + Az építési geometria színei szerkesztő módban - The color of fully constrained geometry in editmode - A teljesen korlátozott geometriai színei szerkesztő módban + The color of fully constrained geometry in editmode + A teljesen korlátozott geometriai színei szerkesztő módban - The color of vertices being edited - A csúcsok színei szerkesztés alatt + The color of vertices being edited + A csúcsok színei szerkesztés alatt - The color of edges being edited - Az élek színe szerkesztés alatt + The color of edges being edited + Az élek színe szerkesztés alatt - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Napi jótanács + Tip of the day + Napi jótanács - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <font size="+3"><font face="Times New Roman"><b>Tudta, hogy ...</b></font></font> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <font size="+3"><font face="Times New Roman"><b>Tudta, hogy ...</b></font></font> - &Show tips at start up - &Tanácsok megjelenítése induláskor + &Show tips at start up + &Tanácsok megjelenítése induláskor - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Következő tanács + &Next Tip + &Következő tanács - Alt+N - Alt+N + Alt+N + Alt+N - &Close - Be&zárás + &Close + Be&zárás - Alt+C - Alt + C + Alt+C + Alt + C - - Program infó + + Program infó - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Letöltés nem sikerült: %1 + Letöltés nem sikerült: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Ha szeretne többet megtudni FreeCAD-ről, menjen a %1, vagy nyomja meg a Súgó gombot a Súgó menüben. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Ha szeretne többet megtudni FreeCAD-ről, menjen a %1, vagy nyomja meg a Súgó gombot a Súgó menüben. - - + + Gui::Dialog::DockablePlacement - Placement - Elhelyezés + Placement + Elhelyezés - - + + Gui::Dialog::DownloadDialog - Canceled. - Törlődik. + Canceled. + Törlődik. - - + + Download + + + + Cancel + Mégse + + + Close + Bezárás + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Letöltés meghiusult: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Ikon hozzáadása + Add icon + Ikon hozzáadása - - + + Gui::Dialog::InputVector - Input vector - Bemeneti vektor + Input vector + Bemeneti vektor - Vector - Vektor + Vector + Vektor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Egérgombok + Mouse buttons + Egérgombok - Configuration - Konfiguráció + Configuration + Konfiguráció - Selection: - Kiválasztás: + Selection: + Kiválasztás: - Panning - Mozgatás + Panning + Mozgatás - Rotation: - Elforgatás: + Rotation: + Elforgatás: - Zooming: - Nagyítás: + Zooming: + Nagyítás: - - + + Gui::Dialog::ParameterGroup - Expand - Kibontás + Expand + Kibontás - Add sub-group - Alcsoport hozzáadás + Add sub-group + Alcsoport hozzáadás - Remove group - Csoport eltávolítása + Remove group + Csoport eltávolítása - Rename group - Csoport átnevezése + Rename group + Csoport átnevezése - Export parameter - Paraméter export + Export parameter + Paraméter export - Import parameter - Paraméter import + Import parameter + Paraméter import - Collapse - Összevonás + Collapse + Összevonás - Do really want to remove this parameter group? - Valóban el szeretné távolítani ezt a paramétert csoportot? + Do really want to remove this parameter group? + Valóban el szeretné távolítani ezt a paramétert csoportot? - Existing sub-group - Létező alcsoport + Existing sub-group + Létező alcsoport - The sub-group '%1' already exists. - Az alcsoport '%1' már létezik. + The sub-group '%1' already exists. + Az alcsoport '%1' már létezik. - Export parameter to file - Paraméter exportálása fájlba + Export parameter to file + Paraméter exportálása fájlba - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Paraméter importálása fájlból + Import parameter from file + Paraméter importálása fájlból - Import Error - Importálási hiba + Import Error + Importálási hiba - Reading from '%1' failed. - Olvasási hiba: %1 + Reading from '%1' failed. + Olvasási hiba: %1 - - + + Gui::Dialog::ParameterValue - Change value - Érték módosítása + Change value + Érték módosítása - Remove key - Kulcs eltávolítása + Remove key + Kulcs eltávolítása - Rename key - Kulcs átnevezése + Rename key + Kulcs átnevezése - New - Új + New + Új - New string item - Új karakterlánc-elem + New string item + Új karakterlánc-elem - New float item - Új float-elem + New float item + Új float-elem - New integer item - Új egész elem + New integer item + Új egész elem - New unsigned item - Új meghatározatlan elem + New unsigned item + Új meghatározatlan elem - New Boolean item - Új logikai elem + New Boolean item + Új logikai elem - Existing item - Meglévő elem + Existing item + Meglévő elem - The item '%1' already exists. - Az '%1' tétel már létezik. + The item '%1' already exists. + Az '%1' tétel már létezik. - - + + Gui::Dialog::Placement - Placement - Elhelyezés + Placement + Elhelyezés - OK - OK + OK + OK - Translation: - Fordítás: + Translation: + Fordítás: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Elforgatás: + Rotation: + Elforgatás: - Angle: - Dőlésszög: + Angle: + Dőlésszög: - Axis: - Tengely: + Axis: + Tengely: - Center: - Középpont: + Center: + Középpont: - Pitch: - Döntés: + Pitch: + Döntés: - Roll: - Gördítés: + Roll: + Gördítés: - Yaw: - Tengely körüli fordulás: + Yaw: + Tengely körüli fordulás: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Euler-szögek + Euler angles + Euler-szögek - Apply placement changes immediately - Elhelyezés változtatásának alkalmazása azonnal + Apply placement changes immediately + Elhelyezés változtatásának alkalmazása azonnal - Apply incremental changes to object placement - A növekvő változások tárgy helyzetre való alkalmazása + Apply incremental changes to object placement + A növekvő változások tárgy helyzetre való alkalmazása - Apply - Alkalmaz + Apply + Alkalmaz - Reset - Alaphelyzetbe állítása + Reset + Alaphelyzetbe állítása - Close - Bezárás + Close + Bezárás - - + + Gui::Dialog::PrintModel - Button - Gomb + Button + Gomb - Command - Parancs + Command + Parancs - - + + Gui::Dialog::SceneInspector - Dialog - Párbeszédablak + Dialog + Párbeszédablak - Close - Bezárás + Close + Bezárás - Refresh - Frissítés + Refresh + Frissítés - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor struktúra + Inventor Tree + Inventor struktúra - Nodes - Csomópontok + Nodes + Csomópontok - - + + Gui::Dialog::TextureMapping - Texture - Anyagminta + Texture + Anyagminta - Texture mapping - Textúra leképezés + Texture mapping + Textúra leképezés - Global - Globális + Global + Globális - Environment - Környezet + Environment + Környezet - Image files (%1) - A kép fájl (%1) + Image files (%1) + A kép fájl (%1) - No image - Nincs kép + No image + Nincs kép - The specified file is not a valid image file. - A megadott fájl nem érvényes képfájl. + The specified file is not a valid image file. + A megadott fájl nem érvényes képfájl. - No 3d view - Nem 3D nézet + No 3d view + Nem 3D nézet - No active 3d view found. - Nem található aktív 3D-s nézet. + No active 3d view found. + Nem található aktív 3D-s nézet. - - + + Gui::Dialog::Transform - Cancel - Mégse + Cancel + Mégse - Transform - Átalakítás + Transform + Átalakítás - - + + Gui::DlgTreeWidget - Dialog - Párbeszédablak + Dialog + Párbeszédablak - Items - Elemek + Items + Elemek - OK - OK + OK + OK - Cancel - Mégse + Cancel + Mégse - - Program infó + + Program infó - - + + Gui::DockWnd::CombiView - CombiView - Össz nézet + CombiView + Össz nézet - Project - Terv + Project + Terv - Tasks - Feladatok + Tasks + Feladatok - - + + Gui::DockWnd::HelpView - Previous - Vissza + Previous + Vissza - Next - Tovább + Next + Tovább - Home - Kezdőlap + Home + Kezdőlap - Open - Megnyit + Open + Megnyit - Open file - Fájl megnyitás + Open file + Fájl megnyitás - All HTML files (*.html *.htm) - Minden HTML file (*.html *.htm) + All HTML files (*.html *.htm) + Minden HTML file (*.html *.htm) - External browser - Külső böngésző + External browser + Külső böngésző - No external browser found. Specify in preferences, please - Nem található külső böngésző. Kérem, adjon meg egyet a beállításoknál + No external browser found. Specify in preferences, please + Nem található külső böngésző. Kérem, adjon meg egyet a beállításoknál - Starting of %1 failed - Az %1 elindítása sikertelen + Starting of %1 failed + Az %1 elindítása sikertelen - - + + Gui::DockWnd::PropertyDockView - Property View - Tulajdonságok nézet + Property View + Tulajdonságok nézet - - + + Gui::DockWnd::ReportOutput - Logging - Naplózás + Logging + Naplózás - Warning - Riasztás + Warning + Riasztás - Error - Hiba + Error + Hiba - Options - Beállítások + Options + Beállítások - Clear - Törlés + Clear + Törlés - Save As... - Mentés másként... + Save As... + Mentés másként... - Save Report Output - Jelentés kimenet mentése + Save Report Output + Jelentés kimenet mentése - Plain Text Files (*.txt *.log) - Egyszerű Text File (*.txt *.log) + Plain Text Files (*.txt *.log) + Egyszerű Text File (*.txt *.log) - Go to end - Ugrás a végére + Go to end + Ugrás a végére - Redirect Python output - Python kimenet átirányítása + Redirect Python output + Python kimenet átirányítása - Redirect Python errors - Átirányított Python-hibák + Redirect Python errors + Átirányított Python-hibák - - + + Gui::DockWnd::ReportView - Output - Kimenet + Output + Kimenet - Python console - Python konzol + Python console + Python konzol - - + + Gui::DockWnd::SelectionView - Property View - Tulajdonságok nézet + Property View + Tulajdonságok nézet - - + + Gui::DockWnd::TaskPanelView - Task View - Feladat nézet + Task View + Feladat nézet - - + + Gui::DockWnd::TextBrowser - Could not open file. - A fájl megnyitása sikertelen. + Could not open file. + A fájl megnyitása sikertelen. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Megpróbálta a %1 címet elérni, ami jelenleg nem elérhető. Győződjön meg róla, hogy az URL létezik és frissítse az oldalt. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Megpróbálta a %1 címet elérni, ami jelenleg nem elérhető. Győződjön meg róla, hogy az URL létezik és frissítse az oldalt. - Connecting to %1 - Csatlakozás az %1-hez + Connecting to %1 + Csatlakozás az %1-hez - Sending to %1 - Küldés: %1 részére + Sending to %1 + Küldés: %1 részére - Reading from %1 - Olvasás az %1 -től + Reading from %1 + Olvasás az %1 -től - Download failed: %1. - Letöltés meghiusult: %1. + Download failed: %1. + Letöltés meghiusult: %1. - Previous - Vissza + Previous + Vissza - Forward - Ismétlés + Forward + Ismétlés - Home - Kezdőlap + Home + Kezdőlap - Refresh - Frissítés + Refresh + Frissítés - Copy - Másolás + Copy + Másolás - Select all - Összes kijelölése + Select all + Összes kijelölése - No description for - Új leírás a + No description for + Új leírás a - - + + Gui::DocumentModel - Application - Alkalmazás + Application + Alkalmazás - Labels & Attributes - Cimkék & Tulajdonságok + Labels & Attributes + Cimkék & Tulajdonságok - - + + Gui::EditorView - Modified file - Módosított file + Modified file + Módosított file - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Az eredeti szerkesztőn kívül lett módosítva. Újra akarja tölteni? - Unsaved document - Nem mentett dokumentum + Unsaved document + Nem mentett dokumentum - The document has been modified. + The document has been modified. Do you want to save your changes? - A dokumentum módosítva lett. + A dokumentum módosítva lett. El akarja menteni a változásokat? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD makro (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD makro (*.FCMacro);;Python (*.py) - Export PDF - Exportálás PDF-be + Export PDF + Exportálás PDF-be - PDF file (*.pdf) - PDF file (*.pdf) + PDF file (*.pdf) + PDF file (*.pdf) - untitled[*] - névtelen[*] + untitled[*] + névtelen[*] - - Editor - - Szerkesztő + - Editor + - Szerkesztő - %1 chars removed - %1 karakter eltávolítása + %1 chars removed + %1 karakter eltávolítása - %1 chars added - %1 karakter hozzáadása + %1 chars added + %1 karakter hozzáadása - Formatted - Formázott + Formatted + Formázott - - + + Gui::FileChooser - Select a file - Válasszon ki egy fájlt + Select a file + Válasszon ki egy fájlt - Select a directory - Válasszon ki egy könyvtárat + Select a directory + Válasszon ki egy könyvtárat - - + + Gui::FileDialog - Save as - Mentés másként + Save as + Mentés másként - Open - Megnyit + Open + Megnyit - - + + Gui::FileOptionsDialog - Extended - Kiterjesztés + Extended + Kiterjesztés - All files (*.*) - Minden fájl (*.*) + All files (*.*) + Minden fájl (*.*) - - + + Gui::Flag - Top left - Bal felső + Top left + Bal felső - Bottom left - Bal alsó + Bottom left + Bal alsó - Top right - Jobb felső + Top right + Jobb felső - Bottom right - Jobb alsó + Bottom right + Jobb alsó - Remove - Törlés + Remove + Törlés - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Nyomja meg a CTRL és a bal egérgombot + Press CTRL and left mouse button + Nyomja meg a CTRL és a bal egérgombot - Press middle mouse button - Nyomja meg a középső egérgombot + Press middle mouse button + Nyomja meg a középső egérgombot - Press left mouse button - Nyomja meg a bal egérgombot + Press left mouse button + Nyomja meg a bal egérgombot - Scroll middle mouse button - Görgesse a középső egérgombot + Scroll middle mouse button + Görgesse a középső egérgombot - - + + Gui::LocationDialog - Wrong direction - Rossz irány + Wrong direction + Rossz irány - Direction must not be the null vector - Irány nem lehet nullvektor + Direction must not be the null vector + Irány nem lehet nullvektor - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Felhasználó által megadott... + User defined... + Felhasználó által megadott... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makrók + Macros + Makrók - - + + Gui::MainWindow - Dimension - Dimenzió + Dimension + Dimenzió - Ready - Kész + Ready + Kész - Toggles this toolbar - Eszköztár megjelenítése + Toggles this toolbar + Eszköztár megjelenítése - Toggles this dockable window - Dokkolható ablak megjelenítése + Toggles this dockable window + Dokkolható ablak megjelenítése - Close All - Minden bezárása + Close All + Minden bezárása - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Letöltés indítása... + Letöltés indítása... - - + + Gui::ProgressBar - Remaining: %1 - Maradt: %1 + Remaining: %1 + Maradt: %1 - Aborting - Megszakítása + Aborting + Megszakítása - Do you really want to abort the operation? - Biztosan megszakítja a műveletet? + Do you really want to abort the operation? + Biztosan megszakítja a műveletet? - - + + Gui::ProgressDialog - Remaining: %1 - Maradt: %1 + Remaining: %1 + Maradt: %1 - Aborting - Megszakítása + Aborting + Megszakítása - Do you really want to abort the operation? - Biztosan megszakítja a műveletet? + Do you really want to abort the operation? + Biztosan megszakítja a műveletet? - - + + Gui::PropertyEditor::PropertyModel - Property - Tulajdonság + Property + Tulajdonság - Value - Érték + Value + Érték - - + + Gui::PropertyView - View - Nézet + View + Nézet - Data - Adat + Data + Adat - - + + Gui::PythonConsole - System exit - Kilépés a rendszerből + System exit + Kilépés a rendszerből - The application is still running. + The application is still running. Do you want to exit without saving your data? - Az alkalmazás még mindig fut. + Az alkalmazás még mindig fut. Ki szeretne lépni az adatok mentése nélkül? - Python console - Python konzol + Python console + Python konzol - Unhandled PyCXX exception. - Nem kezelt PyCXX kivétel. + Unhandled PyCXX exception. + Nem kezelt PyCXX kivétel. - Unhandled FreeCAD exception. - Nem kezelt FreeCAD kivétel. + Unhandled FreeCAD exception. + Nem kezelt FreeCAD kivétel. - Unhandled unknown C++ exception. - Nem kezelt ismeretlen C++ kivétel. + Unhandled unknown C++ exception. + Nem kezelt ismeretlen C++ kivétel. - &Copy command - Parancs &másolás + &Copy command + Parancs &másolás - &Copy history - Előzmények &másolás + &Copy history + Előzmények &másolás - Save history as... - Előzmények mentése mint ... + Save history as... + Előzmények mentése mint ... - Insert file name... - Fájlnév beszúrása... + Insert file name... + Fájlnév beszúrása... - Save History - Előzmények mentése + Save History + Előzmények mentése - Macro Files (*.FCMacro *.py) - Makrófájlok (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Makrófájlok (*.FCMacro *.py) - Insert file name - Fájlnév beszúrása + Insert file name + Fájlnév beszúrása - All Files (*.*) - Minden fájl (*.*) + All Files (*.*) + Minden fájl (*.*) - Python Input Dialog - Python bemeneti párbeszédpanel + Python Input Dialog + Python bemeneti párbeszédpanel - Unhandled std C++ exception. - Kezeletlen C++ kivétel. + Unhandled std C++ exception. + Kezeletlen C++ kivétel. - Word wrap - Sortörés + Word wrap + Sortörés - &Copy - &Másolás + &Copy + &Másolás - &Paste - &Beillesztés + &Paste + &Beillesztés - Select All - Mindent kijelöl + Select All + Mindent kijelöl - - + + Clear console + + + + Gui::PythonEditor - Comment - Megjegyzés + Comment + Megjegyzés - Uncomment - Kijelölés törlés + Uncomment + Kijelölés törlés - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Törlés + Clear + Törlés - - + + Gui::RecentFilesAction - Open file %1 - Fájl megnyitása %1 + Open file %1 + Fájl megnyitása %1 - File not found - A fájl nem található + File not found + A fájl nem található - The file '%1' cannot be opened. - A fájl nem nyitható meg ('%1'). + The file '%1' cannot be opened. + A fájl nem nyitható meg ('%1'). - - + + Gui::SelectModule - Select module - Modul választás + Select module + Modul választás - Open %1 as - Megnyitás mint %1 + Open %1 as + Megnyitás mint %1 - Select - Kiválaszt + Select + Kiválaszt - - + + Gui::StdCmdDescription - Help - Súgó + Help + Súgó - Des&cription - Leírás + Des&cription + Leírás - Long description of commands - Parancsok hosszú leírása + Long description of commands + Parancsok hosszú leírása - - + + Gui::StdCmdDownloadOnlineHelp - Help - Súgó + Help + Súgó - Download online help - Online súgó letöltése + Download online help + Online súgó letöltése - Download %1's online help - Online súgó letöltése %1 + Download %1's online help + Online súgó letöltése %1 - Non-existing directory - Nem létező könyvtár + Non-existing directory + Nem létező könyvtár - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - A könyvtár '%1' nem létezik. + A könyvtár '%1' nem létezik. Szeretne megadni egy létező könyvtár? - Missing permission - Hiányzó engedély + Missing permission + Hiányzó engedély - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Nincs írási engedélye '%1' + Nincs írási engedélye '%1' Meg szeretne adni egy másik könyvtárat? - Stop downloading - Letöltés leállítása + Stop downloading + Letöltés leállítása - - + + Gui::StdCmdPythonHelp - Tools - Eszközök + Tools + Eszközök - Python Modules - Python Modulok + Python Modules + Python Modulok - Opens a browser to show the Python modules - Python modul böngésző megnyitása + Opens a browser to show the Python modules + Python modul böngésző megnyitása - - + + Gui::TaskBoxAngle - Angle - Szög + Angle + Szög - - + + Gui::TaskBoxPosition - Position - Pozíció + Position + Pozíció - - + + Gui::TaskView::TaskAppearance - Display mode: - Megjelenítési mód: + Display mode: + Megjelenítési mód: - Plot mode: - Nyomtatási mód: + Plot mode: + Nyomtatási mód: - Point size: - Méret: + Point size: + Méret: - Line width: - Vonalstílus: + Line width: + Vonalstílus: - Transparency: - Átlátszóság: + Transparency: + Átlátszóság: - Appearance - Megjelenés + Appearance + Megjelenés - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Módosítás + Edit + Módosítás - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Megjelenés + Appearance + Megjelenés - ... - ... + ... + ... - edit selection - kijelölés szerkesztése + edit selection + kijelölés szerkesztése - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Nyomja meg a bal egérgombot + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Angol + English + Angol - - + + Gui::TreeDockWidget - Tree view - Fanézet + Tree view + Fanézet - - + + Gui::TreeWidget - Create group... - Csoport létrehozása... + Create group... + Csoport létrehozása... - Create a group - Új csoport létrehozása + Create a group + Új csoport létrehozása - Group - Csoport + Group + Csoport - Rename - Átnevezés + Rename + Átnevezés - Rename object - Objektum átnevezése + Rename object + Objektum átnevezése - Labels & Attributes - Cimkék & Tulajdonságok + Labels & Attributes + Cimkék & Tulajdonságok - Application - Alkalmazás + Application + Alkalmazás - Finish editing - Szerkesztés befejezése + Finish editing + Szerkesztés befejezése - Finish editing object - Objektumszerkesztés befejezése + Finish editing object + Objektumszerkesztés befejezése - Activate document - Dokumentum aktiválása + Activate document + Dokumentum aktiválása - Activate document %1 - Dokumentum aktiválása (%1) + Activate document %1 + Dokumentum aktiválása (%1) - - + + Gui::View3DInventor - Export PDF - Exportálás PDF-be + Export PDF + Exportálás PDF-be - PDF file (*.pdf) - PDF file (*.pdf) + PDF file (*.pdf) + PDF file (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - '%1' munkafelület kiválasztása + Select the '%1' workbench + '%1' munkafelület kiválasztása - - + + Position - Form - Űrlap + Form + Űrlap - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Rácshoz illeszt + Grid Snap in + Rácshoz illeszt - - + + QDockWidget - Tree view - Fanézet + Tree view + Fanézet - Property view - Tulajdonságok nézet + Property view + Tulajdonságok nézet - Selection view - Részlet nézet + Selection view + Részlet nézet - Report view - Jelentés nézet + Report view + Jelentés nézet - Task View - Feladat nézet + Task View + Feladat nézet - Combo View - Összetett nézet + Combo View + Összetett nézet - Toolbox - Eszközkészlet + Toolbox + Eszközkészlet - Python console - Python konzol + Python console + Python konzol - Display properties - Tulajdonságok megjelenítése + Display properties + Tulajdonságok megjelenítése - - + + QObject - General - Általános + General + Általános - Display - Megjelenítés + Display + Megjelenítés - Unknown filetype - Ismeretlen filetípus + Unknown filetype + Ismeretlen filetípus - Cannot open unknown filetype: %1 - Nem megnyitható fájltípus: %1 + Cannot open unknown filetype: %1 + Nem megnyitható fájltípus: %1 - Cannot save to unknown filetype: %1 - Nem menthető fájltípus: %1 + Cannot save to unknown filetype: %1 + Nem menthető fájltípus: %1 - Workbench failure - Munkafelület hiba + Workbench failure + Munkafelület hiba - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Nem lehet elindítani a Qt támogatást(%1) + Unable to launch Qt Assistant (%1) + Nem lehet elindítani a Qt támogatást(%1) - Exception - Kivétel + Exception + Kivétel - Open document - Dokumentum megnyitása + Open document + Dokumentum megnyitása - Import file - Fájl importálása + Import file + Fájl importálása - Export file - Fájl exportálása + Export file + Fájl exportálása - Printing... - Nyomtatás... + Printing... + Nyomtatás... - Cannot load workbench - Munkamenet nem betölthető + Cannot load workbench + Munkamenet nem betölthető - A general error occurred while loading the workbench - A munkamenet betöltése közben hiba lépett fel + A general error occurred while loading the workbench + A munkamenet betöltése közben hiba lépett fel - File not found - A fájl nem található + File not found + A fájl nem található - Cannot open file %1 - Nem sikerült megnyitni a(z) %1 fájlt + Cannot open file %1 + Nem sikerült megnyitni a(z) %1 fájlt - Save views... - Nézet mentése... + Save views... + Nézet mentése... - Load views... - Nézet betöltése... + Load views... + Nézet betöltése... - Freeze view - Nézet megállítása + Freeze view + Nézet megállítása - Clear views - Tiszta nézet + Clear views + Tiszta nézet - Restore view &%1 - Nézet visszaállítás %1 + Restore view &%1 + Nézet visszaállítás %1 - Save frozen views - Fagyasztott nézetek mentése + Save frozen views + Fagyasztott nézetek mentése - Frozen views (*.cam) - Fagyasztott nézetek (*.cam) + Frozen views (*.cam) + Fagyasztott nézetek (*.cam) - Restore views - Nézetek visszaállítása + Restore views + Nézetek visszaállítása - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - A visszaállított nézetek importálása felülírja a már tárolt nézetet. + A visszaállított nézetek importálása felülírja a már tárolt nézetet. Folytatni kívánja? - Restore frozen views - Fagyasztott nézet visszaállítása + Restore frozen views + Fagyasztott nézet visszaállítása - Cannot open file '%1'. - Nem lehet megnyitni a fájlt (%1). + Cannot open file '%1'. + Nem lehet megnyitni a fájlt (%1). - Docked - Rögzített + Docked + Rögzített - Undocked - Nem rögzített + Undocked + Nem rögzített - Fullscreen - Teljes képernyős + Fullscreen + Teljes képernyős - files - fájlok + files + fájlok - Save picture - Kép mentése + Save picture + Kép mentése - New sub-group - Új alcsoport + New sub-group + Új alcsoport - Enter the name: - Adja meg a nevét: + Enter the name: + Adja meg a nevét: - New text item - Új szöveges elem + New text item + Új szöveges elem - Enter your text: - Írja be a szöveget: + Enter your text: + Írja be a szöveget: - New integer item - Új egész elem + New integer item + Új egész elem - Enter your number: - Írja be a számot: + Enter your number: + Írja be a számot: - New unsigned item - Új meghatározatlan elem + New unsigned item + Új meghatározatlan elem - New float item - Új float-elem + New float item + Új float-elem - New Boolean item - Új logikai elem + New Boolean item + Új logikai elem - Choose an item: - Válasszon egy elemet: + Choose an item: + Válasszon egy elemet: - Rename group - Csoport átnevezése + Rename group + Csoport átnevezése - The group '%1' cannot be renamed. - A csoport (%1) nem nevezhető át. + The group '%1' cannot be renamed. + A csoport (%1) nem nevezhető át. - Existing group - Létező csoport + Existing group + Létező csoport - The group '%1' already exists. - A csoport (%1) már létezik. + The group '%1' already exists. + A csoport (%1) már létezik. - Change value - Érték módosítása + Change value + Érték módosítása - Save document under new filename... - Dokumentum mentése új fájlnéven... + Save document under new filename... + Dokumentum mentése új fájlnéven... - Saving aborted - Mentése megszakítva + Saving aborted + Mentése megszakítva - Unsaved document - Nem mentett dokumentum + Unsaved document + Nem mentett dokumentum - Save document before close? - Mentse a dokumentumot a bezárás előtt? + Save document before close? + Mentse a dokumentumot a bezárás előtt? - Save Macro - Mentse a makrót + Save Macro + Mentse a makrót - Finish - Befejezés + Finish + Befejezés - Clear - Törlés + Clear + Törlés - Cancel - Mégse + Cancel + Mégse - Inner - Belső + Inner + Belső - Outer - Külső + Outer + Külső - No Browser - Nincs böngésző + No Browser + Nincs böngésző - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Nem lehet megnyitni a böngészőt. + Nem lehet megnyitni a böngészőt. Nyisson meg egy böngészőt, és írja be: http://localhost:%1. - No Server - Nincs szerver + No Server + Nincs szerver - Unable to start the server to port %1: %2. - Nem sikerült elindítani a szervert a %1:%2 porton + Unable to start the server to port %1: %2. + Nem sikerült elindítani a szervert a %1:%2 porton - Unable to open your system browser. - Nem lehet megnyitni a rendszer böngészőt. + Unable to open your system browser. + Nem lehet megnyitni a rendszer böngészőt. - Options... - Beállítások... + Options... + Beállítások... - Out of memory - Elfogyott a memória + Out of memory + Elfogyott a memória - Not enough memory available to display the data. - Nincs elég memória az adatok megjelenítéséhez. + Not enough memory available to display the data. + Nincs elég memória az adatok megjelenítéséhez. - Cannot find file %1 - A fájl nem található: %1 + Cannot find file %1 + A fájl nem található: %1 - Cannot find file %1 neither in %2 nor in %3 - Nem talál fájlt %1 -nek %2 -ben, sem %3 -ban. + Cannot find file %1 neither in %2 nor in %3 + Nem talál fájlt %1 -nek %2 -ben, sem %3 -ban. - Save %1 Document - A(z) %1 dokumentum mentése + Save %1 Document + A(z) %1 dokumentum mentése - %1 document (*.FCStd) - a(z) %1 dokumentum (*.FCStd) + %1 document (*.FCStd) + a(z) %1 dokumentum (*.FCStd) - Save As - Mentés másként + Save As + Mentés másként - %1 already exists. + %1 already exists. Do you want to replace it? - A(z) %1 már létezik. Valóban le szeretné cserélni? + A(z) %1 már létezik. Valóban le szeretné cserélni? - Document not closable - A dokumentum nem zárható be + Document not closable + A dokumentum nem zárható be - The document is not closable for the moment. - A dokumentum nem zárható be pillanatnyilag. + The document is not closable for the moment. + A dokumentum nem zárható be pillanatnyilag. - No OpenGL - Nincs OpenGL + No OpenGL + Nincs OpenGL - This system does not support OpenGL - Ez a rendszer nem támogatja az OpenGL-t + This system does not support OpenGL + Ez a rendszer nem támogatja az OpenGL-t - Help - Súgó + Help + Súgó - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Nem sikerült betölteni a dokumentációt. + Nem sikerült betölteni a dokumentációt. A betöltéshez Qt 4.4 vagy magasabb verzió szükséges. - %1 Help - %1 Súgó + %1 Help + %1 Súgó - Exporting PDF... - PDF exportálása... + Exporting PDF... + PDF exportálása... - Wrong selection - Rossz kijelölés + Wrong selection + Rossz kijelölés - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Csak egy objektum van kiválasztva.Kérjük válasszon ki két objektumot. + Csak egy objektum van kiválasztva.Kérjük válasszon ki két objektumot. Legyen körültekintő, számít melyik pontra kattint. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Kérjük, válasszon ki két objektumot. + Kérjük, válasszon ki két objektumot. Legyen körültekintő, fontos melyik pontra kattint. - New boolean item - Új logikai elem + New boolean item + Új logikai elem - Navigation styles - Navigációs stílusok + Navigation styles + Navigációs stílusok - %1 navigation - %1 navigáció + %1 navigation + %1 navigáció - Move annotation - Lépés jegyzék + Move annotation + Lépés jegyzék - Transform - Átalakítás + Transform + Átalakítás - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - A dokumentum szerkesztési módban, így nem zárható be ebben a pillanatban. Vagy be kell fejezni, vagy törölheti a szerkesztést a feladat panelen. + A dokumentum szerkesztési módban, így nem zárható be ebben a pillanatban. Vagy be kell fejezni, vagy törölheti a szerkesztést a feladat panelen. - - + + + StdBoxSelection + + Standard-View + Standard-nézet + + + Box selection + + + + StdCmdAbout - Help - Súgó + Help + Súgó - &About %1 - &Névjegy %1 + &About %1 + &Névjegy %1 - About %1 - Névjegy %1 + About %1 + Névjegy %1 - - + + StdCmdAboutQt - Help - Súgó + Help + Súgó - About &Qt - Qt névjegye + About &Qt + Qt névjegye - About Qt - Qt névjegye + About Qt + Qt névjegye - - + + StdCmdActivateNextWindow - Window - Ablak + Window + Ablak - Ne&xt - Ismét + Ne&xt + Ismét - Activate next window - Következő ablak aktiválása + Activate next window + Következő ablak aktiválása - - + + StdCmdActivatePrevWindow - Window - Ablak + Window + Ablak - Pre&vious - Visszavonás + Pre&vious + Visszavonás - Activate previous window - Előző ablak aktiválása + Activate previous window + Előző ablak aktiválása - - + + + StdCmdAlignment + + Edit + Módosítás + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Ablak + Window + Ablak - Arrange &Icons - &Ikonok rendezése + Arrange &Icons + &Ikonok rendezése - Arrange Icons - Ikonok rendezése + Arrange Icons + Ikonok rendezése - - + + StdCmdAxisCross - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Toggle axis cross - Tengely kereszteződés váltása + Toggle axis cross + Tengely kereszteződés váltása - - + + StdCmdCascadeWindows - Window - Ablak + Window + Ablak - &Cascade - &Lépcsőzetes + &Cascade + &Lépcsőzetes - Tile pragmatic - Részek gakorlása + Tile pragmatic + Részek gakorlása - - + + StdCmdCloseActiveWindow - Window - Ablak + Window + Ablak - Cl&ose - Be&zárás + Cl&ose + Be&zárás - Close active window - Aktív ablak bezárása + Close active window + Aktív ablak bezárása - - + + StdCmdCloseAllWindows - Window - Ablak + Window + Ablak - Close Al&l - Öss&zes bezárása + Close Al&l + Öss&zes bezárása - Close all windows - Összes ablak bezárása + Close all windows + Összes ablak bezárása - - + + StdCmdCommandLine - Tools - Eszközök + Tools + Eszközök - Start command &line... - Parancs &sor indítása... + Start command &line... + Parancs &sor indítása... - Opens the command line in the console - Parancs sor konzolban való futtatása + Opens the command line in the console + Parancs sor konzolban való futtatása - - + + StdCmdCopy - Edit - Módosítás + Edit + Módosítás - C&opy - &Másolás + C&opy + &Másolás - Copy operation - Másolási művelet + Copy operation + Másolási művelet - - + + StdCmdCut - Edit - Módosítás + Edit + Módosítás - &Cut - &Kivágás + &Cut + &Kivágás - Cut out - Kimetszés + Cut out + Kimetszés - - + + StdCmdDDuplicateSelection - Edit - Módosítás + Edit + Módosítás - Duplicate selection - Másolat létrehozása a kijelölésről + Duplicate selection + Másolat létrehozása a kijelölésről - Put duplicates of the selected objects to the active document - A kijelölt objektumokat másolja az aktuális dokumentumba + Put duplicates of the selected objects to the active document + A kijelölt objektumokat másolja az aktuális dokumentumba - - + + StdCmdDelete - Edit - Módosítás + Edit + Módosítás - &Delete - Törlés + &Delete + Törlés - Deletes the selected objects - Kiválasztott elem törlése + Deletes the selected objects + Kiválasztott elem törlése - - + + StdCmdDemoMode - Standard-View - Standard-nézet + Standard-View + Standard-nézet - View turntable... - Forgóasztal nézet... + View turntable... + Forgóasztal nézet... - View turntable - Forgóasztal nézet + View turntable + Forgóasztal nézet - - + + StdCmdDlgCustomize - Tools - Eszközök + Tools + Eszközök - Cu&stomize... - &Testreszabás... + Cu&stomize... + &Testreszabás... - Customize toolbars and command bars - Eszköztás és parancs oszlopok testreszabása + Customize toolbars and command bars + Eszköztás és parancs oszlopok testreszabása - - + + StdCmdDlgMacroExecute - Macros ... - Makrók ... + Macros ... + Makrók ... - Opens a dialog to let you execute a recorded macro - Párbeszédpanel megnyitása a rögzített makró végrehajtásához + Opens a dialog to let you execute a recorded macro + Párbeszédpanel megnyitása a rögzített makró végrehajtásához - Macro - Makró + Macro + Makró - - + + StdCmdDlgMacroExecuteDirect - Macro - Makró + Macro + Makró - Execute macro - Makró végrehajtása + Execute macro + Makró végrehajtása - Execute the macro in the editor - Szerkesztőben futtatja a makrót + Execute the macro in the editor + Szerkesztőben futtatja a makrót - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Makró felvétel ... + &Macro recording ... + &Makró felvétel ... - Opens a dialog to record a macro - Párbeszédpanel megnyitása a makró rögzítéséhez + Opens a dialog to record a macro + Párbeszédpanel megnyitása a makró rögzítéséhez - Macro - Makró + Macro + Makró - - + + StdCmdDlgParameter - Tools - Eszközök + Tools + Eszközök - E&dit parameters ... - Paraméterek &szerkesztése + E&dit parameters ... + Paraméterek &szerkesztése - Opens a Dialog to edit the parameters - Párbeszédablak megnyitása a paraméterek szerkesztéséhez + Opens a Dialog to edit the parameters + Párbeszédablak megnyitása a paraméterek szerkesztéséhez - - + + StdCmdDlgPreferences - Tools - Eszközök + Tools + Eszközök - &Preferences ... - &Beállítások... + &Preferences ... + &Beállítások... - Opens a Dialog to edit the preferences - Párbeszédablak megnyitása a beállítások szerkesztéséhez + Opens a Dialog to edit the preferences + Párbeszédablak megnyitása a beállítások szerkesztéséhez - - + + StdCmdDockViewMenu - View - Nézet + View + Nézet - Vie&ws - Nézetek + Vie&ws + Nézetek - Toggles this window - Ablak váltás + Toggles this window + Ablak váltás - - + + StdCmdDrawStyle - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Módosítás + + + Duplicate selection + Másolat létrehozása a kijelölésről + + + Put duplicates of the selected objects to the active document + A kijelölt objektumokat másolja az aktuális dokumentumba + + + + StdCmdEdit + + Edit + Módosítás + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Fájl + File + Fájl - &Export... - &Exportálás + &Export... + &Exportálás - Export an object in the active document - Egy objektum exportálása az aktív munkalapból + Export an object in the active document + Egy objektum exportálása az aktív munkalapból - Supported formats - Támogatott formátumok + Supported formats + Támogatott formátumok - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Eszközök + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Fájl + File + Fájl - &Recompute - Új&raszámítás + &Recompute + Új&raszámítás - Recompute feature or document - Jellemzők vagy dokumentum újraszámítása + Recompute feature or document + Jellemzők vagy dokumentum újraszámítása - - + + StdCmdFreeCADWebsite - Help - Súgó + Help + Súgó - FreeCAD Website - FreeCAD honlapja + FreeCAD Website + FreeCAD honlapja - The FreeCAD website - A FreeCAD honlapja + The FreeCAD website + A FreeCAD honlapja - - + + StdCmdFreezeViews - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Freeze display - Képernyő fagyasztása + Freeze display + Képernyő fagyasztása - Freezes the current view position - Az aktuális nézet pozíció fagyasztása + Freezes the current view position + Az aktuális nézet pozíció fagyasztása - - + + StdCmdHideObjects - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Hide all objects - Az összes objektum elrejtése + Hide all objects + Az összes objektum elrejtése - Hide all objects in the document - A dokumentumban lévő összes objektum elrejtéséhez + Hide all objects in the document + A dokumentumban lévő összes objektum elrejtéséhez - - + + StdCmdHideSelection - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Hide selection - Kijelölt elrejtése + Hide selection + Kijelölt elrejtése - Hide all selected objects - Minden kijelölt objektum elrejtése + Hide all selected objects + Minden kijelölt objektum elrejtése - - + + StdCmdImport - File - Fájl + File + Fájl - &Import... - &Import... + &Import... + &Import... - Import a file in the active document - Fájl importálása az aktív dokumentumba + Import a file in the active document + Fájl importálása az aktív dokumentumba - Supported formats - Támogatott formátumok + Supported formats + Támogatott formátumok - All files (*.*) - Minden fájl (*.*) + All files (*.*) + Minden fájl (*.*) - - + + StdCmdMacroStartDebug - Macro - Makró + Macro + Makró - Debug macro - Makró hibakeresés + Debug macro + Makró hibakeresés - Start debugging of macro - Makró hibakeresés indítása + Start debugging of macro + Makró hibakeresés indítása - - + + StdCmdMacroStepOver - Macro - Makró + Macro + Makró - Step over - Átlép + Step over + Átlép - - + + StdCmdMacroStopDebug - Macro - Makró + Macro + Makró - Stop debugging - Hibakeresés leállítása + Stop debugging + Hibakeresés leállítása - Stop debugging of macro - Makró hibakereső leállítása + Stop debugging of macro + Makró hibakereső leállítása - - + + StdCmdMacroStopRecord - Macro - Makró + Macro + Makró - S&top macro recording - Makró rögzítés leállítása + S&top macro recording + Makró rögzítés leállítása - Stop the macro recording session - Leállítja a makrófelvételi folyamatot + Stop the macro recording session + Leállítja a makrófelvételi folyamatot - - + + StdCmdMeasureDistance - View - Nézet + View + Nézet - Measure distance - Távolság mérés + Measure distance + Távolság mérés - - + + StdCmdMeasurementSimple - Tools - Eszközök + Tools + Eszközök - Mesure distance - Távolságmérés + Mesure distance + Távolságmérés - Measures distance between two selected objects - Távolságmérés két kijelölt objektum között + Measures distance between two selected objects + Távolságmérés két kijelölt objektum között - - + + Measure distance + Távolság mérés + + + StdCmdMergeProjects - File - Fájl + File + Fájl - Merge project... - Projekt egyesítése... + Merge project... + Projekt egyesítése... - Merge project - Projekt egyesítése + Merge project + Projekt egyesítése - %1 document (*.fcstd) - %1 dokumentum (*.fcstd) + %1 document (*.fcstd) + %1 dokumentum (*.fcstd) - Cannot merge project with itself. - Nem tudja egyesíteni önmagával a projektet. + Cannot merge project with itself. + Nem tudja egyesíteni önmagával a projektet. - - + + StdCmdNew - File - Fájl + File + Fájl - &New - &Új + &New + &Új - Create a new empty document - Új üres munkalap létrehozása + Create a new empty document + Új üres munkalap létrehozása - - + + StdCmdOnlineHelp - Help - Súgó + Help + Súgó - Show help to the application - Program Súgó megjelenítése + Show help to the application + Program Súgó megjelenítése - - + + StdCmdOnlineHelpPython - Help - Súgó + Help + Súgó - Python Manuals - Python kézikönyvek + Python Manuals + Python kézikönyvek - Show the Python documentation - A Python-dokumentáció megjelenítése + Show the Python documentation + A Python-dokumentáció megjelenítése - - + + StdCmdOnlineHelpWebsite - Help - Súgó + Help + Súgó - Help Website - Súgó Honlap + Help Website + Súgó Honlap - The website where the help is maintained - A honlap, ahol a súgót tartják + The website where the help is maintained + A honlap, ahol a súgót tartják - - + + StdCmdOpen - File - Fájl + File + Fájl - &Open... - &Megnyitás ... + &Open... + &Megnyitás ... - Open a document or import files - Dokumentum megnyitása vagy fájl importálása + Open a document or import files + Dokumentum megnyitása vagy fájl importálása - Supported formats - Támogatott formátumok + Supported formats + Támogatott formátumok - All files (*.*) - Minden fájl (*.*) + All files (*.*) + Minden fájl (*.*) - - + + StdCmdPaste - Edit - Módosítás + Edit + Módosítás - &Paste - &Beillesztés + &Paste + &Beillesztés - Paste operation - Beillesztési művelet + Paste operation + Beillesztési művelet - - + + StdCmdPlacement - Edit - Módosítás + Edit + Módosítás - Placement... - Elhelyezés ... + Placement... + Elhelyezés ... - Place the selected objects - A kijelölt objektumok helye + Place the selected objects + A kijelölt objektumok helye - - + + StdCmdPrint - File - Fájl + File + Fájl - &Print... - &Nyomtatás ... + &Print... + &Nyomtatás ... - Print the document - A dokumentum nyomtatása + Print the document + A dokumentum nyomtatása - - + + StdCmdPrintPdf - File - Fájl + File + Fájl - &Export PDF... - PDF &exportálása... + &Export PDF... + PDF &exportálása... - Export the document as PDF - Dokumentum exportálása PDF fájlba + Export the document as PDF + Dokumentum exportálása PDF fájlba - - + + StdCmdPrintPreview - File - Fájl + File + Fájl - &Print preview... - Nyomtatási kép... + &Print preview... + Nyomtatási kép... - Print the document - A dokumentum nyomtatása + Print the document + A dokumentum nyomtatása - Print preview - Nyomtatási kép + Print preview + Nyomtatási kép - - + + StdCmdProjectInfo - File - Fájl + File + Fájl - Project i&nformation... - Projekt i&nformáció... + Project i&nformation... + Projekt i&nformáció... - Show details of the currently active project - Részletek megjelenítése az aktuális projektről + Show details of the currently active project + Részletek megjelenítése az aktuális projektről - - + + StdCmdProjectUtil - Tools - Eszközök + Tools + Eszközök - Project utility... - Project segédprogram... + Project utility... + Project segédprogram... - Utility to extract or create project files - Felhasználót kivon, vagy hozzon létre a projekt fájlokat + Utility to extract or create project files + Felhasználót kivon, vagy hozzon létre a projekt fájlokat - - + + StdCmdPythonWebsite - Help - Súgó + Help + Súgó - Python Website - Python honlapja + Python Website + Python honlapja - The official Python website - Python hivatalos honlapja + The official Python website + Python hivatalos honlapja - - + + StdCmdQuit - File - Fájl + File + Fájl - E&xit - &Kilépés + E&xit + &Kilépés - Quits the application - Kilépés az alkalmazásból + Quits the application + Kilépés az alkalmazásból - - + + StdCmdRandomColor - File - Fájl + File + Fájl - Random color - Véletlen szín + Random color + Véletlen szín - - + + StdCmdRecentFiles - File - Fájl + File + Fájl - Recent files - Legutóbbi fájlok + Recent files + Legutóbbi fájlok - Recent file list - Legutóbbi fájlok listája + Recent file list + Legutóbbi fájlok listája - - + + StdCmdRedo - Edit - Módosítás + Edit + Módosítás - &Redo - &Ismét: + &Redo + &Ismét: - Redoes a previously undone action - Egy előzőleg visszavont művelet megismétlése + Redoes a previously undone action + Egy előzőleg visszavont művelet megismétlése - - + + StdCmdRefresh - Edit - Módosítás + Edit + Módosítás - &Refresh - &Frissítés + &Refresh + &Frissítés - Recomputes the current active document - Újraszámítja a jelenlegi aktív dokumentumot + Recomputes the current active document + Újraszámítja a jelenlegi aktív dokumentumot - - + + StdCmdSave - File - Fájl + File + Fájl - &Save - &Mentés + &Save + &Mentés - Save the active document - Az aktív dokumentum mentése + Save the active document + Az aktív dokumentum mentése - - + + StdCmdSaveAs - File - Fájl + File + Fájl - Save &As... - Mentés másként ... + Save &As... + Mentés másként ... - Save the active document under a new file name - Az aktuális dokumentum mentése új néven + Save the active document under a new file name + Az aktuális dokumentum mentése új néven - - + + StdCmdSceneInspector - Tools - Eszközök + Tools + Eszközök - Scene inspector... - Jelenet ellenőr ... + Scene inspector... + Jelenet ellenőr ... - Scene inspector - Jelenet ellenőr + Scene inspector + Jelenet ellenőr - - + + StdCmdSelectAll - Edit - Módosítás + Edit + Módosítás - Select &All - Összes kijelölése + Select &All + Összes kijelölése - Select all - Összes kijelölése + Select all + Összes kijelölése - - + + StdCmdSetAppearance - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Appearance... - Megjelenés... + Appearance... + Megjelenés... - Sets the display properties of the selected object - A képernyő tulajdonságok beállítása az objektumhoz + Sets the display properties of the selected object + A képernyő tulajdonságok beállítása az objektumhoz - - + + StdCmdShowObjects - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Show all objects - Összes objektum megjelenítése + Show all objects + Összes objektum megjelenítése - Show all objects in the document - Összes objektum megjelenítése a dokumentumban + Show all objects in the document + Összes objektum megjelenítése a dokumentumban - - + + StdCmdShowSelection - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Show selection - Kijelölés megjelenítése + Show selection + Kijelölés megjelenítése - Show all selected objects - Összes kijelölt objektum megjelenítése + Show all selected objects + Összes kijelölt objektum megjelenítése - - + + StdCmdStatusBar - View - Nézet + View + Nézet - Status bar - Állapotsor + Status bar + Állapotsor - Toggles the status bar - Állapotsort kapcsoló. + Toggles the status bar + Állapotsort kapcsoló. - - + + StdCmdTextureMapping - Tools - Eszközök + Tools + Eszközök - Texture mapping... - Textúra leképezés ... + Texture mapping... + Textúra leképezés ... - Texture mapping - Textúra leképezés + Texture mapping + Textúra leképezés - - + + StdCmdTileWindows - Window - Ablak + Window + Ablak - &Tile - Mozaik elrendezés + &Tile + Mozaik elrendezés - Tile the windows - Mozaikszerű elrendezés + Tile the windows + Mozaikszerű elrendezés - - + + StdCmdToggleBreakpoint - Macro - Makró + Macro + Makró - Toggle breakpoint - Töréspont váltás + Toggle breakpoint + Töréspont váltás - - + + StdCmdToggleClipPlane - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Clipping plane - Vágás sík + Clipping plane + Vágás sík - Toggles clipping plane for active view - Aktív nézet váltása a vágási síkra + Toggles clipping plane for active view + Aktív nézet váltása a vágási síkra - - + + StdCmdToggleNavigation - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Toggle navigation/Edit mode - Váltás a navigációs/szerkesztési mód között + Toggle navigation/Edit mode + Váltás a navigációs/szerkesztési mód között - Toggle between navigation and edit mode - Váltás a navigációs és szerkesztési mód között + Toggle between navigation and edit mode + Váltás a navigációs és szerkesztési mód között - - + + StdCmdToggleObjects - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Toggle all objects - Az összes objektum ki-/ bekapcsolása + Toggle all objects + Az összes objektum ki-/ bekapcsolása - Toggles visibility of all objects in the active document - Megjeleníti, illetve eltünteti az aktív dokumentumban található összes objektumot + Toggles visibility of all objects in the active document + Megjeleníti, illetve eltünteti az aktív dokumentumban található összes objektumot - - + + StdCmdToggleSelectability - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Toggle selectability - Kiválaszthatóság ki-/bekapcsolása + Toggle selectability + Kiválaszthatóság ki-/bekapcsolása - Toggles the property of the objects to get selected in the 3D-View - A tárgy tulajdonságainak változtatása a 3D-nézet kiválasztásához + Toggles the property of the objects to get selected in the 3D-View + A tárgy tulajdonságainak változtatása a 3D-nézet kiválasztásához - - + + StdCmdToggleVisibility - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Toggle visibility - Láthatóság váltása + Toggle visibility + Láthatóság váltása - Toggles visibility - Be-és kikapcsolja a láthatóságot + Toggles visibility + Be-és kikapcsolja a láthatóságot - - + + StdCmdToolBarMenu - View - Nézet + View + Nézet - Tool&bars - Eszköztárak + Tool&bars + Eszköztárak - Toggles this window - Ablak váltás + Toggles this window + Ablak váltás - - + + StdCmdTransform - Edit - Módosítás + Edit + Módosítás - Transform... - Átalakítás... + Transform... + Átalakítás... - Transform the geometry of selected objects - A kijelölt objektum geometriájának átalakítása + Transform the geometry of selected objects + A kijelölt objektum geometriájának átalakítása - - + + StdCmdTreeSelection - View - Nézet + View + Nézet - Go to selection - Kijelöltre ugrás + Go to selection + Kijelöltre ugrás - Scroll to first selected item - Lapozzon az első kijelölt elemre + Scroll to first selected item + Lapozzon az első kijelölt elemre - - + + StdCmdUndo - Edit - Módosítás + Edit + Módosítás - &Undo - &Visszavonás + &Undo + &Visszavonás - Undo exactly one action - Egyetlen művelet visszavonása + Undo exactly one action + Egyetlen művelet visszavonása - - + + StdCmdUserInterface - View - Nézet + View + Nézet - Dock views - Dokkoló nézet + Dock views + Dokkoló nézet - Dock all top-level views - Összes felülnézet kapcslása + Dock all top-level views + Összes felülnézet kapcslása - - + + StdCmdViewAxo - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Axometric - Axonometria + Axometric + Axonometria - Set to axometric view - Axonometrikus nézet beállítása + Set to axometric view + Axonometrikus nézet beállítása - - + + StdCmdViewBottom - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Bottom - Alsó + Bottom + Alsó - Set to bottom view - Alsó nézet beállítása + Set to bottom view + Alsó nézet beállítása - - + + StdCmdViewCreate - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Create new view - Új nézet + Create new view + Új nézet - Creates a new view window for the active document - Új nézet ablakot hoz létre az aktív dokumentumban + Creates a new view window for the active document + Új nézet ablakot hoz létre az aktív dokumentumban - - + + StdCmdViewExample1 - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Inventor example #1 - Feltaláló példa #1 + Inventor example #1 + Feltaláló példa #1 - Shows a 3D texture with manipulator - A kezelővel jeleníti meg a 3D textúrát + Shows a 3D texture with manipulator + A kezelővel jeleníti meg a 3D textúrát - - + + StdCmdViewExample2 - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Inventor example #2 - Feltaláló példa #2 + Inventor example #2 + Feltaláló példa #2 - Shows spheres and drag-lights - Gömb felület és mozgó fényforrás mutatása + Shows spheres and drag-lights + Gömb felület és mozgó fényforrás mutatása - - + + StdCmdViewExample3 - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Inventor example #3 - Feltaláló példa #3 + Inventor example #3 + Feltaláló példa #3 - Shows a animated texture - Animált textúra megjelenítése + Shows a animated texture + Animált textúra megjelenítése - - + + StdCmdViewFitAll - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Fit all - Összes megjelenítése + Fit all + Összes megjelenítése - Fits the whole content on the screen - A teljes tartalom töltse ki a képernyőt + Fits the whole content on the screen + A teljes tartalom töltse ki a képernyőt - - + + StdCmdViewFitSelection - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Fit selection - Kijelöltek képernyőre + Fit selection + Kijelöltek képernyőre - Fits the selected content on the screen - A kiválasztott tartalom kitöltse a képernyőt + Fits the selected content on the screen + A kiválasztott tartalom kitöltse a képernyőt - - + + StdCmdViewFront - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Front - Elölnézet + Front + Elölnézet - Set to front view - Elölnézetre állítás + Set to front view + Elölnézetre állítás - - + + StdCmdViewIvIssueCamPos - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Issue camera position - Kamera pozicionálása + Issue camera position + Kamera pozicionálása - Issue the camera position to the console and to a macro, to easily recall this position - Írd be a kamera helyzetét, hogy a konzol és a makró könnyen felvegye ezt a pozíciót + Issue the camera position to the console and to a macro, to easily recall this position + Írd be a kamera helyzetét, hogy a konzol és a makró könnyen felvegye ezt a pozíciót - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Stereo Interleaved Columns - Váltott oszlopú sztereó + Stereo Interleaved Columns + Váltott oszlopú sztereó - Switch stereo viewing to Interleaved Columns - Sztereó nézet váltása: Váltott oszloposra + Switch stereo viewing to Interleaved Columns + Sztereó nézet váltása: Váltott oszloposra - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Stereo Interleaved Rows - Váltott soros sztereó + Stereo Interleaved Rows + Váltott soros sztereó - Switch stereo viewing to Interleaved Rows - Sztereó nézet váltása: Váltott sorosra + Switch stereo viewing to Interleaved Rows + Sztereó nézet váltása: Váltott sorosra - - + + StdCmdViewIvStereoOff - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Stereo Off - Sztereó kikapcsolása + Stereo Off + Sztereó kikapcsolása - Switch stereo viewing off - Sztereó nézet kikapcsolása + Switch stereo viewing off + Sztereó nézet kikapcsolása - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Sztereó nézet váltása: quad buffer + Switch stereo viewing to quad buffer + Sztereó nézet váltása: quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Stereo red/green - Sztereó piros/zöld + Stereo red/green + Sztereó piros/zöld - Switch stereo viewing to red/green - Sztereó nézet váltása: piros/zöld + Switch stereo viewing to red/green + Sztereó nézet váltása: piros/zöld - - + + StdCmdViewLeft - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Left - Bal nézet + Left + Bal nézet - Set to left view - Bal oldali nézet beállítása + Set to left view + Bal oldali nézet beállítása - - + + StdCmdViewRear - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Rear - Hátsó nézet + Rear + Hátsó nézet - Set to rear view - Hátulnézet beállítása + Set to rear view + Hátulnézet beállítása - - + + StdCmdViewRight - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Right - Jobb + Right + Jobb - Set to right view - Jobb oldali nézet beállítása + Set to right view + Jobb oldali nézet beállítása - - + + + StdCmdViewRotateLeft + + Standard-View + Standard-nézet + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standard-nézet + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Top - Felülnézet + Top + Felülnézet - Set to top view - Felülnézet beállítása + Set to top view + Felülnézet beállítása - - + + StdCmdWhatsThis - Help - Súgó + Help + Súgó - &What's This? - &Mi ez? + &What's This? + &Mi ez? - What's This - Mi ez + What's This + Mi ez - - + + StdCmdWindows - Window - Ablak + Window + Ablak - &Windows... - Ablakok + &Windows... + Ablakok - Windows list - Ablaklista + Windows list + Ablaklista - - + + StdCmdWindowsMenu - Window - Ablak + Window + Ablak - Activates this window - Ablak aktiválása + Activates this window + Ablak aktiválása - - + + StdCmdWorkbench - View - Nézet + View + Nézet - Workbench - Munkafelület + Workbench + Munkafelület - Switch between workbenches - Váltás munkafelületek között + Switch between workbenches + Váltás munkafelületek között - - + + StdOrthographicCamera - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Orthographic view - Függőleges vetületi nézet + Orthographic view + Függőleges vetületi nézet - Switches to orthographic view mode - Váltás függőleges vetületi nézetre + Switches to orthographic view mode + Váltás függőleges vetületi nézetre - - + + StdPerspectiveCamera - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Perspective view - Perspektivikus nézet + Perspective view + Perspektivikus nézet - Switches to perspective view mode - Váltás perspektivikus nézetre + Switches to perspective view mode + Váltás perspektivikus nézetre - - + + StdViewBoxZoom - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Box zoom - Mező nagyítása + Box zoom + Mező nagyítása - - + + StdViewDockUndockFullscreen - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Document window - Dokumentum ablak + Document window + Dokumentum ablak - Display the active view either in fullscreen, in undocked or docked mode - Az aktív nézet megjelenítése teljes képernyőben, rögzített és nem rögzített módban is + Display the active view either in fullscreen, in undocked or docked mode + Az aktív nézet megjelenítése teljes képernyőben, rögzített és nem rögzített módban is - - + + StdViewScreenShot - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Save picture... - Kép mentése ... + Save picture... + Kép mentése ... - Creates a screenshot of the active view - Képernyőkép készítése az aktuális nézetről + Creates a screenshot of the active view + Képernyőkép készítése az aktuális nézetről - - + + StdViewZoomIn - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Zoom In - Nagyítás + Zoom In + Nagyítás - - + + StdViewZoomOut - Standard-View - Standard-nézet + Standard-View + Standard-nézet - Zoom Out - Kicsinyítés + Zoom Out + Kicsinyítés - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &File + &File + &File - &Edit - S&zerkesztés + &Edit + S&zerkesztés - Standard views - Alap nézetek + Standard views + Alap nézetek - &Stereo - &Sztereo + &Stereo + &Sztereo - &Zoom - &Nagyítás + &Zoom + &Nagyítás - Visibility - Láthatóság + Visibility + Láthatóság - &View - &Nézet + &View + &Nézet - &Tools - &Eszköztárak + &Tools + &Eszköztárak - &Macro - &Makró + &Macro + &Makró - &Windows - &Ablakok + &Windows + &Ablakok - &On-line help - &On-line támogatás + &On-line help + &On-line támogatás - &Help - &Súgó + &Help + &Súgó - File - Fájl + File + Fájl - Macro - Makró + Macro + Makró - View - Nézet + View + Nézet - Special Ops - Speciális lehetőségek + Special Ops + Speciális lehetőségek - - + + testClass - test - teszt + test + teszt - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Válassza ki a feladat panel stílusát + Choose the style of the Task Panel + Válassza ki a feladat panel stílusát - Default - Alapértelmezett + Default + Alapértelmezett - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_it.ts b/src/Gui/Language/FreeCAD_it.ts index cb266b1d0..b54531909 100644 --- a/src/Gui/Language/FreeCAD_it.ts +++ b/src/Gui/Language/FreeCAD_it.ts @@ -1,5496 +1,5914 @@ - - + + Angle - Form - Modulo + Form + Modulo - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Snap angolare + Angle Snap + Snap angolare - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - nessuno + none + nessuno - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Aggiungi + + + Remove + Rimuovi + + + Move up + Spostare verso l'alto + + + Move down + Sposta verso il basso + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Premi il tasto sinistro del mouse + Press left mouse button + Premi il tasto sinistro del mouse - Press SHIFT and middle mouse button - Premi MAIUSC e il pulsante centrale del mouse + Press SHIFT and middle mouse button + Premi MAIUSC e il pulsante centrale del mouse - Press middle mouse button - Premi il tasto centrale del mouse + Press middle mouse button + Premi il tasto centrale del mouse - Scroll middle mouse button - Scorri il tasto centrale del mouse + Scroll middle mouse button + Scorri il tasto centrale del mouse - - + + Gui::CADNavigationStyle - Press left mouse button - Premi il tasto sinistro del mouse + Press left mouse button + Premi il tasto sinistro del mouse - Press middle mouse button - Premi il tasto centrale del mouse + Press middle mouse button + Premi il tasto centrale del mouse - Press left and middle mouse button - Premi il tasto sinistro e il tasto centrale del mouse + Press left and middle mouse button + Premi il tasto sinistro e il tasto centrale del mouse - Scroll middle mouse button - Scorri il tasto centrale del mouse + Scroll middle mouse button + Scorri il tasto centrale del mouse - - + + Gui::Command - Standard - Standard + Standard + Standard - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Annulla + &Cancel + &Annulla - - + + Gui::ControlSingleton - Task panel - Riquadro delle attività + Task panel + Riquadro delle attività - - + + Gui::Dialog::AboutApplication - About - Informazioni su + About + Informazioni su - Revision number - Numero revisione + Revision number + Numero revisione - Version - Versione + Version + Versione - OK - OK + OK + OK - - + + - Release date - Data di rilascio + Release date + Data di rilascio - Platform - Piattaforma + Platform + Piattaforma - License... - Licenza... + License... + Licenza... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Pulsante %1 + Button %1 + Pulsante %1 - Out Of Range - Fuori dalla portata + Out Of Range + Fuori dalla portata - - + + Gui::Dialog::CommandModel - Commands - Comandi + Commands + Comandi - - + + Gui::Dialog::DemoMode - View Turntable - Visualizza rotazione oggetti + View Turntable + Visualizza rotazione oggetti - Speed - Velocità + Speed + Velocità - Maximum - Massima + Maximum + Massima - Minimum - Minima + Minimum + Minima - Fullscreen - Schermo intero + Fullscreen + Schermo intero - Enable timer - Abilita timer + Enable timer + Abilita timer - s - s + s + s - Angle - Angolo + Angle + Angolo + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Avvia - -90° - -90° + Stop + Ferma - Play - Avvia + Close + Chiudi - - Stop - Ferma - - - Close - Chiudi - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Scegli Finestra + Choose Window + Scegli Finestra - &Activate - &Attiva + &Activate + &Attiva - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Annulla + &Cancel + &Annulla - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Finestre + Windows + Finestre - - + + Gui::Dialog::DlgAuthorization - Authorization - Autorizzazione + Authorization + Autorizzazione - &OK - &OK + &OK + &OK - &Cancel - &Annulla + &Cancel + &Annulla - Password: - Password: + Password: + Password: - User name: - Nome utente: + User name: + Nome utente: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Scegli Icona + Choose Icon + Scegli Icona - OK - OK + OK + OK - Cancel - Annulla + Cancel + Annulla - Add icons... - Aggiungi icone... + Add icons... + Aggiungi icone... - - + + Gui::Dialog::DlgCustomActions - Macros - Macro + Macros + Macro - Setup Custom Macros - Configurare le Macro personali + Setup Custom Macros + Configurare le Macro personali - Macro: - Macro: + Macro: + Macro: - ... - ... + ... + ... - Pixmap - Pixmap + Pixmap + Pixmap - Accelerator: - Acceleratore: + Accelerator: + Acceleratore: - What's this: - Che cos'è questo: + What's this: + Che cos'è questo: - Status text: - Testo di stato: + Status text: + Testo di stato: - Tool tip: - Suggerimento: + Tool tip: + Suggerimento: - Menu text: - Testo di menu: + Menu text: + Testo di menu: - Add - Aggiungi + Add + Aggiungi - Remove - Rimuovi + Remove + Rimuovi - Replace - Sostituisci + Replace + Sostituisci - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Icone + Icons + Icone - Macros - Macro + Macros + Macro - No macro - Nessuna macro + No macro + Nessuna macro - No macros found. - Nessuna macro trovata. + No macros found. + Nessuna macro trovata. - Macro not found - Macro non trovata + Macro not found + Macro non trovata - Sorry, couldn't find macro file '%1'. - Non è stato possibile trovare il file macro '%1'. + Sorry, couldn't find macro file '%1'. + Non è stato possibile trovare il file macro '%1'. - Empty macro - Macro vuota + Empty macro + Macro vuota - Please specify the macro first. - Specificare prima la macro. + Please specify the macro first. + Specificare prima la macro. - Empty text - Testo vuoto + Empty text + Testo vuoto - Please specify the menu text first. - Specificare prima il menu testo. + Please specify the menu text first. + Specificare prima il menu testo. - No item selected - Nessun elemento selezionato + No item selected + Nessun elemento selezionato - Please select a macro item first. - Selezionare prima un elemento macro. + Please select a macro item first. + Selezionare prima un elemento macro. - - + + Gui::Dialog::DlgCustomCommands - Commands - Comandi + Commands + Comandi - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Categoria + Category + Categoria - Icon - Icona + Icon + Icona - Command - Comando + Command + Comando - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Tastiera + Keyboard + Tastiera - Description: - Descrizione: + Description: + Descrizione: - &Category: - &Categoria: + &Category: + &Categoria: - C&ommands: - C&omandi: + C&ommands: + C&omandi: - Current shortcut: - Scorciatoia corrente: + Current shortcut: + Scorciatoia corrente: - Press &new shortcut: - Digita la &nuova scorciatoia: + Press &new shortcut: + Digita la &nuova scorciatoia: - Currently assigned to: - Attualmente assegnata a: + Currently assigned to: + Attualmente assegnata a: - &Assign - &Assegna + &Assign + &Assegna - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Ripristina + &Reset + &Ripristina - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Ri&pristina tutto + Re&set All + Ri&pristina tutto - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Icona + Icon + Icona - Command - Comando + Command + Comando - none - nessuno + none + nessuno - Multiple defined shortcut - Scorciatoia definita più volte + Multiple defined shortcut + Scorciatoia definita più volte - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - La scorciatoia '%1' è definita più volte. Ciò potrebbe portare ad un comportamento inaspettato. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + La scorciatoia '%1' è definita più volte. Ciò potrebbe portare ad un comportamento inaspettato. - Already defined shortcut - Scorciatoia già definita + Already defined shortcut + Scorciatoia già definita - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - La scorciatoia '%1' è già stata assegnata a '%2'. + La scorciatoia '%1' è già stata assegnata a '%2'. -Definire un'altra scorciatoia. +Definire un'altra scorciatoia. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Barre degli strumenti + Toolbox bars + Barre degli strumenti - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Barre degli strumenti + Toolbars + Barre degli strumenti - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Nota:</span> Le modifiche diverranno attive al prossimo avvio dell'ambiente appropriato</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Nota:</span> Le modifiche diverranno attive al prossimo avvio dell'ambiente appropriato</p></body></html> - Move right - Sposta verso destra + Move right + Sposta verso destra - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Sposta l'elemento selezionato un livello in basso.</b><p>Questo cambierà anche il livello degli elementi padre.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Sposta l'elemento selezionato un livello in basso.</b><p>Questo cambierà anche il livello degli elementi padre.</p> - Move left - Sposta verso sinistra + Move left + Sposta verso sinistra - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Sposta l'elemento selezionato un livello in alto.</b><p>Questo cambierà anche il livello degli elementi padre.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Sposta l'elemento selezionato un livello in alto.</b><p>Questo cambierà anche il livello degli elementi padre.</p> - Move down - Sposta verso il basso + Move down + Sposta verso il basso - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> - Move up - Spostare verso l'alto + Move up + Spostare verso l'alto - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> - New... - Nuovo... + New... + Nuovo... - Rename... - Rinomina... + Rename... + Rinomina... - Delete - Elimina + Delete + Elimina - Icon - Icona + Icon + Icona - Command - Comando + Command + Comando - <Separator> - <Separatore> + <Separator> + <Separatore> - New toolbar - Nuova barra degli strumenti + New toolbar + Nuova barra degli strumenti - Toolbar name: - Nome della barra degli strumenti: + Toolbar name: + Nome della barra degli strumenti: - Duplicated name - Nome duplicato + Duplicated name + Nome duplicato - The toolbar name '%1' is already used - Il nome della barra degli strumenti '%1' è già usato + The toolbar name '%1' is already used + Il nome della barra degli strumenti '%1' è già usato - Rename toolbar - Rinomina la barra degli strumenti + Rename toolbar + Rinomina la barra degli strumenti - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Personalizza + Customize + Personalizza - &Help - &Aiuto + &Help + &Aiuto - &Close - &Chiudi + &Close + &Chiudi - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - Nessun Spaceball Presente + No Spaceball Present + Nessun Spaceball Presente - Buttons - Pulsanti + Buttons + Pulsanti - Clear - Pulisci + Clear + Pulisci - Print Reference - Stampa riferimento + Print Reference + Stampa riferimento - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Visualizza le proprietà + Display properties + Visualizza le proprietà - Display - Visualizzazione + Display + Visualizzazione - Transparency: - Trasparenza: + Transparency: + Trasparenza: - Line width: - Spessore linea: + Line width: + Spessore linea: - Point size: - Dimensione punto: + Point size: + Dimensione punto: - Material - Materiale + Material + Materiale - ... - ... + ... + ... - Close - Chiudi + Close + Chiudi - Viewing mode - Modalità di visualizzazione + Viewing mode + Modalità di visualizzazione - Display mode: - Modo di visualizzazione: + Display mode: + Modo di visualizzazione: - Plot mode: - Modo di stampa: + Plot mode: + Modo di stampa: - - + + - Line transparency: - Trasparenza linea: + Line transparency: + Trasparenza linea: - Line color: - Colore linea: + Line color: + Colore linea: - Shape color: - Colore forma: + Shape color: + Colore forma: - Color plot: - Colore trama: + Color plot: + Colore trama: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Editor + Editor + Editor - Options - Opzioni + Options + Opzioni - Enable line numbers - Abilita la numerazione delle linee + Enable line numbers + Abilita la numerazione delle linee - Enable folding - Abilita il folding + Enable folding + Abilita il folding - Indentation - Indentazione + Indentation + Indentazione - Insert spaces - Inserisci spazi + Insert spaces + Inserisci spazi - Tab size: - Dimensione della tabulazione: + Tab size: + Dimensione della tabulazione: - Indent size: - Dimensione dell'indentazione: + Indent size: + Dimensione dell'indentazione: - Keep tabs - Mantieni le tabulazioni + Keep tabs + Mantieni le tabulazioni - Display Items - Visualizzazione elementi + Display Items + Visualizzazione elementi - Family: - Tipo di carattere: + Family: + Tipo di carattere: - Size: - Dimensione: + Size: + Dimensione: - Preview: - Anteprima: + Preview: + Anteprima: - - + + - - + + Gui::Dialog::DlgGeneral - General - Generale + General + Generale - Start up - Avvio + Start up + Avvio - Enable splash screen at start up - Abilita la schermata iniziale all'avvio + Enable splash screen at start up + Abilita la schermata iniziale all'avvio - Switch to tab of report window: - Passa alla finestra di report: + Switch to tab of report window: + Passa alla finestra di report: - Auto load module after start up: - Caricamento automatico del modulo dopo l'avvio: + Auto load module after start up: + Caricamento automatico del modulo dopo l'avvio: - Language - Lingua + Language + Lingua - Change language: - Cambia lingua: + Change language: + Cambia lingua: - Main window - Finestra principale + Main window + Finestra principale - Size of recent file list - Dimensione della lista dei file recenti + Size of recent file list + Dimensione della lista dei file recenti - Window style: - Stile della finestra: + Window style: + Stile della finestra: - Size of toolbar icons: - Dimensione delle icone della barra degli strumenti: + Size of toolbar icons: + Dimensione delle icone della barra degli strumenti: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Predefinita (%1 x %1) + Default (%1 x %1) + Predefinita (%1 x %1) - Small (%1 x %1) - Piccola (%1 x %1) + Small (%1 x %1) + Piccola (%1 x %1) - Large (%1 x %1) - Grande (%1 x %1) + Large (%1 x %1) + Grande (%1 x %1) - Extra large (%1 x %1) - Molto grande (%1 x %1) + Extra large (%1 x %1) + Molto grande (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Input + Input + Input - OK - OK + OK + OK - Cancel - Annulla + Cancel + Annulla - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Ispettore di scena + Scene Inspector + Ispettore di scena - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Esegui la macro + Execute macro + Esegui la macro - Macro name: - Nome macro: + Macro name: + Nome macro: - Macro destination: - Percorso Macro: + Macro destination: + Percorso Macro: - Execute - Esegui + Execute + Esegui - Close - Chiudi + Close + Chiudi - Create - Crea + Create + Crea - Delete - Elimina + Delete + Elimina - Edit - Modifica + Edit + Modifica - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Macro + Macros + Macro - Macro file - File macro + Macro file + File macro - Enter a file name, please: - Inserisci un nome file: + Enter a file name, please: + Inserisci un nome file: - Existing file - File esistente + Existing file + File esistente - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Il file esiste già. - Delete macro - Cancella macro + Delete macro + Cancella macro - Do you really want to delete the macro '%1'? - Vuoi veramente cancellare la macro '%1'? + Do you really want to delete the macro '%1'? + Vuoi veramente cancellare la macro '%1'? - Cannot create file - Impossibile creare il file + Cannot create file + Impossibile creare il file - Creation of file '%1' failed. - Creazione del file '%1' non riuscita. + Creation of file '%1' failed. + Creazione del file '%1' non riuscita. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Registrazione macro + Macro recording + Registrazione macro - Macro name: - Nome macro: + Macro name: + Nome macro: - Stop - Ferma + Stop + Ferma - Cancel - Annulla + Cancel + Annulla - Macro path: - Percorso macro: + Macro path: + Percorso macro: - ... - ... + ... + ... - Record - Registra + Record + Registra - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Registratore macro + Macro recorder + Registratore macro - Specify first a place to save. - Specificare prima dove salvare. + Specify first a place to save. + Specificare prima dove salvare. - Existing macro - Macro esistente + Existing macro + Macro esistente - The macro '%1' already exists. Do you want to overwrite? - La macro '%1' esiste già. Vuoi sovrasciverla? + The macro '%1' already exists. Do you want to overwrite? + La macro '%1' esiste già. Vuoi sovrasciverla? - The macro directory doesn't exist. Please, choose another one. - La cartella delle macro non esiste. Sceglierne un'altra. + The macro directory doesn't exist. Please, choose another one. + La cartella delle macro non esiste. Sceglierne un'altra. - Choose macro directory - Scegli la cartella delle macro + Choose macro directory + Scegli la cartella delle macro - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Proprietà del materiale + Material properties + Proprietà del materiale - &Close - &Chiudi + &Close + &Chiudi - Alt+C - Alt+C + Alt+C + Alt+C - Material - Materiale + Material + Materiale - Diffuse color: - Colore diffuso: + Diffuse color: + Colore diffuso: - Specular color: - Colore speculare: + Specular color: + Colore speculare: - Shininess: - Brillantezza: + Shininess: + Brillantezza: - % - % + % + % - Ambient color: - Colore ambiente: + Ambient color: + Colore ambiente: - - + + - Emissive color: - Colore di emissione: + Emissive color: + Colore di emissione: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Aiuto in linea + On-line help + Aiuto in linea - Help viewer - Visualizzatore Aiuto + Help viewer + Visualizzatore Aiuto - Location of start page - Posizione della pagina iniziale + Location of start page + Posizione della pagina iniziale - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - File HTML (*.html *.htm) + HTML files (*.html *.htm) + File HTML (*.html *.htm) - Access denied - Accesso negato + Access denied + Accesso negato - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Accesso negato a '%1' + Accesso negato a '%1' -Specificare un'altra cartella. +Specificare un'altra cartella. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Editor parametri + Parameter Editor + Editor parametri - Save to disk - Salva su disco + Save to disk + Salva su disco - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Chiudi + &Close + &Chiudi - - + + Gui::Dialog::DlgParameterImp - Group - Gruppo + Group + Gruppo - Name - Nome + Name + Nome - Type - Tipo + Type + Tipo - Value - Valore + Value + Valore - User parameter - Parametri utente + User parameter + Parametri utente - Invalid input - Input non valido + Invalid input + Input non valido - Invalid key name '%1' - Nome chiave '%1' non valido + Invalid key name '%1' + Nome chiave '%1' non valido - System parameter - Parametro di sistema + System parameter + Parametro di sistema - - + + Gui::Dialog::DlgPreferences - Preferences - Preferenze + Preferences + Preferenze - &Help - &Aiuto + &Help + &Aiuto - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &OK + &OK + &OK - &Apply - &Applica + &Apply + &Applica - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Annulla + &Cancel + &Annulla - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Parametro errato + Wrong parameter + Parametro errato - - + + Gui::Dialog::DlgProjectInformation - Project information - Informazioni sul progetto + Project information + Informazioni sul progetto - Information - Informazioni + Information + Informazioni - &Name: - &Nome: + &Name: + &Nome: - Commen&t: - Commen&to: + Commen&t: + Commen&to: - Path: - Percorso: + Path: + Percorso: - &Last modified by: - &Ultima modifica effettuata da: + &Last modified by: + &Ultima modifica effettuata da: - Created &by: - Creato &da: + Created &by: + Creato &da: - Com&pany: - So&cietà: + Com&pany: + So&cietà: - Last &modification date: - Data &ultima modifica: + Last &modification date: + Data &ultima modifica: - Creation &date: - Data &di creazione: + Creation &date: + Data &di creazione: - &OK - &OK + &OK + &OK - &Cancel - &Annulla + &Cancel + &Annulla - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Utilità di progetto + Project utility + Utilità di progetto - Extract project - Estrai progetto + Extract project + Estrai progetto - Source - Fonte + Source + Fonte - Project file (*.fcstd) - File di progetto (*. fcstd) + Project file (*.fcstd) + File di progetto (*. fcstd) - Destination - Destinazione + Destination + Destinazione - Extract - Estrai + Extract + Estrai - Create project - Crea progetto + Create project + Crea progetto - Document.xml - Document.xml + Document.xml + Document.xml - Create - Crea + Create + Crea - Load project file after creation - Carica il file di progetto dopo la creazione + Load project file after creation + Carica il file di progetto dopo la creazione - Empty source - Fonte vuota + Empty source + Fonte vuota - No source is defined. - Nessuna fonte è definita. + No source is defined. + Nessuna fonte è definita. - Empty destination - Destinazione vuota + Empty destination + Destinazione vuota - No destination is defined. - Non è definita alcuna destinazione. + No destination is defined. + Non è definita alcuna destinazione. - - + + Gui::Dialog::DlgReportView - Output window - Finestra di Output + Output window + Finestra di Output - Output - Output + Output + Output - Record log messages - Registra messaggi di log + Record log messages + Registra messaggi di log - Record warnings - Registra avvisi + Record warnings + Registra avvisi - Record error messages - Registra messaggi di errore + Record error messages + Registra messaggi di errore - Colors - Colori + Colors + Colori - Normal messages: - Messaggi normali: + Normal messages: + Messaggi normali: - Log messages: - Messaggi di log: + Log messages: + Messaggi di log: - Warnings: - Avvisi: + Warnings: + Avvisi: - Errors: - Errori: + Errors: + Errori: - - + + - Redirect internal Python errors to report view - Reindirizzare gli errori interni di Python alla finestra di report + Redirect internal Python errors to report view + Reindirizzare gli errori interni di Python alla finestra di report - Redirect internal Python output to report view - Reindirizzare l'output interno di Python nella vista report + Redirect internal Python output to report view + Reindirizzare l'output interno di Python nella vista report - - + + Gui::Dialog::DlgRunExternal - Running external program - Esecuzione programma esterno + Running external program + Esecuzione programma esterno - TextLabel - Etichetta Testo + TextLabel + Etichetta Testo - Advanced >> - Avanzate >> + Advanced >> + Avanzate >> - ... - ... + ... + ... - Accept changes - Accetta le modifiche + Accept changes + Accetta le modifiche - Discard changes - Ignorare le modifiche + Discard changes + Ignorare le modifiche - Abort program - Interrompere il programma + Abort program + Interrompere il programma - Help - Aiuto + Help + Aiuto - Select a file - Seleziona un file + Select a file + Seleziona un file - - + + Gui::Dialog::DlgSettings3DView - 3D View - Vista 3D + 3D View + Vista 3D - 3D View settings - Impostazioni Vista 3D + 3D View settings + Impostazioni Vista 3D - Show coordinate system in the corner - Mostra le coordinate di sistema nell'angolo + Show coordinate system in the corner + Mostra le coordinate di sistema nell'angolo - Show counter of frames per second - Mostra contatore frame per secondo + Show counter of frames per second + Mostra contatore frame per secondo - Enable animation - Abilita animazione + Enable animation + Abilita animazione - Enable anti-aliasing (slower) - Attiva anti-aliasing + Enable anti-aliasing (slower) + Attiva anti-aliasing - Eye to eye distance for stereo modes: - Distanza tra gli occhi per le modalità stereo: + Eye to eye distance for stereo modes: + Distanza tra gli occhi per le modalità stereo: - Camera type - Tipo di camera + Camera type + Tipo di camera - Orthographic rendering - Render ortografico + Orthographic rendering + Render ortografico - Perspective rendering - Render prospettico + Perspective rendering + Render prospettico - - + + - 3D Navigation - Navigazione 3D + 3D Navigation + Navigazione 3D - Mouse... - Mouse... + Mouse... + Mouse... - Intensity of backlight - Intensità della retroilluminazione + Intensity of backlight + Intensità della retroilluminazione - Enable backlight color - Attiva il colore di retroilluminazione + Enable backlight color + Attiva il colore di retroilluminazione - Orbit style - Stile Orbita + Orbit style + Stile Orbita - Turntable - Piatto + Turntable + Piatto - Trackball - Trackball + Trackball + Trackball - Invert zoom - Inverti zoom + Invert zoom + Inverti zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - Navigazione %1 + %1 navigation + Navigazione %1 - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Modello di colore + Color model + Modello di colore - &Gradient: - &Gradiente: + &Gradient: + &Gradiente: - red-yellow-green-cyan-blue - rosso-giallo-verde-ciano-blu + red-yellow-green-cyan-blue + rosso-giallo-verde-ciano-blu - blue-cyan-green-yellow-red - blu-ciano-verde-giallo-rosso + blue-cyan-green-yellow-red + blu-ciano-verde-giallo-rosso - white-black - bianco-nero + white-black + bianco-nero - black-white - nero-bianco + black-white + nero-bianco - Visibility - Visibilità + Visibility + Visibilità - Out g&rayed - Uscita in scala di g&rigi + Out g&rayed + Uscita in scala di g&rigi - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Uscita &invisibile + Out &invisible + Uscita &invisibile - Alt+I - Alt+I + Alt+I + Alt+I - Style - Stile + Style + Stile - &Zero - &Zero + &Zero + &Zero - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Flusso + &Flow + &Flusso - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Annulla + &Cancel + &Annulla - Parameter range - Intervallo parametro + Parameter range + Intervallo parametro - Mi&nimum: - Mi&nimo: + Mi&nimum: + Mi&nimo: - Ma&ximum: - Ma&ssimo: + Ma&ximum: + Ma&ssimo: - &Labels: - &Etichette: + &Labels: + &Etichette: - &Decimals: - &Decimali: + &Decimals: + &Decimali: - - + + - Color-gradient settings - Impostazioni del gradiente di colore + Color-gradient settings + Impostazioni del gradiente di colore - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Parametro errato + Wrong parameter + Parametro errato - The maximum value must be higher than the minimum value. - Il valore massimo deve essere maggiore del valore minimo. + The maximum value must be higher than the minimum value. + Il valore massimo deve essere maggiore del valore minimo. - - + + Gui::Dialog::DlgSettingsDocument - Document - Documento + Document + Documento - General - Generale + General + Generale - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Livello di compressione di salvataggio del documento + Livello di compressione di salvataggio del documento (0 = nessuno, 9 = massimo, 3 = normale) - Create new document at start up - Crea un nuovo documento all'avvio + Create new document at start up + Crea un nuovo documento all'avvio - Storage - Archiviazione + Storage + Archiviazione - Saving transactions (Auto-save) - Salvataggio delle transazioni (Salvataggio automatico) + Saving transactions (Auto-save) + Salvataggio delle transazioni (Salvataggio automatico) - Discard saved transaction after saving document - Elimina le transazioni dopo il salvataggio del documento + Discard saved transaction after saving document + Elimina le transazioni dopo il salvataggio del documento - Save thumbnail into project file when saving document - Salva la miniatura nel file del progetto al salvataggio del documento + Save thumbnail into project file when saving document + Salva la miniatura nel file del progetto al salvataggio del documento - Create up to backup files when resaving document - Numero di file di backup quando si salva di nuovo il documento + Create up to backup files when resaving document + Numero di file di backup quando si salva di nuovo il documento - Document objects - Oggetti del documento + Document objects + Oggetti del documento - Allow duplicate object labels in one document - Consente la duplicazione delle etichette degli oggetti in uno stesso documento + Allow duplicate object labels in one document + Consente la duplicazione delle etichette degli oggetti in uno stesso documento - Maximum Undo/Redo steps - Massimo numero di passaggi di Annulla/Modifica + Maximum Undo/Redo steps + Massimo numero di passaggi di Annulla/Modifica - Using Undo/Redo on documents - Utilizzo di Annulla/Ripeti sui documenti + Using Undo/Redo on documents + Utilizzo di Annulla/Ripeti sui documenti - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Testo + Text + Testo - Bookmark - Segnalibro + Bookmark + Segnalibro - Breakpoint - Interruzione + Breakpoint + Interruzione - Keyword - Parola chiave + Keyword + Parola chiave - Comment - Commento + Comment + Commento - Block comment - Blocco di commento + Block comment + Blocco di commento - Number - Numero + Number + Numero - String - Stringa + String + Stringa - Character - Carattere + Character + Carattere - Class name - Nome della classe + Class name + Nome della classe - Define name - Nome definito + Define name + Nome definito - Operator - Operatore + Operator + Operatore - Python output - Output Python + Python output + Output Python - Python error - Errore Python + Python error + Errore Python - Items - Elementi + Items + Elementi - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Impostazioni immagine + Image settings + Impostazioni immagine - Image properties - Proprietà immagine + Image properties + Proprietà immagine - Back&ground: - Sfo&ndo + Back&ground: + Sfo&ndo - Current - Corrente + Current + Corrente - White - Bianco + White + Bianco - Black - Nero + Black + Nero - Transparent - Trasparente + Transparent + Trasparente - Image dimensions - Dimensioni immagine + Image dimensions + Dimensioni immagine - Pixel - pixel + Pixel + pixel - &Width: - &Larghezza: + &Width: + &Larghezza: - Current screen - Schermo corrente + Current screen + Schermo corrente - Icon 32 x 32 - Icona 32 x 32 + Icon 32 x 32 + Icona 32 x 32 - Icon 64 x 64 - Icona 64 x 64 + Icon 64 x 64 + Icona 64 x 64 - Icon 128 x 128 - Icona 128 x 128 + Icon 128 x 128 + Icona 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Dimensioni standard: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Altezza: - Standard sizes: - Dimensioni standard: + Aspect ratio: + Proporzioni: - &Height: - &Altezza: + &Screen + &Schermo - Aspect ratio: - Proporzioni: + Alt+S + Alt+S - &Screen - &Schermo + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Commento immagine - Alt+1 - Alt+1 + Insert MIBA + Inserisci MIBA - Image comment - Commento immagine + Insert comment + Inserisci commento - - Insert MIBA - Inserisci MIBA - - - Insert comment - Inserisci commento - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Macro + Macro + Macro - Macro recording settings - Impostazioni di registrazione macro + Macro recording settings + Impostazioni di registrazione macro - Logging Commands - Comandi di log + Logging Commands + Comandi di log - Show script commands in python console - Mostra i comandi di script nella console Python + Show script commands in python console + Mostra i comandi di script nella console Python - Log all commands issued by menus to file: - Registra tutti i comandi emessi dai menu al file: + Log all commands issued by menus to file: + Registra tutti i comandi emessi dai menu al file: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Comandi d'interfaccia utente + Gui commands + Comandi d'interfaccia utente - Recording GUI commands - Registrazione dei comandi d'interfaccia utente + Recording GUI commands + Registrazione dei comandi d'interfaccia utente - Record as comment - Registra come commento + Record as comment + Registra come commento - Macro path - Percorso macro + Macro path + Percorso macro - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Unità + Units + Unità - Units settings - Impostazioni unità + Units settings + Impostazioni unità - Standard (mm/kg/s/degree) - Standard (mm/kg/s/gradi) + Standard (mm/kg/s/degree) + Standard (mm/kg/s/gradi) - MKS (m/kg/s/degree) - MKS (m/kg/s/gradi) + MKS (m/kg/s/degree) + MKS (m/kg/s/gradi) - Magnitude - Grandezza + Magnitude + Grandezza - Unit - Unità + Unit + Unità - User system: - Sistema utente: + User system: + Sistema utente: - Imperial (in/lb) - Imperiale (in/lb) + Imperial (in/lb) + Imperiale (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Colori + Colors + Colori - Selection - Selezione + Selection + Selezione - Enable selection highlighting - Attiva l'evidenziamento di selezione + Enable selection highlighting + Attiva l'evidenziamento di selezione - Enable preselection highlighting - Attiva l'evidenziamento di preselezione + Enable preselection highlighting + Attiva l'evidenziamento di preselezione - Background color - Colore dello sfondo + Background color + Colore dello sfondo - Middle color - Colore centrale + Middle color + Colore centrale - Color gradient - Gradiente di colore + Color gradient + Gradiente di colore - Simple color - Colore semplice + Simple color + Colore semplice - Default colors - Colori predefiniti + Default colors + Colori predefiniti - Edited edge color - Colore degli spigoli modificati + Edited edge color + Colore degli spigoli modificati - Edited vertex color - Colore dei vertici modificati + Edited vertex color + Colore dei vertici modificati - Construction geometry - Geometria di costruzione + Construction geometry + Geometria di costruzione - Fully constrained geometry - Geometria interamente vincolata + Fully constrained geometry + Geometria interamente vincolata - The color of construction geometry in editmode - Il colore della geometria di costruzione in modalità modifica + The color of construction geometry in editmode + Il colore della geometria di costruzione in modalità modifica - The color of fully constrained geometry in editmode - Il colore della geometria completamente vincolata in modalità modifica + The color of fully constrained geometry in editmode + Il colore della geometria completamente vincolata in modalità modifica - The color of vertices being edited - Il colore dei vertici in fase di modifica + The color of vertices being edited + Il colore dei vertici in fase di modifica - The color of edges being edited - Il colore degli spigoli in fase di modifica + The color of edges being edited + Il colore degli spigoli in fase di modifica - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Consiglio del giorno + Tip of the day + Consiglio del giorno - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Lo sapevi che...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Lo sapevi che...</font></font></b> - &Show tips at start up - &Mostra i consigli all'avvio + &Show tips at start up + &Mostra i consigli all'avvio - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Prossimo consiglio + &Next Tip + &Prossimo consiglio - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Chiudi + &Close + &Chiudi - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Download non riuscito: %1 + Download non riuscito: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Se vuoi saperne di più su FreeCAD vai a %1 o premi Aiuto nel menu Aiuto. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Se vuoi saperne di più su FreeCAD vai a %1 o premi Aiuto nel menu Aiuto. - - + + Gui::Dialog::DockablePlacement - Placement - Posizionamento + Placement + Posizionamento - - + + Gui::Dialog::DownloadDialog - Canceled. - Annullato + Canceled. + Annullato - - + + Download + + + + Cancel + Annulla + + + Close + Chiudi + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Download non riuscito: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Aggiungi icona + Add icon + Aggiungi icona - - + + Gui::Dialog::InputVector - Input vector - Immetti vettore + Input vector + Immetti vettore - Vector - Vettore + Vector + Vettore - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Tasti del mouse + Mouse buttons + Tasti del mouse - Configuration - Configurazione + Configuration + Configurazione - Selection: - Selezione: + Selection: + Selezione: - Panning - Panoramica + Panning + Panoramica - Rotation: - Rotazione: + Rotation: + Rotazione: - Zooming: - Zoom: + Zooming: + Zoom: - - + + Gui::Dialog::ParameterGroup - Expand - Espandi + Expand + Espandi - Add sub-group - Aggiungi sottogruppo + Add sub-group + Aggiungi sottogruppo - Remove group - Rimuovi gruppo + Remove group + Rimuovi gruppo - Rename group - Rinomina gruppo + Rename group + Rinomina gruppo - Export parameter - Esporta parametro + Export parameter + Esporta parametro - Import parameter - Importa parametro + Import parameter + Importa parametro - Collapse - Riduci + Collapse + Riduci - Do really want to remove this parameter group? - Vuoi veramente rimuonere questo gruppo di parametri? + Do really want to remove this parameter group? + Vuoi veramente rimuonere questo gruppo di parametri? - Existing sub-group - Sottogruppo esistente + Existing sub-group + Sottogruppo esistente - The sub-group '%1' already exists. - Il sottogruppo '%1' esiste già. + The sub-group '%1' already exists. + Il sottogruppo '%1' esiste già. - Export parameter to file - Esporta il parametro in un file + Export parameter to file + Esporta il parametro in un file - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Importa il parametro da un file + Import parameter from file + Importa il parametro da un file - Import Error - Errore durante l'importazione + Import Error + Errore durante l'importazione - Reading from '%1' failed. - Lettura da '%1' non riuscita. + Reading from '%1' failed. + Lettura da '%1' non riuscita. - - + + Gui::Dialog::ParameterValue - Change value - Cambia valore + Change value + Cambia valore - Remove key - Rimuovi la chiave + Remove key + Rimuovi la chiave - Rename key - Rinomina la chiave + Rename key + Rinomina la chiave - New - Nuovo + New + Nuovo - New string item - Nuovo elemento string + New string item + Nuovo elemento string - New float item - Nuovo elemento float + New float item + Nuovo elemento float - New integer item - Nuovo elemento integer + New integer item + Nuovo elemento integer - New unsigned item - Nuovo elemento unsigned + New unsigned item + Nuovo elemento unsigned - New Boolean item - Nuovo elemento boolean + New Boolean item + Nuovo elemento boolean - Existing item - Elemento esistente + Existing item + Elemento esistente - The item '%1' already exists. - L'elemento '%1' esiste già. + The item '%1' already exists. + L'elemento '%1' esiste già. - - + + Gui::Dialog::Placement - Placement - Posizionamento + Placement + Posizionamento - OK - OK + OK + OK - Translation: - Traslazione: + Translation: + Traslazione: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotazione: + Rotation: + Rotazione: - Angle: - Angolo: + Angle: + Angolo: - Axis: - Asse: + Axis: + Asse: - Center: - Centro: + Center: + Centro: - Pitch: - Beccheggio: + Pitch: + Beccheggio: - Roll: - Rollio: + Roll: + Rollio: - Yaw: - Imbardata: + Yaw: + Imbardata: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Angoli di Eulero + Euler angles + Angoli di Eulero - Apply placement changes immediately - Applica immediatamente le modifiche di posizionamento + Apply placement changes immediately + Applica immediatamente le modifiche di posizionamento - Apply incremental changes to object placement - Applica le modifiche incrementali al posizionamento dell'oggetto + Apply incremental changes to object placement + Applica le modifiche incrementali al posizionamento dell'oggetto - Apply - Applica + Apply + Applica - Reset - Ripristina + Reset + Ripristina - Close - Chiudi + Close + Chiudi - - + + Gui::Dialog::PrintModel - Button - Pulsante + Button + Pulsante - Command - Comando + Command + Comando - - + + Gui::Dialog::SceneInspector - Dialog - Finestra di dialogo + Dialog + Finestra di dialogo - Close - Chiudi + Close + Chiudi - Refresh - Aggiorna + Refresh + Aggiorna - - + + Gui::Dialog::SceneModel - Inventor Tree - Albero Inventor + Inventor Tree + Albero Inventor - Nodes - Nodi + Nodes + Nodi - - + + Gui::Dialog::TextureMapping - Texture - Texture + Texture + Texture - Texture mapping - Mappatura texture + Texture mapping + Mappatura texture - Global - Globale + Global + Globale - Environment - Ambiente + Environment + Ambiente - Image files (%1) - File immagine (%1) + Image files (%1) + File immagine (%1) - No image - Nessuna immagine + No image + Nessuna immagine - The specified file is not a valid image file. - Il file specificato non è un file immagine valido. + The specified file is not a valid image file. + Il file specificato non è un file immagine valido. - No 3d view - Nessuna vista 3D + No 3d view + Nessuna vista 3D - No active 3d view found. - Nessuna vista 3D attiva trovata. + No active 3d view found. + Nessuna vista 3D attiva trovata. - - + + Gui::Dialog::Transform - Cancel - Annulla + Cancel + Annulla - Transform - Trasforma + Transform + Trasforma - - + + Gui::DlgTreeWidget - Dialog - Finestra di dialogo + Dialog + Finestra di dialogo - Items - Elementi + Items + Elementi - OK - OK + OK + OK - Cancel - Annulla + Cancel + Annulla - - + + - - + + Gui::DockWnd::CombiView - CombiView - Vista combinata + CombiView + Vista combinata - Project - Progetto + Project + Progetto - Tasks - Azioni + Tasks + Azioni - - + + Gui::DockWnd::HelpView - Previous - Precedente + Previous + Precedente - Next - Successivo + Next + Successivo - Home - Home + Home + Home - Open - Apri + Open + Apri - Open file - Apri file + Open file + Apri file - All HTML files (*.html *.htm) - Tutti i file HTML (*.html *.htm) + All HTML files (*.html *.htm) + Tutti i file HTML (*.html *.htm) - External browser - Browser esterno + External browser + Browser esterno - No external browser found. Specify in preferences, please - Nessun browser esterno trovato. Specificarlo nelle preferenze + No external browser found. Specify in preferences, please + Nessun browser esterno trovato. Specificarlo nelle preferenze - Starting of %1 failed - Avvio di %1 non riuscita + Starting of %1 failed + Avvio di %1 non riuscita - - + + Gui::DockWnd::PropertyDockView - Property View - Proprietà + Property View + Proprietà - - + + Gui::DockWnd::ReportOutput - Logging - Registro + Logging + Registro - Warning - Avviso + Warning + Avviso - Error - Errore + Error + Errore - Options - Opzioni + Options + Opzioni - Clear - Pulisci + Clear + Pulisci - Save As... - Salva con nome... + Save As... + Salva con nome... - Save Report Output - Salva report di output + Save Report Output + Salva report di output - Plain Text Files (*.txt *.log) - File di testo (*.txt *.log) + Plain Text Files (*.txt *.log) + File di testo (*.txt *.log) - Go to end - Vai alla fine + Go to end + Vai alla fine - Redirect Python output - Reindirizza l'output Python + Redirect Python output + Reindirizza l'output Python - Redirect Python errors - Reindirizza gli errori di Python + Redirect Python errors + Reindirizza gli errori di Python - - + + Gui::DockWnd::ReportView - Output - Output + Output + Output - Python console - Console Python + Python console + Console Python - - + + Gui::DockWnd::SelectionView - Property View - Proprietà + Property View + Proprietà - - + + Gui::DockWnd::TaskPanelView - Task View - Attività + Task View + Attività - - + + Gui::DockWnd::TextBrowser - Could not open file. - Impossibile aprire il file. + Could not open file. + Impossibile aprire il file. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Si è provato ad accedere all'indirizzo %1 che non è disponibile. Assicurarsi che quell'URL esista e provare a ricaricare la pagina. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Si è provato ad accedere all'indirizzo %1 che non è disponibile. Assicurarsi che quell'URL esista e provare a ricaricare la pagina. - Connecting to %1 - Connessione a %1 + Connecting to %1 + Connessione a %1 - Sending to %1 - Invio a %1 + Sending to %1 + Invio a %1 - Reading from %1 - Lettura da %1 + Reading from %1 + Lettura da %1 - Download failed: %1. - Download non riuscito: %1. + Download failed: %1. + Download non riuscito: %1. - Previous - Precedente + Previous + Precedente - Forward - Avanti + Forward + Avanti - Home - Home + Home + Home - Refresh - Aggiorna + Refresh + Aggiorna - Copy - Copia + Copy + Copia - Select all - Seleziona tutto + Select all + Seleziona tutto - No description for - Nessuna descrizione per + No description for + Nessuna descrizione per - - + + Gui::DocumentModel - Application - Applicazione + Application + Applicazione - Labels & Attributes - Etichette & Attributi + Labels & Attributes + Etichette & Attributi - - + + Gui::EditorView - Modified file - File modificato + Modified file + File modificato - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. -Questo è stato modificato al di fuori dell'editor sorgente. Vuoi ricaricarlo? +Questo è stato modificato al di fuori dell'editor sorgente. Vuoi ricaricarlo? - Unsaved document - Documento non salvato + Unsaved document + Documento non salvato - The document has been modified. + The document has been modified. Do you want to save your changes? - Il documento è stato modificato. + Il documento è stato modificato. Si desidera salvare le modifiche? - FreeCAD macro (*.FCMacro);;Python (*.py) - Macro FreeCAD (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + Macro FreeCAD (*.FCMacro);;Python (*.py) - Export PDF - Esporta in formato PDF + Export PDF + Esporta in formato PDF - PDF file (*.pdf) - File PDF (*.pdf) + PDF file (*.pdf) + File PDF (*.pdf) - untitled[*] - Senza titolo[*] + untitled[*] + Senza titolo[*] - - Editor - - Editor + - Editor + - Editor - %1 chars removed - %1 caratteri rimossi + %1 chars removed + %1 caratteri rimossi - %1 chars added - %1 caratteri aggiunti + %1 chars added + %1 caratteri aggiunti - Formatted - Formattato + Formatted + Formattato - - + + Gui::FileChooser - Select a file - Seleziona un file + Select a file + Seleziona un file - Select a directory - Seleziona una cartella + Select a directory + Seleziona una cartella - - + + Gui::FileDialog - Save as - Salva con nome + Save as + Salva con nome - Open - Apri + Open + Apri - - + + Gui::FileOptionsDialog - Extended - Esteso + Extended + Esteso - All files (*.*) - Tutti i file (*.*) + All files (*.*) + Tutti i file (*.*) - - + + Gui::Flag - Top left - In alto a sinistra + Top left + In alto a sinistra - Bottom left - In basso a sinistra + Bottom left + In basso a sinistra - Top right - In alto a destra + Top right + In alto a destra - Bottom right - In basso a destra + Bottom right + In basso a destra - Remove - Rimuovi + Remove + Rimuovi - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Premere CTRL e il tasto sinistro del mouse + Press CTRL and left mouse button + Premere CTRL e il tasto sinistro del mouse - Press middle mouse button - Premi il tasto centrale del mouse + Press middle mouse button + Premi il tasto centrale del mouse - Press left mouse button - Premi il tasto sinistro del mouse + Press left mouse button + Premi il tasto sinistro del mouse - Scroll middle mouse button - Scorri il tasto centrale del mouse + Scroll middle mouse button + Scorri il tasto centrale del mouse - - + + Gui::LocationDialog - Wrong direction - Direzione sbagliata + Wrong direction + Direzione sbagliata - Direction must not be the null vector - La direzione non può essere un vettore nullo + Direction must not be the null vector + La direzione non può essere un vettore nullo - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Definito dall'utente... + User defined... + Definito dall'utente... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Macro + Macros + Macro - - + + Gui::MainWindow - Dimension - Dimensione + Dimension + Dimensione - Ready - Pronto + Ready + Pronto - Toggles this toolbar - Nascondi questa barra degli strumenti + Toggles this toolbar + Nascondi questa barra degli strumenti - Toggles this dockable window - Nascondi questa finestra + Toggles this dockable window + Nascondi questa finestra - Close All - Chiudi tutto + Close All + Chiudi tutto - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Download iniziato... + Download iniziato... - - + + Gui::ProgressBar - Remaining: %1 - Rimanente: %1 + Remaining: %1 + Rimanente: %1 - Aborting - Interrompere + Aborting + Interrompere - Do you really want to abort the operation? - Vuoi veramente interrompere l'operazione? + Do you really want to abort the operation? + Vuoi veramente interrompere l'operazione? - - + + Gui::ProgressDialog - Remaining: %1 - Rimanente: %1 + Remaining: %1 + Rimanente: %1 - Aborting - Interrompere + Aborting + Interrompere - Do you really want to abort the operation? - Vuoi veramente interrompere l'operazione? + Do you really want to abort the operation? + Vuoi veramente interrompere l'operazione? - - + + Gui::PropertyEditor::PropertyModel - Property - Proprietà + Property + Proprietà - Value - Valore + Value + Valore - - + + Gui::PropertyView - View - Vista + View + Vista - Data - Dati + Data + Dati - - + + Gui::PythonConsole - System exit - Uscita dal sistema + System exit + Uscita dal sistema - The application is still running. + The application is still running. Do you want to exit without saving your data? - L'applicazione è ancora in esecuzione. + L'applicazione è ancora in esecuzione. Vuoi uscire senza salvare i tuoi dati? - Python console - Console Python + Python console + Console Python - Unhandled PyCXX exception. - Eccezione PyCXX non gestibile. + Unhandled PyCXX exception. + Eccezione PyCXX non gestibile. - Unhandled FreeCAD exception. - Eccezione FreeCad non gestibile. + Unhandled FreeCAD exception. + Eccezione FreeCad non gestibile. - Unhandled unknown C++ exception. - Eccezione sconosciuta C++ non gestibile. + Unhandled unknown C++ exception. + Eccezione sconosciuta C++ non gestibile. - &Copy command - &Copia il comando + &Copy command + &Copia il comando - &Copy history - &Copia la storia + &Copy history + &Copia la storia - Save history as... - Salva cronologia come... + Save history as... + Salva cronologia come... - Insert file name... - Inserisci il nome del file... + Insert file name... + Inserisci il nome del file... - Save History - Salva cronologia + Save History + Salva cronologia - Macro Files (*.FCMacro *.py) - File Macro (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + File Macro (*.FCMacro *.py) - Insert file name - Inserisci il nome del file + Insert file name + Inserisci il nome del file - All Files (*.*) - Tutti i file (*.*) + All Files (*.*) + Tutti i file (*.*) - Python Input Dialog - Finestra di input Python + Python Input Dialog + Finestra di input Python - Unhandled std C++ exception. - Eccezione std C++ non gestibile. + Unhandled std C++ exception. + Eccezione std C++ non gestibile. - Word wrap - A capo automatico + Word wrap + A capo automatico - &Copy - &Copia + &Copy + &Copia - &Paste - &Incolla + &Paste + &Incolla - Select All - Seleziona tutto + Select All + Seleziona tutto - - + + Clear console + + + + Gui::PythonEditor - Comment - Commento + Comment + Commento - Uncomment - Rimuovi commento + Uncomment + Rimuovi commento - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Pulisci + Clear + Pulisci - - + + Gui::RecentFilesAction - Open file %1 - Apri file %1 + Open file %1 + Apri file %1 - File not found - File non trovato + File not found + File non trovato - The file '%1' cannot be opened. - Il file '%1' non può essere aperto. + The file '%1' cannot be opened. + Il file '%1' non può essere aperto. - - + + Gui::SelectModule - Select module - Seleziona il modulo + Select module + Seleziona il modulo - Open %1 as - Apri %1 come + Open %1 as + Apri %1 come - Select - Seleziona + Select + Seleziona - - + + Gui::StdCmdDescription - Help - Aiuto + Help + Aiuto - Des&cription - Des&crizione + Des&cription + Des&crizione - Long description of commands - Descrizione lunga dei comandi + Long description of commands + Descrizione lunga dei comandi - - + + Gui::StdCmdDownloadOnlineHelp - Help - Aiuto + Help + Aiuto - Download online help - Scarica l'aiuto in linea + Download online help + Scarica l'aiuto in linea - Download %1's online help - Scarica l'aiuto in linea di %1 + Download %1's online help + Scarica l'aiuto in linea di %1 - Non-existing directory - Cartella inesistente + Non-existing directory + Cartella inesistente - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - La cartella '%1' non esiste. + La cartella '%1' non esiste. Vuoi specificare una cartella esistente? - Missing permission - Permesso mancante + Missing permission + Permesso mancante - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Non hai il permesso di scrittura in '%1' + Non hai il permesso di scrittura in '%1' -Vuoi specificare un'altra cartella? +Vuoi specificare un'altra cartella? - Stop downloading - Interrompi il download + Stop downloading + Interrompi il download - - + + Gui::StdCmdPythonHelp - Tools - Strumenti + Tools + Strumenti - Python Modules - Moduli Python + Python Modules + Moduli Python - Opens a browser to show the Python modules - Apre un browser per visualizzare i moduli Python + Opens a browser to show the Python modules + Apre un browser per visualizzare i moduli Python - - + + Gui::TaskBoxAngle - Angle - Angolo + Angle + Angolo - - + + Gui::TaskBoxPosition - Position - Posizione + Position + Posizione - - + + Gui::TaskView::TaskAppearance - Display mode: - Modo di visualizzazione: + Display mode: + Modo di visualizzazione: - Plot mode: - Modo di stampa: + Plot mode: + Modo di stampa: - Point size: - Dimensione punto: + Point size: + Dimensione punto: - Line width: - Spessore linea: + Line width: + Spessore linea: - Transparency: - Trasparenza: + Transparency: + Trasparenza: - Appearance - Aspetto + Appearance + Aspetto - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Modifica + Edit + Modifica - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Aspetto + Appearance + Aspetto - ... - ... + ... + ... - edit selection - Modifica selezione + edit selection + Modifica selezione - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Premi il tasto sinistro del mouse + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Inglese + English + Inglese - - + + Gui::TreeDockWidget - Tree view - Albero + Tree view + Albero - - + + Gui::TreeWidget - Create group... - Crea gruppo... + Create group... + Crea gruppo... - Create a group - Crea un gruppo + Create a group + Crea un gruppo - Group - Gruppo + Group + Gruppo - Rename - Rinomina + Rename + Rinomina - Rename object - Rinomina oggetto + Rename object + Rinomina oggetto - Labels & Attributes - Etichette & Attributi + Labels & Attributes + Etichette & Attributi - Application - Applicazione + Application + Applicazione - Finish editing - Completa la modifica + Finish editing + Completa la modifica - Finish editing object - Completa la modifica dell'oggetto + Finish editing object + Completa la modifica dell'oggetto - Activate document - Attiva documento + Activate document + Attiva documento - Activate document %1 - Attiva il documento %1 + Activate document %1 + Attiva il documento %1 - - + + Gui::View3DInventor - Export PDF - Esporta in formato PDF + Export PDF + Esporta in formato PDF - PDF file (*.pdf) - File PDF (*.pdf) + PDF file (*.pdf) + File PDF (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Seleziona l'ambiente '%1' + Select the '%1' workbench + Seleziona l'ambiente '%1' - - + + Position - Form - Modulo + Form + Modulo - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Snap griglia + Grid Snap in + Snap griglia - - + + QDockWidget - Tree view - Albero + Tree view + Albero - Property view - Proprietà + Property view + Proprietà - Selection view - Selezione + Selection view + Selezione - Report view - Report + Report view + Report - Task View - Attività + Task View + Attività - Combo View - Vista combinata + Combo View + Vista combinata - Toolbox - Casella degli strumenti + Toolbox + Casella degli strumenti - Python console - Console Python + Python console + Console Python - Display properties - Visualizza le proprietà + Display properties + Visualizza le proprietà - - + + QObject - General - Generale + General + Generale - Display - Visualizzazione + Display + Visualizzazione - Unknown filetype - Tipo di file sconosciuto + Unknown filetype + Tipo di file sconosciuto - Cannot open unknown filetype: %1 - Non è possibile aprire il tipo di file sconosciuto: %1 + Cannot open unknown filetype: %1 + Non è possibile aprire il tipo di file sconosciuto: %1 - Cannot save to unknown filetype: %1 - Non è possibile salvare il tipo di file sconosciuto: %1 + Cannot save to unknown filetype: %1 + Non è possibile salvare il tipo di file sconosciuto: %1 - Workbench failure - Avaria ambiente + Workbench failure + Avaria ambiente - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Impossibile avviare l'assistente Qt (%1) + Unable to launch Qt Assistant (%1) + Impossibile avviare l'assistente Qt (%1) - Exception - Eccezione + Exception + Eccezione - Open document - Apri documento + Open document + Apri documento - Import file - Importa file + Import file + Importa file - Export file - Esporta file + Export file + Esporta file - Printing... - Stampa... + Printing... + Stampa... - Cannot load workbench - Impossibile caricare l'ambiente + Cannot load workbench + Impossibile caricare l'ambiente - A general error occurred while loading the workbench - Un errore generico è accaduto durante il caricamento dell'ambiente + A general error occurred while loading the workbench + Un errore generico è accaduto durante il caricamento dell'ambiente - File not found - File non trovato + File not found + File non trovato - Cannot open file %1 - Impossibile aprire il file %1 + Cannot open file %1 + Impossibile aprire il file %1 - Save views... - Salva le viste... + Save views... + Salva le viste... - Load views... - Carica le viste... + Load views... + Carica le viste... - Freeze view - Congela la vista + Freeze view + Congela la vista - Clear views - Pulisci le viste + Clear views + Pulisci le viste - Restore view &%1 - Ripristina la vista &%1 + Restore view &%1 + Ripristina la vista &%1 - Save frozen views - Salva le viste congelate + Save frozen views + Salva le viste congelate - Frozen views (*.cam) - Viste congelate (*.cam) + Frozen views (*.cam) + Viste congelate (*.cam) - Restore views - Ripristina le viste + Restore views + Ripristina le viste - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - L'importazione delle viste ripristinate cancellerà le viste salvate. + L'importazione delle viste ripristinate cancellerà le viste salvate. Vuoi continuare? - Restore frozen views - Ripristina le viste congelate + Restore frozen views + Ripristina le viste congelate - Cannot open file '%1'. - Non è possibile aprire il file '%1'. + Cannot open file '%1'. + Non è possibile aprire il file '%1'. - Docked - Agganciata + Docked + Agganciata - Undocked - Non agganciata + Undocked + Non agganciata - Fullscreen - Schermo intero + Fullscreen + Schermo intero - files - file + files + file - Save picture - Salva immagine + Save picture + Salva immagine - New sub-group - Nuovo sottogruppo + New sub-group + Nuovo sottogruppo - Enter the name: - Inserisci il nome: + Enter the name: + Inserisci il nome: - New text item - Nuovo elemento testo + New text item + Nuovo elemento testo - Enter your text: - Inserisci il testo: + Enter your text: + Inserisci il testo: - New integer item - Nuovo elemento integer + New integer item + Nuovo elemento integer - Enter your number: - Inserisci il numero: + Enter your number: + Inserisci il numero: - New unsigned item - Nuovo elemento unsigned + New unsigned item + Nuovo elemento unsigned - New float item - Nuovo elemento float + New float item + Nuovo elemento float - New Boolean item - Nuovo elemento boolean + New Boolean item + Nuovo elemento boolean - Choose an item: - scegli un elemento: + Choose an item: + scegli un elemento: - Rename group - Rinomina gruppo + Rename group + Rinomina gruppo - The group '%1' cannot be renamed. - Il gruppo '%1' non può essere rinominato + The group '%1' cannot be renamed. + Il gruppo '%1' non può essere rinominato - Existing group - Gruppo esistente + Existing group + Gruppo esistente - The group '%1' already exists. - Il gruppo '%1' esiste già. + The group '%1' already exists. + Il gruppo '%1' esiste già. - Change value - Cambia valore + Change value + Cambia valore - Save document under new filename... - Salva il documento con nome... + Save document under new filename... + Salva il documento con nome... - Saving aborted - Salvataggio annullato + Saving aborted + Salvataggio annullato - Unsaved document - Documento non salvato + Unsaved document + Documento non salvato - Save document before close? - Salvare il documento prima di chiudere? + Save document before close? + Salvare il documento prima di chiudere? - Save Macro - Salva macro + Save Macro + Salva macro - Finish - Termina + Finish + Termina - Clear - Pulisci + Clear + Pulisci - Cancel - Annulla + Cancel + Annulla - Inner - Interno + Inner + Interno - Outer - Esterno + Outer + Esterno - No Browser - Nessun Browser + No Browser + Nessun Browser - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Impossibile aprire il browser. + Impossibile aprire il browser. Aprire una finestra browser e scrivere http://localhost:%1. - No Server - Nessun server + No Server + Nessun server - Unable to start the server to port %1: %2. - Impossibile avviare il server alla porta %1: %2. + Unable to start the server to port %1: %2. + Impossibile avviare il server alla porta %1: %2. - Unable to open your system browser. - Impossibile aprire il browser di sistema. + Unable to open your system browser. + Impossibile aprire il browser di sistema. - Options... - Opzioni... + Options... + Opzioni... - Out of memory - Memoria insufficiente + Out of memory + Memoria insufficiente - Not enough memory available to display the data. - Memoria disponibile insufficiente per visualizzare i dati. + Not enough memory available to display the data. + Memoria disponibile insufficiente per visualizzare i dati. - Cannot find file %1 - Impossibile trovare il file %1 + Cannot find file %1 + Impossibile trovare il file %1 - Cannot find file %1 neither in %2 nor in %3 - Impossibile trovare il file %1 nè in %2 nè in %3 + Cannot find file %1 neither in %2 nor in %3 + Impossibile trovare il file %1 nè in %2 nè in %3 - Save %1 Document - Salva il documento %1 + Save %1 Document + Salva il documento %1 - %1 document (*.FCStd) - Documento %1 (*.FCStd) + %1 document (*.FCStd) + Documento %1 (*.FCStd) - Save As - Salva con nome + Save As + Salva con nome - %1 already exists. + %1 already exists. Do you want to replace it? - % esiste già. + % esiste già. Vuoi sostituirlo? - Document not closable - Impossibile chiudere il documento + Document not closable + Impossibile chiudere il documento - The document is not closable for the moment. - Impossibile chiudere il documento al momento. + The document is not closable for the moment. + Impossibile chiudere il documento al momento. - No OpenGL - No OpenGL + No OpenGL + No OpenGL - This system does not support OpenGL - Questo sistema non supporta OpenGL + This system does not support OpenGL + Questo sistema non supporta OpenGL - Help - Aiuto + Help + Aiuto - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Impossibile caricare la documentazione. + Impossibile caricare la documentazione. Per poterla caricare Qt 4.4 o superiore è necessario. - %1 Help - %1 Aiuto + %1 Help + %1 Aiuto - Exporting PDF... - Esportazione PDF... + Exporting PDF... + Esportazione PDF... - Wrong selection - Selezione errata + Wrong selection + Selezione errata - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - un solo oggetto selezionato. Si prega di selezionare due oggetti. + un solo oggetto selezionato. Si prega di selezionare due oggetti. Prestare attenzione al punto dove si fa clic. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Si prega di selezionare due oggetti. + Si prega di selezionare due oggetti. Prestare attenzione al punto dove si fa clic. - New boolean item - Nuovo elemento booleano + New boolean item + Nuovo elemento booleano - Navigation styles - Stili di navigazione + Navigation styles + Stili di navigazione - %1 navigation - Navigazione %1 + %1 navigation + Navigazione %1 - Move annotation - Sposta annotazione + Move annotation + Sposta annotazione - Transform - Trasforma + Transform + Trasforma - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - Il documento è in modalità modifica e quindi non può essere chiuso per il momento. E' necessario terminare o annullare la modifica nel pannello attività. + Il documento è in modalità modifica e quindi non può essere chiuso per il momento. E' necessario terminare o annullare la modifica nel pannello attività. - - + + + StdBoxSelection + + Standard-View + Vista standard + + + Box selection + + + + StdCmdAbout - Help - Aiuto + Help + Aiuto - &About %1 - &Informazioni su %1 + &About %1 + &Informazioni su %1 - About %1 - Informazioni su %1 + About %1 + Informazioni su %1 - - + + StdCmdAboutQt - Help - Aiuto + Help + Aiuto - About &Qt - Informazioni su &Qt + About &Qt + Informazioni su &Qt - About Qt - Informazioni su Qt + About Qt + Informazioni su Qt - - + + StdCmdActivateNextWindow - Window - Finestra + Window + Finestra - Ne&xt - Pr&ossima + Ne&xt + Pr&ossima - Activate next window - Attiva la prossima finestra + Activate next window + Attiva la prossima finestra - - + + StdCmdActivatePrevWindow - Window - Finestra + Window + Finestra - Pre&vious - Pre&cedente + Pre&vious + Pre&cedente - Activate previous window - Attiva la precedente finestra + Activate previous window + Attiva la precedente finestra - - + + + StdCmdAlignment + + Edit + Modifica + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Finestra + Window + Finestra - Arrange &Icons - Disponi &icone + Arrange &Icons + Disponi &icone - Arrange Icons - Disponi icone + Arrange Icons + Disponi icone - - + + StdCmdAxisCross - Standard-View - Vista standard + Standard-View + Vista standard - Toggle axis cross - Attiva/disattiva origine degli assi + Toggle axis cross + Attiva/disattiva origine degli assi - - + + StdCmdCascadeWindows - Window - Finestra + Window + Finestra - &Cascade - A &Cascata + &Cascade + A &Cascata - Tile pragmatic - Dividi pragmatico + Tile pragmatic + Dividi pragmatico - - + + StdCmdCloseActiveWindow - Window - Finestra + Window + Finestra - Cl&ose - Ch&iudi + Cl&ose + Ch&iudi - Close active window - Chiude la finestra attiva + Close active window + Chiude la finestra attiva - - + + StdCmdCloseAllWindows - Window - Finestra + Window + Finestra - Close Al&l - Chiudi tut&to + Close Al&l + Chiudi tut&to - Close all windows - Chiude tutte le finestre + Close all windows + Chiude tutte le finestre - - + + StdCmdCommandLine - Tools - Strumenti + Tools + Strumenti - Start command &line... - Inizia linea &di comando... + Start command &line... + Inizia linea &di comando... - Opens the command line in the console - Apre la linea di comando nella console + Opens the command line in the console + Apre la linea di comando nella console - - + + StdCmdCopy - Edit - Modifica + Edit + Modifica - C&opy - C&opia + C&opy + C&opia - Copy operation - Copia + Copy operation + Copia - - + + StdCmdCut - Edit - Modifica + Edit + Modifica - &Cut - &Taglia + &Cut + &Taglia - Cut out - Taglia + Cut out + Taglia - - + + StdCmdDDuplicateSelection - Edit - Modifica + Edit + Modifica - Duplicate selection - Duplica la selezione + Duplicate selection + Duplica la selezione - Put duplicates of the selected objects to the active document - Inserisce i duplicati degli oggetti selezionati nel documento attivo + Put duplicates of the selected objects to the active document + Inserisce i duplicati degli oggetti selezionati nel documento attivo - - + + StdCmdDelete - Edit - Modifica + Edit + Modifica - &Delete - &Elimina + &Delete + &Elimina - Deletes the selected objects - Elimina gli oggetti selezionati + Deletes the selected objects + Elimina gli oggetti selezionati - - + + StdCmdDemoMode - Standard-View - Vista standard + Standard-View + Vista standard - View turntable... - Visualizza rotazione oggetti... + View turntable... + Visualizza rotazione oggetti... - View turntable - Visualizza rotazione oggetti + View turntable + Visualizza rotazione oggetti - - + + StdCmdDlgCustomize - Tools - Strumenti + Tools + Strumenti - Cu&stomize... - Per&sonalizza... + Cu&stomize... + Per&sonalizza... - Customize toolbars and command bars - Personalizza le barre degli strumenti e di comando + Customize toolbars and command bars + Personalizza le barre degli strumenti e di comando - - + + StdCmdDlgMacroExecute - Macros ... - Macro... + Macros ... + Macro... - Opens a dialog to let you execute a recorded macro - Apre una finestra di dialogo per eseguire una macro registrata + Opens a dialog to let you execute a recorded macro + Apre una finestra di dialogo per eseguire una macro registrata - Macro - Macro + Macro + Macro - - + + StdCmdDlgMacroExecuteDirect - Macro - Macro + Macro + Macro - Execute macro - Esegui la macro + Execute macro + Esegui la macro - Execute the macro in the editor - Esegue la macro nell'editor + Execute the macro in the editor + Esegue la macro nell'editor - - + + StdCmdDlgMacroRecord - &Macro recording ... - Registra &Macro... + &Macro recording ... + Registra &Macro... - Opens a dialog to record a macro - Apre una finestra di dialogo per registrare una macro + Opens a dialog to record a macro + Apre una finestra di dialogo per registrare una macro - Macro - Macro + Macro + Macro - - + + StdCmdDlgParameter - Tools - Strumenti + Tools + Strumenti - E&dit parameters ... - Mo&difica parametri... + E&dit parameters ... + Mo&difica parametri... - Opens a Dialog to edit the parameters - Apre una finestra di dialogo per modificare i parametri + Opens a Dialog to edit the parameters + Apre una finestra di dialogo per modificare i parametri - - + + StdCmdDlgPreferences - Tools - Strumenti + Tools + Strumenti - &Preferences ... - &Preferenze... + &Preferences ... + &Preferenze... - Opens a Dialog to edit the preferences - Apre una finestra per modificare le preferenze + Opens a Dialog to edit the preferences + Apre una finestra per modificare le preferenze - - + + StdCmdDockViewMenu - View - Vista + View + Vista - Vie&ws - Vis&te + Vie&ws + Vis&te - Toggles this window - Attiva/disattiva questa finestra + Toggles this window + Attiva/disattiva questa finestra - - + + StdCmdDrawStyle - Standard-View - Vista standard + Standard-View + Vista standard - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Modifica + + + Duplicate selection + Duplica la selezione + + + Put duplicates of the selected objects to the active document + Inserisce i duplicati degli oggetti selezionati nel documento attivo + + + + StdCmdEdit + + Edit + Modifica + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - File + File + File - &Export... - &Esporta... + &Export... + &Esporta... - Export an object in the active document - Esporta un oggetto nel documento attivo + Export an object in the active document + Esporta un oggetto nel documento attivo - Supported formats - Formati supportati + Supported formats + Formati supportati - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Strumenti + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - File + File + File - &Recompute - &Ricalcola + &Recompute + &Ricalcola - Recompute feature or document - Ricalcola la feature o il documento + Recompute feature or document + Ricalcola la feature o il documento - - + + StdCmdFreeCADWebsite - Help - Aiuto + Help + Aiuto - FreeCAD Website - Sito FreeCAD + FreeCAD Website + Sito FreeCAD - The FreeCAD website - Il sito FreeCAD + The FreeCAD website + Il sito FreeCAD - - + + StdCmdFreezeViews - Standard-View - Vista standard + Standard-View + Vista standard - Freeze display - Congela la visualizzazione + Freeze display + Congela la visualizzazione - Freezes the current view position - Congela la posizione corrente della vista + Freezes the current view position + Congela la posizione corrente della vista - - + + StdCmdHideObjects - Standard-View - Vista standard + Standard-View + Vista standard - Hide all objects - Nascondi tutti gli oggetti + Hide all objects + Nascondi tutti gli oggetti - Hide all objects in the document - Nascondi tutti gli oggetti nel documento + Hide all objects in the document + Nascondi tutti gli oggetti nel documento - - + + StdCmdHideSelection - Standard-View - Vista standard + Standard-View + Vista standard - Hide selection - Nascondi la selezione + Hide selection + Nascondi la selezione - Hide all selected objects - Nascondi tutti gli oggetti selezionati + Hide all selected objects + Nascondi tutti gli oggetti selezionati - - + + StdCmdImport - File - File + File + File - &Import... - &Importa... + &Import... + &Importa... - Import a file in the active document - Importa un file nel documento attivo + Import a file in the active document + Importa un file nel documento attivo - Supported formats - Formati supportati + Supported formats + Formati supportati - All files (*.*) - Tutti i file (*.*) + All files (*.*) + Tutti i file (*.*) - - + + StdCmdMacroStartDebug - Macro - Macro + Macro + Macro - Debug macro - Debug macro + Debug macro + Debug macro - Start debugging of macro - Avvia il debug della macro + Start debugging of macro + Avvia il debug della macro - - + + StdCmdMacroStepOver - Macro - Macro + Macro + Macro - Step over - Passo successivo + Step over + Passo successivo - - + + StdCmdMacroStopDebug - Macro - Macro + Macro + Macro - Stop debugging - Interrompi il debug + Stop debugging + Interrompi il debug - Stop debugging of macro - Interrompe il debug della macro + Stop debugging of macro + Interrompe il debug della macro - - + + StdCmdMacroStopRecord - Macro - Macro + Macro + Macro - S&top macro recording - In&terrompi la registrazione della macro + S&top macro recording + In&terrompi la registrazione della macro - Stop the macro recording session - Interrompe la sessione di registrazione macro in corso + Stop the macro recording session + Interrompe la sessione di registrazione macro in corso - - + + StdCmdMeasureDistance - View - Vista + View + Vista - Measure distance - Misura la distanza + Measure distance + Misura la distanza - - + + StdCmdMeasurementSimple - Tools - Strumenti + Tools + Strumenti - Mesure distance - Misura la distanza + Mesure distance + Misura la distanza - Measures distance between two selected objects - Misura la distanza tra due oggetti selezionati + Measures distance between two selected objects + Misura la distanza tra due oggetti selezionati - - + + Measure distance + Misura la distanza + + + StdCmdMergeProjects - File - File + File + File - Merge project... - Unisci progetto... + Merge project... + Unisci progetto... - Merge project - Unisce un progetto esistente + Merge project + Unisce un progetto esistente - %1 document (*.fcstd) - %1 documento (*.fcstd) + %1 document (*.fcstd) + %1 documento (*.fcstd) - Cannot merge project with itself. - Non è possibile unire il progetto con se stesso. + Cannot merge project with itself. + Non è possibile unire il progetto con se stesso. - - + + StdCmdNew - File - File + File + File - &New - &Nuovo + &New + &Nuovo - Create a new empty document - Crea un documento vuoto + Create a new empty document + Crea un documento vuoto - - + + StdCmdOnlineHelp - Help - Aiuto + Help + Aiuto - Show help to the application - Mostra l'aiuto dell'applicazione + Show help to the application + Mostra l'aiuto dell'applicazione - - + + StdCmdOnlineHelpPython - Help - Aiuto + Help + Aiuto - Python Manuals - Manuali Python + Python Manuals + Manuali Python - Show the Python documentation - Mostra la documentazione Python + Show the Python documentation + Mostra la documentazione Python - - + + StdCmdOnlineHelpWebsite - Help - Aiuto + Help + Aiuto - Help Website - Sito d'Aiuto + Help Website + Sito d'Aiuto - The website where the help is maintained - Il sito web in cui viene mantenuto l'aiuto + The website where the help is maintained + Il sito web in cui viene mantenuto l'aiuto - - + + StdCmdOpen - File - File + File + File - &Open... - &Apri... + &Open... + &Apri... - Open a document or import files - Apre un documento o importa un file + Open a document or import files + Apre un documento o importa un file - Supported formats - Formati supportati + Supported formats + Formati supportati - All files (*.*) - Tutti i file (*.*) + All files (*.*) + Tutti i file (*.*) - - + + StdCmdPaste - Edit - Modifica + Edit + Modifica - &Paste - &Incolla + &Paste + &Incolla - Paste operation - Incolla + Paste operation + Incolla - - + + StdCmdPlacement - Edit - Modifica + Edit + Modifica - Placement... - Posizionamento... + Placement... + Posizionamento... - Place the selected objects - Posiziona gli oggetti selezionati + Place the selected objects + Posiziona gli oggetti selezionati - - + + StdCmdPrint - File - File + File + File - &Print... - &Stampa... + &Print... + &Stampa... - Print the document - Stampa il documento + Print the document + Stampa il documento - - + + StdCmdPrintPdf - File - File + File + File - &Export PDF... - &Esporta PDF... + &Export PDF... + &Esporta PDF... - Export the document as PDF - Esporta il documento come PDF + Export the document as PDF + Esporta il documento come PDF - - + + StdCmdPrintPreview - File - File + File + File - &Print preview... - Anteprima &di stampa... + &Print preview... + Anteprima &di stampa... - Print the document - Stampa il documento + Print the document + Stampa il documento - Print preview - Anteprima di stampa + Print preview + Anteprima di stampa - - + + StdCmdProjectInfo - File - File + File + File - Project i&nformation... - I&nformazioni del progetto... + Project i&nformation... + I&nformazioni del progetto... - Show details of the currently active project - Mostra i dettagli del progetto attualmente attivo + Show details of the currently active project + Mostra i dettagli del progetto attualmente attivo - - + + StdCmdProjectUtil - Tools - Strumenti + Tools + Strumenti - Project utility... - Utilità di progetto... + Project utility... + Utilità di progetto... - Utility to extract or create project files - Utilità per estrarre o creare file di progetto + Utility to extract or create project files + Utilità per estrarre o creare file di progetto - - + + StdCmdPythonWebsite - Help - Aiuto + Help + Aiuto - Python Website - Sito Python + Python Website + Sito Python - The official Python website - Il sito ufficiale Python + The official Python website + Il sito ufficiale Python - - + + StdCmdQuit - File - File + File + File - E&xit - E&sci + E&xit + E&sci - Quits the application - Esce dal'applicazione + Quits the application + Esce dal'applicazione - - + + StdCmdRandomColor - File - File + File + File - Random color - Colore casuale + Random color + Colore casuale - - + + StdCmdRecentFiles - File - File + File + File - Recent files - File recenti + Recent files + File recenti - Recent file list - Lista dei file recenti + Recent file list + Lista dei file recenti - - + + StdCmdRedo - Edit - Modifica + Edit + Modifica - &Redo - &Ripeti + &Redo + &Ripeti - Redoes a previously undone action - Ripete un'operazione precedentemente annullata + Redoes a previously undone action + Ripete un'operazione precedentemente annullata - - + + StdCmdRefresh - Edit - Modifica + Edit + Modifica - &Refresh - &Aggiorna + &Refresh + &Aggiorna - Recomputes the current active document - Ricalcola il documento attivo + Recomputes the current active document + Ricalcola il documento attivo - - + + StdCmdSave - File - File + File + File - &Save - &Salva + &Save + &Salva - Save the active document - Salva il documento attivo + Save the active document + Salva il documento attivo - - + + StdCmdSaveAs - File - File + File + File - Save &As... - Sa&lva con nome... + Save &As... + Sa&lva con nome... - Save the active document under a new file name - Salva il documento attivo in un nuovo file + Save the active document under a new file name + Salva il documento attivo in un nuovo file - - + + StdCmdSceneInspector - Tools - Strumenti + Tools + Strumenti - Scene inspector... - Ispettore di scena... + Scene inspector... + Ispettore di scena... - Scene inspector - Ispettore di scena + Scene inspector + Ispettore di scena - - + + StdCmdSelectAll - Edit - Modifica + Edit + Modifica - Select &All - Seleziona &tutto + Select &All + Seleziona &tutto - Select all - Seleziona tutto + Select all + Seleziona tutto - - + + StdCmdSetAppearance - Standard-View - Vista standard + Standard-View + Vista standard - Appearance... - Aspetto... + Appearance... + Aspetto... - Sets the display properties of the selected object - Imposta le proprietà di visualizzazione dell'oggetto selezionato + Sets the display properties of the selected object + Imposta le proprietà di visualizzazione dell'oggetto selezionato - - + + StdCmdShowObjects - Standard-View - Vista standard + Standard-View + Vista standard - Show all objects - Mostra tutti gli oggetti + Show all objects + Mostra tutti gli oggetti - Show all objects in the document - Mostra tutti gli oggetti nel documento + Show all objects in the document + Mostra tutti gli oggetti nel documento - - + + StdCmdShowSelection - Standard-View - Vista standard + Standard-View + Vista standard - Show selection - Mostra la selezione + Show selection + Mostra la selezione - Show all selected objects - Mostra tutti gli oggetti selezionati + Show all selected objects + Mostra tutti gli oggetti selezionati - - + + StdCmdStatusBar - View - Vista + View + Vista - Status bar - Barra di stato + Status bar + Barra di stato - Toggles the status bar - Attiva/disattiva la barra di stato + Toggles the status bar + Attiva/disattiva la barra di stato - - + + StdCmdTextureMapping - Tools - Strumenti + Tools + Strumenti - Texture mapping... - Mappatura texture... + Texture mapping... + Mappatura texture... - Texture mapping - Mappatura texture + Texture mapping + Mappatura texture - - + + StdCmdTileWindows - Window - Finestra + Window + Finestra - &Tile - &Affianca + &Tile + &Affianca - Tile the windows - Affianca le finestre + Tile the windows + Affianca le finestre - - + + StdCmdToggleBreakpoint - Macro - Macro + Macro + Macro - Toggle breakpoint - Attiva/disattiva punto di interruzione + Toggle breakpoint + Attiva/disattiva punto di interruzione - - + + StdCmdToggleClipPlane - Standard-View - Vista standard + Standard-View + Vista standard - Clipping plane - Piano di sezione + Clipping plane + Piano di sezione - Toggles clipping plane for active view - Attiva/disattiva il piano di taglio per la vista attiva + Toggles clipping plane for active view + Attiva/disattiva il piano di taglio per la vista attiva - - + + StdCmdToggleNavigation - Standard-View - Vista standard + Standard-View + Vista standard - Toggle navigation/Edit mode - Attiva/Disattiva modalità di spostamento o modifica + Toggle navigation/Edit mode + Attiva/Disattiva modalità di spostamento o modifica - Toggle between navigation and edit mode - Alterna tra la modalità di modifica e navigazione + Toggle between navigation and edit mode + Alterna tra la modalità di modifica e navigazione - - + + StdCmdToggleObjects - Standard-View - Vista standard + Standard-View + Vista standard - Toggle all objects - Attiva/disattiva tutti gli oggetti + Toggle all objects + Attiva/disattiva tutti gli oggetti - Toggles visibility of all objects in the active document - Nascondi tutti gli oggetti nel documento attivo + Toggles visibility of all objects in the active document + Nascondi tutti gli oggetti nel documento attivo - - + + StdCmdToggleSelectability - Standard-View - Vista standard + Standard-View + Vista standard - Toggle selectability - Attiva/disattiva selezionabilità + Toggle selectability + Attiva/disattiva selezionabilità - Toggles the property of the objects to get selected in the 3D-View - Attiva o disattiva la proprietà degli oggetti di essere selezionati nella vista 3D + Toggles the property of the objects to get selected in the 3D-View + Attiva o disattiva la proprietà degli oggetti di essere selezionati nella vista 3D - - + + StdCmdToggleVisibility - Standard-View - Vista standard + Standard-View + Vista standard - Toggle visibility - Nascondi + Toggle visibility + Nascondi - Toggles visibility - Attiva/disattiva la visibilità + Toggles visibility + Attiva/disattiva la visibilità - - + + StdCmdToolBarMenu - View - Vista + View + Vista - Tool&bars - &Barre degli strumenti + Tool&bars + &Barre degli strumenti - Toggles this window - Attiva/disattiva questa finestra + Toggles this window + Attiva/disattiva questa finestra - - + + StdCmdTransform - Edit - Modifica + Edit + Modifica - Transform... - Trasforma... + Transform... + Trasforma... - Transform the geometry of selected objects - Trasforma la geometria degli oggetti selezionati + Transform the geometry of selected objects + Trasforma la geometria degli oggetti selezionati - - + + StdCmdTreeSelection - View - Vista + View + Vista - Go to selection - Vai alla selezione + Go to selection + Vai alla selezione - Scroll to first selected item - Scorri fino al primo elemento selezionato + Scroll to first selected item + Scorri fino al primo elemento selezionato - - + + StdCmdUndo - Edit - Modifica + Edit + Modifica - &Undo - &Annulla + &Undo + &Annulla - Undo exactly one action - Annulla l'ultima azione eseguita + Undo exactly one action + Annulla l'ultima azione eseguita - - + + StdCmdUserInterface - View - Vista + View + Vista - Dock views - Aggancia le viste + Dock views + Aggancia le viste - Dock all top-level views - Aggancia tulle le viste di primo livello + Dock all top-level views + Aggancia tulle le viste di primo livello - - + + StdCmdViewAxo - Standard-View - Vista standard + Standard-View + Vista standard - Axometric - Assonometrica + Axometric + Assonometrica - Set to axometric view - Imposta la vista assonometrica + Set to axometric view + Imposta la vista assonometrica - - + + StdCmdViewBottom - Standard-View - Vista standard + Standard-View + Vista standard - Bottom - Dal basso + Bottom + Dal basso - Set to bottom view - Imposta la vista dal basso + Set to bottom view + Imposta la vista dal basso - - + + StdCmdViewCreate - Standard-View - Vista standard + Standard-View + Vista standard - Create new view - Crea una nuova vista + Create new view + Crea una nuova vista - Creates a new view window for the active document - Crea una vista in una nuova finestra per il documento attivo + Creates a new view window for the active document + Crea una vista in una nuova finestra per il documento attivo - - + + StdCmdViewExample1 - Standard-View - Vista standard + Standard-View + Vista standard - Inventor example #1 - Esempio Inventor #1 + Inventor example #1 + Esempio Inventor #1 - Shows a 3D texture with manipulator - Mostra una texture 3D con il manipolatore + Shows a 3D texture with manipulator + Mostra una texture 3D con il manipolatore - - + + StdCmdViewExample2 - Standard-View - Vista standard + Standard-View + Vista standard - Inventor example #2 - Esempio Inventor #2 + Inventor example #2 + Esempio Inventor #2 - Shows spheres and drag-lights - Mostra le sfere con scia di luce + Shows spheres and drag-lights + Mostra le sfere con scia di luce - - + + StdCmdViewExample3 - Standard-View - Vista standard + Standard-View + Vista standard - Inventor example #3 - Esempio Inventor #3 + Inventor example #3 + Esempio Inventor #3 - Shows a animated texture - Mostra una texture animata + Shows a animated texture + Mostra una texture animata - - + + StdCmdViewFitAll - Standard-View - Vista standard + Standard-View + Vista standard - Fit all - Visualizza tutto + Fit all + Visualizza tutto - Fits the whole content on the screen - Visualizza tutto il contenuto nello schermo + Fits the whole content on the screen + Visualizza tutto il contenuto nello schermo - - + + StdCmdViewFitSelection - Standard-View - Vista standard + Standard-View + Vista standard - Fit selection - Visualizza la selezione + Fit selection + Visualizza la selezione - Fits the selected content on the screen - Visualizza il contenuto selezionato sullo schermo + Fits the selected content on the screen + Visualizza il contenuto selezionato sullo schermo - - + + StdCmdViewFront - Standard-View - Vista standard + Standard-View + Vista standard - Front - Di fronte + Front + Di fronte - Set to front view - Imposta la vista di fronte + Set to front view + Imposta la vista di fronte - - + + StdCmdViewIvIssueCamPos - Standard-View - Vista standard + Standard-View + Vista standard - Issue camera position - Pubblica la posizione della camera + Issue camera position + Pubblica la posizione della camera - Issue the camera position to the console and to a macro, to easily recall this position - Pubblica la posizione della camera nella console e nella macro, per facilitare il richiamo di questa posizione + Issue the camera position to the console and to a macro, to easily recall this position + Pubblica la posizione della camera nella console e nella macro, per facilitare il richiamo di questa posizione - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Vista standard + Standard-View + Vista standard - Stereo Interleaved Columns - Stereo a colonne interlacciate + Stereo Interleaved Columns + Stereo a colonne interlacciate - Switch stereo viewing to Interleaved Columns - Passa alla visualizzazione stereo a colonne interlacciate + Switch stereo viewing to Interleaved Columns + Passa alla visualizzazione stereo a colonne interlacciate - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Vista standard + Standard-View + Vista standard - Stereo Interleaved Rows - Stereo a righe interlacciate + Stereo Interleaved Rows + Stereo a righe interlacciate - Switch stereo viewing to Interleaved Rows - Passa alla visualizzazione stereo a righe interlacciate + Switch stereo viewing to Interleaved Rows + Passa alla visualizzazione stereo a righe interlacciate - - + + StdCmdViewIvStereoOff - Standard-View - Vista standard + Standard-View + Vista standard - Stereo Off - Stereo Off + Stereo Off + Stereo Off - Switch stereo viewing off - Disattiva la visualizzazione stereo + Switch stereo viewing off + Disattiva la visualizzazione stereo - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Vista standard + Standard-View + Vista standard - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Passa alla visualizzazione stereo a quad buffer + Switch stereo viewing to quad buffer + Passa alla visualizzazione stereo a quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Vista standard + Standard-View + Vista standard - Stereo red/green - Stereo rosso/verde + Stereo red/green + Stereo rosso/verde - Switch stereo viewing to red/green - Passa alla visualizzazione stereo rosso/verde + Switch stereo viewing to red/green + Passa alla visualizzazione stereo rosso/verde - - + + StdCmdViewLeft - Standard-View - Vista standard + Standard-View + Vista standard - Left - Da sinistra + Left + Da sinistra - Set to left view - Imposta la vista da sinistra + Set to left view + Imposta la vista da sinistra - - + + StdCmdViewRear - Standard-View - Vista standard + Standard-View + Vista standard - Rear - Da dietro + Rear + Da dietro - Set to rear view - Imposta la vista da dietro + Set to rear view + Imposta la vista da dietro - - + + StdCmdViewRight - Standard-View - Vista standard + Standard-View + Vista standard - Right - Destra + Right + Destra - Set to right view - Imposta la vista da destra + Set to right view + Imposta la vista da destra - - + + + StdCmdViewRotateLeft + + Standard-View + Vista standard + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Vista standard + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Vista standard + Standard-View + Vista standard - Top - Dall'alto + Top + Dall'alto - Set to top view - Imposta la vista dall'alto + Set to top view + Imposta la vista dall'alto - - + + StdCmdWhatsThis - Help - Aiuto + Help + Aiuto - &What's This? - &Cos'è questo? + &What's This? + &Cos'è questo? - What's This - Cos'è questo + What's This + Cos'è questo - - + + StdCmdWindows - Window - Finestra + Window + Finestra - &Windows... - &Finestre... + &Windows... + &Finestre... - Windows list - Lista delle finestre + Windows list + Lista delle finestre - - + + StdCmdWindowsMenu - Window - Finestra + Window + Finestra - Activates this window - Attiva questa finestra + Activates this window + Attiva questa finestra - - + + StdCmdWorkbench - View - Vista + View + Vista - Workbench - Ambiente + Workbench + Ambiente - Switch between workbenches - Passa da un ambiente all'altro + Switch between workbenches + Passa da un ambiente all'altro - - + + StdOrthographicCamera - Standard-View - Vista standard + Standard-View + Vista standard - Orthographic view - Vista ortografica + Orthographic view + Vista ortografica - Switches to orthographic view mode - Passa al modo di vista ortografico + Switches to orthographic view mode + Passa al modo di vista ortografico - - + + StdPerspectiveCamera - Standard-View - Vista standard + Standard-View + Vista standard - Perspective view - Vista in prospettiva + Perspective view + Vista in prospettiva - Switches to perspective view mode - Passa al modo di vista in prospettiva + Switches to perspective view mode + Passa al modo di vista in prospettiva - - + + StdViewBoxZoom - Standard-View - Vista standard + Standard-View + Vista standard - Box zoom - Zoom finestra + Box zoom + Zoom finestra - - + + StdViewDockUndockFullscreen - Standard-View - Vista standard + Standard-View + Vista standard - Document window - Finestra del documento + Document window + Finestra del documento - Display the active view either in fullscreen, in undocked or docked mode - Visualizza la vista attiva a tutto schermo, in modalità agganciata o non agganciata + Display the active view either in fullscreen, in undocked or docked mode + Visualizza la vista attiva a tutto schermo, in modalità agganciata o non agganciata - - + + StdViewScreenShot - Standard-View - Vista standard + Standard-View + Vista standard - Save picture... - Salva immagine... + Save picture... + Salva immagine... - Creates a screenshot of the active view - Crea una istantanea della vista attiva + Creates a screenshot of the active view + Crea una istantanea della vista attiva - - + + StdViewZoomIn - Standard-View - Vista standard + Standard-View + Vista standard - Zoom In - Zoom in + Zoom In + Zoom in - - + + StdViewZoomOut - Standard-View - Vista standard + Standard-View + Vista standard - Zoom Out - Zoom out + Zoom Out + Zoom out - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &File + &File + &File - &Edit - &Modifica + &Edit + &Modifica - Standard views - Viste standard + Standard views + Viste standard - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Visibilità + Visibility + Visibilità - &View - &Visualizza + &View + &Visualizza - &Tools - &Strumenti + &Tools + &Strumenti - &Macro - &Macro + &Macro + &Macro - &Windows - &Finestre + &Windows + &Finestre - &On-line help - &Aiuto in linea + &On-line help + &Aiuto in linea - &Help - &Aiuto + &Help + &Aiuto - File - File + File + File - Macro - Macro + Macro + Macro - View - Vista + View + Vista - Special Ops - Operazioni speciali + Special Ops + Operazioni speciali - - + + testClass - test - test + test + test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Creato per Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Creato per Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Seleziona lo stile del riquadro attività + Choose the style of the Task Panel + Seleziona lo stile del riquadro attività - Default - Normale + Default + Normale - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_ja.ts b/src/Gui/Language/FreeCAD_ja.ts index 0406284a6..848a23cbf 100644 --- a/src/Gui/Language/FreeCAD_ja.ts +++ b/src/Gui/Language/FreeCAD_ja.ts @@ -1,5490 +1,5908 @@ - - + + Angle - Form - Form + Form + Form - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - 角度スナップ + Angle Snap + 角度スナップ - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - なし + none + なし - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + 追加 + + + Remove + 削除 + + + Move up + 上へ移動 + + + Move down + 下へ移動 + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - マウスの左ボタンを押す + Press left mouse button + マウスの左ボタンを押す - Press SHIFT and middle mouse button - SHIFTとマウスの中央ボタンを押してください + Press SHIFT and middle mouse button + SHIFTとマウスの中央ボタンを押してください - Press middle mouse button - マウスの中央のボタンを押す + Press middle mouse button + マウスの中央のボタンを押す - Scroll middle mouse button - マウスの中央ボタンをスクロールする + Scroll middle mouse button + マウスの中央ボタンをスクロールする - - + + Gui::CADNavigationStyle - Press left mouse button - マウスの左ボタンを押す + Press left mouse button + マウスの左ボタンを押す - Press middle mouse button - マウスの中央のボタンを押す + Press middle mouse button + マウスの中央のボタンを押す - Press left and middle mouse button - マウスの左と中央のボタンを押す + Press left and middle mouse button + マウスの左と中央のボタンを押す - Scroll middle mouse button - マウスの中央ボタンをスクロールする + Scroll middle mouse button + マウスの中央ボタンをスクロールする - - + + Gui::Command - Standard - 標準 + Standard + 標準 - - + + Gui::ContainerDialog - &OK - OK + &OK + OK - &Cancel - キャンセル + &Cancel + キャンセル - - + + Gui::ControlSingleton - Task panel - タスクパネル + Task panel + タスクパネル - - + + Gui::Dialog::AboutApplication - About - このプログラムについて + About + このプログラムについて - Revision number - リビジョン番号 + Revision number + リビジョン番号 - Version - バージョン + Version + バージョン - OK - OK + OK + OK - - + + - Release date - 公開日 + Release date + 公開日 - Platform - プラットフォーム + Platform + プラットフォーム - License... - ライセンス... + License... + ライセンス... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Button %1 + Button %1 + Button %1 - Out Of Range - 範囲外 + Out Of Range + 範囲外 - - + + Gui::Dialog::CommandModel - Commands - コマンド + Commands + コマンド - - + + Gui::Dialog::DemoMode - View Turntable - View Turntable + View Turntable + View Turntable - Speed - スピード + Speed + スピード - Maximum - 最大値 + Maximum + 最大値 - Minimum - 最小値 + Minimum + 最小値 - Fullscreen - 全画面表示 + Fullscreen + 全画面表示 - Enable timer - タイマーを有効にします。 + Enable timer + タイマーを有効にします。 - s - s + s + s - Angle - Angle + Angle + Angle + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Play - -90° - -90° + Stop + 停止 - Play - Play + Close + 閉じる - - Stop - 停止 - - - Close - 閉じる - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - ウィンドウを選択します。 + Choose Window + ウィンドウを選択します。 - &Activate - 有効にする + &Activate + 有効にする - Alt+A - [Alt] + A + Alt+A + [Alt] + A - &Cancel - キャンセル + &Cancel + キャンセル - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Windows + Windows + Windows - - + + Gui::Dialog::DlgAuthorization - Authorization - 許可 + Authorization + 許可 - &OK - OK + &OK + OK - &Cancel - キャンセル + &Cancel + キャンセル - Password: - パスワード: + Password: + パスワード: - User name: - ユーザー名: + User name: + ユーザー名: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - アイコンを選択してください + Choose Icon + アイコンを選択してください - OK - OK + OK + OK - Cancel - キャンセル + Cancel + キャンセル - Add icons... - アイコンを追加... + Add icons... + アイコンを追加... - - + + Gui::Dialog::DlgCustomActions - Macros - マクロ + Macros + マクロ - Setup Custom Macros - カスタムマクロのセットアップ + Setup Custom Macros + カスタムマクロのセットアップ - Macro: - マクロ: + Macro: + マクロ: - ... - ... + ... + ... - Pixmap - ピックスマップ + Pixmap + ピックスマップ - Accelerator: - アクセラレータ: + Accelerator: + アクセラレータ: - What's this: - これは、何ですか: + What's this: + これは、何ですか: - Status text: - ステータステキスト: + Status text: + ステータステキスト: - Tool tip: - ツールのヒント: + Tool tip: + ツールのヒント: - Menu text: - メニューテキスト: + Menu text: + メニューテキスト: - Add - 追加 + Add + 追加 - Remove - 削除 + Remove + 削除 - Replace - 置換 + Replace + 置換 - - + + Gui::Dialog::DlgCustomActionsImp - Icons - アイコン + Icons + アイコン - Macros - マクロ + Macros + マクロ - No macro - マクロ不可 + No macro + マクロ不可 - No macros found. - マクロが見つかりません。 + No macros found. + マクロが見つかりません。 - Macro not found - マクロが見つかりません + Macro not found + マクロが見つかりません - Sorry, couldn't find macro file '%1'. - 申し訳ありませんが、マクロ ファイル '%1' を見つけることができませんでした。 + Sorry, couldn't find macro file '%1'. + 申し訳ありませんが、マクロ ファイル '%1' を見つけることができませんでした。 - Empty macro - 空のマクロ + Empty macro + 空のマクロ - Please specify the macro first. - 最初に、マクロを指定してください。 + Please specify the macro first. + 最初に、マクロを指定してください。 - Empty text - 空のテキスト + Empty text + 空のテキスト - Please specify the menu text first. - 最初にメニューテキストを指定してください。 + Please specify the menu text first. + 最初にメニューテキストを指定してください。 - No item selected - アイテムが選択されていません + No item selected + アイテムが選択されていません - Please select a macro item first. - 最初に、マクロの項目を選択してください。 + Please select a macro item first. + 最初に、マクロの項目を選択してください。 - - + + Gui::Dialog::DlgCustomCommands - Commands - コマンド + Commands + コマンド - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - 分類 + Category + 分類 - Icon - アイコン + Icon + アイコン - Command - コマンド + Command + コマンド - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - キーボード + Keyboard + キーボード - Description: - 説明: + Description: + 説明: - &Category: - カテゴリ(&C): + &Category: + カテゴリ(&C): - C&ommands: - コマンド(&O): + C&ommands: + コマンド(&O): - Current shortcut: - 現在のショートカット: + Current shortcut: + 現在のショートカット: - Press &new shortcut: - 新しいショートカットをプレス(&N): + Press &new shortcut: + 新しいショートカットをプレス(&N): - Currently assigned to: - 現在の割り当て: + Currently assigned to: + 現在の割り当て: - &Assign - 割り当て(&A) + &Assign + 割り当て(&A) - Alt+A - [Alt] + A + Alt+A + [Alt] + A - &Reset - リセット(&R) + &Reset + リセット(&R) - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - すべてリセット(&S) + Re&set All + すべてリセット(&S) - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - アイコン + Icon + アイコン - Command - コマンド + Command + コマンド - none - なし + none + なし - Multiple defined shortcut - ショートカットの複数回定義 + Multiple defined shortcut + ショートカットの複数回定義 - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - このショートカット'%1'はすでに使われています。これは予期しない結果を引き起こす原因になる場合があります。 + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + このショートカット'%1'はすでに使われています。これは予期しない結果を引き起こす原因になる場合があります。 - Already defined shortcut - 既に定義されたショートカット + Already defined shortcut + 既に定義されたショートカット - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - このショートカット'%1'は、'%2'に割り当てられています。 + このショートカット'%1'は、'%2'に割り当てられています。 別のショートカットを割り当ててください。 - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - ツールボックスバー + Toolbox bars + ツールボックスバー - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - ツールバー + Toolbars + ツールバー - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - Move right - 右へ移動 + Move right + 右へ移動 - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>選択した項目1つ下のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>選択した項目1つ下のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> - Move left - 左へ移動 + Move left + 左へ移動 - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>選択した項目を1つ上のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>選択した項目を1つ上のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> - Move down - 下へ移動 + Move down + 下へ移動 - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>選択された項目を下へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>選択された項目を下へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> - Move up - 上へ移動 + Move up + 上へ移動 - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>選択された項目を上へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>選択された項目を上へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> - New... - 新規... + New... + 新規... - Rename... - 名前の変更... + Rename... + 名前の変更... - Delete - 削除 + Delete + 削除 - Icon - アイコン + Icon + アイコン - Command - コマンド + Command + コマンド - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - 新しいツールバー + New toolbar + 新しいツールバー - Toolbar name: - ツールバー名: + Toolbar name: + ツールバー名: - Duplicated name - 重複名 + Duplicated name + 重複名 - The toolbar name '%1' is already used - ツールバーの名前'%1'は既に使われています。 + The toolbar name '%1' is already used + ツールバーの名前'%1'は既に使われています。 - Rename toolbar - ツールバーの名前を変更 + Rename toolbar + ツールバーの名前を変更 - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - カスタマイズ + Customize + カスタマイズ - &Help - ヘルプ (&H) + &Help + ヘルプ (&H) - &Close - 閉じる(&C) + &Close + 閉じる(&C) - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - ボタン + Buttons + ボタン - Clear - クリア + Clear + クリア - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - プロパティの表示 + Display properties + プロパティの表示 - Display - 表示 + Display + 表示 - Transparency: - 透明度: + Transparency: + 透明度: - Line width: - 線幅: + Line width: + 線幅: - Point size: - 点の大きさ: + Point size: + 点の大きさ: - Material - 素材 + Material + 素材 - ... - ... + ... + ... - Close - 閉じる + Close + 閉じる - Viewing mode - 表示モード + Viewing mode + 表示モード - Display mode: - ディスプレイモード: + Display mode: + ディスプレイモード: - Plot mode: - プロットモード: + Plot mode: + プロットモード: - - + + - Line transparency: - Line transparency: + Line transparency: + Line transparency: - Line color: - 線の色: + Line color: + 線の色: - Shape color: - 図形の色: + Shape color: + 図形の色: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - エディタ + Editor + エディタ - Options - オプション + Options + オプション - Enable line numbers - 行番号を有効にします。 + Enable line numbers + 行番号を有効にします。 - Enable folding - 折りたたみを有効にします。 + Enable folding + 折りたたみを有効にします。 - Indentation - 字下げ + Indentation + 字下げ - Insert spaces - 空白の挿入 + Insert spaces + 空白の挿入 - Tab size: - タブサイズ: + Tab size: + タブサイズ: - Indent size: - インデントのサイズ: + Indent size: + インデントのサイズ: - Keep tabs - タブを維持 + Keep tabs + タブを維持 - Display Items - 表示項目 + Display Items + 表示項目 - Family: - ファミリー: + Family: + ファミリー: - Size: - サイズ: + Size: + サイズ: - Preview: - プレビュー: + Preview: + プレビュー: - - + + - - + + Gui::Dialog::DlgGeneral - General - 標準 + General + 標準 - Start up - 起動 + Start up + 起動 - Enable splash screen at start up - 起動時にスプラッシュ画面を表示 + Enable splash screen at start up + 起動時にスプラッシュ画面を表示 - Switch to tab of report window: - レポートウィンドウのタブに切り替え: + Switch to tab of report window: + レポートウィンドウのタブに切り替え: - Auto load module after start up: - スタートアップの後の自動ロード・モジュール: + Auto load module after start up: + スタートアップの後の自動ロード・モジュール: - Language - 言語 + Language + 言語 - Change language: - 言語を変更: + Change language: + 言語を変更: - Main window - メインウィンドウ + Main window + メインウィンドウ - Size of recent file list - 最近使ったファイルリストのサイズ + Size of recent file list + 最近使ったファイルリストのサイズ - Window style: - ウィンドウスタイル: + Window style: + ウィンドウスタイル: - Size of toolbar icons: - Size of toolbar icons: + Size of toolbar icons: + Size of toolbar icons: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Default (%1 x %1) + Default (%1 x %1) + Default (%1 x %1) - Small (%1 x %1) - Small (%1 x %1) + Small (%1 x %1) + Small (%1 x %1) - Large (%1 x %1) - Large (%1 x %1) + Large (%1 x %1) + Large (%1 x %1) - Extra large (%1 x %1) - Extra large (%1 x %1) + Extra large (%1 x %1) + Extra large (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - ウィンドウスタイル: + Input + ウィンドウスタイル: - OK - OK + OK + OK - Cancel - キャンセル + Cancel + キャンセル - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - シーンインスペクタ + Scene Inspector + シーンインスペクタ - - + + Gui::Dialog::DlgMacroExecute - Execute macro - マクロの実行 + Execute macro + マクロの実行 - Macro name: - マクロ名: + Macro name: + マクロ名: - Macro destination: - マクロのコピー先: + Macro destination: + マクロのコピー先: - Execute - 実行 + Execute + 実行 - Close - 閉じる + Close + 閉じる - Create - 作成 + Create + 作成 - Delete - 削除 + Delete + 削除 - Edit - 編集 + Edit + 編集 - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - マクロ + Macros + マクロ - Macro file - マクロファイル + Macro file + マクロファイル - Enter a file name, please: - ファイル名を入力してください: + Enter a file name, please: + ファイル名を入力してください: - Existing file - 既存ファイル + Existing file + 既存ファイル - '%1'. + '%1'. This file already exists. - '%1'.このファイルは既に存在します。 + '%1'.このファイルは既に存在します。 - Delete macro - マクロの削除 + Delete macro + マクロの削除 - Do you really want to delete the macro '%1'? - マクロ '%1' を削除しますか? + Do you really want to delete the macro '%1'? + マクロ '%1' を削除しますか? - Cannot create file - ファイルを作成できません。 + Cannot create file + ファイルを作成できません。 - Creation of file '%1' failed. - ファイル '%1' の作成に失敗しました。 + Creation of file '%1' failed. + ファイル '%1' の作成に失敗しました。 - - + + Gui::Dialog::DlgMacroRecord - Macro recording - マクロの記録 + Macro recording + マクロの記録 - Macro name: - マクロ名: + Macro name: + マクロ名: - Stop - 停止 + Stop + 停止 - Cancel - キャンセル + Cancel + キャンセル - Macro path: - マクロのパス: + Macro path: + マクロのパス: - ... - ... + ... + ... - Record - 記録 + Record + 記録 - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - マクロの記録 + Macro recorder + マクロの記録 - Specify first a place to save. - 最初に保存する場所を指定してください。 + Specify first a place to save. + 最初に保存する場所を指定してください。 - Existing macro - 既存のマクロ + Existing macro + 既存のマクロ - The macro '%1' already exists. Do you want to overwrite? - マクロ'%1'は既に存在します。上書きしますか? + The macro '%1' already exists. Do you want to overwrite? + マクロ'%1'は既に存在します。上書きしますか? - The macro directory doesn't exist. Please, choose another one. - マクロのディレクトリが存在しません。別のものを選択してください。 + The macro directory doesn't exist. Please, choose another one. + マクロのディレクトリが存在しません。別のものを選択してください。 - Choose macro directory - マクロのディレクトリを選択します。 + Choose macro directory + マクロのディレクトリを選択します。 - - + + Gui::Dialog::DlgMaterialProperties - Material properties - 材料特性 + Material properties + 材料特性 - &Close - 閉じる(&C) + &Close + 閉じる(&C) - Alt+C - Alt+C + Alt+C + Alt+C - Material - 素材 + Material + 素材 - Diffuse color: - 散乱光の色: + Diffuse color: + 散乱光の色: - Specular color: - 鏡面反射光の色: + Specular color: + 鏡面反射光の色: - Shininess: - 光沢: + Shininess: + 光沢: - % - % + % + % - Ambient color: - 環境光の色: + Ambient color: + 環境光の色: - - + + - Emissive color: - Emissive color: + Emissive color: + Emissive color: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - オンライン ヘルプ + On-line help + オンライン ヘルプ - Help viewer - ヘルプ ・ ビューアー + Help viewer + ヘルプ ・ ビューアー - Location of start page - スタートページの場所 + Location of start page + スタートページの場所 - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML ファイル (*.htm *.html) + HTML files (*.html *.htm) + HTML ファイル (*.htm *.html) - Access denied - アクセスが拒否されました + Access denied + アクセスが拒否されました - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - '%1'にアクセス拒否されました 別のディレクトリを指定してください。 + '%1'にアクセス拒否されました 別のディレクトリを指定してください。 - - + + Gui::Dialog::DlgParameter - Parameter Editor - パラメータエディタ + Parameter Editor + パラメータエディタ - Save to disk - ディスクに保存 + Save to disk + ディスクに保存 - Alt+C - Alt+C + Alt+C + Alt+C - &Close - 閉じる(&C) + &Close + 閉じる(&C) - - + + Gui::Dialog::DlgParameterImp - Group - グループ + Group + グループ - Name - 名前 + Name + 名前 - Type - タイプ + Type + タイプ - Value - + Value + - User parameter - ユーザー パラメータ + User parameter + ユーザー パラメータ - Invalid input - 無効な入力 + Invalid input + 無効な入力 - Invalid key name '%1' - 無効なキー名 '%1' + Invalid key name '%1' + 無効なキー名 '%1' - System parameter - システム パラメータ + System parameter + システム パラメータ - - + + Gui::Dialog::DlgPreferences - Preferences - 設定 + Preferences + 設定 - &Help - ヘルプ (&H) + &Help + ヘルプ (&H) - Alt+H - Alt+H + Alt+H + Alt+H - &OK - OK + &OK + OK - &Apply - 適用(&A) + &Apply + 適用(&A) - Alt+A - [Alt] + A + Alt+A + [Alt] + A - &Cancel - キャンセル + &Cancel + キャンセル - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - 間違ったパラメータ + Wrong parameter + 間違ったパラメータ - - + + Gui::Dialog::DlgProjectInformation - Project information - プロジェクト情報 + Project information + プロジェクト情報 - Information - 情報 + Information + 情報 - &Name: - 名前(&N): + &Name: + 名前(&N): - Commen&t: - コメント(&T): + Commen&t: + コメント(&T): - Path: - パス: + Path: + パス: - &Last modified by: - 最終更新日時(&C): + &Last modified by: + 最終更新日時(&C): - Created &by: - Created &by: + Created &by: + Created &by: - Com&pany: - Com&pany: + Com&pany: + Com&pany: - Last &modification date: - 最終更新日(&M): + Last &modification date: + 最終更新日(&M): - Creation &date: - 作成日(&D): + Creation &date: + 作成日(&D): - &OK - OK + &OK + OK - &Cancel - キャンセル + &Cancel + キャンセル - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - プロジェクトユーティリティ + Project utility + プロジェクトユーティリティ - Extract project - プロジェクトを抽出 + Extract project + プロジェクトを抽出 - Source - Source + Source + Source - Project file (*.fcstd) - プロジェクトファイル (*.fcstd) + Project file (*.fcstd) + プロジェクトファイル (*.fcstd) - Destination - Destination + Destination + Destination - Extract - 抽出 + Extract + 抽出 - Create project - Create project + Create project + Create project - Document.xml - Document.xml + Document.xml + Document.xml - Create - 作成 + Create + 作成 - Load project file after creation - Load project file after creation + Load project file after creation + Load project file after creation - Empty source - Empty source + Empty source + Empty source - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Empty destination + Empty destination + Empty destination - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - 出力ウィンドウ + Output window + 出力ウィンドウ - Output - 出力 + Output + 出力 - Record log messages - ログメッセージを記録 + Record log messages + ログメッセージを記録 - Record warnings - 警告メッセージを記録 + Record warnings + 警告メッセージを記録 - Record error messages - エラーメッセージを記録 + Record error messages + エラーメッセージを記録 - Colors - + Colors + - Normal messages: - 通常のメッセージ: + Normal messages: + 通常のメッセージ: - Log messages: - ログ メッセージ: + Log messages: + ログ メッセージ: - Warnings: - 警告メッセージ: + Warnings: + 警告メッセージ: - Errors: - エラー: + Errors: + エラー: - - + + - Redirect internal Python errors to report view - Redirect internal Python errors to report view + Redirect internal Python errors to report view + Redirect internal Python errors to report view - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - 外部プログラムを実行する + Running external program + 外部プログラムを実行する - TextLabel - テキストラベル + TextLabel + テキストラベル - Advanced >> - 高度な >> + Advanced >> + 高度な >> - ... - ... + ... + ... - Accept changes - 変更を確定します。 + Accept changes + 変更を確定します。 - Discard changes - 変更を破棄 + Discard changes + 変更を破棄 - Abort program - プログラムを中止します。 + Abort program + プログラムを中止します。 - Help - ヘルプ + Help + ヘルプ - Select a file - ファイルを選択してください + Select a file + ファイルを選択してください - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D 表示 + 3D View + 3D 表示 - 3D View settings - 3D表示の設定 + 3D View settings + 3D表示の設定 - Show coordinate system in the corner - 角で座標系を表示する + Show coordinate system in the corner + 角で座標系を表示する - Show counter of frames per second - 1 秒あたりのフレーム数のカウンターを表示します。 + Show counter of frames per second + 1 秒あたりのフレーム数のカウンターを表示します。 - Enable animation - アニメーションを有効にします。 + Enable animation + アニメーションを有効にします。 - Enable anti-aliasing (slower) - アンチエイリアス (低速) を有効にします。 + Enable anti-aliasing (slower) + アンチエイリアス (低速) を有効にします。 - Eye to eye distance for stereo modes: - 眼球間の距離 ステレオモード時: + Eye to eye distance for stereo modes: + 眼球間の距離 ステレオモード時: - Camera type - カメラの種類 + Camera type + カメラの種類 - Orthographic rendering - 正投影図のレンダリング + Orthographic rendering + 正投影図のレンダリング - Perspective rendering - 視点レンダリング + Perspective rendering + 視点レンダリング - - + + - 3D Navigation - 3Dナビゲーション + 3D Navigation + 3Dナビゲーション - Mouse... - マウス... + Mouse... + マウス... - Intensity of backlight - Intensity of backlight + Intensity of backlight + Intensity of backlight - Enable backlight color - バックライトの色を有効にする + Enable backlight color + バックライトの色を有効にする - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigation + %1 navigation + %1 navigation - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - カラーモデル + Color model + カラーモデル - &Gradient: - &グラデーション: + &Gradient: + &グラデーション: - red-yellow-green-cyan-blue - 赤、黄、緑-シアン-青 + red-yellow-green-cyan-blue + 赤、黄、緑-シアン-青 - blue-cyan-green-yellow-red - 青-シアン-緑-黄-赤 + blue-cyan-green-yellow-red + 青-シアン-緑-黄-赤 - white-black - 白黒 + white-black + 白黒 - black-white - 白黒 + black-white + 白黒 - Visibility - 可視性 + Visibility + 可視性 - Out g&rayed - Out g&rayed + Out g&rayed + Out g&rayed - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Out &invisible + Out &invisible + Out &invisible - Alt+I - Alt+I + Alt+I + Alt+I - Style - スタイル + Style + スタイル - &Zero - &Zero + &Zero + &Zero - Alt+Z - Alt + Zキー + Alt+Z + Alt + Zキー - &Flow - &Flow + &Flow + &Flow - Alt+F - Alt + Fキー + Alt+F + Alt + Fキー - &OK - OK + &OK + OK - &Cancel - キャンセル + &Cancel + キャンセル - Parameter range - パラメータの範囲 + Parameter range + パラメータの範囲 - Mi&nimum: - 最小(&n): + Mi&nimum: + 最小(&n): - Ma&ximum: - 最大 (&x): + Ma&ximum: + 最大 (&x): - &Labels: - &Labels: + &Labels: + &Labels: - &Decimals: - &Decimals: + &Decimals: + &Decimals: - - + + - Color-gradient settings - Color-gradient settings + Color-gradient settings + Color-gradient settings - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - 間違ったパラメータ + Wrong parameter + 間違ったパラメータ - The maximum value must be higher than the minimum value. - 最大値は最小値よりも大きくする必要があります。 + The maximum value must be higher than the minimum value. + 最大値は最小値よりも大きくする必要があります。 - - + + Gui::Dialog::DlgSettingsDocument - Document - ドキュメント + Document + ドキュメント - General - 標準 + General + 標準 - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Create new document at start up - 開始時に新しいドキュメントを作成します。 + Create new document at start up + 開始時に新しいドキュメントを作成します。 - Storage - ストレージ + Storage + ストレージ - Saving transactions (Auto-save) - 変更内容を保存(自動保存) + Saving transactions (Auto-save) + 変更内容を保存(自動保存) - Discard saved transaction after saving document - ドキュメントを保存した後、保存された変更内容を破棄します。 + Discard saved transaction after saving document + ドキュメントを保存した後、保存された変更内容を破棄します。 - Save thumbnail into project file when saving document - ドキュメントを保存するときにサムネールをプロジェクトファイルに保存します。 + Save thumbnail into project file when saving document + ドキュメントを保存するときにサムネールをプロジェクトファイルに保存します。 - Create up to backup files when resaving document - Create up to backup files when resaving document + Create up to backup files when resaving document + Create up to backup files when resaving document - Document objects - Document objects + Document objects + Document objects - Allow duplicate object labels in one document - Allow duplicate object labels in one document + Allow duplicate object labels in one document + Allow duplicate object labels in one document - Maximum Undo/Redo steps - 「元に戻す/やり直し」の最大数 + Maximum Undo/Redo steps + 「元に戻す/やり直し」の最大数 - Using Undo/Redo on documents - ドキュメントで元に戻す/やり直しの使用 + Using Undo/Redo on documents + ドキュメントで元に戻す/やり直しの使用 - - + + Gui::Dialog::DlgSettingsEditorImp - Text - テキスト + Text + テキスト - Bookmark - テキスト + Bookmark + テキスト - Breakpoint - ブレークポイント + Breakpoint + ブレークポイント - Keyword - キーワード + Keyword + キーワード - Comment - コメント + Comment + コメント - Block comment - Block comment + Block comment + Block comment - Number - 数値 + Number + 数値 - String - 文字列 + String + 文字列 - Character - 文字 + Character + 文字 - Class name - クラス名 + Class name + クラス名 - Define name - 名前の定義 + Define name + 名前の定義 - Operator - 演算子 + Operator + 演算子 - Python output - Python出力 + Python output + Python出力 - Python error - Pythonエラー + Python error + Pythonエラー - Items - 項目 + Items + 項目 - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - 画像設定 + Image settings + 画像設定 - Image properties - 画像のプロパティ + Image properties + 画像のプロパティ - Back&ground: - 背景色: + Back&ground: + 背景色: - Current - 現在の + Current + 現在の - White - + White + - Black - + Black + - Transparent - 透明 + Transparent + 透明 - Image dimensions - 画像の寸法(E) + Image dimensions + 画像の寸法(E) - Pixel - ピクセル + Pixel + ピクセル - &Width: - &幅: + &Width: + &幅: - Current screen - 現在の画面 + Current screen + 現在の画面 - Icon 32 x 32 - アイコン32 × 32 + Icon 32 x 32 + アイコン32 × 32 - Icon 64 x 64 - アイコン 64 × 64 + Icon 64 x 64 + アイコン 64 × 64 - Icon 128 x 128 - アイコン 128 × 128 + Icon 128 x 128 + アイコン 128 × 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 × 720 + HD720 1280 x 720 + HD720 1280 × 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA + 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA + 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 × 1080 + HD1080 1920 x 1080 + HD1080 1920 × 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1651 + QXGA 2048 x 1538 + QXGA 2048 x 1651 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!!10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + 標準サイズ: - !!! 10000 x 10000 - !!!10000 x 10000 + &Height: + &高さ: - Standard sizes: - 標準サイズ: + Aspect ratio: + アスペクト比: - &Height: - &高さ: + &Screen + & 画面 - Aspect ratio: - アスペクト比: + Alt+S + Alt+S - &Screen - & 画面 + &4:3 + & 4: 3 - Alt+S - Alt+S + Alt+4 + Alt + 4 - &4:3 - & 4: 3 + 1&6:9 + 1&6:9 - Alt+4 - Alt + 4 + Alt+6 + Alt + 6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt + 6 + Alt+1 + Alt + 1 - &1:1 - &1:1 + Image comment + 画像のコメント - Alt+1 - Alt + 1 + Insert MIBA + MIBA の挿入 - Image comment - 画像のコメント + Insert comment + コメントの挿入 - - Insert MIBA - MIBA の挿入 - - - Insert comment - コメントの挿入 - - - + + Gui::Dialog::DlgSettingsMacro - Macro - マクロ + Macro + マクロ - Macro recording settings - マクロの記録の設定 + Macro recording settings + マクロの記録の設定 - Logging Commands - 履歴コマンド + Logging Commands + 履歴コマンド - Show script commands in python console - Python コンソールでスクリプト コマンドを表示します。 + Show script commands in python console + Python コンソールでスクリプト コマンドを表示します。 - Log all commands issued by menus to file: - メニューから発行された全ての命令をファイルに記録します: + Log all commands issued by menus to file: + メニューから発行された全ての命令をファイルに記録します: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - GUIコマンド + Gui commands + GUIコマンド - Recording GUI commands - GUIコマンドの記録 + Recording GUI commands + GUIコマンドの記録 - Record as comment - コメントとして記録 + Record as comment + コメントとして記録 - Macro path - マクロのパス + Macro path + マクロのパス - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Units + Units + Units - Units settings - 単位の設定 + Units settings + 単位の設定 - Standard (mm/kg/s/degree) - Standard (mm/kg/s/degree) + Standard (mm/kg/s/degree) + Standard (mm/kg/s/degree) - MKS (m/kg/s/degree) - MKS (m/kg/s/degree) + MKS (m/kg/s/degree) + MKS (m/kg/s/degree) - Magnitude - Magnitude + Magnitude + Magnitude - Unit - Unit + Unit + Unit - User system: - User system: + User system: + User system: - Imperial (in/lb) - Imperial (in/lb) + Imperial (in/lb) + Imperial (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - + Colors + - Selection - 選択範囲 + Selection + 選択範囲 - Enable selection highlighting - 選択範囲の強調表示を有効にします。 + Enable selection highlighting + 選択範囲の強調表示を有効にします。 - Enable preselection highlighting - Enable preselection highlighting + Enable preselection highlighting + Enable preselection highlighting - Background color - 背景色 + Background color + 背景色 - Middle color - Middle color + Middle color + Middle color - Color gradient - カラーグラデーション + Color gradient + カラーグラデーション - Simple color - シンプルな色 + Simple color + シンプルな色 - Default colors - Default colors + Default colors + Default colors - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - ワンポイントアドバイス + Tip of the day + ワンポイントアドバイス - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"> <font size="+3"> 知っていますか...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"> <font size="+3"> 知っていますか...</font></font></b> - &Show tips at start up - &起動時にヒントを表示 + &Show tips at start up + &起動時にヒントを表示 - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &次のヒント + &Next Tip + &次のヒント - Alt+N - Alt + N + Alt+N + Alt + N - &Close - 閉じる(&C) + &Close + 閉じる(&C) - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - ダウンロードに失敗しました: %1 + ダウンロードに失敗しました: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - FreeCAD についてもっと詳しく知りたい場合 %1 へ行く、あるいはヘルプ項目 [ヘルプ] メニューでキーを押す必要があります. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + FreeCAD についてもっと詳しく知りたい場合 %1 へ行く、あるいはヘルプ項目 [ヘルプ] メニューでキーを押す必要があります. - - + + Gui::Dialog::DockablePlacement - Placement - Placement + Placement + Placement - - + + Gui::Dialog::DownloadDialog - Canceled. - Canceled. + Canceled. + Canceled. - - + + Download + + + + Cancel + キャンセル + + + Close + 閉じる + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + ダウンロードに失敗しました: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Add icon + Add icon + Add icon - - + + Gui::Dialog::InputVector - Input vector - 入力ベクトル + Input vector + 入力ベクトル - Vector - ベクトル + Vector + ベクトル - Z: - z: + Z: + z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - マウスボタン + Mouse buttons + マウスボタン - Configuration - Configuration + Configuration + Configuration - Selection: - Selection: + Selection: + Selection: - Panning - Panning + Panning + Panning - Rotation: - 回転: + Rotation: + 回転: - Zooming: - Zooming: + Zooming: + Zooming: - - + + Gui::Dialog::ParameterGroup - Expand - 開く + Expand + 開く - Add sub-group - サブグループを追加 + Add sub-group + サブグループを追加 - Remove group - グループを削除 + Remove group + グループを削除 - Rename group - グループ名変更 + Rename group + グループ名変更 - Export parameter - エクスポートパラメータ + Export parameter + エクスポートパラメータ - Import parameter - インポートパラメータ + Import parameter + インポートパラメータ - Collapse - 折りたたむ + Collapse + 折りたたむ - Do really want to remove this parameter group? - 本当にこのパラメーターのグループを削除しますか。 + Do really want to remove this parameter group? + 本当にこのパラメーターのグループを削除しますか。 - Existing sub-group - 既存のサブグループ + Existing sub-group + 既存のサブグループ - The sub-group '%1' already exists. - サブグループ '%1' は既に存在します. + The sub-group '%1' already exists. + サブグループ '%1' は既に存在します. - Export parameter to file - パラメーターをファイルにエクスポートします。 + Export parameter to file + パラメーターをファイルにエクスポートします。 - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - パラメーターをファイルからインポートします。 + Import parameter from file + パラメーターをファイルからインポートします。 - Import Error - インポートエラー + Import Error + インポートエラー - Reading from '%1' failed. - '%1' からの読み取りに失敗しました。 + Reading from '%1' failed. + '%1' からの読み取りに失敗しました。 - - + + Gui::Dialog::ParameterValue - Change value - 値を変更 + Change value + 値を変更 - Remove key - キーを削除 + Remove key + キーを削除 - Rename key - 名前変更キー + Rename key + 名前変更キー - New - 新規作成 + New + 新規作成 - New string item - 新しい文字列項目 + New string item + 新しい文字列項目 - New float item - 新しいフロートアイテム + New float item + 新しいフロートアイテム - New integer item - 新しい整数項目 + New integer item + 新しい整数項目 - New unsigned item - 新しい符号なし項目 + New unsigned item + 新しい符号なし項目 - New Boolean item - 新しいブール項目 + New Boolean item + 新しいブール項目 - Existing item - 既存の項目 + Existing item + 既存の項目 - The item '%1' already exists. - 項目 '%1' は既に存在します。 + The item '%1' already exists. + 項目 '%1' は既に存在します。 - - + + Gui::Dialog::Placement - Placement - Placement + Placement + Placement - OK - OK + OK + OK - Translation: - Translation: + Translation: + Translation: - Z: - z: + Z: + z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - 回転: + Rotation: + 回転: - Angle: - 角度: + Angle: + 角度: - Axis: - 軸: + Axis: + 軸: - Center: - Center: + Center: + Center: - Pitch: - Pitch: + Pitch: + Pitch: - Roll: - Roll: + Roll: + Roll: - Yaw: - Yaw: + Yaw: + Yaw: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Euler angles + Euler angles + Euler angles - Apply placement changes immediately - Apply placement changes immediately + Apply placement changes immediately + Apply placement changes immediately - Apply incremental changes to object placement - Apply incremental changes to object placement + Apply incremental changes to object placement + Apply incremental changes to object placement - Apply - 適用する + Apply + 適用する - Reset - リセット + Reset + リセット - Close - 閉じる + Close + 閉じる - - + + Gui::Dialog::PrintModel - Button - Button + Button + Button - Command - コマンド + Command + コマンド - - + + Gui::Dialog::SceneInspector - Dialog - ダイアログ + Dialog + ダイアログ - Close - 閉じる + Close + 閉じる - Refresh - 更新 + Refresh + 更新 - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor Tree + Inventor Tree + Inventor Tree - Nodes - ノード + Nodes + ノード - - + + Gui::Dialog::TextureMapping - Texture - テクスチャ + Texture + テクスチャ - Texture mapping - テクスチャーマッピング + Texture mapping + テクスチャーマッピング - Global - Global + Global + Global - Environment - Environment + Environment + Environment - Image files (%1) - Image files (%1) + Image files (%1) + Image files (%1) - No image - 画像がありません + No image + 画像がありません - The specified file is not a valid image file. - The specified file is not a valid image file. + The specified file is not a valid image file. + The specified file is not a valid image file. - No 3d view - 3Dビューがありません + No 3d view + 3Dビューがありません - No active 3d view found. - No active 3d view found. + No active 3d view found. + No active 3d view found. - - + + Gui::Dialog::Transform - Cancel - キャンセル + Cancel + キャンセル - Transform - 変換 + Transform + 変換 - - + + Gui::DlgTreeWidget - Dialog - ダイアログ + Dialog + ダイアログ - Items - 項目 + Items + 項目 - OK - OK + OK + OK - Cancel - キャンセル + Cancel + キャンセル - - + + - - + + Gui::DockWnd::CombiView - CombiView - コンビビュー + CombiView + コンビビュー - Project - プロジェクト + Project + プロジェクト - Tasks - 作業 + Tasks + 作業 - - + + Gui::DockWnd::HelpView - Previous - 前へ + Previous + 前へ - Next - 次へ + Next + 次へ - Home - ホーム + Home + ホーム - Open - 開く + Open + 開く - Open file - ファイルを開く + Open file + ファイルを開く - All HTML files (*.html *.htm) - すべての HTML ファイル (*.htm *.html) + All HTML files (*.html *.htm) + すべての HTML ファイル (*.htm *.html) - External browser - 外部ブラウザ + External browser + 外部ブラウザ - No external browser found. Specify in preferences, please - 外部ブラウザーが設定されていません。環境設定で指定してください。 + No external browser found. Specify in preferences, please + 外部ブラウザーが設定されていません。環境設定で指定してください。 - Starting of %1 failed - Starting of %1 failed + Starting of %1 failed + Starting of %1 failed - - + + Gui::DockWnd::PropertyDockView - Property View - プロパティ表示 + Property View + プロパティ表示 - - + + Gui::DockWnd::ReportOutput - Logging - ログ記録 + Logging + ログ記録 - Warning - 警告 + Warning + 警告 - Error - エラー + Error + エラー - Options - オプション + Options + オプション - Clear - クリア + Clear + クリア - Save As... - 名前を付けて保存... + Save As... + 名前を付けて保存... - Save Report Output - レポート出力を保存する + Save Report Output + レポート出力を保存する - Plain Text Files (*.txt *.log) - テキスト ファイル (*.txt * .log) + Plain Text Files (*.txt *.log) + テキスト ファイル (*.txt * .log) - Go to end - Go to end + Go to end + Go to end - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Pythonのエラーをリダイレクトします。 + Redirect Python errors + Pythonのエラーをリダイレクトします。 - - + + Gui::DockWnd::ReportView - Output - 出力 + Output + 出力 - Python console - Python コンソール + Python console + Python コンソール - - + + Gui::DockWnd::SelectionView - Property View - プロパティ表示 + Property View + プロパティ表示 - - + + Gui::DockWnd::TaskPanelView - Task View - タスクビュー + Task View + タスクビュー - - + + Gui::DockWnd::TextBrowser - Could not open file. - ファイルを開けませんでした。 + Could not open file. + ファイルを開けませんでした。 - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - 現在利用できないアドレス%1にアクセスしようとしました。 URLが存在することを確認し、ページを再読み込みしてください。 + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + 現在利用できないアドレス%1にアクセスしようとしました。 URLが存在することを確認し、ページを再読み込みしてください。 - Connecting to %1 - %1 へ接続 + Connecting to %1 + %1 へ接続 - Sending to %1 - Sending to %1 + Sending to %1 + Sending to %1 - Reading from %1 - Reading from %1 + Reading from %1 + Reading from %1 - Download failed: %1. - ダウンロードに失敗しました: %1. + Download failed: %1. + ダウンロードに失敗しました: %1. - Previous - 前へ + Previous + 前へ - Forward - Forward + Forward + Forward - Home - ホーム + Home + ホーム - Refresh - 更新 + Refresh + 更新 - Copy - コピー + Copy + コピー - Select all - すべてを選択 + Select all + すべてを選択 - No description for - No description for + No description for + No description for - - + + Gui::DocumentModel - Application - アプリケーション + Application + アプリケーション - Labels & Attributes - ラベルと属性 + Labels & Attributes + ラベルと属性 - - + + Gui::EditorView - Modified file - 変更されたファイル + Modified file + 変更されたファイル - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - Unsaved document - 未保存のドキュメント + Unsaved document + 未保存のドキュメント - The document has been modified. + The document has been modified. Do you want to save your changes? - The document has been modified. + The document has been modified. Do you want to save your changes? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCADマクロ(*.FCMacro); Python(*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCADマクロ(*.FCMacro); Python(*.py) - Export PDF - PDFファイル形式でエクスポート + Export PDF + PDFファイル形式でエクスポート - PDF file (*.pdf) - PDFファイル(*.pdf) + PDF file (*.pdf) + PDFファイル(*.pdf) - untitled[*] - untitled[*] + untitled[*] + untitled[*] - - Editor - - Editor + - Editor + - Editor - %1 chars removed - %1 chars removed + %1 chars removed + %1 chars removed - %1 chars added - %1 chars added + %1 chars added + %1 chars added - Formatted - Formatted + Formatted + Formatted - - + + Gui::FileChooser - Select a file - ファイルを選択してください + Select a file + ファイルを選択してください - Select a directory - ディレクトリを選択 + Select a directory + ディレクトリを選択 - - + + Gui::FileDialog - Save as - 名前を付けて保存 + Save as + 名前を付けて保存 - Open - 開く + Open + 開く - - + + Gui::FileOptionsDialog - Extended - 拡張 + Extended + 拡張 - All files (*.*) - すべてのファイル (*.*) + All files (*.*) + すべてのファイル (*.*) - - + + Gui::Flag - Top left - 左上 + Top left + 左上 - Bottom left - 左下 + Bottom left + 左下 - Top right - 右上 + Top right + 右上 - Bottom right - 右下 + Bottom right + 右下 - Remove - 削除 + Remove + 削除 - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Ctrlキーを押しながらマウスの左ボタンを押してください + Press CTRL and left mouse button + Ctrlキーを押しながらマウスの左ボタンを押してください - Press middle mouse button - マウスの中央のボタンを押す + Press middle mouse button + マウスの中央のボタンを押す - Press left mouse button - マウスの左ボタンを押す + Press left mouse button + マウスの左ボタンを押す - Scroll middle mouse button - マウスの中央ボタンをスクロールする + Scroll middle mouse button + マウスの中央ボタンをスクロールする - - + + Gui::LocationDialog - Wrong direction - 間違った方向 + Wrong direction + 間違った方向 - Direction must not be the null vector - 方向はnullのベクトルであってはならない + Direction must not be the null vector + 方向はnullのベクトルであってはならない - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - ユーザ定義... + User defined... + ユーザ定義... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + z: + + + Direction: + + + + Gui::MacroCommand - Macros - マクロ + Macros + マクロ - - + + Gui::MainWindow - Dimension - 寸法 + Dimension + 寸法 - Ready - 準備完了 + Ready + 準備完了 - Toggles this toolbar - このツールバーを切り替えます + Toggles this toolbar + このツールバーを切り替えます - Toggles this dockable window - このドッキング可能なウィンドウを切り替える + Toggles this dockable window + このドッキング可能なウィンドウを切り替える - Close All - すべてを閉じる + Close All + すべてを閉じる - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - ダウンロードを開始しました... + ダウンロードを開始しました... - - + + Gui::ProgressBar - Remaining: %1 - 残り:%1 + Remaining: %1 + 残り:%1 - Aborting - 中止します + Aborting + 中止します - Do you really want to abort the operation? - 操作を中止してよろしいですか? + Do you really want to abort the operation? + 操作を中止してよろしいですか? - - + + Gui::ProgressDialog - Remaining: %1 - 残り:%1 + Remaining: %1 + 残り:%1 - Aborting - 中止します + Aborting + 中止します - Do you really want to abort the operation? - 操作を中止してよろしいですか? + Do you really want to abort the operation? + 操作を中止してよろしいですか? - - + + Gui::PropertyEditor::PropertyModel - Property - プロパティ + Property + プロパティ - Value - + Value + - - + + Gui::PropertyView - View - ビュー + View + ビュー - Data - データ + Data + データ - - + + Gui::PythonConsole - System exit - システム終了 + System exit + システム終了 - The application is still running. + The application is still running. Do you want to exit without saving your data? - アプリケーションがまだ実行されています。あなたのデータを保存せずに終了しますか。 + アプリケーションがまだ実行されています。あなたのデータを保存せずに終了しますか。 - Python console - Python コンソール + Python console + Python コンソール - Unhandled PyCXX exception. - 未処理のPyCXX例外。 + Unhandled PyCXX exception. + 未処理のPyCXX例外。 - Unhandled FreeCAD exception. - 未処理のFreeCAD例外。 + Unhandled FreeCAD exception. + 未処理のFreeCAD例外。 - Unhandled unknown C++ exception. - 処理されていない不明な C++ 例外。 + Unhandled unknown C++ exception. + 処理されていない不明な C++ 例外。 - &Copy command - & コピー コマンド + &Copy command + & コピー コマンド - &Copy history - & コピー履歴 + &Copy history + & コピー履歴 - Save history as... - 名前を付けて履歴を保存(H)... + Save history as... + 名前を付けて履歴を保存(H)... - Insert file name... - ファイル名を挿入... + Insert file name... + ファイル名を挿入... - Save History - 履歴の保存。 + Save History + 履歴の保存。 - Macro Files (*.FCMacro *.py) - マクロ ファイル (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + マクロ ファイル (*.FCMacro *.py) - Insert file name - ファイル名を挿入します。 + Insert file name + ファイル名を挿入します。 - All Files (*.*) - すべてのファイル (*.*) + All Files (*.*) + すべてのファイル (*.*) - Python Input Dialog - Pythonの入力ダイアログ + Python Input Dialog + Pythonの入力ダイアログ - Unhandled std C++ exception. - Unhandled std C++ exception. + Unhandled std C++ exception. + Unhandled std C++ exception. - Word wrap - ワードラップ + Word wrap + ワードラップ - &Copy - &コピー + &Copy + &コピー - &Paste - &ペースト + &Paste + &ペースト - Select All - 全て選択 + Select All + 全て選択 - - + + Clear console + + + + Gui::PythonEditor - Comment - コメント + Comment + コメント - Uncomment - コメントを解除 + Uncomment + コメントを解除 - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - クリア + Clear + クリア - - + + Gui::RecentFilesAction - Open file %1 - %1ファイルを開く + Open file %1 + %1ファイルを開く - File not found - ファイルが見つかりませんでした + File not found + ファイルが見つかりませんでした - The file '%1' cannot be opened. - ファイル '%1' を開くことができませんでした。 + The file '%1' cannot be opened. + ファイル '%1' を開くことができませんでした。 - - + + Gui::SelectModule - Select module - モジュールを選択します。 + Select module + モジュールを選択します。 - Open %1 as - %1 を開く + Open %1 as + %1 を開く - Select - 選択 + Select + 選択 - - + + Gui::StdCmdDescription - Help - ヘルプ + Help + ヘルプ - Des&cription - 説明(&C): + Des&cription + 説明(&C): - Long description of commands - コマンドの説明 + Long description of commands + コマンドの説明 - - + + Gui::StdCmdDownloadOnlineHelp - Help - ヘルプ + Help + ヘルプ - Download online help - Download online help + Download online help + Download online help - Download %1's online help - Download %1's online help + Download %1's online help + Download %1's online help - Non-existing directory - Non-existing directory + Non-existing directory + Non-existing directory - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Missing permission - Missing permission + Missing permission + Missing permission - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Stop downloading - Stop downloading + Stop downloading + Stop downloading - - + + Gui::StdCmdPythonHelp - Tools - ツール + Tools + ツール - Python Modules - Pythonモジュール + Python Modules + Pythonモジュール - Opens a browser to show the Python modules - Python モジュールを表示するには、ブラウザーを開きます。 + Opens a browser to show the Python modules + Python モジュールを表示するには、ブラウザーを開きます。 - - + + Gui::TaskBoxAngle - Angle - Angle + Angle + Angle - - + + Gui::TaskBoxPosition - Position - Position + Position + Position - - + + Gui::TaskView::TaskAppearance - Display mode: - ディスプレイモード: + Display mode: + ディスプレイモード: - Plot mode: - プロットモード: + Plot mode: + プロットモード: - Point size: - 点の大きさ: + Point size: + 点の大きさ: - Line width: - 線幅: + Line width: + 線幅: - Transparency: - 透明度: + Transparency: + 透明度: - Appearance - 外観 + Appearance + 外観 - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - 編集 + Edit + 編集 - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - 外観 + Appearance + 外観 - ... - ... + ... + ... - edit selection - edit selection + edit selection + edit selection - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + マウスの左ボタンを押す + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - 英語 + English + 英語 - - + + Gui::TreeDockWidget - Tree view - ツリービュー + Tree view + ツリービュー - - + + Gui::TreeWidget - Create group... - グループを作成... + Create group... + グループを作成... - Create a group - グループを作成します。 + Create a group + グループを作成します。 - Group - グループ + Group + グループ - Rename - 名前の変更 + Rename + 名前の変更 - Rename object - オブジェクトの名前を変更します。 + Rename object + オブジェクトの名前を変更します。 - Labels & Attributes - ラベルと属性 + Labels & Attributes + ラベルと属性 - Application - アプリケーション + Application + アプリケーション - Finish editing - 編集を終了 + Finish editing + 編集を終了 - Finish editing object - オブジェクトの編集を終了します。 + Finish editing object + オブジェクトの編集を終了します。 - Activate document - ドキュメントをアクティブにする + Activate document + ドキュメントをアクティブにする - Activate document %1 - 文書の%1をアクティブにする + Activate document %1 + 文書の%1をアクティブにする - - + + Gui::View3DInventor - Export PDF - PDFファイル形式でエクスポート + Export PDF + PDFファイル形式でエクスポート - PDF file (*.pdf) - PDFファイル(*.pdf) + PDF file (*.pdf) + PDFファイル(*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - ワークベンチ'%1'を選択 + Select the '%1' workbench + ワークベンチ'%1'を選択 - - + + Position - Form - Form + Form + Form - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - z: + Z: + z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Grid Snap in + Grid Snap in + Grid Snap in - - + + QDockWidget - Tree view - ツリービュー + Tree view + ツリービュー - Property view - プロパティの表示 + Property view + プロパティの表示 - Selection view - 選択ビュー + Selection view + 選択ビュー - Report view - レポートビュー + Report view + レポートビュー - Task View - タスクビュー + Task View + タスクビュー - Combo View - コンボビュー + Combo View + コンボビュー - Toolbox - ツールボックス + Toolbox + ツールボックス - Python console - Python コンソール + Python console + Python コンソール - Display properties - プロパティの表示 + Display properties + プロパティの表示 - - + + QObject - General - 標準 + General + 標準 - Display - 表示 + Display + 表示 - Unknown filetype - 不明なファイル形式 + Unknown filetype + 不明なファイル形式 - Cannot open unknown filetype: %1 - %1:不明なファイルタイプを開くことができません。 + Cannot open unknown filetype: %1 + %1:不明なファイルタイプを開くことができません。 - Cannot save to unknown filetype: %1 - 不明なファイル形式に保存できません: %1 + Cannot save to unknown filetype: %1 + 不明なファイル形式に保存できません: %1 - Workbench failure - ワークベンチのエラー + Workbench failure + ワークベンチのエラー - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Qt アシスタント (%1) を起動できません。 + Unable to launch Qt Assistant (%1) + Qt アシスタント (%1) を起動できません。 - Exception - 例外 + Exception + 例外 - Open document - ドキュメントを開く + Open document + ドキュメントを開く - Import file - ファイルをインポート + Import file + ファイルをインポート - Export file - ファイルのエクスポート + Export file + ファイルのエクスポート - Printing... - 印刷... + Printing... + 印刷... - Cannot load workbench - ワークベンチを読み込めません + Cannot load workbench + ワークベンチを読み込めません - A general error occurred while loading the workbench - ワークベンチを読み込み中に一般的なエラーが発生しました + A general error occurred while loading the workbench + ワークベンチを読み込み中に一般的なエラーが発生しました - File not found - ファイルが見つかりませんでした + File not found + ファイルが見つかりませんでした - Cannot open file %1 - ファイル %1 を開けません + Cannot open file %1 + ファイル %1 を開けません - Save views... - ビューを保存... + Save views... + ビューを保存... - Load views... - ビューを読み込み... + Load views... + ビューを読み込み... - Freeze view - ビューを固定 + Freeze view + ビューを固定 - Clear views - ビューをクリア + Clear views + ビューをクリア - Restore view &%1 - ビュー'%1'を復元 + Restore view &%1 + ビュー'%1'を復元 - Save frozen views - 固定ビューを保存 + Save frozen views + 固定ビューを保存 - Frozen views (*.cam) - 固定ビュー(*.cam) + Frozen views (*.cam) + 固定ビュー(*.cam) - Restore views - ビューを復元 + Restore views + ビューを復元 - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - ビューの復元を行うと、現在保存されているビューはクリアされます。 + ビューの復元を行うと、現在保存されているビューはクリアされます。 処理を続行しますか? - Restore frozen views - 固定ビューの復元 + Restore frozen views + 固定ビューの復元 - Cannot open file '%1'. - ファイル %1 を開くことができません. + Cannot open file '%1'. + ファイル %1 を開くことができません. - Docked - ドッキングされている + Docked + ドッキングされている - Undocked - ドッキングされていない + Undocked + ドッキングされていない - Fullscreen - 全画面表示 + Fullscreen + 全画面表示 - files - ファイル + files + ファイル - Save picture - 画像を保存。 + Save picture + 画像を保存。 - New sub-group - 新しいサブグループ + New sub-group + 新しいサブグループ - Enter the name: - 名前を入力: + Enter the name: + 名前を入力: - New text item - 新しいテキスト項目 + New text item + 新しいテキスト項目 - Enter your text: - テキストを入力してください: + Enter your text: + テキストを入力してください: - New integer item - 新しい整数項目 + New integer item + 新しい整数項目 - Enter your number: - あなたの番号を入力します。 + Enter your number: + あなたの番号を入力します。 - New unsigned item - 新しい符号なし項目 + New unsigned item + 新しい符号なし項目 - New float item - 新しいフロートアイテム + New float item + 新しいフロートアイテム - New Boolean item - 新しいブール項目 + New Boolean item + 新しいブール項目 - Choose an item: - 項目を選択します: + Choose an item: + 項目を選択します: - Rename group - グループ名変更 + Rename group + グループ名変更 - The group '%1' cannot be renamed. - グループ '%1' の名前は変更できません。 + The group '%1' cannot be renamed. + グループ '%1' の名前は変更できません。 - Existing group - 既存のグループ + Existing group + 既存のグループ - The group '%1' already exists. - グループ '%1' は既に存在します。 + The group '%1' already exists. + グループ '%1' は既に存在します。 - Change value - 値を変更 + Change value + 値を変更 - Save document under new filename... - ドキュメントに新しいファイル名を付けて保存 + Save document under new filename... + ドキュメントに新しいファイル名を付けて保存 - Saving aborted - 保存は中断されました + Saving aborted + 保存は中断されました - Unsaved document - 未保存のドキュメント + Unsaved document + 未保存のドキュメント - Save document before close? - 閉じる前にドキュメントを保存しますか? + Save document before close? + 閉じる前にドキュメントを保存しますか? - Save Macro - マクロを保存します。 + Save Macro + マクロを保存します。 - Finish - 完了 + Finish + 完了 - Clear - クリア + Clear + クリア - Cancel - キャンセル + Cancel + キャンセル - Inner - 内側 + Inner + 内側 - Outer - 外側 + Outer + 外側 - No Browser - ブラウザーが無い + No Browser + ブラウザーが無い - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - お使いのブラウザーを開くことができません。ブラウザーウィンドウを開いて + お使いのブラウザーを開くことができません。ブラウザーウィンドウを開いて 次のURLを表示してください: http://localhost:%1 - No Server - サーバーが無い + No Server + サーバーが無い - Unable to start the server to port %1: %2. - %1: %2 のポートにサーバーを開始できませんでした。 + Unable to start the server to port %1: %2. + %1: %2 のポートにサーバーを開始できませんでした。 - Unable to open your system browser. - お使いのシステムのブラウザーを開くことができません。 + Unable to open your system browser. + お使いのシステムのブラウザーを開くことができません。 - Options... - オプション... + Options... + オプション... - Out of memory - メモリ不足 + Out of memory + メモリ不足 - Not enough memory available to display the data. - データを表示するのに十分なメモリがありません。 + Not enough memory available to display the data. + データを表示するのに十分なメモリがありません。 - Cannot find file %1 - ファイル %1 が見つかりません。 + Cannot find file %1 + ファイル %1 が見つかりません。 - Cannot find file %1 neither in %2 nor in %3 - %2 にも %3 にもファイル %1 が見つかりません。 + Cannot find file %1 neither in %2 nor in %3 + %2 にも %3 にもファイル %1 が見つかりません。 - Save %1 Document - %1 のドキュメントを保存します。 + Save %1 Document + %1 のドキュメントを保存します。 - %1 document (*.FCStd) - %1 のドキュメント (*.FCStd) + %1 document (*.FCStd) + %1 のドキュメント (*.FCStd) - Save As - 名前を付けて保存 + Save As + 名前を付けて保存 - %1 already exists. + %1 already exists. Do you want to replace it? - %1 は既に存在します。上書きしますか。 + %1 は既に存在します。上書きしますか。 - Document not closable - 閉じられないドキュメント + Document not closable + 閉じられないドキュメント - The document is not closable for the moment. - 今閉じることができないドキュメント + The document is not closable for the moment. + 今閉じることができないドキュメント - No OpenGL - OpenGLがありません + No OpenGL + OpenGLがありません - This system does not support OpenGL - このシステムは OpenGL をサポートしていません + This system does not support OpenGL + このシステムは OpenGL をサポートしていません - Help - ヘルプ + Help + ヘルプ - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - ドキュメントを読み込むことができません。それをロードするために Qt 4.4 以降が必要です。 + ドキュメントを読み込むことができません。それをロードするために Qt 4.4 以降が必要です。 - %1 Help - %1 Help + %1 Help + %1 Help - Exporting PDF... - PDF ファイルをエクスポートしています + Exporting PDF... + PDF ファイルをエクスポートしています - Wrong selection - 誤った選択 + Wrong selection + 誤った選択 - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - New boolean item - 新しいブール値項目 + New boolean item + 新しいブール値項目 - Navigation styles - Navigation styles + Navigation styles + Navigation styles - %1 navigation - %1 navigation + %1 navigation + %1 navigation - Move annotation - Move annotation + Move annotation + Move annotation - Transform - 変換 + Transform + 変換 - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + 標準ビュー + + + Box selection + + + + StdCmdAbout - Help - ヘルプ + Help + ヘルプ - &About %1 - %1について(&A) + &About %1 + %1について(&A) - About %1 - %1 について + About %1 + %1 について - - + + StdCmdAboutQt - Help - ヘルプ + Help + ヘルプ - About &Qt - Qtについて(&Q) + About &Qt + Qtについて(&Q) - About Qt - Qtについて + About Qt + Qtについて - - + + StdCmdActivateNextWindow - Window - ウィンドウ + Window + ウィンドウ - Ne&xt - 次へ(&X) + Ne&xt + 次へ(&X) - Activate next window - 次のウィンドウをアクティブにする + Activate next window + 次のウィンドウをアクティブにする - - + + StdCmdActivatePrevWindow - Window - ウィンドウ + Window + ウィンドウ - Pre&vious - 前へ(&V) + Pre&vious + 前へ(&V) - Activate previous window - 前のウィンドウをアクティブにする + Activate previous window + 前のウィンドウをアクティブにする - - + + + StdCmdAlignment + + Edit + 編集 + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - ウィンドウ + Window + ウィンドウ - Arrange &Icons - アイコンの整列(&I) + Arrange &Icons + アイコンの整列(&I) - Arrange Icons - アイコンの整列 + Arrange Icons + アイコンの整列 - - + + StdCmdAxisCross - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - ウィンドウ + Window + ウィンドウ - &Cascade - カスケード(&C) + &Cascade + カスケード(&C) - Tile pragmatic - タイル + Tile pragmatic + タイル - - + + StdCmdCloseActiveWindow - Window - ウィンドウ + Window + ウィンドウ - Cl&ose - 閉じる(&O) + Cl&ose + 閉じる(&O) - Close active window - アクティブなウィンドウを閉じる + Close active window + アクティブなウィンドウを閉じる - - + + StdCmdCloseAllWindows - Window - ウィンドウ + Window + ウィンドウ - Close Al&l - すべて閉じる(&L) + Close Al&l + すべて閉じる(&L) - Close all windows - すべてのウィンドウを閉じる + Close all windows + すべてのウィンドウを閉じる - - + + StdCmdCommandLine - Tools - ツール + Tools + ツール - Start command &line... - Start command &line... + Start command &line... + Start command &line... - Opens the command line in the console - Opens the command line in the console + Opens the command line in the console + Opens the command line in the console - - + + StdCmdCopy - Edit - 編集 + Edit + 編集 - C&opy - コピー(&O) + C&opy + コピー(&O) - Copy operation - Copy operation + Copy operation + Copy operation - - + + StdCmdCut - Edit - 編集 + Edit + 編集 - &Cut - 切り取り(&C) + &Cut + 切り取り(&C) - Cut out - Cut out + Cut out + Cut out - - + + StdCmdDDuplicateSelection - Edit - 編集 + Edit + 編集 - Duplicate selection - Duplicate selection + Duplicate selection + Duplicate selection - Put duplicates of the selected objects to the active document - Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document - - + + StdCmdDelete - Edit - 編集 + Edit + 編集 - &Delete - 削除(&D) + &Delete + 削除(&D) - Deletes the selected objects - 選択したオブジェクトを削除 + Deletes the selected objects + 選択したオブジェクトを削除 - - + + StdCmdDemoMode - Standard-View - 標準ビュー + Standard-View + 標準ビュー - View turntable... - View turntable... + View turntable... + View turntable... - View turntable - View turntable + View turntable + View turntable - - + + StdCmdDlgCustomize - Tools - ツール + Tools + ツール - Cu&stomize... - カスタマイズ(&S) + Cu&stomize... + カスタマイズ(&S) - Customize toolbars and command bars - カスタマイズツールバーとコマンドバー + Customize toolbars and command bars + カスタマイズツールバーとコマンドバー - - + + StdCmdDlgMacroExecute - Macros ... - マクロ... + Macros ... + マクロ... - Opens a dialog to let you execute a recorded macro - 記録されたマクロを実行できるように、ダイアログ ボックスを開きます + Opens a dialog to let you execute a recorded macro + 記録されたマクロを実行できるように、ダイアログ ボックスを開きます - Macro - マクロ + Macro + マクロ - - + + StdCmdDlgMacroExecuteDirect - Macro - マクロ + Macro + マクロ - Execute macro - マクロの実行 + Execute macro + マクロの実行 - Execute the macro in the editor - エディタでマクロを実行します。 + Execute the macro in the editor + エディタでマクロを実行します。 - - + + StdCmdDlgMacroRecord - &Macro recording ... - マクロの記録 (&M). + &Macro recording ... + マクロの記録 (&M). - Opens a dialog to record a macro - Opens a dialog to record a macro + Opens a dialog to record a macro + Opens a dialog to record a macro - Macro - マクロ + Macro + マクロ - - + + StdCmdDlgParameter - Tools - ツール + Tools + ツール - E&dit parameters ... - E&dit parameters ... + E&dit parameters ... + E&dit parameters ... - Opens a Dialog to edit the parameters - パラメーターを編集するためのダイアログを開きます + Opens a Dialog to edit the parameters + パラメーターを編集するためのダイアログを開きます - - + + StdCmdDlgPreferences - Tools - ツール + Tools + ツール - &Preferences ... - 設定 (&P)... + &Preferences ... + 設定 (&P)... - Opens a Dialog to edit the preferences - 設定を編集するためのダイアログを開きます + Opens a Dialog to edit the preferences + 設定を編集するためのダイアログを開きます - - + + StdCmdDockViewMenu - View - ビュー + View + ビュー - Vie&ws - Vie&ws + Vie&ws + Vie&ws - Toggles this window - Toggles this window + Toggles this window + Toggles this window - - + + StdCmdDrawStyle - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + 編集 + + + Duplicate selection + Duplicate selection + + + Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document + + + + StdCmdEdit + + Edit + 編集 + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - ファイル + File + ファイル - &Export... - &Export... + &Export... + &Export... - Export an object in the active document - Export an object in the active document + Export an object in the active document + Export an object in the active document - Supported formats - Supported formats + Supported formats + Supported formats - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + ツール + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - ファイル + File + ファイル - &Recompute - &Recompute + &Recompute + &Recompute - Recompute feature or document - Recompute feature or document + Recompute feature or document + Recompute feature or document - - + + StdCmdFreeCADWebsite - Help - ヘルプ + Help + ヘルプ - FreeCAD Website - FreeCAD Website + FreeCAD Website + FreeCAD Website - The FreeCAD website - FreeCADウェブサイト + The FreeCAD website + FreeCADウェブサイト - - + + StdCmdFreezeViews - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Freeze display - Freeze display + Freeze display + Freeze display - Freezes the current view position - 現在のビューを固定 + Freezes the current view position + 現在のビューを固定 - - + + StdCmdHideObjects - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Hide all objects - すべてのオブジェクトを非表示にします。 + Hide all objects + すべてのオブジェクトを非表示にします。 - Hide all objects in the document - ドキュメント内のすべてのオブジェクトを非表示にします。 + Hide all objects in the document + ドキュメント内のすべてのオブジェクトを非表示にします。 - - + + StdCmdHideSelection - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Hide selection - Hide selection + Hide selection + Hide selection - Hide all selected objects - 選択したオブジェクトをすべて非表示にします。 + Hide all selected objects + 選択したオブジェクトをすべて非表示にします。 - - + + StdCmdImport - File - ファイル + File + ファイル - &Import... - インポート(&I)... + &Import... + インポート(&I)... - Import a file in the active document - アクティブなドキュメント内のファイルをインポートします。 + Import a file in the active document + アクティブなドキュメント内のファイルをインポートします。 - Supported formats - Supported formats + Supported formats + Supported formats - All files (*.*) - すべてのファイル (*.*) + All files (*.*) + すべてのファイル (*.*) - - + + StdCmdMacroStartDebug - Macro - マクロ + Macro + マクロ - Debug macro - マクロをデバッグする + Debug macro + マクロをデバッグする - Start debugging of macro - マクロのデバッグを開始します。 + Start debugging of macro + マクロのデバッグを開始します。 - - + + StdCmdMacroStepOver - Macro - マクロ + Macro + マクロ - Step over - ステップ オーバー + Step over + ステップ オーバー - - + + StdCmdMacroStopDebug - Macro - マクロ + Macro + マクロ - Stop debugging - デバッグを停止します + Stop debugging + デバッグを停止します - Stop debugging of macro - Stop debugging of macro + Stop debugging of macro + Stop debugging of macro - - + + StdCmdMacroStopRecord - Macro - マクロ + Macro + マクロ - S&top macro recording - マクロの記録を停止(&S) + S&top macro recording + マクロの記録を停止(&S) - Stop the macro recording session - マクロの記録セッションを停止します。 + Stop the macro recording session + マクロの記録セッションを停止します。 - - + + StdCmdMeasureDistance - View - ビュー + View + ビュー - Measure distance - 距離を測定 + Measure distance + 距離を測定 - - + + StdCmdMeasurementSimple - Tools - ツール + Tools + ツール - Mesure distance - Mesure distance + Mesure distance + Mesure distance - Measures distance between two selected objects - Measures distance between two selected objects + Measures distance between two selected objects + Measures distance between two selected objects - - + + Measure distance + 距離を測定 + + + StdCmdMergeProjects - File - ファイル + File + ファイル - Merge project... - Merge project... + Merge project... + Merge project... - Merge project - Merge project + Merge project + Merge project - %1 document (*.fcstd) - %1 document (*.fcstd) + %1 document (*.fcstd) + %1 document (*.fcstd) - Cannot merge project with itself. - Cannot merge project with itself. + Cannot merge project with itself. + Cannot merge project with itself. - - + + StdCmdNew - File - ファイル + File + ファイル - &New - 新規(&N) + &New + 新規(&N) - Create a new empty document - 新しい空のドキュメントを作成します。 + Create a new empty document + 新しい空のドキュメントを作成します。 - - + + StdCmdOnlineHelp - Help - ヘルプ + Help + ヘルプ - Show help to the application - アプリケーションにヘルプを表示する + Show help to the application + アプリケーションにヘルプを表示する - - + + StdCmdOnlineHelpPython - Help - ヘルプ + Help + ヘルプ - Python Manuals - Python のマニュアル + Python Manuals + Python のマニュアル - Show the Python documentation - Python のドキュメントを表示します。 + Show the Python documentation + Python のドキュメントを表示します。 - - + + StdCmdOnlineHelpWebsite - Help - ヘルプ + Help + ヘルプ - Help Website - サイトのヘルプ + Help Website + サイトのヘルプ - The website where the help is maintained - ヘルプが維持されているウェブサイト + The website where the help is maintained + ヘルプが維持されているウェブサイト - - + + StdCmdOpen - File - ファイル + File + ファイル - &Open... - 開く (&o). + &Open... + 開く (&o). - Open a document or import files - ドキュメントを開くか、ファイルをインポートします。 + Open a document or import files + ドキュメントを開くか、ファイルをインポートします。 - Supported formats - Supported formats + Supported formats + Supported formats - All files (*.*) - すべてのファイル (*.*) + All files (*.*) + すべてのファイル (*.*) - - + + StdCmdPaste - Edit - 編集 + Edit + 編集 - &Paste - &ペースト + &Paste + &ペースト - Paste operation - 貼り付け操作 + Paste operation + 貼り付け操作 - - + + StdCmdPlacement - Edit - 編集 + Edit + 編集 - Placement... - Placement... + Placement... + Placement... - Place the selected objects - Place the selected objects + Place the selected objects + Place the selected objects - - + + StdCmdPrint - File - ファイル + File + ファイル - &Print... - &プリント... + &Print... + &プリント... - Print the document - ドキュメントを印刷します。 + Print the document + ドキュメントを印刷します。 - - + + StdCmdPrintPdf - File - ファイル + File + ファイル - &Export PDF... - PDFファイル形式でエクスポート(&E)... + &Export PDF... + PDFファイル形式でエクスポート(&E)... - Export the document as PDF - ドキュメントを PDF ファイル形式でエクスポートします。 + Export the document as PDF + ドキュメントを PDF ファイル形式でエクスポートします。 - - + + StdCmdPrintPreview - File - ファイル + File + ファイル - &Print preview... - 印刷プレビュー (&P). + &Print preview... + 印刷プレビュー (&P). - Print the document - ドキュメントを印刷します。 + Print the document + ドキュメントを印刷します。 - Print preview - 印刷プレビュー + Print preview + 印刷プレビュー - - + + StdCmdProjectInfo - File - ファイル + File + ファイル - Project i&nformation... - プロジェクトインフォメーション(&I) + Project i&nformation... + プロジェクトインフォメーション(&I) - Show details of the currently active project - 現在アクティブなプロジェクトの詳細を表示します。 + Show details of the currently active project + 現在アクティブなプロジェクトの詳細を表示します。 - - + + StdCmdProjectUtil - Tools - ツール + Tools + ツール - Project utility... - プロジェクトユーティリティ... + Project utility... + プロジェクトユーティリティ... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - ヘルプ + Help + ヘルプ - Python Website - Python のウェブサイト + Python Website + Python のウェブサイト - The official Python website - Python の公式サイト + The official Python website + Python の公式サイト - - + + StdCmdQuit - File - ファイル + File + ファイル - E&xit - 終了(&X) + E&xit + 終了(&X) - Quits the application - アプリケーションを終了します。 + Quits the application + アプリケーションを終了します。 - - + + StdCmdRandomColor - File - ファイル + File + ファイル - Random color - ランダムな色 + Random color + ランダムな色 - - + + StdCmdRecentFiles - File - ファイル + File + ファイル - Recent files - 最近開いたファイル + Recent files + 最近開いたファイル - Recent file list - 最近使ったファイルの一覧 + Recent file list + 最近使ったファイルの一覧 - - + + StdCmdRedo - Edit - 編集 + Edit + 編集 - &Redo - やり直し(&R) + &Redo + やり直し(&R) - Redoes a previously undone action - 取り消した操作をやり直します。 + Redoes a previously undone action + 取り消した操作をやり直します。 - - + + StdCmdRefresh - Edit - 編集 + Edit + 編集 - &Refresh - 更新(&R) + &Refresh + 更新(&R) - Recomputes the current active document - 現在アクティブなドキュメントを再計算します。 + Recomputes the current active document + 現在アクティブなドキュメントを再計算します。 - - + + StdCmdSave - File - ファイル + File + ファイル - &Save - 保存 (&s) + &Save + 保存 (&s) - Save the active document - 作業中のドキュメントを保存します。 + Save the active document + 作業中のドキュメントを保存します。 - - + + StdCmdSaveAs - File - ファイル + File + ファイル - Save &As... - 名前を付けて保存(&A) + Save &As... + 名前を付けて保存(&A) - Save the active document under a new file name - 新しいファイル名で、作業中のドキュメントを保存する + Save the active document under a new file name + 新しいファイル名で、作業中のドキュメントを保存する - - + + StdCmdSceneInspector - Tools - ツール + Tools + ツール - Scene inspector... - Scene inspector... + Scene inspector... + Scene inspector... - Scene inspector - Scene inspector + Scene inspector + Scene inspector - - + + StdCmdSelectAll - Edit - 編集 + Edit + 編集 - Select &All - すべて選択(&A) + Select &All + すべて選択(&A) - Select all - すべてを選択 + Select all + すべてを選択 - - + + StdCmdSetAppearance - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Appearance... - Appearance... + Appearance... + Appearance... - Sets the display properties of the selected object - 選択したオブジェクトの表示プロパティを設定します + Sets the display properties of the selected object + 選択したオブジェクトの表示プロパティを設定します - - + + StdCmdShowObjects - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Show all objects - すべてのオブジェクトを表示します。 + Show all objects + すべてのオブジェクトを表示します。 - Show all objects in the document - ドキュメント内のすべてのオブジェクトを表示します。 + Show all objects in the document + ドキュメント内のすべてのオブジェクトを表示します。 - - + + StdCmdShowSelection - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Show selection - 表示の選択 + Show selection + 表示の選択 - Show all selected objects - 選択したすべてのオブジェクトを表示する + Show all selected objects + 選択したすべてのオブジェクトを表示する - - + + StdCmdStatusBar - View - ビュー + View + ビュー - Status bar - ステータスバー + Status bar + ステータスバー - Toggles the status bar - ステータス バーを切り替えます + Toggles the status bar + ステータス バーを切り替えます - - + + StdCmdTextureMapping - Tools - ツール + Tools + ツール - Texture mapping... - テクスチャマッピング... + Texture mapping... + テクスチャマッピング... - Texture mapping - テクスチャーマッピング + Texture mapping + テクスチャーマッピング - - + + StdCmdTileWindows - Window - ウィンドウ + Window + ウィンドウ - &Tile - タイル (&T) + &Tile + タイル (&T) - Tile the windows - ウィンドウを並べて表示 + Tile the windows + ウィンドウを並べて表示 - - + + StdCmdToggleBreakpoint - Macro - マクロ + Macro + マクロ - Toggle breakpoint - ブレークポイントの切り替え + Toggle breakpoint + ブレークポイントの切り替え - - + + StdCmdToggleClipPlane - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Clipping plane - Clipping plane + Clipping plane + Clipping plane - Toggles clipping plane for active view - Toggles clipping plane for active view + Toggles clipping plane for active view + Toggles clipping plane for active view - - + + StdCmdToggleNavigation - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Toggle navigation/Edit mode - Toggle navigation/Edit mode + Toggle navigation/Edit mode + Toggle navigation/Edit mode - Toggle between navigation and edit mode - Toggle between navigation and edit mode + Toggle between navigation and edit mode + Toggle between navigation and edit mode - - + + StdCmdToggleObjects - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Toggle all objects - すべてのオブジェクトを切り替える + Toggle all objects + すべてのオブジェクトを切り替える - Toggles visibility of all objects in the active document - Toggles visibility of all objects in the active document + Toggles visibility of all objects in the active document + Toggles visibility of all objects in the active document - - + + StdCmdToggleSelectability - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Toggle selectability - Toggle selectability + Toggle selectability + Toggle selectability - Toggles the property of the objects to get selected in the 3D-View - Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View - - + + StdCmdToggleVisibility - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Toggle visibility - 表示切り替え + Toggle visibility + 表示切り替え - Toggles visibility - 表示切り替え + Toggles visibility + 表示切り替え - - + + StdCmdToolBarMenu - View - ビュー + View + ビュー - Tool&bars - ツールバー(&B) + Tool&bars + ツールバー(&B) - Toggles this window - Toggles this window + Toggles this window + Toggles this window - - + + StdCmdTransform - Edit - 編集 + Edit + 編集 - Transform... - Transform... + Transform... + Transform... - Transform the geometry of selected objects - Transform the geometry of selected objects + Transform the geometry of selected objects + Transform the geometry of selected objects - - + + StdCmdTreeSelection - View - ビュー + View + ビュー - Go to selection - Go to selection + Go to selection + Go to selection - Scroll to first selected item - 最初に選択した項目までスクロール + Scroll to first selected item + 最初に選択した項目までスクロール - - + + StdCmdUndo - Edit - 編集 + Edit + 編集 - &Undo - 元に戻す(&U) + &Undo + 元に戻す(&U) - Undo exactly one action - 1つのアクションを元に戻す + Undo exactly one action + 1つのアクションを元に戻す - - + + StdCmdUserInterface - View - ビュー + View + ビュー - Dock views - Dock views + Dock views + Dock views - Dock all top-level views - Dock all top-level views + Dock all top-level views + Dock all top-level views - - + + StdCmdViewAxo - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Axometric - Axometric + Axometric + Axometric - Set to axometric view - Set to axometric view + Set to axometric view + Set to axometric view - - + + StdCmdViewBottom - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Bottom - Bottom + Bottom + Bottom - Set to bottom view - 底面ビューに設定 + Set to bottom view + 底面ビューに設定 - - + + StdCmdViewCreate - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Create new view - ビューを作成 + Create new view + ビューを作成 - Creates a new view window for the active document - Creates a new view window for the active document + Creates a new view window for the active document + Creates a new view window for the active document - - + + StdCmdViewExample1 - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Inventor example #1 - Inventor example #1 + Inventor example #1 + Inventor example #1 - Shows a 3D texture with manipulator - Shows a 3D texture with manipulator + Shows a 3D texture with manipulator + Shows a 3D texture with manipulator - - + + StdCmdViewExample2 - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Inventor example #2 - Inventor example #2 + Inventor example #2 + Inventor example #2 - Shows spheres and drag-lights - Shows spheres and drag-lights + Shows spheres and drag-lights + Shows spheres and drag-lights - - + + StdCmdViewExample3 - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Inventor example #3 - Inventor example #3 + Inventor example #3 + Inventor example #3 - Shows a animated texture - Shows a animated texture + Shows a animated texture + Shows a animated texture - - + + StdCmdViewFitAll - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Fit all - Fit all + Fit all + Fit all - Fits the whole content on the screen - Fits the whole content on the screen + Fits the whole content on the screen + Fits the whole content on the screen - - + + StdCmdViewFitSelection - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Fit selection - Fit selection + Fit selection + Fit selection - Fits the selected content on the screen - Fits the selected content on the screen + Fits the selected content on the screen + Fits the selected content on the screen - - + + StdCmdViewFront - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Front - Front + Front + Front - Set to front view - Set to front view + Set to front view + Set to front view - - + + StdCmdViewIvIssueCamPos - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Issue camera position - Issue camera position + Issue camera position + Issue camera position - Issue the camera position to the console and to a macro, to easily recall this position - Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Stereo Interleaved Columns - Stereo Interleaved Columns + Stereo Interleaved Columns + Stereo Interleaved Columns - Switch stereo viewing to Interleaved Columns - Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Stereo Interleaved Rows - Stereo Interleaved Rows + Stereo Interleaved Rows + Stereo Interleaved Rows - Switch stereo viewing to Interleaved Rows - Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows - - + + StdCmdViewIvStereoOff - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Stereo Off - Stereo Off + Stereo Off + Stereo Off - Switch stereo viewing off - Switch stereo viewing off + Switch stereo viewing off + Switch stereo viewing off - - + + StdCmdViewIvStereoQuadBuff - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Stereo red/green - Stereo red/green + Stereo red/green + Stereo red/green - Switch stereo viewing to red/green - Switch stereo viewing to red/green + Switch stereo viewing to red/green + Switch stereo viewing to red/green - - + + StdCmdViewLeft - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Left - Left + Left + Left - Set to left view - Set to left view + Set to left view + Set to left view - - + + StdCmdViewRear - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Rear - Rear + Rear + Rear - Set to rear view - Set to rear view + Set to rear view + Set to rear view - - + + StdCmdViewRight - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Right - Right + Right + Right - Set to right view - Set to right view + Set to right view + Set to right view - - + + + StdCmdViewRotateLeft + + Standard-View + 標準ビュー + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + 標準ビュー + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Top - Top + Top + Top - Set to top view - Set to top view + Set to top view + Set to top view - - + + StdCmdWhatsThis - Help - ヘルプ + Help + ヘルプ - &What's This? - &What's This? + &What's This? + &What's This? - What's This - What's This + What's This + What's This - - + + StdCmdWindows - Window - ウィンドウ + Window + ウィンドウ - &Windows... - &Windows... + &Windows... + &Windows... - Windows list - Windows list + Windows list + Windows list - - + + StdCmdWindowsMenu - Window - ウィンドウ + Window + ウィンドウ - Activates this window - Activates this window + Activates this window + Activates this window - - + + StdCmdWorkbench - View - ビュー + View + ビュー - Workbench - Workbench + Workbench + Workbench - Switch between workbenches - Switch between workbenches + Switch between workbenches + Switch between workbenches - - + + StdOrthographicCamera - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Orthographic view - Orthographic view + Orthographic view + Orthographic view - Switches to orthographic view mode - Switches to orthographic view mode + Switches to orthographic view mode + Switches to orthographic view mode - - + + StdPerspectiveCamera - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Perspective view - Perspective view + Perspective view + Perspective view - Switches to perspective view mode - Switches to perspective view mode + Switches to perspective view mode + Switches to perspective view mode - - + + StdViewBoxZoom - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Box zoom - Box zoom + Box zoom + Box zoom - - + + StdViewDockUndockFullscreen - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Document window - ドキュメントウィンドウ + Document window + ドキュメントウィンドウ - Display the active view either in fullscreen, in undocked or docked mode - Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode - - + + StdViewScreenShot - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Save picture... - 画像を保存... + Save picture... + 画像を保存... - Creates a screenshot of the active view - Creates a screenshot of the active view + Creates a screenshot of the active view + Creates a screenshot of the active view - - + + StdViewZoomIn - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Zoom In - Zoom In + Zoom In + Zoom In - - + + StdViewZoomOut - Standard-View - 標準ビュー + Standard-View + 標準ビュー - Zoom Out - Zoom Out + Zoom Out + Zoom Out - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - ファイル(&F) + &File + ファイル(&F) - &Edit - 編集(&E) + &Edit + 編集(&E) - Standard views - 標準のビュー + Standard views + 標準のビュー - &Stereo - ステレオ(&S) + &Stereo + ステレオ(&S) - &Zoom - ズーム(&Z) + &Zoom + ズーム(&Z) - Visibility - 可視性 + Visibility + 可視性 - &View - 表示(&V) + &View + 表示(&V) - &Tools - ツール(&T) + &Tools + ツール(&T) - &Macro - &Macro + &Macro + &Macro - &Windows - ウインドウ(&W) + &Windows + ウインドウ(&W) - &On-line help - オンライン ヘルプ(&O) + &On-line help + オンライン ヘルプ(&O) - &Help - ヘルプ (&H) + &Help + ヘルプ (&H) - File - ファイル + File + ファイル - Macro - マクロ + Macro + マクロ - View - ビュー + View + ビュー - Special Ops - 特殊設定 + Special Ops + 特殊設定 - - + + testClass - test - test + test + test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - タスクパネルのスタイルを選択します。 + Choose the style of the Task Panel + タスクパネルのスタイルを選択します。 - Default - デフォルト + Default + デフォルト - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_nl.ts b/src/Gui/Language/FreeCAD_nl.ts index ea7ae833c..efebdd05a 100644 --- a/src/Gui/Language/FreeCAD_nl.ts +++ b/src/Gui/Language/FreeCAD_nl.ts @@ -1,5480 +1,5898 @@ - - + + Angle - Form - Form + Form + Form - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Hoek-kleven + Angle Snap + Hoek-kleven - - 1 ° - + + 1 ° + - - 2 ° - + + 2 ° + - - 5 ° - + + 5 ° + - - 10 ° - 10° + + 10 ° + 10° - - 20 ° - 20° + + 20 ° + 20° - - 45 ° - 45° + + 45 ° + 45° - - 90 ° - 90° + + 90 ° + 90° - - 180 ° - 180° + + 180 ° + 180° - - + + Gui::AccelLineEdit - none - geen + none + geen - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Toevoegen + + + Remove + Verwijderen + + + Move up + Naar boven verplaatsen + + + Move down + Naar beneden verplaatsen + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Druk op de linker muisknop + Press left mouse button + Druk op de linker muisknop - Press SHIFT and middle mouse button - Druk op SHIFT en middelste muisknop + Press SHIFT and middle mouse button + Druk op SHIFT en middelste muisknop - Press middle mouse button - Druk op de middelste muisknop + Press middle mouse button + Druk op de middelste muisknop - Scroll middle mouse button - Scroll middelste muisknop + Scroll middle mouse button + Scroll middelste muisknop - - + + Gui::CADNavigationStyle - Press left mouse button - Druk op de linker muisknop + Press left mouse button + Druk op de linker muisknop - Press middle mouse button - Druk op de middelste muisknop + Press middle mouse button + Druk op de middelste muisknop - Press left and middle mouse button - Druk op de linker- en middelste muisknop + Press left and middle mouse button + Druk op de linker- en middelste muisknop - Scroll middle mouse button - Scroll middelste muisknop + Scroll middle mouse button + Scroll middelste muisknop - - + + Gui::Command - Standard - Standaard + Standard + Standaard - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Annuleren + &Cancel + &Annuleren - - + + Gui::ControlSingleton - Task panel - Taken-deelvenster + Task panel + Taken-deelvenster - - + + Gui::Dialog::AboutApplication - About - Info over + About + Info over - Revision number - Revisienummer + Revision number + Revisienummer - Version - Versie + Version + Versie - OK - OK + OK + OK - - '' + + '' - Release date - Uitgifte datum + Release date + Uitgifte datum - Platform - Platform + Platform + Platform - License... - Licentie ... + License... + Licentie ... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Knop %1 + Button %1 + Knop %1 - Out Of Range - Buiten het bereik + Out Of Range + Buiten het bereik - - + + Gui::Dialog::CommandModel - Commands - Commando's + Commands + Commando's - - + + Gui::Dialog::DemoMode - View Turntable - Bekijk draaitafel + View Turntable + Bekijk draaitafel - Speed - Snelheid + Speed + Snelheid - Maximum - Maximale + Maximum + Maximale - Minimum - Minimum + Minimum + Minimum - Fullscreen - Schermvullend + Fullscreen + Schermvullend - Enable timer - Inschakelen van de timer + Enable timer + Inschakelen van de timer - s - s + s + s - Angle - Hoek + Angle + Hoek + + + 90° + 90 ° + + + -90° + -90 ° - 90° - 90 ° + Play + Afspelen - -90° - -90 ° + Stop + Stop - Play - Afspelen + Close + Sluiten - - Stop - Stop - - - Close - Sluiten - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Kies Venster + Choose Window + Kies Venster - &Activate - &Activeren + &Activate + &Activeren - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Annuleren + &Cancel + &Annuleren - - '' + + '' - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Vensters + Windows + Vensters - - + + Gui::Dialog::DlgAuthorization - Authorization - Autorisatie + Authorization + Autorisatie - &OK - &OK + &OK + &OK - &Cancel - &Annuleren + &Cancel + &Annuleren - Password: - Wachtwoord: + Password: + Wachtwoord: - User name: - Gebruikersnaam: + User name: + Gebruikersnaam: - - '' + + '' - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Pictogram kiezen + Choose Icon + Pictogram kiezen - OK - OK + OK + OK - Cancel - Annuleren + Cancel + Annuleren - Add icons... - Pictogrammen toevoegen ... + Add icons... + Pictogrammen toevoegen ... - - + + Gui::Dialog::DlgCustomActions - Macros - Macro's + Macros + Macro's - Setup Custom Macros - Instellen van eigen Macro's + Setup Custom Macros + Instellen van eigen Macro's - Macro: - Macro: + Macro: + Macro: - ... - ... + ... + ... - Pixmap - Symbool + Pixmap + Symbool - Accelerator: - Sneltoets: + Accelerator: + Sneltoets: - What's this: - Wat is dit: + What's this: + Wat is dit: - Status text: - Status tekst: + Status text: + Status tekst: - Tool tip: - Tooltip: + Tool tip: + Tooltip: - Menu text: - Menutekst: + Menu text: + Menutekst: - Add - Toevoegen + Add + Toevoegen - Remove - Verwijderen + Remove + Verwijderen - Replace - Vervangen + Replace + Vervangen - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Pictogrammen + Icons + Pictogrammen - Macros - Macro's + Macros + Macro's - No macro - Geen macro + No macro + Geen macro - No macros found. - Geen macro's gevonden. + No macros found. + Geen macro's gevonden. - Macro not found - macro niet gevonden + Macro not found + macro niet gevonden - Sorry, couldn't find macro file '%1'. - Sorry, kon macro-bestand '%1' niet vinden. + Sorry, couldn't find macro file '%1'. + Sorry, kon macro-bestand '%1' niet vinden. - Empty macro - Lege macro + Empty macro + Lege macro - Please specify the macro first. - Gelieve eerst de macro te specificeren. + Please specify the macro first. + Gelieve eerst de macro te specificeren. - Empty text - Lege tekst + Empty text + Lege tekst - Please specify the menu text first. - Gelieve de menu tekst eerst te specificeren. + Please specify the menu text first. + Gelieve de menu tekst eerst te specificeren. - No item selected - Geen item geselecteerd + No item selected + Geen item geselecteerd - Please select a macro item first. - Selecteer eerst een macro-item. + Please select a macro item first. + Selecteer eerst een macro-item. - - + + Gui::Dialog::DlgCustomCommands - Commands - Commando's + Commands + Commando's - - '' + + '' - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Categorie + Category + Categorie - Icon - Pictogram + Icon + Pictogram - Command - Commando + Command + Commando - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Toetsenbord + Keyboard + Toetsenbord - Description: - Omschrijving: + Description: + Omschrijving: - &Category: - &Categorie: + &Category: + &Categorie: - C&ommands: - Commando's: + C&ommands: + Commando's: - Current shortcut: - Huidige snelkoppeling: + Current shortcut: + Huidige snelkoppeling: - Press &new shortcut: - Druk op @nieuwe snelkoppeling: + Press &new shortcut: + Druk op @nieuwe snelkoppeling: - Currently assigned to: - Momenteel toegewezen aan: + Currently assigned to: + Momenteel toegewezen aan: - &Assign - Toewijzen + &Assign + Toewijzen - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Herstellen + &Reset + &Herstellen - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Alles her&stellen + Re&set All + Alles her&stellen - Alt+S - Alt+S + Alt+S + Alt+S - - '' + + '' - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Pictogram + Icon + Pictogram - Command - Commando + Command + Commando - none - geen + none + geen - Multiple defined shortcut - Meervoudig gedefinieerde snelkoppeling + Multiple defined shortcut + Meervoudig gedefinieerde snelkoppeling - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - De snel koppeling '%1' is meer dan één keer gedefinieerd. Dit kan resulteren in onverwacht gedrag. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + De snel koppeling '%1' is meer dan één keer gedefinieerd. Dit kan resulteren in onverwacht gedrag. - Already defined shortcut - Reeds gedefinieerde sneltoets + Already defined shortcut + Reeds gedefinieerde sneltoets - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - De sneltoets '%1' is reeds toegewezen aan '%2'. + De sneltoets '%1' is reeds toegewezen aan '%2'. Gelieve een andere snelkoppeling te kiezen. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Gereedschaplijsten + Toolbox bars + Gereedschaplijsten - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Werkbalken + Toolbars + Werkbalken - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - Move right - Naar rechts verplaatsen + Move right + Naar rechts verplaatsen - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Verplaats het geselecteerde item één niveau naar beneden.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Verplaats het geselecteerde item één niveau naar beneden.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> - Move left - Naar links verplaatsen + Move left + Naar links verplaatsen - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Verplaats het geselecteerde item één niveau omhoog.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Verplaats het geselecteerde item één niveau omhoog.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> - Move down - Naar beneden verplaatsen + Move down + Naar beneden verplaatsen - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Verplaats het geselecteerde item omlaag.</b> <p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Verplaats het geselecteerde item omlaag.</b> <p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> - Move up - Naar boven verplaatsen + Move up + Naar boven verplaatsen - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Verplaats het geselecteerde item omlaag.</b><p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Verplaats het geselecteerde item omlaag.</b><p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> - New... - Nieuw... + New... + Nieuw... - Rename... - Hernoemen... + Rename... + Hernoemen... - Delete - Verwijderen + Delete + Verwijderen - Icon - Pictogram + Icon + Pictogram - Command - Commando + Command + Commando - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Nieuwe werkbalk + New toolbar + Nieuwe werkbalk - Toolbar name: - Werkbalknaam: + Toolbar name: + Werkbalknaam: - Duplicated name - Dubbele naam + Duplicated name + Dubbele naam - The toolbar name '%1' is already used - De werkbalk naam '%1' is al in gebruik + The toolbar name '%1' is already used + De werkbalk naam '%1' is al in gebruik - Rename toolbar - Werkbalk hernoemen + Rename toolbar + Werkbalk hernoemen - - '' + + '' - - + + Gui::Dialog::DlgCustomizeImp - Customize - Aanpassen + Customize + Aanpassen - &Help - &Help + &Help + &Help - &Close - &Sluiten + &Close + &Sluiten - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - Geen Spaceball aanwezig + No Spaceball Present + Geen Spaceball aanwezig - Buttons - Knoppen + Buttons + Knoppen - Clear - Wissen + Clear + Wissen - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Weergave eigenschappen + Display properties + Weergave eigenschappen - Display - Weergave + Display + Weergave - Transparency: - Transparantie: + Transparency: + Transparantie: - Line width: - Lijndikte: + Line width: + Lijndikte: - Point size: - Puntgrootte: + Point size: + Puntgrootte: - Material - Materiaal + Material + Materiaal - ... - ... + ... + ... - Close - Sluiten + Close + Sluiten - Viewing mode - Weergavemodus + Viewing mode + Weergavemodus - Display mode: - Weergavemodus: + Display mode: + Weergavemodus: - Plot mode: - Plot modus: + Plot mode: + Plot modus: - - '' + + '' - Line transparency: - Lijn transparantie: + Line transparency: + Lijn transparantie: - Line color: - Lijnkleur: + Line color: + Lijnkleur: - Shape color: - Kleur van de vorm: + Shape color: + Kleur van de vorm: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Editor + Editor + Editor - Options - Opties + Options + Opties - Enable line numbers - Activeer regelnummers + Enable line numbers + Activeer regelnummers - Enable folding - Activeer vouwen + Enable folding + Activeer vouwen - Indentation - Inspringen + Indentation + Inspringen - Insert spaces - Spaties invoegen + Insert spaces + Spaties invoegen - Tab size: - Tabgrootte: + Tab size: + Tabgrootte: - Indent size: - Inspring grootte: + Indent size: + Inspring grootte: - Keep tabs - Behoud tabs + Keep tabs + Behoud tabs - Display Items - Geef items weer + Display Items + Geef items weer - Family: - Familie: + Family: + Familie: - Size: - Grootte: + Size: + Grootte: - Preview: - Voorbeeldweergave: + Preview: + Voorbeeldweergave: - - '' + + '' - - + + Gui::Dialog::DlgGeneral - General - Algemeen + General + Algemeen - Start up - Opstarten + Start up + Opstarten - Enable splash screen at start up - Activeer splash-scherm tijdens het opstarten + Enable splash screen at start up + Activeer splash-scherm tijdens het opstarten - Switch to tab of report window: - Schakel over naar het tabblad van het verslag-venster: + Switch to tab of report window: + Schakel over naar het tabblad van het verslag-venster: - Auto load module after start up: - Automatisch laden module na het opstarten: + Auto load module after start up: + Automatisch laden module na het opstarten: - Language - Taal + Language + Taal - Change language: - Taal wijzigen: + Change language: + Taal wijzigen: - Main window - Hoofdvenster + Main window + Hoofdvenster - Size of recent file list - Grootte van de recente-bestanden lijst + Size of recent file list + Grootte van de recente-bestanden lijst - Window style: - Venster stijl: + Window style: + Venster stijl: - Size of toolbar icons: - Grootte van de werkbalk-pictogrammen: + Size of toolbar icons: + Grootte van de werkbalk-pictogrammen: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Standaard (%1 x %1) + Default (%1 x %1) + Standaard (%1 x %1) - Small (%1 x %1) - Klein (1% x %1) + Small (%1 x %1) + Klein (1% x %1) - Large (%1 x %1) - Groot (1% x %1) + Large (%1 x %1) + Groot (1% x %1) - Extra large (%1 x %1) - Extra groot (1% x %1) + Extra large (%1 x %1) + Extra groot (1% x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Invoer + Input + Invoer - OK - OK + OK + OK - Cancel - Annuleren + Cancel + Annuleren - - '' + + '' - - + + Gui::Dialog::DlgInspector - Scene Inspector - Scene Inspecteur + Scene Inspector + Scene Inspecteur - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Macro uitvoeren + Execute macro + Macro uitvoeren - Macro name: - Macro-naam: + Macro name: + Macro-naam: - Macro destination: - Macro-bestemming: + Macro destination: + Macro-bestemming: - Execute - Uitvoeren + Execute + Uitvoeren - Close - Sluiten + Close + Sluiten - Create - Aanmaken + Create + Aanmaken - Delete - Verwijderen + Delete + Verwijderen - Edit - Bewerken + Edit + Bewerken - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Macro's + Macros + Macro's - Macro file - Macro-bestand + Macro file + Macro-bestand - Enter a file name, please: - Gelieve een bestandsnaam in te voeren: + Enter a file name, please: + Gelieve een bestandsnaam in te voeren: - Existing file - Bestaand bestand + Existing file + Bestaand bestand - '%1'. + '%1'. This file already exists. - '%1'. Dit bestand bestaat reeds. + '%1'. Dit bestand bestaat reeds. - Delete macro - Verwijder macro + Delete macro + Verwijder macro - Do you really want to delete the macro '%1'? - Weet u zeker dat u macro '%1' wilt verwijderen? + Do you really want to delete the macro '%1'? + Weet u zeker dat u macro '%1' wilt verwijderen? - Cannot create file - Kan bestand niet aanmaken + Cannot create file + Kan bestand niet aanmaken - Creation of file '%1' failed. - Creëren van bestand '%1' mislukt. + Creation of file '%1' failed. + Creëren van bestand '%1' mislukt. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Macro-opname + Macro recording + Macro-opname - Macro name: - Macro-naam: + Macro name: + Macro-naam: - Stop - Stop + Stop + Stop - Cancel - Annuleren + Cancel + Annuleren - Macro path: - Macro-pad: + Macro path: + Macro-pad: - ... - ... + ... + ... - Record - Opnemen + Record + Opnemen - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Macro-recorder + Macro recorder + Macro-recorder - Specify first a place to save. - Geef eerst de locatie om op te slaan. + Specify first a place to save. + Geef eerst de locatie om op te slaan. - Existing macro - Bestaande macro + Existing macro + Bestaande macro - The macro '%1' already exists. Do you want to overwrite? - De macro '%1' bestaat reeds. Wilt u het overschrijven? + The macro '%1' already exists. Do you want to overwrite? + De macro '%1' bestaat reeds. Wilt u het overschrijven? - The macro directory doesn't exist. Please, choose another one. - De macro-map bestaat niet. Gelieve een andere te kiezen. + The macro directory doesn't exist. Please, choose another one. + De macro-map bestaat niet. Gelieve een andere te kiezen. - Choose macro directory - Kies macro-map + Choose macro directory + Kies macro-map - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Materiaaleigenschappen + Material properties + Materiaaleigenschappen - &Close - &Sluiten + &Close + &Sluiten - Alt+C - Alt+C + Alt+C + Alt+C - Material - Materiaal + Material + Materiaal - Diffuse color: - Diffuse kleur: + Diffuse color: + Diffuse kleur: - Specular color: - Spiegelende kleur: + Specular color: + Spiegelende kleur: - Shininess: - Glans: + Shininess: + Glans: - % - % + % + % - Ambient color: - Omgevingskleur: + Ambient color: + Omgevingskleur: - - '' + + '' - Emissive color: - Emissieve kleur: + Emissive color: + Emissieve kleur: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - On-line help + On-line help + On-line help - Help viewer - Help-Viewer + Help viewer + Help-Viewer - Location of start page - Locatie van startpagina + Location of start page + Locatie van startpagina - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML-bestanden (*. html *. htm) + HTML files (*.html *.htm) + HTML-bestanden (*. html *. htm) - Access denied - Toegang geweigerd + Access denied + Toegang geweigerd - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Toegang geweigerd '%1' + Toegang geweigerd '%1' Kies een andere map, alstublieft. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Parameter-editor + Parameter Editor + Parameter-editor - Save to disk - Opslaan op schijf + Save to disk + Opslaan op schijf - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Sluiten + &Close + &Sluiten - - + + Gui::Dialog::DlgParameterImp - Group - Groep + Group + Groep - Name - Naam + Name + Naam - Type - Type + Type + Type - Value - Waarde + Value + Waarde - User parameter - Gebruikersparameter + User parameter + Gebruikersparameter - Invalid input - Ongeldige invoer + Invalid input + Ongeldige invoer - Invalid key name '%1' - Ongeldige sleutelnaam '%1' + Invalid key name '%1' + Ongeldige sleutelnaam '%1' - System parameter - Systeem-parameter + System parameter + Systeem-parameter - - + + Gui::Dialog::DlgPreferences - Preferences - Voorkeuren + Preferences + Voorkeuren - &Help - &Help + &Help + &Help - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &OK + &OK + &OK - &Apply - &Toepassen + &Apply + &Toepassen - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Annuleren + &Cancel + &Annuleren - - '' + + '' - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Verkeerde parameter + Wrong parameter + Verkeerde parameter - - + + Gui::Dialog::DlgProjectInformation - Project information - Projectinformatie + Project information + Projectinformatie - Information - Informatie + Information + Informatie - &Name: - &Naam: + &Name: + &Naam: - Commen&t: - Commen&taar: + Commen&t: + Commen&taar: - Path: - PAD: + Path: + PAD: - &Last modified by: - &Laatst gewijzigd door: + &Last modified by: + &Laatst gewijzigd door: - Created &by: - Gemaakt &door: + Created &by: + Gemaakt &door: - Com&pany: - &Firma: + Com&pany: + &Firma: - Last &modification date: - Laatste &wijzigingsdatum: + Last &modification date: + Laatste &wijzigingsdatum: - Creation &date: - Aanmaak&datum: + Creation &date: + Aanmaak&datum: - &OK - &OK + &OK + &OK - &Cancel - &Annuleren + &Cancel + &Annuleren - - '' + + '' - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project hulpprogramma + Project utility + Project hulpprogramma - Extract project - Extraheer project + Extract project + Extraheer project - Source - Bron + Source + Bron - Project file (*.fcstd) - Project-bestand (*.fcstd) + Project file (*.fcstd) + Project-bestand (*.fcstd) - Destination - Bestemming + Destination + Bestemming - Extract - Extract + Extract + Extract - Create project - Project aanmaken + Create project + Project aanmaken - Document.xml - Document.xml + Document.xml + Document.xml - Create - Aanmaken + Create + Aanmaken - Load project file after creation - Laad projectbestand na het creëren + Load project file after creation + Laad projectbestand na het creëren - Empty source - Lege bron + Empty source + Lege bron - No source is defined. - Geen bron is gedefinieerd. + No source is defined. + Geen bron is gedefinieerd. - Empty destination - Lege bestemming + Empty destination + Lege bestemming - No destination is defined. - Geen bestemming is gedefinieerd. + No destination is defined. + Geen bestemming is gedefinieerd. - - + + Gui::Dialog::DlgReportView - Output window - Uitvoer-venster + Output window + Uitvoer-venster - Output - Uitvoer + Output + Uitvoer - Record log messages - logboek-berichten bewaren + Record log messages + logboek-berichten bewaren - Record warnings - Waarschuwingen bewaren + Record warnings + Waarschuwingen bewaren - Record error messages - Foutmeldingen bewaren + Record error messages + Foutmeldingen bewaren - Colors - Kleuren + Colors + Kleuren - Normal messages: - Normale berichten: + Normal messages: + Normale berichten: - Log messages: - Logboekberichten: + Log messages: + Logboekberichten: - Warnings: - Waarschuwingen: + Warnings: + Waarschuwingen: - Errors: - Fouten: + Errors: + Fouten: - - '' + + '' - Redirect internal Python errors to report view - Interne Python fouten omleiden naar rapportweergave + Redirect internal Python errors to report view + Interne Python fouten omleiden naar rapportweergave - Redirect internal Python output to report view - Interne Python uitvoer omleiden naar de rapportweergave + Redirect internal Python output to report view + Interne Python uitvoer omleiden naar de rapportweergave - - + + Gui::Dialog::DlgRunExternal - Running external program - Draaien van extern programma + Running external program + Draaien van extern programma - TextLabel - Tekstlabel + TextLabel + Tekstlabel - Advanced >> - Geavanceerde >> + Advanced >> + Geavanceerde >> - ... - ... + ... + ... - Accept changes - Accepteer wijzigingen + Accept changes + Accepteer wijzigingen - Discard changes - Wijzigingen verwerpen + Discard changes + Wijzigingen verwerpen - Abort program - Programma afbreken + Abort program + Programma afbreken - Help - Help + Help + Help - Select a file - Selecteer een bestand + Select a file + Selecteer een bestand - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D-Aanzicht + 3D View + 3D-Aanzicht - 3D View settings - 3D-Aanzicht instellingen + 3D View settings + 3D-Aanzicht instellingen - Show coordinate system in the corner - Toon coördinatenstelsel in de hoek + Show coordinate system in the corner + Toon coördinatenstelsel in de hoek - Show counter of frames per second - Toon teller van frames per seconde + Show counter of frames per second + Toon teller van frames per seconde - Enable animation - Animatie inschakelen + Enable animation + Animatie inschakelen - Enable anti-aliasing (slower) - Anti-aliasing (langzamer) inschakelen + Enable anti-aliasing (slower) + Anti-aliasing (langzamer) inschakelen - Eye to eye distance for stereo modes: - Oogafstand voor stereo-modus: + Eye to eye distance for stereo modes: + Oogafstand voor stereo-modus: - Camera type - Cameratype + Camera type + Cameratype - Orthographic rendering - Orthogonale projectie + Orthographic rendering + Orthogonale projectie - Perspective rendering - Perspectivische projectie + Perspective rendering + Perspectivische projectie - - '' + + '' - 3D Navigation - 3D-navigatie + 3D Navigation + 3D-navigatie - Mouse... - Muis... + Mouse... + Muis... - Intensity of backlight - Intensiteit van de achtergrondverlichting + Intensity of backlight + Intensiteit van de achtergrondverlichting - Enable backlight color - Inschakelen achtergrondverlichtingskleur + Enable backlight color + Inschakelen achtergrondverlichtingskleur - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Zoom omkeren + Invert zoom + Zoom omkeren - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigatie + %1 navigation + %1 navigatie - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Kleurenmodel + Color model + Kleurenmodel - &Gradient: - Verloop: + &Gradient: + Verloop: - red-yellow-green-cyan-blue - rood-geel-groen-cyaan-blauw + red-yellow-green-cyan-blue + rood-geel-groen-cyaan-blauw - blue-cyan-green-yellow-red - blauw-cyaan-groen-geel-rood + blue-cyan-green-yellow-red + blauw-cyaan-groen-geel-rood - white-black - wit-zwart + white-black + wit-zwart - black-white - zwart-wit + black-white + zwart-wit - Visibility - Zichtbaarheid + Visibility + Zichtbaarheid - Out g&rayed - Uit geg&rijsd + Out g&rayed + Uit geg&rijsd - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Uit onzichtbaar + Out &invisible + Uit onzichtbaar - Alt+I - Alt+I + Alt+I + Alt+I - Style - Stijl + Style + Stijl - &Zero - &Nul + &Zero + &Nul - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - Stroming + &Flow + Stroming - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Annuleren + &Cancel + &Annuleren - Parameter range - Parameterbereik + Parameter range + Parameterbereik - Mi&nimum: - Mi&nimum: + Mi&nimum: + Mi&nimum: - Ma&ximum: - Ma&ximum: + Ma&ximum: + Ma&ximum: - &Labels: - &Labels: + &Labels: + &Labels: - &Decimals: - Aantal &decimalen: + &Decimals: + Aantal &decimalen: - - '' + + '' - Color-gradient settings - Kleurverloop instellingen + Color-gradient settings + Kleurverloop instellingen - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Verkeerde parameter + Wrong parameter + Verkeerde parameter - The maximum value must be higher than the minimum value. - De maximale waarde moet hoger zijn dan de minimale waarde. + The maximum value must be higher than the minimum value. + De maximale waarde moet hoger zijn dan de minimale waarde. - - + + Gui::Dialog::DlgSettingsDocument - Document - Document + Document + Document - General - Algemeen + General + Algemeen - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Document op te slaan compressie-niveau (0=geen, 9=hoogste, 3=standaard) + Document op te slaan compressie-niveau (0=geen, 9=hoogste, 3=standaard) - Create new document at start up - Maak een nieuw document aan bij het opstarten + Create new document at start up + Maak een nieuw document aan bij het opstarten - Storage - Opslag + Storage + Opslag - Saving transactions (Auto-save) - Opslaan van transacties (automatisch opslaan) + Saving transactions (Auto-save) + Opslaan van transacties (automatisch opslaan) - Discard saved transaction after saving document - Opgeslagen transactie na het opslaan van het document negeren + Discard saved transaction after saving document + Opgeslagen transactie na het opslaan van het document negeren - Save thumbnail into project file when saving document - Miniatuur opslaat in projectbestand bij het opslaan van document + Save thumbnail into project file when saving document + Miniatuur opslaat in projectbestand bij het opslaan van document - Create up to backup files when resaving document - Create up to backup files when resaving document + Create up to backup files when resaving document + Create up to backup files when resaving document - Document objects - Document objecten + Document objects + Document objecten - Allow duplicate object labels in one document - Sta dubbele objectlabels toe in een document + Allow duplicate object labels in one document + Sta dubbele objectlabels toe in een document - Maximum Undo/Redo steps - Maximale 'ongedaan maken' / 'Opnieuw' stappen + Maximum Undo/Redo steps + Maximale 'ongedaan maken' / 'Opnieuw' stappen - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Tekst + Text + Tekst - Bookmark - Bladwijzer + Bookmark + Bladwijzer - Breakpoint - Pauze-punt + Breakpoint + Pauze-punt - Keyword - Sleutelwoord + Keyword + Sleutelwoord - Comment - Commentaar + Comment + Commentaar - Block comment - Commentaarblok + Block comment + Commentaarblok - Number - Getal + Number + Getal - String - Tekenreeks + String + Tekenreeks - Character - Teken + Character + Teken - Class name - Klassenaam + Class name + Klassenaam - Define name - Definieer Naam + Define name + Definieer Naam - Operator - Operand + Operator + Operand - Python output - Python-uitvoer + Python output + Python-uitvoer - Python error - Python-fout + Python error + Python-fout - Items - Items + Items + Items - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Afbeeldingsinstellingen + Image settings + Afbeeldingsinstellingen - Image properties - Afbeeldingeigenschappen + Image properties + Afbeeldingeigenschappen - Back&ground: - achter&grond: + Back&ground: + achter&grond: - Current - Huidige + Current + Huidige - White - Wit + White + Wit - Black - Zwart + Black + Zwart - Transparent - Transparant + Transparent + Transparant - Image dimensions - Afbeeldings-afmetingen + Image dimensions + Afbeeldings-afmetingen - Pixel - beeldpunt + Pixel + beeldpunt - &Width: - &Breedte: + &Width: + &Breedte: - Current screen - Huidige beeldscherm + Current screen + Huidige beeldscherm - Icon 32 x 32 - Pictogram 32 x 32 + Icon 32 x 32 + Pictogram 32 x 32 - Icon 64 x 64 - Pictogram 64 x 64 + Icon 64 x 64 + Pictogram 64 x 64 - Icon 128 x 128 - Pictogram 128 x 128 + Icon 128 x 128 + Pictogram 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA + 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA + 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standaard formaten: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + Hoogte: - Standard sizes: - Standaard formaten: + Aspect ratio: + Beeldverhouding: - &Height: - Hoogte: + &Screen + &Scherm - Aspect ratio: - Beeldverhouding: + Alt+S + Alt+S - &Screen - &Scherm + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Bijschrift - Alt+1 - Alt+1 + Insert MIBA + MIBA-informatie toevoegen - Image comment - Bijschrift + Insert comment + Opmerking invoegen - - Insert MIBA - MIBA-informatie toevoegen - - - Insert comment - Opmerking invoegen - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Macro + Macro + Macro - Macro recording settings - Macro-opname-instellingen + Macro recording settings + Macro-opname-instellingen - Logging Commands - Loggen van commando's + Logging Commands + Loggen van commando's - Show script commands in python console - Toon scriptopdrachten in python console + Show script commands in python console + Toon scriptopdrachten in python console - Log all commands issued by menus to file: - Log alle commando's veroorzaakt door menu's naar bestand: + Log all commands issued by menus to file: + Log alle commando's veroorzaakt door menu's naar bestand: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Gui commando's + Gui commands + Gui commando's - Recording GUI commands - GUI-commando's opnemen + Recording GUI commands + GUI-commando's opnemen - Record as comment - Opnemen als commentaar + Record as comment + Opnemen als commentaar - Macro path - Macro-pad + Macro path + Macro-pad - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Eenheden + Units + Eenheden - Units settings - Instellingen van de eenheden + Units settings + Instellingen van de eenheden - Standard (mm/kg/s/degree) - Standaard (mm/kg/s/graad) + Standard (mm/kg/s/degree) + Standaard (mm/kg/s/graad) - MKS (m/kg/s/degree) - MKS (m/kg/s/graad) + MKS (m/kg/s/degree) + MKS (m/kg/s/graad) - Magnitude - Omvang + Magnitude + Omvang - Unit - Eenheid + Unit + Eenheid - User system: - User system: + User system: + User system: - Imperial (in/lb) - Imperial (in/lb) + Imperial (in/lb) + Imperial (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Kleuren + Colors + Kleuren - Selection - Selectie + Selection + Selectie - Enable selection highlighting - Activeer selectie markeren + Enable selection highlighting + Activeer selectie markeren - Enable preselection highlighting - Activeer voorselectie markeren + Enable preselection highlighting + Activeer voorselectie markeren - Background color - Achtergrond + Background color + Achtergrond - Middle color - Middelste kleur + Middle color + Middelste kleur - Color gradient - Kleurverloop + Color gradient + Kleurverloop - Simple color - Eenvoudige kleur + Simple color + Eenvoudige kleur - Default colors - Standaardkleuren + Default colors + Standaardkleuren - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - De kleur van de bewerkte randen + The color of edges being edited + De kleur van de bewerkte randen - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Tip van de dag + Tip of the day + Tip van de dag - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Wist u dat...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Wist u dat...</font></font></b> - &Show tips at start up - &Toon tips bij opstarten + &Show tips at start up + &Toon tips bij opstarten - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Volgende Tip + &Next Tip + &Volgende Tip - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Sluiten + &Close + &Sluiten - Alt+C - Alt+C + Alt+C + Alt+C - - '' + + '' - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Downloaden is mislukt:%1 + Downloaden is mislukt:%1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Als u meer wilt weten over FreeCAD moet je naar %1 gaan of het help-item drukken in het helpmenu. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Als u meer wilt weten over FreeCAD moet je naar %1 gaan of het help-item drukken in het helpmenu. - - + + Gui::Dialog::DockablePlacement - Placement - Plaatsing + Placement + Plaatsing - - + + Gui::Dialog::DownloadDialog - Canceled. - Geannuleerd. + Canceled. + Geannuleerd. - - + + Download + + + + Cancel + Annuleren + + + Close + Sluiten + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Downloaden is mislukt:%1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Pictogram toevoegen + Add icon + Pictogram toevoegen - - + + Gui::Dialog::InputVector - Input vector - Input vector + Input vector + Input vector - Vector - Vector + Vector + Vector - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Muisknoppen + Mouse buttons + Muisknoppen - Configuration - Configuratie + Configuration + Configuratie - Selection: - Selectie: + Selection: + Selectie: - Panning - Verplaatsen + Panning + Verplaatsen - Rotation: - Rotatie: + Rotation: + Rotatie: - Zooming: - Zoomen: + Zooming: + Zoomen: - - + + Gui::Dialog::ParameterGroup - Expand - Uitklappen + Expand + Uitklappen - Add sub-group - Subgroep toevoegen + Add sub-group + Subgroep toevoegen - Remove group - Groep verwijderen + Remove group + Groep verwijderen - Rename group - Groep hernoemen + Rename group + Groep hernoemen - Export parameter - Export parameter + Export parameter + Export parameter - Import parameter - Import parameter + Import parameter + Import parameter - Collapse - Samenvouwen + Collapse + Samenvouwen - Do really want to remove this parameter group? - Wilt u deze parameter-groep echt verwijderen? + Do really want to remove this parameter group? + Wilt u deze parameter-groep echt verwijderen? - Existing sub-group - Bestaande subgroep + Existing sub-group + Bestaande subgroep - The sub-group '%1' already exists. - De subgroep '%1' bestaat reeds. + The sub-group '%1' already exists. + De subgroep '%1' bestaat reeds. - Export parameter to file - Exporteer parameters naar bestand + Export parameter to file + Exporteer parameters naar bestand - XML (*.FCParam) - XML(*.FCParam) + XML (*.FCParam) + XML(*.FCParam) - Import parameter from file - Importeer parameters uit bestand + Import parameter from file + Importeer parameters uit bestand - Import Error - Import fout + Import Error + Import fout - Reading from '%1' failed. - Het lezen van '%1' is mislukt. + Reading from '%1' failed. + Het lezen van '%1' is mislukt. - - + + Gui::Dialog::ParameterValue - Change value - Waarde wijzigen + Change value + Waarde wijzigen - Remove key - Verwijder de sleutel + Remove key + Verwijder de sleutel - Rename key - Wijzig de naam van de sleutel + Rename key + Wijzig de naam van de sleutel - New - Nieuw + New + Nieuw - New string item - Nieuwe tekenreeks + New string item + Nieuwe tekenreeks - New float item - Nieuwe decimale waarde + New float item + Nieuwe decimale waarde - New integer item - Nieuw geheel getal + New integer item + Nieuw geheel getal - New unsigned item - Nieuw positief geheel getal + New unsigned item + Nieuw positief geheel getal - New Boolean item - Nieuwe booleaanse waarde + New Boolean item + Nieuwe booleaanse waarde - Existing item - Bestaand item + Existing item + Bestaand item - The item '%1' already exists. - Item '%1' bestaat reeds. + The item '%1' already exists. + Item '%1' bestaat reeds. - - + + Gui::Dialog::Placement - Placement - Plaatsing + Placement + Plaatsing - OK - OK + OK + OK - Translation: - Verplaatsing: + Translation: + Verplaatsing: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotatie: + Rotation: + Rotatie: - Angle: - Hoek: + Angle: + Hoek: - Axis: - Assen: + Axis: + Assen: - Center: - Middelpunt: + Center: + Middelpunt: - Pitch: - Steiging: + Pitch: + Steiging: - Roll: - Rol: + Roll: + Rol: - Yaw: - Yaw: + Yaw: + Yaw: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Euler angles + Euler angles + Euler angles - Apply placement changes immediately - Verplaatsingen onmiddellijk doorvoeren + Apply placement changes immediately + Verplaatsingen onmiddellijk doorvoeren - Apply incremental changes to object placement - Incrementele verplaatsingen toepassen op object + Apply incremental changes to object placement + Incrementele verplaatsingen toepassen op object - Apply - Toepassen + Apply + Toepassen - Reset - Herstel + Reset + Herstel - Close - Sluiten + Close + Sluiten - - + + Gui::Dialog::PrintModel - Button - Knop + Button + Knop - Command - Commando + Command + Commando - - + + Gui::Dialog::SceneInspector - Dialog - Dialoog + Dialog + Dialoog - Close - Sluiten + Close + Sluiten - Refresh - Vernieuwen + Refresh + Vernieuwen - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor Tree + Inventor Tree + Inventor Tree - Nodes - Knopen + Nodes + Knopen - - + + Gui::Dialog::TextureMapping - Texture - Textuur + Texture + Textuur - Texture mapping - Textuurafbeelden + Texture mapping + Textuurafbeelden - Global - Overal + Global + Overal - Environment - Omgeving + Environment + Omgeving - Image files (%1) - Afbeeldingsbestanden (%1) + Image files (%1) + Afbeeldingsbestanden (%1) - No image - Geen afbeelding + No image + Geen afbeelding - The specified file is not a valid image file. - Het opgegeven bestand is niet een geldig afbeeldingsbestand. + The specified file is not a valid image file. + Het opgegeven bestand is niet een geldig afbeeldingsbestand. - No 3d view - Geen 3D-weergave + No 3d view + Geen 3D-weergave - No active 3d view found. - Geen actieve 3D-weergave gevonden. + No active 3d view found. + Geen actieve 3D-weergave gevonden. - - + + Gui::Dialog::Transform - Cancel - Annuleren + Cancel + Annuleren - Transform - Transformeren + Transform + Transformeren - - + + Gui::DlgTreeWidget - Dialog - Dialoog + Dialog + Dialoog - Items - Items + Items + Items - OK - OK + OK + OK - Cancel - Annuleren + Cancel + Annuleren - - '' + + '' - - + + Gui::DockWnd::CombiView - CombiView - Combi-aanzicht + CombiView + Combi-aanzicht - Project - Project + Project + Project - Tasks - Taken + Tasks + Taken - - + + Gui::DockWnd::HelpView - Previous - Vorige + Previous + Vorige - Next - Volgende + Next + Volgende - Home - Startpagina + Home + Startpagina - Open - Openen + Open + Openen - Open file - Bestand openen + Open file + Bestand openen - All HTML files (*.html *.htm) - Alle HTML-bestanden (*. html *. htm) + All HTML files (*.html *.htm) + Alle HTML-bestanden (*. html *. htm) - External browser - Externe browser + External browser + Externe browser - No external browser found. Specify in preferences, please - Geen externe browser gevonden. Bij opties instellen, + No external browser found. Specify in preferences, please + Geen externe browser gevonden. Bij opties instellen, - Starting of %1 failed - Starten van '%1' is mislukt + Starting of %1 failed + Starten van '%1' is mislukt - - + + Gui::DockWnd::PropertyDockView - Property View - Eigenschappen-aanzicht + Property View + Eigenschappen-aanzicht - - + + Gui::DockWnd::ReportOutput - Logging - Loggen + Logging + Loggen - Warning - Waarschuwing + Warning + Waarschuwing - Error - Fout + Error + Fout - Options - Opties + Options + Opties - Clear - Wissen + Clear + Wissen - Save As... - Opslaan als... + Save As... + Opslaan als... - Save Report Output - Rapport-uitvoer opslaan + Save Report Output + Rapport-uitvoer opslaan - Plain Text Files (*.txt *.log) - Eenvoudige tekstbestanden (*.txt *.log) + Plain Text Files (*.txt *.log) + Eenvoudige tekstbestanden (*.txt *.log) - Go to end - Ga naar het einde + Go to end + Ga naar het einde - Redirect Python output - Python-uitvoer omleiden + Redirect Python output + Python-uitvoer omleiden - Redirect Python errors - Omleiden van Python fouten + Redirect Python errors + Omleiden van Python fouten - - + + Gui::DockWnd::ReportView - Output - Uitvoer + Output + Uitvoer - Python console - Python Console + Python console + Python Console - - + + Gui::DockWnd::SelectionView - Property View - Eigenschappen-aanzicht + Property View + Eigenschappen-aanzicht - - + + Gui::DockWnd::TaskPanelView - Task View - Taakaanzicht + Task View + Taakaanzicht - - + + Gui::DockWnd::TextBrowser - Could not open file. - Kon bestand niet openen. + Could not open file. + Kon bestand niet openen. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - U hebt geprobeerd om het adres %1 te benaderen welke op dit moment niet beschikbaar is. Zorg ervoor dat de URL bestaat en probeer de pagina te herladen. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + U hebt geprobeerd om het adres %1 te benaderen welke op dit moment niet beschikbaar is. Zorg ervoor dat de URL bestaat en probeer de pagina te herladen. - Connecting to %1 - Verbinden met %1 + Connecting to %1 + Verbinden met %1 - Sending to %1 - Verzenden naar %1 + Sending to %1 + Verzenden naar %1 - Reading from %1 - Lezen van %1 + Reading from %1 + Lezen van %1 - Download failed: %1. - Downloaden is mislukt:%1. + Download failed: %1. + Downloaden is mislukt:%1. - Previous - Vorige + Previous + Vorige - Forward - Vooruit + Forward + Vooruit - Home - Startpagina + Home + Startpagina - Refresh - Vernieuwen + Refresh + Vernieuwen - Copy - Kopiëren + Copy + Kopiëren - Select all - Alles selecteren + Select all + Alles selecteren - No description for - Geen omschrijving voor + No description for + Geen omschrijving voor - - + + Gui::DocumentModel - Application - Applicatie + Application + Applicatie - Labels & Attributes - Labels & Kenmerken + Labels & Attributes + Labels & Kenmerken - - + + Gui::EditorView - Modified file - Gewijzigd bestand + Modified file + Gewijzigd bestand - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. Dit is gewijzigd buiten de source-editor om. Wilt u het herladen? + %1. Dit is gewijzigd buiten de source-editor om. Wilt u het herladen? - Unsaved document - Niet-opgeslagen document + Unsaved document + Niet-opgeslagen document - The document has been modified. + The document has been modified. Do you want to save your changes? - Het document is gewijzigd. + Het document is gewijzigd. Wilt u uw wijzigingen opslaan? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD macro(*.FCMacro);;Python(*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD macro(*.FCMacro);;Python(*.py) - Export PDF - Exporteren als PDF + Export PDF + Exporteren als PDF - PDF file (*.pdf) - PDF-bestand (*. pdf) + PDF file (*.pdf) + PDF-bestand (*. pdf) - untitled[*] - naamloos[*] + untitled[*] + naamloos[*] - - Editor - - Editor + - Editor + - Editor - %1 chars removed - %1 karakters verwijderd + %1 chars removed + %1 karakters verwijderd - %1 chars added - %1 karakters toegevoegd + %1 chars added + %1 karakters toegevoegd - Formatted - Geformatteerd + Formatted + Geformatteerd - - + + Gui::FileChooser - Select a file - Selecteer een bestand + Select a file + Selecteer een bestand - Select a directory - Kies een map + Select a directory + Kies een map - - + + Gui::FileDialog - Save as - Opslaan als + Save as + Opslaan als - Open - Openen + Open + Openen - - + + Gui::FileOptionsDialog - Extended - Uitgebreid + Extended + Uitgebreid - All files (*.*) - Alle bestanden (*.*) + All files (*.*) + Alle bestanden (*.*) - - + + Gui::Flag - Top left - Linksboven + Top left + Linksboven - Bottom left - Linksonder + Bottom left + Linksonder - Top right - Rechtsboven + Top right + Rechtsboven - Bottom right - Rechts Onder + Bottom right + Rechts Onder - Remove - Verwijderen + Remove + Verwijderen - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Druk op CTRL en de linker muisknop + Press CTRL and left mouse button + Druk op CTRL en de linker muisknop - Press middle mouse button - Druk op de middelste muisknop + Press middle mouse button + Druk op de middelste muisknop - Press left mouse button - Druk op de linker muisknop + Press left mouse button + Druk op de linker muisknop - Scroll middle mouse button - Scroll middelste muisknop + Scroll middle mouse button + Scroll middelste muisknop - - + + Gui::LocationDialog - Wrong direction - Verkeerde richting + Wrong direction + Verkeerde richting - Direction must not be the null vector - Richting mag niet de nul-vector zijn + Direction must not be the null vector + Richting mag niet de nul-vector zijn - X - x + X + x - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Door gebruiker gedefinieerd... + User defined... + Door gebruiker gedefinieerd... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Macro's + Macros + Macro's - - + + Gui::MainWindow - Dimension - Afmeting + Dimension + Afmeting - Ready - Gereed + Ready + Gereed - Toggles this toolbar - Schakelt deze werkbalk in/uit + Toggles this toolbar + Schakelt deze werkbalk in/uit - Toggles this dockable window - Schakelt dit dokbare venster in/uit + Toggles this dockable window + Schakelt dit dokbare venster in/uit - Close All - Alles sluiten + Close All + Alles sluiten - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Download gestart... + Download gestart... - - + + Gui::ProgressBar - Remaining: %1 - Resterend: %1 + Remaining: %1 + Resterend: %1 - Aborting - Bezig met afbreken + Aborting + Bezig met afbreken - Do you really want to abort the operation? - Wilt u echt de bewerking afbreken? + Do you really want to abort the operation? + Wilt u echt de bewerking afbreken? - - + + Gui::ProgressDialog - Remaining: %1 - Resterend: %1 + Remaining: %1 + Resterend: %1 - Aborting - Bezig met afbreken + Aborting + Bezig met afbreken - Do you really want to abort the operation? - Wilt u echt de bewerking afbreken? + Do you really want to abort the operation? + Wilt u echt de bewerking afbreken? - - + + Gui::PropertyEditor::PropertyModel - Property - Eigenschap + Property + Eigenschap - Value - Waarde + Value + Waarde - - + + Gui::PropertyView - View - Aanzicht + View + Aanzicht - Data - Data + Data + Data - - + + Gui::PythonConsole - System exit - Systeem afsluiten + System exit + Systeem afsluiten - The application is still running. + The application is still running. Do you want to exit without saving your data? - De toepassing is nog steeds actief. Wilt u afsluiten zonder het opslaan van uw gegevens? + De toepassing is nog steeds actief. Wilt u afsluiten zonder het opslaan van uw gegevens? - Python console - Python Console + Python console + Python Console - Unhandled PyCXX exception. - Niet-verwerkte uitzondering voor PyCXX. + Unhandled PyCXX exception. + Niet-verwerkte uitzondering voor PyCXX. - Unhandled FreeCAD exception. - Niet-verwerkte uitzondering voor FreeCAD. + Unhandled FreeCAD exception. + Niet-verwerkte uitzondering voor FreeCAD. - Unhandled unknown C++ exception. - Niet-verwerkte uitzondering voor onbekende C++. + Unhandled unknown C++ exception. + Niet-verwerkte uitzondering voor onbekende C++. - &Copy command - Kopieer commando + &Copy command + Kopieer commando - &Copy history - Kopieer geschiedenis + &Copy history + Kopieer geschiedenis - Save history as... - Geschiedenis opslaan als... + Save history as... + Geschiedenis opslaan als... - Insert file name... - Bestandsnaam invoeren... + Insert file name... + Bestandsnaam invoeren... - Save History - Geschiedenis opslaan + Save History + Geschiedenis opslaan - Macro Files (*.FCMacro *.py) - Macro-bestanden (*. FCMacro *. py) + Macro Files (*.FCMacro *.py) + Macro-bestanden (*. FCMacro *. py) - Insert file name - Bestandsnaam invoeren + Insert file name + Bestandsnaam invoeren - All Files (*.*) - Alle bestanden (*.*) + All Files (*.*) + Alle bestanden (*.*) - Python Input Dialog - Pythoninvoer-dialoog + Python Input Dialog + Pythoninvoer-dialoog - Unhandled std C++ exception. - Onverwerkte std C++ uitzondering. + Unhandled std C++ exception. + Onverwerkte std C++ uitzondering. - Word wrap - Word wrap + Word wrap + Word wrap - &Copy - &Kopiëren + &Copy + &Kopiëren - &Paste - &Plakken + &Paste + &Plakken - Select All - Alles selecteren + Select All + Alles selecteren - - + + Clear console + + + + Gui::PythonEditor - Comment - Commentaar + Comment + Commentaar - Uncomment - Verwijder commentaar + Uncomment + Verwijder commentaar - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Wissen + Clear + Wissen - - + + Gui::RecentFilesAction - Open file %1 - Open bestand %1 + Open file %1 + Open bestand %1 - File not found - Bestand niet gevonden + File not found + Bestand niet gevonden - The file '%1' cannot be opened. - Het bestand '%1' kan niet worden geopend. + The file '%1' cannot be opened. + Het bestand '%1' kan niet worden geopend. - - + + Gui::SelectModule - Select module - Module selecteren + Select module + Module selecteren - Open %1 as - Open %1 als + Open %1 as + Open %1 als - Select - Selecteer + Select + Selecteer - - + + Gui::StdCmdDescription - Help - Help + Help + Help - Des&cription - Oms&chrijving + Des&cription + Oms&chrijving - Long description of commands - Lange beschrijving van de commando's + Long description of commands + Lange beschrijving van de commando's - - + + Gui::StdCmdDownloadOnlineHelp - Help - Help + Help + Help - Download online help - Download online-help + Download online help + Download online-help - Download %1's online help - Download %1's online hulp + Download %1's online help + Download %1's online hulp - Non-existing directory - Niet-bestaande map + Non-existing directory + Niet-bestaande map - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - De map '%1' bestaat niet. + De map '%1' bestaat niet. Wilt u een bestaande map opgeven? - Missing permission - Ontbrekende toestemming + Missing permission + Ontbrekende toestemming - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - U hebt geen toestemming om te schrijven naar '%1' + U hebt geen toestemming om te schrijven naar '%1' Wilt u een andere map opgeven? - Stop downloading - Stop met downloaden + Stop downloading + Stop met downloaden - - + + Gui::StdCmdPythonHelp - Tools - Gereedschap + Tools + Gereedschap - Python Modules - Python modules + Python Modules + Python modules - Opens a browser to show the Python modules - Opent een browser om de Python-modules te tonen + Opens a browser to show the Python modules + Opent een browser om de Python-modules te tonen - - + + Gui::TaskBoxAngle - Angle - Hoek + Angle + Hoek - - + + Gui::TaskBoxPosition - Position - Positie + Position + Positie - - + + Gui::TaskView::TaskAppearance - Display mode: - Weergavemodus: + Display mode: + Weergavemodus: - Plot mode: - Plot modus: + Plot mode: + Plot modus: - Point size: - Puntgrootte: + Point size: + Puntgrootte: - Line width: - Lijndikte: + Line width: + Lijndikte: - Transparency: - Transparantie: + Transparency: + Transparantie: - Appearance - Uiterlijk + Appearance + Uiterlijk - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Bewerken + Edit + Bewerken - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Uiterlijk + Appearance + Uiterlijk - ... - ... + ... + ... - edit selection - selectie bewerken + edit selection + selectie bewerken - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Druk op de linker muisknop + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Engels + English + Engels - - + + Gui::TreeDockWidget - Tree view - Boomstructuurweergave + Tree view + Boomstructuurweergave - - + + Gui::TreeWidget - Create group... - Groep maken... + Create group... + Groep maken... - Create a group - Maak een groep + Create a group + Maak een groep - Group - Groep + Group + Groep - Rename - Hernoemen + Rename + Hernoemen - Rename object - Object hernoemen + Rename object + Object hernoemen - Labels & Attributes - Labels & Kenmerken + Labels & Attributes + Labels & Kenmerken - Application - Applicatie + Application + Applicatie - Finish editing - Bewerken gereed + Finish editing + Bewerken gereed - Finish editing object - Beëindig bewerken object + Finish editing object + Beëindig bewerken object - Activate document - Activeer document + Activate document + Activeer document - Activate document %1 - Activeer document %1 + Activate document %1 + Activeer document %1 - - + + Gui::View3DInventor - Export PDF - Exporteren als PDF + Export PDF + Exporteren als PDF - PDF file (*.pdf) - PDF-bestand (*. pdf) + PDF file (*.pdf) + PDF-bestand (*. pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Selecteer de '%1' werkbank + Select the '%1' workbench + Selecteer de '%1' werkbank - - + + Position - Form - Form + Form + Form - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Raster kleven in + Grid Snap in + Raster kleven in - - + + QDockWidget - Tree view - Boomstructuurweergave + Tree view + Boomstructuurweergave - Property view - Eigenschappen-aanzicht + Property view + Eigenschappen-aanzicht - Selection view - Selectieaanzicht + Selection view + Selectieaanzicht - Report view - Rapportaanzicht + Report view + Rapportaanzicht - Task View - Taakaanzicht + Task View + Taakaanzicht - Combo View - Combi aanzicht + Combo View + Combi aanzicht - Toolbox - Toolbox + Toolbox + Toolbox - Python console - Python Console + Python console + Python Console - Display properties - Weergave eigenschappen + Display properties + Weergave eigenschappen - - + + QObject - General - Algemeen + General + Algemeen - Display - Weergave + Display + Weergave - Unknown filetype - Onbekend bestandstype + Unknown filetype + Onbekend bestandstype - Cannot open unknown filetype: %1 - Kan onbekende bestandstype niet openen: %1 + Cannot open unknown filetype: %1 + Kan onbekende bestandstype niet openen: %1 - Cannot save to unknown filetype: %1 - Kan onbekende bestandstype niet opslaan: %1 + Cannot save to unknown filetype: %1 + Kan onbekende bestandstype niet opslaan: %1 - Workbench failure - Werkbank falen + Workbench failure + Werkbank falen - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Onmogelijk om Qt Assistant (%1) te start + Unable to launch Qt Assistant (%1) + Onmogelijk om Qt Assistant (%1) te start - Exception - Uitzondering + Exception + Uitzondering - Open document - Document openen + Open document + Document openen - Import file - Bestand importeren + Import file + Bestand importeren - Export file - Bestand exporteren + Export file + Bestand exporteren - Printing... - Afdrukken... + Printing... + Afdrukken... - Cannot load workbench - Kan werkbank niet laden + Cannot load workbench + Kan werkbank niet laden - A general error occurred while loading the workbench - Een algemene fout is opgetreden tijdens het laden van de werkbank + A general error occurred while loading the workbench + Een algemene fout is opgetreden tijdens het laden van de werkbank - File not found - Bestand niet gevonden + File not found + Bestand niet gevonden - Cannot open file %1 - Kan bestand %1 niet openen + Cannot open file %1 + Kan bestand %1 niet openen - Save views... - Aanzichten opslaan... + Save views... + Aanzichten opslaan... - Load views... - Laad aanzichten... + Load views... + Laad aanzichten... - Freeze view - Bevries aanzicht + Freeze view + Bevries aanzicht - Clear views - Aanzichten wissen + Clear views + Aanzichten wissen - Restore view &%1 - Herstel weergave &%1 + Restore view &%1 + Herstel weergave &%1 - Save frozen views - Save frozen views + Save frozen views + Save frozen views - Frozen views (*.cam) - Bevroren aanzichten (*.cam) + Frozen views (*.cam) + Bevroren aanzichten (*.cam) - Restore views - Herstel aanzichten + Restore views + Herstel aanzichten - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Restore frozen views - Restore frozen views + Restore frozen views + Restore frozen views - Cannot open file '%1'. - Kan bestand '%1' niet openen. + Cannot open file '%1'. + Kan bestand '%1' niet openen. - Docked - Docked + Docked + Docked - Undocked - Undocked + Undocked + Undocked - Fullscreen - Schermvullend + Fullscreen + Schermvullend - files - Bestanden + files + Bestanden - Save picture - Afbeelding opslaan + Save picture + Afbeelding opslaan - New sub-group - Nieuwe subgroep + New sub-group + Nieuwe subgroep - Enter the name: - Voer de naam in: + Enter the name: + Voer de naam in: - New text item - Nieuw tekstitem + New text item + Nieuw tekstitem - Enter your text: - Voer uw tekst in: + Enter your text: + Voer uw tekst in: - New integer item - Nieuw geheel getal + New integer item + Nieuw geheel getal - Enter your number: - Geef uw nummer: + Enter your number: + Geef uw nummer: - New unsigned item - Nieuw positief geheel getal + New unsigned item + Nieuw positief geheel getal - New float item - Nieuwe decimale waarde + New float item + Nieuwe decimale waarde - New Boolean item - Nieuwe booleaanse waarde + New Boolean item + Nieuwe booleaanse waarde - Choose an item: - Kies een item: + Choose an item: + Kies een item: - Rename group - Groep hernoemen + Rename group + Groep hernoemen - The group '%1' cannot be renamed. - De groep '%1' kan niet worden hernoemd. + The group '%1' cannot be renamed. + De groep '%1' kan niet worden hernoemd. - Existing group - Bestaande groep + Existing group + Bestaande groep - The group '%1' already exists. - De groep '%1' bestaat al. + The group '%1' already exists. + De groep '%1' bestaat al. - Change value - Waarde wijzigen + Change value + Waarde wijzigen - Save document under new filename... - Document opslaan onder een nieuwe bestandsnaam... + Save document under new filename... + Document opslaan onder een nieuwe bestandsnaam... - Saving aborted - Opslaan afgebroken + Saving aborted + Opslaan afgebroken - Unsaved document - Niet-opgeslagen document + Unsaved document + Niet-opgeslagen document - Save document before close? - Document opslaan voor het sluiten? + Save document before close? + Document opslaan voor het sluiten? - Save Macro - Macro opslaan + Save Macro + Macro opslaan - Finish - Voltooien + Finish + Voltooien - Clear - Wissen + Clear + Wissen - Cancel - Annuleren + Cancel + Annuleren - Inner - binnenste + Inner + binnenste - Outer - buitenste + Outer + buitenste - No Browser - Geen browser + No Browser + Geen browser - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Kan uw browser niet openen. + Kan uw browser niet openen. Open een browservenster en typ: http://localhost:%1. - No Server - Geen Server + No Server + Geen Server - Unable to start the server to port %1: %2. - Kan de server met poort %1 niet starten: %2. + Unable to start the server to port %1: %2. + Kan de server met poort %1 niet starten: %2. - Unable to open your system browser. - Kan uw standaard browser niet starten. + Unable to open your system browser. + Kan uw standaard browser niet starten. - Options... - Opties... + Options... + Opties... - Out of memory - Onvoldoende geheugen + Out of memory + Onvoldoende geheugen - Not enough memory available to display the data. - Niet genoeg geheugen beschikbaar om de gegevens weer te geven. + Not enough memory available to display the data. + Niet genoeg geheugen beschikbaar om de gegevens weer te geven. - Cannot find file %1 - Kan bestand %1 niet vinden + Cannot find file %1 + Kan bestand %1 niet vinden - Cannot find file %1 neither in %2 nor in %3 - Kan bestand %1 niet vinden noch in %2, noch in %3 + Cannot find file %1 neither in %2 nor in %3 + Kan bestand %1 niet vinden noch in %2, noch in %3 - Save %1 Document - Document %1 opslaan + Save %1 Document + Document %1 opslaan - %1 document (*.FCStd) - %1 document (*.FCStd) + %1 document (*.FCStd) + %1 document (*.FCStd) - Save As - Opslaan als + Save As + Opslaan als - %1 already exists. + %1 already exists. Do you want to replace it? - %1 bestaat al. Wilt u het vervangen? + %1 bestaat al. Wilt u het vervangen? - Document not closable - Document niet te sluiten + Document not closable + Document niet te sluiten - The document is not closable for the moment. - Het document is op dit moment niet te sluiten. + The document is not closable for the moment. + Het document is op dit moment niet te sluiten. - No OpenGL - Geen OpenGL + No OpenGL + Geen OpenGL - This system does not support OpenGL - Dit systeem biedt geen ondersteuning voor OpenGL + This system does not support OpenGL + Dit systeem biedt geen ondersteuning voor OpenGL - Help - Help + Help + Help - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Niet in staat om documenten te laden. + Niet in staat om documenten te laden. Om het te kunnen laden is Qt 4.4 of hoger nodig. - %1 Help - %1 Help + %1 Help + %1 Help - Exporting PDF... - Exporteren van PDF ... + Exporting PDF... + Exporteren van PDF ... - Wrong selection - Verkeerde selectie + Wrong selection + Verkeerde selectie - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Slechts één object geselecteerd. Selecteer twee objecten. + Slechts één object geselecteerd. Selecteer twee objecten. Let op, het maakt uit waar je klikt. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Selecteer twee objecten. + Selecteer twee objecten. Let op, het maakt uit waar je klikt. - New boolean item - New boolean item + New boolean item + New boolean item - Navigation styles - Navigatie stijlen + Navigation styles + Navigatie stijlen - %1 navigation - %1 navigatie + %1 navigation + %1 navigatie - Move annotation - Move annotation + Move annotation + Move annotation - Transform - Transformeren + Transform + Transformeren - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + Standaard-aanzicht + + + Box selection + + + + StdCmdAbout - Help - Help + Help + Help - &About %1 - &Info over %1 + &About %1 + &Info over %1 - About %1 - Info over %1 + About %1 + Info over %1 - - + + StdCmdAboutQt - Help - Help + Help + Help - About &Qt - Info over Qt + About &Qt + Info over Qt - About Qt - Info over Qt + About Qt + Info over Qt - - + + StdCmdActivateNextWindow - Window - Venster + Window + Venster - Ne&xt - Volge&nde + Ne&xt + Volge&nde - Activate next window - Activeer volgende venster + Activate next window + Activeer volgende venster - - + + StdCmdActivatePrevWindow - Window - Venster + Window + Venster - Pre&vious - &Vorige + Pre&vious + &Vorige - Activate previous window - Activeer vorige venster + Activate previous window + Activeer vorige venster - - + + + StdCmdAlignment + + Edit + Bewerken + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Venster + Window + Venster - Arrange &Icons - Schikken p&ictogrammen + Arrange &Icons + Schikken p&ictogrammen - Arrange Icons - Schikken pictogrammen + Arrange Icons + Schikken pictogrammen - - + + StdCmdAxisCross - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Venster + Window + Venster - &Cascade - &Trapsgewijs + &Cascade + &Trapsgewijs - Tile pragmatic - Tile pragmatic + Tile pragmatic + Tile pragmatic - - + + StdCmdCloseActiveWindow - Window - Venster + Window + Venster - Cl&ose - &Sluiten + Cl&ose + &Sluiten - Close active window - Actieve venster sluiten + Close active window + Actieve venster sluiten - - + + StdCmdCloseAllWindows - Window - Venster + Window + Venster - Close Al&l - A&lles sluiten + Close Al&l + A&lles sluiten - Close all windows - Alle vensters sluiten + Close all windows + Alle vensters sluiten - - + + StdCmdCommandLine - Tools - Gereedschap + Tools + Gereedschap - Start command &line... - Start command &line... + Start command &line... + Start command &line... - Opens the command line in the console - Opens the command line in the console + Opens the command line in the console + Opens the command line in the console - - + + StdCmdCopy - Edit - Bewerken + Edit + Bewerken - C&opy - K&opiëren + C&opy + K&opiëren - Copy operation - Kopieer bewerking + Copy operation + Kopieer bewerking - - + + StdCmdCut - Edit - Bewerken + Edit + Bewerken - &Cut - &Knippen + &Cut + &Knippen - Cut out - Uitsnijden + Cut out + Uitsnijden - - + + StdCmdDDuplicateSelection - Edit - Bewerken + Edit + Bewerken - Duplicate selection - Dupliceer selectie + Duplicate selection + Dupliceer selectie - Put duplicates of the selected objects to the active document - Duplicaten van de geselecteerde objecten aan het actieve document toevoegen + Put duplicates of the selected objects to the active document + Duplicaten van de geselecteerde objecten aan het actieve document toevoegen - - + + StdCmdDelete - Edit - Bewerken + Edit + Bewerken - &Delete - &Verwijderen + &Delete + &Verwijderen - Deletes the selected objects - Wist de geselecteerde objecten + Deletes the selected objects + Wist de geselecteerde objecten - - + + StdCmdDemoMode - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - View turntable... - View turntable... + View turntable... + View turntable... - View turntable - View turntable + View turntable + View turntable - - + + StdCmdDlgCustomize - Tools - Gereedschap + Tools + Gereedschap - Cu&stomize... - Cu&stomize... + Cu&stomize... + Cu&stomize... - Customize toolbars and command bars - Werkbalken en opdrachtbalken aanpassen + Customize toolbars and command bars + Werkbalken en opdrachtbalken aanpassen - - + + StdCmdDlgMacroExecute - Macros ... - Macro's ... + Macros ... + Macro's ... - Opens a dialog to let you execute a recorded macro - Opent een dialoogvenster om u een opgenomen macro te laten uitvoeren + Opens a dialog to let you execute a recorded macro + Opent een dialoogvenster om u een opgenomen macro te laten uitvoeren - Macro - Macro + Macro + Macro - - + + StdCmdDlgMacroExecuteDirect - Macro - Macro + Macro + Macro - Execute macro - Macro uitvoeren + Execute macro + Macro uitvoeren - Execute the macro in the editor - De macro uitvoeren in de editor + Execute the macro in the editor + De macro uitvoeren in de editor - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Macro opnemen... + &Macro recording ... + &Macro opnemen... - Opens a dialog to record a macro - Opent een dialoogvenster om een macro op te nemen + Opens a dialog to record a macro + Opent een dialoogvenster om een macro op te nemen - Macro - Macro + Macro + Macro - - + + StdCmdDlgParameter - Tools - Gereedschap + Tools + Gereedschap - E&dit parameters ... - E&dit parameters... + E&dit parameters ... + E&dit parameters... - Opens a Dialog to edit the parameters - Opent een dialoogvenster om de parameters te bewerken + Opens a Dialog to edit the parameters + Opent een dialoogvenster om de parameters te bewerken - - + + StdCmdDlgPreferences - Tools - Gereedschap + Tools + Gereedschap - &Preferences ... - &Opties... + &Preferences ... + &Opties... - Opens a Dialog to edit the preferences - Opent een dialoogvenster om de voorkeuren bewerken + Opens a Dialog to edit the preferences + Opent een dialoogvenster om de voorkeuren bewerken - - + + StdCmdDockViewMenu - View - Aanzicht + View + Aanzicht - Vie&ws - Aanzichten + Vie&ws + Aanzichten - Toggles this window - Schakelt dit venster + Toggles this window + Schakelt dit venster - - + + StdCmdDrawStyle - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Bewerken + + + Duplicate selection + Dupliceer selectie + + + Put duplicates of the selected objects to the active document + Duplicaten van de geselecteerde objecten aan het actieve document toevoegen + + + + StdCmdEdit + + Edit + Bewerken + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Bestand + File + Bestand - &Export... - &Exporteren... + &Export... + &Exporteren... - Export an object in the active document - Export een object uit het actieve document + Export an object in the active document + Export een object uit het actieve document - Supported formats - Ondersteunde formaten + Supported formats + Ondersteunde formaten - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Gereedschap + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Bestand + File + Bestand - &Recompute - &Herberekenen + &Recompute + &Herberekenen - Recompute feature or document - Herberekenen kenmerk of document + Recompute feature or document + Herberekenen kenmerk of document - - + + StdCmdFreeCADWebsite - Help - Help + Help + Help - FreeCAD Website - FreeCAD Webpagina + FreeCAD Website + FreeCAD Webpagina - The FreeCAD website - De FreeCAD webpagina + The FreeCAD website + De FreeCAD webpagina - - + + StdCmdFreezeViews - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Freeze display - Bevries aanzicht + Freeze display + Bevries aanzicht - Freezes the current view position - Bevriest het huidige aanzicht + Freezes the current view position + Bevriest het huidige aanzicht - - + + StdCmdHideObjects - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Hide all objects - Verberg alle objecten + Hide all objects + Verberg alle objecten - Hide all objects in the document - Verberg alle objecten in het document + Hide all objects in the document + Verberg alle objecten in het document - - + + StdCmdHideSelection - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Hide selection - Selectie verbergen + Hide selection + Selectie verbergen - Hide all selected objects - Verberg alle geselecteerde objecten + Hide all selected objects + Verberg alle geselecteerde objecten - - + + StdCmdImport - File - Bestand + File + Bestand - &Import... - &Importeren... + &Import... + &Importeren... - Import a file in the active document - Importeer een bestand in het actieve document + Import a file in the active document + Importeer een bestand in het actieve document - Supported formats - Ondersteunde formaten + Supported formats + Ondersteunde formaten - All files (*.*) - Alle bestanden (*.*) + All files (*.*) + Alle bestanden (*.*) - - + + StdCmdMacroStartDebug - Macro - Macro + Macro + Macro - Debug macro - Debug macro + Debug macro + Debug macro - Start debugging of macro - Start debuggen van macro + Start debugging of macro + Start debuggen van macro - - + + StdCmdMacroStepOver - Macro - Macro + Macro + Macro - Step over - Stap over + Step over + Stap over - - + + StdCmdMacroStopDebug - Macro - Macro + Macro + Macro - Stop debugging - Stop debugging + Stop debugging + Stop debugging - Stop debugging of macro - Stop debuggen van macro + Stop debugging of macro + Stop debuggen van macro - - + + StdCmdMacroStopRecord - Macro - Macro + Macro + Macro - S&top macro recording - S&top macro-opname + S&top macro recording + S&top macro-opname - Stop the macro recording session - Stop de macro-opname sessie + Stop the macro recording session + Stop de macro-opname sessie - - + + StdCmdMeasureDistance - View - Aanzicht + View + Aanzicht - Measure distance - Afstand meten + Measure distance + Afstand meten - - + + StdCmdMeasurementSimple - Tools - Gereedschap + Tools + Gereedschap - Mesure distance - Meet afstand + Mesure distance + Meet afstand - Measures distance between two selected objects - Meet afstand tussen twee geselecteerde objecten + Measures distance between two selected objects + Meet afstand tussen twee geselecteerde objecten - - + + Measure distance + Afstand meten + + + StdCmdMergeProjects - File - Bestand + File + Bestand - Merge project... - Voeg project samen... + Merge project... + Voeg project samen... - Merge project - Voeg project samen + Merge project + Voeg project samen - %1 document (*.fcstd) - %1 document(*.fcstd) + %1 document (*.fcstd) + %1 document(*.fcstd) - Cannot merge project with itself. - Kan project niet met zichzelf samenvoegen. + Cannot merge project with itself. + Kan project niet met zichzelf samenvoegen. - - + + StdCmdNew - File - Bestand + File + Bestand - &New - &Nieuw + &New + &Nieuw - Create a new empty document - Maak een nieuw leeg document + Create a new empty document + Maak een nieuw leeg document - - + + StdCmdOnlineHelp - Help - Help + Help + Help - Show help to the application - Toon help voor de applicatie + Show help to the application + Toon help voor de applicatie - - + + StdCmdOnlineHelpPython - Help - Help + Help + Help - Python Manuals - Python Handleidingen + Python Manuals + Python Handleidingen - Show the Python documentation - Toon de Python documentatie + Show the Python documentation + Toon de Python documentatie - - + + StdCmdOnlineHelpWebsite - Help - Help + Help + Help - Help Website - Help Webpagina + Help Website + Help Webpagina - The website where the help is maintained - De webpagina waar de help wordt onderhouden + The website where the help is maintained + De webpagina waar de help wordt onderhouden - - + + StdCmdOpen - File - Bestand + File + Bestand - &Open... - &Openen... + &Open... + &Openen... - Open a document or import files - Open een document of importeer bestanden + Open a document or import files + Open een document of importeer bestanden - Supported formats - Ondersteunde formaten + Supported formats + Ondersteunde formaten - All files (*.*) - Alle bestanden (*.*) + All files (*.*) + Alle bestanden (*.*) - - + + StdCmdPaste - Edit - Bewerken + Edit + Bewerken - &Paste - &Plakken + &Paste + &Plakken - Paste operation - Plakbewerking + Paste operation + Plakbewerking - - + + StdCmdPlacement - Edit - Bewerken + Edit + Bewerken - Placement... - Plaatsing... + Placement... + Plaatsing... - Place the selected objects - Plaats de geselecteerde objecten + Place the selected objects + Plaats de geselecteerde objecten - - + + StdCmdPrint - File - Bestand + File + Bestand - &Print... - Afdru&kken... + &Print... + Afdru&kken... - Print the document - Het document afdrukken + Print the document + Het document afdrukken - - + + StdCmdPrintPdf - File - Bestand + File + Bestand - &Export PDF... - &Exporteren als PDF... + &Export PDF... + &Exporteren als PDF... - Export the document as PDF - Exporteer het document als PDF + Export the document as PDF + Exporteer het document als PDF - - + + StdCmdPrintPreview - File - Bestand + File + Bestand - &Print preview... - &Afdrukvoorbeeld... + &Print preview... + &Afdrukvoorbeeld... - Print the document - Het document afdrukken + Print the document + Het document afdrukken - Print preview - Afdrukvoorbeeld + Print preview + Afdrukvoorbeeld - - + + StdCmdProjectInfo - File - Bestand + File + Bestand - Project i&nformation... - Project&informatie... + Project i&nformation... + Project&informatie... - Show details of the currently active project - Toon details van het huidige actieve project + Show details of the currently active project + Toon details van het huidige actieve project - - + + StdCmdProjectUtil - Tools - Gereedschap + Tools + Gereedschap - Project utility... - Project hulpprogramma... + Project utility... + Project hulpprogramma... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - Help + Help + Help - Python Website - Python-webpagina + Python Website + Python-webpagina - The official Python website - De officiële Python webpagina + The official Python website + De officiële Python webpagina - - + + StdCmdQuit - File - Bestand + File + Bestand - E&xit - Afsl&uiten + E&xit + Afsl&uiten - Quits the application - Sluit de applicatie + Quits the application + Sluit de applicatie - - + + StdCmdRandomColor - File - Bestand + File + Bestand - Random color - Willekeurige kleur + Random color + Willekeurige kleur - - + + StdCmdRecentFiles - File - Bestand + File + Bestand - Recent files - Recente Bestanden + Recent files + Recente Bestanden - Recent file list - Lijst met recente bestanden + Recent file list + Lijst met recente bestanden - - + + StdCmdRedo - Edit - Bewerken + Edit + Bewerken - &Redo - &Opnieuw + &Redo + &Opnieuw - Redoes a previously undone action - Opnieuw uitvoeren van een eerder ongedane actie + Redoes a previously undone action + Opnieuw uitvoeren van een eerder ongedane actie - - + + StdCmdRefresh - Edit - Bewerken + Edit + Bewerken - &Refresh - &Verversen + &Refresh + &Verversen - Recomputes the current active document - Herberekend het huidige actieve document + Recomputes the current active document + Herberekend het huidige actieve document - - + + StdCmdSave - File - Bestand + File + Bestand - &Save - O&pslaan + &Save + O&pslaan - Save the active document - Sla het actieve document op + Save the active document + Sla het actieve document op - - + + StdCmdSaveAs - File - Bestand + File + Bestand - Save &As... - Opslaan &als... + Save &As... + Opslaan &als... - Save the active document under a new file name - Sla het actieve document onder een nieuwe bestandsnaam op + Save the active document under a new file name + Sla het actieve document onder een nieuwe bestandsnaam op - - + + StdCmdSceneInspector - Tools - Gereedschap + Tools + Gereedschap - Scene inspector... - Scène inspecteur ... + Scene inspector... + Scène inspecteur ... - Scene inspector - Scène inspecteur + Scene inspector + Scène inspecteur - - + + StdCmdSelectAll - Edit - Bewerken + Edit + Bewerken - Select &All - &Alles selecteren + Select &All + &Alles selecteren - Select all - Alles selecteren + Select all + Alles selecteren - - + + StdCmdSetAppearance - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Appearance... - Uiterlijk... + Appearance... + Uiterlijk... - Sets the display properties of the selected object - Stelt de weergave-eigenschappen in van het geselecteerde object + Sets the display properties of the selected object + Stelt de weergave-eigenschappen in van het geselecteerde object - - + + StdCmdShowObjects - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Show all objects - Toon alle objecten + Show all objects + Toon alle objecten - Show all objects in the document - Toon alle objecten in het document + Show all objects in the document + Toon alle objecten in het document - - + + StdCmdShowSelection - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Show selection - Toon selectie + Show selection + Toon selectie - Show all selected objects - Toon alle geselecteerde objecten + Show all selected objects + Toon alle geselecteerde objecten - - + + StdCmdStatusBar - View - Aanzicht + View + Aanzicht - Status bar - statusregel + Status bar + statusregel - Toggles the status bar - Schakelt de statusregel aan/uit + Toggles the status bar + Schakelt de statusregel aan/uit - - + + StdCmdTextureMapping - Tools - Gereedschap + Tools + Gereedschap - Texture mapping... - Texture mapping... + Texture mapping... + Texture mapping... - Texture mapping - Textuurafbeelden + Texture mapping + Textuurafbeelden - - + + StdCmdTileWindows - Window - Venster + Window + Venster - &Tile - &Naast elkaar + &Tile + &Naast elkaar - Tile the windows - Vensters naast elkaar schikken + Tile the windows + Vensters naast elkaar schikken - - + + StdCmdToggleBreakpoint - Macro - Macro + Macro + Macro - Toggle breakpoint - Toggle breakpoint + Toggle breakpoint + Toggle breakpoint - - + + StdCmdToggleClipPlane - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Clipping plane - Snijvlak + Clipping plane + Snijvlak - Toggles clipping plane for active view - Snijvlak voor actieve aanzicht in/uitschakelen + Toggles clipping plane for active view + Snijvlak voor actieve aanzicht in/uitschakelen - - + + StdCmdToggleNavigation - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Toggle navigation/Edit mode - Toggle navigation/Edit mode + Toggle navigation/Edit mode + Toggle navigation/Edit mode - Toggle between navigation and edit mode - Wisselen tussen navigatie- en editmode + Toggle between navigation and edit mode + Wisselen tussen navigatie- en editmode - - + + StdCmdToggleObjects - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Toggle all objects - Alle objecten [de]selecteren + Toggle all objects + Alle objecten [de]selecteren - Toggles visibility of all objects in the active document - Wisselt zichtbaarheid van alle objecten in het actieve document + Toggles visibility of all objects in the active document + Wisselt zichtbaarheid van alle objecten in het actieve document - - + + StdCmdToggleSelectability - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Toggle selectability - Toggle selectability + Toggle selectability + Toggle selectability - Toggles the property of the objects to get selected in the 3D-View - Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View - - + + StdCmdToggleVisibility - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Toggle visibility - Wissel zichtbaarheid + Toggle visibility + Wissel zichtbaarheid - Toggles visibility - Wisselt zichtbaarheid + Toggles visibility + Wisselt zichtbaarheid - - + + StdCmdToolBarMenu - View - Aanzicht + View + Aanzicht - Tool&bars - Werk&balk + Tool&bars + Werk&balk - Toggles this window - Schakelt dit venster + Toggles this window + Schakelt dit venster - - + + StdCmdTransform - Edit - Bewerken + Edit + Bewerken - Transform... - Transform... + Transform... + Transform... - Transform the geometry of selected objects - Transform the geometry of selected objects + Transform the geometry of selected objects + Transform the geometry of selected objects - - + + StdCmdTreeSelection - View - Aanzicht + View + Aanzicht - Go to selection - Ga naar selectie + Go to selection + Ga naar selectie - Scroll to first selected item - Scroll naar het eerste geselecteerde item + Scroll to first selected item + Scroll naar het eerste geselecteerde item - - + + StdCmdUndo - Edit - Bewerken + Edit + Bewerken - &Undo - &Ongedaan maken + &Undo + &Ongedaan maken - Undo exactly one action - Precies één actie ongedaan maken + Undo exactly one action + Precies één actie ongedaan maken - - + + StdCmdUserInterface - View - Aanzicht + View + Aanzicht - Dock views - Dok aanzichten + Dock views + Dok aanzichten - Dock all top-level views - Dok alle hoogste niveau aanzichten + Dock all top-level views + Dok alle hoogste niveau aanzichten - - + + StdCmdViewAxo - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Axometric - Axometric + Axometric + Axometric - Set to axometric view - Set to axometric view + Set to axometric view + Set to axometric view - - + + StdCmdViewBottom - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Bottom - Onderkant + Bottom + Onderkant - Set to bottom view - Ingesteld op onderaanzicht + Set to bottom view + Ingesteld op onderaanzicht - - + + StdCmdViewCreate - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Create new view - Nieuw aanzicht aanmaken + Create new view + Nieuw aanzicht aanmaken - Creates a new view window for the active document - Creëert een nieuw aanzichtvenster voor het actieve document + Creates a new view window for the active document + Creëert een nieuw aanzichtvenster voor het actieve document - - + + StdCmdViewExample1 - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Inventor example #1 - Inventor voorbeeld #1 + Inventor example #1 + Inventor voorbeeld #1 - Shows a 3D texture with manipulator - Shows a 3D texture with manipulator + Shows a 3D texture with manipulator + Shows a 3D texture with manipulator - - + + StdCmdViewExample2 - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Inventor example #2 - Inventor bijvoorbeeld #2 + Inventor example #2 + Inventor bijvoorbeeld #2 - Shows spheres and drag-lights - Shows spheres and drag-lights + Shows spheres and drag-lights + Shows spheres and drag-lights - - + + StdCmdViewExample3 - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Inventor example #3 - Inventor bijvoorbeeld #3 + Inventor example #3 + Inventor bijvoorbeeld #3 - Shows a animated texture - Shows a animated texture + Shows a animated texture + Shows a animated texture - - + + StdCmdViewFitAll - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Fit all - Passend + Fit all + Passend - Fits the whole content on the screen - Zorgt dat de volledige inhoud op het scherm past + Fits the whole content on the screen + Zorgt dat de volledige inhoud op het scherm past - - + + StdCmdViewFitSelection - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Fit selection - Selectie passend + Fit selection + Selectie passend - Fits the selected content on the screen - Zorgt dat de geselecteerde inhoud op het scherm past + Fits the selected content on the screen + Zorgt dat de geselecteerde inhoud op het scherm past - - + + StdCmdViewFront - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Front - Voorkant + Front + Voorkant - Set to front view - Ingesteld op vooraanzicht + Set to front view + Ingesteld op vooraanzicht - - + + StdCmdViewIvIssueCamPos - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Issue camera position - Issue camera position + Issue camera position + Issue camera position - Issue the camera position to the console and to a macro, to easily recall this position - Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Stereo Interleaved Columns - Stereo Interleaved Columns + Stereo Interleaved Columns + Stereo Interleaved Columns - Switch stereo viewing to Interleaved Columns - Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Stereo Interleaved Rows - Stereo Interleaved Rows + Stereo Interleaved Rows + Stereo Interleaved Rows - Switch stereo viewing to Interleaved Rows - Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows - - + + StdCmdViewIvStereoOff - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Stereo Off - Stereo Uit + Stereo Off + Stereo Uit - Switch stereo viewing off - Schakel stereo-weergave uit + Switch stereo viewing off + Schakel stereo-weergave uit - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Stereo red/green - Stereo rood/groen + Stereo red/green + Stereo rood/groen - Switch stereo viewing to red/green - Stereo weergave overschakelen naar rood/groen + Switch stereo viewing to red/green + Stereo weergave overschakelen naar rood/groen - - + + StdCmdViewLeft - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Left - Links + Left + Links - Set to left view - Linker-aanzicht instellen + Set to left view + Linker-aanzicht instellen - - + + StdCmdViewRear - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Rear - Achter + Rear + Achter - Set to rear view - Achter-aanzicht instellen + Set to rear view + Achter-aanzicht instellen - - + + StdCmdViewRight - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Right - Rechts + Right + Rechts - Set to right view - Rechter-aanzicht instellen + Set to right view + Rechter-aanzicht instellen - - + + + StdCmdViewRotateLeft + + Standard-View + Standaard-aanzicht + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standaard-aanzicht + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Top - Boven + Top + Boven - Set to top view - Boven-aanzicht instellen + Set to top view + Boven-aanzicht instellen - - + + StdCmdWhatsThis - Help - Help + Help + Help - &What's This? - &Wat is dit? + &What's This? + &Wat is dit? - What's This - Wat is dit + What's This + Wat is dit - - + + StdCmdWindows - Window - Venster + Window + Venster - &Windows... - &Vensters... + &Windows... + &Vensters... - Windows list - Windows list + Windows list + Windows list - - + + StdCmdWindowsMenu - Window - Venster + Window + Venster - Activates this window - Activeert dit venster + Activates this window + Activeert dit venster - - + + StdCmdWorkbench - View - Aanzicht + View + Aanzicht - Workbench - Werkbank + Workbench + Werkbank - Switch between workbenches - Switch between workbenches + Switch between workbenches + Switch between workbenches - - + + StdOrthographicCamera - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Orthographic view - Orthogonale projectie + Orthographic view + Orthogonale projectie - Switches to orthographic view mode - Schakelt naar orthogonale projectie + Switches to orthographic view mode + Schakelt naar orthogonale projectie - - + + StdPerspectiveCamera - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Perspective view - Perspectivische projectie + Perspective view + Perspectivische projectie - Switches to perspective view mode - Schakelt naar perspectivische projectie + Switches to perspective view mode + Schakelt naar perspectivische projectie - - + + StdViewBoxZoom - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Box zoom - Vensterzoom + Box zoom + Vensterzoom - - + + StdViewDockUndockFullscreen - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Document window - Documentvenster + Document window + Documentvenster - Display the active view either in fullscreen, in undocked or docked mode - Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode - - + + StdViewScreenShot - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Save picture... - Afbeelding opslaan... + Save picture... + Afbeelding opslaan... - Creates a screenshot of the active view - Hiermee maakt u een screenshot van het actieve aanzicht + Creates a screenshot of the active view + Hiermee maakt u een screenshot van het actieve aanzicht - - + + StdViewZoomIn - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Zoom In - Inzoomen + Zoom In + Inzoomen - - + + StdViewZoomOut - Standard-View - Standaard-aanzicht + Standard-View + Standaard-aanzicht - Zoom Out - Uitzoomen + Zoom Out + Uitzoomen - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Bestand + &File + &Bestand - &Edit - &Bewerken + &Edit + &Bewerken - Standard views - Standaard aanzichten + Standard views + Standaard aanzichten - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Zichtbaarheid + Visibility + Zichtbaarheid - &View - &Aanzicht + &View + &Aanzicht - &Tools - &Gereedschap + &Tools + &Gereedschap - &Macro - &Macro + &Macro + &Macro - &Windows - &Vensters + &Windows + &Vensters - &On-line help - &Online-help + &On-line help + &Online-help - &Help - &Help + &Help + &Help - File - Bestand + File + Bestand - Macro - Macro + Macro + Macro - View - Aanzicht + View + Aanzicht - Special Ops - Speciale functies + Special Ops + Speciale functies - - + + testClass - test - Test + test + Test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> <span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"> <span style=" font-size:12pt;">Gemaakt voor Qt 4.3.x</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"> www.ii-system.com </p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> <span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"> <span style=" font-size:12pt;">Gemaakt voor Qt 4.3.x</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"> www.ii-system.com </p></body></html> - Choose the style of the Task Panel - Kies de stijl van het taken-panel + Choose the style of the Task Panel + Kies de stijl van het taken-panel - Default - Standaard + Default + Standaard - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_no.ts b/src/Gui/Language/FreeCAD_no.ts index 56087e8fa..9d42c2a4e 100644 --- a/src/Gui/Language/FreeCAD_no.ts +++ b/src/Gui/Language/FreeCAD_no.ts @@ -1,5486 +1,5904 @@ - - + + Angle - Form - Skjema + Form + Skjema - A: - A: + A: + A: - B: - B: + B: + B: - C: - B: + C: + B: - Angle Snap - Vinkelmagnet + Angle Snap + Vinkelmagnet - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - ingen + none + ingen - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Legg til + + + Remove + Fjern + + + Move up + Flytt opp + + + Move down + Flytt ned + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Trykk venstre museknapp + Press left mouse button + Trykk venstre museknapp - Press SHIFT and middle mouse button - Press SHIFT and middle mouse button + Press SHIFT and middle mouse button + Press SHIFT and middle mouse button - Press middle mouse button - Trykk på midtre museknapp + Press middle mouse button + Trykk på midtre museknapp - Scroll middle mouse button - Rull musehjul + Scroll middle mouse button + Rull musehjul - - + + Gui::CADNavigationStyle - Press left mouse button - Trykk venstre museknapp + Press left mouse button + Trykk venstre museknapp - Press middle mouse button - Trykk på midtre museknapp + Press middle mouse button + Trykk på midtre museknapp - Press left and middle mouse button - Trykk på venstre og midtre museknapp + Press left and middle mouse button + Trykk på venstre og midtre museknapp - Scroll middle mouse button - Rull musehjul + Scroll middle mouse button + Rull musehjul - - + + Gui::Command - Standard - Standard + Standard + Standard - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + Gui::ControlSingleton - Task panel - Oppgavepanel + Task panel + Oppgavepanel - - + + Gui::Dialog::AboutApplication - About - Om + About + Om - Revision number - Revisjonsnummer + Revision number + Revisjonsnummer - Version - Versjon + Version + Versjon - OK - OK + OK + OK - - + + - Release date - Utgivelsesdato + Release date + Utgivelsesdato - Platform - Platform + Platform + Platform - License... - License... + License... + License... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Button %1 + Button %1 + Button %1 - Out Of Range - Out Of Range + Out Of Range + Out Of Range - - + + Gui::Dialog::CommandModel - Commands - Kommandoer + Commands + Kommandoer - - + + Gui::Dialog::DemoMode - View Turntable - Vis dreieskive + View Turntable + Vis dreieskive - Speed - Hastighet + Speed + Hastighet - Maximum - Maksimum + Maximum + Maksimum - Minimum - Minimum + Minimum + Minimum - Fullscreen - Fullskjerm + Fullscreen + Fullskjerm - Enable timer - Aktiver tidtaker + Enable timer + Aktiver tidtaker - s - s + s + s - Angle - Vinkel + Angle + Vinkel + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Spill av - -90° - -90° + Stop + Stopp - Play - Spill av + Close + Lukk - - Stop - Stopp - - - Close - Lukk - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Velg vindu + Choose Window + Velg vindu - &Activate - &Aktiver + &Activate + &Aktiver - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Vinduer + Windows + Vinduer - - + + Gui::Dialog::DlgAuthorization - Authorization - Autorisasjon + Authorization + Autorisasjon - &OK - &OK + &OK + &OK - &Cancel - &Avbryt + &Cancel + &Avbryt - Password: - Passord: + Password: + Passord: - User name: - Brukernavn: + User name: + Brukernavn: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Velg ikon + Choose Icon + Velg ikon - OK - OK + OK + OK - Cancel - Avbryt + Cancel + Avbryt - Add icons... - Add icons... + Add icons... + Add icons... - - + + Gui::Dialog::DlgCustomActions - Macros - Makroer + Macros + Makroer - Setup Custom Macros - Sett opp egendefinerte makroer + Setup Custom Macros + Sett opp egendefinerte makroer - Macro: - Makro: + Macro: + Makro: - ... - ... + ... + ... - Pixmap - Pikseltilordning + Pixmap + Pikseltilordning - Accelerator: - Akselerator: + Accelerator: + Akselerator: - What's this: - Hva er dette: + What's this: + Hva er dette: - Status text: - Statustekst: + Status text: + Statustekst: - Tool tip: - Verktøytips: + Tool tip: + Verktøytips: - Menu text: - Menytekst: + Menu text: + Menytekst: - Add - Legg til + Add + Legg til - Remove - Fjern + Remove + Fjern - Replace - Erstatt + Replace + Erstatt - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ikoner + Icons + Ikoner - Macros - Makroer + Macros + Makroer - No macro - Ingen makro + No macro + Ingen makro - No macros found. - Ingen makroer funnet. + No macros found. + Ingen makroer funnet. - Macro not found - Makro ikke funnet + Macro not found + Makro ikke funnet - Sorry, couldn't find macro file '%1'. - Beklager, kunne ikke finne makrofil '%1'. + Sorry, couldn't find macro file '%1'. + Beklager, kunne ikke finne makrofil '%1'. - Empty macro - Tom makro + Empty macro + Tom makro - Please specify the macro first. - Spesifiser makro først. + Please specify the macro first. + Spesifiser makro først. - Empty text - Tom tekst + Empty text + Tom tekst - Please specify the menu text first. - Vennligst oppgi menytekst først. + Please specify the menu text first. + Vennligst oppgi menytekst først. - No item selected - Ingen element er valgt + No item selected + Ingen element er valgt - Please select a macro item first. - Vennligst velg et makroelement først. + Please select a macro item first. + Vennligst velg et makroelement først. - - + + Gui::Dialog::DlgCustomCommands - Commands - Kommandoer + Commands + Kommandoer - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategori + Category + Kategori - Icon - Ikon + Icon + Ikon - Command - Kommando + Command + Kommando - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Tastatur + Keyboard + Tastatur - Description: - Beskrivelse: + Description: + Beskrivelse: - &Category: - &Kategori: + &Category: + &Kategori: - C&ommands: - K&ommandoer: + C&ommands: + K&ommandoer: - Current shortcut: - Gjeldende snarvei: + Current shortcut: + Gjeldende snarvei: - Press &new shortcut: - Trykk &ny snarvei: + Press &new shortcut: + Trykk &ny snarvei: - Currently assigned to: - For øyeblikket tilordnet: + Currently assigned to: + For øyeblikket tilordnet: - &Assign - &Tilordne + &Assign + &Tilordne - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Tilbakestille + &Reset + &Tilbakestille - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Tilbake&still alle + Re&set All + Tilbake&still alle - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ikon + Icon + Ikon - Command - Kommando + Command + Kommando - none - ingen + none + ingen - Multiple defined shortcut - Flerdefinert snarvei + Multiple defined shortcut + Flerdefinert snarvei - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Snarvei '%1' er definert mer enn én gang. Dette kan føre til uventet oppførsel. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Snarvei '%1' er definert mer enn én gang. Dette kan føre til uventet oppførsel. - Already defined shortcut - Allerede definert snarvei + Already defined shortcut + Allerede definert snarvei - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Snarveien '%1' er allerede tilordnet '%2'. Definer en annen snarvei. + Snarveien '%1' er allerede tilordnet '%2'. Definer en annen snarvei. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Verktøykasselinjer + Toolbox bars + Verktøykasselinjer - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Verktøylinjer + Toolbars + Verktøylinjer - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Merk:</span> Forandringene blir aktive neste gang du laster riktig arbeidsbenk</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Merk:</span> Forandringene blir aktive neste gang du laster riktig arbeidsbenk</p></body></html> - Move right - Flytt til høyre + Move right + Flytt til høyre - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Flytt det valgte elementet ett nivå ned.</b> <p> Dette vil også endre nivået på overordnet element. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Flytt det valgte elementet ett nivå ned.</b> <p> Dette vil også endre nivået på overordnet element. </p> - Move left - Flytt til venstre + Move left + Flytt til venstre - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Flytt det valgte elementet ett nivå opp.</b> <p> Dette vil også endre nivået på overordnet element. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Flytt det valgte elementet ett nivå opp.</b> <p> Dette vil også endre nivået på overordnet element. </p> - Move down - Flytt ned + Move down + Flytt ned - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytt det valgte elementet ned.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytt det valgte elementet ned.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> - Move up - Flytt opp + Move up + Flytt opp - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytt det valgte elementet opp.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytt det valgte elementet opp.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> - New... - Ny... + New... + Ny... - Rename... - Omdøp... + Rename... + Omdøp... - Delete - Slett + Delete + Slett - Icon - Ikon + Icon + Ikon - Command - Kommando + Command + Kommando - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Ny verktøylinje + New toolbar + Ny verktøylinje - Toolbar name: - Verktøylinjenavn: + Toolbar name: + Verktøylinjenavn: - Duplicated name - Duplisert navn + Duplicated name + Duplisert navn - The toolbar name '%1' is already used - Verktøylinjenavn '%1' er allerede i bruk + The toolbar name '%1' is already used + Verktøylinjenavn '%1' er allerede i bruk - Rename toolbar - Omdøp verktøylinje + Rename toolbar + Omdøp verktøylinje - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Tilpass + Customize + Tilpass - &Help - &Hjelp + &Help + &Hjelp - &Close - &Lukk + &Close + &Lukk - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Buttons + Buttons + Buttons - Clear - Tøm + Clear + Tøm - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Skjermegenskaper + Display properties + Skjermegenskaper - Display - Skjerm + Display + Skjerm - Transparency: - Gjennomsiktighet: + Transparency: + Gjennomsiktighet: - Line width: - Linjebredde: + Line width: + Linjebredde: - Point size: - Punktstørrelse: + Point size: + Punktstørrelse: - Material - Materiale + Material + Materiale - ... - ... + ... + ... - Close - Lukk + Close + Lukk - Viewing mode - Visningsmodus + Viewing mode + Visningsmodus - Display mode: - Visningsmodus: + Display mode: + Visningsmodus: - Plot mode: - Plottmodus: + Plot mode: + Plottmodus: - - + + - Line transparency: - Gjennomsiktighet for linje: + Line transparency: + Gjennomsiktighet for linje: - Line color: - Linjefarge: + Line color: + Linjefarge: - Shape color: - Figurfarge: + Shape color: + Figurfarge: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Redigeringsprogram + Editor + Redigeringsprogram - Options - Alternativer + Options + Alternativer - Enable line numbers - Aktiver linjenumre + Enable line numbers + Aktiver linjenumre - Enable folding - Aktiver folding + Enable folding + Aktiver folding - Indentation - Innrykk + Indentation + Innrykk - Insert spaces - Sett inn mellomrom + Insert spaces + Sett inn mellomrom - Tab size: - Tabulatorstørrelse: + Tab size: + Tabulatorstørrelse: - Indent size: - Innrykkstørrelse: + Indent size: + Innrykkstørrelse: - Keep tabs - Behold tabulatorer + Keep tabs + Behold tabulatorer - Display Items - Vis elementer + Display Items + Vis elementer - Family: - Familie: + Family: + Familie: - Size: - Størrelse: + Size: + Størrelse: - Preview: - Forhåndsvisning: + Preview: + Forhåndsvisning: - - + + - - + + Gui::Dialog::DlgGeneral - General - Generelle + General + Generelle - Start up - Oppstart + Start up + Oppstart - Enable splash screen at start up - Aktiver velkomstbilde ved oppstart + Enable splash screen at start up + Aktiver velkomstbilde ved oppstart - Switch to tab of report window: - Bytt til fane for rapportvindu: + Switch to tab of report window: + Bytt til fane for rapportvindu: - Auto load module after start up: - Autostart modul etter oppstart: + Auto load module after start up: + Autostart modul etter oppstart: - Language - Språk + Language + Språk - Change language: - Endre språk: + Change language: + Endre språk: - Main window - Hovedvindu + Main window + Hovedvindu - Size of recent file list - Størrelse på liste for nylig brukte filer + Size of recent file list + Størrelse på liste for nylig brukte filer - Window style: - Vindustil: + Window style: + Vindustil: - Size of toolbar icons: - Size of toolbar icons: + Size of toolbar icons: + Size of toolbar icons: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Default (%1 x %1) + Default (%1 x %1) + Default (%1 x %1) - Small (%1 x %1) - Small (%1 x %1) + Small (%1 x %1) + Small (%1 x %1) - Large (%1 x %1) - Large (%1 x %1) + Large (%1 x %1) + Large (%1 x %1) - Extra large (%1 x %1) - Extra large (%1 x %1) + Extra large (%1 x %1) + Extra large (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Inndata + Input + Inndata - OK - OK + OK + OK - Cancel - Avbryt + Cancel + Avbryt - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Sceneinspektør + Scene Inspector + Sceneinspektør - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Kjør makro + Execute macro + Kjør makro - Macro name: - Makronavn: + Macro name: + Makronavn: - Macro destination: - Makrodestinasjon: + Macro destination: + Makrodestinasjon: - Execute - Kjør + Execute + Kjør - Close - Lukk + Close + Lukk - Create - Lag + Create + Lag - Delete - Slett + Delete + Slett - Edit - Rediger + Edit + Rediger - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makroer + Macros + Makroer - Macro file - Makrofil + Macro file + Makrofil - Enter a file name, please: - Vennligst skriv inn et filnavn: + Enter a file name, please: + Vennligst skriv inn et filnavn: - Existing file - Eksisterende fil + Existing file + Eksisterende fil - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Denne filen finnes allerede. - Delete macro - Slett makro + Delete macro + Slett makro - Do you really want to delete the macro '%1'? - Ønsker du virkelig å slette makroen '%1'? + Do you really want to delete the macro '%1'? + Ønsker du virkelig å slette makroen '%1'? - Cannot create file - Kan ikke lage fil + Cannot create file + Kan ikke lage fil - Creation of file '%1' failed. - Oppretting av filen '%1' mislyktes. + Creation of file '%1' failed. + Oppretting av filen '%1' mislyktes. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Macroopptak + Macro recording + Macroopptak - Macro name: - Makronavn: + Macro name: + Makronavn: - Stop - Stopp + Stop + Stopp - Cancel - Avbryt + Cancel + Avbryt - Macro path: - Makrobane: + Macro path: + Makrobane: - ... - ... + ... + ... - Record - Spill inn + Record + Spill inn - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Makroopptaker + Macro recorder + Makroopptaker - Specify first a place to save. - Angi først et sted å lagre. + Specify first a place to save. + Angi først et sted å lagre. - Existing macro - Eksisterende makro + Existing macro + Eksisterende makro - The macro '%1' already exists. Do you want to overwrite? - Makroen '%1' finnes allerede. Vil du overskrive? + The macro '%1' already exists. Do you want to overwrite? + Makroen '%1' finnes allerede. Vil du overskrive? - The macro directory doesn't exist. Please, choose another one. - Makromappen finnes ikke. Vennligst, velg en annen. + The macro directory doesn't exist. Please, choose another one. + Makromappen finnes ikke. Vennligst, velg en annen. - Choose macro directory - Velg makromappe + Choose macro directory + Velg makromappe - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Materialegenskaper + Material properties + Materialegenskaper - &Close - &Lukk + &Close + &Lukk - Alt+C - Alt+C + Alt+C + Alt+C - Material - Materiale + Material + Materiale - Diffuse color: - Diffusér fargen: + Diffuse color: + Diffusér fargen: - Specular color: - Gjenskinnfarge: + Specular color: + Gjenskinnfarge: - Shininess: - Blankhet: + Shininess: + Blankhet: - % - % + % + % - Ambient color: - Omgivelsesfarge: + Ambient color: + Omgivelsesfarge: - - + + - Emissive color: - Emissiv farge: + Emissive color: + Emissiv farge: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Internetthjelp + On-line help + Internetthjelp - Help viewer - Hjelp visning + Help viewer + Hjelp visning - Location of start page - Plassering av startsiden + Location of start page + Plassering av startsiden - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML filer (*.html *.htm) + HTML files (*.html *.htm) + HTML filer (*.html *.htm) - Access denied - Ingen tilgang + Access denied + Ingen tilgang - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Ingen tilgang til '%1' + Ingen tilgang til '%1' Vennligst angi en annen mappe. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Parameterredigering + Parameter Editor + Parameterredigering - Save to disk - Lagre til disk + Save to disk + Lagre til disk - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Lukk + &Close + &Lukk - - + + Gui::Dialog::DlgParameterImp - Group - Gruppe + Group + Gruppe - Name - Navn + Name + Navn - Type - Type + Type + Type - Value - Verdi + Value + Verdi - User parameter - Brukerparameter + User parameter + Brukerparameter - Invalid input - Ugyldig inndata + Invalid input + Ugyldig inndata - Invalid key name '%1' - Ugyldig nøkkelnavn '%1' + Invalid key name '%1' + Ugyldig nøkkelnavn '%1' - System parameter - Systemparameter + System parameter + Systemparameter - - + + Gui::Dialog::DlgPreferences - Preferences - Preferanser + Preferences + Preferanser - &Help - &Hjelp + &Help + &Hjelp - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &OK + &OK + &OK - &Apply - &Bruk + &Apply + &Bruk - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Feil parameter + Wrong parameter + Feil parameter - - + + Gui::Dialog::DlgProjectInformation - Project information - Prosjektinformasjon + Project information + Prosjektinformasjon - Information - Informasjon + Information + Informasjon - &Name: - &Navn: + &Name: + &Navn: - Commen&t: - Kommen&tar: + Commen&t: + Kommen&tar: - Path: - Bane: + Path: + Bane: - &Last modified by: - &Sist endret av: + &Last modified by: + &Sist endret av: - Created &by: - Laget &av: + Created &by: + Laget &av: - Com&pany: - Fir&ma: + Com&pany: + Fir&ma: - Last &modification date: - Siste &modifikasjonsdato: + Last &modification date: + Siste &modifikasjonsdato: - Creation &date: - Opprettelse&sdato: + Creation &date: + Opprettelse&sdato: - &OK - &OK + &OK + &OK - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project utility + Project utility + Project utility - Extract project - Extract project + Extract project + Extract project - Source - Source + Source + Source - Project file (*.fcstd) - Project file (*.fcstd) + Project file (*.fcstd) + Project file (*.fcstd) - Destination - Destination + Destination + Destination - Extract - Extract + Extract + Extract - Create project - Create project + Create project + Create project - Document.xml - Document.xml + Document.xml + Document.xml - Create - Lag + Create + Lag - Load project file after creation - Load project file after creation + Load project file after creation + Load project file after creation - Empty source - Empty source + Empty source + Empty source - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Empty destination + Empty destination + Empty destination - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - Utdatavindu + Output window + Utdatavindu - Output - Utdata + Output + Utdata - Record log messages - Registrer loggmeldinger + Record log messages + Registrer loggmeldinger - Record warnings - Registrer advarsler + Record warnings + Registrer advarsler - Record error messages - Registrer feilmeldinger + Record error messages + Registrer feilmeldinger - Colors - Farger + Colors + Farger - Normal messages: - Vanlige meldinger: + Normal messages: + Vanlige meldinger: - Log messages: - Loggmeldinger: + Log messages: + Loggmeldinger: - Warnings: - Advarsler: + Warnings: + Advarsler: - Errors: - Feil: + Errors: + Feil: - - + + - Redirect internal Python errors to report view - Omadressere interne Python-feil til rapportvisning + Redirect internal Python errors to report view + Omadressere interne Python-feil til rapportvisning - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - Kjører eksternt program + Running external program + Kjører eksternt program - TextLabel - Merkelapp + TextLabel + Merkelapp - Advanced >> - Avansert >> + Advanced >> + Avansert >> - ... - ... + ... + ... - Accept changes - Godta endringer + Accept changes + Godta endringer - Discard changes - Forkast endringer + Discard changes + Forkast endringer - Abort program - Avbryt program + Abort program + Avbryt program - Help - Hjelp + Help + Hjelp - Select a file - Velg en fil + Select a file + Velg en fil - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D-visning + 3D View + 3D-visning - 3D View settings - Innstillinger for 3D-visning + 3D View settings + Innstillinger for 3D-visning - Show coordinate system in the corner - Vis koordinatsystem i hjørnet + Show coordinate system in the corner + Vis koordinatsystem i hjørnet - Show counter of frames per second - Vis teller for bilder per sekund + Show counter of frames per second + Vis teller for bilder per sekund - Enable animation - Aktiver animasjon + Enable animation + Aktiver animasjon - Enable anti-aliasing (slower) - Aktiver kantutjevning (tregere) + Enable anti-aliasing (slower) + Aktiver kantutjevning (tregere) - Eye to eye distance for stereo modes: - Øyeavstand for stereomoduser: + Eye to eye distance for stereo modes: + Øyeavstand for stereomoduser: - Camera type - Kameratype + Camera type + Kameratype - Orthographic rendering - Ortografisk presentasjonsgjengivelse + Orthographic rendering + Ortografisk presentasjonsgjengivelse - Perspective rendering - Perspektiv presentasjonsgjengivelse + Perspective rendering + Perspektiv presentasjonsgjengivelse - - + + - 3D Navigation - 3D-navigasjon + 3D Navigation + 3D-navigasjon - Mouse... - Mus... + Mouse... + Mus... - Intensity of backlight - Intensitet på bakgrunnsbelysning + Intensity of backlight + Intensitet på bakgrunnsbelysning - Enable backlight color - Aktiver bakgrunnsbelysningsfarge + Enable backlight color + Aktiver bakgrunnsbelysningsfarge - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1navigasjon + %1 navigation + %1navigasjon - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Fargemodell + Color model + Fargemodell - &Gradient: - &Overgang: + &Gradient: + &Overgang: - red-yellow-green-cyan-blue - rød-gul-grønn-cyan-blå + red-yellow-green-cyan-blue + rød-gul-grønn-cyan-blå - blue-cyan-green-yellow-red - blå-cyan-grønn-gul-rød + blue-cyan-green-yellow-red + blå-cyan-grønn-gul-rød - white-black - hvit-svart + white-black + hvit-svart - black-white - svart-hvit + black-white + svart-hvit - Visibility - Synlighet + Visibility + Synlighet - Out g&rayed - Ut g&rånet + Out g&rayed + Ut g&rånet - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Ut &usynlig + Out &invisible + Ut &usynlig - Alt+I - Alt+I + Alt+I + Alt+I - Style - Stil + Style + Stil - &Zero - &Null + &Zero + &Null - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Flyt + &Flow + &Flyt - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Avbryt + &Cancel + &Avbryt - Parameter range - Parameterrekkevidde + Parameter range + Parameterrekkevidde - Mi&nimum: - Mi&nimum: + Mi&nimum: + Mi&nimum: - Ma&ximum: - Ma&ksimum: + Ma&ximum: + Ma&ksimum: - &Labels: - &Etiketter: + &Labels: + &Etiketter: - &Decimals: - &Desimaler: + &Decimals: + &Desimaler: - - + + - Color-gradient settings - Fargeovergangsinnstillinger + Color-gradient settings + Fargeovergangsinnstillinger - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Feil parameter + Wrong parameter + Feil parameter - The maximum value must be higher than the minimum value. - Maksimumsverdien må være høyere enn minimumsverdien. + The maximum value must be higher than the minimum value. + Maksimumsverdien må være høyere enn minimumsverdien. - - + + Gui::Dialog::DlgSettingsDocument - Document - Dokument + Document + Dokument - General - Generelle + General + Generelle - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Dokumentetlagring komprimeringsnivå + Dokumentetlagring komprimeringsnivå (0=ingen, 9=høyest, 3=standard) - Create new document at start up - Lag nytt dokument ved oppstart + Create new document at start up + Lag nytt dokument ved oppstart - Storage - Lagring + Storage + Lagring - Saving transactions (Auto-save) - Autolagrer forandringer underveis + Saving transactions (Auto-save) + Autolagrer forandringer underveis - Discard saved transaction after saving document - Forkast lagrede forandringer etter du har lagret dokumentet manuelt + Discard saved transaction after saving document + Forkast lagrede forandringer etter du har lagret dokumentet manuelt - Save thumbnail into project file when saving document - Lagre miniatyrbilde til prosjektfil når du lagrer dokument + Save thumbnail into project file when saving document + Lagre miniatyrbilde til prosjektfil når du lagrer dokument - Create up to backup files when resaving document - Lag opp til sikkerhetskopifiler når dokumentet lagres på nytt + Create up to backup files when resaving document + Lag opp til sikkerhetskopifiler når dokumentet lagres på nytt - Document objects - Dokumentobjekter + Document objects + Dokumentobjekter - Allow duplicate object labels in one document - Tillat dupliserte objektetiketter i ett dokument + Allow duplicate object labels in one document + Tillat dupliserte objektetiketter i ett dokument - Maximum Undo/Redo steps - Maximum Undo/Redo steps + Maximum Undo/Redo steps + Maximum Undo/Redo steps - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Tekst + Text + Tekst - Bookmark - Bokmerke + Bookmark + Bokmerke - Breakpoint - Brytingspunkt + Breakpoint + Brytingspunkt - Keyword - Nøkkelord + Keyword + Nøkkelord - Comment - Kommentar + Comment + Kommentar - Block comment - Blokkkommentar + Block comment + Blokkkommentar - Number - Nummer + Number + Nummer - String - Streng + String + Streng - Character - Tegn + Character + Tegn - Class name - Klassenavn + Class name + Klassenavn - Define name - Definer navn + Define name + Definer navn - Operator - Operatør + Operator + Operatør - Python output - Python-utdata + Python output + Python-utdata - Python error - Python-feil + Python error + Python-feil - Items - Elementer + Items + Elementer - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Bildeinnstillinger + Image settings + Bildeinnstillinger - Image properties - Bildeegenskaper + Image properties + Bildeegenskaper - Back&ground: - Bak&grunn: + Back&ground: + Bak&grunn: - Current - Gjeldende + Current + Gjeldende - White - Hvit + White + Hvit - Black - Svart + Black + Svart - Transparent - Gjennomsiktig + Transparent + Gjennomsiktig - Image dimensions - Bildedimensjoner + Image dimensions + Bildedimensjoner - Pixel - Piksel + Pixel + Piksel - &Width: - &Bredde: + &Width: + &Bredde: - Current screen - Gjeldende skjermbilde + Current screen + Gjeldende skjermbilde - Icon 32 x 32 - Ikon 32 x 32 + Icon 32 x 32 + Ikon 32 x 32 - Icon 64 x 64 - Ikon 64 x 64 + Icon 64 x 64 + Ikon 64 x 64 - Icon 128 x 128 - Ikon 128 x 128 + Icon 128 x 128 + Ikon 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standard størrelser: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Høyde: - Standard sizes: - Standard størrelser: + Aspect ratio: + Bildeformat: - &Height: - &Høyde: + &Screen + &Skjermbilde - Aspect ratio: - Bildeformat: + Alt+S + Alt+S - &Screen - &Skjermbilde + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Bildekommentar - Alt+1 - Alt+1 + Insert MIBA + Sett inn MIBA - Image comment - Bildekommentar + Insert comment + Sett inn kommentar - - Insert MIBA - Sett inn MIBA - - - Insert comment - Sett inn kommentar - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Makro + Macro + Makro - Macro recording settings - Innstillinger for makroopptak + Macro recording settings + Innstillinger for makroopptak - Logging Commands - Logging kommandoer + Logging Commands + Logging kommandoer - Show script commands in python console - Vis skriptkommandoer i python konsoll + Show script commands in python console + Vis skriptkommandoer i python konsoll - Log all commands issued by menus to file: - Logg alle kommandoer utstedt av menyer til fil: + Log all commands issued by menus to file: + Logg alle kommandoer utstedt av menyer til fil: - FullScript.FCScript - FullSkript.FCSkript + FullScript.FCScript + FullSkript.FCSkript - Gui commands - Guikommandoer + Gui commands + Guikommandoer - Recording GUI commands - Spiller inn GUI kommandoer + Recording GUI commands + Spiller inn GUI kommandoer - Record as comment - Spill inn som kommentar + Record as comment + Spill inn som kommentar - Macro path - Makrobane + Macro path + Makrobane - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Enheter + Units + Enheter - Units settings - Enhetsinnstillinger + Units settings + Enhetsinnstillinger - Standard (mm/kg/s/degree) - Standard (mm/kg/s/grad) + Standard (mm/kg/s/degree) + Standard (mm/kg/s/grad) - MKS (m/kg/s/degree) - MKS (m/kg/s/grad) + MKS (m/kg/s/degree) + MKS (m/kg/s/grad) - Magnitude - Magnitude + Magnitude + Magnitude - Unit - Enhet + Unit + Enhet - User system: - Brukersystem: + User system: + Brukersystem: - Imperial (in/lb) - Imperialt (in/lb) + Imperial (in/lb) + Imperialt (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Farger + Colors + Farger - Selection - Utvalg + Selection + Utvalg - Enable selection highlighting - Aktiver utheving av valg + Enable selection highlighting + Aktiver utheving av valg - Enable preselection highlighting - Aktiver utheving av forvalg + Enable preselection highlighting + Aktiver utheving av forvalg - Background color - Bakgrunnsfarge + Background color + Bakgrunnsfarge - Middle color - Midtfarge + Middle color + Midtfarge - Color gradient - Fargeovergang + Color gradient + Fargeovergang - Simple color - Enkel farge + Simple color + Enkel farge - Default colors - Default colors + Default colors + Default colors - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Dagens tips + Tip of the day + Dagens tips - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Visste du at...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Visste du at...</font></font></b> - &Show tips at start up - &Vis tips ved oppstart + &Show tips at start up + &Vis tips ved oppstart - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Neste tips + &Next Tip + &Neste tips - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Lukk + &Close + &Lukk - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Nedlasting mislyktes: %1 + Nedlasting mislyktes: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Hvis du ønsker å lære mer om FreeCAD må du gå til %1 eller bruk Hjelp i menyen. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Hvis du ønsker å lære mer om FreeCAD må du gå til %1 eller bruk Hjelp i menyen. - - + + Gui::Dialog::DockablePlacement - Placement - Plassering + Placement + Plassering - - + + Gui::Dialog::DownloadDialog - Canceled. - Canceled. + Canceled. + Canceled. - - + + Download + + + + Cancel + Avbryt + + + Close + Lukk + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Nedlasting mislyktes: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Add icon + Add icon + Add icon - - + + Gui::Dialog::InputVector - Input vector - Inndata vektor + Input vector + Inndata vektor - Vector - Vektor + Vector + Vektor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Museknapper + Mouse buttons + Museknapper - Configuration - Konfigurasjon + Configuration + Konfigurasjon - Selection: - Utvalg: + Selection: + Utvalg: - Panning - Panorering + Panning + Panorering - Rotation: - Rotasjon: + Rotation: + Rotasjon: - Zooming: - Zoome: + Zooming: + Zoome: - - + + Gui::Dialog::ParameterGroup - Expand - Utvid + Expand + Utvid - Add sub-group - Legg til undergruppe + Add sub-group + Legg til undergruppe - Remove group - Fjern gruppe + Remove group + Fjern gruppe - Rename group - Omdøp gruppe + Rename group + Omdøp gruppe - Export parameter - Eksporter parameter + Export parameter + Eksporter parameter - Import parameter - Importer parameter + Import parameter + Importer parameter - Collapse - Skjul + Collapse + Skjul - Do really want to remove this parameter group? - Ønsker du virkelig å fjerne denne parametergruppen? + Do really want to remove this parameter group? + Ønsker du virkelig å fjerne denne parametergruppen? - Existing sub-group - Eksisterende undergruppe + Existing sub-group + Eksisterende undergruppe - The sub-group '%1' already exists. - Undergruppe '%1' finnes allerede. + The sub-group '%1' already exists. + Undergruppe '%1' finnes allerede. - Export parameter to file - Eksporter parameter til fil + Export parameter to file + Eksporter parameter til fil - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Importer parameter fra fil + Import parameter from file + Importer parameter fra fil - Import Error - Importfeil + Import Error + Importfeil - Reading from '%1' failed. - Lesing fra '%1' mislyktes. + Reading from '%1' failed. + Lesing fra '%1' mislyktes. - - + + Gui::Dialog::ParameterValue - Change value - Endre verdi + Change value + Endre verdi - Remove key - Fjern nøkkelen + Remove key + Fjern nøkkelen - Rename key - Omdøp nøkkel + Rename key + Omdøp nøkkel - New - Ny + New + Ny - New string item - Nytt streng-element + New string item + Nytt streng-element - New float item - Nytt float-element + New float item + Nytt float-element - New integer item - Nytt heltall-element + New integer item + Nytt heltall-element - New unsigned item - Nytt usignert element + New unsigned item + Nytt usignert element - New Boolean item - Nytt boolsk element + New Boolean item + Nytt boolsk element - Existing item - Eksisterende element + Existing item + Eksisterende element - The item '%1' already exists. - Elementet '%1' finnes allerede. + The item '%1' already exists. + Elementet '%1' finnes allerede. - - + + Gui::Dialog::Placement - Placement - Plassering + Placement + Plassering - OK - OK + OK + OK - Translation: - Oversettelse: + Translation: + Oversettelse: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotasjon: + Rotation: + Rotasjon: - Angle: - Vinkel: + Angle: + Vinkel: - Axis: - Akse: + Axis: + Akse: - Center: - Senter: + Center: + Senter: - Pitch: - Tipp: + Pitch: + Tipp: - Roll: - Rull: + Roll: + Rull: - Yaw: - Snu: + Yaw: + Snu: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Euler vinkler + Euler angles + Euler vinkler - Apply placement changes immediately - Bruk plasseringsendringer umiddelbart + Apply placement changes immediately + Bruk plasseringsendringer umiddelbart - Apply incremental changes to object placement - Bruk trinnvise endringer på objektplassering + Apply incremental changes to object placement + Bruk trinnvise endringer på objektplassering - Apply - Bruk + Apply + Bruk - Reset - Tilbakestill + Reset + Tilbakestill - Close - Lukk + Close + Lukk - - + + Gui::Dialog::PrintModel - Button - Button + Button + Button - Command - Kommando + Command + Kommando - - + + Gui::Dialog::SceneInspector - Dialog - Dialog + Dialog + Dialog - Close - Lukk + Close + Lukk - Refresh - Oppdater + Refresh + Oppdater - - + + Gui::Dialog::SceneModel - Inventor Tree - Oppfinnertre + Inventor Tree + Oppfinnertre - Nodes - Noder + Nodes + Noder - - + + Gui::Dialog::TextureMapping - Texture - Tekstur + Texture + Tekstur - Texture mapping - Teksturtilordning + Texture mapping + Teksturtilordning - Global - Global + Global + Global - Environment - Miljø + Environment + Miljø - Image files (%1) - Bildefiler (%1) + Image files (%1) + Bildefiler (%1) - No image - Ingen bilder + No image + Ingen bilder - The specified file is not a valid image file. - Den angitte filen er ikke en gyldig bildefil. + The specified file is not a valid image file. + Den angitte filen er ikke en gyldig bildefil. - No 3d view - Ingen 3d-visning + No 3d view + Ingen 3d-visning - No active 3d view found. - Ingen aktiv 3d-visning funnet. + No active 3d view found. + Ingen aktiv 3d-visning funnet. - - + + Gui::Dialog::Transform - Cancel - Avbryt + Cancel + Avbryt - Transform - Transformer + Transform + Transformer - - + + Gui::DlgTreeWidget - Dialog - Dialog + Dialog + Dialog - Items - Elementer + Items + Elementer - OK - OK + OK + OK - Cancel - Avbryt + Cancel + Avbryt - - + + - - + + Gui::DockWnd::CombiView - CombiView - Kombivisning + CombiView + Kombivisning - Project - Prosjekt + Project + Prosjekt - Tasks - Oppgaver + Tasks + Oppgaver - - + + Gui::DockWnd::HelpView - Previous - Forrige + Previous + Forrige - Next - Neste + Next + Neste - Home - Hjem + Home + Hjem - Open - Åpne + Open + Åpne - Open file - Åpne fil + Open file + Åpne fil - All HTML files (*.html *.htm) - Alle HTML filer (*.html *.htm) + All HTML files (*.html *.htm) + Alle HTML filer (*.html *.htm) - External browser - Ekstern nettleser + External browser + Ekstern nettleser - No external browser found. Specify in preferences, please - Ingen ekstern nettleser funnet. Vennligst angi i preferanser + No external browser found. Specify in preferences, please + Ingen ekstern nettleser funnet. Vennligst angi i preferanser - Starting of %1 failed - Start av %1 mislyktes + Starting of %1 failed + Start av %1 mislyktes - - + + Gui::DockWnd::PropertyDockView - Property View - Egenskapsvisning + Property View + Egenskapsvisning - - + + Gui::DockWnd::ReportOutput - Logging - Logging + Logging + Logging - Warning - Advarsel + Warning + Advarsel - Error - Feil + Error + Feil - Options - Alternativer + Options + Alternativer - Clear - Tøm + Clear + Tøm - Save As... - Lagre som... + Save As... + Lagre som... - Save Report Output - Lagre rapport utdata + Save Report Output + Lagre rapport utdata - Plain Text Files (*.txt *.log) - Rene tekstfiler (*.txt *.log) + Plain Text Files (*.txt *.log) + Rene tekstfiler (*.txt *.log) - Go to end - Gå til slutten + Go to end + Gå til slutten - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Omadressere Python-feil + Redirect Python errors + Omadressere Python-feil - - + + Gui::DockWnd::ReportView - Output - Utdata + Output + Utdata - Python console - Pythonkonsoll + Python console + Pythonkonsoll - - + + Gui::DockWnd::SelectionView - Property View - Egenskapsvisning + Property View + Egenskapsvisning - - + + Gui::DockWnd::TaskPanelView - Task View - Oppgavevisning + Task View + Oppgavevisning - - + + Gui::DockWnd::TextBrowser - Could not open file. - Kunne ikke åpne fil. + Could not open file. + Kunne ikke åpne fil. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Du prøvde å få tilgang til adressen %1 som for øyeblikket er utilgjengelig. Kontroller at nettadressen eksisterer og prøv å oppdatere siden. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Du prøvde å få tilgang til adressen %1 som for øyeblikket er utilgjengelig. Kontroller at nettadressen eksisterer og prøv å oppdatere siden. - Connecting to %1 - Kobler til %1 + Connecting to %1 + Kobler til %1 - Sending to %1 - Sender til %1 + Sending to %1 + Sender til %1 - Reading from %1 - Leser fra %1 + Reading from %1 + Leser fra %1 - Download failed: %1. - Nedlasting mislyktes: %1. + Download failed: %1. + Nedlasting mislyktes: %1. - Previous - Forrige + Previous + Forrige - Forward - Fremover + Forward + Fremover - Home - Hjem + Home + Hjem - Refresh - Oppdater + Refresh + Oppdater - Copy - Kopier + Copy + Kopier - Select all - Velg alle + Select all + Velg alle - No description for - Ingen beskrivelse for + No description for + Ingen beskrivelse for - - + + Gui::DocumentModel - Application - Program + Application + Program - Labels & Attributes - Etiketter og attributter + Labels & Attributes + Etiketter og attributter - - + + Gui::EditorView - Modified file - Modifisert fil + Modified file + Modifisert fil - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Dette har blitt endret utenfor kilderedigereren. Vil du laste den på nytt? - Unsaved document - Ulagret dokument + Unsaved document + Ulagret dokument - The document has been modified. + The document has been modified. Do you want to save your changes? - Dokumentet har blitt endret. + Dokumentet har blitt endret. Vil du lagre endringene? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD-makro (*.FCMacro);;Python (*. py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD-makro (*.FCMacro);;Python (*. py) - Export PDF - Eksporter PDF + Export PDF + Eksporter PDF - PDF file (*.pdf) - PDF-fil (*.pdf) + PDF file (*.pdf) + PDF-fil (*.pdf) - untitled[*] - uten navn[*] + untitled[*] + uten navn[*] - - Editor - -Redigerer + - Editor + -Redigerer - %1 chars removed - %1 tegn fjernet + %1 chars removed + %1 tegn fjernet - %1 chars added - %1 tegn lagt til + %1 chars added + %1 tegn lagt til - Formatted - Formatert + Formatted + Formatert - - + + Gui::FileChooser - Select a file - Velg en fil + Select a file + Velg en fil - Select a directory - Velg en mappe + Select a directory + Velg en mappe - - + + Gui::FileDialog - Save as - Lagre som + Save as + Lagre som - Open - Åpne + Open + Åpne - - + + Gui::FileOptionsDialog - Extended - Utvidet + Extended + Utvidet - All files (*.*) - Alle filer (*.*) + All files (*.*) + Alle filer (*.*) - - + + Gui::Flag - Top left - Øverst til venstre + Top left + Øverst til venstre - Bottom left - Nederst til venstre + Bottom left + Nederst til venstre - Top right - Øverst til høyre + Top right + Øverst til høyre - Bottom right - Nederst til høyre + Bottom right + Nederst til høyre - Remove - Fjern + Remove + Fjern - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Trykk CTRL og venstre museknapp + Press CTRL and left mouse button + Trykk CTRL og venstre museknapp - Press middle mouse button - Trykk på midtre museknapp + Press middle mouse button + Trykk på midtre museknapp - Press left mouse button - Trykk venstre museknapp + Press left mouse button + Trykk venstre museknapp - Scroll middle mouse button - Rull musehjul + Scroll middle mouse button + Rull musehjul - - + + Gui::LocationDialog - Wrong direction - Feil retning + Wrong direction + Feil retning - Direction must not be the null vector - Retningen kan ikke være nullvektoren + Direction must not be the null vector + Retningen kan ikke være nullvektoren - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Brukerdefinert... + User defined... + Brukerdefinert... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makroer + Macros + Makroer - - + + Gui::MainWindow - Dimension - Dimensjon + Dimension + Dimensjon - Ready - Klar + Ready + Klar - Toggles this toolbar - Veksler denne verktøylinjen + Toggles this toolbar + Veksler denne verktøylinjen - Toggles this dockable window - Veksler dette dokkbare vinduet + Toggles this dockable window + Veksler dette dokkbare vinduet - Close All - Lukk alle + Close All + Lukk alle - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Nedlasting har startet... + Nedlasting har startet... - - + + Gui::ProgressBar - Remaining: %1 - Gjenstående: %1 + Remaining: %1 + Gjenstående: %1 - Aborting - Avbryter + Aborting + Avbryter - Do you really want to abort the operation? - Vil du virkelig avbryte operasjonen? + Do you really want to abort the operation? + Vil du virkelig avbryte operasjonen? - - + + Gui::ProgressDialog - Remaining: %1 - Gjenstående: %1 + Remaining: %1 + Gjenstående: %1 - Aborting - Avbryter + Aborting + Avbryter - Do you really want to abort the operation? - Vil du virkelig avbryte operasjonen? + Do you really want to abort the operation? + Vil du virkelig avbryte operasjonen? - - + + Gui::PropertyEditor::PropertyModel - Property - Egenskap + Property + Egenskap - Value - Verdi + Value + Verdi - - + + Gui::PropertyView - View - Vis + View + Vis - Data - Data + Data + Data - - + + Gui::PythonConsole - System exit - Systemavsluttning + System exit + Systemavsluttning - The application is still running. + The application is still running. Do you want to exit without saving your data? - Programmet er fremdeles i gang. + Programmet er fremdeles i gang. Ønsker du å avslutte uten å lagre dine data? - Python console - Pythonkonsoll + Python console + Pythonkonsoll - Unhandled PyCXX exception. - Ubehandlet PyCXX unntak. + Unhandled PyCXX exception. + Ubehandlet PyCXX unntak. - Unhandled FreeCAD exception. - Ubehandlet FreeCAD unntak. + Unhandled FreeCAD exception. + Ubehandlet FreeCAD unntak. - Unhandled unknown C++ exception. - Ubehandlet ukjent C++ unntak. + Unhandled unknown C++ exception. + Ubehandlet ukjent C++ unntak. - &Copy command - &Kopierkommando + &Copy command + &Kopierkommando - &Copy history - &Kopieringshistorie + &Copy history + &Kopieringshistorie - Save history as... - Lagre historie som... + Save history as... + Lagre historie som... - Insert file name... - Sett inn filnavn... + Insert file name... + Sett inn filnavn... - Save History - Lagre Historie + Save History + Lagre Historie - Macro Files (*.FCMacro *.py) - Makrofiler (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Makrofiler (*.FCMacro *.py) - Insert file name - Sett inn filnavn + Insert file name + Sett inn filnavn - All Files (*.*) - Alle filer (*.*) + All Files (*.*) + Alle filer (*.*) - Python Input Dialog - Python inndata dialog + Python Input Dialog + Python inndata dialog - Unhandled std C++ exception. - Ubehandlet std C++ unntak. + Unhandled std C++ exception. + Ubehandlet std C++ unntak. - Word wrap - Tekstbryting + Word wrap + Tekstbryting - &Copy - &Kopier + &Copy + &Kopier - &Paste - &Lim inn + &Paste + &Lim inn - Select All - Merk alle + Select All + Merk alle - - + + Clear console + + + + Gui::PythonEditor - Comment - Kommentar + Comment + Kommentar - Uncomment - Avkommentér + Uncomment + Avkommentér - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Tøm + Clear + Tøm - - + + Gui::RecentFilesAction - Open file %1 - Åpne fil %1 + Open file %1 + Åpne fil %1 - File not found - Fant ikke filen + File not found + Fant ikke filen - The file '%1' cannot be opened. - Filen '%1' kan ikke åpnes. + The file '%1' cannot be opened. + Filen '%1' kan ikke åpnes. - - + + Gui::SelectModule - Select module - Velg modul + Select module + Velg modul - Open %1 as - Åpne %1 som + Open %1 as + Åpne %1 som - Select - Velg + Select + Velg - - + + Gui::StdCmdDescription - Help - Hjelp + Help + Hjelp - Des&cription - Be&skrivelse + Des&cription + Be&skrivelse - Long description of commands - Lang beskrivelse av kommandoer + Long description of commands + Lang beskrivelse av kommandoer - - + + Gui::StdCmdDownloadOnlineHelp - Help - Hjelp + Help + Hjelp - Download online help - Last ned hjelp fra internett + Download online help + Last ned hjelp fra internett - Download %1's online help - Last ned %1's hjelp fra internett + Download %1's online help + Last ned %1's hjelp fra internett - Non-existing directory - Ikkeeksisterende mappe + Non-existing directory + Ikkeeksisterende mappe - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Mappen '%1' eksisterer ikke. + Mappen '%1' eksisterer ikke. Vil du angi en eksisterende mappe? - Missing permission - Mangler tillatelse + Missing permission + Mangler tillatelse - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Du har ikke skrivetilgang til '%1' + Du har ikke skrivetilgang til '%1' Vil du angi en annen mappe? - Stop downloading - Stopp nedlasting + Stop downloading + Stopp nedlasting - - + + Gui::StdCmdPythonHelp - Tools - Verktøy + Tools + Verktøy - Python Modules - Pythonmoduler + Python Modules + Pythonmoduler - Opens a browser to show the Python modules - Åpner en nettleser for å vise Pythonmoduler + Opens a browser to show the Python modules + Åpner en nettleser for å vise Pythonmoduler - - + + Gui::TaskBoxAngle - Angle - Vinkel + Angle + Vinkel - - + + Gui::TaskBoxPosition - Position - Posisjon + Position + Posisjon - - + + Gui::TaskView::TaskAppearance - Display mode: - Visningsmodus: + Display mode: + Visningsmodus: - Plot mode: - Plottmodus: + Plot mode: + Plottmodus: - Point size: - Punktstørrelse: + Point size: + Punktstørrelse: - Line width: - Linjebredde: + Line width: + Linjebredde: - Transparency: - Gjennomsiktighet: + Transparency: + Gjennomsiktighet: - Appearance - Utseende + Appearance + Utseende - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Rediger + Edit + Rediger - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Utseende + Appearance + Utseende - ... - ... + ... + ... - edit selection - redigere utvalg + edit selection + redigere utvalg - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Trykk venstre museknapp + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Engelsk + English + Engelsk - - + + Gui::TreeDockWidget - Tree view - Trevisning + Tree view + Trevisning - - + + Gui::TreeWidget - Create group... - Lag gruppe... + Create group... + Lag gruppe... - Create a group - Lag en gruppe + Create a group + Lag en gruppe - Group - Gruppe + Group + Gruppe - Rename - Omdøp + Rename + Omdøp - Rename object - Omdøp objekt + Rename object + Omdøp objekt - Labels & Attributes - Etiketter og attributter + Labels & Attributes + Etiketter og attributter - Application - Program + Application + Program - Finish editing - Fullfør redigering + Finish editing + Fullfør redigering - Finish editing object - Fullfør å redigere objektet + Finish editing object + Fullfør å redigere objektet - Activate document - Aktiver dokument + Activate document + Aktiver dokument - Activate document %1 - Aktiver dokument %1 + Activate document %1 + Aktiver dokument %1 - - + + Gui::View3DInventor - Export PDF - Eksporter PDF + Export PDF + Eksporter PDF - PDF file (*.pdf) - PDF-fil (*.pdf) + PDF file (*.pdf) + PDF-fil (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Velg '%1' arbeidsbenk + Select the '%1' workbench + Velg '%1' arbeidsbenk - - + + Position - Form - Skjema + Form + Skjema - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Rutenett magnet i + Grid Snap in + Rutenett magnet i - - + + QDockWidget - Tree view - Trevisning + Tree view + Trevisning - Property view - Egenskapsvisning + Property view + Egenskapsvisning - Selection view - Visning av valg + Selection view + Visning av valg - Report view - Rapportvisning + Report view + Rapportvisning - Task View - Oppgavevisning + Task View + Oppgavevisning - Combo View - Kombinert visning + Combo View + Kombinert visning - Toolbox - Verktøykasse + Toolbox + Verktøykasse - Python console - Pythonkonsoll + Python console + Pythonkonsoll - Display properties - Skjermegenskaper + Display properties + Skjermegenskaper - - + + QObject - General - Generelle + General + Generelle - Display - Skjerm + Display + Skjerm - Unknown filetype - Ukjent filetype + Unknown filetype + Ukjent filetype - Cannot open unknown filetype: %1 - Kan ikke åpne ukjent filetype: %1 + Cannot open unknown filetype: %1 + Kan ikke åpne ukjent filetype: %1 - Cannot save to unknown filetype: %1 - Kan ikke lagre til ukjent filetype: %1 + Cannot save to unknown filetype: %1 + Kan ikke lagre til ukjent filetype: %1 - Workbench failure - Arbeidsbenkfeil + Workbench failure + Arbeidsbenkfeil - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Kan ikke starte Qt assistent (%1) + Unable to launch Qt Assistant (%1) + Kan ikke starte Qt assistent (%1) - Exception - Unntak + Exception + Unntak - Open document - Åpne dokument + Open document + Åpne dokument - Import file - Importer fil + Import file + Importer fil - Export file - Eksporter fil + Export file + Eksporter fil - Printing... - Skriver ut ... + Printing... + Skriver ut ... - Cannot load workbench - Kan ikke laste arbeidsbenk + Cannot load workbench + Kan ikke laste arbeidsbenk - A general error occurred while loading the workbench - En generell feil oppstod under lasting arbeidsbordet + A general error occurred while loading the workbench + En generell feil oppstod under lasting arbeidsbordet - File not found - Fant ikke filen + File not found + Fant ikke filen - Cannot open file %1 - Kan ikke åpne filen %1 + Cannot open file %1 + Kan ikke åpne filen %1 - Save views... - Lagre visninger... + Save views... + Lagre visninger... - Load views... - Last visninger... + Load views... + Last visninger... - Freeze view - Frys visning + Freeze view + Frys visning - Clear views - Tøm visninger + Clear views + Tøm visninger - Restore view &%1 - Gjenopprette visning &%1 + Restore view &%1 + Gjenopprette visning &%1 - Save frozen views - Lagre frosne visninger + Save frozen views + Lagre frosne visninger - Frozen views (*.cam) - Frosne visninger (*.cam) + Frozen views (*.cam) + Frosne visninger (*.cam) - Restore views - Gjenopprett visninger + Restore views + Gjenopprett visninger - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Importering av gjenopprettede visninger fjerner allerede lagrede visninger. Vil du fortsette? + Importering av gjenopprettede visninger fjerner allerede lagrede visninger. Vil du fortsette? - Restore frozen views - Gjenopprett frosne visninger + Restore frozen views + Gjenopprett frosne visninger - Cannot open file '%1'. - Kan ikke åpne filen '%1'. + Cannot open file '%1'. + Kan ikke åpne filen '%1'. - Docked - Forankret + Docked + Forankret - Undocked - Uforankret + Undocked + Uforankret - Fullscreen - Fullskjerm + Fullscreen + Fullskjerm - files - filer + files + filer - Save picture - Lagre bilde + Save picture + Lagre bilde - New sub-group - Nye undergruppe + New sub-group + Nye undergruppe - Enter the name: - Skriv inn navnet: + Enter the name: + Skriv inn navnet: - New text item - Nytt tekstelement + New text item + Nytt tekstelement - Enter your text: - Skriv inn din tekst: + Enter your text: + Skriv inn din tekst: - New integer item - Nytt heltall-element + New integer item + Nytt heltall-element - Enter your number: - Skriv inn nummeret ditt: + Enter your number: + Skriv inn nummeret ditt: - New unsigned item - Nytt usignert element + New unsigned item + Nytt usignert element - New float item - Nytt float-element + New float item + Nytt float-element - New Boolean item - Nytt boolsk element + New Boolean item + Nytt boolsk element - Choose an item: - Velg et element: + Choose an item: + Velg et element: - Rename group - Omdøp gruppe + Rename group + Omdøp gruppe - The group '%1' cannot be renamed. - Gruppen '%1' kan ikke omdøpes. + The group '%1' cannot be renamed. + Gruppen '%1' kan ikke omdøpes. - Existing group - Eksisterende gruppe + Existing group + Eksisterende gruppe - The group '%1' already exists. - Gruppen '%1' finnes allerede. + The group '%1' already exists. + Gruppen '%1' finnes allerede. - Change value - Endre verdi + Change value + Endre verdi - Save document under new filename... - Lagre dokumentet under nytt filnavn... + Save document under new filename... + Lagre dokumentet under nytt filnavn... - Saving aborted - Lagring avbrutt + Saving aborted + Lagring avbrutt - Unsaved document - Ulagret dokument + Unsaved document + Ulagret dokument - Save document before close? - Lagre dokument før det lukkes? + Save document before close? + Lagre dokument før det lukkes? - Save Macro - Lagre makro + Save Macro + Lagre makro - Finish - Fullfør + Finish + Fullfør - Clear - Tøm + Clear + Tøm - Cancel - Avbryt + Cancel + Avbryt - Inner - Indre + Inner + Indre - Outer - Ytre + Outer + Ytre - No Browser - Ingen nettleser + No Browser + Ingen nettleser - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Kan ikke åpne nettleseren. Vennligst åpne et nettleservindu og skriv: http://localhost:%1. + Kan ikke åpne nettleseren. Vennligst åpne et nettleservindu og skriv: http://localhost:%1. - No Server - Ingen Server + No Server + Ingen Server - Unable to start the server to port %1: %2. - Kan ikke starte serveren til port %1: %2. + Unable to start the server to port %1: %2. + Kan ikke starte serveren til port %1: %2. - Unable to open your system browser. - Kan ikke åpne systemets nettleser. + Unable to open your system browser. + Kan ikke åpne systemets nettleser. - Options... - Alternativer... + Options... + Alternativer... - Out of memory - For lite minne + Out of memory + For lite minne - Not enough memory available to display the data. - Ikke nok minne til å vise dataene. + Not enough memory available to display the data. + Ikke nok minne til å vise dataene. - Cannot find file %1 - Finner ikke filen %1 + Cannot find file %1 + Finner ikke filen %1 - Cannot find file %1 neither in %2 nor in %3 - Finner ikke filen %1 verken i %2 eller i %3 + Cannot find file %1 neither in %2 nor in %3 + Finner ikke filen %1 verken i %2 eller i %3 - Save %1 Document - Lagre %1 dokument + Save %1 Document + Lagre %1 dokument - %1 document (*.FCStd) - %1 dokument (*.FCStd) + %1 document (*.FCStd) + %1 dokument (*.FCStd) - Save As - Lagre som + Save As + Lagre som - %1 already exists. + %1 already exists. Do you want to replace it? - %1 finnes allerede. Vil du erstatte den? + %1 finnes allerede. Vil du erstatte den? - Document not closable - Dokumentet ikke kan lukkes + Document not closable + Dokumentet ikke kan lukkes - The document is not closable for the moment. - Dokumentet kan ikke lukkes for øyeblikket. + The document is not closable for the moment. + Dokumentet kan ikke lukkes for øyeblikket. - No OpenGL - Ingen OpenGL + No OpenGL + Ingen OpenGL - This system does not support OpenGL - Dette systemet støtter ikke OpenGL + This system does not support OpenGL + Dette systemet støtter ikke OpenGL - Help - Hjelp + Help + Hjelp - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Kan ikke laste dokumentasjon. For å laste er Qt 4.4 eller høyere er nødvendig. + Kan ikke laste dokumentasjon. For å laste er Qt 4.4 eller høyere er nødvendig. - %1 Help - %1 Hjelp + %1 Help + %1 Hjelp - Exporting PDF... - Eksporterer PDF... + Exporting PDF... + Eksporterer PDF... - Wrong selection - Feil valg + Wrong selection + Feil valg - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Bare ett objekt valgt. Velg to objekter. + Bare ett objekt valgt. Velg to objekter. Vær oppmerksom på at punktet hvor du klikker betyr noe. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Velg to objekter. + Velg to objekter. Vær oppmerksom på at punktet hvor du klikker betyr noe. - New boolean item - Nytt boolsk element + New boolean item + Nytt boolsk element - Navigation styles - Navigeringsstiler + Navigation styles + Navigeringsstiler - %1 navigation - %1navigasjon + %1 navigation + %1navigasjon - Move annotation - Flytt merknad + Move annotation + Flytt merknad - Transform - Transformer + Transform + Transformer - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + Standardvisning + + + Box selection + + + + StdCmdAbout - Help - Hjelp + Help + Hjelp - &About %1 - &Om %1 + &About %1 + &Om %1 - About %1 - Om %1 + About %1 + Om %1 - - + + StdCmdAboutQt - Help - Hjelp + Help + Hjelp - About &Qt - Om &Qt + About &Qt + Om &Qt - About Qt - Om Qt + About Qt + Om Qt - - + + StdCmdActivateNextWindow - Window - Vindu + Window + Vindu - Ne&xt - Ne&ste + Ne&xt + Ne&ste - Activate next window - Aktiver neste vindu + Activate next window + Aktiver neste vindu - - + + StdCmdActivatePrevWindow - Window - Vindu + Window + Vindu - Pre&vious - For&rige + Pre&vious + For&rige - Activate previous window - Aktiver forrige vindu + Activate previous window + Aktiver forrige vindu - - + + + StdCmdAlignment + + Edit + Rediger + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Vindu + Window + Vindu - Arrange &Icons - Ordne &ikoner + Arrange &Icons + Ordne &ikoner - Arrange Icons - Ordne ikoner + Arrange Icons + Ordne ikoner - - + + StdCmdAxisCross - Standard-View - Standardvisning + Standard-View + Standardvisning - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Vindu + Window + Vindu - &Cascade - &Kaskade + &Cascade + &Kaskade - Tile pragmatic - Still opp praktisk + Tile pragmatic + Still opp praktisk - - + + StdCmdCloseActiveWindow - Window - Vindu + Window + Vindu - Cl&ose - Lu&kk + Cl&ose + Lu&kk - Close active window - Lukk aktivt vindu + Close active window + Lukk aktivt vindu - - + + StdCmdCloseAllWindows - Window - Vindu + Window + Vindu - Close Al&l - Lukk al&le + Close Al&l + Lukk al&le - Close all windows - Lukk alle vinduer + Close all windows + Lukk alle vinduer - - + + StdCmdCommandLine - Tools - Verktøy + Tools + Verktøy - Start command &line... - Åpne kommand&olinje... + Start command &line... + Åpne kommand&olinje... - Opens the command line in the console - Åpner kommandolinje i konsoll + Opens the command line in the console + Åpner kommandolinje i konsoll - - + + StdCmdCopy - Edit - Rediger + Edit + Rediger - C&opy - K&opier + C&opy + K&opier - Copy operation - Kopioperasjon + Copy operation + Kopioperasjon - - + + StdCmdCut - Edit - Rediger + Edit + Rediger - &Cut - &Klipp ut + &Cut + &Klipp ut - Cut out - Klipp ut + Cut out + Klipp ut - - + + StdCmdDDuplicateSelection - Edit - Rediger + Edit + Rediger - Duplicate selection - Dupliser valg + Duplicate selection + Dupliser valg - Put duplicates of the selected objects to the active document - Flytt duplikater av de valgte objektene til aktivt dokument + Put duplicates of the selected objects to the active document + Flytt duplikater av de valgte objektene til aktivt dokument - - + + StdCmdDelete - Edit - Rediger + Edit + Rediger - &Delete - &Slett + &Delete + &Slett - Deletes the selected objects - Sletter valgte objekter + Deletes the selected objects + Sletter valgte objekter - - + + StdCmdDemoMode - Standard-View - Standardvisning + Standard-View + Standardvisning - View turntable... - Vis dreieskive... + View turntable... + Vis dreieskive... - View turntable - Vis dreieskive + View turntable + Vis dreieskive - - + + StdCmdDlgCustomize - Tools - Verktøy + Tools + Verktøy - Cu&stomize... - Til&pass... + Cu&stomize... + Til&pass... - Customize toolbars and command bars - Tilpass verktøylinjer og kommandolinjer + Customize toolbars and command bars + Tilpass verktøylinjer og kommandolinjer - - + + StdCmdDlgMacroExecute - Macros ... - Makroer... + Macros ... + Makroer... - Opens a dialog to let you execute a recorded macro - Åpner en dialog som lar deg utføre en innspilt makro + Opens a dialog to let you execute a recorded macro + Åpner en dialog som lar deg utføre en innspilt makro - Macro - Makro + Macro + Makro - - + + StdCmdDlgMacroExecuteDirect - Macro - Makro + Macro + Makro - Execute macro - Kjør makro + Execute macro + Kjør makro - Execute the macro in the editor - Utføre makroen i redigeringsprogrammet + Execute the macro in the editor + Utføre makroen i redigeringsprogrammet - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Makroinnspilling... + &Macro recording ... + &Makroinnspilling... - Opens a dialog to record a macro - Åpner en dialog for å spille inn makro + Opens a dialog to record a macro + Åpner en dialog for å spille inn makro - Macro - Makro + Macro + Makro - - + + StdCmdDlgParameter - Tools - Verktøy + Tools + Verktøy - E&dit parameters ... - Re&diger parametere... + E&dit parameters ... + Re&diger parametere... - Opens a Dialog to edit the parameters - Åpner en dialog for å redigere parametere + Opens a Dialog to edit the parameters + Åpner en dialog for å redigere parametere - - + + StdCmdDlgPreferences - Tools - Verktøy + Tools + Verktøy - &Preferences ... - &Preferanser ... + &Preferences ... + &Preferanser ... - Opens a Dialog to edit the preferences - Åpner en dialog for å redigere preferanser + Opens a Dialog to edit the preferences + Åpner en dialog for å redigere preferanser - - + + StdCmdDockViewMenu - View - Vis + View + Vis - Vie&ws - Vi&sninger + Vie&ws + Vi&sninger - Toggles this window - Veksler dette vinduet + Toggles this window + Veksler dette vinduet - - + + StdCmdDrawStyle - Standard-View - Standardvisning + Standard-View + Standardvisning - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Rediger + + + Duplicate selection + Dupliser valg + + + Put duplicates of the selected objects to the active document + Flytt duplikater av de valgte objektene til aktivt dokument + + + + StdCmdEdit + + Edit + Rediger + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - File + File + File - &Export... - &Eksporter... + &Export... + &Eksporter... - Export an object in the active document - Eksporter et objekt i aktivt dokumentet + Export an object in the active document + Eksporter et objekt i aktivt dokumentet - Supported formats - Støttede formater + Supported formats + Støttede formater - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Verktøy + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - File + File + File - &Recompute - &Oppdater + &Recompute + &Oppdater - Recompute feature or document - Oppdater funksjon eller dokument + Recompute feature or document + Oppdater funksjon eller dokument - - + + StdCmdFreeCADWebsite - Help - Hjelp + Help + Hjelp - FreeCAD Website - FreeCAD nettsted + FreeCAD Website + FreeCAD nettsted - The FreeCAD website - FreeCAD-nettsiden + The FreeCAD website + FreeCAD-nettsiden - - + + StdCmdFreezeViews - Standard-View - Standardvisning + Standard-View + Standardvisning - Freeze display - Frys visning + Freeze display + Frys visning - Freezes the current view position - Fryser gjeldende visningsposisjon + Freezes the current view position + Fryser gjeldende visningsposisjon - - + + StdCmdHideObjects - Standard-View - Standardvisning + Standard-View + Standardvisning - Hide all objects - Skjul alle objekter + Hide all objects + Skjul alle objekter - Hide all objects in the document - Skjul alle objekter i dokumentet + Hide all objects in the document + Skjul alle objekter i dokumentet - - + + StdCmdHideSelection - Standard-View - Standardvisning + Standard-View + Standardvisning - Hide selection - Skjul valgt + Hide selection + Skjul valgt - Hide all selected objects - Skjul alle valgte objekter + Hide all selected objects + Skjul alle valgte objekter - - + + StdCmdImport - File - File + File + File - &Import... - &Importer... + &Import... + &Importer... - Import a file in the active document - Importer en fil inn i det aktive dokumentet + Import a file in the active document + Importer en fil inn i det aktive dokumentet - Supported formats - Støttede formater + Supported formats + Støttede formater - All files (*.*) - Alle filer (*.*) + All files (*.*) + Alle filer (*.*) - - + + StdCmdMacroStartDebug - Macro - Makro + Macro + Makro - Debug macro - Feilsøke makro + Debug macro + Feilsøke makro - Start debugging of macro - Start feilsøking i makro + Start debugging of macro + Start feilsøking i makro - - + + StdCmdMacroStepOver - Macro - Makro + Macro + Makro - Step over - Gå over + Step over + Gå over - - + + StdCmdMacroStopDebug - Macro - Makro + Macro + Makro - Stop debugging - Stopp feilsøking + Stop debugging + Stopp feilsøking - Stop debugging of macro - Stopp feilsking av makro + Stop debugging of macro + Stopp feilsking av makro - - + + StdCmdMacroStopRecord - Macro - Makro + Macro + Makro - S&top macro recording - S&top makroinnspilling + S&top macro recording + S&top makroinnspilling - Stop the macro recording session - Stopp makroinnspillingen + Stop the macro recording session + Stopp makroinnspillingen - - + + StdCmdMeasureDistance - View - Vis + View + Vis - Measure distance - Mål avstand + Measure distance + Mål avstand - - + + StdCmdMeasurementSimple - Tools - Verktøy + Tools + Verktøy - Mesure distance - Mål avstand + Mesure distance + Mål avstand - Measures distance between two selected objects - Måler avstanden mellom to merkede objekter + Measures distance between two selected objects + Måler avstanden mellom to merkede objekter - - + + Measure distance + Mål avstand + + + StdCmdMergeProjects - File - File + File + File - Merge project... - Flett prosjekt... + Merge project... + Flett prosjekt... - Merge project - Flett prosjekt + Merge project + Flett prosjekt - %1 document (*.fcstd) - %1 dokument (*.fcstd) + %1 document (*.fcstd) + %1 dokument (*.fcstd) - Cannot merge project with itself. - Kan ikke flette prosjekt med seg selv. + Cannot merge project with itself. + Kan ikke flette prosjekt med seg selv. - - + + StdCmdNew - File - File + File + File - &New - &Ny + &New + &Ny - Create a new empty document - Lag et nytt dokument + Create a new empty document + Lag et nytt dokument - - + + StdCmdOnlineHelp - Help - Hjelp + Help + Hjelp - Show help to the application - Vis hjelp for programmet + Show help to the application + Vis hjelp for programmet - - + + StdCmdOnlineHelpPython - Help - Hjelp + Help + Hjelp - Python Manuals - Python-manualer + Python Manuals + Python-manualer - Show the Python documentation - Vis Python-dokumentasjon + Show the Python documentation + Vis Python-dokumentasjon - - + + StdCmdOnlineHelpWebsite - Help - Hjelp + Help + Hjelp - Help Website - Hjelp-nettsted + Help Website + Hjelp-nettsted - The website where the help is maintained - Nettstedet der hjelp er opprettholdt + The website where the help is maintained + Nettstedet der hjelp er opprettholdt - - + + StdCmdOpen - File - File + File + File - &Open... - &Åpne... + &Open... + &Åpne... - Open a document or import files - Åpne et dokument eller importer filer + Open a document or import files + Åpne et dokument eller importer filer - Supported formats - Støttede formater + Supported formats + Støttede formater - All files (*.*) - Alle filer (*.*) + All files (*.*) + Alle filer (*.*) - - + + StdCmdPaste - Edit - Rediger + Edit + Rediger - &Paste - &Lim inn + &Paste + &Lim inn - Paste operation - Lim inn operasjon + Paste operation + Lim inn operasjon - - + + StdCmdPlacement - Edit - Rediger + Edit + Rediger - Placement... - Plassering... + Placement... + Plassering... - Place the selected objects - Plasser de valgte objektene + Place the selected objects + Plasser de valgte objektene - - + + StdCmdPrint - File - File + File + File - &Print... - &Skriv ut... + &Print... + &Skriv ut... - Print the document - Skriv ut dokument + Print the document + Skriv ut dokument - - + + StdCmdPrintPdf - File - File + File + File - &Export PDF... - &Eksporter PDF... + &Export PDF... + &Eksporter PDF... - Export the document as PDF - Eksporter dokumentet som PDF + Export the document as PDF + Eksporter dokumentet som PDF - - + + StdCmdPrintPreview - File - File + File + File - &Print preview... - &Print preview... + &Print preview... + &Print preview... - Print the document - Skriv ut dokument + Print the document + Skriv ut dokument - Print preview - Print preview + Print preview + Print preview - - + + StdCmdProjectInfo - File - File + File + File - Project i&nformation... - Prosjekti&nformasjon... + Project i&nformation... + Prosjekti&nformasjon... - Show details of the currently active project - Vis detaljer om det aktive prosjektet + Show details of the currently active project + Vis detaljer om det aktive prosjektet - - + + StdCmdProjectUtil - Tools - Verktøy + Tools + Verktøy - Project utility... - Project utility... + Project utility... + Project utility... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - Hjelp + Help + Hjelp - Python Website - Python-nettsted + Python Website + Python-nettsted - The official Python website - Den offisielle nettsiden for Python + The official Python website + Den offisielle nettsiden for Python - - + + StdCmdQuit - File - File + File + File - E&xit - A&vslutt + E&xit + A&vslutt - Quits the application - Avslutter programmet + Quits the application + Avslutter programmet - - + + StdCmdRandomColor - File - File + File + File - Random color - Tilfeldig farge + Random color + Tilfeldig farge - - + + StdCmdRecentFiles - File - File + File + File - Recent files - Nylig brukte filer + Recent files + Nylig brukte filer - Recent file list - Listen over nylig brukte filer + Recent file list + Listen over nylig brukte filer - - + + StdCmdRedo - Edit - Rediger + Edit + Rediger - &Redo - &Gjør om + &Redo + &Gjør om - Redoes a previously undone action - Gjør om en tidligere angret handling + Redoes a previously undone action + Gjør om en tidligere angret handling - - + + StdCmdRefresh - Edit - Rediger + Edit + Rediger - &Refresh - &Oppdater + &Refresh + &Oppdater - Recomputes the current active document - Oppdaterer det gjeldende aktive dokumentet + Recomputes the current active document + Oppdaterer det gjeldende aktive dokumentet - - + + StdCmdSave - File - File + File + File - &Save - &Lagre + &Save + &Lagre - Save the active document - Lagrer det aktive dokumentet + Save the active document + Lagrer det aktive dokumentet - - + + StdCmdSaveAs - File - File + File + File - Save &As... - Lagre &som... + Save &As... + Lagre &som... - Save the active document under a new file name - Lagre aktivt dokument under et nytt filnavn + Save the active document under a new file name + Lagre aktivt dokument under et nytt filnavn - - + + StdCmdSceneInspector - Tools - Verktøy + Tools + Verktøy - Scene inspector... - Sceneinspektør... + Scene inspector... + Sceneinspektør... - Scene inspector - Sceneinspektør + Scene inspector + Sceneinspektør - - + + StdCmdSelectAll - Edit - Rediger + Edit + Rediger - Select &All - Velg &alle + Select &All + Velg &alle - Select all - Velg alle + Select all + Velg alle - - + + StdCmdSetAppearance - Standard-View - Standardvisning + Standard-View + Standardvisning - Appearance... - Utseende... + Appearance... + Utseende... - Sets the display properties of the selected object - Angir visningsegenskaper for valgte objekt + Sets the display properties of the selected object + Angir visningsegenskaper for valgte objekt - - + + StdCmdShowObjects - Standard-View - Standardvisning + Standard-View + Standardvisning - Show all objects - Vis alle objekter + Show all objects + Vis alle objekter - Show all objects in the document - Vis alle objekter i dokument + Show all objects in the document + Vis alle objekter i dokument - - + + StdCmdShowSelection - Standard-View - Standardvisning + Standard-View + Standardvisning - Show selection - Vis valgte + Show selection + Vis valgte - Show all selected objects - Vis alle valgte objekter + Show all selected objects + Vis alle valgte objekter - - + + StdCmdStatusBar - View - Vis + View + Vis - Status bar - Statuslinjen + Status bar + Statuslinjen - Toggles the status bar - Veksler statuslinjen + Toggles the status bar + Veksler statuslinjen - - + + StdCmdTextureMapping - Tools - Verktøy + Tools + Verktøy - Texture mapping... - Teksturtilordning... + Texture mapping... + Teksturtilordning... - Texture mapping - Teksturtilordning + Texture mapping + Teksturtilordning - - + + StdCmdTileWindows - Window - Vindu + Window + Vindu - &Tile - &Still opp + &Tile + &Still opp - Tile the windows - Still opp vinduene + Tile the windows + Still opp vinduene - - + + StdCmdToggleBreakpoint - Macro - Makro + Macro + Makro - Toggle breakpoint - Veksle stopppunkt + Toggle breakpoint + Veksle stopppunkt - - + + StdCmdToggleClipPlane - Standard-View - Standardvisning + Standard-View + Standardvisning - Clipping plane - Beskjæringsplan + Clipping plane + Beskjæringsplan - Toggles clipping plane for active view - Veksler beskjæringsplan for aktiv visning + Toggles clipping plane for active view + Veksler beskjæringsplan for aktiv visning - - + + StdCmdToggleNavigation - Standard-View - Standardvisning + Standard-View + Standardvisning - Toggle navigation/Edit mode - Veksle navigasjon/ redigeringsmodus + Toggle navigation/Edit mode + Veksle navigasjon/ redigeringsmodus - Toggle between navigation and edit mode - Veksle mellom navigasjons- og redigeringsmodus + Toggle between navigation and edit mode + Veksle mellom navigasjons- og redigeringsmodus - - + + StdCmdToggleObjects - Standard-View - Standardvisning + Standard-View + Standardvisning - Toggle all objects - Veksler mellom alle objekter + Toggle all objects + Veksler mellom alle objekter - Toggles visibility of all objects in the active document - Veksler synligheten av alle objekter i det aktive dokumentet + Toggles visibility of all objects in the active document + Veksler synligheten av alle objekter i det aktive dokumentet - - + + StdCmdToggleSelectability - Standard-View - Standardvisning + Standard-View + Standardvisning - Toggle selectability - Veksle valgmulighet + Toggle selectability + Veksle valgmulighet - Toggles the property of the objects to get selected in the 3D-View - Veksler egenskap på objektene for å bli merket i 3D-visningen + Toggles the property of the objects to get selected in the 3D-View + Veksler egenskap på objektene for å bli merket i 3D-visningen - - + + StdCmdToggleVisibility - Standard-View - Standardvisning + Standard-View + Standardvisning - Toggle visibility - Veksle synlighet + Toggle visibility + Veksle synlighet - Toggles visibility - Veksle synlighet + Toggles visibility + Veksle synlighet - - + + StdCmdToolBarMenu - View - Vis + View + Vis - Tool&bars - Verktøy&linjer + Tool&bars + Verktøy&linjer - Toggles this window - Veksler dette vinduet + Toggles this window + Veksler dette vinduet - - + + StdCmdTransform - Edit - Rediger + Edit + Rediger - Transform... - Transformer... + Transform... + Transformer... - Transform the geometry of selected objects - Transformer geometrien av utvalgte objekter + Transform the geometry of selected objects + Transformer geometrien av utvalgte objekter - - + + StdCmdTreeSelection - View - Vis + View + Vis - Go to selection - Gå til valg + Go to selection + Gå til valg - Scroll to first selected item - Bla til første valgte element + Scroll to first selected item + Bla til første valgte element - - + + StdCmdUndo - Edit - Rediger + Edit + Rediger - &Undo - &Angre + &Undo + &Angre - Undo exactly one action - Angre nøyaktig én handling + Undo exactly one action + Angre nøyaktig én handling - - + + StdCmdUserInterface - View - Vis + View + Vis - Dock views - Forankre visninger + Dock views + Forankre visninger - Dock all top-level views - Forankre alle toppnivå visninger + Dock all top-level views + Forankre alle toppnivå visninger - - + + StdCmdViewAxo - Standard-View - Standardvisning + Standard-View + Standardvisning - Axometric - Axometrisk + Axometric + Axometrisk - Set to axometric view - Sett til axometrisk visning + Set to axometric view + Sett til axometrisk visning - - + + StdCmdViewBottom - Standard-View - Standardvisning + Standard-View + Standardvisning - Bottom - Bunn + Bottom + Bunn - Set to bottom view - Sett til bunnvisning + Set to bottom view + Sett til bunnvisning - - + + StdCmdViewCreate - Standard-View - Standardvisning + Standard-View + Standardvisning - Create new view - Lag ny visning + Create new view + Lag ny visning - Creates a new view window for the active document - Lager et nytt visningsvindu for det aktive dokumentet + Creates a new view window for the active document + Lager et nytt visningsvindu for det aktive dokumentet - - + + StdCmdViewExample1 - Standard-View - Standardvisning + Standard-View + Standardvisning - Inventor example #1 - Oppfinnereksempel #1 + Inventor example #1 + Oppfinnereksempel #1 - Shows a 3D texture with manipulator - Viser en 3D-struktur med manipulator + Shows a 3D texture with manipulator + Viser en 3D-struktur med manipulator - - + + StdCmdViewExample2 - Standard-View - Standardvisning + Standard-View + Standardvisning - Inventor example #2 - Oppfinnereksempel #2 + Inventor example #2 + Oppfinnereksempel #2 - Shows spheres and drag-lights - Viser sfærer og dralys + Shows spheres and drag-lights + Viser sfærer og dralys - - + + StdCmdViewExample3 - Standard-View - Standardvisning + Standard-View + Standardvisning - Inventor example #3 - Oppfinnereksempel #3 + Inventor example #3 + Oppfinnereksempel #3 - Shows a animated texture - Viser en animert tekstur + Shows a animated texture + Viser en animert tekstur - - + + StdCmdViewFitAll - Standard-View - Standardvisning + Standard-View + Standardvisning - Fit all - Pass til alle + Fit all + Pass til alle - Fits the whole content on the screen - Tilpasser hele innholdet til skjerm + Fits the whole content on the screen + Tilpasser hele innholdet til skjerm - - + + StdCmdViewFitSelection - Standard-View - Standardvisning + Standard-View + Standardvisning - Fit selection - Pass til valgte + Fit selection + Pass til valgte - Fits the selected content on the screen - Tilpasser det valgte innhold til skjerm + Fits the selected content on the screen + Tilpasser det valgte innhold til skjerm - - + + StdCmdViewFront - Standard-View - Standardvisning + Standard-View + Standardvisning - Front - Front + Front + Front - Set to front view - Sett til frontvisning + Set to front view + Sett til frontvisning - - + + StdCmdViewIvIssueCamPos - Standard-View - Standardvisning + Standard-View + Standardvisning - Issue camera position - Utsted kameraposisjon + Issue camera position + Utsted kameraposisjon - Issue the camera position to the console and to a macro, to easily recall this position - Utsted kameraposisjon til konsoll og en makro for enkelt å hente den fram igjen + Issue the camera position to the console and to a macro, to easily recall this position + Utsted kameraposisjon til konsoll og en makro for enkelt å hente den fram igjen - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standardvisning + Standard-View + Standardvisning - Stereo Interleaved Columns - Stereo oppdelte kolonner + Stereo Interleaved Columns + Stereo oppdelte kolonner - Switch stereo viewing to Interleaved Columns - Bytt stereovisning til oppdelte kolonner + Switch stereo viewing to Interleaved Columns + Bytt stereovisning til oppdelte kolonner - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standardvisning + Standard-View + Standardvisning - Stereo Interleaved Rows - Stereo oppdelte rader + Stereo Interleaved Rows + Stereo oppdelte rader - Switch stereo viewing to Interleaved Rows - Bytt stereovisning til oppdelte rader + Switch stereo viewing to Interleaved Rows + Bytt stereovisning til oppdelte rader - - + + StdCmdViewIvStereoOff - Standard-View - Standardvisning + Standard-View + Standardvisning - Stereo Off - Stereo av + Stereo Off + Stereo av - Switch stereo viewing off - Slå stereo visning av + Switch stereo viewing off + Slå stereo visning av - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standardvisning + Standard-View + Standardvisning - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Bytt stereovisning til quad buffer + Switch stereo viewing to quad buffer + Bytt stereovisning til quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standardvisning + Standard-View + Standardvisning - Stereo red/green - Stereo rød/ grønn + Stereo red/green + Stereo rød/ grønn - Switch stereo viewing to red/green - Bytt stereovisning til rød/ grønn + Switch stereo viewing to red/green + Bytt stereovisning til rød/ grønn - - + + StdCmdViewLeft - Standard-View - Standardvisning + Standard-View + Standardvisning - Left - Venstre + Left + Venstre - Set to left view - Sett til venstrevisning + Set to left view + Sett til venstrevisning - - + + StdCmdViewRear - Standard-View - Standardvisning + Standard-View + Standardvisning - Rear - Bak + Rear + Bak - Set to rear view - Sett til bakvisning + Set to rear view + Sett til bakvisning - - + + StdCmdViewRight - Standard-View - Standardvisning + Standard-View + Standardvisning - Right - Høyre + Right + Høyre - Set to right view - Sett til høyrevisning + Set to right view + Sett til høyrevisning - - + + + StdCmdViewRotateLeft + + Standard-View + Standardvisning + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standardvisning + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standardvisning + Standard-View + Standardvisning - Top - Topp + Top + Topp - Set to top view - Sett til toppvisning + Set to top view + Sett til toppvisning - - + + StdCmdWhatsThis - Help - Hjelp + Help + Hjelp - &What's This? - &Hva er dette? + &What's This? + &Hva er dette? - What's This - Hva er dette + What's This + Hva er dette - - + + StdCmdWindows - Window - Vindu + Window + Vindu - &Windows... - &Vinduer... + &Windows... + &Vinduer... - Windows list - Vindusliste + Windows list + Vindusliste - - + + StdCmdWindowsMenu - Window - Vindu + Window + Vindu - Activates this window - Aktiverer dette vinduet + Activates this window + Aktiverer dette vinduet - - + + StdCmdWorkbench - View - Vis + View + Vis - Workbench - Arbeidsbenk + Workbench + Arbeidsbenk - Switch between workbenches - Bytt mellom arbeidsbenker + Switch between workbenches + Bytt mellom arbeidsbenker - - + + StdOrthographicCamera - Standard-View - Standardvisning + Standard-View + Standardvisning - Orthographic view - Ortografisk visning + Orthographic view + Ortografisk visning - Switches to orthographic view mode - Bytter til ortografisk visningsmodus + Switches to orthographic view mode + Bytter til ortografisk visningsmodus - - + + StdPerspectiveCamera - Standard-View - Standardvisning + Standard-View + Standardvisning - Perspective view - Perspektivvisning + Perspective view + Perspektivvisning - Switches to perspective view mode - Bytter til perspektiv visningsmodus + Switches to perspective view mode + Bytter til perspektiv visningsmodus - - + + StdViewBoxZoom - Standard-View - Standardvisning + Standard-View + Standardvisning - Box zoom - Boks zoom + Box zoom + Boks zoom - - + + StdViewDockUndockFullscreen - Standard-View - Standardvisning + Standard-View + Standardvisning - Document window - Dokument-vinduet + Document window + Dokument-vinduet - Display the active view either in fullscreen, in undocked or docked mode - Vis den aktive visningen enten i fullskjerm, uforankret eller forankret modus + Display the active view either in fullscreen, in undocked or docked mode + Vis den aktive visningen enten i fullskjerm, uforankret eller forankret modus - - + + StdViewScreenShot - Standard-View - Standardvisning + Standard-View + Standardvisning - Save picture... - Lagre bilde... + Save picture... + Lagre bilde... - Creates a screenshot of the active view - Lager en skjermdump av den aktive visningen + Creates a screenshot of the active view + Lager en skjermdump av den aktive visningen - - + + StdViewZoomIn - Standard-View - Standardvisning + Standard-View + Standardvisning - Zoom In - Zoom inn + Zoom In + Zoom inn - - + + StdViewZoomOut - Standard-View - Standardvisning + Standard-View + Standardvisning - Zoom Out - Zoom ut + Zoom Out + Zoom ut - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Fil + &File + &Fil - &Edit - &Rediger + &Edit + &Rediger - Standard views - Standardvisninger + Standard views + Standardvisninger - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Synlighet + Visibility + Synlighet - &View - &Vis + &View + &Vis - &Tools - &Verktøy + &Tools + &Verktøy - &Macro - &Makro + &Macro + &Makro - &Windows - &Vinduer + &Windows + &Vinduer - &On-line help - &Internetthjelp + &On-line help + &Internetthjelp - &Help - &Hjelp + &Help + &Hjelp - File - File + File + File - Macro - Makro + Macro + Makro - View - Vis + View + Vis - Special Ops - Spesielle operasjoner + Special Ops + Spesielle operasjoner - - + + testClass - test - test + test + test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisOppgavePanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Laget for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisOppgavePanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Laget for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Velg stil for oppgavepanelet + Choose the style of the Task Panel + Velg stil for oppgavepanelet - Default - Standard + Default + Standard - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_pl.ts b/src/Gui/Language/FreeCAD_pl.ts index 0a428556b..21d9889de 100644 --- a/src/Gui/Language/FreeCAD_pl.ts +++ b/src/Gui/Language/FreeCAD_pl.ts @@ -1,5476 +1,5894 @@ - - + + Angle - Form - Form + Form + Form - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Przyciąganie do kąta + Angle Snap + Przyciąganie do kąta - - 1 ° - + + 1 ° + - - 2 ° - + + 2 ° + - - 5 ° - + + 5 ° + - - 10 ° - 10° + + 10 ° + 10° - - 20 ° - 20° + + 20 ° + 20° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - żaden + none + żaden - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Dodaj + + + Remove + Usuń + + + Move up + Przesuń w górę + + + Move down + Przenieś w dół + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Naciśnij lewy przycisk myszy + Press left mouse button + Naciśnij lewy przycisk myszy - Press SHIFT and middle mouse button - Press SHIFT and middle mouse button + Press SHIFT and middle mouse button + Press SHIFT and middle mouse button - Press middle mouse button - Naciśnij środkowy przycisk myszy + Press middle mouse button + Naciśnij środkowy przycisk myszy - Scroll middle mouse button - Scroll middle mouse button + Scroll middle mouse button + Scroll middle mouse button - - + + Gui::CADNavigationStyle - Press left mouse button - Naciśnij lewy przycisk myszy + Press left mouse button + Naciśnij lewy przycisk myszy - Press middle mouse button - Naciśnij środkowy przycisk myszy + Press middle mouse button + Naciśnij środkowy przycisk myszy - Press left and middle mouse button - Naciśnij lewy i środkowy przycisk myszy + Press left and middle mouse button + Naciśnij lewy i środkowy przycisk myszy - Scroll middle mouse button - Scroll middle mouse button + Scroll middle mouse button + Scroll middle mouse button - - + + Gui::Command - Standard - Standardowy + Standard + Standardowy - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Anuluj + &Cancel + &Anuluj - - + + Gui::ControlSingleton - Task panel - Panel zadań + Task panel + Panel zadań - - + + Gui::Dialog::AboutApplication - About - O programie + About + O programie - Revision number - Numer wersji + Revision number + Numer wersji - Version - Wersja + Version + Wersja - OK - OK + OK + OK - - + + - Release date - Data wydania + Release date + Data wydania - Platform - Platform + Platform + Platform - License... - License... + License... + License... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Button %1 + Button %1 + Button %1 - Out Of Range - Out Of Range + Out Of Range + Out Of Range - - + + Gui::Dialog::CommandModel - Commands - Polecenia + Commands + Polecenia - - + + Gui::Dialog::DemoMode - View Turntable - View Turntable + View Turntable + View Turntable - Speed - Szybkość + Speed + Szybkość - Maximum - Maksymalny + Maximum + Maksymalny - Minimum - Minimalny + Minimum + Minimalny - Fullscreen - Pełny ekran + Fullscreen + Pełny ekran - Enable timer - Włącz czasomierz + Enable timer + Włącz czasomierz - s - s + s + s - Angle - Kąt + Angle + Kąt + + + 90° + 90 ° + + + -90° + -90 ° - 90° - 90 ° + Play + Odtwórz - -90° - -90 ° + Stop + Zatrzymaj - Play - Odtwórz + Close + Zamknij - - Stop - Zatrzymaj - - - Close - Zamknij - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Wybierz Okno + Choose Window + Wybierz Okno - &Activate - &Aktywuj + &Activate + &Aktywuj - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Anuluj + &Cancel + &Anuluj - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Okna + Windows + Okna - - + + Gui::Dialog::DlgAuthorization - Authorization - Autoryzacja + Authorization + Autoryzacja - &OK - &OK + &OK + &OK - &Cancel - &Anuluj + &Cancel + &Anuluj - Password: - Hasło: + Password: + Hasło: - User name: - Nazwa użytkownika: + User name: + Nazwa użytkownika: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Wybierz ikonę + Choose Icon + Wybierz ikonę - OK - OK + OK + OK - Cancel - Anuluj + Cancel + Anuluj - Add icons... - Add icons... + Add icons... + Add icons... - - + + Gui::Dialog::DlgCustomActions - Macros - Makra + Macros + Makra - Setup Custom Macros - Ustawienia niestandardowe makra + Setup Custom Macros + Ustawienia niestandardowe makra - Macro: - Makro: + Macro: + Makro: - ... - ... + ... + ... - Pixmap - Obrazek rastrowy + Pixmap + Obrazek rastrowy - Accelerator: - Skrót klawiszowy: + Accelerator: + Skrót klawiszowy: - What's this: - Co to jest: + What's this: + Co to jest: - Status text: - Tekst stanu: + Status text: + Tekst stanu: - Tool tip: - Podpowiedź narzędzia: + Tool tip: + Podpowiedź narzędzia: - Menu text: - Tekst menu: + Menu text: + Tekst menu: - Add - Dodaj + Add + Dodaj - Remove - Usuń + Remove + Usuń - Replace - Zamień + Replace + Zamień - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ikony + Icons + Ikony - Macros - Makra + Macros + Makra - No macro - Brak makra + No macro + Brak makra - No macros found. - Makra nie znalezione. + No macros found. + Makra nie znalezione. - Macro not found - Nie znaleziono makra + Macro not found + Nie znaleziono makra - Sorry, couldn't find macro file '%1'. - Przepraszam, ale nie odnaleziono pliku makra '%1'. + Sorry, couldn't find macro file '%1'. + Przepraszam, ale nie odnaleziono pliku makra '%1'. - Empty macro - Puste makro + Empty macro + Puste makro - Please specify the macro first. - Najpierw określ makro. + Please specify the macro first. + Najpierw określ makro. - Empty text - Pusty tekst + Empty text + Pusty tekst - Please specify the menu text first. - Podaj najpierw tekst menu. + Please specify the menu text first. + Podaj najpierw tekst menu. - No item selected - Nie zaznaczono obiektu + No item selected + Nie zaznaczono obiektu - Please select a macro item first. - Wybierz najpierw element makro. + Please select a macro item first. + Wybierz najpierw element makro. - - + + Gui::Dialog::DlgCustomCommands - Commands - Polecenia + Commands + Polecenia - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategoria + Category + Kategoria - Icon - Ikona + Icon + Ikona - Command - Polecenie + Command + Polecenie - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Klawiatura + Keyboard + Klawiatura - Description: - Opis: + Description: + Opis: - &Category: - &Kategoria: + &Category: + &Kategoria: - C&ommands: - &Polecenia: + C&ommands: + &Polecenia: - Current shortcut: - Bieżący skrót: + Current shortcut: + Bieżący skrót: - Press &new shortcut: - Naciśnij &nowy klawisz skrótu: + Press &new shortcut: + Naciśnij &nowy klawisz skrótu: - Currently assigned to: - Aktualnie przypisany do: + Currently assigned to: + Aktualnie przypisany do: - &Assign - &Przypisz + &Assign + &Przypisz - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Resetuj + &Reset + &Resetuj - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Przywróć wszy&stko + Re&set All + Przywróć wszy&stko - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ikona + Icon + Ikona - Command - Polecenie + Command + Polecenie - none - żaden + none + żaden - Multiple defined shortcut - Skrót zdefiniowany wielokrotnie + Multiple defined shortcut + Skrót zdefiniowany wielokrotnie - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Skrót '%1' jest zdefiniowany więcej niż raz. Może to prowadzić do nieoczekiwanego zachowania. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Skrót '%1' jest zdefiniowany więcej niż raz. Może to prowadzić do nieoczekiwanego zachowania. - Already defined shortcut - Skrót już jest zdefiniowany + Already defined shortcut + Skrót już jest zdefiniowany - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Skrót '%1' jest już przypisany do '%2'. Proszę określić inny skrót. + Skrót '%1' jest już przypisany do '%2'. Proszę określić inny skrót. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Paski przybornika + Toolbox bars + Paski przybornika - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Paski narzędzi + Toolbars + Paski narzędzi - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Uwaga:</span> Zmiany stają się aktywne po następnym załadowanie odpowiedniego warsztatu </p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Uwaga:</span> Zmiany stają się aktywne po następnym załadowanie odpowiedniego warsztatu </p></body></html> - Move right - Przesuń w prawo + Move right + Przesuń w prawo - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> - Move left - Przesuń w lewo + Move left + Przesuń w lewo - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> - Move down - Przenieś w dół + Move down + Przenieś w dół - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> - Move up - Przesuń w górę + Move up + Przesuń w górę - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> - New... - Nowy... + New... + Nowy... - Rename... - Zmień nazwę... + Rename... + Zmień nazwę... - Delete - Usuń + Delete + Usuń - Icon - Ikona + Icon + Ikona - Command - Polecenie + Command + Polecenie - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Nowy pasek narzędzi + New toolbar + Nowy pasek narzędzi - Toolbar name: - Nazwa paska narzędzi: + Toolbar name: + Nazwa paska narzędzi: - Duplicated name - Powielona nazwa + Duplicated name + Powielona nazwa - The toolbar name '%1' is already used - Nazwa paska narzędzi '%1' jest już używana + The toolbar name '%1' is already used + Nazwa paska narzędzi '%1' jest już używana - Rename toolbar - Zmień nazwę paska narzędzi + Rename toolbar + Zmień nazwę paska narzędzi - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Dostosuj + Customize + Dostosuj - &Help - &Pomoc + &Help + &Pomoc - &Close - &Zamknij + &Close + &Zamknij - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Buttons + Buttons + Buttons - Clear - Wyczyść + Clear + Wyczyść - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Właściwości wyświetlania + Display properties + Właściwości wyświetlania - Display - Wyświetlanie + Display + Wyświetlanie - Transparency: - Przezroczystość: + Transparency: + Przezroczystość: - Line width: - Szerokość linii: + Line width: + Szerokość linii: - Point size: - Wielkość punktu: + Point size: + Wielkość punktu: - Material - Materiał + Material + Materiał - ... - ... + ... + ... - Close - Zamknij + Close + Zamknij - Viewing mode - Tryb widoku + Viewing mode + Tryb widoku - Display mode: - Tryb wyświetlania: + Display mode: + Tryb wyświetlania: - Plot mode: - Tryb kreślenia: + Plot mode: + Tryb kreślenia: - - + + - Line transparency: - Line transparency: + Line transparency: + Line transparency: - Line color: - Kolor linii: + Line color: + Kolor linii: - Shape color: - Kolor kształtu: + Shape color: + Kolor kształtu: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Edytor + Editor + Edytor - Options - Opcje + Options + Opcje - Enable line numbers - Włącz numery linii + Enable line numbers + Włącz numery linii - Enable folding - Włącz składanie + Enable folding + Włącz składanie - Indentation - Wcięcie + Indentation + Wcięcie - Insert spaces - Wstaw spacje + Insert spaces + Wstaw spacje - Tab size: - Rozmiar karty: + Tab size: + Rozmiar karty: - Indent size: - Rozmiar wcięcia: + Indent size: + Rozmiar wcięcia: - Keep tabs - Zachowaj karty + Keep tabs + Zachowaj karty - Display Items - Pokaż elementy + Display Items + Pokaż elementy - Family: - Rodzina: + Family: + Rodzina: - Size: - Rozmiar: + Size: + Rozmiar: - Preview: - Podgląd: + Preview: + Podgląd: - - + + - - + + Gui::Dialog::DlgGeneral - General - Ogólne + General + Ogólne - Start up - Uruchamianie + Start up + Uruchamianie - Enable splash screen at start up - Włącz ekran powitalny przy uruchamianiu + Enable splash screen at start up + Włącz ekran powitalny przy uruchamianiu - Switch to tab of report window: - Przełącz na kartę okna raportu: + Switch to tab of report window: + Przełącz na kartę okna raportu: - Auto load module after start up: - Po uruchomieniu,ładuj moduł automatycznie: + Auto load module after start up: + Po uruchomieniu,ładuj moduł automatycznie: - Language - Język + Language + Język - Change language: - Zmień język: + Change language: + Zmień język: - Main window - Okno główne + Main window + Okno główne - Size of recent file list - Rozmiar listy ostatnich plików + Size of recent file list + Rozmiar listy ostatnich plików - Window style: - Styl okna: + Window style: + Styl okna: - Size of toolbar icons: - Size of toolbar icons: + Size of toolbar icons: + Size of toolbar icons: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Default (%1 x %1) + Default (%1 x %1) + Default (%1 x %1) - Small (%1 x %1) - Small (%1 x %1) + Small (%1 x %1) + Small (%1 x %1) - Large (%1 x %1) - Large (%1 x %1) + Large (%1 x %1) + Large (%1 x %1) - Extra large (%1 x %1) - Extra large (%1 x %1) + Extra large (%1 x %1) + Extra large (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Wejście + Input + Wejście - OK - OK + OK + OK - Cancel - Anuluj + Cancel + Anuluj - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Inspektor sceny + Scene Inspector + Inspektor sceny - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Wykonaj makro + Execute macro + Wykonaj makro - Macro name: - Nazwa Makra: + Macro name: + Nazwa Makra: - Macro destination: - Przeznaczenia makra: + Macro destination: + Przeznaczenia makra: - Execute - Wykonaj + Execute + Wykonaj - Close - Zamknij + Close + Zamknij - Create - Utwórz + Create + Utwórz - Delete - Usuń + Delete + Usuń - Edit - Edytuj + Edit + Edytuj - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makra + Macros + Makra - Macro file - Plik makra + Macro file + Plik makra - Enter a file name, please: - Proszę wprowadzić nazwę pliku: + Enter a file name, please: + Proszę wprowadzić nazwę pliku: - Existing file - Istniejący plik + Existing file + Istniejący plik - '%1'. + '%1'. This file already exists. - '%1'. Ten plik już istnieje. + '%1'. Ten plik już istnieje. - Delete macro - Usuń makro + Delete macro + Usuń makro - Do you really want to delete the macro '%1'? - Czy na pewno chcesz usunąć makro '%1'? + Do you really want to delete the macro '%1'? + Czy na pewno chcesz usunąć makro '%1'? - Cannot create file - Nie można utworzyć pliku + Cannot create file + Nie można utworzyć pliku - Creation of file '%1' failed. - Tworzenie pliku %1 nie powiodło się. + Creation of file '%1' failed. + Tworzenie pliku %1 nie powiodło się. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Rejestrowanie makra + Macro recording + Rejestrowanie makra - Macro name: - Nazwa Makra: + Macro name: + Nazwa Makra: - Stop - Zatrzymaj + Stop + Zatrzymaj - Cancel - Anuluj + Cancel + Anuluj - Macro path: - Ścieżka do makro: + Macro path: + Ścieżka do makro: - ... - ... + ... + ... - Record - Nagranie + Record + Nagranie - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Rejestrator makr + Macro recorder + Rejestrator makr - Specify first a place to save. - Najpierw określ miejsce zapisu. + Specify first a place to save. + Najpierw określ miejsce zapisu. - Existing macro - Istniejące makro + Existing macro + Istniejące makro - The macro '%1' already exists. Do you want to overwrite? - Makro '%1' już istnieje. Czy chcesz zastąpić? + The macro '%1' already exists. Do you want to overwrite? + Makro '%1' już istnieje. Czy chcesz zastąpić? - The macro directory doesn't exist. Please, choose another one. - The macro directory doesn't exist. Please, choose another one. + The macro directory doesn't exist. Please, choose another one. + The macro directory doesn't exist. Please, choose another one. - Choose macro directory - Wybierz folder dla makro + Choose macro directory + Wybierz folder dla makro - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Właściwości materiału + Material properties + Właściwości materiału - &Close - &Zamknij + &Close + &Zamknij - Alt+C - Alt+C + Alt+C + Alt+C - Material - Materiał + Material + Materiał - Diffuse color: - Diffuse color: + Diffuse color: + Diffuse color: - Specular color: - Specular color: + Specular color: + Specular color: - Shininess: - Połysk: + Shininess: + Połysk: - % - % + % + % - Ambient color: - Kolor otoczenia: + Ambient color: + Kolor otoczenia: - - + + - Emissive color: - Emissive color: + Emissive color: + Emissive color: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Pomoc on-line + On-line help + Pomoc on-line - Help viewer - Przeglądarka pomocy + Help viewer + Przeglądarka pomocy - Location of start page - Lokalizacja strony początkowej + Location of start page + Lokalizacja strony początkowej - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - Pliki HTML (*. html *. htm) + HTML files (*.html *.htm) + Pliki HTML (*. html *. htm) - Access denied - Brak dostępu + Access denied + Brak dostępu - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Brak dostępu do "%1" Podaj inny katalog, proszę. + Brak dostępu do "%1" Podaj inny katalog, proszę. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Edytor parametrów + Parameter Editor + Edytor parametrów - Save to disk - Zapisz na dysk + Save to disk + Zapisz na dysk - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Zamknij + &Close + &Zamknij - - + + Gui::Dialog::DlgParameterImp - Group - Grupa + Group + Grupa - Name - Nazwa + Name + Nazwa - Type - Typ + Type + Typ - Value - Wartość + Value + Wartość - User parameter - Parametr użytkownika + User parameter + Parametr użytkownika - Invalid input - Niepoprawne dane wejściowe + Invalid input + Niepoprawne dane wejściowe - Invalid key name '%1' - Nieprawidłowa nazwa klucza '%1' + Invalid key name '%1' + Nieprawidłowa nazwa klucza '%1' - System parameter - Parametr systemu + System parameter + Parametr systemu - - + + Gui::Dialog::DlgPreferences - Preferences - Preferencje + Preferences + Preferencje - &Help - &Pomoc + &Help + &Pomoc - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &OK + &OK + &OK - &Apply - &Zastosuj + &Apply + &Zastosuj - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Anuluj + &Cancel + &Anuluj - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Nieprawidłowy parametr + Wrong parameter + Nieprawidłowy parametr - - + + Gui::Dialog::DlgProjectInformation - Project information - Informacje o projekcie + Project information + Informacje o projekcie - Information - Informacje + Information + Informacje - &Name: - &Nazwa: + &Name: + &Nazwa: - Commen&t: - Komen&tarz: + Commen&t: + Komen&tarz: - Path: - Ścieżka: + Path: + Ścieżka: - &Last modified by: - &Ostatnio zmodyfikowan6 przez: + &Last modified by: + &Ostatnio zmodyfikowan6 przez: - Created &by: - Utworzony przez: + Created &by: + Utworzony przez: - Com&pany: - &Firma: + Com&pany: + &Firma: - Last &modification date: - Data ostatniej &modyfikacji: + Last &modification date: + Data ostatniej &modyfikacji: - Creation &date: - &Data utworzenia: + Creation &date: + &Data utworzenia: - &OK - &OK + &OK + &OK - &Cancel - &Anuluj + &Cancel + &Anuluj - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project utility + Project utility + Project utility - Extract project - Extract project + Extract project + Extract project - Source - Source + Source + Source - Project file (*.fcstd) - Project file (*.fcstd) + Project file (*.fcstd) + Project file (*.fcstd) - Destination - Destination + Destination + Destination - Extract - Extract + Extract + Extract - Create project - Create project + Create project + Create project - Document.xml - Document.xml + Document.xml + Document.xml - Create - Utwórz + Create + Utwórz - Load project file after creation - Load project file after creation + Load project file after creation + Load project file after creation - Empty source - Empty source + Empty source + Empty source - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Empty destination + Empty destination + Empty destination - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - Okno wyjściowe + Output window + Okno wyjściowe - Output - Wyjście + Output + Wyjście - Record log messages - Rejestruj wiadomości dziennika + Record log messages + Rejestruj wiadomości dziennika - Record warnings - Rejestruj ostrzeżenia + Record warnings + Rejestruj ostrzeżenia - Record error messages - Rejestruj komunikaty błędów + Record error messages + Rejestruj komunikaty błędów - Colors - Kolory + Colors + Kolory - Normal messages: - Zwykłe wiadomości: + Normal messages: + Zwykłe wiadomości: - Log messages: - Wiadomości dziennika: + Log messages: + Wiadomości dziennika: - Warnings: - Ostrzeżenia: + Warnings: + Ostrzeżenia: - Errors: - Błędy: + Errors: + Błędy: - - + + - Redirect internal Python errors to report view - Redirect internal Python errors to report view + Redirect internal Python errors to report view + Redirect internal Python errors to report view - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - Uruchamianie zewnętrznego programu + Running external program + Uruchamianie zewnętrznego programu - TextLabel - TextLabel + TextLabel + TextLabel - Advanced >> - Zaawansowane>> + Advanced >> + Zaawansowane>> - ... - ... + ... + ... - Accept changes - Potwierdź zmiany + Accept changes + Potwierdź zmiany - Discard changes - Porzuć zmiany + Discard changes + Porzuć zmiany - Abort program - Wyjdź z programu + Abort program + Wyjdź z programu - Help - Pomoc + Help + Pomoc - Select a file - Wybierz plik + Select a file + Wybierz plik - - + + Gui::Dialog::DlgSettings3DView - 3D View - Widok 3D + 3D View + Widok 3D - 3D View settings - Ustawienia widoku 3D + 3D View settings + Ustawienia widoku 3D - Show coordinate system in the corner - Pokaż w rogu układu współrzędnych + Show coordinate system in the corner + Pokaż w rogu układu współrzędnych - Show counter of frames per second - Pokaż licznik klatek na sekundę + Show counter of frames per second + Pokaż licznik klatek na sekundę - Enable animation - Włącz animację + Enable animation + Włącz animację - Enable anti-aliasing (slower) - Włącz wygładzanie (wolniejsze) + Enable anti-aliasing (slower) + Włącz wygładzanie (wolniejsze) - Eye to eye distance for stereo modes: - Odległość pomiędzy oczami dla trybów stereo: + Eye to eye distance for stereo modes: + Odległość pomiędzy oczami dla trybów stereo: - Camera type - Typ projekcji + Camera type + Typ projekcji - Orthographic rendering - Rzutowanie równoległe + Orthographic rendering + Rzutowanie równoległe - Perspective rendering - Rzutowanie perspektywiczne + Perspective rendering + Rzutowanie perspektywiczne - - + + - 3D Navigation - Nawigacja 3D + 3D Navigation + Nawigacja 3D - Mouse... - Mysz... + Mouse... + Mysz... - Intensity of backlight - Intensywność podświetlenia + Intensity of backlight + Intensywność podświetlenia - Enable backlight color - Włącz podświetlenie + Enable backlight color + Włącz podświetlenie - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigation + %1 navigation + %1 navigation - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Kolor modelu + Color model + Kolor modelu - &Gradient: - &Gradient: + &Gradient: + &Gradient: - red-yellow-green-cyan-blue - czerwono-żółto-zielono-błękitny-niebieski + red-yellow-green-cyan-blue + czerwono-żółto-zielono-błękitny-niebieski - blue-cyan-green-yellow-red - niebiesko-błękitny-zielono-żółto-czerwony + blue-cyan-green-yellow-red + niebiesko-błękitny-zielono-żółto-czerwony - white-black - biało-czarne + white-black + biało-czarne - black-white - czarno-biały + black-white + czarno-biały - Visibility - Widoczność + Visibility + Widoczność - Out g&rayed - Out g&rayed + Out g&rayed + Out g&rayed - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Out &invisible + Out &invisible + Out &invisible - Alt+I - Alt+l + Alt+I + Alt+l - Style - Styl + Style + Styl - &Zero - &Zero + &Zero + &Zero - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Flow + &Flow + &Flow - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Anuluj + &Cancel + &Anuluj - Parameter range - zakres parametru + Parameter range + zakres parametru - Mi&nimum: - Mi&nimum: + Mi&nimum: + Mi&nimum: - Ma&ximum: - Mak&simum: + Ma&ximum: + Mak&simum: - &Labels: - &Etykiety: + &Labels: + &Etykiety: - &Decimals: - &Miejsca dziesiętne: + &Decimals: + &Miejsca dziesiętne: - - + + - Color-gradient settings - Ustawienia kolorów gradientu + Color-gradient settings + Ustawienia kolorów gradientu - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Nieprawidłowy parametr + Wrong parameter + Nieprawidłowy parametr - The maximum value must be higher than the minimum value. - Wartość maksymalna musi być wyższa niż wartość minimalna. + The maximum value must be higher than the minimum value. + Wartość maksymalna musi być wyższa niż wartość minimalna. - - + + Gui::Dialog::DlgSettingsDocument - Document - Dokument + Document + Dokument - General - Ogólne + General + Ogólne - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Poziom kompresji zapisu dokumentu (0 = brak, 9 = najwyższy, 3 = domyślny) + Poziom kompresji zapisu dokumentu (0 = brak, 9 = najwyższy, 3 = domyślny) - Create new document at start up - Utwórz nowy dokument w trakcie uruchamiania + Create new document at start up + Utwórz nowy dokument w trakcie uruchamiania - Storage - Storage + Storage + Storage - Saving transactions (Auto-save) - Zapisywania transakcji (Autozapis) + Saving transactions (Auto-save) + Zapisywania transakcji (Autozapis) - Discard saved transaction after saving document - Discard saved transaction after saving document + Discard saved transaction after saving document + Discard saved transaction after saving document - Save thumbnail into project file when saving document - Podczas zapisywania dokumentu zapisz miniaturę do pliku projektu + Save thumbnail into project file when saving document + Podczas zapisywania dokumentu zapisz miniaturę do pliku projektu - Create up to backup files when resaving document - Create up to backup files when resaving document + Create up to backup files when resaving document + Create up to backup files when resaving document - Document objects - Obiekty dokumentu + Document objects + Obiekty dokumentu - Allow duplicate object labels in one document - Allow duplicate object labels in one document + Allow duplicate object labels in one document + Allow duplicate object labels in one document - Maximum Undo/Redo steps - Maximum Undo/Redo steps + Maximum Undo/Redo steps + Maximum Undo/Redo steps - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Tekst + Text + Tekst - Bookmark - Zakładka + Bookmark + Zakładka - Breakpoint - Pułapka/Breakpoint + Breakpoint + Pułapka/Breakpoint - Keyword - Słowo kluczowe + Keyword + Słowo kluczowe - Comment - Komentarz + Comment + Komentarz - Block comment - Komentarz blokowy + Block comment + Komentarz blokowy - Number - Liczba + Number + Liczba - String - Ciąg + String + Ciąg - Character - Znak + Character + Znak - Class name - Nazwa klasy + Class name + Nazwa klasy - Define name - Określ nazwę + Define name + Określ nazwę - Operator - Operator + Operator + Operator - Python output - Wyjście Pythona + Python output + Wyjście Pythona - Python error - Błąd Pythona + Python error + Błąd Pythona - Items - Elementy + Items + Elementy - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Ustawienia obrazka + Image settings + Ustawienia obrazka - Image properties - Właściwości obrazka + Image properties + Właściwości obrazka - Back&ground: - &Tło: + Back&ground: + &Tło: - Current - Bieżący + Current + Bieżący - White - Biały + White + Biały - Black - Czarny + Black + Czarny - Transparent - Przezroczysty + Transparent + Przezroczysty - Image dimensions - Wymiary obrazu + Image dimensions + Wymiary obrazu - Pixel - Piksel + Pixel + Piksel - &Width: - &Szerokość: + &Width: + &Szerokość: - Current screen - Bieżący ekran + Current screen + Bieżący ekran - Icon 32 x 32 - Ikona 32 x 32 + Icon 32 x 32 + Ikona 32 x 32 - Icon 64 x 64 - Ikona 64 x 64 + Icon 64 x 64 + Ikona 64 x 64 - Icon 128 x 128 - Ikona 128 x 128 + Icon 128 x 128 + Ikona 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standardowe wymiary: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Wysokość: - Standard sizes: - Standardowe wymiary: + Aspect ratio: + Proporcje obrazu: - &Height: - &Wysokość: + &Screen + &Ekran - Aspect ratio: - Proporcje obrazu: + Alt+S + Alt+S - &Screen - &Ekran + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Komentarz do obrazka - Alt+1 - Alt+1 + Insert MIBA + Wstaw MIBA - Image comment - Komentarz do obrazka + Insert comment + Wstaw komentarz - - Insert MIBA - Wstaw MIBA - - - Insert comment - Wstaw komentarz - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Makro + Macro + Makro - Macro recording settings - Ustawienia nagrywania makra + Macro recording settings + Ustawienia nagrywania makra - Logging Commands - Rejestrowanie poleceń + Logging Commands + Rejestrowanie poleceń - Show script commands in python console - Pokaż polecenia skryptu w konsoli Pythona + Show script commands in python console + Pokaż polecenia skryptu w konsoli Pythona - Log all commands issued by menus to file: - Log all commands issued by menus to file: + Log all commands issued by menus to file: + Log all commands issued by menus to file: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Polecenia Gui + Gui commands + Polecenia Gui - Recording GUI commands - Nagrywanie poleceń GUI + Recording GUI commands + Nagrywanie poleceń GUI - Record as comment - Zarejestruj jako komentarz + Record as comment + Zarejestruj jako komentarz - Macro path - Ścieżka makra + Macro path + Ścieżka makra - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Jednostki + Units + Jednostki - Units settings - Jednostki-Ustawienia + Units settings + Jednostki-Ustawienia - Standard (mm/kg/s/degree) - Standardowe (mm/kg/s/stopień) + Standard (mm/kg/s/degree) + Standardowe (mm/kg/s/stopień) - MKS (m/kg/s/degree) - MKS (m/kg/s/degree) + MKS (m/kg/s/degree) + MKS (m/kg/s/degree) - Magnitude - Magnitude + Magnitude + Magnitude - Unit - Jednostka + Unit + Jednostka - User system: - User system: + User system: + User system: - Imperial (in/lb) - Imperial (in/lb) + Imperial (in/lb) + Imperial (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Kolory + Colors + Kolory - Selection - Zaznaczanie + Selection + Zaznaczanie - Enable selection highlighting - Włącz podświetlanie zaznaczenia + Enable selection highlighting + Włącz podświetlanie zaznaczenia - Enable preselection highlighting - Enable preselection highlighting + Enable preselection highlighting + Enable preselection highlighting - Background color - Kolor tła + Background color + Kolor tła - Middle color - Kolor pośredni + Middle color + Kolor pośredni - Color gradient - Gradient kolorów + Color gradient + Gradient kolorów - Simple color - Pojedynczy kolor + Simple color + Pojedynczy kolor - Default colors - Default colors + Default colors + Default colors - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Podpowiedź dnia + Tip of the day + Podpowiedź dnia - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - &Show tips at start up - Pokaż porady przy uruchamianiu + &Show tips at start up + Pokaż porady przy uruchamianiu - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Następna porada + &Next Tip + &Następna porada - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Zamknij + &Close + &Zamknij - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Pobieranie zakończone niepowodzeniem: %1 + Pobieranie zakończone niepowodzeniem: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Jeśli chcesz dowiedzieć się więcej o FreeCAD musisz udać się do %1 lub nacisnąć Pomoc w menu Pomoc. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Jeśli chcesz dowiedzieć się więcej o FreeCAD musisz udać się do %1 lub nacisnąć Pomoc w menu Pomoc. - - + + Gui::Dialog::DockablePlacement - Placement - Umiejscowienie + Placement + Umiejscowienie - - + + Gui::Dialog::DownloadDialog - Canceled. - Canceled. + Canceled. + Canceled. - - + + Download + + + + Cancel + Anuluj + + + Close + Zamknij + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Pobieranie nie powiodło się:%1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Add icon + Add icon + Add icon - - + + Gui::Dialog::InputVector - Input vector - Input vector + Input vector + Input vector - Vector - Wektor + Vector + Wektor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Przyciski myszy + Mouse buttons + Przyciski myszy - Configuration - Configuration + Configuration + Configuration - Selection: - Selection: + Selection: + Selection: - Panning - Panning + Panning + Panning - Rotation: - Obrót: + Rotation: + Obrót: - Zooming: - Powiększanie: + Zooming: + Powiększanie: - - + + Gui::Dialog::ParameterGroup - Expand - Rozwiń + Expand + Rozwiń - Add sub-group - Dodaj podgrupę + Add sub-group + Dodaj podgrupę - Remove group - Usuń grupę + Remove group + Usuń grupę - Rename group - Zmień nazwę grupy + Rename group + Zmień nazwę grupy - Export parameter - Eksportuj parametr + Export parameter + Eksportuj parametr - Import parameter - Importuj parametr + Import parameter + Importuj parametr - Collapse - Zwiń + Collapse + Zwiń - Do really want to remove this parameter group? - Czy na pewno chcesz usunąć ten parametr grupy? + Do really want to remove this parameter group? + Czy na pewno chcesz usunąć ten parametr grupy? - Existing sub-group - Istniejąca podgrupa + Existing sub-group + Istniejąca podgrupa - The sub-group '%1' already exists. - Podgrupa '%1' już istnieje. + The sub-group '%1' already exists. + Podgrupa '%1' już istnieje. - Export parameter to file - Eksportowanie parametru do pliku + Export parameter to file + Eksportowanie parametru do pliku - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Importuj parametr z pliku + Import parameter from file + Importuj parametr z pliku - Import Error - Błąd importu + Import Error + Błąd importu - Reading from '%1' failed. - Odczyt z '%1' nie powiódł się. + Reading from '%1' failed. + Odczyt z '%1' nie powiódł się. - - + + Gui::Dialog::ParameterValue - Change value - Zmień wartość + Change value + Zmień wartość - Remove key - Usuń klucz + Remove key + Usuń klucz - Rename key - Zmień nazwę klucza + Rename key + Zmień nazwę klucza - New - Nowy + New + Nowy - New string item - Nowy obiekt ciągu znaków + New string item + Nowy obiekt ciągu znaków - New float item - Nowy obiekt liczby zmiennoprzecinkowej + New float item + Nowy obiekt liczby zmiennoprzecinkowej - New integer item - Nowy obiekt liczby całkowitej + New integer item + Nowy obiekt liczby całkowitej - New unsigned item - New unsigned item + New unsigned item + New unsigned item - New Boolean item - Nowy obiekt Boolean + New Boolean item + Nowy obiekt Boolean - Existing item - Istniejący element + Existing item + Istniejący element - The item '%1' already exists. - Element '%1' już istnieje. + The item '%1' already exists. + Element '%1' już istnieje. - - + + Gui::Dialog::Placement - Placement - Umiejscowienie + Placement + Umiejscowienie - OK - OK + OK + OK - Translation: - Przesunięcie: + Translation: + Przesunięcie: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Obrót: + Rotation: + Obrót: - Angle: - Kąt: + Angle: + Kąt: - Axis: - Oś: + Axis: + Oś: - Center: - Center: + Center: + Center: - Pitch: - Pitch: + Pitch: + Pitch: - Roll: - Roll: + Roll: + Roll: - Yaw: - Yaw: + Yaw: + Yaw: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Euler angles + Euler angles + Euler angles - Apply placement changes immediately - Apply placement changes immediately + Apply placement changes immediately + Apply placement changes immediately - Apply incremental changes to object placement - Apply incremental changes to object placement + Apply incremental changes to object placement + Apply incremental changes to object placement - Apply - Zastosuj + Apply + Zastosuj - Reset - Reset + Reset + Reset - Close - Zamknij + Close + Zamknij - - + + Gui::Dialog::PrintModel - Button - Button + Button + Button - Command - Polecenie + Command + Polecenie - - + + Gui::Dialog::SceneInspector - Dialog - Okno dialogowe + Dialog + Okno dialogowe - Close - Zamknij + Close + Zamknij - Refresh - Odśwież + Refresh + Odśwież - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor Tree + Inventor Tree + Inventor Tree - Nodes - Węzły + Nodes + Węzły - - + + Gui::Dialog::TextureMapping - Texture - Tekstura + Texture + Tekstura - Texture mapping - Texture mapping + Texture mapping + Texture mapping - Global - Global + Global + Global - Environment - Environment + Environment + Environment - Image files (%1) - Image files (%1) + Image files (%1) + Image files (%1) - No image - No image + No image + No image - The specified file is not a valid image file. - Określony plik nie jest prawidłowym plikiem obrazu. + The specified file is not a valid image file. + Określony plik nie jest prawidłowym plikiem obrazu. - No 3d view - Brak widoku 3D + No 3d view + Brak widoku 3D - No active 3d view found. - No active 3d view found. + No active 3d view found. + No active 3d view found. - - + + Gui::Dialog::Transform - Cancel - Anuluj + Cancel + Anuluj - Transform - Przekształć + Transform + Przekształć - - + + Gui::DlgTreeWidget - Dialog - Okno dialogowe + Dialog + Okno dialogowe - Items - Elementy + Items + Elementy - OK - OK + OK + OK - Cancel - Anuluj + Cancel + Anuluj - - + + - - + + Gui::DockWnd::CombiView - CombiView - MultiWidok + CombiView + MultiWidok - Project - Projekt + Project + Projekt - Tasks - Zadania + Tasks + Zadania - - + + Gui::DockWnd::HelpView - Previous - Poprzedni + Previous + Poprzedni - Next - Następny + Next + Następny - Home - Domowy + Home + Domowy - Open - Otwórz + Open + Otwórz - Open file - Otwórz plik + Open file + Otwórz plik - All HTML files (*.html *.htm) - Wszystkie pliki HTML (*. html *. htm) + All HTML files (*.html *.htm) + Wszystkie pliki HTML (*. html *. htm) - External browser - Zewnętrzna przeglądarka + External browser + Zewnętrzna przeglądarka - No external browser found. Specify in preferences, please - Nie znaleziono zewnętrznej przeglądarki. Określ ją w preferencjach, + No external browser found. Specify in preferences, please + Nie znaleziono zewnętrznej przeglądarki. Określ ją w preferencjach, - Starting of %1 failed - Uruchomienie %1 nie powiodło się + Starting of %1 failed + Uruchomienie %1 nie powiodło się - - + + Gui::DockWnd::PropertyDockView - Property View - Drzewo właściwości + Property View + Drzewo właściwości - - + + Gui::DockWnd::ReportOutput - Logging - Rejestrowanie + Logging + Rejestrowanie - Warning - Ostrzeżenie + Warning + Ostrzeżenie - Error - Błąd + Error + Błąd - Options - Opcje + Options + Opcje - Clear - Wyczyść + Clear + Wyczyść - Save As... - Zapisz jako... + Save As... + Zapisz jako... - Save Report Output - Zapisz wyjście raportu + Save Report Output + Zapisz wyjście raportu - Plain Text Files (*.txt *.log) - Pliki tekstowe (*. txt *. log) + Plain Text Files (*.txt *.log) + Pliki tekstowe (*. txt *. log) - Go to end - Go to end + Go to end + Go to end - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Przekieruj błędy Pythona + Redirect Python errors + Przekieruj błędy Pythona - - + + Gui::DockWnd::ReportView - Output - Wyjście + Output + Wyjście - Python console - Konsola Pythona + Python console + Konsola Pythona - - + + Gui::DockWnd::SelectionView - Property View - Drzewo właściwości + Property View + Drzewo właściwości - - + + Gui::DockWnd::TaskPanelView - Task View - Widok zadań + Task View + Widok zadań - - + + Gui::DockWnd::TextBrowser - Could not open file. - Nie można otworzyć pliku. + Could not open file. + Nie można otworzyć pliku. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Próbowano uzyskać dostęp do adresu%1, który jest obecnie niedostępny. Upewnij się, że adres URL istnieje i spróbuj ponownie wczytać stronę. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Próbowano uzyskać dostęp do adresu%1, który jest obecnie niedostępny. Upewnij się, że adres URL istnieje i spróbuj ponownie wczytać stronę. - Connecting to %1 - Łączenie z %1 + Connecting to %1 + Łączenie z %1 - Sending to %1 - Wysyłanie do %1 + Sending to %1 + Wysyłanie do %1 - Reading from %1 - Odczyt z %1 + Reading from %1 + Odczyt z %1 - Download failed: %1. - Pobieranie nie powiodło się:%1. + Download failed: %1. + Pobieranie nie powiodło się:%1. - Previous - Poprzedni + Previous + Poprzedni - Forward - Do przodu + Forward + Do przodu - Home - Domowy + Home + Domowy - Refresh - Odśwież + Refresh + Odśwież - Copy - Kopiuj + Copy + Kopiuj - Select all - Zaznacz wszystko + Select all + Zaznacz wszystko - No description for - Brak opisu dla + No description for + Brak opisu dla - - + + Gui::DocumentModel - Application - Program + Application + Program - Labels & Attributes - Etykiety i atrybuty + Labels & Attributes + Etykiety i atrybuty - - + + Gui::EditorView - Modified file - Zmodyfikowany plik + Modified file + Zmodyfikowany plik - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. Został zmodyfikowany spoza edytora. Czy chcesz go przeładować? + %1. Został zmodyfikowany spoza edytora. Czy chcesz go przeładować? - Unsaved document - Niezapisany dokument + Unsaved document + Niezapisany dokument - The document has been modified. + The document has been modified. Do you want to save your changes? - Dokument został zmieniony. Czy chcesz zapisać zmiany? + Dokument został zmieniony. Czy chcesz zapisać zmiany? - FreeCAD macro (*.FCMacro);;Python (*.py) - makro FreeCAD (*. FCMacro), Python (*. py) + FreeCAD macro (*.FCMacro);;Python (*.py) + makro FreeCAD (*. FCMacro), Python (*. py) - Export PDF - Eksportuj do PDF + Export PDF + Eksportuj do PDF - PDF file (*.pdf) - plik PDF (*. pdf) + PDF file (*.pdf) + plik PDF (*. pdf) - untitled[*] - bez nazwy [*] + untitled[*] + bez nazwy [*] - - Editor - - Edytor + - Editor + - Edytor - %1 chars removed - Usunięte %1 znaków + %1 chars removed + Usunięte %1 znaków - %1 chars added - Dodane %1 znaków + %1 chars added + Dodane %1 znaków - Formatted - Sformatowany + Formatted + Sformatowany - - + + Gui::FileChooser - Select a file - Wybierz plik + Select a file + Wybierz plik - Select a directory - Wybierz Katalog + Select a directory + Wybierz Katalog - - + + Gui::FileDialog - Save as - Zapisz jako + Save as + Zapisz jako - Open - Otwórz + Open + Otwórz - - + + Gui::FileOptionsDialog - Extended - Rozszerzony + Extended + Rozszerzony - All files (*.*) - Wszystkie pliki (*.*) + All files (*.*) + Wszystkie pliki (*.*) - - + + Gui::Flag - Top left - Lewy górny + Top left + Lewy górny - Bottom left - Lewy dolny + Bottom left + Lewy dolny - Top right - Prawy górny + Top right + Prawy górny - Bottom right - Prawy dolny + Bottom right + Prawy dolny - Remove - Usuń + Remove + Usuń - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Naciśnij klawisz CTRL i lewy przycisk myszy + Press CTRL and left mouse button + Naciśnij klawisz CTRL i lewy przycisk myszy - Press middle mouse button - Naciśnij środkowy przycisk myszy + Press middle mouse button + Naciśnij środkowy przycisk myszy - Press left mouse button - Naciśnij lewy przycisk myszy + Press left mouse button + Naciśnij lewy przycisk myszy - Scroll middle mouse button - Scroll middle mouse button + Scroll middle mouse button + Scroll middle mouse button - - + + Gui::LocationDialog - Wrong direction - Zły kierunek + Wrong direction + Zły kierunek - Direction must not be the null vector - Kierunek nie może być wektorem zerowym + Direction must not be the null vector + Kierunek nie może być wektorem zerowym - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Zdefiniowane przez użytkownika... + User defined... + Zdefiniowane przez użytkownika... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makra + Macros + Makra - - + + Gui::MainWindow - Dimension - Wymiar + Dimension + Wymiar - Ready - Gotowe + Ready + Gotowe - Toggles this toolbar - Włącza/wyłącza ten pasek narzędzi + Toggles this toolbar + Włącza/wyłącza ten pasek narzędzi - Toggles this dockable window - Włącza/wyłącza to okno dokujące + Toggles this dockable window + Włącza/wyłącza to okno dokujące - Close All - Close All + Close All + Close All - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Rozpoczęto pobieranie... + Rozpoczęto pobieranie... - - + + Gui::ProgressBar - Remaining: %1 - Pozostało: %1 + Remaining: %1 + Pozostało: %1 - Aborting - Przerywanie + Aborting + Przerywanie - Do you really want to abort the operation? - Czy na pewno chcesz przerwać tę operację? + Do you really want to abort the operation? + Czy na pewno chcesz przerwać tę operację? - - + + Gui::ProgressDialog - Remaining: %1 - Pozostało: %1 + Remaining: %1 + Pozostało: %1 - Aborting - Przerywanie + Aborting + Przerywanie - Do you really want to abort the operation? - Czy na pewno chcesz przerwać tę operację? + Do you really want to abort the operation? + Czy na pewno chcesz przerwać tę operację? - - + + Gui::PropertyEditor::PropertyModel - Property - Właściwości + Property + Właściwości - Value - Wartość + Value + Wartość - - + + Gui::PropertyView - View - Widok + View + Widok - Data - Dane + Data + Dane - - + + Gui::PythonConsole - System exit - Wyjście z systemu + System exit + Wyjście z systemu - The application is still running. + The application is still running. Do you want to exit without saving your data? - Aplikacja jest wciąż działa. Czy chcesz wyjść bez zapisywania danych? + Aplikacja jest wciąż działa. Czy chcesz wyjść bez zapisywania danych? - Python console - Konsola Pythona + Python console + Konsola Pythona - Unhandled PyCXX exception. - Nieobsługiwany wyjątek PyCXX. + Unhandled PyCXX exception. + Nieobsługiwany wyjątek PyCXX. - Unhandled FreeCAD exception. - Nieobsługiwany wyjątek FreeCAD. + Unhandled FreeCAD exception. + Nieobsługiwany wyjątek FreeCAD. - Unhandled unknown C++ exception. - Nieobsługiwany nieznany wyjątek C++. + Unhandled unknown C++ exception. + Nieobsługiwany nieznany wyjątek C++. - &Copy command - &Kopiuj polecenie + &Copy command + &Kopiuj polecenie - &Copy history - &Kopiuj historię + &Copy history + &Kopiuj historię - Save history as... - Zapisz historię jako... + Save history as... + Zapisz historię jako... - Insert file name... - Wstaw nazwę pliku... + Insert file name... + Wstaw nazwę pliku... - Save History - Zapisz historię + Save History + Zapisz historię - Macro Files (*.FCMacro *.py) - Pliki makra (FCMacro *. *. py) + Macro Files (*.FCMacro *.py) + Pliki makra (FCMacro *. *. py) - Insert file name - Wstaw nazwę pliku + Insert file name + Wstaw nazwę pliku - All Files (*.*) - Wszystkie pliki (*.*) + All Files (*.*) + Wszystkie pliki (*.*) - Python Input Dialog - Okno dialogowe wejścia Pythona + Python Input Dialog + Okno dialogowe wejścia Pythona - Unhandled std C++ exception. - Unhandled std C++ exception. + Unhandled std C++ exception. + Unhandled std C++ exception. - Word wrap - Word wrap + Word wrap + Word wrap - &Copy - Kopiuj + &Copy + Kopiuj - &Paste - Wklej + &Paste + Wklej - Select All - Zaznacz wszystko + Select All + Zaznacz wszystko - - + + Clear console + + + + Gui::PythonEditor - Comment - Komentarz + Comment + Komentarz - Uncomment - Odkomentuj + Uncomment + Odkomentuj - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Wyczyść + Clear + Wyczyść - - + + Gui::RecentFilesAction - Open file %1 - Otwórz plik %1 + Open file %1 + Otwórz plik %1 - File not found - Nie znaleziono pliku + File not found + Nie znaleziono pliku - The file '%1' cannot be opened. - Plik '%1' nie może być otwarty. + The file '%1' cannot be opened. + Plik '%1' nie może być otwarty. - - + + Gui::SelectModule - Select module - Wybierz moduł + Select module + Wybierz moduł - Open %1 as - Otwórz %1 jako + Open %1 as + Otwórz %1 jako - Select - Wybierz + Select + Wybierz - - + + Gui::StdCmdDescription - Help - Pomoc + Help + Pomoc - Des&cription - &Opis + Des&cription + &Opis - Long description of commands - Długi opis poleceń + Long description of commands + Długi opis poleceń - - + + Gui::StdCmdDownloadOnlineHelp - Help - Pomoc + Help + Pomoc - Download online help - Pobierz pomoc online + Download online help + Pobierz pomoc online - Download %1's online help - Pobierz %1 z pomocy online + Download %1's online help + Pobierz %1 z pomocy online - Non-existing directory - Katalog nie istnieje + Non-existing directory + Katalog nie istnieje - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Katalog '% 1' nie istnieje.Chcesz wybrać istniejący katalog? + Katalog '% 1' nie istnieje.Chcesz wybrać istniejący katalog? - Missing permission - Brak uprawnień + Missing permission + Brak uprawnień - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Nie masz uprawnienie do zapisu do '% 1' Czy chcesz określić inny katalog? + Nie masz uprawnienie do zapisu do '% 1' Czy chcesz określić inny katalog? - Stop downloading - Zatrzymanie pobierania + Stop downloading + Zatrzymanie pobierania - - + + Gui::StdCmdPythonHelp - Tools - Narzędzia + Tools + Narzędzia - Python Modules - Moduły Pythona + Python Modules + Moduły Pythona - Opens a browser to show the Python modules - Otwiera przeglądarkę, aby pokazać moduły Pythona + Opens a browser to show the Python modules + Otwiera przeglądarkę, aby pokazać moduły Pythona - - + + Gui::TaskBoxAngle - Angle - Kąt + Angle + Kąt - - + + Gui::TaskBoxPosition - Position - Position + Position + Position - - + + Gui::TaskView::TaskAppearance - Display mode: - Tryb wyświetlania: + Display mode: + Tryb wyświetlania: - Plot mode: - Tryb kreślenia: + Plot mode: + Tryb kreślenia: - Point size: - Wielkość punktu: + Point size: + Wielkość punktu: - Line width: - Szerokość linii: + Line width: + Szerokość linii: - Transparency: - Przezroczystość: + Transparency: + Przezroczystość: - Appearance - Wygląd + Appearance + Wygląd - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Edytuj + Edit + Edytuj - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Wygląd + Appearance + Wygląd - ... - ... + ... + ... - edit selection - edit selection + edit selection + edit selection - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Naciśnij lewy przycisk myszy + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Angielski + English + Angielski - - + + Gui::TreeDockWidget - Tree view - Widok drzewa + Tree view + Widok drzewa - - + + Gui::TreeWidget - Create group... - Tworzenie grup... + Create group... + Tworzenie grup... - Create a group - Utwórz grupę + Create a group + Utwórz grupę - Group - Grupa + Group + Grupa - Rename - Zmień nazwę + Rename + Zmień nazwę - Rename object - Zmiana nazwy obiektu + Rename object + Zmiana nazwy obiektu - Labels & Attributes - Etykiety i atrybuty + Labels & Attributes + Etykiety i atrybuty - Application - Program + Application + Program - Finish editing - Finish editing + Finish editing + Finish editing - Finish editing object - Finish editing object + Finish editing object + Finish editing object - Activate document - Activate document + Activate document + Activate document - Activate document %1 - Activate document %1 + Activate document %1 + Activate document %1 - - + + Gui::View3DInventor - Export PDF - Eksportuj do PDF + Export PDF + Eksportuj do PDF - PDF file (*.pdf) - plik PDF (*. pdf) + PDF file (*.pdf) + plik PDF (*. pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Wybierz warsztat '%1' + Select the '%1' workbench + Wybierz warsztat '%1' - - + + Position - Form - Form + Form + Form - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Grid Snap in + Grid Snap in + Grid Snap in - - + + QDockWidget - Tree view - Widok drzewa + Tree view + Widok drzewa - Property view - Właściwości widoku + Property view + Właściwości widoku - Selection view - Wybór widoku + Selection view + Wybór widoku - Report view - Widok raportu + Report view + Widok raportu - Task View - Widok zadań + Task View + Widok zadań - Combo View - Widok połączony + Combo View + Widok połączony - Toolbox - Przybornik + Toolbox + Przybornik - Python console - Konsola Pythona + Python console + Konsola Pythona - Display properties - Właściwości wyświetlania + Display properties + Właściwości wyświetlania - - + + QObject - General - Ogólne + General + Ogólne - Display - Wyświetlanie + Display + Wyświetlanie - Unknown filetype - Nieznany typ pliku + Unknown filetype + Nieznany typ pliku - Cannot open unknown filetype: %1 - Nie można otworzyć pliku nieznanego typu: %1 + Cannot open unknown filetype: %1 + Nie można otworzyć pliku nieznanego typu: %1 - Cannot save to unknown filetype: %1 - Nie można zapisać do pliku nieznanego typu: %1 + Cannot save to unknown filetype: %1 + Nie można zapisać do pliku nieznanego typu: %1 - Workbench failure - Awaria Warsztatu + Workbench failure + Awaria Warsztatu - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Nie można uruchomić Qt Assistant (%1) + Unable to launch Qt Assistant (%1) + Nie można uruchomić Qt Assistant (%1) - Exception - Wyjątek + Exception + Wyjątek - Open document - Otwórz dokument + Open document + Otwórz dokument - Import file - Importuj plik + Import file + Importuj plik - Export file - Eksportuj plik + Export file + Eksportuj plik - Printing... - Drukowanie... + Printing... + Drukowanie... - Cannot load workbench - Nie można załadować warsztatu + Cannot load workbench + Nie można załadować warsztatu - A general error occurred while loading the workbench - Wystąpił błąd ogólny podczas ładowania warsztatu + A general error occurred while loading the workbench + Wystąpił błąd ogólny podczas ładowania warsztatu - File not found - Nie znaleziono pliku + File not found + Nie znaleziono pliku - Cannot open file %1 - Nie można otworzyć pliku %1 + Cannot open file %1 + Nie można otworzyć pliku %1 - Save views... - Zapisz widoki... + Save views... + Zapisz widoki... - Load views... - Załaduj widoki... + Load views... + Załaduj widoki... - Freeze view - Zamróź widok + Freeze view + Zamróź widok - Clear views - Wyczyść widoki + Clear views + Wyczyść widoki - Restore view &%1 - Przywróć widok &%1 + Restore view &%1 + Przywróć widok &%1 - Save frozen views - Zapisz zamrożone widoki + Save frozen views + Zapisz zamrożone widoki - Frozen views (*.cam) - Zamrożone widoki (*.cam) + Frozen views (*.cam) + Zamrożone widoki (*.cam) - Restore views - Przywróć widoki + Restore views + Przywróć widoki - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Importowanie przywróconych widoków wyczyści już przechowywane widoki. Czy chcesz kontynuować? + Importowanie przywróconych widoków wyczyści już przechowywane widoki. Czy chcesz kontynuować? - Restore frozen views - Przywracanie zamrożonego Widoku + Restore frozen views + Przywracanie zamrożonego Widoku - Cannot open file '%1'. - Nie można otworzyć pliku '%1'. + Cannot open file '%1'. + Nie można otworzyć pliku '%1'. - Docked - Zadokowany + Docked + Zadokowany - Undocked - Niezadokowany + Undocked + Niezadokowany - Fullscreen - Pełny ekran + Fullscreen + Pełny ekran - files - pliki + files + pliki - Save picture - Zapisz obrazek + Save picture + Zapisz obrazek - New sub-group - Nowe podgrupy + New sub-group + Nowe podgrupy - Enter the name: - Wprowadź nazwę: + Enter the name: + Wprowadź nazwę: - New text item - Nowy obiekt tekstowy + New text item + Nowy obiekt tekstowy - Enter your text: - Wprowadź tekst: + Enter your text: + Wprowadź tekst: - New integer item - Nowy obiekt liczby całkowitej + New integer item + Nowy obiekt liczby całkowitej - Enter your number: - Wpisz liczbę: + Enter your number: + Wpisz liczbę: - New unsigned item - New unsigned item + New unsigned item + New unsigned item - New float item - Nowy obiekt liczby zmiennoprzecinkowej + New float item + Nowy obiekt liczby zmiennoprzecinkowej - New Boolean item - Nowy obiekt Boolean + New Boolean item + Nowy obiekt Boolean - Choose an item: - Wybierz obiekt: + Choose an item: + Wybierz obiekt: - Rename group - Zmień nazwę grupy + Rename group + Zmień nazwę grupy - The group '%1' cannot be renamed. - Nie można zmienić nazwy Grupy %1. + The group '%1' cannot be renamed. + Nie można zmienić nazwy Grupy %1. - Existing group - Grupa istniejąca + Existing group + Grupa istniejąca - The group '%1' already exists. - Już istnieje Grupa %1. + The group '%1' already exists. + Już istnieje Grupa %1. - Change value - Zmień wartość + Change value + Zmień wartość - Save document under new filename... - Zapisz dokument pod nową nazwę pliku ... + Save document under new filename... + Zapisz dokument pod nową nazwę pliku ... - Saving aborted - Zapisywanie przerwane + Saving aborted + Zapisywanie przerwane - Unsaved document - Niezapisany dokument + Unsaved document + Niezapisany dokument - Save document before close? - Zapisać dokument przed zamknięciem? + Save document before close? + Zapisać dokument przed zamknięciem? - Save Macro - Zapisz makro + Save Macro + Zapisz makro - Finish - Zakończ + Finish + Zakończ - Clear - Wyczyść + Clear + Wyczyść - Cancel - Anuluj + Cancel + Anuluj - Inner - Wewnętrzny + Inner + Wewnętrzny - Outer - Zewnętrzny + Outer + Zewnętrzny - No Browser - Brak przeglądarki + No Browser + Brak przeglądarki - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Nie można otworzyć przeglądarki. Proszę otworzyć okno przeglądarki i wpisać: http://localhost:% 1. + Nie można otworzyć przeglądarki. Proszę otworzyć okno przeglądarki i wpisać: http://localhost:% 1. - No Server - Brak serwera + No Server + Brak serwera - Unable to start the server to port %1: %2. - Nie można uruchomić serwera na porcie %1: %2. + Unable to start the server to port %1: %2. + Nie można uruchomić serwera na porcie %1: %2. - Unable to open your system browser. - Nie można otworzyć przeglądarki systemowej. + Unable to open your system browser. + Nie można otworzyć przeglądarki systemowej. - Options... - Opcje... + Options... + Opcje... - Out of memory - Brak pamięci + Out of memory + Brak pamięci - Not enough memory available to display the data. - Za mało pamięci, aby wyświetlić dane. + Not enough memory available to display the data. + Za mało pamięci, aby wyświetlić dane. - Cannot find file %1 - Pliku %1 nie znaleziono + Cannot find file %1 + Pliku %1 nie znaleziono - Cannot find file %1 neither in %2 nor in %3 - Nie znaleziono pliku %1 w %2, ani w %3 + Cannot find file %1 neither in %2 nor in %3 + Nie znaleziono pliku %1 w %2, ani w %3 - Save %1 Document - Zapis Dokumentu %1. + Save %1 Document + Zapis Dokumentu %1. - %1 document (*.FCStd) - Dokument %1 (*.FCStd) + %1 document (*.FCStd) + Dokument %1 (*.FCStd) - Save As - Zapisz jako + Save As + Zapisz jako - %1 already exists. + %1 already exists. Do you want to replace it? - %1 już istnieje. Czy chcesz go zastąpić? + %1 już istnieje. Czy chcesz go zastąpić? - Document not closable - Nie można zamknąć Dokumentu + Document not closable + Nie można zamknąć Dokumentu - The document is not closable for the moment. - Nie można zamknąć dokumentu w tym momencie. + The document is not closable for the moment. + Nie można zamknąć dokumentu w tym momencie. - No OpenGL - No OpenGL + No OpenGL + No OpenGL - This system does not support OpenGL - Ten system nie obsługuje OpenGL + This system does not support OpenGL + Ten system nie obsługuje OpenGL - Help - Pomoc + Help + Pomoc - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Nie można załadować dokumentacji. Wymagany Qt 4.4 lub nowszy. + Nie można załadować dokumentacji. Wymagany Qt 4.4 lub nowszy. - %1 Help - %1 - Pomoc + %1 Help + %1 - Pomoc - Exporting PDF... - Exporting PDF... + Exporting PDF... + Exporting PDF... - Wrong selection - Niewłaściwy wybór + Wrong selection + Niewłaściwy wybór - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Tylko jeden przedmiot wybrany. Proszę wybrać dwa obiekty. Pamiętaj, miejsce w którym klikasz ma znaczenie. + Tylko jeden przedmiot wybrany. Proszę wybrać dwa obiekty. Pamiętaj, miejsce w którym klikasz ma znaczenie. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Proszę wybrać dwa obiekty. Pamiętaj, miejsce w którym klikasz ma znaczenie. + Proszę wybrać dwa obiekty. Pamiętaj, miejsce w którym klikasz ma znaczenie. - New boolean item - New boolean item + New boolean item + New boolean item - Navigation styles - Style nawigacji + Navigation styles + Style nawigacji - %1 navigation - %1 navigation + %1 navigation + %1 navigation - Move annotation - Przenieść adnotację + Move annotation + Przenieść adnotację - Transform - Przekształć + Transform + Przekształć - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + Normalny widok + + + Box selection + + + + StdCmdAbout - Help - Pomoc + Help + Pomoc - &About %1 - &Informacje o %1 + &About %1 + &Informacje o %1 - About %1 - O %1 + About %1 + O %1 - - + + StdCmdAboutQt - Help - Pomoc + Help + Pomoc - About &Qt - Informacje o &Qt + About &Qt + Informacje o &Qt - About Qt - O Qt + About Qt + O Qt - - + + StdCmdActivateNextWindow - Window - Okno + Window + Okno - Ne&xt - Dalej + Ne&xt + Dalej - Activate next window - Uaktywnij następne okno + Activate next window + Uaktywnij następne okno - - + + StdCmdActivatePrevWindow - Window - Okno + Window + Okno - Pre&vious - Wstecz + Pre&vious + Wstecz - Activate previous window - Uaktywnij poprzednie okno + Activate previous window + Uaktywnij poprzednie okno - - + + + StdCmdAlignment + + Edit + Edytuj + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Okno + Window + Okno - Arrange &Icons - Arrange &Icons + Arrange &Icons + Arrange &Icons - Arrange Icons - Rozmieść ikony + Arrange Icons + Rozmieść ikony - - + + StdCmdAxisCross - Standard-View - Normalny widok + Standard-View + Normalny widok - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Okno + Window + Okno - &Cascade - &Cascade + &Cascade + &Cascade - Tile pragmatic - Tile pragmatic + Tile pragmatic + Tile pragmatic - - + + StdCmdCloseActiveWindow - Window - Okno + Window + Okno - Cl&ose - ZAMKNIJ + Cl&ose + ZAMKNIJ - Close active window - Zamknij aktywne okno + Close active window + Zamknij aktywne okno - - + + StdCmdCloseAllWindows - Window - Okno + Window + Okno - Close Al&l - Close Al&l + Close Al&l + Close Al&l - Close all windows - Zamknij wszystkie okna + Close all windows + Zamknij wszystkie okna - - + + StdCmdCommandLine - Tools - Narzędzia + Tools + Narzędzia - Start command &line... - &Linia poleceń... + Start command &line... + &Linia poleceń... - Opens the command line in the console - Otwiera wiersz poleceń w konsoli + Opens the command line in the console + Otwiera wiersz poleceń w konsoli - - + + StdCmdCopy - Edit - Edytuj + Edit + Edytuj - C&opy - C&opy + C&opy + C&opy - Copy operation - Skopiuj operację + Copy operation + Skopiuj operację - - + + StdCmdCut - Edit - Edytuj + Edit + Edytuj - &Cut - Wytnij + &Cut + Wytnij - Cut out - Wytnij + Cut out + Wytnij - - + + StdCmdDDuplicateSelection - Edit - Edytuj + Edit + Edytuj - Duplicate selection - Powiel zaznaczone + Duplicate selection + Powiel zaznaczone - Put duplicates of the selected objects to the active document - Umieść kopie wybranych obiektów do aktywnego dokumentu + Put duplicates of the selected objects to the active document + Umieść kopie wybranych obiektów do aktywnego dokumentu - - + + StdCmdDelete - Edit - Edytuj + Edit + Edytuj - &Delete - Usuń + &Delete + Usuń - Deletes the selected objects - Usuwa zaznaczone obiekty + Deletes the selected objects + Usuwa zaznaczone obiekty - - + + StdCmdDemoMode - Standard-View - Normalny widok + Standard-View + Normalny widok - View turntable... - View turntable... + View turntable... + View turntable... - View turntable - View turntable + View turntable + View turntable - - + + StdCmdDlgCustomize - Tools - Narzędzia + Tools + Narzędzia - Cu&stomize... - Dostosuj... + Cu&stomize... + Dostosuj... - Customize toolbars and command bars - Dostosuj paski narzędzi i paski poleceń + Customize toolbars and command bars + Dostosuj paski narzędzi i paski poleceń - - + + StdCmdDlgMacroExecute - Macros ... - Makra ... + Macros ... + Makra ... - Opens a dialog to let you execute a recorded macro - Pozwala wykonać zarejestrowane makro + Opens a dialog to let you execute a recorded macro + Pozwala wykonać zarejestrowane makro - Macro - Makro + Macro + Makro - - + + StdCmdDlgMacroExecuteDirect - Macro - Makro + Macro + Makro - Execute macro - Wykonaj makro + Execute macro + Wykonaj makro - Execute the macro in the editor - Wykonaj makro w edytorze + Execute the macro in the editor + Wykonaj makro w edytorze - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Macro recording ... + &Macro recording ... + &Macro recording ... - Opens a dialog to record a macro - Rejestruje makro + Opens a dialog to record a macro + Rejestruje makro - Macro - Makro + Macro + Makro - - + + StdCmdDlgParameter - Tools - Narzędzia + Tools + Narzędzia - E&dit parameters ... - E&dycja parametrów + E&dit parameters ... + E&dycja parametrów - Opens a Dialog to edit the parameters - Edytuje parametry + Opens a Dialog to edit the parameters + Edytuje parametry - - + + StdCmdDlgPreferences - Tools - Narzędzia + Tools + Narzędzia - &Preferences ... - &Preferencje + &Preferences ... + &Preferencje - Opens a Dialog to edit the preferences - Zmienia preferencje + Opens a Dialog to edit the preferences + Zmienia preferencje - - + + StdCmdDockViewMenu - View - Widok + View + Widok - Vie&ws - W&idoki + Vie&ws + W&idoki - Toggles this window - Toggles this window + Toggles this window + Toggles this window - - + + StdCmdDrawStyle - Standard-View - Normalny widok + Standard-View + Normalny widok - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Edytuj + + + Duplicate selection + Powiel zaznaczone + + + Put duplicates of the selected objects to the active document + Umieść kopie wybranych obiektów do aktywnego dokumentu + + + + StdCmdEdit + + Edit + Edytuj + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Plik + File + Plik - &Export... - Eksportuj... + &Export... + Eksportuj... - Export an object in the active document - Eksport obiektu w aktywnym dokumencie + Export an object in the active document + Eksport obiektu w aktywnym dokumencie - Supported formats - Obsługiwane formaty + Supported formats + Obsługiwane formaty - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Narzędzia + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Plik + File + Plik - &Recompute - & Przelicz + &Recompute + & Przelicz - Recompute feature or document - Recompute feature or document + Recompute feature or document + Recompute feature or document - - + + StdCmdFreeCADWebsite - Help - Pomoc + Help + Pomoc - FreeCAD Website - Strona FreeCAD + FreeCAD Website + Strona FreeCAD - The FreeCAD website - Na stronie FreeCAD + The FreeCAD website + Na stronie FreeCAD - - + + StdCmdFreezeViews - Standard-View - Normalny widok + Standard-View + Normalny widok - Freeze display - Freeze display + Freeze display + Freeze display - Freezes the current view position - Zamraża bieżący Widok + Freezes the current view position + Zamraża bieżący Widok - - + + StdCmdHideObjects - Standard-View - Normalny widok + Standard-View + Normalny widok - Hide all objects - Ukryj wszystkie obiekty + Hide all objects + Ukryj wszystkie obiekty - Hide all objects in the document - Hide all objects in the document + Hide all objects in the document + Hide all objects in the document - - + + StdCmdHideSelection - Standard-View - Normalny widok + Standard-View + Normalny widok - Hide selection - Ukryj zaznaczone + Hide selection + Ukryj zaznaczone - Hide all selected objects - Ukryj wszystkie zaznaczone obiekty + Hide all selected objects + Ukryj wszystkie zaznaczone obiekty - - + + StdCmdImport - File - Plik + File + Plik - &Import... - &Import... + &Import... + &Import... - Import a file in the active document - Import pliku do aktywnego dokumentu + Import a file in the active document + Import pliku do aktywnego dokumentu - Supported formats - Obsługiwane formaty + Supported formats + Obsługiwane formaty - All files (*.*) - Wszystkie pliki (*.*) + All files (*.*) + Wszystkie pliki (*.*) - - + + StdCmdMacroStartDebug - Macro - Makro + Macro + Makro - Debug macro - Debug macro + Debug macro + Debug macro - Start debugging of macro - Start debugging of macro + Start debugging of macro + Start debugging of macro - - + + StdCmdMacroStepOver - Macro - Makro + Macro + Makro - Step over - Step over + Step over + Step over - - + + StdCmdMacroStopDebug - Macro - Makro + Macro + Makro - Stop debugging - Stop debugging + Stop debugging + Stop debugging - Stop debugging of macro - Stop debugging of macro + Stop debugging of macro + Stop debugging of macro - - + + StdCmdMacroStopRecord - Macro - Makro + Macro + Makro - S&top macro recording - Z&atrzymaj nagrywanie makra + S&top macro recording + Z&atrzymaj nagrywanie makra - Stop the macro recording session - Stop the macro recording session + Stop the macro recording session + Stop the macro recording session - - + + StdCmdMeasureDistance - View - Widok + View + Widok - Measure distance - Pomiar odległości + Measure distance + Pomiar odległości - - + + StdCmdMeasurementSimple - Tools - Narzędzia + Tools + Narzędzia - Mesure distance - Zmierz odległość + Mesure distance + Zmierz odległość - Measures distance between two selected objects - Zmierz odległość między dwoma wybranymi obiektami + Measures distance between two selected objects + Zmierz odległość między dwoma wybranymi obiektami - - + + Measure distance + Pomiar odległości + + + StdCmdMergeProjects - File - Plik + File + Plik - Merge project... - Merge project... + Merge project... + Merge project... - Merge project - Merge project + Merge project + Merge project - %1 document (*.fcstd) - %1 document (*.fcstd) + %1 document (*.fcstd) + %1 document (*.fcstd) - Cannot merge project with itself. - Cannot merge project with itself. + Cannot merge project with itself. + Cannot merge project with itself. - - + + StdCmdNew - File - Plik + File + Plik - &New - &Nowy + &New + &Nowy - Create a new empty document - Utwórz nowy pusty dokument + Create a new empty document + Utwórz nowy pusty dokument - - + + StdCmdOnlineHelp - Help - Pomoc + Help + Pomoc - Show help to the application - Pomoc + Show help to the application + Pomoc - - + + StdCmdOnlineHelpPython - Help - Pomoc + Help + Pomoc - Python Manuals - Podręczniki Python + Python Manuals + Podręczniki Python - Show the Python documentation - Pokaż dokumentację Pythona + Show the Python documentation + Pokaż dokumentację Pythona - - + + StdCmdOnlineHelpWebsite - Help - Pomoc + Help + Pomoc - Help Website - Strona www pomocy + Help Website + Strona www pomocy - The website where the help is maintained - Strona, gdzie pomoc jest utrzymywana + The website where the help is maintained + Strona, gdzie pomoc jest utrzymywana - - + + StdCmdOpen - File - Plik + File + Plik - &Open... - &Otwórz + &Open... + &Otwórz - Open a document or import files - Otwórz dokument lub importuj pliki + Open a document or import files + Otwórz dokument lub importuj pliki - Supported formats - Obsługiwane formaty + Supported formats + Obsługiwane formaty - All files (*.*) - Wszystkie pliki (*.*) + All files (*.*) + Wszystkie pliki (*.*) - - + + StdCmdPaste - Edit - Edytuj + Edit + Edytuj - &Paste - Wklej + &Paste + Wklej - Paste operation - Wklej operację + Paste operation + Wklej operację - - + + StdCmdPlacement - Edit - Edytuj + Edit + Edytuj - Placement... - Placement... + Placement... + Placement... - Place the selected objects - Umieść wybrany obiekt + Place the selected objects + Umieść wybrany obiekt - - + + StdCmdPrint - File - Plik + File + Plik - &Print... - &Drukuj + &Print... + &Drukuj - Print the document - Wydrukuj dokument + Print the document + Wydrukuj dokument - - + + StdCmdPrintPdf - File - Plik + File + Plik - &Export PDF... - &Eksport PDF + &Export PDF... + &Eksport PDF - Export the document as PDF - Wyeksportuj dokument jako PDF + Export the document as PDF + Wyeksportuj dokument jako PDF - - + + StdCmdPrintPreview - File - Plik + File + Plik - &Print preview... - &Print preview... + &Print preview... + &Print preview... - Print the document - Wydrukuj dokument + Print the document + Wydrukuj dokument - Print preview - Print preview + Print preview + Print preview - - + + StdCmdProjectInfo - File - Plik + File + Plik - Project i&nformation... - Informacja o projekcie + Project i&nformation... + Informacja o projekcie - Show details of the currently active project - Pokaż szczegóły aktualnie aktywnego projektu + Show details of the currently active project + Pokaż szczegóły aktualnie aktywnego projektu - - + + StdCmdProjectUtil - Tools - Narzędzia + Tools + Narzędzia - Project utility... - Project utility... + Project utility... + Project utility... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - Pomoc + Help + Pomoc - Python Website - Witryna Pythona + Python Website + Witryna Pythona - The official Python website - Oficjalna witryna Pythona + The official Python website + Oficjalna witryna Pythona - - + + StdCmdQuit - File - Plik + File + Plik - E&xit - W&yjście + E&xit + W&yjście - Quits the application - Zamyka program + Quits the application + Zamyka program - - + + StdCmdRandomColor - File - Plik + File + Plik - Random color - Kolor losowy + Random color + Kolor losowy - - + + StdCmdRecentFiles - File - Plik + File + Plik - Recent files - Ostatnie pliki + Recent files + Ostatnie pliki - Recent file list - Ostatnio otwierane + Recent file list + Ostatnio otwierane - - + + StdCmdRedo - Edit - Edytuj + Edit + Edytuj - &Redo - &Cofnij + &Redo + &Cofnij - Redoes a previously undone action - Wykonuje ponownie poprzednio cofniętą czynność + Redoes a previously undone action + Wykonuje ponownie poprzednio cofniętą czynność - - + + StdCmdRefresh - Edit - Edytuj + Edit + Edytuj - &Refresh - &Refresh + &Refresh + &Refresh - Recomputes the current active document - Recomputes the current active document + Recomputes the current active document + Recomputes the current active document - - + + StdCmdSave - File - Plik + File + Plik - &Save - &Zapisz + &Save + &Zapisz - Save the active document - Zapisz aktywny dokument + Save the active document + Zapisz aktywny dokument - - + + StdCmdSaveAs - File - Plik + File + Plik - Save &As... - Zapisz &jako + Save &As... + Zapisz &jako - Save the active document under a new file name - Zapisuje aktywny dokument pod nową nazwą + Save the active document under a new file name + Zapisuje aktywny dokument pod nową nazwą - - + + StdCmdSceneInspector - Tools - Narzędzia + Tools + Narzędzia - Scene inspector... - Inspektor sceny... + Scene inspector... + Inspektor sceny... - Scene inspector - Scene inspector + Scene inspector + Scene inspector - - + + StdCmdSelectAll - Edit - Edytuj + Edit + Edytuj - Select &All - Zaznacz &Wszystko + Select &All + Zaznacz &Wszystko - Select all - Zaznacz wszystko + Select all + Zaznacz wszystko - - + + StdCmdSetAppearance - Standard-View - Normalny widok + Standard-View + Normalny widok - Appearance... - Wygląd... + Appearance... + Wygląd... - Sets the display properties of the selected object - Ustawia właściwości wyświetlania wybranego obiektu + Sets the display properties of the selected object + Ustawia właściwości wyświetlania wybranego obiektu - - + + StdCmdShowObjects - Standard-View - Normalny widok + Standard-View + Normalny widok - Show all objects - Pokaż wszystkie obiekty + Show all objects + Pokaż wszystkie obiekty - Show all objects in the document - Pokaż wszystkie obiekty w dokumencie + Show all objects in the document + Pokaż wszystkie obiekty w dokumencie - - + + StdCmdShowSelection - Standard-View - Normalny widok + Standard-View + Normalny widok - Show selection - Pokaż zaznaczone + Show selection + Pokaż zaznaczone - Show all selected objects - Pokaż wszystkie zaznaczone obiekty + Show all selected objects + Pokaż wszystkie zaznaczone obiekty - - + + StdCmdStatusBar - View - Widok + View + Widok - Status bar - Pasek stanu + Status bar + Pasek stanu - Toggles the status bar - Toggles the status bar + Toggles the status bar + Toggles the status bar - - + + StdCmdTextureMapping - Tools - Narzędzia + Tools + Narzędzia - Texture mapping... - Texture mapping... + Texture mapping... + Texture mapping... - Texture mapping - Texture mapping + Texture mapping + Texture mapping - - + + StdCmdTileWindows - Window - Okno + Window + Okno - &Tile - &Tile + &Tile + &Tile - Tile the windows - Okna sąsiadująco + Tile the windows + Okna sąsiadująco - - + + StdCmdToggleBreakpoint - Macro - Makro + Macro + Makro - Toggle breakpoint - Toggle breakpoint + Toggle breakpoint + Toggle breakpoint - - + + StdCmdToggleClipPlane - Standard-View - Normalny widok + Standard-View + Normalny widok - Clipping plane - Płaszczyzna tnąca + Clipping plane + Płaszczyzna tnąca - Toggles clipping plane for active view - Toggles clipping plane for active view + Toggles clipping plane for active view + Toggles clipping plane for active view - - + + StdCmdToggleNavigation - Standard-View - Normalny widok + Standard-View + Normalny widok - Toggle navigation/Edit mode - Toggle navigation/Edit mode + Toggle navigation/Edit mode + Toggle navigation/Edit mode - Toggle between navigation and edit mode - Toggle between navigation and edit mode + Toggle between navigation and edit mode + Toggle between navigation and edit mode - - + + StdCmdToggleObjects - Standard-View - Normalny widok + Standard-View + Normalny widok - Toggle all objects - Toggle all objects + Toggle all objects + Toggle all objects - Toggles visibility of all objects in the active document - Włącza widoczność wszystkich obiektów w aktywnym dokumencie + Toggles visibility of all objects in the active document + Włącza widoczność wszystkich obiektów w aktywnym dokumencie - - + + StdCmdToggleSelectability - Standard-View - Normalny widok + Standard-View + Normalny widok - Toggle selectability - Toggle selectability + Toggle selectability + Toggle selectability - Toggles the property of the objects to get selected in the 3D-View - Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View - - + + StdCmdToggleVisibility - Standard-View - Normalny widok + Standard-View + Normalny widok - Toggle visibility - Toggle visibility + Toggle visibility + Toggle visibility - Toggles visibility - Toggles visibility + Toggles visibility + Toggles visibility - - + + StdCmdToolBarMenu - View - Widok + View + Widok - Tool&bars - Paski narzędzi + Tool&bars + Paski narzędzi - Toggles this window - Toggles this window + Toggles this window + Toggles this window - - + + StdCmdTransform - Edit - Edytuj + Edit + Edytuj - Transform... - Transform... + Transform... + Transform... - Transform the geometry of selected objects - Przekształć geometrię wybranych obiektów + Transform the geometry of selected objects + Przekształć geometrię wybranych obiektów - - + + StdCmdTreeSelection - View - Widok + View + Widok - Go to selection - Go to selection + Go to selection + Go to selection - Scroll to first selected item - Przejdź do pierwszego zaznaczonego elementu + Scroll to first selected item + Przejdź do pierwszego zaznaczonego elementu - - + + StdCmdUndo - Edit - Edytuj + Edit + Edytuj - &Undo - Cofnij + &Undo + Cofnij - Undo exactly one action - Undo exactly one action + Undo exactly one action + Undo exactly one action - - + + StdCmdUserInterface - View - Widok + View + Widok - Dock views - Dock views + Dock views + Dock views - Dock all top-level views - Dock all top-level views + Dock all top-level views + Dock all top-level views - - + + StdCmdViewAxo - Standard-View - Normalny widok + Standard-View + Normalny widok - Axometric - Aksonometria + Axometric + Aksonometria - Set to axometric view - Set to axometric view + Set to axometric view + Set to axometric view - - + + StdCmdViewBottom - Standard-View - Normalny widok + Standard-View + Normalny widok - Bottom - Bottom + Bottom + Bottom - Set to bottom view - Set to bottom view + Set to bottom view + Set to bottom view - - + + StdCmdViewCreate - Standard-View - Normalny widok + Standard-View + Normalny widok - Create new view - Utwórz nowy widok + Create new view + Utwórz nowy widok - Creates a new view window for the active document - Creates a new view window for the active document + Creates a new view window for the active document + Creates a new view window for the active document - - + + StdCmdViewExample1 - Standard-View - Normalny widok + Standard-View + Normalny widok - Inventor example #1 - Inventor example #1 + Inventor example #1 + Inventor example #1 - Shows a 3D texture with manipulator - Shows a 3D texture with manipulator + Shows a 3D texture with manipulator + Shows a 3D texture with manipulator - - + + StdCmdViewExample2 - Standard-View - Normalny widok + Standard-View + Normalny widok - Inventor example #2 - Inventor example #2 + Inventor example #2 + Inventor example #2 - Shows spheres and drag-lights - Shows spheres and drag-lights + Shows spheres and drag-lights + Shows spheres and drag-lights - - + + StdCmdViewExample3 - Standard-View - Normalny widok + Standard-View + Normalny widok - Inventor example #3 - Inventor example #3 + Inventor example #3 + Inventor example #3 - Shows a animated texture - Pokaż animowaną teksturę + Shows a animated texture + Pokaż animowaną teksturę - - + + StdCmdViewFitAll - Standard-View - Normalny widok + Standard-View + Normalny widok - Fit all - Dopasuj wszystko + Fit all + Dopasuj wszystko - Fits the whole content on the screen - Dopasuj zawartość ekranu do Widoku + Fits the whole content on the screen + Dopasuj zawartość ekranu do Widoku - - + + StdCmdViewFitSelection - Standard-View - Normalny widok + Standard-View + Normalny widok - Fit selection - Dopasuj Widok + Fit selection + Dopasuj Widok - Fits the selected content on the screen - Dopasuj widok do zaznaczenia + Fits the selected content on the screen + Dopasuj widok do zaznaczenia - - + + StdCmdViewFront - Standard-View - Normalny widok + Standard-View + Normalny widok - Front - Przód + Front + Przód - Set to front view - Ustaw Widok z przodu + Set to front view + Ustaw Widok z przodu - - + + StdCmdViewIvIssueCamPos - Standard-View - Normalny widok + Standard-View + Normalny widok - Issue camera position - Issue camera position + Issue camera position + Issue camera position - Issue the camera position to the console and to a macro, to easily recall this position - Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position + Issue the camera position to the console and to a macro, to easily recall this position - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Normalny widok + Standard-View + Normalny widok - Stereo Interleaved Columns - Stereo Interleaved Columns + Stereo Interleaved Columns + Stereo Interleaved Columns - Switch stereo viewing to Interleaved Columns - Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Normalny widok + Standard-View + Normalny widok - Stereo Interleaved Rows - Stereo Interleaved Rows + Stereo Interleaved Rows + Stereo Interleaved Rows - Switch stereo viewing to Interleaved Rows - Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows - - + + StdCmdViewIvStereoOff - Standard-View - Normalny widok + Standard-View + Normalny widok - Stereo Off - Wyłącz Stereo + Stereo Off + Wyłącz Stereo - Switch stereo viewing off - Switch stereo viewing off + Switch stereo viewing off + Switch stereo viewing off - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Normalny widok + Standard-View + Normalny widok - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Normalny widok + Standard-View + Normalny widok - Stereo red/green - Stereo czerwono-zielone + Stereo red/green + Stereo czerwono-zielone - Switch stereo viewing to red/green - Switch stereo viewing to red/green + Switch stereo viewing to red/green + Switch stereo viewing to red/green - - + + StdCmdViewLeft - Standard-View - Normalny widok + Standard-View + Normalny widok - Left - Lewa + Left + Lewa - Set to left view - Ustaw widok z lewej + Set to left view + Ustaw widok z lewej - - + + StdCmdViewRear - Standard-View - Normalny widok + Standard-View + Normalny widok - Rear - Tył + Rear + Tył - Set to rear view - Ustaw widok z tyłu + Set to rear view + Ustaw widok z tyłu - - + + StdCmdViewRight - Standard-View - Normalny widok + Standard-View + Normalny widok - Right - Prawa + Right + Prawa - Set to right view - Ustaw widok z prawej + Set to right view + Ustaw widok z prawej - - + + + StdCmdViewRotateLeft + + Standard-View + Normalny widok + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Normalny widok + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Normalny widok + Standard-View + Normalny widok - Top - Góra + Top + Góra - Set to top view - Ustaw widok z góry + Set to top view + Ustaw widok z góry - - + + StdCmdWhatsThis - Help - Pomoc + Help + Pomoc - &What's This? - &Co to jest? + &What's This? + &Co to jest? - What's This - Co to jest + What's This + Co to jest - - + + StdCmdWindows - Window - Okno + Window + Okno - &Windows... - &Windows... + &Windows... + &Windows... - Windows list - Lista okien + Windows list + Lista okien - - + + StdCmdWindowsMenu - Window - Okno + Window + Okno - Activates this window - Uaktywnia okno + Activates this window + Uaktywnia okno - - + + StdCmdWorkbench - View - Widok + View + Widok - Workbench - Środowisko + Workbench + Środowisko - Switch between workbenches - Przełącz Środowisko + Switch between workbenches + Przełącz Środowisko - - + + StdOrthographicCamera - Standard-View - Normalny widok + Standard-View + Normalny widok - Orthographic view - Widok ortogonalny + Orthographic view + Widok ortogonalny - Switches to orthographic view mode - Przełącza do Widoku ortogonalnego + Switches to orthographic view mode + Przełącza do Widoku ortogonalnego - - + + StdPerspectiveCamera - Standard-View - Normalny widok + Standard-View + Normalny widok - Perspective view - Widok perspektywy + Perspective view + Widok perspektywy - Switches to perspective view mode - Przełącza na tryb widoku perspektywy + Switches to perspective view mode + Przełącza na tryb widoku perspektywy - - + + StdViewBoxZoom - Standard-View - Normalny widok + Standard-View + Normalny widok - Box zoom - Box zoom + Box zoom + Box zoom - - + + StdViewDockUndockFullscreen - Standard-View - Normalny widok + Standard-View + Normalny widok - Document window - Okno dokumentu + Document window + Okno dokumentu - Display the active view either in fullscreen, in undocked or docked mode - Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode + Display the active view either in fullscreen, in undocked or docked mode - - + + StdViewScreenShot - Standard-View - Normalny widok + Standard-View + Normalny widok - Save picture... - Zapisz obrazek... + Save picture... + Zapisz obrazek... - Creates a screenshot of the active view - Tworzy zrzut ekranu aktywnego widoku + Creates a screenshot of the active view + Tworzy zrzut ekranu aktywnego widoku - - + + StdViewZoomIn - Standard-View - Normalny widok + Standard-View + Normalny widok - Zoom In - Powiększ + Zoom In + Powiększ - - + + StdViewZoomOut - Standard-View - Normalny widok + Standard-View + Normalny widok - Zoom Out - Pomniejsz + Zoom Out + Pomniejsz - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Plik + &File + &Plik - &Edit - &Edycja + &Edit + &Edycja - Standard views - Widoki standardowe + Standard views + Widoki standardowe - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Powiększenie + &Zoom + &Powiększenie - Visibility - Widoczność + Visibility + Widoczność - &View - &Widok + &View + &Widok - &Tools - &Narzędzia + &Tools + &Narzędzia - &Macro - &Macro + &Macro + &Macro - &Windows - &Okna + &Windows + &Okna - &On-line help - &Pomoc on-line + &On-line help + &Pomoc on-line - &Help - &Pomoc + &Help + &Pomoc - File - Plik + File + Plik - Macro - Makro + Macro + Makro - View - Widok + View + Widok - Special Ops - Specjalne opcje + Special Ops + Specjalne opcje - - + + testClass - test - test + test + test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Wybierz styl Panelu zadań + Choose the style of the Task Panel + Wybierz styl Panelu zadań - Default - Domyślne + Default + Domyślne - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_pt.ts b/src/Gui/Language/FreeCAD_pt.ts index fd0cde922..7f76a4e8e 100644 --- a/src/Gui/Language/FreeCAD_pt.ts +++ b/src/Gui/Language/FreeCAD_pt.ts @@ -1,5478 +1,5896 @@ - - + + Angle - Form - Formulário + Form + Formulário - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Snap de ângulo + Angle Snap + Snap de ângulo - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - nenhum + none + nenhum - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Adicionar + + + Remove + Remover + + + Move up + Mover para cima + + + Move down + Move para baixo + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Pressione o botão esquerdo do mouse + Press left mouse button + Pressione o botão esquerdo do mouse - Press SHIFT and middle mouse button - Pressione SHIFT e o botão do meio do mouse + Press SHIFT and middle mouse button + Pressione SHIFT e o botão do meio do mouse - Press middle mouse button - Pressione o botão do meio do mouse + Press middle mouse button + Pressione o botão do meio do mouse - Scroll middle mouse button - Role a roda do mouse + Scroll middle mouse button + Role a roda do mouse - - + + Gui::CADNavigationStyle - Press left mouse button - Pressione o botão esquerdo do mouse + Press left mouse button + Pressione o botão esquerdo do mouse - Press middle mouse button - Pressione o botão do meio do mouse + Press middle mouse button + Pressione o botão do meio do mouse - Press left and middle mouse button - Pressione o botão esquerdo e do meio do mouse + Press left and middle mouse button + Pressione o botão esquerdo e do meio do mouse - Scroll middle mouse button - Role a roda do mouse + Scroll middle mouse button + Role a roda do mouse - - + + Gui::Command - Standard - Padrão + Standard + Padrão - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Cancelar + &Cancel + &Cancelar - - + + Gui::ControlSingleton - Task panel - Painel de tarefas + Task panel + Painel de tarefas - - + + Gui::Dialog::AboutApplication - About - Sobre + About + Sobre - Revision number - Número de revisão + Revision number + Número de revisão - Version - Versão + Version + Versão - OK - OK + OK + OK - - + + - Release date - Data de lançamento + Release date + Data de lançamento - Platform - Plataforma + Platform + Plataforma - License... - Licença... + License... + Licença... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Botão %1 + Button %1 + Botão %1 - Out Of Range - Fora do intervalo + Out Of Range + Fora do intervalo - - + + Gui::Dialog::CommandModel - Commands - Comandos + Commands + Comandos - - + + Gui::Dialog::DemoMode - View Turntable - Vista Turntable + View Turntable + Vista Turntable - Speed - Velocidade + Speed + Velocidade - Maximum - Máximo + Maximum + Máximo - Minimum - Mínimo + Minimum + Mínimo - Fullscreen - Tela cheia + Fullscreen + Tela cheia - Enable timer - Habilitar o timer + Enable timer + Habilitar o timer - s - s + s + s - Angle - Ângulo + Angle + Ângulo + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Reproduzir - -90° - -90° + Stop + Parar - Play - Reproduzir + Close + Fechar - - Stop - Parar - - - Close - Fechar - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Escolhe uma Janela + Choose Window + Escolhe uma Janela - &Activate - &Ativar + &Activate + &Ativar - Alt+A - Alt + A + Alt+A + Alt + A - &Cancel - &Cancelar + &Cancel + &Cancelar - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Janelas + Windows + Janelas - - + + Gui::Dialog::DlgAuthorization - Authorization - Autorização + Authorization + Autorização - &OK - &OK + &OK + &OK - &Cancel - &Cancelar + &Cancel + &Cancelar - Password: - Senha: + Password: + Senha: - User name: - Nome de usuário: + User name: + Nome de usuário: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Escolher ícone + Choose Icon + Escolher ícone - OK - OK + OK + OK - Cancel - Cancelar + Cancel + Cancelar - Add icons... - Adicionar ícones ... + Add icons... + Adicionar ícones ... - - + + Gui::Dialog::DlgCustomActions - Macros - Macros + Macros + Macros - Setup Custom Macros - Configurar macros personalizadas + Setup Custom Macros + Configurar macros personalizadas - Macro: - Macro: + Macro: + Macro: - ... - ... + ... + ... - Pixmap - Imagem + Pixmap + Imagem - Accelerator: - Atalho: + Accelerator: + Atalho: - What's this: - O Que é Isto: + What's this: + O Que é Isto: - Status text: - Texto de status: + Status text: + Texto de status: - Tool tip: - Dica: + Tool tip: + Dica: - Menu text: - Texto do menu: + Menu text: + Texto do menu: - Add - Adicionar + Add + Adicionar - Remove - Remover + Remove + Remover - Replace - Substituir + Replace + Substituir - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ícones + Icons + Ícones - Macros - Macros + Macros + Macros - No macro - Nenhuma macro + No macro + Nenhuma macro - No macros found. - Nenhuma macro encontrada. + No macros found. + Nenhuma macro encontrada. - Macro not found - Macro não encontrada + Macro not found + Macro não encontrada - Sorry, couldn't find macro file '%1'. - Desculpe, não foi possível encontrar o arquivo de macro '%1'. + Sorry, couldn't find macro file '%1'. + Desculpe, não foi possível encontrar o arquivo de macro '%1'. - Empty macro - Macro vazia + Empty macro + Macro vazia - Please specify the macro first. - Por favor especifique a macro primeiro. + Please specify the macro first. + Por favor especifique a macro primeiro. - Empty text - Texto vazio + Empty text + Texto vazio - Please specify the menu text first. - Por favor especifique o texto do menu primeiro. + Please specify the menu text first. + Por favor especifique o texto do menu primeiro. - No item selected - Nenhum item selecionado + No item selected + Nenhum item selecionado - Please select a macro item first. - Primeiro, selecione uma macro. + Please select a macro item first. + Primeiro, selecione uma macro. - - + + Gui::Dialog::DlgCustomCommands - Commands - Comandos + Commands + Comandos - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Categoria + Category + Categoria - Icon - Ícone + Icon + Ícone - Command - Comando + Command + Comando - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Teclado + Keyboard + Teclado - Description: - Descrição: + Description: + Descrição: - &Category: - &Categoria: + &Category: + &Categoria: - C&ommands: - C&omandos: + C&ommands: + C&omandos: - Current shortcut: - Atalho atual: + Current shortcut: + Atalho atual: - Press &new shortcut: - Indique o &novo atalho: + Press &new shortcut: + Indique o &novo atalho: - Currently assigned to: - Atualmente atribuído a: + Currently assigned to: + Atualmente atribuído a: - &Assign - &Atribuir + &Assign + &Atribuir - Alt+A - Alt + A + Alt+A + Alt + A - &Reset - &Restaurar + &Reset + &Restaurar - Alt+R - Alt + R + Alt+R + Alt + R - Re&set All - Re&definir Tudo + Re&set All + Re&definir Tudo - Alt+S - Alt + D + Alt+S + Alt + D - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ícone + Icon + Ícone - Command - Comando + Command + Comando - none - nenhum + none + nenhum - Multiple defined shortcut - Atalho definido várias vezes + Multiple defined shortcut + Atalho definido várias vezes - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - O atalho '%1' é definido mais de uma vez. Isso pode provocar um comportamento inesperado. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + O atalho '%1' é definido mais de uma vez. Isso pode provocar um comportamento inesperado. - Already defined shortcut - Atalho já definido + Already defined shortcut + Atalho já definido - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - O atalho '%1' já está atribuído a '%2'. + O atalho '%1' já está atribuído a '%2'. Defina outro atalho. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Barras de ferramentas + Toolbox bars + Barras de ferramentas - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Barras de ferramentas + Toolbars + Barras de ferramentas - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> As mudanças terão efeito quando carregar novamente o Workbench apropriado</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> As mudanças terão efeito quando carregar novamente o Workbench apropriado</p></body></html> - Move right - Mover para a direita + Move right + Mover para a direita - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Move o item selecionado um nível abaixo.</b> <p> Isso também irá alterar o nível do item pai. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Move o item selecionado um nível abaixo.</b> <p> Isso também irá alterar o nível do item pai. </p> - Move left - Mover para a esquerda + Move left + Mover para a esquerda - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Mover o item selecionado um nível acima.</b> <p> Isso também irá alterar o nível do item pai. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Mover o item selecionado um nível acima.</b> <p> Isso também irá alterar o nível do item pai. </p> - Move down - Move para baixo + Move down + Move para baixo - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move o item selecionado para baixo.</b> <p> O item será movido dentro do nível de hierarquia. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move o item selecionado para baixo.</b> <p> O item será movido dentro do nível de hierarquia. </p> - Move up - Mover para cima + Move up + Mover para cima - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move o item selecionado para cima.</b> <p> O item será movido dentro do nível de hierarquia. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move o item selecionado para cima.</b> <p> O item será movido dentro do nível de hierarquia. </p> - New... - Novo... + New... + Novo... - Rename... - Renomear... + Rename... + Renomear... - Delete - Excluir + Delete + Excluir - Icon - Ícone + Icon + Ícone - Command - Comando + Command + Comando - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Nova barra de ferramentas + New toolbar + Nova barra de ferramentas - Toolbar name: - Nome da barra de ferramentas: + Toolbar name: + Nome da barra de ferramentas: - Duplicated name - Nome duplicado + Duplicated name + Nome duplicado - The toolbar name '%1' is already used - O nome de barra de ferramentas '%1' já está sendo usado + The toolbar name '%1' is already used + O nome de barra de ferramentas '%1' já está sendo usado - Rename toolbar - Renomear barra de ferramentas + Rename toolbar + Renomear barra de ferramentas - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Personalizar + Customize + Personalizar - &Help - A&juda + &Help + A&juda - &Close - &Fechar + &Close + &Fechar - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - Nenhum Spaceball encontrado + No Spaceball Present + Nenhum Spaceball encontrado - Buttons - Botões + Buttons + Botões - Clear - Limpar + Clear + Limpar - Print Reference - Imprimir referência + Print Reference + Imprimir referência - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Exibir propriedades + Display properties + Exibir propriedades - Display - Tela + Display + Tela - Transparency: - Transparência: + Transparency: + Transparência: - Line width: - Largura da linha: + Line width: + Largura da linha: - Point size: - Tamanho de ponto: + Point size: + Tamanho de ponto: - Material - Material + Material + Material - ... - ... + ... + ... - Close - Fechar + Close + Fechar - Viewing mode - Modo de visualização + Viewing mode + Modo de visualização - Display mode: - Modo de exibição: + Display mode: + Modo de exibição: - Plot mode: - Modo de impressão: + Plot mode: + Modo de impressão: - - + + - Line transparency: - Transparência das linhas: + Line transparency: + Transparência das linhas: - Line color: - Cor das linhas: + Line color: + Cor das linhas: - Shape color: - Cor das formas: + Shape color: + Cor das formas: - Color plot: - Cor de plotagem: + Color plot: + Cor de plotagem: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Editor + Editor + Editor - Options - Opções + Options + Opções - Enable line numbers - Ativar números de linha + Enable line numbers + Ativar números de linha - Enable folding - Habilitar dobra + Enable folding + Habilitar dobra - Indentation - Indentação + Indentation + Indentação - Insert spaces - Inserir espaços + Insert spaces + Inserir espaços - Tab size: - Tamanho da tabulação: + Tab size: + Tamanho da tabulação: - Indent size: - Tamanho da indentação: + Indent size: + Tamanho da indentação: - Keep tabs - Manter abas + Keep tabs + Manter abas - Display Items - Exibir itens + Display Items + Exibir itens - Family: - Família: + Family: + Família: - Size: - Tamanho: + Size: + Tamanho: - Preview: - Pré-visualização: + Preview: + Pré-visualização: - - + + - - + + Gui::Dialog::DlgGeneral - General - Geral + General + Geral - Start up - Início + Start up + Início - Enable splash screen at start up - Mostrar a tela de splash ao iniciar + Enable splash screen at start up + Mostrar a tela de splash ao iniciar - Switch to tab of report window: - Alternar para a guia da janela de relatório: + Switch to tab of report window: + Alternar para a guia da janela de relatório: - Auto load module after start up: - Auto-carregar módulo ao iniciar: + Auto load module after start up: + Auto-carregar módulo ao iniciar: - Language - Idioma + Language + Idioma - Change language: - Alterar idioma: + Change language: + Alterar idioma: - Main window - Janela principal + Main window + Janela principal - Size of recent file list - Tamanho da lista de arquivos recentes + Size of recent file list + Tamanho da lista de arquivos recentes - Window style: - Estilo de janela: + Window style: + Estilo de janela: - Size of toolbar icons: - Tamanho dos ícones da barra de ferramentas: + Size of toolbar icons: + Tamanho dos ícones da barra de ferramentas: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Padrão (%1 x %1) + Default (%1 x %1) + Padrão (%1 x %1) - Small (%1 x %1) - Pequeno (%1 x %1) + Small (%1 x %1) + Pequeno (%1 x %1) - Large (%1 x %1) - Grande (%1 x %1) + Large (%1 x %1) + Grande (%1 x %1) - Extra large (%1 x %1) - Muito grande (%1 x %1) + Extra large (%1 x %1) + Muito grande (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Entrada + Input + Entrada - OK - OK + OK + OK - Cancel - Cancelar + Cancel + Cancelar - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Inspetor de cena + Scene Inspector + Inspetor de cena - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Executar macro + Execute macro + Executar macro - Macro name: - Nome da macro: + Macro name: + Nome da macro: - Macro destination: - Destino da macro: + Macro destination: + Destino da macro: - Execute - Executar + Execute + Executar - Close - Fechar + Close + Fechar - Create - Criar + Create + Criar - Delete - Excluir + Delete + Excluir - Edit - Editar + Edit + Editar - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Macros + Macros + Macros - Macro file - Arquivo de macro + Macro file + Arquivo de macro - Enter a file name, please: - Digite um nome de arquivo, por favor: + Enter a file name, please: + Digite um nome de arquivo, por favor: - Existing file - Arquivo existente + Existing file + Arquivo existente - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Este arquivo já existe. - Delete macro - Excluir macro + Delete macro + Excluir macro - Do you really want to delete the macro '%1'? - Você realmente deseja excluir a macro '%1'? + Do you really want to delete the macro '%1'? + Você realmente deseja excluir a macro '%1'? - Cannot create file - Não é possível criar o arquivo + Cannot create file + Não é possível criar o arquivo - Creation of file '%1' failed. - Falha na criação do arquivo '%1'. + Creation of file '%1' failed. + Falha na criação do arquivo '%1'. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Gravação de macros + Macro recording + Gravação de macros - Macro name: - Nome da macro: + Macro name: + Nome da macro: - Stop - Parar + Stop + Parar - Cancel - Cancelar + Cancel + Cancelar - Macro path: - Caminho de macro: + Macro path: + Caminho de macro: - ... - ... + ... + ... - Record - Gravar + Record + Gravar - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Gravador de macro + Macro recorder + Gravador de macro - Specify first a place to save. - Especifique um local para salvar. + Specify first a place to save. + Especifique um local para salvar. - Existing macro - Macro existente + Existing macro + Macro existente - The macro '%1' already exists. Do you want to overwrite? - A macro '%1' já existe. Deseja substituir? + The macro '%1' already exists. Do you want to overwrite? + A macro '%1' já existe. Deseja substituir? - The macro directory doesn't exist. Please, choose another one. - O diretório de macro não existe. Por favor, escolha um outro. + The macro directory doesn't exist. Please, choose another one. + O diretório de macro não existe. Por favor, escolha um outro. - Choose macro directory - Escolha o diretório de macros + Choose macro directory + Escolha o diretório de macros - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Propriedades do material + Material properties + Propriedades do material - &Close - &Fechar + &Close + &Fechar - Alt+C - Alt + C + Alt+C + Alt + C - Material - Material + Material + Material - Diffuse color: - Cor Diffuse: + Diffuse color: + Cor Diffuse: - Specular color: - Cor Specular: + Specular color: + Cor Specular: - Shininess: - Brilho: + Shininess: + Brilho: - % - % + % + % - Ambient color: - Cor ambiente: + Ambient color: + Cor ambiente: - - + + - Emissive color: - Cor de emissão: + Emissive color: + Cor de emissão: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Ajuda on-line + On-line help + Ajuda on-line - Help viewer - Visualizador da ajuda + Help viewer + Visualizador da ajuda - Location of start page - Localização da página inicial + Location of start page + Localização da página inicial - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - Arquivos HTML (*.html *.htm) + HTML files (*.html *.htm) + Arquivos HTML (*.html *.htm) - Access denied - Acesso negado + Access denied + Acesso negado - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Acesso negado a '%1' + Acesso negado a '%1' Por favor especifique outro diretório. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Editor de parâmetros + Parameter Editor + Editor de parâmetros - Save to disk - Salvar no disco + Save to disk + Salvar no disco - Alt+C - Alt + C + Alt+C + Alt + C - &Close - &Fechar + &Close + &Fechar - - + + Gui::Dialog::DlgParameterImp - Group - Grupo + Group + Grupo - Name - Nome + Name + Nome - Type - Tipo + Type + Tipo - Value - Valor + Value + Valor - User parameter - Parâmetros de usuário + User parameter + Parâmetros de usuário - Invalid input - Entrada inválida + Invalid input + Entrada inválida - Invalid key name '%1' - Nome da chave inválido '%1' + Invalid key name '%1' + Nome da chave inválido '%1' - System parameter - Parâmetro de sistema + System parameter + Parâmetro de sistema - - + + Gui::Dialog::DlgPreferences - Preferences - Preferências + Preferences + Preferências - &Help - A&juda + &Help + A&juda - Alt+H - Alt+J + Alt+H + Alt+J - &OK - &OK + &OK + &OK - &Apply - &Aplicar + &Apply + &Aplicar - Alt+A - Alt + A + Alt+A + Alt + A - &Cancel - &Cancelar + &Cancel + &Cancelar - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Parâmetro incorreto + Wrong parameter + Parâmetro incorreto - - + + Gui::Dialog::DlgProjectInformation - Project information - Informações do projeto + Project information + Informações do projeto - Information - Informação + Information + Informação - &Name: - &Nome: + &Name: + &Nome: - Commen&t: - Comen&tário: + Commen&t: + Comen&tário: - Path: - Caminho: + Path: + Caminho: - &Last modified by: - &Modificado por último por: + &Last modified by: + &Modificado por último por: - Created &by: - Criado &por: + Created &by: + Criado &por: - Com&pany: - &Empresa: + Com&pany: + &Empresa: - Last &modification date: - Data da última &modificação: + Last &modification date: + Data da última &modificação: - Creation &date: - &Data de criação: + Creation &date: + &Data de criação: - &OK - &OK + &OK + &OK - &Cancel - &Cancelar + &Cancel + &Cancelar - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Utilitário de projeto + Project utility + Utilitário de projeto - Extract project - Extrair um projeto + Extract project + Extrair um projeto - Source - Fonte + Source + Fonte - Project file (*.fcstd) - Arquivo de projeto (*.fcstd) + Project file (*.fcstd) + Arquivo de projeto (*.fcstd) - Destination - Destino + Destination + Destino - Extract - Extrair + Extract + Extrair - Create project - Criar projeto + Create project + Criar projeto - Document.xml - Document.xml + Document.xml + Document.xml - Create - Criar + Create + Criar - Load project file after creation - Carregar o arquivo de projeto após a criação + Load project file after creation + Carregar o arquivo de projeto após a criação - Empty source - Fonte vazia + Empty source + Fonte vazia - No source is defined. - Nenhuma fonte foi definida. + No source is defined. + Nenhuma fonte foi definida. - Empty destination - Destino vazio + Empty destination + Destino vazio - No destination is defined. - Nenhum destino foi definido. + No destination is defined. + Nenhum destino foi definido. - - + + Gui::Dialog::DlgReportView - Output window - janela de saída + Output window + janela de saída - Output - Saída + Output + Saída - Record log messages - Gravar mensagens de log + Record log messages + Gravar mensagens de log - Record warnings - Gravar advertências + Record warnings + Gravar advertências - Record error messages - Gravar mensagens de erro + Record error messages + Gravar mensagens de erro - Colors - Cores + Colors + Cores - Normal messages: - Mensagens normais: + Normal messages: + Mensagens normais: - Log messages: - Mensagens de log: + Log messages: + Mensagens de log: - Warnings: - Advertências: + Warnings: + Advertências: - Errors: - Erros: + Errors: + Erros: - - + + - Redirect internal Python errors to report view - Redirecionar erros internos do Python para a janela de relatório + Redirect internal Python errors to report view + Redirecionar erros internos do Python para a janela de relatório - Redirect internal Python output to report view - Redirecionar a saída interna de Python para a janela de relatório + Redirect internal Python output to report view + Redirecionar a saída interna de Python para a janela de relatório - - + + Gui::Dialog::DlgRunExternal - Running external program - Executando programa externo + Running external program + Executando programa externo - TextLabel - Rótulo de texto + TextLabel + Rótulo de texto - Advanced >> - Avançado >> + Advanced >> + Avançado >> - ... - ... + ... + ... - Accept changes - Aceitar mudanças + Accept changes + Aceitar mudanças - Discard changes - Descartar alterações + Discard changes + Descartar alterações - Abort program - Abortar o programa + Abort program + Abortar o programa - Help - Ajuda + Help + Ajuda - Select a file - Selecione um arquivo + Select a file + Selecione um arquivo - - + + Gui::Dialog::DlgSettings3DView - 3D View - Vista 3D + 3D View + Vista 3D - 3D View settings - Configurações de visualização 3D + 3D View settings + Configurações de visualização 3D - Show coordinate system in the corner - Mostrar sistema de coordenadas no canto + Show coordinate system in the corner + Mostrar sistema de coordenadas no canto - Show counter of frames per second - Mostrar contador de frames por segundo + Show counter of frames per second + Mostrar contador de frames por segundo - Enable animation - Habilitar animação + Enable animation + Habilitar animação - Enable anti-aliasing (slower) - Habilitar anti-aliasing (mais lento) + Enable anti-aliasing (slower) + Habilitar anti-aliasing (mais lento) - Eye to eye distance for stereo modes: - Distância entre olhos para modos estéreo: + Eye to eye distance for stereo modes: + Distância entre olhos para modos estéreo: - Camera type - Tipo de câmera + Camera type + Tipo de câmera - Orthographic rendering - Renderização ortográfica + Orthographic rendering + Renderização ortográfica - Perspective rendering - Renderização perspectiva + Perspective rendering + Renderização perspectiva - - + + - 3D Navigation - Navegação 3D + 3D Navigation + Navegação 3D - Mouse... - Mouse... + Mouse... + Mouse... - Intensity of backlight - Intensidade da luz de fundo + Intensity of backlight + Intensidade da luz de fundo - Enable backlight color - Habilitar a cor da luz de fundo + Enable backlight color + Habilitar a cor da luz de fundo - Orbit style - Estilo de orbita + Orbit style + Estilo de orbita - Turntable - Plataforma + Turntable + Plataforma - Trackball - Trackball + Trackball + Trackball - Invert zoom - Inverter o zoom + Invert zoom + Inverter o zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - navegação de %1 + %1 navigation + navegação de %1 - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Modelo de cores + Color model + Modelo de cores - &Gradient: - &Gradiente: + &Gradient: + &Gradiente: - red-yellow-green-cyan-blue - vermelho-amarelo-verde-ciano-azul + red-yellow-green-cyan-blue + vermelho-amarelo-verde-ciano-azul - blue-cyan-green-yellow-red - azul-turquesa-verde-amarelo-vermelho + blue-cyan-green-yellow-red + azul-turquesa-verde-amarelo-vermelho - white-black - branco-preto + white-black + branco-preto - black-white - preto-branco + black-white + preto-branco - Visibility - Visibilidade + Visibility + Visibilidade - Out g&rayed - Saída &inativa + Out g&rayed + Saída &inativa - Alt+R - Alt + R + Alt+R + Alt + R - Out &invisible - Saída in&visível + Out &invisible + Saída in&visível - Alt+I - Alt+v + Alt+I + Alt+v - Style - Estilo + Style + Estilo - &Zero - Zero + &Zero + Zero - Alt+Z - Alt + Z + Alt+Z + Alt + Z - &Flow - &Fluxo + &Flow + &Fluxo - Alt+F - Alt + F + Alt+F + Alt + F - &OK - &OK + &OK + &OK - &Cancel - &Cancelar + &Cancel + &Cancelar - Parameter range - Intervalo de parâmetros + Parameter range + Intervalo de parâmetros - Mi&nimum: - Mí&nimo: + Mi&nimum: + Mí&nimo: - Ma&ximum: - Má&ximo: + Ma&ximum: + Má&ximo: - &Labels: - Rótu&los: + &Labels: + Rótu&los: - &Decimals: - &Decimais: + &Decimals: + &Decimais: - - + + - Color-gradient settings - Configurações de gradiente de cores + Color-gradient settings + Configurações de gradiente de cores - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Parâmetro incorreto + Wrong parameter + Parâmetro incorreto - The maximum value must be higher than the minimum value. - O valor máximo deve ser superior ao valor mínimo. + The maximum value must be higher than the minimum value. + O valor máximo deve ser superior ao valor mínimo. - - + + Gui::Dialog::DlgSettingsDocument - Document - Documento + Document + Documento - General - Geral + General + Geral - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Nível de compactação ao salvar documentos (0 = nenhum, 9 = mais alto, 3 = padrão) + Nível de compactação ao salvar documentos (0 = nenhum, 9 = mais alto, 3 = padrão) - Create new document at start up - Criar um novo documento ao iniciar + Create new document at start up + Criar um novo documento ao iniciar - Storage - Armazenamento + Storage + Armazenamento - Saving transactions (Auto-save) - Salvar as transações (auto-save) + Saving transactions (Auto-save) + Salvar as transações (auto-save) - Discard saved transaction after saving document - Descartar transações salvas depois de salvar o documento + Discard saved transaction after saving document + Descartar transações salvas depois de salvar o documento - Save thumbnail into project file when saving document - Salvar miniatura no arquivo quando salvar um documento + Save thumbnail into project file when saving document + Salvar miniatura no arquivo quando salvar um documento - Create up to backup files when resaving document - Criar arquivos de backup ao salvar o documento + Create up to backup files when resaving document + Criar arquivos de backup ao salvar o documento - Document objects - Objetos do documento + Document objects + Objetos do documento - Allow duplicate object labels in one document - Permitir rótulos de objetos duplicados em um documento + Allow duplicate object labels in one document + Permitir rótulos de objetos duplicados em um documento - Maximum Undo/Redo steps - Número máximo de operações Desfazer/Refazer + Maximum Undo/Redo steps + Número máximo de operações Desfazer/Refazer - Using Undo/Redo on documents - Usar Desfazer/Refazer em documentos + Using Undo/Redo on documents + Usar Desfazer/Refazer em documentos - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Texto + Text + Texto - Bookmark - Favorito + Bookmark + Favorito - Breakpoint - Ponto de Interrupção + Breakpoint + Ponto de Interrupção - Keyword - Palavra-chave + Keyword + Palavra-chave - Comment - Comentário + Comment + Comentário - Block comment - Comentário de bloco + Block comment + Comentário de bloco - Number - Número + Number + Número - String - Texto + String + Texto - Character - Caráter + Character + Caráter - Class name - Nome de classe + Class name + Nome de classe - Define name - Definir nome + Define name + Definir nome - Operator - Operador + Operator + Operador - Python output - Saída de Python + Python output + Saída de Python - Python error - Erro de python + Python error + Erro de python - Items - Itens + Items + Itens - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Configurações de imagem + Image settings + Configurações de imagem - Image properties - Propriedades de imagem + Image properties + Propriedades de imagem - Back&ground: - P&lano de Fundo: + Back&ground: + P&lano de Fundo: - Current - Atual + Current + Atual - White - Branco + White + Branco - Black - Preto + Black + Preto - Transparent - Transparente + Transparent + Transparente - Image dimensions - Dimensões da imagem + Image dimensions + Dimensões da imagem - Pixel - Pixel + Pixel + Pixel - &Width: - &Largura: + &Width: + &Largura: - Current screen - Tela atual + Current screen + Tela atual - Icon 32 x 32 - Ícone de 32 x 32 + Icon 32 x 32 + Ícone de 32 x 32 - Icon 64 x 64 - Ícone de 64 x 64 + Icon 64 x 64 + Ícone de 64 x 64 - Icon 128 x 128 - Ícone de 128 x 128 + Icon 128 x 128 + Ícone de 128 x 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Tamanhos padrão: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Altura: - Standard sizes: - Tamanhos padrão: + Aspect ratio: + Proporção: - &Height: - &Altura: + &Screen + &Tela - Aspect ratio: - Proporção: + Alt+S + Alt + D - &Screen - &Tela + &4:3 + &4:3 - Alt+S - Alt + D + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt +1 - &1:1 - &1:1 + Image comment + Comentário da imagem - Alt+1 - Alt +1 + Insert MIBA + Inserir MIBA - Image comment - Comentário da imagem + Insert comment + Inserir comentário - - Insert MIBA - Inserir MIBA - - - Insert comment - Inserir comentário - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Macro + Macro + Macro - Macro recording settings - Configurações de gravação de macros + Macro recording settings + Configurações de gravação de macros - Logging Commands - Comandos de log + Logging Commands + Comandos de log - Show script commands in python console - Mostrar os comandos de script no console python + Show script commands in python console + Mostrar os comandos de script no console python - Log all commands issued by menus to file: - Salvar todos os comandos emitidos por menus em arquivo de log: + Log all commands issued by menus to file: + Salvar todos os comandos emitidos por menus em arquivo de log: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Comandos da interface gráfica + Gui commands + Comandos da interface gráfica - Recording GUI commands - Gravar os comandos da interface gráfica + Recording GUI commands + Gravar os comandos da interface gráfica - Record as comment - Gravar como comentário + Record as comment + Gravar como comentário - Macro path - Caminho de macro + Macro path + Caminho de macro - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Unidades + Units + Unidades - Units settings - Configurações de unidades + Units settings + Configurações de unidades - Standard (mm/kg/s/degree) - Padrão (mm,kg,s,grau) + Standard (mm/kg/s/degree) + Padrão (mm,kg,s,grau) - MKS (m/kg/s/degree) - MKS (m/kg/s/graus) + MKS (m/kg/s/degree) + MKS (m/kg/s/graus) - Magnitude - Magnitude + Magnitude + Magnitude - Unit - Unidade + Unit + Unidade - User system: - sistema do usuário: + User system: + sistema do usuário: - Imperial (in/lb) - Imperial (in/lb) + Imperial (in/lb) + Imperial (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Cores + Colors + Cores - Selection - Seleção + Selection + Seleção - Enable selection highlighting - Habilitar o enfoque da seleção + Enable selection highlighting + Habilitar o enfoque da seleção - Enable preselection highlighting - Habilitar o enfoque de preseleção + Enable preselection highlighting + Habilitar o enfoque de preseleção - Background color - Cor de fundo + Background color + Cor de fundo - Middle color - Cor intermediária + Middle color + Cor intermediária - Color gradient - Gradiente de cor + Color gradient + Gradiente de cor - Simple color - Cor simples + Simple color + Cor simples - Default colors - Cores padrão + Default colors + Cores padrão - Edited edge color - Cor de linha em modo de edição + Edited edge color + Cor de linha em modo de edição - Edited vertex color - Cor dos vértices editados + Edited vertex color + Cor dos vértices editados - Construction geometry - Geometria de construção + Construction geometry + Geometria de construção - Fully constrained geometry - Geometria totalmente restrita + Fully constrained geometry + Geometria totalmente restrita - The color of construction geometry in editmode - A cor da geometria de construção em modo de edição + The color of construction geometry in editmode + A cor da geometria de construção em modo de edição - The color of fully constrained geometry in editmode - A cor da geometria totalmente restrita em modo de edição + The color of fully constrained geometry in editmode + A cor da geometria totalmente restrita em modo de edição - The color of vertices being edited - A cor dos vértices em modo de edição + The color of vertices being edited + A cor dos vértices em modo de edição - The color of edges being edited - A cor das linhas em modo de edição + The color of edges being edited + A cor das linhas em modo de edição - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Dica do dia + Tip of the day + Dica do dia - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"> <font size="+3"> você sabia...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"> <font size="+3"> você sabia...</font></font></b> - &Show tips at start up - &Mostrar dicas ao iniciar + &Show tips at start up + &Mostrar dicas ao iniciar - Alt+S - Alt + D + Alt+S + Alt + D - &Next Tip - &Próxima dica + &Next Tip + &Próxima dica - Alt+N - Alt + P + Alt+N + Alt + P - &Close - &Fechar + &Close + &Fechar - Alt+C - Alt + C + Alt+C + Alt + C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - O Download falhou: %1 + O Download falhou: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Se você quiser saber mais sobre FreeCAD você deve ir para %1 ou pressione o item ajuda no menu Ajuda. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Se você quiser saber mais sobre FreeCAD você deve ir para %1 ou pressione o item ajuda no menu Ajuda. - - + + Gui::Dialog::DockablePlacement - Placement - Posicionamento + Placement + Posicionamento - - + + Gui::Dialog::DownloadDialog - Canceled. - Cancelado. + Canceled. + Cancelado. - - + + Download + + + + Cancel + Cancelar + + + Close + Fechar + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + O download falhou: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Adicionar um ícone + Add icon + Adicionar um ícone - - + + Gui::Dialog::InputVector - Input vector - Vetor de entrada + Input vector + Vetor de entrada - Vector - Vetor + Vector + Vetor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Botões do mouse + Mouse buttons + Botões do mouse - Configuration - Configuração + Configuration + Configuração - Selection: - Seleção: + Selection: + Seleção: - Panning - Pan + Panning + Pan - Rotation: - Rotação: + Rotation: + Rotação: - Zooming: - Zoom: + Zooming: + Zoom: - - + + Gui::Dialog::ParameterGroup - Expand - Expandir + Expand + Expandir - Add sub-group - Adicionar sub-grupo + Add sub-group + Adicionar sub-grupo - Remove group - Remover grupo + Remove group + Remover grupo - Rename group - Renomear grupo + Rename group + Renomear grupo - Export parameter - Parâmetros de exportação + Export parameter + Parâmetros de exportação - Import parameter - Parâmetros de importação + Import parameter + Parâmetros de importação - Collapse - Recolher + Collapse + Recolher - Do really want to remove this parameter group? - Você realmente deseja remover este grupo de parâmetros? + Do really want to remove this parameter group? + Você realmente deseja remover este grupo de parâmetros? - Existing sub-group - Subgrupo existente + Existing sub-group + Subgrupo existente - The sub-group '%1' already exists. - O subgrupo '%1' já existe. + The sub-group '%1' already exists. + O subgrupo '%1' já existe. - Export parameter to file - Exportar parâmetros para arquivo + Export parameter to file + Exportar parâmetros para arquivo - XML (*.FCParam) - XML (*. FCParam) + XML (*.FCParam) + XML (*. FCParam) - Import parameter from file - Importar parâmetros de arquivo + Import parameter from file + Importar parâmetros de arquivo - Import Error - Erro de importação + Import Error + Erro de importação - Reading from '%1' failed. - Leitura de '1%' falhou. + Reading from '%1' failed. + Leitura de '1%' falhou. - - + + Gui::Dialog::ParameterValue - Change value - Mudar o valor + Change value + Mudar o valor - Remove key - Remover a chave + Remove key + Remover a chave - Rename key - Renomear a chave + Rename key + Renomear a chave - New - Novo + New + Novo - New string item - Novo item string + New string item + Novo item string - New float item - Novo item float + New float item + Novo item float - New integer item - Novo item inteiro + New integer item + Novo item inteiro - New unsigned item - Novo item unsigned + New unsigned item + Novo item unsigned - New Boolean item - Novo item Boolean + New Boolean item + Novo item Boolean - Existing item - Item existente + Existing item + Item existente - The item '%1' already exists. - O item '%1' já existe. + The item '%1' already exists. + O item '%1' já existe. - - + + Gui::Dialog::Placement - Placement - Posicionamento + Placement + Posicionamento - OK - OK + OK + OK - Translation: - Translação: + Translation: + Translação: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotação: + Rotation: + Rotação: - Angle: - Ângulo: + Angle: + Ângulo: - Axis: - Eixo: + Axis: + Eixo: - Center: - Centro: + Center: + Centro: - Pitch: - Altura: + Pitch: + Altura: - Roll: - Roll: + Roll: + Roll: - Yaw: - Guinada: + Yaw: + Guinada: - Rotation axis with angle - Eixo de rotação com ângulo + Rotation axis with angle + Eixo de rotação com ângulo - Euler angles - Ângulos de Euler + Euler angles + Ângulos de Euler - Apply placement changes immediately - Aplicar alterações de posicionamento imediatamente + Apply placement changes immediately + Aplicar alterações de posicionamento imediatamente - Apply incremental changes to object placement - Aplicar as alterações incrementais ao posicionamento do objeto + Apply incremental changes to object placement + Aplicar as alterações incrementais ao posicionamento do objeto - Apply - Aplicar + Apply + Aplicar - Reset - Restaurar + Reset + Restaurar - Close - Fechar + Close + Fechar - - + + Gui::Dialog::PrintModel - Button - Botão + Button + Botão - Command - Comando + Command + Comando - - + + Gui::Dialog::SceneInspector - Dialog - Diálogo + Dialog + Diálogo - Close - Fechar + Close + Fechar - Refresh - Atualizar + Refresh + Atualizar - - + + Gui::Dialog::SceneModel - Inventor Tree - Árvore do Inventor + Inventor Tree + Árvore do Inventor - Nodes - Nós + Nodes + Nós - - + + Gui::Dialog::TextureMapping - Texture - Textura + Texture + Textura - Texture mapping - Mapeamento de textura + Texture mapping + Mapeamento de textura - Global - Global + Global + Global - Environment - Ambiente + Environment + Ambiente - Image files (%1) - Arquivos de imagem (%1) + Image files (%1) + Arquivos de imagem (%1) - No image - Nenhuma imagem + No image + Nenhuma imagem - The specified file is not a valid image file. - O arquivo especificado não é um arquivo de imagem válido. + The specified file is not a valid image file. + O arquivo especificado não é um arquivo de imagem válido. - No 3d view - Nenhuma vista 3d + No 3d view + Nenhuma vista 3d - No active 3d view found. - Nenhuma vista 3d ativa encontrado. + No active 3d view found. + Nenhuma vista 3d ativa encontrado. - - + + Gui::Dialog::Transform - Cancel - Cancelar + Cancel + Cancelar - Transform - Transformar + Transform + Transformar - - + + Gui::DlgTreeWidget - Dialog - Diálogo + Dialog + Diálogo - Items - Itens + Items + Itens - OK - OK + OK + OK - Cancel - Cancelar + Cancel + Cancelar - - + + - - + + Gui::DockWnd::CombiView - CombiView - CombiVista + CombiView + CombiVista - Project - Projeto + Project + Projeto - Tasks - Tarefas + Tasks + Tarefas - - + + Gui::DockWnd::HelpView - Previous - Anterior + Previous + Anterior - Next - Próximo + Next + Próximo - Home - Início + Home + Início - Open - Abrir + Open + Abrir - Open file - Abrir arquivo + Open file + Abrir arquivo - All HTML files (*.html *.htm) - Todos os arquivos HTML (*.html *.htm) + All HTML files (*.html *.htm) + Todos os arquivos HTML (*.html *.htm) - External browser - Navegador externo + External browser + Navegador externo - No external browser found. Specify in preferences, please - Nenhum navegador externo encontrado. Especifique nas preferências, por favor + No external browser found. Specify in preferences, please + Nenhum navegador externo encontrado. Especifique nas preferências, por favor - Starting of %1 failed - Início de %1 falhou + Starting of %1 failed + Início de %1 falhou - - + + Gui::DockWnd::PropertyDockView - Property View - Tela de propriedades + Property View + Tela de propriedades - - + + Gui::DockWnd::ReportOutput - Logging - Log + Logging + Log - Warning - Aviso + Warning + Aviso - Error - Erro + Error + Erro - Options - Opções + Options + Opções - Clear - Limpar + Clear + Limpar - Save As... - Salvar como... + Save As... + Salvar como... - Save Report Output - Salvar o relatório + Save Report Output + Salvar o relatório - Plain Text Files (*.txt *.log) - Arquivos de texto sem formatação (*.txt *.log) + Plain Text Files (*.txt *.log) + Arquivos de texto sem formatação (*.txt *.log) - Go to end - Ir para o fim + Go to end + Ir para o fim - Redirect Python output - Redirecionar a saída de Python + Redirect Python output + Redirecionar a saída de Python - Redirect Python errors - Redirecionar erros de Python + Redirect Python errors + Redirecionar erros de Python - - + + Gui::DockWnd::ReportView - Output - Saída + Output + Saída - Python console - Console Python + Python console + Console Python - - + + Gui::DockWnd::SelectionView - Property View - Tela de propriedades + Property View + Tela de propriedades - - + + Gui::DockWnd::TaskPanelView - Task View - Tarefas + Task View + Tarefas - - + + Gui::DockWnd::TextBrowser - Could not open file. - Não foi possível abrir o arquivo. + Could not open file. + Não foi possível abrir o arquivo. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Você tentou acessar o endereço %1 que não está disponível no momento. Por favor, certifique-se de que a URL existe e tente recarregar a página. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Você tentou acessar o endereço %1 que não está disponível no momento. Por favor, certifique-se de que a URL existe e tente recarregar a página. - Connecting to %1 - Conectando-se a %1 + Connecting to %1 + Conectando-se a %1 - Sending to %1 - Enviando para %1 + Sending to %1 + Enviando para %1 - Reading from %1 - Lendo %1 + Reading from %1 + Lendo %1 - Download failed: %1. - O download falhou: %1. + Download failed: %1. + O download falhou: %1. - Previous - Anterior + Previous + Anterior - Forward - Para a frente + Forward + Para a frente - Home - Início + Home + Início - Refresh - Atualizar + Refresh + Atualizar - Copy - Cópia + Copy + Cópia - Select all - Selecionar tudo + Select all + Selecionar tudo - No description for - Nenhuma descrição para + No description for + Nenhuma descrição para - - + + Gui::DocumentModel - Application - Programa + Application + Programa - Labels & Attributes - Rótulos & atributos + Labels & Attributes + Rótulos & atributos - - + + Gui::EditorView - Modified file - Arquivo modificado + Modified file + Arquivo modificado - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Este arquivo foi modificado fora do editor. Deseja recarregá-lo? - Unsaved document - Documento não salvo + Unsaved document + Documento não salvo - The document has been modified. + The document has been modified. Do you want to save your changes? - O documento foi modificado. + O documento foi modificado. Deseja salvar as alterações? - FreeCAD macro (*.FCMacro);;Python (*.py) - Macro do FreeCAD (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + Macro do FreeCAD (*.FCMacro);;Python (*.py) - Export PDF - Exportar PDF + Export PDF + Exportar PDF - PDF file (*.pdf) - Arquivo PDF (*.pdf) + PDF file (*.pdf) + Arquivo PDF (*.pdf) - untitled[*] - sem título[*] + untitled[*] + sem título[*] - - Editor - - Editor + - Editor + - Editor - %1 chars removed - %1 caracteres removidos + %1 chars removed + %1 caracteres removidos - %1 chars added - %1 caracteres adicionados + %1 chars added + %1 caracteres adicionados - Formatted - Formatado + Formatted + Formatado - - + + Gui::FileChooser - Select a file - Selecione um arquivo + Select a file + Selecione um arquivo - Select a directory - Selecione um diretório + Select a directory + Selecione um diretório - - + + Gui::FileDialog - Save as - Salvar como + Save as + Salvar como - Open - Abrir + Open + Abrir - - + + Gui::FileOptionsDialog - Extended - Extendido + Extended + Extendido - All files (*.*) - Todos os arquivos (*.*) + All files (*.*) + Todos os arquivos (*.*) - - + + Gui::Flag - Top left - Superior esquerdo + Top left + Superior esquerdo - Bottom left - Inferior esquerdo + Bottom left + Inferior esquerdo - Top right - Superior direito + Top right + Superior direito - Bottom right - Inferior direito + Bottom right + Inferior direito - Remove - Remover + Remove + Remover - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Pressione CTRL e o botão esquerdo do mouse + Press CTRL and left mouse button + Pressione CTRL e o botão esquerdo do mouse - Press middle mouse button - Pressione o botão do meio do mouse + Press middle mouse button + Pressione o botão do meio do mouse - Press left mouse button - Pressione o botão esquerdo do mouse + Press left mouse button + Pressione o botão esquerdo do mouse - Scroll middle mouse button - Role a roda do mouse + Scroll middle mouse button + Role a roda do mouse - - + + Gui::LocationDialog - Wrong direction - Direção errada + Wrong direction + Direção errada - Direction must not be the null vector - Direção não pode ser um vector nulo + Direction must not be the null vector + Direção não pode ser um vector nulo - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Definido pelo usuário... + User defined... + Definido pelo usuário... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Macros + Macros + Macros - - + + Gui::MainWindow - Dimension - Dimensão + Dimension + Dimensão - Ready - Pronto + Ready + Pronto - Toggles this toolbar - Alterna esta barra de ferramentas + Toggles this toolbar + Alterna esta barra de ferramentas - Toggles this dockable window - Alterna esta janela acoplável + Toggles this dockable window + Alterna esta janela acoplável - Close All - Fechar tudo + Close All + Fechar tudo - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Download iniciado... + Download iniciado... - - + + Gui::ProgressBar - Remaining: %1 - Restante: %1 + Remaining: %1 + Restante: %1 - Aborting - Interrompendo + Aborting + Interrompendo - Do you really want to abort the operation? - Você realmente deseja abortar a operação? + Do you really want to abort the operation? + Você realmente deseja abortar a operação? - - + + Gui::ProgressDialog - Remaining: %1 - Restante: %1 + Remaining: %1 + Restante: %1 - Aborting - Interrompendo + Aborting + Interrompendo - Do you really want to abort the operation? - Você realmente deseja abortar a operação? + Do you really want to abort the operation? + Você realmente deseja abortar a operação? - - + + Gui::PropertyEditor::PropertyModel - Property - Propriedade + Property + Propriedade - Value - Valor + Value + Valor - - + + Gui::PropertyView - View - Vista + View + Vista - Data - Dados + Data + Dados - - + + Gui::PythonConsole - System exit - Saída do sistema + System exit + Saída do sistema - The application is still running. + The application is still running. Do you want to exit without saving your data? - O aplicativo ainda está em execução. Deseja sair sem salvar os seus dados? + O aplicativo ainda está em execução. Deseja sair sem salvar os seus dados? - Python console - Console Python + Python console + Console Python - Unhandled PyCXX exception. - Exceção PyCXX não tratada. + Unhandled PyCXX exception. + Exceção PyCXX não tratada. - Unhandled FreeCAD exception. - Exceção FreeCAD não tratada. + Unhandled FreeCAD exception. + Exceção FreeCAD não tratada. - Unhandled unknown C++ exception. - Exceção desconhecida C++ não tratada. + Unhandled unknown C++ exception. + Exceção desconhecida C++ não tratada. - &Copy command - &Copiar comando + &Copy command + &Copiar comando - &Copy history - &Copiar histórico + &Copy history + &Copiar histórico - Save history as... - Salvar histórico como... + Save history as... + Salvar histórico como... - Insert file name... - Insira o nome do arquivo... + Insert file name... + Insira o nome do arquivo... - Save History - Salvar histórico + Save History + Salvar histórico - Macro Files (*.FCMacro *.py) - Arquivos de macro (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Arquivos de macro (*.FCMacro *.py) - Insert file name - Insira o nome do arquivo + Insert file name + Insira o nome do arquivo - All Files (*.*) - Todos os arquivos (*.*) + All Files (*.*) + Todos os arquivos (*.*) - Python Input Dialog - Diálogo de entrada de Python + Python Input Dialog + Diálogo de entrada de Python - Unhandled std C++ exception. - Exceção std C++ não tratada. + Unhandled std C++ exception. + Exceção std C++ não tratada. - Word wrap - Quebra de linha + Word wrap + Quebra de linha - &Copy - &Copiar + &Copy + &Copiar - &Paste - Co&lar + &Paste + Co&lar - Select All - Selecionar tudo + Select All + Selecionar tudo - - + + Clear console + + + + Gui::PythonEditor - Comment - Comentário + Comment + Comentário - Uncomment - Descomentar + Uncomment + Descomentar - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Limpar + Clear + Limpar - - + + Gui::RecentFilesAction - Open file %1 - Abrir o arquivo %1 + Open file %1 + Abrir o arquivo %1 - File not found - Arquivo não encontrado + File not found + Arquivo não encontrado - The file '%1' cannot be opened. - Não é possível abrir o arquivo '%1'. + The file '%1' cannot be opened. + Não é possível abrir o arquivo '%1'. - - + + Gui::SelectModule - Select module - Selecione o módulo + Select module + Selecione o módulo - Open %1 as - Abrir %1 como + Open %1 as + Abrir %1 como - Select - Selecionar + Select + Selecionar - - + + Gui::StdCmdDescription - Help - Ajuda + Help + Ajuda - Des&cription - Des&crição + Des&cription + Des&crição - Long description of commands - Descrição detalhada dos comandos + Long description of commands + Descrição detalhada dos comandos - - + + Gui::StdCmdDownloadOnlineHelp - Help - Ajuda + Help + Ajuda - Download online help - Baixar a ajuda online + Download online help + Baixar a ajuda online - Download %1's online help - Baixar ajuda online de %1 + Download %1's online help + Baixar ajuda online de %1 - Non-existing directory - Diretório não existente + Non-existing directory + Diretório não existente - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - O diretório '%1' não existe. Você deseja especificar um diretório existente? + O diretório '%1' não existe. Você deseja especificar um diretório existente? - Missing permission - Falta de permissão + Missing permission + Falta de permissão - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Você não tem permissão de escrita para '%1' Deseja especificar outro diretório? + Você não tem permissão de escrita para '%1' Deseja especificar outro diretório? - Stop downloading - Parar a transferência + Stop downloading + Parar a transferência - - + + Gui::StdCmdPythonHelp - Tools - Ferramentas + Tools + Ferramentas - Python Modules - Módulos Python + Python Modules + Módulos Python - Opens a browser to show the Python modules - Abre um navegador para mostrar os módulos Python + Opens a browser to show the Python modules + Abre um navegador para mostrar os módulos Python - - + + Gui::TaskBoxAngle - Angle - Ângulo + Angle + Ângulo - - + + Gui::TaskBoxPosition - Position - Posição + Position + Posição - - + + Gui::TaskView::TaskAppearance - Display mode: - Modo de exibição: + Display mode: + Modo de exibição: - Plot mode: - Modo de impressão: + Plot mode: + Modo de impressão: - Point size: - Tamanho de ponto: + Point size: + Tamanho de ponto: - Line width: - Largura da linha: + Line width: + Largura da linha: - Transparency: - Transparência: + Transparency: + Transparência: - Appearance - Aparência + Appearance + Aparência - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Editar + Edit + Editar - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Aparência + Appearance + Aparência - ... - ... + ... + ... - edit selection - editar seleção + edit selection + editar seleção - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Pressione o botão esquerdo do mouse + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Inglês + English + Inglês - - + + Gui::TreeDockWidget - Tree view - Árvore + Tree view + Árvore - - + + Gui::TreeWidget - Create group... - Criar grupo... + Create group... + Criar grupo... - Create a group - Criar um grupo + Create a group + Criar um grupo - Group - Grupo + Group + Grupo - Rename - Renomear + Rename + Renomear - Rename object - Renomear objeto + Rename object + Renomear objeto - Labels & Attributes - Rótulos & atributos + Labels & Attributes + Rótulos & atributos - Application - Programa + Application + Programa - Finish editing - Concluir a edição + Finish editing + Concluir a edição - Finish editing object - Terminar de editar o objeto + Finish editing object + Terminar de editar o objeto - Activate document - Ativar o documento + Activate document + Ativar o documento - Activate document %1 - Ativar o documento %1 + Activate document %1 + Ativar o documento %1 - - + + Gui::View3DInventor - Export PDF - Exportar PDF + Export PDF + Exportar PDF - PDF file (*.pdf) - Arquivo PDF (*.pdf) + PDF file (*.pdf) + Arquivo PDF (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Selecione a bancada '%1' + Select the '%1' workbench + Selecione a bancada '%1' - - + + Position - Form - Formulário + Form + Formulário - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 1 mm + 2 mm + 1 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Snap de grade em + Grid Snap in + Snap de grade em - - + + QDockWidget - Tree view - Árvore + Tree view + Árvore - Property view - Tela de propriedades + Property view + Tela de propriedades - Selection view - Tela de seleção + Selection view + Tela de seleção - Report view - Tela de relatório relatório + Report view + Tela de relatório relatório - Task View - Tarefas + Task View + Tarefas - Combo View - Tela combinada + Combo View + Tela combinada - Toolbox - Caixa de ferramentas + Toolbox + Caixa de ferramentas - Python console - Console Python + Python console + Console Python - Display properties - Exibir propriedades + Display properties + Exibir propriedades - - + + QObject - General - Geral + General + Geral - Display - Tela + Display + Tela - Unknown filetype - Tipo de arquivo desconhecido + Unknown filetype + Tipo de arquivo desconhecido - Cannot open unknown filetype: %1 - Não é possível abrir o tipo de arquivo desconhecido: %1 + Cannot open unknown filetype: %1 + Não é possível abrir o tipo de arquivo desconhecido: %1 - Cannot save to unknown filetype: %1 - Não é possível salvar em tipo de arquivo desconhecido: %1 + Cannot save to unknown filetype: %1 + Não é possível salvar em tipo de arquivo desconhecido: %1 - Workbench failure - Falha de bancada + Workbench failure + Falha de bancada - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Não foi possível iniciar o Assistente do Qt (%1) + Unable to launch Qt Assistant (%1) + Não foi possível iniciar o Assistente do Qt (%1) - Exception - Exceção + Exception + Exceção - Open document - Abrir um documento + Open document + Abrir um documento - Import file - Importar um arquivo + Import file + Importar um arquivo - Export file - Exportar um arquivo + Export file + Exportar um arquivo - Printing... - Imprimindo... + Printing... + Imprimindo... - Cannot load workbench - Não foi possível carregar a bancada + Cannot load workbench + Não foi possível carregar a bancada - A general error occurred while loading the workbench - Um erro geral ocorreu ao carregar a bancada + A general error occurred while loading the workbench + Um erro geral ocorreu ao carregar a bancada - File not found - Arquivo não encontrado + File not found + Arquivo não encontrado - Cannot open file %1 - Não é possível abrir o arquivo %1 + Cannot open file %1 + Não é possível abrir o arquivo %1 - Save views... - Salvar vistas... + Save views... + Salvar vistas... - Load views... - Carregar vistas... + Load views... + Carregar vistas... - Freeze view - Congelar a vista + Freeze view + Congelar a vista - Clear views - Limpar vistas + Clear views + Limpar vistas - Restore view &%1 - Restaurar a vista &%1 + Restore view &%1 + Restaurar a vista &%1 - Save frozen views - Salvar vistas congeladas + Save frozen views + Salvar vistas congeladas - Frozen views (*.cam) - Vistas congeladas (*.cam) + Frozen views (*.cam) + Vistas congeladas (*.cam) - Restore views - Restaurar vistas + Restore views + Restaurar vistas - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Importar vistas restauradas irá descartar vistas já armazenadas. Deseja continuar? + Importar vistas restauradas irá descartar vistas já armazenadas. Deseja continuar? - Restore frozen views - Restaurar vistas congeladas + Restore frozen views + Restaurar vistas congeladas - Cannot open file '%1'. - Não é possível abrir o arquivo '%1'. + Cannot open file '%1'. + Não é possível abrir o arquivo '%1'. - Docked - Ancorado + Docked + Ancorado - Undocked - Desancorado + Undocked + Desancorado - Fullscreen - Tela cheia + Fullscreen + Tela cheia - files - arquivos + files + arquivos - Save picture - Salvar imagem + Save picture + Salvar imagem - New sub-group - Novo subgrupo + New sub-group + Novo subgrupo - Enter the name: - Digite o nome: + Enter the name: + Digite o nome: - New text item - Novo item de texto + New text item + Novo item de texto - Enter your text: - Digite o texto: + Enter your text: + Digite o texto: - New integer item - Novo item inteiro + New integer item + Novo item inteiro - Enter your number: - Digite seu número: + Enter your number: + Digite seu número: - New unsigned item - Novo item unsigned + New unsigned item + Novo item unsigned - New float item - Novo item float + New float item + Novo item float - New Boolean item - Novo item Boolean + New Boolean item + Novo item Boolean - Choose an item: - Escolha um item: + Choose an item: + Escolha um item: - Rename group - Renomear grupo + Rename group + Renomear grupo - The group '%1' cannot be renamed. - O grupo '%1' não pode ser renomeado. + The group '%1' cannot be renamed. + O grupo '%1' não pode ser renomeado. - Existing group - Grupo existente + Existing group + Grupo existente - The group '%1' already exists. - O grupo '%1' já existe. + The group '%1' already exists. + O grupo '%1' já existe. - Change value - Mudar o valor + Change value + Mudar o valor - Save document under new filename... - Salvar documento sob novo nome ... + Save document under new filename... + Salvar documento sob novo nome ... - Saving aborted - Salvamento abortado + Saving aborted + Salvamento abortado - Unsaved document - Documento não salvo + Unsaved document + Documento não salvo - Save document before close? - Salvar o documento antes de fechar? + Save document before close? + Salvar o documento antes de fechar? - Save Macro - Salvar macro + Save Macro + Salvar macro - Finish - Concluir + Finish + Concluir - Clear - Limpar + Clear + Limpar - Cancel - Cancelar + Cancel + Cancelar - Inner - Interno + Inner + Interno - Outer - Externo + Outer + Externo - No Browser - Nenhum navegador + No Browser + Nenhum navegador - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Não é possível abrir o navegador. Por favor, abra uma janela do navegador e digite: http://localhost:%1. + Não é possível abrir o navegador. Por favor, abra uma janela do navegador e digite: http://localhost:%1. - No Server - Nenhum servidor + No Server + Nenhum servidor - Unable to start the server to port %1: %2. - Não é possível iniciar o servidor na porta %1: %2. + Unable to start the server to port %1: %2. + Não é possível iniciar o servidor na porta %1: %2. - Unable to open your system browser. - Não é possível abrir o navegador do sistema. + Unable to open your system browser. + Não é possível abrir o navegador do sistema. - Options... - Opções... + Options... + Opções... - Out of memory - Memória insuficiente + Out of memory + Memória insuficiente - Not enough memory available to display the data. - Não há memória suficiente para exibir os dados. + Not enough memory available to display the data. + Não há memória suficiente para exibir os dados. - Cannot find file %1 - Não foi possível encontrar o arquivo '%1' + Cannot find file %1 + Não foi possível encontrar o arquivo '%1' - Cannot find file %1 neither in %2 nor in %3 - Não é possível encontrar o arquivo %1 nem em %2, nem em %3 + Cannot find file %1 neither in %2 nor in %3 + Não é possível encontrar o arquivo %1 nem em %2, nem em %3 - Save %1 Document - Salvar documento %1 + Save %1 Document + Salvar documento %1 - %1 document (*.FCStd) - documento %1 (*.FCStd) + %1 document (*.FCStd) + documento %1 (*.FCStd) - Save As - Salvar como + Save As + Salvar como - %1 already exists. + %1 already exists. Do you want to replace it? - %1 já existe. Deseja substituí-lo? + %1 já existe. Deseja substituí-lo? - Document not closable - O documento não pode ser fechado + Document not closable + O documento não pode ser fechado - The document is not closable for the moment. - O documento não pode ser fechado neste momento. + The document is not closable for the moment. + O documento não pode ser fechado neste momento. - No OpenGL - Nenhum OpenGL + No OpenGL + Nenhum OpenGL - This system does not support OpenGL - Este sistema não tem suporte a OpenGL + This system does not support OpenGL + Este sistema não tem suporte a OpenGL - Help - Ajuda + Help + Ajuda - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Não é possível carregar a documentação. Para carregá-la Qt 4. 4 ou superior é necessário. + Não é possível carregar a documentação. Para carregá-la Qt 4. 4 ou superior é necessário. - %1 Help - Ajuda de %1 + %1 Help + Ajuda de %1 - Exporting PDF... - Exportar PDF... + Exporting PDF... + Exportar PDF... - Wrong selection - Seleção errada + Wrong selection + Seleção errada - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Apenas um objeto selecionado. Por favor selecione dois objetos. Lembre-se que o ponto onde você clicar tem importância. + Apenas um objeto selecionado. Por favor selecione dois objetos. Lembre-se que o ponto onde você clicar tem importância. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Por favor selecione dois objetos. Lembre-se o que ponto onde você clicar tem importância. + Por favor selecione dois objetos. Lembre-se o que ponto onde você clicar tem importância. - New boolean item - Novo item booleano + New boolean item + Novo item booleano - Navigation styles - Estilos de navegação + Navigation styles + Estilos de navegação - %1 navigation - navegação de %1 + %1 navigation + navegação de %1 - Move annotation - Mover a anotação + Move annotation + Mover a anotação - Transform - Transformar + Transform + Transformar - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - O documento está no modo de edição, portanto, não pode ser fechado no momento. Você deve concluir ou cancelar a edição no painel de tarefas. + O documento está no modo de edição, portanto, não pode ser fechado no momento. Você deve concluir ou cancelar a edição no painel de tarefas. - - + + + StdBoxSelection + + Standard-View + Vista padrão + + + Box selection + + + + StdCmdAbout - Help - Ajuda + Help + Ajuda - &About %1 - &Sobre %1 + &About %1 + &Sobre %1 - About %1 - Sobre %1 + About %1 + Sobre %1 - - + + StdCmdAboutQt - Help - Ajuda + Help + Ajuda - About &Qt - Sobre Qt + About &Qt + Sobre Qt - About Qt - Sobre o Qt + About Qt + Sobre o Qt - - + + StdCmdActivateNextWindow - Window - Janela + Window + Janela - Ne&xt - Pró&ximo + Ne&xt + Pró&ximo - Activate next window - Ativar a janela seguinte + Activate next window + Ativar a janela seguinte - - + + StdCmdActivatePrevWindow - Window - Janela + Window + Janela - Pre&vious - An&terior + Pre&vious + An&terior - Activate previous window - Ativar a janela anterior + Activate previous window + Ativar a janela anterior - - + + + StdCmdAlignment + + Edit + Editar + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Janela + Window + Janela - Arrange &Icons - Organizar &icones + Arrange &Icons + Organizar &icones - Arrange Icons - Organizar ícones + Arrange Icons + Organizar ícones - - + + StdCmdAxisCross - Standard-View - Vista padrão + Standard-View + Vista padrão - Toggle axis cross - Ligar/desligar símbolo de eixos + Toggle axis cross + Ligar/desligar símbolo de eixos - - + + StdCmdCascadeWindows - Window - Janela + Window + Janela - &Cascade - Em &cascata + &Cascade + Em &cascata - Tile pragmatic - Lado a lado pragmático + Tile pragmatic + Lado a lado pragmático - - + + StdCmdCloseActiveWindow - Window - Janela + Window + Janela - Cl&ose - &Fechar + Cl&ose + &Fechar - Close active window - Fechar a janela ativa + Close active window + Fechar a janela ativa - - + + StdCmdCloseAllWindows - Window - Janela + Window + Janela - Close Al&l - Fechar &tudo + Close Al&l + Fechar &tudo - Close all windows - Fecha todas as janelas + Close all windows + Fecha todas as janelas - - + + StdCmdCommandLine - Tools - Ferramentas + Tools + Ferramentas - Start command &line... - Iniciar linha de comando... + Start command &line... + Iniciar linha de comando... - Opens the command line in the console - Abre a linha de comando na consola + Opens the command line in the console + Abre a linha de comando na consola - - + + StdCmdCopy - Edit - Editar + Edit + Editar - C&opy - C&opiar + C&opy + C&opiar - Copy operation - Operação de cópia + Copy operation + Operação de cópia - - + + StdCmdCut - Edit - Editar + Edit + Editar - &Cut - Co&rtar + &Cut + Co&rtar - Cut out - Cortar + Cut out + Cortar - - + + StdCmdDDuplicateSelection - Edit - Editar + Edit + Editar - Duplicate selection - Duplicar seleção + Duplicate selection + Duplicar seleção - Put duplicates of the selected objects to the active document - Coloca duplicatas dos objetos selecionados no documento ativo + Put duplicates of the selected objects to the active document + Coloca duplicatas dos objetos selecionados no documento ativo - - + + StdCmdDelete - Edit - Editar + Edit + Editar - &Delete - &Excluir + &Delete + &Excluir - Deletes the selected objects - Exclui os objetos selecionados + Deletes the selected objects + Exclui os objetos selecionados - - + + StdCmdDemoMode - Standard-View - Vista padrão + Standard-View + Vista padrão - View turntable... - Vista turntable... + View turntable... + Vista turntable... - View turntable - Vista turntable + View turntable + Vista turntable - - + + StdCmdDlgCustomize - Tools - Ferramentas + Tools + Ferramentas - Cu&stomize... - Per&sonalizar... + Cu&stomize... + Per&sonalizar... - Customize toolbars and command bars - Personalizar barras de ferramentas e barras de comando + Customize toolbars and command bars + Personalizar barras de ferramentas e barras de comando - - + + StdCmdDlgMacroExecute - Macros ... - Macros ... + Macros ... + Macros ... - Opens a dialog to let you execute a recorded macro - Abre um diálogo para que você executa uma macro gravada + Opens a dialog to let you execute a recorded macro + Abre um diálogo para que você executa uma macro gravada - Macro - Macro + Macro + Macro - - + + StdCmdDlgMacroExecuteDirect - Macro - Macro + Macro + Macro - Execute macro - Executar macro + Execute macro + Executar macro - Execute the macro in the editor - Executar a macro no editor + Execute the macro in the editor + Executar a macro no editor - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Gravação de macros ... + &Macro recording ... + &Gravação de macros ... - Opens a dialog to record a macro - Abre uma janela para gravar uma macro + Opens a dialog to record a macro + Abre uma janela para gravar uma macro - Macro - Macro + Macro + Macro - - + + StdCmdDlgParameter - Tools - Ferramentas + Tools + Ferramentas - E&dit parameters ... - &Editar parâmetros... + E&dit parameters ... + &Editar parâmetros... - Opens a Dialog to edit the parameters - Abre uma janela para editar os parâmetros + Opens a Dialog to edit the parameters + Abre uma janela para editar os parâmetros - - + + StdCmdDlgPreferences - Tools - Ferramentas + Tools + Ferramentas - &Preferences ... - &Preferências ... + &Preferences ... + &Preferências ... - Opens a Dialog to edit the preferences - Abre uma janela para editar as preferências + Opens a Dialog to edit the preferences + Abre uma janela para editar as preferências - - + + StdCmdDockViewMenu - View - Vista + View + Vista - Vie&ws - &Vistas + Vie&ws + &Vistas - Toggles this window - Troca esta janela + Toggles this window + Troca esta janela - - + + StdCmdDrawStyle - Standard-View - Vista padrão + Standard-View + Vista padrão - Draw style - Estilo de desenho + Draw style + Estilo de desenho - - + + + StdCmdDuplicateSelection + + Edit + Editar + + + Duplicate selection + Duplicar seleção + + + Put duplicates of the selected objects to the active document + Coloca duplicatas dos objetos selecionados no documento ativo + + + + StdCmdEdit + + Edit + Editar + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Arquivo + File + Arquivo - &Export... - &Exportar... + &Export... + &Exportar... - Export an object in the active document - Exportar um objeto do documento ativo + Export an object in the active document + Exportar um objeto do documento ativo - Supported formats - Formatos suportados + Supported formats + Formatos suportados - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Ferramentas + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Arquivo + File + Arquivo - &Recompute - &Recalcular + &Recompute + &Recalcular - Recompute feature or document - Recalcular um objeto ou documento + Recompute feature or document + Recalcular um objeto ou documento - - + + StdCmdFreeCADWebsite - Help - Ajuda + Help + Ajuda - FreeCAD Website - Website do FreeCAD + FreeCAD Website + Website do FreeCAD - The FreeCAD website - O site do FreeCAD + The FreeCAD website + O site do FreeCAD - - + + StdCmdFreezeViews - Standard-View - Vista padrão + Standard-View + Vista padrão - Freeze display - Congelar exibição + Freeze display + Congelar exibição - Freezes the current view position - Congela o ponto de vista atual + Freezes the current view position + Congela o ponto de vista atual - - + + StdCmdHideObjects - Standard-View - Vista padrão + Standard-View + Vista padrão - Hide all objects - Ocultar todos os objetos + Hide all objects + Ocultar todos os objetos - Hide all objects in the document - Ocultar todos os objetos do documento + Hide all objects in the document + Ocultar todos os objetos do documento - - + + StdCmdHideSelection - Standard-View - Vista padrão + Standard-View + Vista padrão - Hide selection - Ocultar seleção + Hide selection + Ocultar seleção - Hide all selected objects - Ocultar todos os objetos selecionados + Hide all selected objects + Ocultar todos os objetos selecionados - - + + StdCmdImport - File - Arquivo + File + Arquivo - &Import... - &Importar... + &Import... + &Importar... - Import a file in the active document - Importar um arquivo no documento ativo + Import a file in the active document + Importar um arquivo no documento ativo - Supported formats - Formatos suportados + Supported formats + Formatos suportados - All files (*.*) - Todos os arquivos (*.*) + All files (*.*) + Todos os arquivos (*.*) - - + + StdCmdMacroStartDebug - Macro - Macro + Macro + Macro - Debug macro - Depurar macro + Debug macro + Depurar macro - Start debugging of macro - Iniciar a depuração da macro + Start debugging of macro + Iniciar a depuração da macro - - + + StdCmdMacroStepOver - Macro - Macro + Macro + Macro - Step over - Avançar + Step over + Avançar - - + + StdCmdMacroStopDebug - Macro - Macro + Macro + Macro - Stop debugging - Parar a depuração + Stop debugging + Parar a depuração - Stop debugging of macro - Parar a depuração de macro + Stop debugging of macro + Parar a depuração de macro - - + + StdCmdMacroStopRecord - Macro - Macro + Macro + Macro - S&top macro recording - Parar a gravação de macro + S&top macro recording + Parar a gravação de macro - Stop the macro recording session - Pare a sessão de gravação de macros + Stop the macro recording session + Pare a sessão de gravação de macros - - + + StdCmdMeasureDistance - View - Vista + View + Vista - Measure distance - Medir distância + Measure distance + Medir distância - - + + StdCmdMeasurementSimple - Tools - Ferramentas + Tools + Ferramentas - Mesure distance - Medir distância + Mesure distance + Medir distância - Measures distance between two selected objects - Mede a distância entre dois objetos selecionados + Measures distance between two selected objects + Mede a distância entre dois objetos selecionados - - + + Measure distance + Medir distância + + + StdCmdMergeProjects - File - Arquivo + File + Arquivo - Merge project... - Mesclar projeto... + Merge project... + Mesclar projeto... - Merge project - Mesclar projeto + Merge project + Mesclar projeto - %1 document (*.fcstd) - documento %1 (*.fcstd) + %1 document (*.fcstd) + documento %1 (*.fcstd) - Cannot merge project with itself. - Não é possível mesclar esse projeto com ele mesmo. + Cannot merge project with itself. + Não é possível mesclar esse projeto com ele mesmo. - - + + StdCmdNew - File - Arquivo + File + Arquivo - &New - &Novo + &New + &Novo - Create a new empty document - Criar um novo documento vazio + Create a new empty document + Criar um novo documento vazio - - + + StdCmdOnlineHelp - Help - Ajuda + Help + Ajuda - Show help to the application - Mostra a ajuda para a aplicação + Show help to the application + Mostra a ajuda para a aplicação - - + + StdCmdOnlineHelpPython - Help - Ajuda + Help + Ajuda - Python Manuals - Manuais de Python + Python Manuals + Manuais de Python - Show the Python documentation - Mostrar a documentação do Python + Show the Python documentation + Mostrar a documentação do Python - - + + StdCmdOnlineHelpWebsite - Help - Ajuda + Help + Ajuda - Help Website - Site de ajuda + Help Website + Site de ajuda - The website where the help is maintained - O site onde a ajuda é mantida + The website where the help is maintained + O site onde a ajuda é mantida - - + + StdCmdOpen - File - Arquivo + File + Arquivo - &Open... - &Abrir... + &Open... + &Abrir... - Open a document or import files - Abrir um documento ou importar arquivos + Open a document or import files + Abrir um documento ou importar arquivos - Supported formats - Formatos suportados + Supported formats + Formatos suportados - All files (*.*) - Todos os arquivos (*.*) + All files (*.*) + Todos os arquivos (*.*) - - + + StdCmdPaste - Edit - Editar + Edit + Editar - &Paste - Co&lar + &Paste + Co&lar - Paste operation - Colar operação + Paste operation + Colar operação - - + + StdCmdPlacement - Edit - Editar + Edit + Editar - Placement... - Posicionamento... + Placement... + Posicionamento... - Place the selected objects - Colocar os objetos selecionados + Place the selected objects + Colocar os objetos selecionados - - + + StdCmdPrint - File - Arquivo + File + Arquivo - &Print... - &Imprimir... + &Print... + &Imprimir... - Print the document - Imprime o documento + Print the document + Imprime o documento - - + + StdCmdPrintPdf - File - Arquivo + File + Arquivo - &Export PDF... - &Exportar PDF... + &Export PDF... + &Exportar PDF... - Export the document as PDF - Exportar o documento como PDF + Export the document as PDF + Exportar o documento como PDF - - + + StdCmdPrintPreview - File - Arquivo + File + Arquivo - &Print preview... - &Visualização de impressão... + &Print preview... + &Visualização de impressão... - Print the document - Imprime o documento + Print the document + Imprime o documento - Print preview - Visualização de impressão + Print preview + Visualização de impressão - - + + StdCmdProjectInfo - File - Arquivo + File + Arquivo - Project i&nformation... - I&nformação do projeto... + Project i&nformation... + I&nformação do projeto... - Show details of the currently active project - Mostrar os detalhes do projeto ativo + Show details of the currently active project + Mostrar os detalhes do projeto ativo - - + + StdCmdProjectUtil - Tools - Ferramentas + Tools + Ferramentas - Project utility... - Utilitário de projeto... + Project utility... + Utilitário de projeto... - Utility to extract or create project files - Utilitário para extrair ou criar arquivos de projeto + Utility to extract or create project files + Utilitário para extrair ou criar arquivos de projeto - - + + StdCmdPythonWebsite - Help - Ajuda + Help + Ajuda - Python Website - Website do Python + Python Website + Website do Python - The official Python website - O site oficial do Python + The official Python website + O site oficial do Python - - + + StdCmdQuit - File - Arquivo + File + Arquivo - E&xit - &Sair + E&xit + &Sair - Quits the application - Finaliza o aplicativo + Quits the application + Finaliza o aplicativo - - + + StdCmdRandomColor - File - Arquivo + File + Arquivo - Random color - Cor aleatória + Random color + Cor aleatória - - + + StdCmdRecentFiles - File - Arquivo + File + Arquivo - Recent files - Arquivos recentes + Recent files + Arquivos recentes - Recent file list - Lista de arquivos recentes + Recent file list + Lista de arquivos recentes - - + + StdCmdRedo - Edit - Editar + Edit + Editar - &Redo - &Refazer + &Redo + &Refazer - Redoes a previously undone action - Refaz uma ação desfeita anteriormente + Redoes a previously undone action + Refaz uma ação desfeita anteriormente - - + + StdCmdRefresh - Edit - Editar + Edit + Editar - &Refresh - &Atualizar + &Refresh + &Atualizar - Recomputes the current active document - Recalcula o documento ativo atual + Recomputes the current active document + Recalcula o documento ativo atual - - + + StdCmdSave - File - Arquivo + File + Arquivo - &Save - &Salvar + &Save + &Salvar - Save the active document - Salva o documento ativo + Save the active document + Salva o documento ativo - - + + StdCmdSaveAs - File - Arquivo + File + Arquivo - Save &As... - Salvar como... + Save &As... + Salvar como... - Save the active document under a new file name - Salvar o documento ativo com um novo nome de arquivo + Save the active document under a new file name + Salvar o documento ativo com um novo nome de arquivo - - + + StdCmdSceneInspector - Tools - Ferramentas + Tools + Ferramentas - Scene inspector... - Inspetor de cena... + Scene inspector... + Inspetor de cena... - Scene inspector - Inspetor de cena + Scene inspector + Inspetor de cena - - + + StdCmdSelectAll - Edit - Editar + Edit + Editar - Select &All - Selecionar &tudo + Select &All + Selecionar &tudo - Select all - Selecionar tudo + Select all + Selecionar tudo - - + + StdCmdSetAppearance - Standard-View - Vista padrão + Standard-View + Vista padrão - Appearance... - Aparência... + Appearance... + Aparência... - Sets the display properties of the selected object - Define as propriedades de exibição do objeto selecionado + Sets the display properties of the selected object + Define as propriedades de exibição do objeto selecionado - - + + StdCmdShowObjects - Standard-View - Vista padrão + Standard-View + Vista padrão - Show all objects - Mostrar todos os objectos + Show all objects + Mostrar todos os objectos - Show all objects in the document - Mostrar todos os objetos do documento + Show all objects in the document + Mostrar todos os objetos do documento - - + + StdCmdShowSelection - Standard-View - Vista padrão + Standard-View + Vista padrão - Show selection - Exibir seleção + Show selection + Exibir seleção - Show all selected objects - Mostrar todos os objetos selecionados + Show all selected objects + Mostrar todos os objetos selecionados - - + + StdCmdStatusBar - View - Vista + View + Vista - Status bar - Barra de status + Status bar + Barra de status - Toggles the status bar - Alterna a barra de status + Toggles the status bar + Alterna a barra de status - - + + StdCmdTextureMapping - Tools - Ferramentas + Tools + Ferramentas - Texture mapping... - Mapeamento de textura... + Texture mapping... + Mapeamento de textura... - Texture mapping - Mapeamento de textura + Texture mapping + Mapeamento de textura - - + + StdCmdTileWindows - Window - Janela + Window + Janela - &Tile - Lado a lado + &Tile + Lado a lado - Tile the windows - Organiza as janelas lado a lado + Tile the windows + Organiza as janelas lado a lado - - + + StdCmdToggleBreakpoint - Macro - Macro + Macro + Macro - Toggle breakpoint - Alternar ponto de interrupção + Toggle breakpoint + Alternar ponto de interrupção - - + + StdCmdToggleClipPlane - Standard-View - Vista padrão + Standard-View + Vista padrão - Clipping plane - Plano de clipping + Clipping plane + Plano de clipping - Toggles clipping plane for active view - Alterna plano de clipping da vista ativa + Toggles clipping plane for active view + Alterna plano de clipping da vista ativa - - + + StdCmdToggleNavigation - Standard-View - Vista padrão + Standard-View + Vista padrão - Toggle navigation/Edit mode - Alternar o modo de navegação/modo de edição + Toggle navigation/Edit mode + Alternar o modo de navegação/modo de edição - Toggle between navigation and edit mode - Alternar entre o modo de edição e navegação + Toggle between navigation and edit mode + Alternar entre o modo de edição e navegação - - + + StdCmdToggleObjects - Standard-View - Vista padrão + Standard-View + Vista padrão - Toggle all objects - Alternar todos os objetos + Toggle all objects + Alternar todos os objetos - Toggles visibility of all objects in the active document - Alterna a visibilidade de todos os objetos do documento ativo + Toggles visibility of all objects in the active document + Alterna a visibilidade de todos os objetos do documento ativo - - + + StdCmdToggleSelectability - Standard-View - Vista padrão + Standard-View + Vista padrão - Toggle selectability - Alternar seletibilidade + Toggle selectability + Alternar seletibilidade - Toggles the property of the objects to get selected in the 3D-View - Alterna a possibilidade dos objetos serem selecionados na vista 3D + Toggles the property of the objects to get selected in the 3D-View + Alterna a possibilidade dos objetos serem selecionados na vista 3D - - + + StdCmdToggleVisibility - Standard-View - Vista padrão + Standard-View + Vista padrão - Toggle visibility - Mudar visibilidade + Toggle visibility + Mudar visibilidade - Toggles visibility - Troca a visibilidade + Toggles visibility + Troca a visibilidade - - + + StdCmdToolBarMenu - View - Vista + View + Vista - Tool&bars - &Barras de ferramentas + Tool&bars + &Barras de ferramentas - Toggles this window - Troca esta janela + Toggles this window + Troca esta janela - - + + StdCmdTransform - Edit - Editar + Edit + Editar - Transform... - Transformar... + Transform... + Transformar... - Transform the geometry of selected objects - Transformar a geometria dos objetos selecionados + Transform the geometry of selected objects + Transformar a geometria dos objetos selecionados - - + + StdCmdTreeSelection - View - Vista + View + Vista - Go to selection - Ir para a seleção + Go to selection + Ir para a seleção - Scroll to first selected item - Vai para o primeiro item selecionado + Scroll to first selected item + Vai para o primeiro item selecionado - - + + StdCmdUndo - Edit - Editar + Edit + Editar - &Undo - &Desfazer + &Undo + &Desfazer - Undo exactly one action - Desfazer só uma ação + Undo exactly one action + Desfazer só uma ação - - + + StdCmdUserInterface - View - Vista + View + Vista - Dock views - Ancorar vistas + Dock views + Ancorar vistas - Dock all top-level views - Ancorar todas as vistas de nível superior + Dock all top-level views + Ancorar todas as vistas de nível superior - - + + StdCmdViewAxo - Standard-View - Vista padrão + Standard-View + Vista padrão - Axometric - Axonométrico + Axometric + Axonométrico - Set to axometric view - Definir como vista axonométrica + Set to axometric view + Definir como vista axonométrica - - + + StdCmdViewBottom - Standard-View - Vista padrão + Standard-View + Vista padrão - Bottom - De baixo + Bottom + De baixo - Set to bottom view - Ver de baixo + Set to bottom view + Ver de baixo - - + + StdCmdViewCreate - Standard-View - Vista padrão + Standard-View + Vista padrão - Create new view - Criar uma nova vista + Create new view + Criar uma nova vista - Creates a new view window for the active document - Cria uma nova janela de exibição para o documento ativo + Creates a new view window for the active document + Cria uma nova janela de exibição para o documento ativo - - + + StdCmdViewExample1 - Standard-View - Vista padrão + Standard-View + Vista padrão - Inventor example #1 - Exemplo Inventor #1 + Inventor example #1 + Exemplo Inventor #1 - Shows a 3D texture with manipulator - Mostra uma textura 3D com manipulador + Shows a 3D texture with manipulator + Mostra uma textura 3D com manipulador - - + + StdCmdViewExample2 - Standard-View - Vista padrão + Standard-View + Vista padrão - Inventor example #2 - Exemplo Inventor #2 + Inventor example #2 + Exemplo Inventor #2 - Shows spheres and drag-lights - Mostra esferas e luzes de arrasto + Shows spheres and drag-lights + Mostra esferas e luzes de arrasto - - + + StdCmdViewExample3 - Standard-View - Vista padrão + Standard-View + Vista padrão - Inventor example #3 - Exemplo Inventor #3 + Inventor example #3 + Exemplo Inventor #3 - Shows a animated texture - Mostra uma textura animada + Shows a animated texture + Mostra uma textura animada - - + + StdCmdViewFitAll - Standard-View - Vista padrão + Standard-View + Vista padrão - Fit all - Enquadrar tudo + Fit all + Enquadrar tudo - Fits the whole content on the screen - Adapta todo o conteúdo na tela + Fits the whole content on the screen + Adapta todo o conteúdo na tela - - + + StdCmdViewFitSelection - Standard-View - Vista padrão + Standard-View + Vista padrão - Fit selection - Enquadrar seleção + Fit selection + Enquadrar seleção - Fits the selected content on the screen - Adapta o conteúdo selecionado na tela + Fits the selected content on the screen + Adapta o conteúdo selecionado na tela - - + + StdCmdViewFront - Standard-View - Vista padrão + Standard-View + Vista padrão - Front - Frente + Front + Frente - Set to front view - Ajusta para a vista frontal + Set to front view + Ajusta para a vista frontal - - + + StdCmdViewIvIssueCamPos - Standard-View - Vista padrão + Standard-View + Vista padrão - Issue camera position - Mostrar a posição da câmera + Issue camera position + Mostrar a posição da câmera - Issue the camera position to the console and to a macro, to easily recall this position - Mostrar a posição da câmera no console e numa macro, para recuperar facilmente essa posição + Issue the camera position to the console and to a macro, to easily recall this position + Mostrar a posição da câmera no console e numa macro, para recuperar facilmente essa posição - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Vista padrão + Standard-View + Vista padrão - Stereo Interleaved Columns - Colunas estéreo intercaladas + Stereo Interleaved Columns + Colunas estéreo intercaladas - Switch stereo viewing to Interleaved Columns - Mudar de visualização stereo para Colunas Intercaladas + Switch stereo viewing to Interleaved Columns + Mudar de visualização stereo para Colunas Intercaladas - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Vista padrão + Standard-View + Vista padrão - Stereo Interleaved Rows - Linhas estéreo intercaladas + Stereo Interleaved Rows + Linhas estéreo intercaladas - Switch stereo viewing to Interleaved Rows - Alternar visualização estéreo para linhas intercaladas + Switch stereo viewing to Interleaved Rows + Alternar visualização estéreo para linhas intercaladas - - + + StdCmdViewIvStereoOff - Standard-View - Vista padrão + Standard-View + Vista padrão - Stereo Off - Desligar estéreo + Stereo Off + Desligar estéreo - Switch stereo viewing off - Desligar o modo de visualização estéreo + Switch stereo viewing off + Desligar o modo de visualização estéreo - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Vista padrão + Standard-View + Vista padrão - Stereo quad buffer - Quad buffer estéreo + Stereo quad buffer + Quad buffer estéreo - Switch stereo viewing to quad buffer - Alternar visualização estéreo para quad buffer + Switch stereo viewing to quad buffer + Alternar visualização estéreo para quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Vista padrão + Standard-View + Vista padrão - Stereo red/green - Estéreo vermelho/verde + Stereo red/green + Estéreo vermelho/verde - Switch stereo viewing to red/green - Alternar visualização estéreo para vermelho/verde + Switch stereo viewing to red/green + Alternar visualização estéreo para vermelho/verde - - + + StdCmdViewLeft - Standard-View - Vista padrão + Standard-View + Vista padrão - Left - Esquerda + Left + Esquerda - Set to left view - Ajusta para a vista esquerda + Set to left view + Ajusta para a vista esquerda - - + + StdCmdViewRear - Standard-View - Vista padrão + Standard-View + Vista padrão - Rear - Traseira + Rear + Traseira - Set to rear view - Vista de trás + Set to rear view + Vista de trás - - + + StdCmdViewRight - Standard-View - Vista padrão + Standard-View + Vista padrão - Right - Direito + Right + Direito - Set to right view - Vista direita + Set to right view + Vista direita - - + + + StdCmdViewRotateLeft + + Standard-View + Vista padrão + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Vista padrão + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Vista padrão + Standard-View + Vista padrão - Top - Topo + Top + Topo - Set to top view - Vista de topo + Set to top view + Vista de topo - - + + StdCmdWhatsThis - Help - Ajuda + Help + Ajuda - &What's This? - O &Que é Isso? + &What's This? + O &Que é Isso? - What's This - O Que é Isso + What's This + O Que é Isso - - + + StdCmdWindows - Window - Janela + Window + Janela - &Windows... - &Janelas... + &Windows... + &Janelas... - Windows list - Lista de janelas + Windows list + Lista de janelas - - + + StdCmdWindowsMenu - Window - Janela + Window + Janela - Activates this window - Ativar esta janela + Activates this window + Ativar esta janela - - + + StdCmdWorkbench - View - Vista + View + Vista - Workbench - Bancada + Workbench + Bancada - Switch between workbenches - Alternar entre bancadas + Switch between workbenches + Alternar entre bancadas - - + + StdOrthographicCamera - Standard-View - Vista padrão + Standard-View + Vista padrão - Orthographic view - Vista ortográfica + Orthographic view + Vista ortográfica - Switches to orthographic view mode - Alterna para o modo de exibição ortográfica + Switches to orthographic view mode + Alterna para o modo de exibição ortográfica - - + + StdPerspectiveCamera - Standard-View - Vista padrão + Standard-View + Vista padrão - Perspective view - Vista em perspectiva + Perspective view + Vista em perspectiva - Switches to perspective view mode - Alterna para o modo de visualização em perspectiva + Switches to perspective view mode + Alterna para o modo de visualização em perspectiva - - + + StdViewBoxZoom - Standard-View - Vista padrão + Standard-View + Vista padrão - Box zoom - Zoom por caixa + Box zoom + Zoom por caixa - - + + StdViewDockUndockFullscreen - Standard-View - Vista padrão + Standard-View + Vista padrão - Document window - Janela do documento + Document window + Janela do documento - Display the active view either in fullscreen, in undocked or docked mode - Mostrar a vista activa em tela cheia, em modo desencaixado ou encaixado + Display the active view either in fullscreen, in undocked or docked mode + Mostrar a vista activa em tela cheia, em modo desencaixado ou encaixado - - + + StdViewScreenShot - Standard-View - Vista padrão + Standard-View + Vista padrão - Save picture... - Salvar imagem... + Save picture... + Salvar imagem... - Creates a screenshot of the active view - Cria uma captura de tela da vista activa + Creates a screenshot of the active view + Cria uma captura de tela da vista activa - - + + StdViewZoomIn - Standard-View - Vista padrão + Standard-View + Vista padrão - Zoom In - Ampliar + Zoom In + Ampliar - - + + StdViewZoomOut - Standard-View - Vista padrão + Standard-View + Vista padrão - Zoom Out - Reduzir + Zoom Out + Reduzir - - + + Std_DrawStyle - As is - Como é + As is + Como é - Normal mode - Modo normal + Normal mode + Modo normal - Wireframe - Arame + Wireframe + Arame - Wireframe mode - Modo de arame + Wireframe mode + Modo de arame - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Arquivo + &File + &Arquivo - &Edit - &Editar + &Edit + &Editar - Standard views - Vistas padrão + Standard views + Vistas padrão - &Stereo - E&stéreo + &Stereo + E&stéreo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Visibilidade + Visibility + Visibilidade - &View - &Vista + &View + &Vista - &Tools - &Ferramentas + &Tools + &Ferramentas - &Macro - &Macro + &Macro + &Macro - &Windows - &Janelas + &Windows + &Janelas - &On-line help - A&juda on-line + &On-line help + A&juda on-line - &Help - A&juda + &Help + A&juda - File - Arquivo + File + Arquivo - Macro - Macro + Macro + Macro - View - Vista + View + Vista - Special Ops - Operações especiais + Special Ops + Operações especiais - - + + testClass - test - teste + test + teste - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Escolha o estilo do painel de tarefas + Choose the style of the Task Panel + Escolha o estilo do painel de tarefas - Default - Padrão + Default + Padrão - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_ru.ts b/src/Gui/Language/FreeCAD_ru.ts index b1e39e830..a8e56df61 100644 --- a/src/Gui/Language/FreeCAD_ru.ts +++ b/src/Gui/Language/FreeCAD_ru.ts @@ -1,5481 +1,5899 @@ - - + + Angle - Form - Форма + Form + Форма - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Угол оснастки + Angle Snap + Угол оснастки - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - false + + 2 ° + false - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - Отсутствует + none + Отсутствует - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Добавить + + + Remove + Удалить + + + Move up + Переместить вверх + + + Move down + Переместить вниз + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Нажмите левую кнопку мыши + Press left mouse button + Нажмите левую кнопку мыши - Press SHIFT and middle mouse button - Нажмите клавишу SHIFT и среднюю кнопку мыши + Press SHIFT and middle mouse button + Нажмите клавишу SHIFT и среднюю кнопку мыши - Press middle mouse button - Нажмите среднюю кнопку мыши + Press middle mouse button + Нажмите среднюю кнопку мыши - Scroll middle mouse button - Прокрутите среднюю кнопку мыши + Scroll middle mouse button + Прокрутите среднюю кнопку мыши - - + + Gui::CADNavigationStyle - Press left mouse button - Нажмите левую кнопку мыши + Press left mouse button + Нажмите левую кнопку мыши - Press middle mouse button - Нажмите среднюю кнопку мыши + Press middle mouse button + Нажмите среднюю кнопку мыши - Press left and middle mouse button - Нажмите левую и среднюю кнопку мыши + Press left and middle mouse button + Нажмите левую и среднюю кнопку мыши - Scroll middle mouse button - Прокрутите среднюю кнопку мыши + Scroll middle mouse button + Прокрутите среднюю кнопку мыши - - + + Gui::Command - Standard - По умолчанию + Standard + По умолчанию - - + + Gui::ContainerDialog - &OK - &OK + &OK + &OK - &Cancel - &Cancel + &Cancel + &Cancel - - + + Gui::ControlSingleton - Task panel - Панель задач + Task panel + Панель задач - - + + Gui::Dialog::AboutApplication - About - О программе + About + О программе - Revision number - Версия + Revision number + Версия - Version - Версия + Version + Версия - OK - OK + OK + OK - - О программе + + О программе - Release date - Дата выпуска + Release date + Дата выпуска - Platform - Платформа + Platform + Платформа - License... - Лицензия ... + License... + Лицензия ... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Кнопка %1 + Button %1 + Кнопка %1 - Out Of Range - За пределами допустимого диапазона + Out Of Range + За пределами допустимого диапазона - - + + Gui::Dialog::CommandModel - Commands - Команды + Commands + Команды - - + + Gui::Dialog::DemoMode - View Turntable - Поворотный просмотр + View Turntable + Поворотный просмотр - Speed - Скорость + Speed + Скорость - Maximum - Максимум + Maximum + Максимум - Minimum - Минимум + Minimum + Минимум - Fullscreen - На весь экран + Fullscreen + На весь экран - Enable timer - Включить таймер + Enable timer + Включить таймер - s - s + s + s - Angle - Угол + Angle + Угол + + + 90° + 90 ° + + + -90° + -90 ° - 90° - 90 ° + Play + Воспроизвести - -90° - -90 ° + Stop + Остановить - Play - Воспроизвести + Close + Закрыть - - Stop - Остановить - - - Close - Закрыть - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Выберите окно + Choose Window + Выберите окно - &Activate - &Aктивировать + &Activate + &Aктивировать - Alt+A - Alt + A + Alt+A + Alt + A - &Cancel - &Cancel + &Cancel + &Cancel - - О программе + + О программе - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Windows + Windows + Windows - - + + Gui::Dialog::DlgAuthorization - Authorization - Авторизация + Authorization + Авторизация - &OK - &OK + &OK + &OK - &Cancel - &Cancel + &Cancel + &Cancel - Password: - Пароль: + Password: + Пароль: - User name: - Имя пользователя: + User name: + Имя пользователя: - - О программе + + О программе - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Выберите иконку + Choose Icon + Выберите иконку - OK - OK + OK + OK - Cancel - Отменить + Cancel + Отменить - Add icons... - Добавить иконки... + Add icons... + Добавить иконки... - - + + Gui::Dialog::DlgCustomActions - Macros - Макрос + Macros + Макрос - Setup Custom Macros - Настройка пользовательских макросов + Setup Custom Macros + Настройка пользовательских макросов - Macro: - Макрос: + Macro: + Макрос: - ... - ... + ... + ... - Pixmap - Изображение + Pixmap + Изображение - Accelerator: - Ускоритель: + Accelerator: + Ускоритель: - What's this: - Что это: + What's this: + Что это: - Status text: - Текст состояния: + Status text: + Текст состояния: - Tool tip: - Подсказка: + Tool tip: + Подсказка: - Menu text: - Текст меню: + Menu text: + Текст меню: - Add - Добавить + Add + Добавить - Remove - Удалить + Remove + Удалить - Replace - Заменить + Replace + Заменить - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Иконки + Icons + Иконки - Macros - Макрос + Macros + Макрос - No macro - Нет макроса + No macro + Нет макроса - No macros found. - Макросы не найдены. + No macros found. + Макросы не найдены. - Macro not found - Макрос не найден + Macro not found + Макрос не найден - Sorry, couldn't find macro file '%1'. - К сожалению не удалось найти файл '% 1' макроса. + Sorry, couldn't find macro file '%1'. + К сожалению не удалось найти файл '% 1' макроса. - Empty macro - Пустой макрос + Empty macro + Пустой макрос - Please specify the macro first. - Сначала укажите макрос. + Please specify the macro first. + Сначала укажите макрос. - Empty text - Пустой текст + Empty text + Пустой текст - Please specify the menu text first. - Пожалуйста, укажите сначала текст в меню. + Please specify the menu text first. + Пожалуйста, укажите сначала текст в меню. - No item selected - Ни один пункт выбран + No item selected + Ни один пункт выбран - Please select a macro item first. - Пожалуйста, выберите сначала макрос. + Please select a macro item first. + Пожалуйста, выберите сначала макрос. - - + + Gui::Dialog::DlgCustomCommands - Commands - Команды + Commands + Команды - - О программе + + О программе - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Категория + Category + Категория - Icon - Иконка + Icon + Иконка - Command - Команда + Command + Команда - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Клавиатура + Keyboard + Клавиатура - Description: - Описание: + Description: + Описание: - &Category: - &Категория: + &Category: + &Категория: - C&ommands: - К&оманды: + C&ommands: + К&оманды: - Current shortcut: - Текущая комбинация клавиш: + Current shortcut: + Текущая комбинация клавиш: - Press &new shortcut: - Нажмите &новую комбинацию клавиш: + Press &new shortcut: + Нажмите &новую комбинацию клавиш: - Currently assigned to: - Сейчас назначено для: + Currently assigned to: + Сейчас назначено для: - &Assign - &Назначить + &Assign + &Назначить - Alt+A - Alt + A + Alt+A + Alt + A - &Reset - &Сбросить + &Reset + &Сбросить - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Сб&росить все + Re&set All + Сб&росить все - Alt+S - Alt+S + Alt+S + Alt+S - - О программе + + О программе - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Иконка + Icon + Иконка - Command - Команда + Command + Команда - none - Отсутствует + none + Отсутствует - Multiple defined shortcut - Несколько ссылок + Multiple defined shortcut + Несколько ссылок - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - '%1' клавиша быстрого доступа определена более одного раза. Это может привести к неожиданному поведению. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + '%1' клавиша быстрого доступа определена более одного раза. Это может привести к неожиданному поведению. - Already defined shortcut - Ярлык уже определен + Already defined shortcut + Ярлык уже определен - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Клавиша быстрого доступа '%1' уже назначена для '%2'. + Клавиша быстрого доступа '%1' уже назначена для '%2'. Пожалуйста, определите другое значение клавиши быстрого доступа. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Панели инструментов + Toolbox bars + Панели инструментов - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Панели инструментов + Toolbars + Панели инструментов - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - Move right - Перейти вправо + Move right + Перейти вправо - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> - Move left - Перейти влево + Move left + Перейти влево - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> - Move down - Переместить вниз + Move down + Переместить вниз - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - Move up - Переместить вверх + Move up + Переместить вверх - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - New... - Новый... + New... + Новый... - Rename... - Переименовать... + Rename... + Переименовать... - Delete - Удалить + Delete + Удалить - Icon - Иконка + Icon + Иконка - Command - Команда + Command + Команда - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Новая панель инструментов + New toolbar + Новая панель инструментов - Toolbar name: - Имя панели инструментов: + Toolbar name: + Имя панели инструментов: - Duplicated name - Повторяющееся имя + Duplicated name + Повторяющееся имя - The toolbar name '%1' is already used - Имя панели инструментов '%1' уже используется + The toolbar name '%1' is already used + Имя панели инструментов '%1' уже используется - Rename toolbar - Переименовать панель + Rename toolbar + Переименовать панель - - О программе + + О программе - - + + Gui::Dialog::DlgCustomizeImp - Customize - Настроить + Customize + Настроить - &Help - &Справка + &Help + &Справка - &Close - &Закрыть + &Close + &Закрыть - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - Spaceball не присутствует + No Spaceball Present + Spaceball не присутствует - Buttons - Кнопки + Buttons + Кнопки - Clear - Очистить + Clear + Очистить - Print Reference - Руководство по печати + Print Reference + Руководство по печати - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Отобразить свойства + Display properties + Отобразить свойства - Display - Отобразить + Display + Отобразить - Transparency: - Прозрачность: + Transparency: + Прозрачность: - Line width: - Толщина линии: + Line width: + Толщина линии: - Point size: - Размер точки: + Point size: + Размер точки: - Material - Материал + Material + Материал - ... - ... + ... + ... - Close - Закрыть + Close + Закрыть - Viewing mode - Режим просмотра + Viewing mode + Режим просмотра - Display mode: - Режим отображения: + Display mode: + Режим отображения: - Plot mode: - Режим вывода на печать: + Plot mode: + Режим вывода на печать: - - О программе + + О программе - Line transparency: - Прозрачность линии: + Line transparency: + Прозрачность линии: - Line color: - Цвет линии: + Line color: + Цвет линии: - Shape color: - Цвет фигуры: + Shape color: + Цвет фигуры: - Color plot: - Цветной рисунок: + Color plot: + Цветной рисунок: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Редактор + Editor + Редактор - Options - Параметры + Options + Параметры - Enable line numbers - Включить номера строк + Enable line numbers + Включить номера строк - Enable folding - Включить сворачивание + Enable folding + Включить сворачивание - Indentation - Отступ + Indentation + Отступ - Insert spaces - Вставить пробелы + Insert spaces + Вставить пробелы - Tab size: - Размер табуляции: + Tab size: + Размер табуляции: - Indent size: - Размер отступа: + Indent size: + Размер отступа: - Keep tabs - Сохранить вкладки + Keep tabs + Сохранить вкладки - Display Items - Отобразить элементы + Display Items + Отобразить элементы - Family: - Семейство: + Family: + Семейство: - Size: - Размер: + Size: + Размер: - Preview: - Предпросмотр: + Preview: + Предпросмотр: - - О программе + + О программе - - + + Gui::Dialog::DlgGeneral - General - Основные + General + Основные - Start up - Запуск + Start up + Запуск - Enable splash screen at start up - Включить заставку при запуске + Enable splash screen at start up + Включить заставку при запуске - Switch to tab of report window: - Переключитесь на вкладку окна отчета: + Switch to tab of report window: + Переключитесь на вкладку окна отчета: - Auto load module after start up: - Автоматическая загрузка модуля после запуска: + Auto load module after start up: + Автоматическая загрузка модуля после запуска: - Language - Язык + Language + Язык - Change language: - Изменить язык: + Change language: + Изменить язык: - Main window - Главное окно + Main window + Главное окно - Size of recent file list - Размер списка последних файлов + Size of recent file list + Размер списка последних файлов - Window style: - Стиль окна: + Window style: + Стиль окна: - Size of toolbar icons: - Размер значков на панели инструментов: + Size of toolbar icons: + Размер значков на панели инструментов: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - По умолчанию (%1х%1) + Default (%1 x %1) + По умолчанию (%1х%1) - Small (%1 x %1) - Маленький (%1%х%1) + Small (%1 x %1) + Маленький (%1%х%1) - Large (%1 x %1) - Большой (%1x%1) + Large (%1 x %1) + Большой (%1x%1) - Extra large (%1 x %1) - Очень большой (%1х%1) + Extra large (%1 x %1) + Очень большой (%1х%1) - - + + Gui::Dialog::DlgInputDialog - Input - Ввод + Input + Ввод - OK - OK + OK + OK - Cancel - Отменить + Cancel + Отменить - - О программе + + О программе - - + + Gui::Dialog::DlgInspector - Scene Inspector - Инспектор сцены + Scene Inspector + Инспектор сцены - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Выполнить макрос + Execute macro + Выполнить макрос - Macro name: - Имя макроса: + Macro name: + Имя макроса: - Macro destination: - Назначение макроса: + Macro destination: + Назначение макроса: - Execute - Выполнить + Execute + Выполнить - Close - Закрыть + Close + Закрыть - Create - Создать + Create + Создать - Delete - Удалить + Delete + Удалить - Edit - Редактировать + Edit + Редактировать - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Макрос + Macros + Макрос - Macro file - Файл макроса + Macro file + Файл макроса - Enter a file name, please: - Введите имя файла, пожалуйста: + Enter a file name, please: + Введите имя файла, пожалуйста: - Existing file - Существующий файл + Existing file + Существующий файл - '%1'. + '%1'. This file already exists. - '%1'. Этот файл уже существует. + '%1'. Этот файл уже существует. - Delete macro - Удалить макрос + Delete macro + Удалить макрос - Do you really want to delete the macro '%1'? - Вы действительно хотите удалить макрос '%1' ? + Do you really want to delete the macro '%1'? + Вы действительно хотите удалить макрос '%1' ? - Cannot create file - Не удается создать файл + Cannot create file + Не удается создать файл - Creation of file '%1' failed. - Не удалось создать файл '%1'. + Creation of file '%1' failed. + Не удалось создать файл '%1'. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Запись макроса + Macro recording + Запись макроса - Macro name: - Имя макроса: + Macro name: + Имя макроса: - Stop - Остановить + Stop + Остановить - Cancel - Отменить + Cancel + Отменить - Macro path: - Путь к Макросу: + Macro path: + Путь к Макросу: - ... - ... + ... + ... - Record - Запись + Record + Запись - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Средство записи макросов + Macro recorder + Средство записи макросов - Specify first a place to save. - Сначала укажите место для сохранения. + Specify first a place to save. + Сначала укажите место для сохранения. - Existing macro - Существующие макросы + Existing macro + Существующие макросы - The macro '%1' already exists. Do you want to overwrite? - Макрос '% 1' уже существует. Вы хотите переписать? + The macro '%1' already exists. Do you want to overwrite? + Макрос '% 1' уже существует. Вы хотите переписать? - The macro directory doesn't exist. Please, choose another one. - Макрос каталог не существует. Пожалуйста выберите другой. + The macro directory doesn't exist. Please, choose another one. + Макрос каталог не существует. Пожалуйста выберите другой. - Choose macro directory - Выберите каталог макросов + Choose macro directory + Выберите каталог макросов - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Свoйства материала + Material properties + Свoйства материала - &Close - &Закрыть + &Close + &Закрыть - Alt+C - ALT + C + Alt+C + ALT + C - Material - Материал + Material + Материал - Diffuse color: - Рассеянный цвет: + Diffuse color: + Рассеянный цвет: - Specular color: - Отраженный цвет: + Specular color: + Отраженный цвет: - Shininess: - Яркость: + Shininess: + Яркость: - % - % + % + % - Ambient color: - Окружающий цвет: + Ambient color: + Окружающий цвет: - - О программе + + О программе - Emissive color: - Воздействующий цвет: + Emissive color: + Воздействующий цвет: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Он-лайн помощь + On-line help + Он-лайн помощь - Help viewer - программа просмотра справки + Help viewer + программа просмотра справки - Location of start page - Расположение стартовой страницы + Location of start page + Расположение стартовой страницы - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML-файлы (*.html *.htm) + HTML files (*.html *.htm) + HTML-файлы (*.html *.htm) - Access denied - Доступ запрещен + Access denied + Доступ запрещен - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Отказано в доступе к '% 1' + Отказано в доступе к '% 1' Укажите другой каталог, пожалуйста. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Параметры редактора + Parameter Editor + Параметры редактора - Save to disk - Сохранить на диск + Save to disk + Сохранить на диск - Alt+C - ALT + C + Alt+C + ALT + C - &Close - &Закрыть + &Close + &Закрыть - - + + Gui::Dialog::DlgParameterImp - Group - Группа + Group + Группа - Name - Название + Name + Название - Type - Тип + Type + Тип - Value - Значение + Value + Значение - User parameter - Пользовательские параметры + User parameter + Пользовательские параметры - Invalid input - Неправильный ввод + Invalid input + Неправильный ввод - Invalid key name '%1' - Недопустимое имя ключа '% 1' + Invalid key name '%1' + Недопустимое имя ключа '% 1' - System parameter - Параметры системы + System parameter + Параметры системы - - + + Gui::Dialog::DlgPreferences - Preferences - Настройка + Preferences + Настройка - &Help - &Справка + &Help + &Справка - Alt+H - Alt + H + Alt+H + Alt + H - &OK - &OK + &OK + &OK - &Apply - & Применить + &Apply + & Применить - Alt+A - Alt + A + Alt+A + Alt + A - &Cancel - &Cancel + &Cancel + &Cancel - - О программе + + О программе - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Неверный параметр + Wrong parameter + Неверный параметр - - + + Gui::Dialog::DlgProjectInformation - Project information - Информация о проекте + Project information + Информация о проекте - Information - Сведения + Information + Сведения - &Name: - &Имя: + &Name: + &Имя: - Commen&t: - Коммен&тарий: + Commen&t: + Коммен&тарий: - Path: - Путь: + Path: + Путь: - &Last modified by: - &Последние изменения внесены: + &Last modified by: + &Последние изменения внесены: - Created &by: - Создатели: + Created &by: + Создатели: - Com&pany: - Организация: + Com&pany: + Организация: - Last &modification date: - Дата последнего изменения: + Last &modification date: + Дата последнего изменения: - Creation &date: - &Дата создания: + Creation &date: + &Дата создания: - &OK - &OK + &OK + &OK - &Cancel - &Cancel + &Cancel + &Cancel - - О программе + + О программе - - + + Gui::Dialog::DlgProjectUtility - Project utility - Утилита проекта + Project utility + Утилита проекта - Extract project - извлечь проект + Extract project + извлечь проект - Source - Источник + Source + Источник - Project file (*.fcstd) - Файл проекта (*.fcstd) + Project file (*.fcstd) + Файл проекта (*.fcstd) - Destination - Назначение + Destination + Назначение - Extract - Извлечь + Extract + Извлечь - Create project - Создать проект + Create project + Создать проект - Document.xml - Document.xml + Document.xml + Document.xml - Create - Создать + Create + Создать - Load project file after creation - Загрузить файл проекта после создания + Load project file after creation + Загрузить файл проекта после создания - Empty source - Пустой источник + Empty source + Пустой источник - No source is defined. - Источник не определён. + No source is defined. + Источник не определён. - Empty destination - Назначение пусто + Empty destination + Назначение пусто - No destination is defined. - Назначение не определено. + No destination is defined. + Назначение не определено. - - + + Gui::Dialog::DlgReportView - Output window - Окно вывода + Output window + Окно вывода - Output - Вывод + Output + Вывод - Record log messages - Запись журнала + Record log messages + Запись журнала - Record warnings - Запись предупреждений + Record warnings + Запись предупреждений - Record error messages - Запись сообщений об ошибках + Record error messages + Запись сообщений об ошибках - Colors - Цвета + Colors + Цвета - Normal messages: - Обычные сообщения: + Normal messages: + Обычные сообщения: - Log messages: - Журнал сообщений: + Log messages: + Журнал сообщений: - Warnings: - Предупреждения: + Warnings: + Предупреждения: - Errors: - Ошибки: + Errors: + Ошибки: - - О программе + + О программе - Redirect internal Python errors to report view - Перенаправить внутренние ошибки Python для представления отчета + Redirect internal Python errors to report view + Перенаправить внутренние ошибки Python для представления отчета - Redirect internal Python output to report view - Перенаправить внутренний выход Python в информационное окно + Redirect internal Python output to report view + Перенаправить внутренний выход Python в информационное окно - - + + Gui::Dialog::DlgRunExternal - Running external program - Запуск внешней программы + Running external program + Запуск внешней программы - TextLabel - Текстовая метка + TextLabel + Текстовая метка - Advanced >> - Дополнительно >> + Advanced >> + Дополнительно >> - ... - ... + ... + ... - Accept changes - Принять изменения + Accept changes + Принять изменения - Discard changes - Отменить изменения + Discard changes + Отменить изменения - Abort program - Прервать программу + Abort program + Прервать программу - Help - Справка + Help + Справка - Select a file - Выберите файл + Select a file + Выберите файл - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D Вид + 3D View + 3D Вид - 3D View settings - Настройки 3D просмотра + 3D View settings + Настройки 3D просмотра - Show coordinate system in the corner - Показать систему координат в углу + Show coordinate system in the corner + Показать систему координат в углу - Show counter of frames per second - Показать счетчик кадров в секунду + Show counter of frames per second + Показать счетчик кадров в секунду - Enable animation - Включить анимацию + Enable animation + Включить анимацию - Enable anti-aliasing (slower) - Включить сглаживание (медленный способ) + Enable anti-aliasing (slower) + Включить сглаживание (медленный способ) - Eye to eye distance for stereo modes: - Расстояние между глаз для стерео режима: + Eye to eye distance for stereo modes: + Расстояние между глаз для стерео режима: - Camera type - Тип камеры + Camera type + Тип камеры - Orthographic rendering - Ортогональный рендеринг + Orthographic rendering + Ортогональный рендеринг - Perspective rendering - Рендер в перспективе + Perspective rendering + Рендер в перспективе - - О программе + + О программе - 3D Navigation - 3D Навигация + 3D Navigation + 3D Навигация - Mouse... - Мышь... + Mouse... + Мышь... - Intensity of backlight - Интенсивность подсветки + Intensity of backlight + Интенсивность подсветки - Enable backlight color - Включить цвет подсветки + Enable backlight color + Включить цвет подсветки - Orbit style - Стиль орбиты + Orbit style + Стиль орбиты - Turntable - Поворотный круг + Turntable + Поворотный круг - Trackball - Trackball + Trackball + Trackball - Invert zoom - Инвертировать зум + Invert zoom + Инвертировать зум - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 навигация + %1 navigation + %1 навигация - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Цветовая модель + Color model + Цветовая модель - &Gradient: - & Градиент: + &Gradient: + & Градиент: - red-yellow-green-cyan-blue - красный-желтый-зеленый-голубой-синий + red-yellow-green-cyan-blue + красный-желтый-зеленый-голубой-синий - blue-cyan-green-yellow-red - синий-голубой-зеленый-желтый-красный + blue-cyan-green-yellow-red + синий-голубой-зеленый-желтый-красный - white-black - бело-черный + white-black + бело-черный - black-white - черно-белый + black-white + черно-белый - Visibility - Видимость + Visibility + Видимость - Out g&rayed - Из серого + Out g&rayed + Из серого - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Из &невидимого + Out &invisible + Из &невидимого - Alt+I - Alt+I + Alt+I + Alt+I - Style - Стиль + Style + Стиль - &Zero - & Ноль + &Zero + & Ноль - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - & Поток + &Flow + & Поток - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &OK + &OK + &OK - &Cancel - &Cancel + &Cancel + &Cancel - Parameter range - Диапазон значений параметра + Parameter range + Диапазон значений параметра - Mi&nimum: - Ми&нимум: + Mi&nimum: + Ми&нимум: - Ma&ximum: - Ма&ксимум: + Ma&ximum: + Ма&ксимум: - &Labels: - Ярлыки: + &Labels: + Ярлыки: - &Decimals: - & Десятичные: + &Decimals: + & Десятичные: - - О программе + + О программе - Color-gradient settings - Настройки цветового градиента + Color-gradient settings + Настройки цветового градиента - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Неверный параметр + Wrong parameter + Неверный параметр - The maximum value must be higher than the minimum value. - Максимальное значение должно быть больше минимального значения. + The maximum value must be higher than the minimum value. + Максимальное значение должно быть больше минимального значения. - - + + Gui::Dialog::DlgSettingsDocument - Document - Документ + Document + Документ - General - Основные + General + Основные - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Уровень сжатия сохраняемого документа + Уровень сжатия сохраняемого документа (0 = нет, 9 = высокий, 3 = по умолчанию) - Create new document at start up - Создание нового документа при запуске + Create new document at start up + Создание нового документа при запуске - Storage - Хранилище + Storage + Хранилище - Saving transactions (Auto-save) - Сохранение операций (Автосохранение) + Saving transactions (Auto-save) + Сохранение операций (Автосохранение) - Discard saved transaction after saving document - Удалять сохраненные операции после сохранения документа + Discard saved transaction after saving document + Удалять сохраненные операции после сохранения документа - Save thumbnail into project file when saving document - Сохранить миниатюру в файл проекта при сохранении документа + Save thumbnail into project file when saving document + Сохранить миниатюру в файл проекта при сохранении документа - Create up to backup files when resaving document - Создать резервную копию файлов, когда сохраняется документ + Create up to backup files when resaving document + Создать резервную копию файлов, когда сохраняется документ - Document objects - Объекты документа + Document objects + Объекты документа - Allow duplicate object labels in one document - Разрешить создавать дубликат этикетки в одном документе + Allow duplicate object labels in one document + Разрешить создавать дубликат этикетки в одном документе - Maximum Undo/Redo steps - Максимальная Отмена/Повтор шагов + Maximum Undo/Redo steps + Максимальная Отмена/Повтор шагов - Using Undo/Redo on documents - Использование Undo/Redo на документах + Using Undo/Redo on documents + Использование Undo/Redo на документах - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Текст + Text + Текст - Bookmark - Закладки + Bookmark + Закладки - Breakpoint - Точка останова + Breakpoint + Точка останова - Keyword - Ключевое слово + Keyword + Ключевое слово - Comment - Комментарий + Comment + Комментарий - Block comment - Блок комментариев + Block comment + Блок комментариев - Number - Число + Number + Число - String - Строка + String + Строка - Character - Символ + Character + Символ - Class name - Имя класса + Class name + Имя класса - Define name - Задать имя + Define name + Задать имя - Operator - Оператор + Operator + Оператор - Python output - Вывод Python + Python output + Вывод Python - Python error - Ошибка Python + Python error + Ошибка Python - Items - Элементы + Items + Элементы - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Настройки изображения + Image settings + Настройки изображения - Image properties - Свойства изображения + Image properties + Свойства изображения - Back&ground: - Фон: + Back&ground: + Фон: - Current - Текущий + Current + Текущий - White - Белый + White + Белый - Black - Чёрный + Black + Чёрный - Transparent - Прозрачный + Transparent + Прозрачный - Image dimensions - Размеры изображения + Image dimensions + Размеры изображения - Pixel - Пиксель + Pixel + Пиксель - &Width: - &Ширина: + &Width: + &Ширина: - Current screen - Текущий экран + Current screen + Текущий экран - Icon 32 x 32 - Иконка 32х32 + Icon 32 x 32 + Иконка 32х32 - Icon 64 x 64 - Иконка 64х64 + Icon 64 x 64 + Иконка 64х64 - Icon 128 x 128 - Иконка 128х128 + Icon 128 x 128 + Иконка 128х128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 x 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 x 4800 - QUXGA 3200 × 2400 - QUXGA 3200 x 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 x 4800 + Standard sizes: + Стандартные размеры: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + & Высота: - Standard sizes: - Стандартные размеры: + Aspect ratio: + Соотношение сторон: - &Height: - & Высота: + &Screen + &Экрана - Aspect ratio: - Соотношение сторон: + Alt+S + Alt+S - &Screen - &Экрана + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Комментарий к изображению - Alt+1 - Alt+1 + Insert MIBA + Вставка MIBA - Image comment - Комментарий к изображению + Insert comment + Вставить комментарий - - Insert MIBA - Вставка MIBA - - - Insert comment - Вставить комментарий - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Макро + Macro + Макро - Macro recording settings - Настройки записи макросов + Macro recording settings + Настройки записи макросов - Logging Commands - Ведение журнала команд + Logging Commands + Ведение журнала команд - Show script commands in python console - Показывать команды скриптов в консоли Python + Show script commands in python console + Показывать команды скриптов в консоли Python - Log all commands issued by menus to file: - Регистрация всех команд, вызванных при помощи меню, в файле: + Log all commands issued by menus to file: + Регистрация всех команд, вызванных при помощи меню, в файле: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Gui команды + Gui commands + Gui команды - Recording GUI commands - Запись GUI команды + Recording GUI commands + Запись GUI команды - Record as comment - Регистрировать в качестве комментария + Record as comment + Регистрировать в качестве комментария - Macro path - Путь к Макросу + Macro path + Путь к Макросу - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Единицы + Units + Единицы - Units settings - Настройка единиц измерения + Units settings + Настройка единиц измерения - Standard (mm/kg/s/degree) - Стандарт (мм/кг/с/град) + Standard (mm/kg/s/degree) + Стандарт (мм/кг/с/град) - MKS (m/kg/s/degree) - МКС (м/кг/с/степень) + MKS (m/kg/s/degree) + МКС (м/кг/с/степень) - Magnitude - Величина + Magnitude + Величина - Unit - Юнит + Unit + Юнит - User system: - Пользовательская система: + User system: + Пользовательская система: - Imperial (in/lb) - Imperial (in/lb) + Imperial (in/lb) + Imperial (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Цвета + Colors + Цвета - Selection - Выделение + Selection + Выделение - Enable selection highlighting - Включить подсвечивание выделенного + Enable selection highlighting + Включить подсвечивание выделенного - Enable preselection highlighting - Включить подсвечивание предварительного выделения + Enable preselection highlighting + Включить подсвечивание предварительного выделения - Background color - Цвет фона + Background color + Цвет фона - Middle color - Средний цвет + Middle color + Средний цвет - Color gradient - Цветовой градиент + Color gradient + Цветовой градиент - Simple color - Простые цвета + Simple color + Простые цвета - Default colors - Цвета по умолчанию + Default colors + Цвета по умолчанию - Edited edge color - цвет отредактированной грани + Edited edge color + цвет отредактированной грани - Edited vertex color - Цвет отредактированный вершины + Edited vertex color + Цвет отредактированный вершины - Construction geometry - вспомогательная геометрия + Construction geometry + вспомогательная геометрия - Fully constrained geometry - Полностью связанная геометрия + Fully constrained geometry + Полностью связанная геометрия - The color of construction geometry in editmode - Цвет вспомогательной геометрии в режиме редактирования + The color of construction geometry in editmode + Цвет вспомогательной геометрии в режиме редактирования - The color of fully constrained geometry in editmode - Цвет полностью связанной геометрии в режиме редактирования + The color of fully constrained geometry in editmode + Цвет полностью связанной геометрии в режиме редактирования - The color of vertices being edited - Цвет редактируемых вершин + The color of vertices being edited + Цвет редактируемых вершин - The color of edges being edited - цвет редактируемых граней + The color of edges being edited + цвет редактируемых граней - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Полезный совет + Tip of the day + Полезный совет - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Знаете ли вы...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Знаете ли вы...</font></font></b> - &Show tips at start up - &Показывать советы при запуске + &Show tips at start up + &Показывать советы при запуске - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Следующий совет + &Next Tip + &Следующий совет - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Закрыть + &Close + &Закрыть - Alt+C - ALT + C + Alt+C + ALT + C - - О программе + + О программе - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Ошибка загрузки: %1 + Ошибка загрузки: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Если вы хотите узнать больше о FreeCAD вам необходимо обратиться в %1 или нажмите пункт Справка в меню Справка. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Если вы хотите узнать больше о FreeCAD вам необходимо обратиться в %1 или нажмите пункт Справка в меню Справка. - - + + Gui::Dialog::DockablePlacement - Placement - Расположение + Placement + Расположение - - + + Gui::Dialog::DownloadDialog - Canceled. - Отменен. + Canceled. + Отменен. - - + + Download + + + + Cancel + Отменить + + + Close + Закрыть + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Ошибка загрузки: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Добавить иконку + Add icon + Добавить иконку - - + + Gui::Dialog::InputVector - Input vector - Входной вектор + Input vector + Входной вектор - Vector - Вектор + Vector + Вектор - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Кнопки мыши + Mouse buttons + Кнопки мыши - Configuration - Конфигурация + Configuration + Конфигурация - Selection: - Выделение: + Selection: + Выделение: - Panning - Панорамирование + Panning + Панорамирование - Rotation: - Вращение: + Rotation: + Вращение: - Zooming: - Масштабирование: + Zooming: + Масштабирование: - - + + Gui::Dialog::ParameterGroup - Expand - Развернуть + Expand + Развернуть - Add sub-group - Добавить подгруппу + Add sub-group + Добавить подгруппу - Remove group - Удалить группу + Remove group + Удалить группу - Rename group - Переименовать группу + Rename group + Переименовать группу - Export parameter - Экспортировать параметр + Export parameter + Экспортировать параметр - Import parameter - Параметры импорта + Import parameter + Параметры импорта - Collapse - Свернуть + Collapse + Свернуть - Do really want to remove this parameter group? - Действительно хотите удалить эту группу параметров? + Do really want to remove this parameter group? + Действительно хотите удалить эту группу параметров? - Existing sub-group - Существующие подгруппы + Existing sub-group + Существующие подгруппы - The sub-group '%1' already exists. - Подгруппа '%1' уже существует. + The sub-group '%1' already exists. + Подгруппа '%1' уже существует. - Export parameter to file - Экспорт параметров в файл + Export parameter to file + Экспорт параметров в файл - XML (*.FCParam) - XML(*.FCParam) + XML (*.FCParam) + XML(*.FCParam) - Import parameter from file - Импорт параметров из файла + Import parameter from file + Импорт параметров из файла - Import Error - Ошибка импорта + Import Error + Ошибка импорта - Reading from '%1' failed. - Не удалось выполнить чтение из '%1'. + Reading from '%1' failed. + Не удалось выполнить чтение из '%1'. - - + + Gui::Dialog::ParameterValue - Change value - Изменить значение + Change value + Изменить значение - Remove key - Удалить ключ + Remove key + Удалить ключ - Rename key - Переименовать ключ + Rename key + Переименовать ключ - New - Новый + New + Новый - New string item - Новый элемент строки + New string item + Новый элемент строки - New float item - Новый вещественный элемент + New float item + Новый вещественный элемент - New integer item - Новый целочисленный элемент + New integer item + Новый целочисленный элемент - New unsigned item - Новый беззнаковый элемент + New unsigned item + Новый беззнаковый элемент - New Boolean item - Новый логический элемент + New Boolean item + Новый логический элемент - Existing item - Существующий элемент + Existing item + Существующий элемент - The item '%1' already exists. - Элемент '%1' уже существует. + The item '%1' already exists. + Элемент '%1' уже существует. - - + + Gui::Dialog::Placement - Placement - Расположение + Placement + Расположение - OK - OK + OK + OK - Translation: - Перемещение: + Translation: + Перемещение: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Вращение: + Rotation: + Вращение: - Angle: - Угол: + Angle: + Угол: - Axis: - Оси: + Axis: + Оси: - Center: - Центр: + Center: + Центр: - Pitch: - Шаг: + Pitch: + Шаг: - Roll: - Рулон: + Roll: + Рулон: - Yaw: - Отклонение: + Yaw: + Отклонение: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Углы Эйлера + Euler angles + Углы Эйлера - Apply placement changes immediately - Немедленно применить изменения размещений + Apply placement changes immediately + Немедленно применить изменения размещений - Apply incremental changes to object placement - Применить дополнительные изменения к объекту размещения + Apply incremental changes to object placement + Применить дополнительные изменения к объекту размещения - Apply - Применить + Apply + Применить - Reset - Сброс + Reset + Сброс - Close - Закрыть + Close + Закрыть - - + + Gui::Dialog::PrintModel - Button - Кнопка + Button + Кнопка - Command - Команда + Command + Команда - - + + Gui::Dialog::SceneInspector - Dialog - Диалог + Dialog + Диалог - Close - Закрыть + Close + Закрыть - Refresh - Обновить + Refresh + Обновить - - + + Gui::Dialog::SceneModel - Inventor Tree - Создатель дерева + Inventor Tree + Создатель дерева - Nodes - Узлы + Nodes + Узлы - - + + Gui::Dialog::TextureMapping - Texture - Текстура + Texture + Текстура - Texture mapping - Текстуры + Texture mapping + Текстуры - Global - Глобальный + Global + Глобальный - Environment - Окружение + Environment + Окружение - Image files (%1) - Файлы изображений (%1) + Image files (%1) + Файлы изображений (%1) - No image - Нет изображения + No image + Нет изображения - The specified file is not a valid image file. - Указанный файл не является допустимым. + The specified file is not a valid image file. + Указанный файл не является допустимым. - No 3d view - Нет 3d просмотра + No 3d view + Нет 3d просмотра - No active 3d view found. - Активный 3d вид не найден. + No active 3d view found. + Активный 3d вид не найден. - - + + Gui::Dialog::Transform - Cancel - Отменить + Cancel + Отменить - Transform - Преобразовать + Transform + Преобразовать - - + + Gui::DlgTreeWidget - Dialog - Диалог + Dialog + Диалог - Items - Элементы + Items + Элементы - OK - OK + OK + OK - Cancel - Отменить + Cancel + Отменить - - О программе + + О программе - - + + Gui::DockWnd::CombiView - CombiView - КомбинированныВид + CombiView + КомбинированныВид - Project - Проект + Project + Проект - Tasks - Задачи + Tasks + Задачи - - + + Gui::DockWnd::HelpView - Previous - Предыдущий + Previous + Предыдущий - Next - Следующий + Next + Следующий - Home - В начало + Home + В начало - Open - Открыть + Open + Открыть - Open file - Открыть файл + Open file + Открыть файл - All HTML files (*.html *.htm) - Все HTML-файлы (*.html *.htm) + All HTML files (*.html *.htm) + Все HTML-файлы (*.html *.htm) - External browser - Внешний браузер + External browser + Внешний браузер - No external browser found. Specify in preferences, please - Внешний браузер не найден. Пожалуйста, укажите в настройках, + No external browser found. Specify in preferences, please + Внешний браузер не найден. Пожалуйста, укажите в настройках, - Starting of %1 failed - Запуск %1 невозможен + Starting of %1 failed + Запуск %1 невозможен - - + + Gui::DockWnd::PropertyDockView - Property View - Вид собственности + Property View + Вид собственности - - + + Gui::DockWnd::ReportOutput - Logging - Ведение журнала + Logging + Ведение журнала - Warning - Внимание + Warning + Внимание - Error - Ошибка + Error + Ошибка - Options - Параметры + Options + Параметры - Clear - Очистить + Clear + Очистить - Save As... - Сохранить как... + Save As... + Сохранить как... - Save Report Output - Сохранить отчет + Save Report Output + Сохранить отчет - Plain Text Files (*.txt *.log) - Текстовые файлы (*.txt,*.log) + Plain Text Files (*.txt *.log) + Текстовые файлы (*.txt,*.log) - Go to end - Переход к концу + Go to end + Переход к концу - Redirect Python output - Перенаправить вывод Python-a + Redirect Python output + Перенаправить вывод Python-a - Redirect Python errors - Сообщить об ошибке Python + Redirect Python errors + Сообщить об ошибке Python - - + + Gui::DockWnd::ReportView - Output - Вывод + Output + Вывод - Python console - Консоль Python + Python console + Консоль Python - - + + Gui::DockWnd::SelectionView - Property View - Вид собственности + Property View + Вид собственности - - + + Gui::DockWnd::TaskPanelView - Task View - Просмотр задач + Task View + Просмотр задач - - + + Gui::DockWnd::TextBrowser - Could not open file. - Невозможно открыть файл. + Could not open file. + Невозможно открыть файл. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Вы попытались получить доступ к адресу %1, который в настоящее время недоступен. Пожалуйста, убедитесь, что URL-адрес существует и попробуйте перезагрузить страницу. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Вы попытались получить доступ к адресу %1, который в настоящее время недоступен. Пожалуйста, убедитесь, что URL-адрес существует и попробуйте перезагрузить страницу. - Connecting to %1 - Подключение к %1 + Connecting to %1 + Подключение к %1 - Sending to %1 - Отправить %1 + Sending to %1 + Отправить %1 - Reading from %1 - Чтение из %1 + Reading from %1 + Чтение из %1 - Download failed: %1. - Ошибка загрузки: %1. + Download failed: %1. + Ошибка загрузки: %1. - Previous - Предыдущий + Previous + Предыдущий - Forward - Вперед + Forward + Вперед - Home - В начало + Home + В начало - Refresh - Обновить + Refresh + Обновить - Copy - Скопировать + Copy + Скопировать - Select all - Выделить все + Select all + Выделить все - No description for - Нет описания для + No description for + Нет описания для - - + + Gui::DocumentModel - Application - Приложение + Application + Приложение - Labels & Attributes - Метки и атрибуты + Labels & Attributes + Метки и атрибуты - - + + Gui::EditorView - Modified file - Измененный файл + Modified file + Измененный файл - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Это было изменено вне редактора исходного кода. Вы хотите перезагрузить его? - Unsaved document - Документ несохранен + Unsaved document + Документ несохранен - The document has been modified. + The document has been modified. Do you want to save your changes? - Этот документ был изменен. Вы хотите сохранить изменения? + Этот документ был изменен. Вы хотите сохранить изменения? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD macro (*.FCMacro);;Python (*.ру) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.ру) - Export PDF - Экспортировать PDF + Export PDF + Экспортировать PDF - PDF file (*.pdf) - Документ PDF (*.pdf) + PDF file (*.pdf) + Документ PDF (*.pdf) - untitled[*] - безымянный[*] + untitled[*] + безымянный[*] - - Editor - -Редактор + - Editor + -Редактор - %1 chars removed - %1 символов удалено + %1 chars removed + %1 символов удалено - %1 chars added - %1 символов добавлено + %1 chars added + %1 символов добавлено - Formatted - Форматированный + Formatted + Форматированный - - + + Gui::FileChooser - Select a file - Выберите файл + Select a file + Выберите файл - Select a directory - Выберите папку + Select a directory + Выберите папку - - + + Gui::FileDialog - Save as - Сохранить как + Save as + Сохранить как - Open - Открыть + Open + Открыть - - + + Gui::FileOptionsDialog - Extended - Расширенный + Extended + Расширенный - All files (*.*) - Все файлы (*.*) + All files (*.*) + Все файлы (*.*) - - + + Gui::Flag - Top left - Верхний левый + Top left + Верхний левый - Bottom left - Нижний левый + Bottom left + Нижний левый - Top right - Верхний правый + Top right + Верхний правый - Bottom right - Нижний правый + Bottom right + Нижний правый - Remove - Удалить + Remove + Удалить - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Нажмите клавишу CTRL и левую кнопку мыши + Press CTRL and left mouse button + Нажмите клавишу CTRL и левую кнопку мыши - Press middle mouse button - Нажмите среднюю кнопку мыши + Press middle mouse button + Нажмите среднюю кнопку мыши - Press left mouse button - Нажмите левую кнопку мыши + Press left mouse button + Нажмите левую кнопку мыши - Scroll middle mouse button - Прокрутите среднюю кнопку мыши + Scroll middle mouse button + Прокрутите среднюю кнопку мыши - - + + Gui::LocationDialog - Wrong direction - Неправильное направление + Wrong direction + Неправильное направление - Direction must not be the null vector - Направление не должно быть нулевым вектором + Direction must not be the null vector + Направление не должно быть нулевым вектором - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Пользовательские... + User defined... + Пользовательские... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Макрос + Macros + Макрос - - + + Gui::MainWindow - Dimension - Размер + Dimension + Размер - Ready - Готово + Ready + Готово - Toggles this toolbar - Переключение этой панели инструментов + Toggles this toolbar + Переключение этой панели инструментов - Toggles this dockable window - Переключить закрепляемое окно + Toggles this dockable window + Переключить закрепляемое окно - Close All - Закрыть все + Close All + Закрыть все - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Загрузка началась... + Загрузка началась... - - + + Gui::ProgressBar - Remaining: %1 - Осталось:%1 + Remaining: %1 + Осталось:%1 - Aborting - Прерывание + Aborting + Прерывание - Do you really want to abort the operation? - Вы действительно хотите прервать операцию? + Do you really want to abort the operation? + Вы действительно хотите прервать операцию? - - + + Gui::ProgressDialog - Remaining: %1 - Осталось:%1 + Remaining: %1 + Осталось:%1 - Aborting - Прерывание + Aborting + Прерывание - Do you really want to abort the operation? - Вы действительно хотите прервать операцию? + Do you really want to abort the operation? + Вы действительно хотите прервать операцию? - - + + Gui::PropertyEditor::PropertyModel - Property - Свойство + Property + Свойство - Value - Значение + Value + Значение - - + + Gui::PropertyView - View - Вид + View + Вид - Data - Данные + Data + Данные - - + + Gui::PythonConsole - System exit - Выход из системы + System exit + Выход из системы - The application is still running. + The application is still running. Do you want to exit without saving your data? - Приложение по-прежнему выполняеться. Вы хотите, выйти без сохранения ваших данных? + Приложение по-прежнему выполняеться. Вы хотите, выйти без сохранения ваших данных? - Python console - Консоль Python + Python console + Консоль Python - Unhandled PyCXX exception. - Необработанное исключение PyCXX. + Unhandled PyCXX exception. + Необработанное исключение PyCXX. - Unhandled FreeCAD exception. - Необработанное исключение FreeCAD. + Unhandled FreeCAD exception. + Необработанное исключение FreeCAD. - Unhandled unknown C++ exception. - Необработанное неизвестное исключение C++. + Unhandled unknown C++ exception. + Необработанное неизвестное исключение C++. - &Copy command - Команда копирования + &Copy command + Команда копирования - &Copy history - Скопировать историю + &Copy history + Скопировать историю - Save history as... - Сохранить историю как... + Save history as... + Сохранить историю как... - Insert file name... - Введите имя файла... + Insert file name... + Введите имя файла... - Save History - Сохранить историю + Save History + Сохранить историю - Macro Files (*.FCMacro *.py) - Макрос файлы (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Макрос файлы (*.FCMacro *.py) - Insert file name - Введите имя файла + Insert file name + Введите имя файла - All Files (*.*) - Все файлы (*.*) + All Files (*.*) + Все файлы (*.*) - Python Input Dialog - Диалоговое окно ввода Python + Python Input Dialog + Диалоговое окно ввода Python - Unhandled std C++ exception. - Необработанное исключение, std C++. + Unhandled std C++ exception. + Необработанное исключение, std C++. - Word wrap - Перенос слов + Word wrap + Перенос слов - &Copy - Копировать + &Copy + Копировать - &Paste - &Вставить + &Paste + &Вставить - Select All - Выбрать всё + Select All + Выбрать всё - - + + Clear console + + + + Gui::PythonEditor - Comment - Комментарий + Comment + Комментарий - Uncomment - Раскомментировать + Uncomment + Раскомментировать - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Очистить + Clear + Очистить - - + + Gui::RecentFilesAction - Open file %1 - Открыть файл %1 + Open file %1 + Открыть файл %1 - File not found - Файл не найден + File not found + Файл не найден - The file '%1' cannot be opened. - '%1' файл не может быть открыт. + The file '%1' cannot be opened. + '%1' файл не может быть открыт. - - + + Gui::SelectModule - Select module - Выбрать модуль + Select module + Выбрать модуль - Open %1 as - Открыть %1 как + Open %1 as + Открыть %1 как - Select - Выбрать + Select + Выбрать - - + + Gui::StdCmdDescription - Help - Справка + Help + Справка - Des&cription - Опи&сание + Des&cription + Опи&сание - Long description of commands - Подробное описание команд + Long description of commands + Подробное описание команд - - + + Gui::StdCmdDownloadOnlineHelp - Help - Справка + Help + Справка - Download online help - Загрузить интерактивную справку + Download online help + Загрузить интерактивную справку - Download %1's online help - Скачать %1 из онлайн справки + Download %1's online help + Скачать %1 из онлайн справки - Non-existing directory - Не существующий каталог + Non-existing directory + Не существующий каталог - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Каталог '%1' не существует. Вы хотите указать существующий каталог? + Каталог '%1' не существует. Вы хотите указать существующий каталог? - Missing permission - Отсутствует разрешение + Missing permission + Отсутствует разрешение - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - У вас нет прав на запись в '%1' + У вас нет прав на запись в '%1' Вы хотите указать другой каталог? - Stop downloading - Остановить загрузку + Stop downloading + Остановить загрузку - - + + Gui::StdCmdPythonHelp - Tools - Инструменты + Tools + Инструменты - Python Modules - Модули Python + Python Modules + Модули Python - Opens a browser to show the Python modules - Открыть браузер для просмотра модулей Python + Opens a browser to show the Python modules + Открыть браузер для просмотра модулей Python - - + + Gui::TaskBoxAngle - Angle - Угол + Angle + Угол - - + + Gui::TaskBoxPosition - Position - Положение + Position + Положение - - + + Gui::TaskView::TaskAppearance - Display mode: - Режим отображения: + Display mode: + Режим отображения: - Plot mode: - Режим вывода на печать: + Plot mode: + Режим вывода на печать: - Point size: - Размер точки: + Point size: + Размер точки: - Line width: - Толщина линии: + Line width: + Толщина линии: - Transparency: - Прозрачность: + Transparency: + Прозрачность: - Appearance - Представление + Appearance + Представление - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Редактировать + Edit + Редактировать - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Представление + Appearance + Представление - ... - ... + ... + ... - edit selection - изменить выбор + edit selection + изменить выбор - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Нажмите левую кнопку мыши + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Английский + English + Английский - - + + Gui::TreeDockWidget - Tree view - Древовидное представление + Tree view + Древовидное представление - - + + Gui::TreeWidget - Create group... - Создать группу... + Create group... + Создать группу... - Create a group - Создать группу + Create a group + Создать группу - Group - Группа + Group + Группа - Rename - Переименовать + Rename + Переименовать - Rename object - Переименовать объект + Rename object + Переименовать объект - Labels & Attributes - Метки и атрибуты + Labels & Attributes + Метки и атрибуты - Application - Приложение + Application + Приложение - Finish editing - Завершить редактирование + Finish editing + Завершить редактирование - Finish editing object - Завершить редактирование объекта + Finish editing object + Завершить редактирование объекта - Activate document - Активировать документ + Activate document + Активировать документ - Activate document %1 - Включить документ %1 + Activate document %1 + Включить документ %1 - - + + Gui::View3DInventor - Export PDF - Экспортировать PDF + Export PDF + Экспортировать PDF - PDF file (*.pdf) - Документ PDF (*.pdf) + PDF file (*.pdf) + Документ PDF (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Выберите верстак '%1' + Select the '%1' workbench + Выберите верстак '%1' - - + + Position - Form - Форма + Form + Форма - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 мм + 0.1 mm + 0,1 мм - 0.5 mm - 0,5 мм + 0.5 mm + 0,5 мм - 1 mm - 1 мм + 1 mm + 1 мм - 2 mm - 2 мм + 2 mm + 2 мм - 5 mm - 5 мм + 5 mm + 5 мм - 10 mm - 10 мм + 10 mm + 10 мм - 20 mm - 20 мм + 20 mm + 20 мм - 50 mm - 50 мм + 50 mm + 50 мм - 100 mm - 100 мм + 100 mm + 100 мм - 200 mm - 200 мм + 200 mm + 200 мм - 500 mm - 500 мм + 500 mm + 500 мм - 1 m - 1 м + 1 m + 1 м - 2 m - 2 м + 2 m + 2 м - 5 m - 5 м + 5 m + 5 м - Grid Snap in - Захват сетки в + Grid Snap in + Захват сетки в - - + + QDockWidget - Tree view - Древовидное представление + Tree view + Древовидное представление - Property view - Вид собственности + Property view + Вид собственности - Selection view - Выбор зрения + Selection view + Выбор зрения - Report view - Отчет + Report view + Отчет - Task View - Просмотр задач + Task View + Просмотр задач - Combo View - Комбинированный вид + Combo View + Комбинированный вид - Toolbox - Панель инструментов + Toolbox + Панель инструментов - Python console - Консоль Python + Python console + Консоль Python - Display properties - Отобразить свойства + Display properties + Отобразить свойства - - + + QObject - General - Основные + General + Основные - Display - Отобразить + Display + Отобразить - Unknown filetype - Неизвестный тип файла + Unknown filetype + Неизвестный тип файла - Cannot open unknown filetype: %1 - Не удается открыть неизвестный файл: %1 + Cannot open unknown filetype: %1 + Не удается открыть неизвестный файл: %1 - Cannot save to unknown filetype: %1 - Не удалось сохранить в неизвестном файле: %1 + Cannot save to unknown filetype: %1 + Не удалось сохранить в неизвестном файле: %1 - Workbench failure - Рабочее окружение отказало + Workbench failure + Рабочее окружение отказало - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Невозможно запустить QtAssistant(%1) + Unable to launch Qt Assistant (%1) + Невозможно запустить QtAssistant(%1) - Exception - Исключение + Exception + Исключение - Open document - Открыть документ + Open document + Открыть документ - Import file - Импорт файла + Import file + Импорт файла - Export file - Экспорт файла + Export file + Экспорт файла - Printing... - Печать... + Printing... + Печать... - Cannot load workbench - Не удается загрузить инструментарий + Cannot load workbench + Не удается загрузить инструментарий - A general error occurred while loading the workbench - Общая ошибка при загрузке инструментария + A general error occurred while loading the workbench + Общая ошибка при загрузке инструментария - File not found - Файл не найден + File not found + Файл не найден - Cannot open file %1 - Не удается открыть файл %1 + Cannot open file %1 + Не удается открыть файл %1 - Save views... - Сохранение видов... + Save views... + Сохранение видов... - Load views... - Загрузить виды... + Load views... + Загрузить виды... - Freeze view - Заморозить виды + Freeze view + Заморозить виды - Clear views - Очистить виды + Clear views + Очистить виды - Restore view &%1 - Восстановить вид &%1 + Restore view &%1 + Восстановить вид &%1 - Save frozen views - Сохранить замороженные виды + Save frozen views + Сохранить замороженные виды - Frozen views (*.cam) - Замороженные виды (*.cam) + Frozen views (*.cam) + Замороженные виды (*.cam) - Restore views - Восстановить просмотры + Restore views + Восстановить просмотры - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Восстановление видов очисит храняшиеся виды. + Восстановление видов очисит храняшиеся виды. Вы хотите продолжить? - Restore frozen views - Восстановить замороженный вид + Restore frozen views + Восстановить замороженный вид - Cannot open file '%1'. - Не удается открыть файл '%1'. + Cannot open file '%1'. + Не удается открыть файл '%1'. - Docked - Закрепленный + Docked + Закрепленный - Undocked - Открепить + Undocked + Открепить - Fullscreen - На весь экран + Fullscreen + На весь экран - files - файлы + files + файлы - Save picture - Сохранить изображение + Save picture + Сохранить изображение - New sub-group - Новая подгруппа + New sub-group + Новая подгруппа - Enter the name: - Введите имя: + Enter the name: + Введите имя: - New text item - Новый текстовый элемент + New text item + Новый текстовый элемент - Enter your text: - Введите текст: + Enter your text: + Введите текст: - New integer item - Новый целочисленный элемент + New integer item + Новый целочисленный элемент - Enter your number: - Введите номер: + Enter your number: + Введите номер: - New unsigned item - Новый беззнаковый элемент + New unsigned item + Новый беззнаковый элемент - New float item - Новый вещественный элемент + New float item + Новый вещественный элемент - New Boolean item - Новый логический элемент + New Boolean item + Новый логический элемент - Choose an item: - Выберите элемент: + Choose an item: + Выберите элемент: - Rename group - Переименовать группу + Rename group + Переименовать группу - The group '%1' cannot be renamed. - Группа '%1' не может быть переименована. + The group '%1' cannot be renamed. + Группа '%1' не может быть переименована. - Existing group - Существующая группа + Existing group + Существующая группа - The group '%1' already exists. - Группа '%1' уже существует. + The group '%1' already exists. + Группа '%1' уже существует. - Change value - Изменить значение + Change value + Изменить значение - Save document under new filename... - Сохранить документ под новым именем... + Save document under new filename... + Сохранить документ под новым именем... - Saving aborted - Сохранение прервано + Saving aborted + Сохранение прервано - Unsaved document - Документ несохранен + Unsaved document + Документ несохранен - Save document before close? - Сохранить документ перед закрытием? + Save document before close? + Сохранить документ перед закрытием? - Save Macro - Сохранить Макрос + Save Macro + Сохранить Макрос - Finish - Завершить + Finish + Завершить - Clear - Очистить + Clear + Очистить - Cancel - Отменить + Cancel + Отменить - Inner - Внутренний + Inner + Внутренний - Outer - Внешний + Outer + Внешний - No Browser - Нет браузера + No Browser + Нет браузера - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Не удается открыть браузер. Пожалуйста, откройте окно браузера и введите: http://localhost:%1. + Не удается открыть браузер. Пожалуйста, откройте окно браузера и введите: http://localhost:%1. - No Server - Нет сервера + No Server + Нет сервера - Unable to start the server to port %1: %2. - Не удается запустить сервер на порту %1: %2. + Unable to start the server to port %1: %2. + Не удается запустить сервер на порту %1: %2. - Unable to open your system browser. - Не удается открыть ваш системный браузере. + Unable to open your system browser. + Не удается открыть ваш системный браузере. - Options... - Параметры... + Options... + Параметры... - Out of memory - Недостаточно памяти + Out of memory + Недостаточно памяти - Not enough memory available to display the data. - Недостаточно памяти для отображения данных. + Not enough memory available to display the data. + Недостаточно памяти для отображения данных. - Cannot find file %1 - Не удалось найти файл '%1' + Cannot find file %1 + Не удалось найти файл '%1' - Cannot find file %1 neither in %2 nor in %3 - Не удается найти файл %1, ни в %2 ни в %3 + Cannot find file %1 neither in %2 nor in %3 + Не удается найти файл %1, ни в %2 ни в %3 - Save %1 Document - Сохранить документ %1 + Save %1 Document + Сохранить документ %1 - %1 document (*.FCStd) - документ %1 (*.FCStd) + %1 document (*.FCStd) + документ %1 (*.FCStd) - Save As - Сохранить как + Save As + Сохранить как - %1 already exists. + %1 already exists. Do you want to replace it? - %1 уже существует. Хотите заменить его? + %1 уже существует. Хотите заменить его? - Document not closable - Документ не закрываем + Document not closable + Документ не закрываем - The document is not closable for the moment. - Этот документ не закрываемый на данный момент. + The document is not closable for the moment. + Этот документ не закрываемый на данный момент. - No OpenGL - Нет OpenGL + No OpenGL + Нет OpenGL - This system does not support OpenGL - Эта система не поддерживает OpenGL + This system does not support OpenGL + Эта система не поддерживает OpenGL - Help - Справка + Help + Справка - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Не удается загрузить документацию. Чтобы загрузить это требуется Qt 4.4 или выше. + Не удается загрузить документацию. Чтобы загрузить это требуется Qt 4.4 или выше. - %1 Help - %1 Справка + %1 Help + %1 Справка - Exporting PDF... - Экспорт PDF... + Exporting PDF... + Экспорт PDF... - Wrong selection - Неправильный выбор + Wrong selection + Неправильный выбор - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Только один объект выбран. Пожалуйста, выберите два объекта. Будте уверены, что точка которую вы выбираете важна. + Только один объект выбран. Пожалуйста, выберите два объекта. Будте уверены, что точка которую вы выбираете важна. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Пожалуйста, выберите два объекта. Будте уверены, что точка которую вы выбираете важна. + Пожалуйста, выберите два объекта. Будте уверены, что точка которую вы выбираете важна. - New boolean item - Новый логический элемент + New boolean item + Новый логический элемент - Navigation styles - Стили навигации + Navigation styles + Стили навигации - %1 navigation - %1 навигация + %1 navigation + %1 навигация - Move annotation - Переместить заметку + Move annotation + Переместить заметку - Transform - Преобразовать + Transform + Преобразовать - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - Документ находится в режиме редактирования, и поэтому не может быть закрыт на данный момент. Вы либо должны закончить или отменить редактирование в панели задач. + Документ находится в режиме редактирования, и поэтому не может быть закрыт на данный момент. Вы либо должны закончить или отменить редактирование в панели задач. - - + + + StdBoxSelection + + Standard-View + Стандартный вид + + + Box selection + + + + StdCmdAbout - Help - Справка + Help + Справка - &About %1 - &О %1 + &About %1 + &О %1 - About %1 - О %1 + About %1 + О %1 - - + + StdCmdAboutQt - Help - Справка + Help + Справка - About &Qt - О &Qt + About &Qt + О &Qt - About Qt - О Qt + About Qt + О Qt - - + + StdCmdActivateNextWindow - Window - Окно + Window + Окно - Ne&xt - Сл&едующий + Ne&xt + Сл&едующий - Activate next window - Активировать следующее окно + Activate next window + Активировать следующее окно - - + + StdCmdActivatePrevWindow - Window - Окно + Window + Окно - Pre&vious - Пре&дыдущий + Pre&vious + Пре&дыдущий - Activate previous window - Активировать предыдущее окно + Activate previous window + Активировать предыдущее окно - - + + + StdCmdAlignment + + Edit + Редактировать + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Окно + Window + Окно - Arrange &Icons - Упорядочить &иконки + Arrange &Icons + Упорядочить &иконки - Arrange Icons - Упорядочить иконки + Arrange Icons + Упорядочить иконки - - + + StdCmdAxisCross - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Toggle axis cross - включить/выключить оси координат + Toggle axis cross + включить/выключить оси координат - - + + StdCmdCascadeWindows - Window - Окно + Window + Окно - &Cascade - & Каскад + &Cascade + & Каскад - Tile pragmatic - Прагматичная плитка + Tile pragmatic + Прагматичная плитка - - + + StdCmdCloseActiveWindow - Window - Окно + Window + Окно - Cl&ose - За&крыть + Cl&ose + За&крыть - Close active window - Закрыть активное окно + Close active window + Закрыть активное окно - - + + StdCmdCloseAllWindows - Window - Окно + Window + Окно - Close Al&l - Закрыть вс&ё + Close Al&l + Закрыть вс&ё - Close all windows - Закрыть все окна + Close all windows + Закрыть все окна - - + + StdCmdCommandLine - Tools - Инструменты + Tools + Инструменты - Start command &line... - Запустить командную &строку... + Start command &line... + Запустить командную &строку... - Opens the command line in the console - Открывает командную строку + Opens the command line in the console + Открывает командную строку - - + + StdCmdCopy - Edit - Редактировать + Edit + Редактировать - C&opy - Ко&пировать + C&opy + Ко&пировать - Copy operation - Операция копирования + Copy operation + Операция копирования - - + + StdCmdCut - Edit - Редактировать + Edit + Редактировать - &Cut - & Вырезать + &Cut + & Вырезать - Cut out - Вырезать + Cut out + Вырезать - - + + StdCmdDDuplicateSelection - Edit - Редактировать + Edit + Редактировать - Duplicate selection - Двойное выделение + Duplicate selection + Двойное выделение - Put duplicates of the selected objects to the active document - Вложить дубликаты выбранных объектов в активный документ + Put duplicates of the selected objects to the active document + Вложить дубликаты выбранных объектов в активный документ - - + + StdCmdDelete - Edit - Редактировать + Edit + Редактировать - &Delete - & Удалить + &Delete + & Удалить - Deletes the selected objects - Удаляет выбранные объекты + Deletes the selected objects + Удаляет выбранные объекты - - + + StdCmdDemoMode - Standard-View - Стандартный вид + Standard-View + Стандартный вид - View turntable... - Поворотный просмотр... + View turntable... + Поворотный просмотр... - View turntable - Поворотный просмотр + View turntable + Поворотный просмотр - - + + StdCmdDlgCustomize - Tools - Инструменты + Tools + Инструменты - Cu&stomize... - На&стройка... + Cu&stomize... + На&стройка... - Customize toolbars and command bars - Настройка панелей инструментов и панели команд + Customize toolbars and command bars + Настройка панелей инструментов и панели команд - - + + StdCmdDlgMacroExecute - Macros ... - Макрос... + Macros ... + Макрос... - Opens a dialog to let you execute a recorded macro - Открывает диалоговое окно, чтобы выполнить написанный макрос + Opens a dialog to let you execute a recorded macro + Открывает диалоговое окно, чтобы выполнить написанный макрос - Macro - Макро + Macro + Макро - - + + StdCmdDlgMacroExecuteDirect - Macro - Макро + Macro + Макро - Execute macro - Выполнить макрос + Execute macro + Выполнить макрос - Execute the macro in the editor - Выполнить макрос в редакторе + Execute the macro in the editor + Выполнить макрос в редакторе - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Запись макроса ... + &Macro recording ... + &Запись макроса ... - Opens a dialog to record a macro - Открывает диалоговое окно для записи макросов + Opens a dialog to record a macro + Открывает диалоговое окно для записи макросов - Macro - Макро + Macro + Макро - - + + StdCmdDlgParameter - Tools - Инструменты + Tools + Инструменты - E&dit parameters ... - &Параметры редактирования... + E&dit parameters ... + &Параметры редактирования... - Opens a Dialog to edit the parameters - Открывает диалоговое окно для изменения параметров + Opens a Dialog to edit the parameters + Открывает диалоговое окно для изменения параметров - - + + StdCmdDlgPreferences - Tools - Инструменты + Tools + Инструменты - &Preferences ... - &Настройки ... + &Preferences ... + &Настройки ... - Opens a Dialog to edit the preferences - Открывает диалоговое окно для изменения настроек + Opens a Dialog to edit the preferences + Открывает диалоговое окно для изменения настроек - - + + StdCmdDockViewMenu - View - Вид + View + Вид - Vie&ws - Ви&ды + Vie&ws + Ви&ды - Toggles this window - Переключите это окно + Toggles this window + Переключите это окно - - + + StdCmdDrawStyle - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Редактировать + + + Duplicate selection + Двойное выделение + + + Put duplicates of the selected objects to the active document + Вложить дубликаты выбранных объектов в активный документ + + + + StdCmdEdit + + Edit + Редактировать + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Файл + File + Файл - &Export... - & Экспорт... + &Export... + & Экспорт... - Export an object in the active document - Экспорт объекта в активный документ + Export an object in the active document + Экспорт объекта в активный документ - Supported formats - Поддерживаемые форматы + Supported formats + Поддерживаемые форматы - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Инструменты + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Файл + File + Файл - &Recompute - &Пересчитать + &Recompute + &Пересчитать - Recompute feature or document - Пересчитать функцию или документ + Recompute feature or document + Пересчитать функцию или документ - - + + StdCmdFreeCADWebsite - Help - Справка + Help + Справка - FreeCAD Website - Сайт FreeCAD + FreeCAD Website + Сайт FreeCAD - The FreeCAD website - Web-сайт FreeCAD + The FreeCAD website + Web-сайт FreeCAD - - + + StdCmdFreezeViews - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Freeze display - Заморозить экран + Freeze display + Заморозить экран - Freezes the current view position - Замораживает текущую позицию просмотра + Freezes the current view position + Замораживает текущую позицию просмотра - - + + StdCmdHideObjects - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Hide all objects - Скрыть все объекты + Hide all objects + Скрыть все объекты - Hide all objects in the document - Скрыть все объекты в документе + Hide all objects in the document + Скрыть все объекты в документе - - + + StdCmdHideSelection - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Hide selection - Скрыть выделение + Hide selection + Скрыть выделение - Hide all selected objects - Скрыть все выбранные объекты + Hide all selected objects + Скрыть все выбранные объекты - - + + StdCmdImport - File - Файл + File + Файл - &Import... - & Импорт... + &Import... + & Импорт... - Import a file in the active document - Импорт файла в активный документ + Import a file in the active document + Импорт файла в активный документ - Supported formats - Поддерживаемые форматы + Supported formats + Поддерживаемые форматы - All files (*.*) - Все файлы (*.*) + All files (*.*) + Все файлы (*.*) - - + + StdCmdMacroStartDebug - Macro - Макро + Macro + Макро - Debug macro - Отладка макросов + Debug macro + Отладка макросов - Start debugging of macro - Начать отладку макроса + Start debugging of macro + Начать отладку макроса - - + + StdCmdMacroStepOver - Macro - Макро + Macro + Макро - Step over - За шаг + Step over + За шаг - - + + StdCmdMacroStopDebug - Macro - Макро + Macro + Макро - Stop debugging - Остановить отладку + Stop debugging + Остановить отладку - Stop debugging of macro - Остановить отладку макроса + Stop debugging of macro + Остановить отладку макроса - - + + StdCmdMacroStopRecord - Macro - Макро + Macro + Макро - S&top macro recording - О&становить запись макроса + S&top macro recording + О&становить запись макроса - Stop the macro recording session - Остановить сессию записи макроса + Stop the macro recording session + Остановить сессию записи макроса - - + + StdCmdMeasureDistance - View - Вид + View + Вид - Measure distance - Измерить расстояние + Measure distance + Измерить расстояние - - + + StdCmdMeasurementSimple - Tools - Инструменты + Tools + Инструменты - Mesure distance - Измерить дистанцию + Mesure distance + Измерить дистанцию - Measures distance between two selected objects - Измерить дистанцию между двумя выбранными обьектами + Measures distance between two selected objects + Измерить дистанцию между двумя выбранными обьектами - - + + Measure distance + Измерить расстояние + + + StdCmdMergeProjects - File - Файл + File + Файл - Merge project... - Объединить проект... + Merge project... + Объединить проект... - Merge project - Объединить проект + Merge project + Объединить проект - %1 document (*.fcstd) - %1 документ (*.fcstd) + %1 document (*.fcstd) + %1 документ (*.fcstd) - Cannot merge project with itself. - Нельзя объединить проект с самим собой. + Cannot merge project with itself. + Нельзя объединить проект с самим собой. - - + + StdCmdNew - File - Файл + File + Файл - &New - &Новый + &New + &Новый - Create a new empty document - Создайте новый пустой документ + Create a new empty document + Создайте новый пустой документ - - + + StdCmdOnlineHelp - Help - Справка + Help + Справка - Show help to the application - Показать справку для приложения + Show help to the application + Показать справку для приложения - - + + StdCmdOnlineHelpPython - Help - Справка + Help + Справка - Python Manuals - Руководство Python + Python Manuals + Руководство Python - Show the Python documentation - Показать документацию Python + Show the Python documentation + Показать документацию Python - - + + StdCmdOnlineHelpWebsite - Help - Справка + Help + Справка - Help Website - Веб-Помощь + Help Website + Веб-Помощь - The website where the help is maintained - Веб-сайт, где поддерживается помощь + The website where the help is maintained + Веб-сайт, где поддерживается помощь - - + + StdCmdOpen - File - Файл + File + Файл - &Open... - &Открыть... + &Open... + &Открыть... - Open a document or import files - Открыть документ или импортировать файлы + Open a document or import files + Открыть документ или импортировать файлы - Supported formats - Поддерживаемые форматы + Supported formats + Поддерживаемые форматы - All files (*.*) - Все файлы (*.*) + All files (*.*) + Все файлы (*.*) - - + + StdCmdPaste - Edit - Редактировать + Edit + Редактировать - &Paste - &Вставить + &Paste + &Вставить - Paste operation - Операция вставки + Paste operation + Операция вставки - - + + StdCmdPlacement - Edit - Редактировать + Edit + Редактировать - Placement... - Расположение... + Placement... + Расположение... - Place the selected objects - Поместить выделенные объекты + Place the selected objects + Поместить выделенные объекты - - + + StdCmdPrint - File - Файл + File + Файл - &Print... - &Печать... + &Print... + &Печать... - Print the document - Печать документа + Print the document + Печать документа - - + + StdCmdPrintPdf - File - Файл + File + Файл - &Export PDF... - & Экспорт PDF... + &Export PDF... + & Экспорт PDF... - Export the document as PDF - Экспорт документа в формат PDF + Export the document as PDF + Экспорт документа в формат PDF - - + + StdCmdPrintPreview - File - Файл + File + Файл - &Print preview... - &Предварительный просмотр... + &Print preview... + &Предварительный просмотр... - Print the document - Печать документа + Print the document + Печать документа - Print preview - Предварительный просмотр + Print preview + Предварительный просмотр - - + + StdCmdProjectInfo - File - Файл + File + Файл - Project i&nformation... - Информация о про&екте... + Project i&nformation... + Информация о про&екте... - Show details of the currently active project - Показать детали в текущего активного проекта + Show details of the currently active project + Показать детали в текущего активного проекта - - + + StdCmdProjectUtil - Tools - Инструменты + Tools + Инструменты - Project utility... - Утилита проекта... + Project utility... + Утилита проекта... - Utility to extract or create project files - Утилита для извлечения или создания файлов проекта + Utility to extract or create project files + Утилита для извлечения или создания файлов проекта - - + + StdCmdPythonWebsite - Help - Справка + Help + Справка - Python Website - Сайт Python + Python Website + Сайт Python - The official Python website - Официальный сайт Python + The official Python website + Официальный сайт Python - - + + StdCmdQuit - File - Файл + File + Файл - E&xit - В&ыход + E&xit + В&ыход - Quits the application - Выйти из приложения + Quits the application + Выйти из приложения - - + + StdCmdRandomColor - File - Файл + File + Файл - Random color - Случайный цвет + Random color + Случайный цвет - - + + StdCmdRecentFiles - File - Файл + File + Файл - Recent files - Последние файлы + Recent files + Последние файлы - Recent file list - Список последних файлов + Recent file list + Список последних файлов - - + + StdCmdRedo - Edit - Редактировать + Edit + Редактировать - &Redo - &Повторить + &Redo + &Повторить - Redoes a previously undone action - Повторить последнее отмененное действие + Redoes a previously undone action + Повторить последнее отмененное действие - - + + StdCmdRefresh - Edit - Редактировать + Edit + Редактировать - &Refresh - &Обновить + &Refresh + &Обновить - Recomputes the current active document - Пересчитывает текущий документ + Recomputes the current active document + Пересчитывает текущий документ - - + + StdCmdSave - File - Файл + File + Файл - &Save - &Сохранить + &Save + &Сохранить - Save the active document - Сохранить активный документ + Save the active document + Сохранить активный документ - - + + StdCmdSaveAs - File - Файл + File + Файл - Save &As... - Сохранить &как... + Save &As... + Сохранить &как... - Save the active document under a new file name - Сохранить текущий документ под новым именем + Save the active document under a new file name + Сохранить текущий документ под новым именем - - + + StdCmdSceneInspector - Tools - Инструменты + Tools + Инструменты - Scene inspector... - Инспектор сцены... + Scene inspector... + Инспектор сцены... - Scene inspector - Инспектор сцены + Scene inspector + Инспектор сцены - - + + StdCmdSelectAll - Edit - Редактировать + Edit + Редактировать - Select &All - Выбрать &всё + Select &All + Выбрать &всё - Select all - Выделить все + Select all + Выделить все - - + + StdCmdSetAppearance - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Appearance... - Внешний вид ... + Appearance... + Внешний вид ... - Sets the display properties of the selected object - Устанавливает свойства отображения выбранного объекта + Sets the display properties of the selected object + Устанавливает свойства отображения выбранного объекта - - + + StdCmdShowObjects - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Show all objects - Показать все объекты + Show all objects + Показать все объекты - Show all objects in the document - Показать все объекты в документе + Show all objects in the document + Показать все объекты в документе - - + + StdCmdShowSelection - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Show selection - Показывать выделение + Show selection + Показывать выделение - Show all selected objects - Показать все выделенные объекты + Show all selected objects + Показать все выделенные объекты - - + + StdCmdStatusBar - View - Вид + View + Вид - Status bar - Строка состояния + Status bar + Строка состояния - Toggles the status bar - Включает или выключает строку состояния + Toggles the status bar + Включает или выключает строку состояния - - + + StdCmdTextureMapping - Tools - Инструменты + Tools + Инструменты - Texture mapping... - Текстуры... + Texture mapping... + Текстуры... - Texture mapping - Текстуры + Texture mapping + Текстуры - - + + StdCmdTileWindows - Window - Окно + Window + Окно - &Tile - &Заголовок + &Tile + &Заголовок - Tile the windows - Расположить рядом окна + Tile the windows + Расположить рядом окна - - + + StdCmdToggleBreakpoint - Macro - Макро + Macro + Макро - Toggle breakpoint - Установить/снять точку останова + Toggle breakpoint + Установить/снять точку останова - - + + StdCmdToggleClipPlane - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Clipping plane - Показать плоскости + Clipping plane + Показать плоскости - Toggles clipping plane for active view - Переключает плоскости для активного просмотра + Toggles clipping plane for active view + Переключает плоскости для активного просмотра - - + + StdCmdToggleNavigation - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Toggle navigation/Edit mode - Переключить режим навигации / редактирования + Toggle navigation/Edit mode + Переключить режим навигации / редактирования - Toggle between navigation and edit mode - Переключение между режимом навигации и редактирования + Toggle between navigation and edit mode + Переключение между режимом навигации и редактирования - - + + StdCmdToggleObjects - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Toggle all objects - Переключить все объекты + Toggle all objects + Переключить все объекты - Toggles visibility of all objects in the active document - Переключает видимость всех объектов в активном документе + Toggles visibility of all objects in the active document + Переключает видимость всех объектов в активном документе - - + + StdCmdToggleSelectability - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Toggle selectability - Переключить возможность выбора + Toggle selectability + Переключить возможность выбора - Toggles the property of the objects to get selected in the 3D-View - Переключает свойство выбранных объектов в 3D-режим + Toggles the property of the objects to get selected in the 3D-View + Переключает свойство выбранных объектов в 3D-режим - - + + StdCmdToggleVisibility - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Toggle visibility - Переключить видимость + Toggle visibility + Переключить видимость - Toggles visibility - Переключает видимость + Toggles visibility + Переключает видимость - - + + StdCmdToolBarMenu - View - Вид + View + Вид - Tool&bars - Инстру&менты + Tool&bars + Инстру&менты - Toggles this window - Переключите это окно + Toggles this window + Переключите это окно - - + + StdCmdTransform - Edit - Редактировать + Edit + Редактировать - Transform... - Преобразовать... + Transform... + Преобразовать... - Transform the geometry of selected objects - Преобразование геометрии выделенных объектов + Transform the geometry of selected objects + Преобразование геометрии выделенных объектов - - + + StdCmdTreeSelection - View - Вид + View + Вид - Go to selection - Перейти к выделенному + Go to selection + Перейти к выделенному - Scroll to first selected item - Прокрутите до первого выбранного элемента + Scroll to first selected item + Прокрутите до первого выбранного элемента - - + + StdCmdUndo - Edit - Редактировать + Edit + Редактировать - &Undo - &Отменить + &Undo + &Отменить - Undo exactly one action - Отменить ровно одно действие + Undo exactly one action + Отменить ровно одно действие - - + + StdCmdUserInterface - View - Вид + View + Вид - Dock views - Заморозить вид + Dock views + Заморозить вид - Dock all top-level views - Закрепить все виды верхнего уровня + Dock all top-level views + Закрепить все виды верхнего уровня - - + + StdCmdViewAxo - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Axometric - Axometric + Axometric + Axometric - Set to axometric view - Установить вид в axometric + Set to axometric view + Установить вид в axometric - - + + StdCmdViewBottom - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Bottom - Дно + Bottom + Дно - Set to bottom view - Установить вид снизу + Set to bottom view + Установить вид снизу - - + + StdCmdViewCreate - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Create new view - Cоздать новый вид + Create new view + Cоздать новый вид - Creates a new view window for the active document - Создать новое окно просмотра для активного документа + Creates a new view window for the active document + Создать новое окно просмотра для активного документа - - + + StdCmdViewExample1 - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Inventor example #1 - Создать пример #1 + Inventor example #1 + Создать пример #1 - Shows a 3D texture with manipulator - Показывает 3D текстуры с манипулятором + Shows a 3D texture with manipulator + Показывает 3D текстуры с манипулятором - - + + StdCmdViewExample2 - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Inventor example #2 - Создать пример #1 + Inventor example #2 + Создать пример #1 - Shows spheres and drag-lights - Показывает сферы и перетаскивающиеся огни + Shows spheres and drag-lights + Показывает сферы и перетаскивающиеся огни - - + + StdCmdViewExample3 - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Inventor example #3 - Создать пример #3 + Inventor example #3 + Создать пример #3 - Shows a animated texture - Показывает анимированные текстуры + Shows a animated texture + Показывает анимированные текстуры - - + + StdCmdViewFitAll - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Fit all - Заполнить всё + Fit all + Заполнить всё - Fits the whole content on the screen - Устанавливается все содержимое на экране + Fits the whole content on the screen + Устанавливается все содержимое на экране - - + + StdCmdViewFitSelection - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Fit selection - Заполнить выделенное + Fit selection + Заполнить выделенное - Fits the selected content on the screen - Устанавливается выбранное содержимое на экране + Fits the selected content on the screen + Устанавливается выбранное содержимое на экране - - + + StdCmdViewFront - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Front - Спереди + Front + Спереди - Set to front view - Задать вид спереди + Set to front view + Задать вид спереди - - + + StdCmdViewIvIssueCamPos - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Issue camera position - Выделение позиции камеры + Issue camera position + Выделение позиции камеры - Issue the camera position to the console and to a macro, to easily recall this position - Выделение положения камеры на консоль и макрос для легкого воспроизведения позиции + Issue the camera position to the console and to a macro, to easily recall this position + Выделение положения камеры на консоль и макрос для легкого воспроизведения позиции - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Stereo Interleaved Columns - Стерео чередование столбцов + Stereo Interleaved Columns + Стерео чередование столбцов - Switch stereo viewing to Interleaved Columns - Переключить стерео просмотр в чередующиеся столбцы + Switch stereo viewing to Interleaved Columns + Переключить стерео просмотр в чередующиеся столбцы - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Stereo Interleaved Rows - Стерео с чередованием строк + Stereo Interleaved Rows + Стерео с чередованием строк - Switch stereo viewing to Interleaved Rows - Переключить стерео в упорядоченные строки + Switch stereo viewing to Interleaved Rows + Переключить стерео в упорядоченные строки - - + + StdCmdViewIvStereoOff - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Stereo Off - Выключить стерео + Stereo Off + Выключить стерео - Switch stereo viewing off - Выключить стерео показ + Switch stereo viewing off + Выключить стерео показ - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Stereo quad buffer - Стерео квадро-буфер + Stereo quad buffer + Стерео квадро-буфер - Switch stereo viewing to quad buffer - Переключить стерео просмотр в квадро-буфер + Switch stereo viewing to quad buffer + Переключить стерео просмотр в квадро-буфер - - + + StdCmdViewIvStereoRedGreen - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Stereo red/green - Стерео красный / зеленый + Stereo red/green + Стерео красный / зеленый - Switch stereo viewing to red/green - Переключить стерео просмотр на красный / зеленый + Switch stereo viewing to red/green + Переключить стерео просмотр на красный / зеленый - - + + StdCmdViewLeft - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Left - Слева + Left + Слева - Set to left view - Установить вид слева + Set to left view + Установить вид слева - - + + StdCmdViewRear - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Rear - Сзади + Rear + Сзади - Set to rear view - Установить вид сзади + Set to rear view + Установить вид сзади - - + + StdCmdViewRight - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Right - Право + Right + Право - Set to right view - Установить вид справа + Set to right view + Установить вид справа - - + + + StdCmdViewRotateLeft + + Standard-View + Стандартный вид + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Стандартный вид + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Top - Вверх + Top + Вверх - Set to top view - Установить вид сверху + Set to top view + Установить вид сверху - - + + StdCmdWhatsThis - Help - Справка + Help + Справка - &What's This? - &Что это? + &What's This? + &Что это? - What's This - Что это + What's This + Что это - - + + StdCmdWindows - Window - Окно + Window + Окно - &Windows... - &Окна... + &Windows... + &Окна... - Windows list - Список окон + Windows list + Список окон - - + + StdCmdWindowsMenu - Window - Окно + Window + Окно - Activates this window - Активировать это окно + Activates this window + Активировать это окно - - + + StdCmdWorkbench - View - Вид + View + Вид - Workbench - Рабочий стол + Workbench + Рабочий стол - Switch between workbenches - Переключение между рабочими столами + Switch between workbenches + Переключение между рабочими столами - - + + StdOrthographicCamera - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Orthographic view - Ортогональный вид + Orthographic view + Ортогональный вид - Switches to orthographic view mode - Переключение в ортогональный режим + Switches to orthographic view mode + Переключение в ортогональный режим - - + + StdPerspectiveCamera - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Perspective view - Перспективный вид + Perspective view + Перспективный вид - Switches to perspective view mode - Переключение в перспективный просмотр + Switches to perspective view mode + Переключение в перспективный просмотр - - + + StdViewBoxZoom - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Box zoom - Масштаб поля + Box zoom + Масштаб поля - - + + StdViewDockUndockFullscreen - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Document window - окно документа + Document window + окно документа - Display the active view either in fullscreen, in undocked or docked mode - Отображать активный вид в полноэкранном, закрепленном или не закрепленном режиме + Display the active view either in fullscreen, in undocked or docked mode + Отображать активный вид в полноэкранном, закрепленном или не закрепленном режиме - - + + StdViewScreenShot - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Save picture... - Сохранить изображение ... + Save picture... + Сохранить изображение ... - Creates a screenshot of the active view - Создает скриншот активного просмотра + Creates a screenshot of the active view + Создает скриншот активного просмотра - - + + StdViewZoomIn - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Zoom In - Увеличить + Zoom In + Увеличить - - + + StdViewZoomOut - Standard-View - Стандартный вид + Standard-View + Стандартный вид - Zoom Out - Уменьшить + Zoom Out + Уменьшить - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Файл + &File + &Файл - &Edit - &Правка + &Edit + &Правка - Standard views - Стандартные виды + Standard views + Стандартные виды - &Stereo - &Стерео + &Stereo + &Стерео - &Zoom - Масштаб + &Zoom + Масштаб - Visibility - Видимость + Visibility + Видимость - &View - &Вид + &View + &Вид - &Tools - Инструменты + &Tools + Инструменты - &Macro - Макро + &Macro + Макро - &Windows - Окна + &Windows + Окна - &On-line help - Помощь онлайн + &On-line help + Помощь онлайн - &Help - &Справка + &Help + &Справка - File - Файл + File + Файл - Macro - Макро + Macro + Макро - View - Вид + View + Вид - Special Ops - Специальные операции + Special Ops + Специальные операции - - + + testClass - test - тест + test + тест - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Выберите стиль панели задач + Choose the style of the Task Panel + Выберите стиль панели задач - Default - По умолчанию + Default + По умолчанию - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_se.ts b/src/Gui/Language/FreeCAD_se.ts index 9b777ffac..424413e1e 100644 --- a/src/Gui/Language/FreeCAD_se.ts +++ b/src/Gui/Language/FreeCAD_se.ts @@ -1,5495 +1,5913 @@ - - + + Angle - Form - Form + Form + Form - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Vinkel Snäpp + Angle Snap + Vinkel Snäpp - - 1 ° - + + 1 ° + - - 2 ° - + + 2 ° + - - 5 ° - + + 5 ° + - - 10 ° - 10° + + 10 ° + 10° - - 20 ° - 20° + + 20 ° + 20° - - 45 ° - 45° + + 45 ° + 45° - - 90 ° - 90° + + 90 ° + 90° - - 180 ° - 180° + + 180 ° + 180° - - + + Gui::AccelLineEdit - none - inget + none + inget - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Lägg till + + + Remove + Ta bort + + + Move up + Flytta upp + + + Move down + Flytta ned + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Tryck på vänster musknapp + Press left mouse button + Tryck på vänster musknapp - Press SHIFT and middle mouse button - Tryck på SKIFT och mellersta musknappen + Press SHIFT and middle mouse button + Tryck på SKIFT och mellersta musknappen - Press middle mouse button - Tryck på mittre musknapp + Press middle mouse button + Tryck på mittre musknapp - Scroll middle mouse button - Bläddra mittre musknapp + Scroll middle mouse button + Bläddra mittre musknapp - - + + Gui::CADNavigationStyle - Press left mouse button - Tryck på vänster musknapp + Press left mouse button + Tryck på vänster musknapp - Press middle mouse button - Tryck på mittre musknapp + Press middle mouse button + Tryck på mittre musknapp - Press left and middle mouse button - Tryck på vänster och mittre musknapp + Press left and middle mouse button + Tryck på vänster och mittre musknapp - Scroll middle mouse button - Bläddra mittre musknapp + Scroll middle mouse button + Bläddra mittre musknapp - - + + Gui::Command - Standard - Standard + Standard + Standard - - + + Gui::ContainerDialog - &OK - &Ok + &OK + &Ok - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + Gui::ControlSingleton - Task panel - Uppgiftspanel + Task panel + Uppgiftspanel - - + + Gui::Dialog::AboutApplication - About - Om + About + Om - Revision number - Revisionsnummer + Revision number + Revisionsnummer - Version - Version + Version + Version - OK - OK + OK + OK - - + + - Release date - Utgivningsdatum + Release date + Utgivningsdatum - Platform - Plattform + Platform + Plattform - License... - Licens ... + License... + Licens ... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Knapp %1 + Button %1 + Knapp %1 - Out Of Range - Utanför område + Out Of Range + Utanför område - - + + Gui::Dialog::CommandModel - Commands - Kommandon + Commands + Kommandon - - + + Gui::Dialog::DemoMode - View Turntable - Visa vridbord + View Turntable + Visa vridbord - Speed - Hastighet + Speed + Hastighet - Maximum - Maximum + Maximum + Maximum - Minimum - Minimum + Minimum + Minimum - Fullscreen - Fullskärm + Fullscreen + Fullskärm - Enable timer - Aktivera timer + Enable timer + Aktivera timer - s - s + s + s - Angle - Vinkel + Angle + Vinkel + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Spela upp - -90° - -90° + Stop + Stopp - Play - Spela upp + Close + Stäng - - Stop - Stopp - - - Close - Stäng - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Välj fönster + Choose Window + Välj fönster - &Activate - &Aktivera + &Activate + &Aktivera - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Fönster + Windows + Fönster - - + + Gui::Dialog::DlgAuthorization - Authorization - Auktorisering + Authorization + Auktorisering - &OK - &Ok + &OK + &Ok - &Cancel - &Avbryt + &Cancel + &Avbryt - Password: - Lösenord: + Password: + Lösenord: - User name: - Användarnamn: + User name: + Användarnamn: - - + + - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Välj ikon + Choose Icon + Välj ikon - OK - OK + OK + OK - Cancel - Avbryt + Cancel + Avbryt - Add icons... - Lägg till ikoner ... + Add icons... + Lägg till ikoner ... - - + + Gui::Dialog::DlgCustomActions - Macros - Makron + Macros + Makron - Setup Custom Macros - Inställningar för anpassade makron + Setup Custom Macros + Inställningar för anpassade makron - Macro: - Makro: + Macro: + Makro: - ... - ... + ... + ... - Pixmap - Pixelkarta + Pixmap + Pixelkarta - Accelerator: - Snabbtangent: + Accelerator: + Snabbtangent: - What's this: - Förklaring: + What's this: + Förklaring: - Status text: - Statustext: + Status text: + Statustext: - Tool tip: - Verktygstips: + Tool tip: + Verktygstips: - Menu text: - Menytext: + Menu text: + Menytext: - Add - Lägg till + Add + Lägg till - Remove - Ta bort + Remove + Ta bort - Replace - Ersätt + Replace + Ersätt - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Ikoner + Icons + Ikoner - Macros - Makron + Macros + Makron - No macro - Inget makro + No macro + Inget makro - No macros found. - Inga makron funna. + No macros found. + Inga makron funna. - Macro not found - Makro ej funnet + Macro not found + Makro ej funnet - Sorry, couldn't find macro file '%1'. - Ledsen, kunde inte hitta makrofil '%1'. + Sorry, couldn't find macro file '%1'. + Ledsen, kunde inte hitta makrofil '%1'. - Empty macro - Tomt makro + Empty macro + Tomt makro - Please specify the macro first. - Specificera makrot först. + Please specify the macro first. + Specificera makrot först. - Empty text - Tom text + Empty text + Tom text - Please specify the menu text first. - Specificera menytexten först. + Please specify the menu text first. + Specificera menytexten först. - No item selected - Ingen sak vald + No item selected + Ingen sak vald - Please select a macro item first. - Välj ett makro först. + Please select a macro item first. + Välj ett makro först. - - + + Gui::Dialog::DlgCustomCommands - Commands - Kommandon + Commands + Kommandon - - + + - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Kategori + Category + Kategori - Icon - Ikon + Icon + Ikon - Command - Kommando + Command + Kommando - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Tangentbord + Keyboard + Tangentbord - Description: - Beskrivning: + Description: + Beskrivning: - &Category: - &Kategori: + &Category: + &Kategori: - C&ommands: - K&ommandon: + C&ommands: + K&ommandon: - Current shortcut: - Nuvarande genväg: + Current shortcut: + Nuvarande genväg: - Press &new shortcut: - Tryck på &ny genväg: + Press &new shortcut: + Tryck på &ny genväg: - Currently assigned to: - För närvarande tilldelat till: + Currently assigned to: + För närvarande tilldelat till: - &Assign - &Tilldela + &Assign + &Tilldela - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Återställ + &Reset + &Återställ - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Åte&rställ allt + Re&set All + Åte&rställ allt - Alt+S - Alt+S + Alt+S + Alt+S - - + + - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Ikon + Icon + Ikon - Command - Kommando + Command + Kommando - none - inget + none + inget - Multiple defined shortcut - multipel definierad genväg + Multiple defined shortcut + multipel definierad genväg - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Genvägen '%1' är definierad mer än en gång. Detta kan leda till oväntat beteende. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Genvägen '%1' är definierad mer än en gång. Detta kan leda till oväntat beteende. - Already defined shortcut - Genvägen är redan definierad + Already defined shortcut + Genvägen är redan definierad - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Genvägen '%1' är redan tilldelad '%2'. + Genvägen '%1' är redan tilldelad '%2'. Definiera en annan genväg. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Verktygslådor + Toolbox bars + Verktygslådor - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Verktygslådor + Toolbars + Verktygslådor - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> Ändringarna blir aktiva nästa gång du laddar passande arbetsbänk</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> Ändringarna blir aktiva nästa gång du laddar passande arbetsbänk</p></body></html> - Move right - Flytta till höger + Move right + Flytta till höger - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Flytta den valda saken en nivå ned.</b><p>Detta kommer även att ändra nivån på sakens förälder.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Flytta den valda saken en nivå ned.</b><p>Detta kommer även att ändra nivån på sakens förälder.</p> - Move left - Flytta till vänster + Move left + Flytta till vänster - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Flytta den valda saken en nivå upp.</b><p>Detta kommer även att ändra nivån på sakens förälder.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Flytta den valda saken en nivå upp.</b><p>Detta kommer även att ändra nivån på sakens förälder.</p> - Move down - Flytta ned + Move down + Flytta ned - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytta ned den valda saken.</b><p>Saken kommer att flyttas inom hierarki nivån.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytta ned den valda saken.</b><p>Saken kommer att flyttas inom hierarki nivån.</p> - Move up - Flytta upp + Move up + Flytta upp - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytta upp den valda saken.</b><p>Saken kommer att flyttas inom hierarki nivån.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytta upp den valda saken.</b><p>Saken kommer att flyttas inom hierarki nivån.</p> - New... - Ny... + New... + Ny... - Rename... - Döp om... + Rename... + Döp om... - Delete - Radera + Delete + Radera - Icon - Ikon + Icon + Ikon - Command - Kommando + Command + Kommando - <Separator> - <Separator> + <Separator> + <Separator> - New toolbar - Ny verktygsrad + New toolbar + Ny verktygsrad - Toolbar name: - Namn på verktygsraden: + Toolbar name: + Namn på verktygsraden: - Duplicated name - Duplicerat namn + Duplicated name + Duplicerat namn - The toolbar name '%1' is already used - Verktygsradens namn '%1' används redan + The toolbar name '%1' is already used + Verktygsradens namn '%1' används redan - Rename toolbar - Döp om verktygsraden + Rename toolbar + Döp om verktygsraden - - + + - - + + Gui::Dialog::DlgCustomizeImp - Customize - Anpassa + Customize + Anpassa - &Help - &Hjälp + &Help + &Hjälp - &Close - &Stäng + &Close + &Stäng - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - Ingen spaceball finns + No Spaceball Present + Ingen spaceball finns - Buttons - Knappar + Buttons + Knappar - Clear - Rensa + Clear + Rensa - Print Reference - Utskriftsreferens + Print Reference + Utskriftsreferens - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Fönsteregenskaper + Display properties + Fönsteregenskaper - Display - Fönster + Display + Fönster - Transparency: - Transparens: + Transparency: + Transparens: - Line width: - Linjebredd: + Line width: + Linjebredd: - Point size: - Punktstorlek: + Point size: + Punktstorlek: - Material - Material + Material + Material - ... - ... + ... + ... - Close - Stäng + Close + Stäng - Viewing mode - Visningsläge + Viewing mode + Visningsläge - Display mode: - Visningsläge: + Display mode: + Visningsläge: - Plot mode: - Plottningsläge: + Plot mode: + Plottningsläge: - - + + - Line transparency: - Linjegenomskinlighet: + Line transparency: + Linjegenomskinlighet: - Line color: - linjefärg: + Line color: + linjefärg: - Shape color: - Form färg: + Shape color: + Form färg: - Color plot: - Färgplottning: + Color plot: + Färgplottning: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Redigerare + Editor + Redigerare - Options - Alternativ + Options + Alternativ - Enable line numbers - Aktivera radnummer + Enable line numbers + Aktivera radnummer - Enable folding - Aktivera vikning + Enable folding + Aktivera vikning - Indentation - Indrag + Indentation + Indrag - Insert spaces - Sätt in mellanslag + Insert spaces + Sätt in mellanslag - Tab size: - Tabulatorstorlek: + Tab size: + Tabulatorstorlek: - Indent size: - Storlek på indrag: + Indent size: + Storlek på indrag: - Keep tabs - Behåll tabulatorer + Keep tabs + Behåll tabulatorer - Display Items - Visa saker + Display Items + Visa saker - Family: - Familj: + Family: + Familj: - Size: - Storlek: + Size: + Storlek: - Preview: - Förhandsgranskning: + Preview: + Förhandsgranskning: - - + + - - + + Gui::Dialog::DlgGeneral - General - Allmänt + General + Allmänt - Start up - Uppstart + Start up + Uppstart - Enable splash screen at start up - Aktivera splashfönster vid uppstart + Enable splash screen at start up + Aktivera splashfönster vid uppstart - Switch to tab of report window: - Växla till rapportfönstrets tabb: + Switch to tab of report window: + Växla till rapportfönstrets tabb: - Auto load module after start up: - Autoladda modul efter uppstart: + Auto load module after start up: + Autoladda modul efter uppstart: - Language - Språk + Language + Språk - Change language: - Ändra språk: + Change language: + Ändra språk: - Main window - Huvudfönster + Main window + Huvudfönster - Size of recent file list - Storlek på listan för senast öppnade filer + Size of recent file list + Storlek på listan för senast öppnade filer - Window style: - Fönsterstil: + Window style: + Fönsterstil: - Size of toolbar icons: - Storlek på verktygsfältsikonerna: + Size of toolbar icons: + Storlek på verktygsfältsikonerna: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Standard (%1 x %1) + Default (%1 x %1) + Standard (%1 x %1) - Small (%1 x %1) - Liten (%1 x %1) + Small (%1 x %1) + Liten (%1 x %1) - Large (%1 x %1) - Stor (%1 x %1) + Large (%1 x %1) + Stor (%1 x %1) - Extra large (%1 x %1) - Extra stor (%1 x %1) + Extra large (%1 x %1) + Extra stor (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Inmatning + Input + Inmatning - OK - OK + OK + OK - Cancel - Avbryt + Cancel + Avbryt - - + + - - + + Gui::Dialog::DlgInspector - Scene Inspector - Sceninspektör + Scene Inspector + Sceninspektör - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Utför makro + Execute macro + Utför makro - Macro name: - Makronamn: + Macro name: + Makronamn: - Macro destination: - Makro destination: + Macro destination: + Makro destination: - Execute - Utför + Execute + Utför - Close - Stäng + Close + Stäng - Create - Skapa + Create + Skapa - Delete - Radera + Delete + Radera - Edit - Redigera + Edit + Redigera - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Makron + Macros + Makron - Macro file - Makro fil + Macro file + Makro fil - Enter a file name, please: - Skriv in ett filnamn: + Enter a file name, please: + Skriv in ett filnamn: - Existing file - Filen finns + Existing file + Filen finns - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Denna fil finns redan. - Delete macro - Radera makro + Delete macro + Radera makro - Do you really want to delete the macro '%1'? - Vill du verkligen radera makrot '%1'? + Do you really want to delete the macro '%1'? + Vill du verkligen radera makrot '%1'? - Cannot create file - Kan inte skapa fil + Cannot create file + Kan inte skapa fil - Creation of file '%1' failed. - Skapandet av filen %1' misslyckades. + Creation of file '%1' failed. + Skapandet av filen %1' misslyckades. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Makroinspelning + Macro recording + Makroinspelning - Macro name: - Makronamn: + Macro name: + Makronamn: - Stop - Stopp + Stop + Stopp - Cancel - Avbryt + Cancel + Avbryt - Macro path: - sökväg för makro: + Macro path: + sökväg för makro: - ... - ... + ... + ... - Record - Spela in + Record + Spela in - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Makroinspelare + Macro recorder + Makroinspelare - Specify first a place to save. - Specificera först en plats att spara på. + Specify first a place to save. + Specificera först en plats att spara på. - Existing macro - Makrot finns + Existing macro + Makrot finns - The macro '%1' already exists. Do you want to overwrite? - Makrot '%1' finns redan. Vill du skriva över den? + The macro '%1' already exists. Do you want to overwrite? + Makrot '%1' finns redan. Vill du skriva över den? - The macro directory doesn't exist. Please, choose another one. - Makrokatalogen finns inte. Var snäll och välj en annan. + The macro directory doesn't exist. Please, choose another one. + Makrokatalogen finns inte. Var snäll och välj en annan. - Choose macro directory - Välj makro katalog + Choose macro directory + Välj makro katalog - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Materialegenskaper + Material properties + Materialegenskaper - &Close - &Stäng + &Close + &Stäng - Alt+C - Alt+C + Alt+C + Alt+C - Material - Material + Material + Material - Diffuse color: - Diffuseringsfärg: + Diffuse color: + Diffuseringsfärg: - Specular color: - Speglingsfärg: + Specular color: + Speglingsfärg: - Shininess: - Blänkvärde: + Shininess: + Blänkvärde: - % - % + % + % - Ambient color: - Omgivningsfärg: + Ambient color: + Omgivningsfärg: - - + + - Emissive color: - Emissiv färg: + Emissive color: + Emissiv färg: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - On-line hjälp + On-line help + On-line hjälp - Help viewer - Hjälpvisare + Help viewer + Hjälpvisare - Location of start page - Startsidans adress + Location of start page + Startsidans adress - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML filer (*.html *.htm) + HTML files (*.html *.htm) + HTML filer (*.html *.htm) - Access denied - Åtkomst nekad + Access denied + Åtkomst nekad - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Åtkomst nekad till '%1' + Åtkomst nekad till '%1' Ange en annan katalog. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Parameter redigerare + Parameter Editor + Parameter redigerare - Save to disk - Spara till disk + Save to disk + Spara till disk - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Stäng + &Close + &Stäng - - + + Gui::Dialog::DlgParameterImp - Group - Grupp + Group + Grupp - Name - Namn + Name + Namn - Type - Typ + Type + Typ - Value - Värde + Value + Värde - User parameter - Användarparameter + User parameter + Användarparameter - Invalid input - Ogiltig inmatning + Invalid input + Ogiltig inmatning - Invalid key name '%1' - Ogiltigt nyckelnamn '%1' + Invalid key name '%1' + Ogiltigt nyckelnamn '%1' - System parameter - Systemparameter + System parameter + Systemparameter - - + + Gui::Dialog::DlgPreferences - Preferences - Inställningar + Preferences + Inställningar - &Help - &Hjälp + &Help + &Hjälp - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &Ok + &OK + &Ok - &Apply - &Verkställ + &Apply + &Verkställ - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Fel parameter + Wrong parameter + Fel parameter - - + + Gui::Dialog::DlgProjectInformation - Project information - Projektinformation + Project information + Projektinformation - Information - Information + Information + Information - &Name: - &Namn: + &Name: + &Namn: - Commen&t: - Kommen&tar: + Commen&t: + Kommen&tar: - Path: - Sökväg: + Path: + Sökväg: - &Last modified by: - S&ist ändrad av: + &Last modified by: + S&ist ändrad av: - Created &by: - &Skapad av: + Created &by: + &Skapad av: - Com&pany: - &Företag: + Com&pany: + &Företag: - Last &modification date: - Sista ändringsdatu&m: + Last &modification date: + Sista ändringsdatu&m: - Creation &date: - Skapad &datum: + Creation &date: + Skapad &datum: - &OK - &Ok + &OK + &Ok - &Cancel - &Avbryt + &Cancel + &Avbryt - - + + - - + + Gui::Dialog::DlgProjectUtility - Project utility - Projekt verktyg + Project utility + Projekt verktyg - Extract project - Extrahera projekt + Extract project + Extrahera projekt - Source - Källa + Source + Källa - Project file (*.fcstd) - Projektfil (*. fcstd) + Project file (*.fcstd) + Projektfil (*. fcstd) - Destination - Destination + Destination + Destination - Extract - Extrahera + Extract + Extrahera - Create project - Skapa projekt + Create project + Skapa projekt - Document.xml - Dokument.xml + Document.xml + Dokument.xml - Create - Skapa + Create + Skapa - Load project file after creation - Ladda projektfil efter skapelsen + Load project file after creation + Ladda projektfil efter skapelsen - Empty source - Tom källa + Empty source + Tom källa - No source is defined. - Ingen källa är definierad. + No source is defined. + Ingen källa är definierad. - Empty destination - Tom destination + Empty destination + Tom destination - No destination is defined. - Ingen destination är definierad. + No destination is defined. + Ingen destination är definierad. - - + + Gui::Dialog::DlgReportView - Output window - Utmatningsfönster + Output window + Utmatningsfönster - Output - Utmatning + Output + Utmatning - Record log messages - spela in logg meddelanden + Record log messages + spela in logg meddelanden - Record warnings - Spela in varningar + Record warnings + Spela in varningar - Record error messages - Spela in felmeddelanden + Record error messages + Spela in felmeddelanden - Colors - Färger + Colors + Färger - Normal messages: - Normala meddelanden: + Normal messages: + Normala meddelanden: - Log messages: - Loggmeddelanden: + Log messages: + Loggmeddelanden: - Warnings: - Varningar: + Warnings: + Varningar: - Errors: - Fel: + Errors: + Fel: - - + + - Redirect internal Python errors to report view - Omdirigera interna Pythonfel till rapportvy + Redirect internal Python errors to report view + Omdirigera interna Pythonfel till rapportvy - Redirect internal Python output to report view - Dirigera om intern Pythonutmatning till rapportvyn + Redirect internal Python output to report view + Dirigera om intern Pythonutmatning till rapportvyn - - + + Gui::Dialog::DlgRunExternal - Running external program - Kör externt program + Running external program + Kör externt program - TextLabel - TextLabel + TextLabel + TextLabel - Advanced >> - Avancerat >> + Advanced >> + Avancerat >> - ... - ... + ... + ... - Accept changes - Acceptera förändringar + Accept changes + Acceptera förändringar - Discard changes - Förkasta ändringar + Discard changes + Förkasta ändringar - Abort program - Avbryt programmet + Abort program + Avbryt programmet - Help - Hjälp + Help + Hjälp - Select a file - Välj en fil + Select a file + Välj en fil - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D Vy + 3D View + 3D Vy - 3D View settings - Inställningar för 3D Vy + 3D View settings + Inställningar för 3D Vy - Show coordinate system in the corner - Visa koordinatsystemet i hörnet + Show coordinate system in the corner + Visa koordinatsystemet i hörnet - Show counter of frames per second - Visa räknaren för bilder per sekund + Show counter of frames per second + Visa räknaren för bilder per sekund - Enable animation - Aktivera animering + Enable animation + Aktivera animering - Enable anti-aliasing (slower) - Aktivera antialiasing (långsammare) + Enable anti-aliasing (slower) + Aktivera antialiasing (långsammare) - Eye to eye distance for stereo modes: - Ögonavstånd för stereolägen: + Eye to eye distance for stereo modes: + Ögonavstånd för stereolägen: - Camera type - Kameratyp + Camera type + Kameratyp - Orthographic rendering - Ortografisk rendering + Orthographic rendering + Ortografisk rendering - Perspective rendering - Perspektivrendering + Perspective rendering + Perspektivrendering - - + + - 3D Navigation - 3D Navigering + 3D Navigation + 3D Navigering - Mouse... - Mus... + Mouse... + Mus... - Intensity of backlight - Intensiteten i bakgrundsbelysningen + Intensity of backlight + Intensiteten i bakgrundsbelysningen - Enable backlight color - Aktivera bakgrundsbelysningsfärg + Enable backlight color + Aktivera bakgrundsbelysningsfärg - Orbit style - Orbit stil + Orbit style + Orbit stil - Turntable - Skivtallrik + Turntable + Skivtallrik - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invertera zoom + Invert zoom + Invertera zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 navigering + %1 navigation + %1 navigering - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Färgmodell + Color model + Färgmodell - &Gradient: - &Gradient: + &Gradient: + &Gradient: - red-yellow-green-cyan-blue - röd-gul-grön-cyan-blå + red-yellow-green-cyan-blue + röd-gul-grön-cyan-blå - blue-cyan-green-yellow-red - blå-cyan-grön-gul-röd + blue-cyan-green-yellow-red + blå-cyan-grön-gul-röd - white-black - vit-svart + white-black + vit-svart - black-white - svart-vit + black-white + svart-vit - Visibility - Synlighet + Visibility + Synlighet - Out g&rayed - Ut g&rå + Out g&rayed + Ut g&rå - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - Ut osynl&ig + Out &invisible + Ut osynl&ig - Alt+I - Alt+I + Alt+I + Alt+I - Style - Stil + Style + Stil - &Zero - &Noll + &Zero + &Noll - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Flöde + &Flow + &Flöde - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &Ok + &OK + &Ok - &Cancel - &Avbryt + &Cancel + &Avbryt - Parameter range - Parameterområde + Parameter range + Parameterområde - Mi&nimum: - Mi&nimum: + Mi&nimum: + Mi&nimum: - Ma&ximum: - Ma&ximum: + Ma&ximum: + Ma&ximum: - &Labels: - &Etiketter: + &Labels: + &Etiketter: - &Decimals: - &Decimaler: + &Decimals: + &Decimaler: - - + + - Color-gradient settings - Färggradient inställningar + Color-gradient settings + Färggradient inställningar - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Fel parameter + Wrong parameter + Fel parameter - The maximum value must be higher than the minimum value. - Maximumvärdet måste vara större än minimumvärdet. + The maximum value must be higher than the minimum value. + Maximumvärdet måste vara större än minimumvärdet. - - + + Gui::Dialog::DlgSettingsDocument - Document - Dokument + Document + Dokument - General - Allmänt + General + Allmänt - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Komprimeringsgrad när dokument sparas + Komprimeringsgrad när dokument sparas (0 = ingen, 9 = högst, 3 = standard) - Create new document at start up - Skapa nytt dokument vid uppstart + Create new document at start up + Skapa nytt dokument vid uppstart - Storage - Lagring + Storage + Lagring - Saving transactions (Auto-save) - Spara transaktionerna (autospara) + Saving transactions (Auto-save) + Spara transaktionerna (autospara) - Discard saved transaction after saving document - Förstör sparad transaktion efter att ha sparat dokumentet + Discard saved transaction after saving document + Förstör sparad transaktion efter att ha sparat dokumentet - Save thumbnail into project file when saving document - Spara minibild i projektfilen när dokumentet sparas + Save thumbnail into project file when saving document + Spara minibild i projektfilen när dokumentet sparas - Create up to backup files when resaving document - Skapa upp till säkerhetskopior när dokumentet omsparas + Create up to backup files when resaving document + Skapa upp till säkerhetskopior när dokumentet omsparas - Document objects - Dokumentobjekt + Document objects + Dokumentobjekt - Allow duplicate object labels in one document - Tillåt duplicerade objektetiketter i ett dokument + Allow duplicate object labels in one document + Tillåt duplicerade objektetiketter i ett dokument - Maximum Undo/Redo steps - Maximalt Ångra / Gör om steg + Maximum Undo/Redo steps + Maximalt Ångra / Gör om steg - Using Undo/Redo on documents - Använder Ångra / Gör om på dokument + Using Undo/Redo on documents + Använder Ångra / Gör om på dokument - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Text + Text + Text - Bookmark - Bokmärke + Bookmark + Bokmärke - Breakpoint - Brytpunkt + Breakpoint + Brytpunkt - Keyword - Nyckelord + Keyword + Nyckelord - Comment - Kommentar + Comment + Kommentar - Block comment - Blockkommentar + Block comment + Blockkommentar - Number - Nummer + Number + Nummer - String - Sträng + String + Sträng - Character - Tecken + Character + Tecken - Class name - Klassnamn + Class name + Klassnamn - Define name - Definiera namn + Define name + Definiera namn - Operator - Operator + Operator + Operator - Python output - Python utmatning + Python output + Python utmatning - Python error - Python fel + Python error + Python fel - Items - Saker + Items + Saker - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Bildinställningar + Image settings + Bildinställningar - Image properties - Bildegenskaper + Image properties + Bildegenskaper - Back&ground: - Bak&grund: + Back&ground: + Bak&grund: - Current - Nuvarande + Current + Nuvarande - White - Vit + White + Vit - Black - Svart + Black + Svart - Transparent - Transparent + Transparent + Transparent - Image dimensions - Bildstorlek + Image dimensions + Bildstorlek - Pixel - Pixel + Pixel + Pixel - &Width: - &Bredd: + &Width: + &Bredd: - Current screen - Nuvarande fönster + Current screen + Nuvarande fönster - Icon 32 x 32 - Ikon 32 x 32 + Icon 32 x 32 + Ikon 32 x 32 - Icon 64 x 64 - Ikon 64 x 64 + Icon 64 x 64 + Ikon 64 x 64 - Icon 128 x 128 - Ikon 128 .x. 128 + Icon 128 x 128 + Ikon 128 .x. 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Standardstorlekar: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + &Höjd: - Standard sizes: - Standardstorlekar: + Aspect ratio: + Bildförhållande: - &Height: - &Höjd: + &Screen + &Skärm - Aspect ratio: - Bildförhållande: + Alt+S + Alt+S - &Screen - &Skärm + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Bildkommentar - Alt+1 - Alt+1 + Insert MIBA + Sätt in MIBA - Image comment - Bildkommentar + Insert comment + Sätt in kommentar - - Insert MIBA - Sätt in MIBA - - - Insert comment - Sätt in kommentar - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Makro + Macro + Makro - Macro recording settings - Inställningar för makroinspelning + Macro recording settings + Inställningar för makroinspelning - Logging Commands - Loggkommandon + Logging Commands + Loggkommandon - Show script commands in python console - Visa skriptkommandon i python konsolen + Show script commands in python console + Visa skriptkommandon i python konsolen - Log all commands issued by menus to file: - Logga alla kommandon startade av menyer till fil: + Log all commands issued by menus to file: + Logga alla kommandon startade av menyer till fil: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Gui kommandon + Gui commands + Gui kommandon - Recording GUI commands - Spelar in GUI kommandon + Recording GUI commands + Spelar in GUI kommandon - Record as comment - Spela in som kommentar + Record as comment + Spela in som kommentar - Macro path - sökväg för makro + Macro path + sökväg för makro - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Enheter + Units + Enheter - Units settings - Inställningar för enheter + Units settings + Inställningar för enheter - Standard (mm/kg/s/degree) - Standard (mm/kg/s/grad) + Standard (mm/kg/s/degree) + Standard (mm/kg/s/grad) - MKS (m/kg/s/degree) - MKS (m/kg/s/grad) + MKS (m/kg/s/degree) + MKS (m/kg/s/grad) - Magnitude - Magnitud + Magnitude + Magnitud - Unit - Enhet + Unit + Enhet - User system: - Användarsystem: + User system: + Användarsystem: - Imperial (in/lb) - Brittiska mått (in/lb) + Imperial (in/lb) + Brittiska mått (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Färger + Colors + Färger - Selection - Markering + Selection + Markering - Enable selection highlighting - Aktivera valmarkering + Enable selection highlighting + Aktivera valmarkering - Enable preselection highlighting - Aktivera förvalsmarkering + Enable preselection highlighting + Aktivera förvalsmarkering - Background color - Bakgrundsfärg + Background color + Bakgrundsfärg - Middle color - Mellanfärg + Middle color + Mellanfärg - Color gradient - Färggradient + Color gradient + Färggradient - Simple color - Enkel färg + Simple color + Enkel färg - Default colors - Standard färger + Default colors + Standard färger - Edited edge color - Redigerad kantfärg + Edited edge color + Redigerad kantfärg - Edited vertex color - Redigerad hörnfärg + Edited vertex color + Redigerad hörnfärg - Construction geometry - Konstruktionsgeometri + Construction geometry + Konstruktionsgeometri - Fully constrained geometry - Helt begränsad geometri + Fully constrained geometry + Helt begränsad geometri - The color of construction geometry in editmode - Färgen på konstruktionsgeometri i redigeringsläge + The color of construction geometry in editmode + Färgen på konstruktionsgeometri i redigeringsläge - The color of fully constrained geometry in editmode - Färgen på fullt begränsad geometri i redigeringsläge + The color of fully constrained geometry in editmode + Färgen på fullt begränsad geometri i redigeringsläge - The color of vertices being edited - Färgen på hörn som redigeras + The color of vertices being edited + Färgen på hörn som redigeras - The color of edges being edited - Färgen på kanter som redigeras + The color of edges being edited + Färgen på kanter som redigeras - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Dagens tips + Tip of the day + Dagens tips - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Visste du...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Visste du...</font></font></b> - &Show tips at start up - Vi&sa tips vid uppstart + &Show tips at start up + Vi&sa tips vid uppstart - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Nästa tips + &Next Tip + &Nästa tips - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Stäng + &Close + &Stäng - Alt+C - Alt+C + Alt+C + Alt+C - - + + - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Nedladdning misslyckades:%1 + Nedladdning misslyckades:%1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Om du vill läradig mer om FreeCAD så måste du gå till %1 eller klicka på Hjälp i Hjälp-menyn. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Om du vill läradig mer om FreeCAD så måste du gå till %1 eller klicka på Hjälp i Hjälp-menyn. - - + + Gui::Dialog::DockablePlacement - Placement - Placering + Placement + Placering - - + + Gui::Dialog::DownloadDialog - Canceled. - Avbruten + Canceled. + Avbruten - - + + Download + + + + Cancel + Avbryt + + + Close + Stäng + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Nedladdning misslyckades: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Lägg till ikon + Add icon + Lägg till ikon - - + + Gui::Dialog::InputVector - Input vector - Inmatningsvektor + Input vector + Inmatningsvektor - Vector - Vektor + Vector + Vektor - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - OK + OK + OK - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Musknappar + Mouse buttons + Musknappar - Configuration - Konfiguration + Configuration + Konfiguration - Selection: - Markering: + Selection: + Markering: - Panning - Panorering + Panning + Panorering - Rotation: - Rotation: + Rotation: + Rotation: - Zooming: - Zoomning: + Zooming: + Zoomning: - - + + Gui::Dialog::ParameterGroup - Expand - Expandera + Expand + Expandera - Add sub-group - Lägg till undergrupp + Add sub-group + Lägg till undergrupp - Remove group - Ta bort grupp + Remove group + Ta bort grupp - Rename group - Döp om grupp + Rename group + Döp om grupp - Export parameter - Exportera parameter + Export parameter + Exportera parameter - Import parameter - Importera parameter + Import parameter + Importera parameter - Collapse - Minimera + Collapse + Minimera - Do really want to remove this parameter group? - Vill du verkligen to bort denna parametergrupp? + Do really want to remove this parameter group? + Vill du verkligen to bort denna parametergrupp? - Existing sub-group - Existerande undergrupp + Existing sub-group + Existerande undergrupp - The sub-group '%1' already exists. - Undergruppen '%1' finns redan. + The sub-group '%1' already exists. + Undergruppen '%1' finns redan. - Export parameter to file - exportera parameter till fil + Export parameter to file + exportera parameter till fil - XML (*.FCParam) - XML(*.FCParam) + XML (*.FCParam) + XML(*.FCParam) - Import parameter from file - Importera parameter från fil + Import parameter from file + Importera parameter från fil - Import Error - Importfel + Import Error + Importfel - Reading from '%1' failed. - Läsning från '%1' misslyckades. + Reading from '%1' failed. + Läsning från '%1' misslyckades. - - + + Gui::Dialog::ParameterValue - Change value - Ändra värde + Change value + Ändra värde - Remove key - Ta bort nyckel + Remove key + Ta bort nyckel - Rename key - Döp om nyckel + Rename key + Döp om nyckel - New - Ny + New + Ny - New string item - Ny sträng + New string item + Ny sträng - New float item - Nytt flyttal + New float item + Nytt flyttal - New integer item - Nytt heltal + New integer item + Nytt heltal - New unsigned item - Nytt osignerat tal + New unsigned item + Nytt osignerat tal - New Boolean item - Nytt booleskt värde + New Boolean item + Nytt booleskt värde - Existing item - Existerar + Existing item + Existerar - The item '%1' already exists. - Saken '%1' finns redan. + The item '%1' already exists. + Saken '%1' finns redan. - - + + Gui::Dialog::Placement - Placement - Placering + Placement + Placering - OK - OK + OK + OK - Translation: - Förflyttning: + Translation: + Förflyttning: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Rotation: + Rotation: + Rotation: - Angle: - Vinkel: + Angle: + Vinkel: - Axis: - Axel: + Axis: + Axel: - Center: - Centrum: + Center: + Centrum: - Pitch: - Lutning: + Pitch: + Lutning: - Roll: - Rullning: + Roll: + Rullning: - Yaw: - Girning: + Yaw: + Girning: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Eulervinklar + Euler angles + Eulervinklar - Apply placement changes immediately - Applicera placeringsförändringar omedelbart + Apply placement changes immediately + Applicera placeringsförändringar omedelbart - Apply incremental changes to object placement - applicera stegvisa förändringar på objektplacering + Apply incremental changes to object placement + applicera stegvisa förändringar på objektplacering - Apply - Verkställ + Apply + Verkställ - Reset - Återställ + Reset + Återställ - Close - Stäng + Close + Stäng - - + + Gui::Dialog::PrintModel - Button - Knapp + Button + Knapp - Command - Kommando + Command + Kommando - - + + Gui::Dialog::SceneInspector - Dialog - Dialog + Dialog + Dialog - Close - Stäng + Close + Stäng - Refresh - Uppdatera + Refresh + Uppdatera - - + + Gui::Dialog::SceneModel - Inventor Tree - Inventor träd + Inventor Tree + Inventor träd - Nodes - Noder + Nodes + Noder - - + + Gui::Dialog::TextureMapping - Texture - Struktur + Texture + Struktur - Texture mapping - strukturmappning + Texture mapping + strukturmappning - Global - Global + Global + Global - Environment - Miljö + Environment + Miljö - Image files (%1) - Bildfiler (%1) + Image files (%1) + Bildfiler (%1) - No image - Ingen bild + No image + Ingen bild - The specified file is not a valid image file. - Den angivna filen är inte en giltig bildfil. + The specified file is not a valid image file. + Den angivna filen är inte en giltig bildfil. - No 3d view - Ingen 3d vy + No 3d view + Ingen 3d vy - No active 3d view found. - Ingen aktiv 3D-vy hittades. + No active 3d view found. + Ingen aktiv 3D-vy hittades. - - + + Gui::Dialog::Transform - Cancel - Avbryt + Cancel + Avbryt - Transform - Omvandla + Transform + Omvandla - - + + Gui::DlgTreeWidget - Dialog - Dialog + Dialog + Dialog - Items - Saker + Items + Saker - OK - OK + OK + OK - Cancel - Avbryt + Cancel + Avbryt - - + + - - + + Gui::DockWnd::CombiView - CombiView - Kombivy + CombiView + Kombivy - Project - Projekt + Project + Projekt - Tasks - Uppgifter + Tasks + Uppgifter - - + + Gui::DockWnd::HelpView - Previous - Föregående + Previous + Föregående - Next - Nästa + Next + Nästa - Home - Hem + Home + Hem - Open - Öppna + Open + Öppna - Open file - Öppna fil + Open file + Öppna fil - All HTML files (*.html *.htm) - Alla HTML filer (*.html *.htm) + All HTML files (*.html *.htm) + Alla HTML filer (*.html *.htm) - External browser - Extern webbläsare + External browser + Extern webbläsare - No external browser found. Specify in preferences, please - Någon extern webbläsare hittades inte. Specificera en i inställningarna + No external browser found. Specify in preferences, please + Någon extern webbläsare hittades inte. Specificera en i inställningarna - Starting of %1 failed - Start av %1 misslyckades + Starting of %1 failed + Start av %1 misslyckades - - + + Gui::DockWnd::PropertyDockView - Property View - Egenskapsvy + Property View + Egenskapsvy - - + + Gui::DockWnd::ReportOutput - Logging - Loggning + Logging + Loggning - Warning - Varning + Warning + Varning - Error - Fel + Error + Fel - Options - Alternativ + Options + Alternativ - Clear - Rensa + Clear + Rensa - Save As... - Spara som... + Save As... + Spara som... - Save Report Output - Spara rapport utmatning + Save Report Output + Spara rapport utmatning - Plain Text Files (*.txt *.log) - Rena textfiler (*.txt *.log) + Plain Text Files (*.txt *.log) + Rena textfiler (*.txt *.log) - Go to end - Gå till slutet + Go to end + Gå till slutet - Redirect Python output - Dirigera om Pythonutmatning + Redirect Python output + Dirigera om Pythonutmatning - Redirect Python errors - Omdirigera Python fel + Redirect Python errors + Omdirigera Python fel - - + + Gui::DockWnd::ReportView - Output - Utmatning + Output + Utmatning - Python console - Python konsoll + Python console + Python konsoll - - + + Gui::DockWnd::SelectionView - Property View - Egenskapsvy + Property View + Egenskapsvy - - + + Gui::DockWnd::TaskPanelView - Task View - Uppgiftsvy + Task View + Uppgiftsvy - - + + Gui::DockWnd::TextBrowser - Could not open file. - Kunde inte öppna fil. + Could not open file. + Kunde inte öppna fil. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Du försökte öppna adress %1, som för tillfället är otillgänglig. Försäkra dig om att URL:en finns och försök att ladda om sidan. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Du försökte öppna adress %1, som för tillfället är otillgänglig. Försäkra dig om att URL:en finns och försök att ladda om sidan. - Connecting to %1 - Ansluter till %1 + Connecting to %1 + Ansluter till %1 - Sending to %1 - Sänder till %1 + Sending to %1 + Sänder till %1 - Reading from %1 - Läser från %1 + Reading from %1 + Läser från %1 - Download failed: %1. - Nedladdning misslyckades: %1. + Download failed: %1. + Nedladdning misslyckades: %1. - Previous - Föregående + Previous + Föregående - Forward - Framåt + Forward + Framåt - Home - Hem + Home + Hem - Refresh - Uppdatera + Refresh + Uppdatera - Copy - Kopiera + Copy + Kopiera - Select all - Markera allt + Select all + Markera allt - No description for - Ingen beskrivning för + No description for + Ingen beskrivning för - - + + Gui::DocumentModel - Application - Applikation + Application + Applikation - Labels & Attributes - Etiketter & attribut + Labels & Attributes + Etiketter & attribut - - + + Gui::EditorView - Modified file - Ändrad fil + Modified file + Ändrad fil - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Denna har ändrats utanför källredigeraren. Vill du ladda om den? - Unsaved document - Osparat dokument + Unsaved document + Osparat dokument - The document has been modified. + The document has been modified. Do you want to save your changes? - Dokumentet har ändrats. + Dokumentet har ändrats. Vill du spara ändringarna? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD makro (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD makro (*.FCMacro);;Python (*.py) - Export PDF - Exportera PDF + Export PDF + Exportera PDF - PDF file (*.pdf) - PDF fil (*.pdf) + PDF file (*.pdf) + PDF fil (*.pdf) - untitled[*] - utan namn[*] + untitled[*] + utan namn[*] - - Editor - - Redigerare + - Editor + - Redigerare - %1 chars removed - %1 tecken borttagna + %1 chars removed + %1 tecken borttagna - %1 chars added - %1 tecken tillagda + %1 chars added + %1 tecken tillagda - Formatted - Formatterad + Formatted + Formatterad - - + + Gui::FileChooser - Select a file - Välj en fil + Select a file + Välj en fil - Select a directory - Välj en katalog + Select a directory + Välj en katalog - - + + Gui::FileDialog - Save as - Spara som + Save as + Spara som - Open - Öppna + Open + Öppna - - + + Gui::FileOptionsDialog - Extended - Utökad + Extended + Utökad - All files (*.*) - Alla filer (*.*) + All files (*.*) + Alla filer (*.*) - - + + Gui::Flag - Top left - Topp vänster + Top left + Topp vänster - Bottom left - Botten vänster + Bottom left + Botten vänster - Top right - Topp höger + Top right + Topp höger - Bottom right - Botten höger + Bottom right + Botten höger - Remove - Ta bort + Remove + Ta bort - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Tryck CTRL och vänster musknapp + Press CTRL and left mouse button + Tryck CTRL och vänster musknapp - Press middle mouse button - Tryck på mittre musknapp + Press middle mouse button + Tryck på mittre musknapp - Press left mouse button - Tryck på vänster musknapp + Press left mouse button + Tryck på vänster musknapp - Scroll middle mouse button - Bläddra mittre musknapp + Scroll middle mouse button + Bläddra mittre musknapp - - + + Gui::LocationDialog - Wrong direction - Fel riktning + Wrong direction + Fel riktning - Direction must not be the null vector - Riktningen får inte vara noll vektorn + Direction must not be the null vector + Riktningen får inte vara noll vektorn - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Användardefinierad... + User defined... + Användardefinierad... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Makron + Macros + Makron - - + + Gui::MainWindow - Dimension - Dimension + Dimension + Dimension - Ready - Klar + Ready + Klar - Toggles this toolbar - Växlar denna verktygsrad + Toggles this toolbar + Växlar denna verktygsrad - Toggles this dockable window - Växlar detta dockningsbara fönster + Toggles this dockable window + Växlar detta dockningsbara fönster - Close All - Stäng alla + Close All + Stäng alla - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Nedladdning startad... + Nedladdning startad... - - + + Gui::ProgressBar - Remaining: %1 - Kvarvarande: %1 + Remaining: %1 + Kvarvarande: %1 - Aborting - Avbryter + Aborting + Avbryter - Do you really want to abort the operation? - Vill du verkligen avbryta operationen? + Do you really want to abort the operation? + Vill du verkligen avbryta operationen? - - + + Gui::ProgressDialog - Remaining: %1 - Kvarvarande: %1 + Remaining: %1 + Kvarvarande: %1 - Aborting - Avbryter + Aborting + Avbryter - Do you really want to abort the operation? - Vill du verkligen avbryta operationen? + Do you really want to abort the operation? + Vill du verkligen avbryta operationen? - - + + Gui::PropertyEditor::PropertyModel - Property - Egenskap + Property + Egenskap - Value - Värde + Value + Värde - - + + Gui::PropertyView - View - Vy + View + Vy - Data - Data + Data + Data - - + + Gui::PythonConsole - System exit - Avsluta systemet + System exit + Avsluta systemet - The application is still running. + The application is still running. Do you want to exit without saving your data? - Applikationen körs fortfarande. + Applikationen körs fortfarande. Vill du avsluta utan att spara din data? - Python console - Python konsoll + Python console + Python konsoll - Unhandled PyCXX exception. - Ohanterat PyCXX undantag. + Unhandled PyCXX exception. + Ohanterat PyCXX undantag. - Unhandled FreeCAD exception. - Ohanterat FreeCAD undantag. + Unhandled FreeCAD exception. + Ohanterat FreeCAD undantag. - Unhandled unknown C++ exception. - Ohanterat okänt C++ undantag. + Unhandled unknown C++ exception. + Ohanterat okänt C++ undantag. - &Copy command - &Kopiera kommando + &Copy command + &Kopiera kommando - &Copy history - &Kopieringshistorik + &Copy history + &Kopieringshistorik - Save history as... - Spara historik som... + Save history as... + Spara historik som... - Insert file name... - Mata in filnamn... + Insert file name... + Mata in filnamn... - Save History - Spara historik + Save History + Spara historik - Macro Files (*.FCMacro *.py) - Makrofiler (*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + Makrofiler (*.FCMacro *.py) - Insert file name - Mata in filnamn + Insert file name + Mata in filnamn - All Files (*.*) - Alla filer (*.*) + All Files (*.*) + Alla filer (*.*) - Python Input Dialog - Python inmatningsdialog + Python Input Dialog + Python inmatningsdialog - Unhandled std C++ exception. - Std C++ undantag utan hantering. + Unhandled std C++ exception. + Std C++ undantag utan hantering. - Word wrap - Radbrytning + Word wrap + Radbrytning - &Copy - K&opiera + &Copy + K&opiera - &Paste - Klistra &in + &Paste + Klistra &in - Select All - Markera allt + Select All + Markera allt - - + + Clear console + + + + Gui::PythonEditor - Comment - Kommentar + Comment + Kommentar - Uncomment - Bortkommentera + Uncomment + Bortkommentera - - + + Gui::PythonInputField - OK - OK + OK + OK - Clear - Rensa + Clear + Rensa - - + + Gui::RecentFilesAction - Open file %1 - Öppna fil %1 + Open file %1 + Öppna fil %1 - File not found - Fil ej funnen + File not found + Fil ej funnen - The file '%1' cannot be opened. - Filen '%1' kan inte öppnas. + The file '%1' cannot be opened. + Filen '%1' kan inte öppnas. - - + + Gui::SelectModule - Select module - Välj modul + Select module + Välj modul - Open %1 as - Öppna %1 som + Open %1 as + Öppna %1 som - Select - Markera + Select + Markera - - + + Gui::StdCmdDescription - Help - Hjälp + Help + Hjälp - Des&cription - Bes&krivning + Des&cription + Bes&krivning - Long description of commands - Lång beskriving av kommandon + Long description of commands + Lång beskriving av kommandon - - + + Gui::StdCmdDownloadOnlineHelp - Help - Hjälp + Help + Hjälp - Download online help - Ladda ned online hjälp + Download online help + Ladda ned online hjälp - Download %1's online help - Ladda ned online hjälp för %1 + Download %1's online help + Ladda ned online hjälp för %1 - Non-existing directory - Katalogen existerar inte + Non-existing directory + Katalogen existerar inte - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Katalogen '%1' existerar inte. + Katalogen '%1' existerar inte. Vill du ange en existerande katalog? - Missing permission - Behörighet saknas + Missing permission + Behörighet saknas - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Du har inte behörighet att skriva till '%1' + Du har inte behörighet att skriva till '%1' Vill du ange en annan katalog? - Stop downloading - Stoppa nedladdning + Stop downloading + Stoppa nedladdning - - + + Gui::StdCmdPythonHelp - Tools - Verktyg + Tools + Verktyg - Python Modules - Python moduler + Python Modules + Python moduler - Opens a browser to show the Python modules - Öppnar en webbläsare för att visa Python modulerna + Opens a browser to show the Python modules + Öppnar en webbläsare för att visa Python modulerna - - + + Gui::TaskBoxAngle - Angle - Vinkel + Angle + Vinkel - - + + Gui::TaskBoxPosition - Position - Position + Position + Position - - + + Gui::TaskView::TaskAppearance - Display mode: - Visningsläge: + Display mode: + Visningsläge: - Plot mode: - Plottningsläge: + Plot mode: + Plottningsläge: - Point size: - Punktstorlek: + Point size: + Punktstorlek: - Line width: - Linjebredd: + Line width: + Linjebredd: - Transparency: - Transparens: + Transparency: + Transparens: - Appearance - Utseende + Appearance + Utseende - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Redigera + Edit + Redigera - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Utseende + Appearance + Utseende - ... - ... + ... + ... - edit selection - redigera val + edit selection + redigera val - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Tryck på vänster musknapp + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Engelska + English + Engelska - - + + Gui::TreeDockWidget - Tree view - Trädvy + Tree view + Trädvy - - + + Gui::TreeWidget - Create group... - Skapa grupp... + Create group... + Skapa grupp... - Create a group - Skapa en grupp + Create a group + Skapa en grupp - Group - Grupp + Group + Grupp - Rename - Döp om + Rename + Döp om - Rename object - Döp om objekt + Rename object + Döp om objekt - Labels & Attributes - Etiketter & attribut + Labels & Attributes + Etiketter & attribut - Application - Applikation + Application + Applikation - Finish editing - Slutför redigering + Finish editing + Slutför redigering - Finish editing object - Slutför redigering av objekt + Finish editing object + Slutför redigering av objekt - Activate document - Aktivera dokument + Activate document + Aktivera dokument - Activate document %1 - Aktivera dokument %1 + Activate document %1 + Aktivera dokument %1 - - + + Gui::View3DInventor - Export PDF - Exportera PDF + Export PDF + Exportera PDF - PDF file (*.pdf) - PDF fil (*.pdf) + PDF file (*.pdf) + PDF fil (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Välj arbetsbänken '%1' + Select the '%1' workbench + Välj arbetsbänken '%1' - - + + Position - Form - Form + Form + Form - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - Snäpp i rutnät på + Grid Snap in + Snäpp i rutnät på - - + + QDockWidget - Tree view - Trädvy + Tree view + Trädvy - Property view - Egenskapsvy + Property view + Egenskapsvy - Selection view - Markeringsvy + Selection view + Markeringsvy - Report view - Rapportvy + Report view + Rapportvy - Task View - Uppgiftsvy + Task View + Uppgiftsvy - Combo View - Kombinerad vy + Combo View + Kombinerad vy - Toolbox - Verktygslåda + Toolbox + Verktygslåda - Python console - Python konsoll + Python console + Python konsoll - Display properties - Fönsteregenskaper + Display properties + Fönsteregenskaper - - + + QObject - General - Allmänt + General + Allmänt - Display - Fönster + Display + Fönster - Unknown filetype - Okänd filtyp + Unknown filetype + Okänd filtyp - Cannot open unknown filetype: %1 - Kan inte öppna okänd filtyp: %1 + Cannot open unknown filetype: %1 + Kan inte öppna okänd filtyp: %1 - Cannot save to unknown filetype: %1 - Kan inte spara till okänd filtyp: %1 + Cannot save to unknown filetype: %1 + Kan inte spara till okänd filtyp: %1 - Workbench failure - Fel på arbetsbänk + Workbench failure + Fel på arbetsbänk - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Kan inte starta Qt assistent (%1) + Unable to launch Qt Assistant (%1) + Kan inte starta Qt assistent (%1) - Exception - Undantag + Exception + Undantag - Open document - Öppna dokument + Open document + Öppna dokument - Import file - importera fil + Import file + importera fil - Export file - Exportera fil + Export file + Exportera fil - Printing... - Skriver ut... + Printing... + Skriver ut... - Cannot load workbench - Kan inte ladda arbetsbänk + Cannot load workbench + Kan inte ladda arbetsbänk - A general error occurred while loading the workbench - Ett allmänt fel uppstod medan arbetsbänken laddades + A general error occurred while loading the workbench + Ett allmänt fel uppstod medan arbetsbänken laddades - File not found - Fil ej funnen + File not found + Fil ej funnen - Cannot open file %1 - Kan inte öppna fil %1 + Cannot open file %1 + Kan inte öppna fil %1 - Save views... - Spara vyer... + Save views... + Spara vyer... - Load views... - Ladda vyer... + Load views... + Ladda vyer... - Freeze view - Frys vy + Freeze view + Frys vy - Clear views - Rensa vyer + Clear views + Rensa vyer - Restore view &%1 - Återställ vy &%1 + Restore view &%1 + Återställ vy &%1 - Save frozen views - Spara frusna vyer + Save frozen views + Spara frusna vyer - Frozen views (*.cam) - Frusna vyer (*.cam) + Frozen views (*.cam) + Frusna vyer (*.cam) - Restore views - Återställ vyer + Restore views + Återställ vyer - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - Att importera de återställda vyerna kommer att förstöra de vyer som sparats. + Att importera de återställda vyerna kommer att förstöra de vyer som sparats. vill du fortsätta? - Restore frozen views - Återställ frusna vyer + Restore frozen views + Återställ frusna vyer - Cannot open file '%1'. - Kan inte öppna fil '%1'. + Cannot open file '%1'. + Kan inte öppna fil '%1'. - Docked - Dockad + Docked + Dockad - Undocked - Odockad + Undocked + Odockad - Fullscreen - Fullskärm + Fullscreen + Fullskärm - files - Filer + files + Filer - Save picture - Spara bild + Save picture + Spara bild - New sub-group - Ny undergrupp + New sub-group + Ny undergrupp - Enter the name: - Skriv in namnet: + Enter the name: + Skriv in namnet: - New text item - Ny text + New text item + Ny text - Enter your text: - Mata in din text: + Enter your text: + Mata in din text: - New integer item - Nytt heltal + New integer item + Nytt heltal - Enter your number: - Mata in ditt nummer: + Enter your number: + Mata in ditt nummer: - New unsigned item - Nytt osignerat tal + New unsigned item + Nytt osignerat tal - New float item - Nytt flyttal + New float item + Nytt flyttal - New Boolean item - Nytt booleskt värde + New Boolean item + Nytt booleskt värde - Choose an item: - Välj en sak: + Choose an item: + Välj en sak: - Rename group - Döp om grupp + Rename group + Döp om grupp - The group '%1' cannot be renamed. - Gruppen '%1' kan inte döpas om. + The group '%1' cannot be renamed. + Gruppen '%1' kan inte döpas om. - Existing group - Gruppen existerar redan + Existing group + Gruppen existerar redan - The group '%1' already exists. - Gruppen '%1' existerar redan. + The group '%1' already exists. + Gruppen '%1' existerar redan. - Change value - Ändra värde + Change value + Ändra värde - Save document under new filename... - Spara dokumentet med ett nytt filnamn... + Save document under new filename... + Spara dokumentet med ett nytt filnamn... - Saving aborted - Sparning avbruten + Saving aborted + Sparning avbruten - Unsaved document - Osparat dokument + Unsaved document + Osparat dokument - Save document before close? - Spara dokument innan stängning? + Save document before close? + Spara dokument innan stängning? - Save Macro - Spara Makro + Save Macro + Spara Makro - Finish - Gör klart + Finish + Gör klart - Clear - Rensa + Clear + Rensa - Cancel - Avbryt + Cancel + Avbryt - Inner - Inre + Inner + Inre - Outer - Yttre + Outer + Yttre - No Browser - Ingen webbläsare + No Browser + Ingen webbläsare - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Kan inte öppna din webbläsare. + Kan inte öppna din webbläsare. Öppna ett fönster i en webbläsare och skriv in : hppt://localhost:%1. - No Server - Ingen server + No Server + Ingen server - Unable to start the server to port %1: %2. - Kan inte starta server till port %1: %2. + Unable to start the server to port %1: %2. + Kan inte starta server till port %1: %2. - Unable to open your system browser. - Kan inte öppna din systemwebbläsare. + Unable to open your system browser. + Kan inte öppna din systemwebbläsare. - Options... - Alternativ... + Options... + Alternativ... - Out of memory - Slut på minne + Out of memory + Slut på minne - Not enough memory available to display the data. - Det finns inte tillräckligt med minne för att visa datan. + Not enough memory available to display the data. + Det finns inte tillräckligt med minne för att visa datan. - Cannot find file %1 - Kan inte finna fil %1 + Cannot find file %1 + Kan inte finna fil %1 - Cannot find file %1 neither in %2 nor in %3 - Kan inte finna fil %1, varken i %2 eller i %3 + Cannot find file %1 neither in %2 nor in %3 + Kan inte finna fil %1, varken i %2 eller i %3 - Save %1 Document - Spara %1 dokument + Save %1 Document + Spara %1 dokument - %1 document (*.FCStd) - %1 dokument (*.FCStd) + %1 document (*.FCStd) + %1 dokument (*.FCStd) - Save As - Spara som + Save As + Spara som - %1 already exists. + %1 already exists. Do you want to replace it? - %1 finns redan. + %1 finns redan. Vill du ersätta den? - Document not closable - Dokumentet kan ej stängas + Document not closable + Dokumentet kan ej stängas - The document is not closable for the moment. - Dokumentet kan inte stängas för tillfället. + The document is not closable for the moment. + Dokumentet kan inte stängas för tillfället. - No OpenGL - Inga OpenGL + No OpenGL + Inga OpenGL - This system does not support OpenGL - Detta system har inte stöd för OpenGL + This system does not support OpenGL + Detta system har inte stöd för OpenGL - Help - Hjälp + Help + Hjälp - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Det gick inte att ladda dokumentationen. + Det gick inte att ladda dokumentationen. För att läsa in den så krävs Qt 4.4 eller högre. - %1 Help - %1 Hjälp + %1 Help + %1 Hjälp - Exporting PDF... - Exporterar PDF ... + Exporting PDF... + Exporterar PDF ... - Wrong selection - Fel val + Wrong selection + Fel val - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Endast ett objekt markerat. Välj två objekt. + Endast ett objekt markerat. Välj två objekt. Tänk på det har betydelse var du klickar. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Välj två objekt. + Välj två objekt. Tänk på att det har betydelse var du klickar. - New boolean item - Nytt booleskt objekt + New boolean item + Nytt booleskt objekt - Navigation styles - Navigationsstilar + Navigation styles + Navigationsstilar - %1 navigation - %1 navigering + %1 navigation + %1 navigering - Move annotation - Flytta annotering + Move annotation + Flytta annotering - Transform - Omvandla + Transform + Omvandla - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - Dokumentet är i redigeringsläge och kan därför inte stängas för tillfället. Du måste antingen avsluta eller avbryta redigeringen i uppgiftspanelen. + Dokumentet är i redigeringsläge och kan därför inte stängas för tillfället. Du måste antingen avsluta eller avbryta redigeringen i uppgiftspanelen. - - + + + StdBoxSelection + + Standard-View + Standardvy + + + Box selection + + + + StdCmdAbout - Help - Hjälp + Help + Hjälp - &About %1 - O&m %1 + &About %1 + O&m %1 - About %1 - Om %1 + About %1 + Om %1 - - + + StdCmdAboutQt - Help - Hjälp + Help + Hjälp - About &Qt - Om &Qt + About &Qt + Om &Qt - About Qt - Om Qt + About Qt + Om Qt - - + + StdCmdActivateNextWindow - Window - Fönster + Window + Fönster - Ne&xt - &Nästa + Ne&xt + &Nästa - Activate next window - Aktivera nästa fönster + Activate next window + Aktivera nästa fönster - - + + StdCmdActivatePrevWindow - Window - Fönster + Window + Fönster - Pre&vious - &Föregående + Pre&vious + &Föregående - Activate previous window - Aktivera föregående fönster + Activate previous window + Aktivera föregående fönster - - + + + StdCmdAlignment + + Edit + Redigera + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Fönster + Window + Fönster - Arrange &Icons - Arrangera &Ikoner + Arrange &Icons + Arrangera &Ikoner - Arrange Icons - Arrangera Ikoner + Arrange Icons + Arrangera Ikoner - - + + StdCmdAxisCross - Standard-View - Standardvy + Standard-View + Standardvy - Toggle axis cross - Växla axelkors + Toggle axis cross + Växla axelkors - - + + StdCmdCascadeWindows - Window - Fönster + Window + Fönster - &Cascade - &Överlappande + &Cascade + &Överlappande - Tile pragmatic - Överlappa pragmatiskt + Tile pragmatic + Överlappa pragmatiskt - - + + StdCmdCloseActiveWindow - Window - Fönster + Window + Fönster - Cl&ose - S&täng + Cl&ose + S&täng - Close active window - Stäng aktivt fönster + Close active window + Stäng aktivt fönster - - + + StdCmdCloseAllWindows - Window - Fönster + Window + Fönster - Close Al&l - Stäng a&llt + Close Al&l + Stäng a&llt - Close all windows - Stäng alla fönster + Close all windows + Stäng alla fönster - - + + StdCmdCommandLine - Tools - Verktyg + Tools + Verktyg - Start command &line... - Starta kommando&rad... + Start command &line... + Starta kommando&rad... - Opens the command line in the console - Öppnar kommandoraden i konsollen + Opens the command line in the console + Öppnar kommandoraden i konsollen - - + + StdCmdCopy - Edit - Redigera + Edit + Redigera - C&opy - K&opiera + C&opy + K&opiera - Copy operation - Kopiera operation + Copy operation + Kopiera operation - - + + StdCmdCut - Edit - Redigera + Edit + Redigera - &Cut - &Klipp ut + &Cut + &Klipp ut - Cut out - Klipp ut + Cut out + Klipp ut - - + + StdCmdDDuplicateSelection - Edit - Redigera + Edit + Redigera - Duplicate selection - Dubblerad markering + Duplicate selection + Dubblerad markering - Put duplicates of the selected objects to the active document - Lägg kopior av de markerade objekten till det aktiva dokumentet + Put duplicates of the selected objects to the active document + Lägg kopior av de markerade objekten till det aktiva dokumentet - - + + StdCmdDelete - Edit - Redigera + Edit + Redigera - &Delete - Ra&dera + &Delete + Ra&dera - Deletes the selected objects - Raderar de valda objekten + Deletes the selected objects + Raderar de valda objekten - - + + StdCmdDemoMode - Standard-View - Standardvy + Standard-View + Standardvy - View turntable... - Visa vridbord... + View turntable... + Visa vridbord... - View turntable - Visa vridbord + View turntable + Visa vridbord - - + + StdCmdDlgCustomize - Tools - Verktyg + Tools + Verktyg - Cu&stomize... - Anpa&ssa... + Cu&stomize... + Anpa&ssa... - Customize toolbars and command bars - Anpassa verktygs- och kommandorader + Customize toolbars and command bars + Anpassa verktygs- och kommandorader - - + + StdCmdDlgMacroExecute - Macros ... - Makron... + Macros ... + Makron... - Opens a dialog to let you execute a recorded macro - Öppnar en dialog som låter dig utföra ett inspelat makro + Opens a dialog to let you execute a recorded macro + Öppnar en dialog som låter dig utföra ett inspelat makro - Macro - Makro + Macro + Makro - - + + StdCmdDlgMacroExecuteDirect - Macro - Makro + Macro + Makro - Execute macro - Utför makro + Execute macro + Utför makro - Execute the macro in the editor - Kör makrot i redigeraren + Execute the macro in the editor + Kör makrot i redigeraren - - + + StdCmdDlgMacroRecord - &Macro recording ... - &Makroinspelning... + &Macro recording ... + &Makroinspelning... - Opens a dialog to record a macro - Öppnar en dialog för att spela in ett makro + Opens a dialog to record a macro + Öppnar en dialog för att spela in ett makro - Macro - Makro + Macro + Makro - - + + StdCmdDlgParameter - Tools - Verktyg + Tools + Verktyg - E&dit parameters ... - Re&digera parametrar... + E&dit parameters ... + Re&digera parametrar... - Opens a Dialog to edit the parameters - Öppnar en dialog för att redigera parametrarna + Opens a Dialog to edit the parameters + Öppnar en dialog för att redigera parametrarna - - + + StdCmdDlgPreferences - Tools - Verktyg + Tools + Verktyg - &Preferences ... - Alt&ernativ... + &Preferences ... + Alt&ernativ... - Opens a Dialog to edit the preferences - Öppnar en dialogför att redigera alternativen + Opens a Dialog to edit the preferences + Öppnar en dialogför att redigera alternativen - - + + StdCmdDockViewMenu - View - Vy + View + Vy - Vie&ws - &Vyer + Vie&ws + &Vyer - Toggles this window - Växlar detta fönster + Toggles this window + Växlar detta fönster - - + + StdCmdDrawStyle - Standard-View - Standardvy + Standard-View + Standardvy - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Redigera + + + Duplicate selection + Dubblerad markering + + + Put duplicates of the selected objects to the active document + Lägg kopior av de markerade objekten till det aktiva dokumentet + + + + StdCmdEdit + + Edit + Redigera + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Fil + File + Fil - &Export... - &Exportera... + &Export... + &Exportera... - Export an object in the active document - Exportera ett objekt i det aktiva dokumentet + Export an object in the active document + Exportera ett objekt i det aktiva dokumentet - Supported formats - Stödda format + Supported formats + Stödda format - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Verktyg + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Fil + File + Fil - &Recompute - Be&räkna om + &Recompute + Be&räkna om - Recompute feature or document - Omberäkna föremål eller dokument + Recompute feature or document + Omberäkna föremål eller dokument - - + + StdCmdFreeCADWebsite - Help - Hjälp + Help + Hjälp - FreeCAD Website - FreeCAD webbplats + FreeCAD Website + FreeCAD webbplats - The FreeCAD website - FreeCAD's webbplats + The FreeCAD website + FreeCAD's webbplats - - + + StdCmdFreezeViews - Standard-View - Standardvy + Standard-View + Standardvy - Freeze display - Frys skärmen + Freeze display + Frys skärmen - Freezes the current view position - Fryser den nuvarande vypositionen + Freezes the current view position + Fryser den nuvarande vypositionen - - + + StdCmdHideObjects - Standard-View - Standardvy + Standard-View + Standardvy - Hide all objects - Dölj alla objekt + Hide all objects + Dölj alla objekt - Hide all objects in the document - Dölj alla objekt i dokumentet + Hide all objects in the document + Dölj alla objekt i dokumentet - - + + StdCmdHideSelection - Standard-View - Standardvy + Standard-View + Standardvy - Hide selection - Dölj markering + Hide selection + Dölj markering - Hide all selected objects - Dölj alla markerade objekt + Hide all selected objects + Dölj alla markerade objekt - - + + StdCmdImport - File - Fil + File + Fil - &Import... - &Importera... + &Import... + &Importera... - Import a file in the active document - Importera en fil i det aktiva dokumentet + Import a file in the active document + Importera en fil i det aktiva dokumentet - Supported formats - Stödda format + Supported formats + Stödda format - All files (*.*) - Alla filer (*.*) + All files (*.*) + Alla filer (*.*) - - + + StdCmdMacroStartDebug - Macro - Makro + Macro + Makro - Debug macro - Felsök makro + Debug macro + Felsök makro - Start debugging of macro - Starta felsökning av makro + Start debugging of macro + Starta felsökning av makro - - + + StdCmdMacroStepOver - Macro - Makro + Macro + Makro - Step over - Stega förbi + Step over + Stega förbi - - + + StdCmdMacroStopDebug - Macro - Makro + Macro + Makro - Stop debugging - Stoppa felsökning + Stop debugging + Stoppa felsökning - Stop debugging of macro - Stoppa felsökning av makro + Stop debugging of macro + Stoppa felsökning av makro - - + + StdCmdMacroStopRecord - Macro - Makro + Macro + Makro - S&top macro recording - S&toppa makroinspelning + S&top macro recording + S&toppa makroinspelning - Stop the macro recording session - Stoppa makroinspelningssessionen + Stop the macro recording session + Stoppa makroinspelningssessionen - - + + StdCmdMeasureDistance - View - Vy + View + Vy - Measure distance - Mät avstånd + Measure distance + Mät avstånd - - + + StdCmdMeasurementSimple - Tools - Verktyg + Tools + Verktyg - Mesure distance - Mät avstånd + Mesure distance + Mät avstånd - Measures distance between two selected objects - Mäter avståndet mellan två valda objekt + Measures distance between two selected objects + Mäter avståndet mellan två valda objekt - - + + Measure distance + Mät avstånd + + + StdCmdMergeProjects - File - Fil + File + Fil - Merge project... - Sammanfoga projekt ... + Merge project... + Sammanfoga projekt ... - Merge project - Sammanfoga projekt + Merge project + Sammanfoga projekt - %1 document (*.fcstd) - %1 dokument (*.fcstd) + %1 document (*.fcstd) + %1 dokument (*.fcstd) - Cannot merge project with itself. - Kan inte slå samman projektet med sig själv. + Cannot merge project with itself. + Kan inte slå samman projektet med sig själv. - - + + StdCmdNew - File - Fil + File + Fil - &New - &Ny + &New + &Ny - Create a new empty document - Skapa ett nytt tomt dokument + Create a new empty document + Skapa ett nytt tomt dokument - - + + StdCmdOnlineHelp - Help - Hjälp + Help + Hjälp - Show help to the application - Visa hjälp för applikationen + Show help to the application + Visa hjälp för applikationen - - + + StdCmdOnlineHelpPython - Help - Hjälp + Help + Hjälp - Python Manuals - Python manualer + Python Manuals + Python manualer - Show the Python documentation - Visa Python dokumentationen + Show the Python documentation + Visa Python dokumentationen - - + + StdCmdOnlineHelpWebsite - Help - Hjälp + Help + Hjälp - Help Website - Hjälpwebbplats + Help Website + Hjälpwebbplats - The website where the help is maintained - Den webbplats där hjälp erhålls + The website where the help is maintained + Den webbplats där hjälp erhålls - - + + StdCmdOpen - File - Fil + File + Fil - &Open... - &Öppna... + &Open... + &Öppna... - Open a document or import files - Öppna ett dokument eller importera filer + Open a document or import files + Öppna ett dokument eller importera filer - Supported formats - Stödda format + Supported formats + Stödda format - All files (*.*) - Alla filer (*.*) + All files (*.*) + Alla filer (*.*) - - + + StdCmdPaste - Edit - Redigera + Edit + Redigera - &Paste - Klistra &in + &Paste + Klistra &in - Paste operation - Klistra in operation + Paste operation + Klistra in operation - - + + StdCmdPlacement - Edit - Redigera + Edit + Redigera - Placement... - Placering... + Placement... + Placering... - Place the selected objects - Placera de markerade objekten + Place the selected objects + Placera de markerade objekten - - + + StdCmdPrint - File - Fil + File + Fil - &Print... - S&kriv ut... + &Print... + S&kriv ut... - Print the document - Skriv ut dokumentet + Print the document + Skriv ut dokumentet - - + + StdCmdPrintPdf - File - Fil + File + Fil - &Export PDF... - Exportera &PDF... + &Export PDF... + Exportera &PDF... - Export the document as PDF - Exportera dokumentet som PDF + Export the document as PDF + Exportera dokumentet som PDF - - + + StdCmdPrintPreview - File - Fil + File + Fil - &Print preview... - &Förhandsgranska ... + &Print preview... + &Förhandsgranska ... - Print the document - Skriv ut dokumentet + Print the document + Skriv ut dokumentet - Print preview - Förhandsgranska + Print preview + Förhandsgranska - - + + StdCmdProjectInfo - File - Fil + File + Fil - Project i&nformation... - Projekti&nformation... + Project i&nformation... + Projekti&nformation... - Show details of the currently active project - Visar detaljer om det aktiva projektet + Show details of the currently active project + Visar detaljer om det aktiva projektet - - + + StdCmdProjectUtil - Tools - Verktyg + Tools + Verktyg - Project utility... - Projekt verktyg... + Project utility... + Projekt verktyg... - Utility to extract or create project files - Verktyg för att extrahera eller skapa projektfiler + Utility to extract or create project files + Verktyg för att extrahera eller skapa projektfiler - - + + StdCmdPythonWebsite - Help - Hjälp + Help + Hjälp - Python Website - Python webbplats + Python Website + Python webbplats - The official Python website - Den officiella Python webbplatsen + The official Python website + Den officiella Python webbplatsen - - + + StdCmdQuit - File - Fil + File + Fil - E&xit - A&vsluta + E&xit + A&vsluta - Quits the application - Avslutar applikationen + Quits the application + Avslutar applikationen - - + + StdCmdRandomColor - File - Fil + File + Fil - Random color - Slumpmässig färg + Random color + Slumpmässig färg - - + + StdCmdRecentFiles - File - Fil + File + Fil - Recent files - Nyligen öppnade filer + Recent files + Nyligen öppnade filer - Recent file list - Lista över nyligen öppnade filer + Recent file list + Lista över nyligen öppnade filer - - + + StdCmdRedo - Edit - Redigera + Edit + Redigera - &Redo - Gö&r om + &Redo + Gö&r om - Redoes a previously undone action - Gör om en tidigare ångrad aktion + Redoes a previously undone action + Gör om en tidigare ångrad aktion - - + + StdCmdRefresh - Edit - Redigera + Edit + Redigera - &Refresh - &Uppdatera + &Refresh + &Uppdatera - Recomputes the current active document - Beräknar om det aktiva dokumentet + Recomputes the current active document + Beräknar om det aktiva dokumentet - - + + StdCmdSave - File - Fil + File + Fil - &Save - &Spara + &Save + &Spara - Save the active document - Spara det aktiva dokumentet + Save the active document + Spara det aktiva dokumentet - - + + StdCmdSaveAs - File - Fil + File + Fil - Save &As... - Spara s&om... + Save &As... + Spara s&om... - Save the active document under a new file name - Sparar det aktiva dokumentet med ett nytt filnamn + Save the active document under a new file name + Sparar det aktiva dokumentet med ett nytt filnamn - - + + StdCmdSceneInspector - Tools - Verktyg + Tools + Verktyg - Scene inspector... - Sceninspektör... + Scene inspector... + Sceninspektör... - Scene inspector - Sceninspektör + Scene inspector + Sceninspektör - - + + StdCmdSelectAll - Edit - Redigera + Edit + Redigera - Select &All - Markera &allt + Select &All + Markera &allt - Select all - Markera allt + Select all + Markera allt - - + + StdCmdSetAppearance - Standard-View - Standardvy + Standard-View + Standardvy - Appearance... - Utseende... + Appearance... + Utseende... - Sets the display properties of the selected object - Ställer in det markerade objektets visningsegenskaper + Sets the display properties of the selected object + Ställer in det markerade objektets visningsegenskaper - - + + StdCmdShowObjects - Standard-View - Standardvy + Standard-View + Standardvy - Show all objects - Visa alla objekt + Show all objects + Visa alla objekt - Show all objects in the document - Visa alla objekt i dokumentet + Show all objects in the document + Visa alla objekt i dokumentet - - + + StdCmdShowSelection - Standard-View - Standardvy + Standard-View + Standardvy - Show selection - Visa markering + Show selection + Visa markering - Show all selected objects - Visa alla markerade objekt + Show all selected objects + Visa alla markerade objekt - - + + StdCmdStatusBar - View - Vy + View + Vy - Status bar - statusfält + Status bar + statusfält - Toggles the status bar - Växlar statusfältet + Toggles the status bar + Växlar statusfältet - - + + StdCmdTextureMapping - Tools - Verktyg + Tools + Verktyg - Texture mapping... - strukturmappning... + Texture mapping... + strukturmappning... - Texture mapping - strukturmappning + Texture mapping + strukturmappning - - + + StdCmdTileWindows - Window - Fönster + Window + Fönster - &Tile - &Överlappa + &Tile + &Överlappa - Tile the windows - Överlappa fönstren + Tile the windows + Överlappa fönstren - - + + StdCmdToggleBreakpoint - Macro - Makro + Macro + Makro - Toggle breakpoint - Växla brytpunkt + Toggle breakpoint + Växla brytpunkt - - + + StdCmdToggleClipPlane - Standard-View - Standardvy + Standard-View + Standardvy - Clipping plane - Klippningsplan + Clipping plane + Klippningsplan - Toggles clipping plane for active view - Växlar klippningsplan för den aktiva vyn + Toggles clipping plane for active view + Växlar klippningsplan för den aktiva vyn - - + + StdCmdToggleNavigation - Standard-View - Standardvy + Standard-View + Standardvy - Toggle navigation/Edit mode - Växla navigations/redigeringsläge + Toggle navigation/Edit mode + Växla navigations/redigeringsläge - Toggle between navigation and edit mode - Växla mellan navigering och redigeringsläge + Toggle between navigation and edit mode + Växla mellan navigering och redigeringsläge - - + + StdCmdToggleObjects - Standard-View - Standardvy + Standard-View + Standardvy - Toggle all objects - Växla alla objekt + Toggle all objects + Växla alla objekt - Toggles visibility of all objects in the active document - Växlar alla objektens synlighet i det aktiva dokumentet + Toggles visibility of all objects in the active document + Växlar alla objektens synlighet i det aktiva dokumentet - - + + StdCmdToggleSelectability - Standard-View - Standardvy + Standard-View + Standardvy - Toggle selectability - Växla Valbarhet + Toggle selectability + Växla Valbarhet - Toggles the property of the objects to get selected in the 3D-View - Växlar objektens egenskaper för att bli markerade i 3D-vyn + Toggles the property of the objects to get selected in the 3D-View + Växlar objektens egenskaper för att bli markerade i 3D-vyn - - + + StdCmdToggleVisibility - Standard-View - Standardvy + Standard-View + Standardvy - Toggle visibility - Växla synlighet + Toggle visibility + Växla synlighet - Toggles visibility - Växlar synligheten + Toggles visibility + Växlar synligheten - - + + StdCmdToolBarMenu - View - Vy + View + Vy - Tool&bars - &Verktygslådor + Tool&bars + &Verktygslådor - Toggles this window - Växlar detta fönster + Toggles this window + Växlar detta fönster - - + + StdCmdTransform - Edit - Redigera + Edit + Redigera - Transform... - Omvandla... + Transform... + Omvandla... - Transform the geometry of selected objects - Omvandla geometrin för markerade objekt + Transform the geometry of selected objects + Omvandla geometrin för markerade objekt - - + + StdCmdTreeSelection - View - Vy + View + Vy - Go to selection - Gå till markering + Go to selection + Gå till markering - Scroll to first selected item - Rulla till den först valda saken + Scroll to first selected item + Rulla till den först valda saken - - + + StdCmdUndo - Edit - Redigera + Edit + Redigera - &Undo - Ån&gra + &Undo + Ån&gra - Undo exactly one action - Ångra exakt en aktion + Undo exactly one action + Ångra exakt en aktion - - + + StdCmdUserInterface - View - Vy + View + Vy - Dock views - Docka vyer + Dock views + Docka vyer - Dock all top-level views - Docka alla toppnivå vyer + Dock all top-level views + Docka alla toppnivå vyer - - + + StdCmdViewAxo - Standard-View - Standardvy + Standard-View + Standardvy - Axometric - Axonometrisk + Axometric + Axonometrisk - Set to axometric view - Ställ in till axonometrisk vy + Set to axometric view + Ställ in till axonometrisk vy - - + + StdCmdViewBottom - Standard-View - Standardvy + Standard-View + Standardvy - Bottom - Botten + Bottom + Botten - Set to bottom view - Ställ in till bottenvy + Set to bottom view + Ställ in till bottenvy - - + + StdCmdViewCreate - Standard-View - Standardvy + Standard-View + Standardvy - Create new view - Skapa ny vy + Create new view + Skapa ny vy - Creates a new view window for the active document - Skapar ett nytt visningsfönster för det aktiva dokumentet + Creates a new view window for the active document + Skapar ett nytt visningsfönster för det aktiva dokumentet - - + + StdCmdViewExample1 - Standard-View - Standardvy + Standard-View + Standardvy - Inventor example #1 - Inventor exempel #1 + Inventor example #1 + Inventor exempel #1 - Shows a 3D texture with manipulator - Visar en 3D struktur med manipulator + Shows a 3D texture with manipulator + Visar en 3D struktur med manipulator - - + + StdCmdViewExample2 - Standard-View - Standardvy + Standard-View + Standardvy - Inventor example #2 - Inventor exempel #2 + Inventor example #2 + Inventor exempel #2 - Shows spheres and drag-lights - Visar sfärer och släpljus + Shows spheres and drag-lights + Visar sfärer och släpljus - - + + StdCmdViewExample3 - Standard-View - Standardvy + Standard-View + Standardvy - Inventor example #3 - Inventor exempel #3 + Inventor example #3 + Inventor exempel #3 - Shows a animated texture - Visar en animerad struktur + Shows a animated texture + Visar en animerad struktur - - + + StdCmdViewFitAll - Standard-View - Standardvy + Standard-View + Standardvy - Fit all - Passa allt + Fit all + Passa allt - Fits the whole content on the screen - Anpassar så allt får plats på skärmen + Fits the whole content on the screen + Anpassar så allt får plats på skärmen - - + + StdCmdViewFitSelection - Standard-View - Standardvy + Standard-View + Standardvy - Fit selection - Passa markering + Fit selection + Passa markering - Fits the selected content on the screen - Anpassar det markerade innehållet på skärmen + Fits the selected content on the screen + Anpassar det markerade innehållet på skärmen - - + + StdCmdViewFront - Standard-View - Standardvy + Standard-View + Standardvy - Front - Front + Front + Front - Set to front view - Ställ in till frontvy + Set to front view + Ställ in till frontvy - - + + StdCmdViewIvIssueCamPos - Standard-View - Standardvy + Standard-View + Standardvy - Issue camera position - Tilldela kameraposition + Issue camera position + Tilldela kameraposition - Issue the camera position to the console and to a macro, to easily recall this position - Tilldela kamerapositionen till konsolen och till ett makro, för att lätt återkalla denna position + Issue the camera position to the console and to a macro, to easily recall this position + Tilldela kamerapositionen till konsolen och till ett makro, för att lätt återkalla denna position - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Standardvy + Standard-View + Standardvy - Stereo Interleaved Columns - Stereo interfolierade kolumner + Stereo Interleaved Columns + Stereo interfolierade kolumner - Switch stereo viewing to Interleaved Columns - Växla stereovisning till interfolierade kolumner + Switch stereo viewing to Interleaved Columns + Växla stereovisning till interfolierade kolumner - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Standardvy + Standard-View + Standardvy - Stereo Interleaved Rows - Stereo interfolierade rader + Stereo Interleaved Rows + Stereo interfolierade rader - Switch stereo viewing to Interleaved Rows - Växla stereovisning till interfolierade rader + Switch stereo viewing to Interleaved Rows + Växla stereovisning till interfolierade rader - - + + StdCmdViewIvStereoOff - Standard-View - Standardvy + Standard-View + Standardvy - Stereo Off - Stereo av + Stereo Off + Stereo av - Switch stereo viewing off - Stänger av stereovisning + Switch stereo viewing off + Stänger av stereovisning - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Standardvy + Standard-View + Standardvy - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Växla stereovisning till quad buffer + Switch stereo viewing to quad buffer + Växla stereovisning till quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Standardvy + Standard-View + Standardvy - Stereo red/green - Stereo röd/grön + Stereo red/green + Stereo röd/grön - Switch stereo viewing to red/green - Ändra stereovisning till röd/grön + Switch stereo viewing to red/green + Ändra stereovisning till röd/grön - - + + StdCmdViewLeft - Standard-View - Standardvy + Standard-View + Standardvy - Left - Vänster + Left + Vänster - Set to left view - Ställ in till vänstervy + Set to left view + Ställ in till vänstervy - - + + StdCmdViewRear - Standard-View - Standardvy + Standard-View + Standardvy - Rear - Bak + Rear + Bak - Set to rear view - Ställ in till bakvy + Set to rear view + Ställ in till bakvy - - + + StdCmdViewRight - Standard-View - Standardvy + Standard-View + Standardvy - Right - Höger + Right + Höger - Set to right view - Ställ in till högervy + Set to right view + Ställ in till högervy - - + + + StdCmdViewRotateLeft + + Standard-View + Standardvy + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Standardvy + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Standardvy + Standard-View + Standardvy - Top - Topp + Top + Topp - Set to top view - Ställ in till toppvy + Set to top view + Ställ in till toppvy - - + + StdCmdWhatsThis - Help - Hjälp + Help + Hjälp - &What's This? - &Förklaring? + &What's This? + &Förklaring? - What's This - Förklaring + What's This + Förklaring - - + + StdCmdWindows - Window - Fönster + Window + Fönster - &Windows... - &Fönster... + &Windows... + &Fönster... - Windows list - Fönsterlista + Windows list + Fönsterlista - - + + StdCmdWindowsMenu - Window - Fönster + Window + Fönster - Activates this window - Aktiverar detta fönster + Activates this window + Aktiverar detta fönster - - + + StdCmdWorkbench - View - Vy + View + Vy - Workbench - Arbetsbänk + Workbench + Arbetsbänk - Switch between workbenches - Växla mellan arbetsbänkar + Switch between workbenches + Växla mellan arbetsbänkar - - + + StdOrthographicCamera - Standard-View - Standardvy + Standard-View + Standardvy - Orthographic view - Ortografisk vy + Orthographic view + Ortografisk vy - Switches to orthographic view mode - Växlar till ortografiskt visningsläge + Switches to orthographic view mode + Växlar till ortografiskt visningsläge - - + + StdPerspectiveCamera - Standard-View - Standardvy + Standard-View + Standardvy - Perspective view - Perspektiv vy + Perspective view + Perspektiv vy - Switches to perspective view mode - Växlar till perspektivt visningsläge + Switches to perspective view mode + Växlar till perspektivt visningsläge - - + + StdViewBoxZoom - Standard-View - Standardvy + Standard-View + Standardvy - Box zoom - Låd zoom + Box zoom + Låd zoom - - + + StdViewDockUndockFullscreen - Standard-View - Standardvy + Standard-View + Standardvy - Document window - Dokumentfönstret + Document window + Dokumentfönstret - Display the active view either in fullscreen, in undocked or docked mode - Visa den aktiva vyn i fullskärm, i odockat eller i dockat läge + Display the active view either in fullscreen, in undocked or docked mode + Visa den aktiva vyn i fullskärm, i odockat eller i dockat läge - - + + StdViewScreenShot - Standard-View - Standardvy + Standard-View + Standardvy - Save picture... - Spara bild... + Save picture... + Spara bild... - Creates a screenshot of the active view - Ta en skärmbild på den aktiva vyn + Creates a screenshot of the active view + Ta en skärmbild på den aktiva vyn - - + + StdViewZoomIn - Standard-View - Standardvy + Standard-View + Standardvy - Zoom In - Zooma in + Zoom In + Zooma in - - + + StdViewZoomOut - Standard-View - Standardvy + Standard-View + Standardvy - Zoom Out - Zooma ut + Zoom Out + Zooma ut - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Arkiv + &File + &Arkiv - &Edit - R&edigera + &Edit + R&edigera - Standard views - Standardvyer + Standard views + Standardvyer - &Stereo - &Stereo + &Stereo + &Stereo - &Zoom - &Zoom + &Zoom + &Zoom - Visibility - Synlighet + Visibility + Synlighet - &View - &Visa + &View + &Visa - &Tools - &Verktyg + &Tools + &Verktyg - &Macro - &Makro + &Macro + &Makro - &Windows - &Fönster + &Windows + &Fönster - &On-line help - &Online hjälp + &On-line help + &Online hjälp - &Help - &Hjälp + &Help + &Hjälp - File - Fil + File + Fil - Macro - Makro + Macro + Makro - View - Vy + View + Vy - Special Ops - Special operationer + Special Ops + Special operationer - - + + testClass - test - Test + test + Test - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Skapad för Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Skapad för Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Välj stil på uppgiftspanelen + Choose the style of the Task Panel + Välj stil på uppgiftspanelen - Default - Standard + Default + Standard - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_uk.ts b/src/Gui/Language/FreeCAD_uk.ts index 5e0b27cb6..e41f2b5b8 100644 --- a/src/Gui/Language/FreeCAD_uk.ts +++ b/src/Gui/Language/FreeCAD_uk.ts @@ -1,5496 +1,5914 @@ - - + + Angle - Form - Форма + Form + Форма - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - Кут + Angle Snap + Кут - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - немає + none + немає - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + Додати + + + Remove + Видалити + + + Move up + Перемістити вгору + + + Move down + Перемістити вниз + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - Натиснути ліву кнопку миші + Press left mouse button + Натиснути ліву кнопку миші - Press SHIFT and middle mouse button - Press SHIFT and middle mouse button + Press SHIFT and middle mouse button + Press SHIFT and middle mouse button - Press middle mouse button - Натиснути середню кнопку миші + Press middle mouse button + Натиснути середню кнопку миші - Scroll middle mouse button - Прокручування середньою кнопкою миші + Scroll middle mouse button + Прокручування середньою кнопкою миші - - + + Gui::CADNavigationStyle - Press left mouse button - Натиснути ліву кнопку миші + Press left mouse button + Натиснути ліву кнопку миші - Press middle mouse button - Натиснути середню кнопку миші + Press middle mouse button + Натиснути середню кнопку миші - Press left and middle mouse button - Натиснути ліву і середню кнопку миші + Press left and middle mouse button + Натиснути ліву і середню кнопку миші - Scroll middle mouse button - Прокручування середньою кнопкою миші + Scroll middle mouse button + Прокручування середньою кнопкою миші - - + + Gui::Command - Standard - Стандартно + Standard + Стандартно - - + + Gui::ContainerDialog - &OK - &Гаразд + &OK + &Гаразд - &Cancel - &Відміна + &Cancel + &Відміна - - + + Gui::ControlSingleton - Task panel - Панель завдань + Task panel + Панель завдань - - + + Gui::Dialog::AboutApplication - About - Про + About + Про - Revision number - Номер редакції + Revision number + Номер редакції - Version - Версія + Version + Версія - OK - Гаразд + OK + Гаразд - - Про програму + + Про програму - Release date - Дата випуску + Release date + Дата випуску - Platform - Platform + Platform + Platform - License... - License... + License... + License... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - Button %1 + Button %1 + Button %1 - Out Of Range - Out Of Range + Out Of Range + Out Of Range - - + + Gui::Dialog::CommandModel - Commands - Команди + Commands + Команди - - + + Gui::Dialog::DemoMode - View Turntable - Показати програвач + View Turntable + Показати програвач - Speed - Швидкість + Speed + Швидкість - Maximum - Максимум + Maximum + Максимум - Minimum - Мінімум + Minimum + Мінімум - Fullscreen - На весь екран + Fullscreen + На весь екран - Enable timer - Увімкнути таймер + Enable timer + Увімкнути таймер - s - s + s + s - Angle - Кут + Angle + Кут + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + Грати - -90° - -90° + Stop + Стоп - Play - Грати + Close + Закрити - - Stop - Стоп - - - Close - Закрити - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - Виберіть вікно + Choose Window + Виберіть вікно - &Activate - &Активувати + &Activate + &Активувати - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Відміна + &Cancel + &Відміна - - Про програму + + Про програму - - + + Gui::Dialog::DlgActivateWindowImp - Windows - Вікна + Windows + Вікна - - + + Gui::Dialog::DlgAuthorization - Authorization - Авторизація + Authorization + Авторизація - &OK - &Гаразд + &OK + &Гаразд - &Cancel - &Відміна + &Cancel + &Відміна - Password: - Пароль: + Password: + Пароль: - User name: - Ім'я користувача: + User name: + Ім'я користувача: - - Про програму + + Про програму - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - Оберіть значок + Choose Icon + Оберіть значок - OK - Гаразд + OK + Гаразд - Cancel - Скасувати + Cancel + Скасувати - Add icons... - Add icons... + Add icons... + Add icons... - - + + Gui::Dialog::DlgCustomActions - Macros - Макроси + Macros + Макроси - Setup Custom Macros - Налаштування власних макросів + Setup Custom Macros + Налаштування власних макросів - Macro: - Макрос: + Macro: + Макрос: - ... - ... + ... + ... - Pixmap - Малюнок + Pixmap + Малюнок - Accelerator: - Прискорювач: + Accelerator: + Прискорювач: - What's this: - Що це: + What's this: + Що це: - Status text: - Статус тексту: + Status text: + Статус тексту: - Tool tip: - Підказка: + Tool tip: + Підказка: - Menu text: - Текст меню: + Menu text: + Текст меню: - Add - Додати + Add + Додати - Remove - Видалити + Remove + Видалити - Replace - Замінити + Replace + Замінити - - + + Gui::Dialog::DlgCustomActionsImp - Icons - Значки + Icons + Значки - Macros - Макроси + Macros + Макроси - No macro - Макрос відсутній + No macro + Макрос відсутній - No macros found. - Макросів не знайдено. + No macros found. + Макросів не знайдено. - Macro not found - Макрос не знайдено + Macro not found + Макрос не знайдено - Sorry, couldn't find macro file '%1'. - На жаль, не вдалось знайти файл "%1" макросу. + Sorry, couldn't find macro file '%1'. + На жаль, не вдалось знайти файл "%1" макросу. - Empty macro - Порожній макрос + Empty macro + Порожній макрос - Please specify the macro first. - Спочатку вкажіть макрос. + Please specify the macro first. + Спочатку вкажіть макрос. - Empty text - Пустий текст + Empty text + Пустий текст - Please specify the menu text first. - Спочатку вкажіть текст меню. + Please specify the menu text first. + Спочатку вкажіть текст меню. - No item selected - Нічого не вибрано + No item selected + Нічого не вибрано - Please select a macro item first. - Спочатку виберіть макрос. + Please select a macro item first. + Спочатку виберіть макрос. - - + + Gui::Dialog::DlgCustomCommands - Commands - Команди + Commands + Команди - - Про програму + + Про програму - - + + Gui::Dialog::DlgCustomCommandsImp - Category - Категорія + Category + Категорія - Icon - Піктограма + Icon + Піктограма - Command - Команда + Command + Команда - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - Клавіатура + Keyboard + Клавіатура - Description: - Опис: + Description: + Опис: - &Category: - &Категорія: + &Category: + &Категорія: - C&ommands: - К&оманди: + C&ommands: + К&оманди: - Current shortcut: - Поточні клавіатурні скорочення: + Current shortcut: + Поточні клавіатурні скорочення: - Press &new shortcut: - Натисніть нове скорочення: + Press &new shortcut: + Натисніть нове скорочення: - Currently assigned to: - Зараз призначено для: + Currently assigned to: + Зараз призначено для: - &Assign - &Призначити + &Assign + &Призначити - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - &Скинути + &Reset + &Скинути - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - Скинути все + Re&set All + Скинути все - Alt+S - Alt+S + Alt+S + Alt+S - - Про програму + + Про програму - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - Піктограма + Icon + Піктограма - Command - Команда + Command + Команда - none - немає + none + немає - Multiple defined shortcut - Визначені декілька скорочень + Multiple defined shortcut + Визначені декілька скорочень - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - Скорочення '%1' призначене більш як одній дії. Це може призвести до непередбачуваних результатів. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + Скорочення '%1' призначене більш як одній дії. Це може призвести до непередбачуваних результатів. - Already defined shortcut - Скорочення вже призначено + Already defined shortcut + Скорочення вже призначено - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - Скорочення '%1' вже призначено для '%2'. + Скорочення '%1' вже призначено для '%2'. Будь ласка оберіть інше сполучення. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - Панель інструментів + Toolbox bars + Панель інструментів - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - Панелі інструментів + Toolbars + Панелі інструментів - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Замітка:</span> Зміни вступлять в дію при наступному завантаженні відповідних інструментальних засобів</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Замітка:</span> Зміни вступлять в дію при наступному завантаженні відповідних інструментальних засобів</p></body></html> - Move right - Перемістити праворуч + Move right + Перемістити праворуч - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Переміщення обраного елемента на один рівень вниз.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Переміщення обраного елемента на один рівень вниз.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> - Move left - Перемістити ліворуч + Move left + Перемістити ліворуч - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Переміщення обраного елемента на один рівень вгору.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Переміщення обраного елемента на один рівень вгору.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> - Move down - Перемістити вниз + Move down + Перемістити вниз - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Перемістити обраний елемент вниз.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Перемістити обраний елемент вниз.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> - Move up - Перемістити вгору + Move up + Перемістити вгору - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Перемістити обраний елемент вгору.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Перемістити обраний елемент вгору.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> - New... - Новий... + New... + Новий... - Rename... - Перейменувати... + Rename... + Перейменувати... - Delete - Видалити + Delete + Видалити - Icon - Піктограма + Icon + Піктограма - Command - Команда + Command + Команда - <Separator> - <Розділювач> + <Separator> + <Розділювач> - New toolbar - Нова панель інструментів + New toolbar + Нова панель інструментів - Toolbar name: - Назва панелі: + Toolbar name: + Назва панелі: - Duplicated name - Повторення назви + Duplicated name + Повторення назви - The toolbar name '%1' is already used - Назва '%1' для панелі інструментів уже використовується + The toolbar name '%1' is already used + Назва '%1' для панелі інструментів уже використовується - Rename toolbar - Перейменувати панель + Rename toolbar + Перейменувати панель - - Про програму + + Про програму - - + + Gui::Dialog::DlgCustomizeImp - Customize - Налаштування + Customize + Налаштування - &Help - &Довідка + &Help + &Довідка - &Close - &Закрити + &Close + &Закрити - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - Spaceball + Spaceball + Spaceball - No Spaceball Present - No Spaceball Present + No Spaceball Present + No Spaceball Present - Buttons - Buttons + Buttons + Buttons - Clear - Очистити + Clear + Очистити - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - Показати властивості + Display properties + Показати властивості - Display - Відображення + Display + Відображення - Transparency: - Прозорість: + Transparency: + Прозорість: - Line width: - Ширина лінії: + Line width: + Ширина лінії: - Point size: - Розмір пункту: + Point size: + Розмір пункту: - Material - Матеріал + Material + Матеріал - ... - ... + ... + ... - Close - Закрити + Close + Закрити - Viewing mode - Режим перегляду + Viewing mode + Режим перегляду - Display mode: - Режим показу: + Display mode: + Режим показу: - Plot mode: - Plot mode: + Plot mode: + Plot mode: - - Про програму + + Про програму - Line transparency: - Прозорість лінії: + Line transparency: + Прозорість лінії: - Line color: - Колір лінії: + Line color: + Колір лінії: - Shape color: - Колір форми: + Shape color: + Колір форми: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - Редактор + Editor + Редактор - Options - Параметри + Options + Параметри - Enable line numbers - Показувати нумерацію рядків + Enable line numbers + Показувати нумерацію рядків - Enable folding - Увімкнути складання + Enable folding + Увімкнути складання - Indentation - Відступ + Indentation + Відступ - Insert spaces - Вставляти пробіли + Insert spaces + Вставляти пробіли - Tab size: - Розмір табуляції: + Tab size: + Розмір табуляції: - Indent size: - Розмір відступу: + Indent size: + Розмір відступу: - Keep tabs - Зберегти вкладки + Keep tabs + Зберегти вкладки - Display Items - Відображення елементів + Display Items + Відображення елементів - Family: - Сімейство: + Family: + Сімейство: - Size: - Розмір: + Size: + Розмір: - Preview: - Попередній перегляд: + Preview: + Попередній перегляд: - - Про програму + + Про програму - - + + Gui::Dialog::DlgGeneral - General - Загальне + General + Загальне - Start up - Запуск + Start up + Запуск - Enable splash screen at start up - Увімкнути заставку при запуску + Enable splash screen at start up + Увімкнути заставку при запуску - Switch to tab of report window: - Перейти на вкладку вікна звіту: + Switch to tab of report window: + Перейти на вкладку вікна звіту: - Auto load module after start up: - Автоматичне завантаження модуля після запуску: + Auto load module after start up: + Автоматичне завантаження модуля після запуску: - Language - Мова + Language + Мова - Change language: - Змінити мову: + Change language: + Змінити мову: - Main window - Головне вікно + Main window + Головне вікно - Size of recent file list - Розмір списку останніх файлів + Size of recent file list + Розмір списку останніх файлів - Window style: - Стиль вікна: + Window style: + Стиль вікна: - Size of toolbar icons: - Size of toolbar icons: + Size of toolbar icons: + Size of toolbar icons: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - Default (%1 x %1) + Default (%1 x %1) + Default (%1 x %1) - Small (%1 x %1) - Small (%1 x %1) + Small (%1 x %1) + Small (%1 x %1) - Large (%1 x %1) - Large (%1 x %1) + Large (%1 x %1) + Large (%1 x %1) - Extra large (%1 x %1) - Extra large (%1 x %1) + Extra large (%1 x %1) + Extra large (%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - Ввід + Input + Ввід - OK - Гаразд + OK + Гаразд - Cancel - Скасувати + Cancel + Скасувати - - Про програму + + Про програму - - + + Gui::Dialog::DlgInspector - Scene Inspector - Інспектор сцени + Scene Inspector + Інспектор сцени - - + + Gui::Dialog::DlgMacroExecute - Execute macro - Виконати макрос + Execute macro + Виконати макрос - Macro name: - Назва макросу: + Macro name: + Назва макросу: - Macro destination: - Призначення макросу: + Macro destination: + Призначення макросу: - Execute - Виконати + Execute + Виконати - Close - Закрити + Close + Закрити - Create - Створити + Create + Створити - Delete - Видалити + Delete + Видалити - Edit - Редагувати + Edit + Редагувати - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - Макроси + Macros + Макроси - Macro file - Файл макросу + Macro file + Файл макросу - Enter a file name, please: - Будь ласка, введіть ім'я файлу: + Enter a file name, please: + Будь ласка, введіть ім'я файлу: - Existing file - Існуючий файл + Existing file + Існуючий файл - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. Цей файл вже існує. - Delete macro - Видалити макрос + Delete macro + Видалити макрос - Do you really want to delete the macro '%1'? - Ви дійсно бажаєте видалити макрос "%1"? + Do you really want to delete the macro '%1'? + Ви дійсно бажаєте видалити макрос "%1"? - Cannot create file - Не вдається створити файл + Cannot create file + Не вдається створити файл - Creation of file '%1' failed. - Створення файлу '%1' не вдалося. + Creation of file '%1' failed. + Створення файлу '%1' не вдалося. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - Запис макросу + Macro recording + Запис макросу - Macro name: - Назва макросу: + Macro name: + Назва макросу: - Stop - Стоп + Stop + Стоп - Cancel - Скасувати + Cancel + Скасувати - Macro path: - Шлях до макросу: + Macro path: + Шлях до макросу: - ... - ... + ... + ... - Record - Запис + Record + Запис - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - Засіб запису макросу + Macro recorder + Засіб запису макросу - Specify first a place to save. - Спочатку вкажіть місце для збереження. + Specify first a place to save. + Спочатку вкажіть місце для збереження. - Existing macro - Наявні макроси + Existing macro + Наявні макроси - The macro '%1' already exists. Do you want to overwrite? - Макрос "%1" уже існує. Бажаєте замінити? + The macro '%1' already exists. Do you want to overwrite? + Макрос "%1" уже існує. Бажаєте замінити? - The macro directory doesn't exist. Please, choose another one. - Каталог макросів не існує. Будь ласка, оберіть інший. + The macro directory doesn't exist. Please, choose another one. + Каталог макросів не існує. Будь ласка, оберіть інший. - Choose macro directory - Вибрати каталог макросів + Choose macro directory + Вибрати каталог макросів - - + + Gui::Dialog::DlgMaterialProperties - Material properties - Властивості матеріалу + Material properties + Властивості матеріалу - &Close - &Закрити + &Close + &Закрити - Alt+C - Alt+C + Alt+C + Alt+C - Material - Матеріал + Material + Матеріал - Diffuse color: - Колір дифузії: + Diffuse color: + Колір дифузії: - Specular color: - Колір відбиття: + Specular color: + Колір відбиття: - Shininess: - Яскравість: + Shininess: + Яскравість: - % - % + % + % - Ambient color: - Колір оточення: + Ambient color: + Колір оточення: - - Про програму + + Про програму - Emissive color: - Колір емісії: + Emissive color: + Колір емісії: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - Он-лайн допомога + On-line help + Он-лайн допомога - Help viewer - Перегляд допомоги + Help viewer + Перегляд допомоги - Location of start page - Розташування початкової сторінки + Location of start page + Розташування початкової сторінки - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML файли (*.html *.htm) + HTML files (*.html *.htm) + HTML файли (*.html *.htm) - Access denied - Доступ заборонено + Access denied + Доступ заборонено - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - Відмовлено в доступі до '%1' + Відмовлено в доступі до '%1' Вкажіть інший каталог, будь ласка. - - + + Gui::Dialog::DlgParameter - Parameter Editor - Параметри редактора + Parameter Editor + Параметри редактора - Save to disk - Зберегти на диск + Save to disk + Зберегти на диск - Alt+C - Alt+C + Alt+C + Alt+C - &Close - &Закрити + &Close + &Закрити - - + + Gui::Dialog::DlgParameterImp - Group - Група + Group + Група - Name - Назва + Name + Назва - Type - Тип + Type + Тип - Value - Значення + Value + Значення - User parameter - Параметри користувача + User parameter + Параметри користувача - Invalid input - Некоректний ввід + Invalid input + Некоректний ввід - Invalid key name '%1' - Невірне ім'я ключа '%1' + Invalid key name '%1' + Невірне ім'я ключа '%1' - System parameter - Системні параметри + System parameter + Системні параметри - - + + Gui::Dialog::DlgPreferences - Preferences - Налаштування + Preferences + Налаштування - &Help - &Довідка + &Help + &Довідка - Alt+H - Alt+H + Alt+H + Alt+H - &OK - &Гаразд + &OK + &Гаразд - &Apply - Застосувати + &Apply + Застосувати - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - &Відміна + &Cancel + &Відміна - - Про програму + + Про програму - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - Неправильний параметр + Wrong parameter + Неправильний параметр - - + + Gui::Dialog::DlgProjectInformation - Project information - Інформація про проект + Project information + Інформація про проект - Information - Інформація + Information + Інформація - &Name: - Назва: + &Name: + Назва: - Commen&t: - Коментар: + Commen&t: + Коментар: - Path: - Шлях: + Path: + Шлях: - &Last modified by: - І останні зміни внесені: + &Last modified by: + І останні зміни внесені: - Created &by: - Створено: + Created &by: + Створено: - Com&pany: - Компанія: + Com&pany: + Компанія: - Last &modification date: - Дата останньої зміни: + Last &modification date: + Дата останньої зміни: - Creation &date: - Дата створення: + Creation &date: + Дата створення: - &OK - &Гаразд + &OK + &Гаразд - &Cancel - &Відміна + &Cancel + &Відміна - - Про програму + + Про програму - - + + Gui::Dialog::DlgProjectUtility - Project utility - Project utility + Project utility + Project utility - Extract project - Extract project + Extract project + Extract project - Source - Source + Source + Source - Project file (*.fcstd) - Project file (*.fcstd) + Project file (*.fcstd) + Project file (*.fcstd) - Destination - Destination + Destination + Destination - Extract - Extract + Extract + Extract - Create project - Create project + Create project + Create project - Document.xml - Document.xml + Document.xml + Document.xml - Create - Створити + Create + Створити - Load project file after creation - Load project file after creation + Load project file after creation + Load project file after creation - Empty source - Empty source + Empty source + Empty source - No source is defined. - No source is defined. + No source is defined. + No source is defined. - Empty destination - Empty destination + Empty destination + Empty destination - No destination is defined. - No destination is defined. + No destination is defined. + No destination is defined. - - + + Gui::Dialog::DlgReportView - Output window - Вікно виводу + Output window + Вікно виводу - Output - Вивід + Output + Вивід - Record log messages - Запис повідомлень журналу (log) + Record log messages + Запис повідомлень журналу (log) - Record warnings - Запис попереджень + Record warnings + Запис попереджень - Record error messages - Запис повідомлень про помилки + Record error messages + Запис повідомлень про помилки - Colors - Кольори + Colors + Кольори - Normal messages: - Звичайні повідомлення: + Normal messages: + Звичайні повідомлення: - Log messages: - Повідомлення журналу: + Log messages: + Повідомлення журналу: - Warnings: - Попередження: + Warnings: + Попередження: - Errors: - Помилки: + Errors: + Помилки: - - Про програму + + Про програму - Redirect internal Python errors to report view - Redirect internal Python errors to report view + Redirect internal Python errors to report view + Redirect internal Python errors to report view - Redirect internal Python output to report view - Redirect internal Python output to report view + Redirect internal Python output to report view + Redirect internal Python output to report view - - + + Gui::Dialog::DlgRunExternal - Running external program - Запуск зовнішньої програми + Running external program + Запуск зовнішньої програми - TextLabel - ТекстовийНадпис + TextLabel + ТекстовийНадпис - Advanced >> - Додатково >> + Advanced >> + Додатково >> - ... - ... + ... + ... - Accept changes - Прийняти зміни + Accept changes + Прийняти зміни - Discard changes - Скасувати зміни + Discard changes + Скасувати зміни - Abort program - Перервати програму + Abort program + Перервати програму - Help - Довідка + Help + Довідка - Select a file - Виберіть файл + Select a file + Виберіть файл - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D вигляд + 3D View + 3D вигляд - 3D View settings - Налаштування 3D вигляду + 3D View settings + Налаштування 3D вигляду - Show coordinate system in the corner - Показувати систему координат в кутку + Show coordinate system in the corner + Показувати систему координат в кутку - Show counter of frames per second - Показувати кількість кадрів в секунду + Show counter of frames per second + Показувати кількість кадрів в секунду - Enable animation - Увімкнути анімацію + Enable animation + Увімкнути анімацію - Enable anti-aliasing (slower) - Включити згладжування (сповільнення роботи) + Enable anti-aliasing (slower) + Включити згладжування (сповільнення роботи) - Eye to eye distance for stereo modes: - Відстань між точками огляду: + Eye to eye distance for stereo modes: + Відстань між точками огляду: - Camera type - Тип камери + Camera type + Тип камери - Orthographic rendering - Ортогональна візуалізація + Orthographic rendering + Ортогональна візуалізація - Perspective rendering - Візуалізація в перспективі + Perspective rendering + Візуалізація в перспективі - - Про програму + + Про програму - 3D Navigation - 3D Навігація + 3D Navigation + 3D Навігація - Mouse... - Мишка... + Mouse... + Мишка... - Intensity of backlight - Інтенсивність підсвітки + Intensity of backlight + Інтенсивність підсвітки - Enable backlight color - Увімкнути колір підсвітки + Enable backlight color + Увімкнути колір підсвітки - Orbit style - Orbit style + Orbit style + Orbit style - Turntable - Turntable + Turntable + Turntable - Trackball - Trackball + Trackball + Trackball - Invert zoom - Invert zoom + Invert zoom + Invert zoom - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 навігація + %1 navigation + %1 навігація - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - Колірна модель + Color model + Колірна модель - &Gradient: - &Градієнт: + &Gradient: + &Градієнт: - red-yellow-green-cyan-blue - червоний-жовтий-зелений-блакитний-синій + red-yellow-green-cyan-blue + червоний-жовтий-зелений-блакитний-синій - blue-cyan-green-yellow-red - синій-блакитний-зелений-жовтий-червоний + blue-cyan-green-yellow-red + синій-блакитний-зелений-жовтий-червоний - white-black - білий-чорний + white-black + білий-чорний - black-white - чорний-білий + black-white + чорний-білий - Visibility - Видимість + Visibility + Видимість - Out g&rayed - З сірого + Out g&rayed + З сірого - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - З прозорого + Out &invisible + З прозорого - Alt+I - Alt+I + Alt+I + Alt+I - Style - Стиль + Style + Стиль - &Zero - &Нуль + &Zero + &Нуль - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - &Потік + &Flow + &Потік - Alt+F - Alt+F + Alt+F + Alt+F - &OK - &Гаразд + &OK + &Гаразд - &Cancel - &Відміна + &Cancel + &Відміна - Parameter range - Значення діапазону + Parameter range + Значення діапазону - Mi&nimum: - Мінімум: + Mi&nimum: + Мінімум: - Ma&ximum: - Максимум: + Ma&ximum: + Максимум: - &Labels: - &Позначки: + &Labels: + &Позначки: - &Decimals: - &Десяткові: + &Decimals: + &Десяткові: - - Про програму + + Про програму - Color-gradient settings - Налаштування кольору градієнта + Color-gradient settings + Налаштування кольору градієнта - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - Неправильний параметр + Wrong parameter + Неправильний параметр - The maximum value must be higher than the minimum value. - Максимальне значення має бути вище, ніж мінімальне значення. + The maximum value must be higher than the minimum value. + Максимальне значення має бути вище, ніж мінімальне значення. - - + + Gui::Dialog::DlgSettingsDocument - Document - Документ + Document + Документ - General - Загальне + General + Загальне - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - Рівень стиснення документу + Рівень стиснення документу (0 = немає, 9 = високий, 3 = за замовчуванням) - Create new document at start up - Створення нового документа при запуску + Create new document at start up + Створення нового документа при запуску - Storage - Сховище + Storage + Сховище - Saving transactions (Auto-save) - Збереження операцій (Автозбереження) + Saving transactions (Auto-save) + Збереження операцій (Автозбереження) - Discard saved transaction after saving document - Очищати збережені операції після збереження документа + Discard saved transaction after saving document + Очищати збережені операції після збереження документа - Save thumbnail into project file when saving document - Зберегти мініатюру у файл проекту при збереженні документа + Save thumbnail into project file when saving document + Зберегти мініатюру у файл проекту при збереженні документа - Create up to backup files when resaving document - Створення резервної копії файлів під час повторного збереження документу + Create up to backup files when resaving document + Створення резервної копії файлів під час повторного збереження документу - Document objects - Об'єкти документу + Document objects + Об'єкти документу - Allow duplicate object labels in one document - Дозволити дублювання підписів для об'єктів в одному документі + Allow duplicate object labels in one document + Дозволити дублювання підписів для об'єктів в одному документі - Maximum Undo/Redo steps - Maximum Undo/Redo steps + Maximum Undo/Redo steps + Maximum Undo/Redo steps - Using Undo/Redo on documents - Using Undo/Redo on documents + Using Undo/Redo on documents + Using Undo/Redo on documents - - + + Gui::Dialog::DlgSettingsEditorImp - Text - Текст + Text + Текст - Bookmark - Закладка + Bookmark + Закладка - Breakpoint - Точка зупинки + Breakpoint + Точка зупинки - Keyword - Ключове слово + Keyword + Ключове слово - Comment - Коментар + Comment + Коментар - Block comment - Блок коментаря + Block comment + Блок коментаря - Number - Число + Number + Число - String - Рядок + String + Рядок - Character - Символ + Character + Символ - Class name - Назва класу + Class name + Назва класу - Define name - Вказати назву + Define name + Вказати назву - Operator - Оператор + Operator + Оператор - Python output - Вивід Python + Python output + Вивід Python - Python error - Помилка Python + Python error + Помилка Python - Items - Елементи + Items + Елементи - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - Параметри зображення + Image settings + Параметри зображення - Image properties - Властивості зображення + Image properties + Властивості зображення - Back&ground: - Фон: + Back&ground: + Фон: - Current - Поточне + Current + Поточне - White - Білий + White + Білий - Black - Чорний + Black + Чорний - Transparent - Прозорість + Transparent + Прозорість - Image dimensions - Розміри зображення + Image dimensions + Розміри зображення - Pixel - Піксель + Pixel + Піксель - &Width: - Ширина: + &Width: + Ширина: - Current screen - Поточний екран + Current screen + Поточний екран - Icon 32 x 32 - Іконка 32 х 32 + Icon 32 x 32 + Іконка 32 х 32 - Icon 64 x 64 - Іконка 64 х 64 + Icon 64 x 64 + Іконка 64 х 64 - Icon 128 x 128 - Іконка 128 х 128 + Icon 128 x 128 + Іконка 128 х 128 - CGA 320 x 200 - CGA 320 x 200 + CGA 320 x 200 + CGA 320 x 200 - QVGA 320 x 240 - QVGA 320 x 240 + QVGA 320 x 240 + QVGA 320 x 240 - VGA 640 x 480 - VGA 640 x 480 + VGA 640 x 480 + VGA 640 x 480 - NTSC 720 x 480 - NTSC 720 x 480 + NTSC 720 x 480 + NTSC 720 x 480 - PAL 768 x 578 - PAL 768 x 578 + PAL 768 x 578 + PAL 768 x 578 - SVGA 800 x 600 - SVGA 800 x 600 + SVGA 800 x 600 + SVGA 800 x 600 - XGA 1024 x 768 - XGA 1024 x 768 + XGA 1024 x 768 + XGA 1024 x 768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + Стандартні розміри: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + Висота: - Standard sizes: - Стандартні розміри: + Aspect ratio: + Відношення сторін: - &Height: - Висота: + &Screen + Екран - Aspect ratio: - Відношення сторін: + Alt+S + Alt+S - &Screen - Екран + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + Коментар до зображення - Alt+1 - Alt+1 + Insert MIBA + Вставити MIBA - Image comment - Коментар до зображення + Insert comment + Вставити коментар - - Insert MIBA - Вставити MIBA - - - Insert comment - Вставити коментар - - - + + Gui::Dialog::DlgSettingsMacro - Macro - Макрос + Macro + Макрос - Macro recording settings - Установки запису макросів + Macro recording settings + Установки запису макросів - Logging Commands - Ведення журналу команд + Logging Commands + Ведення журналу команд - Show script commands in python console - Показувати команди сценарію в консолі Python + Show script commands in python console + Показувати команди сценарію в консолі Python - Log all commands issued by menus to file: - Реєстрація всіх команд (викликаних з допомогою меню) у файл: + Log all commands issued by menus to file: + Реєстрація всіх команд (викликаних з допомогою меню) у файл: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - Команди GUI + Gui commands + Команди GUI - Recording GUI commands - Запис команд GUI + Recording GUI commands + Запис команд GUI - Record as comment - Записати як коментар + Record as comment + Записати як коментар - Macro path - Шлях до макросу + Macro path + Шлях до макросу - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - Одиниці + Units + Одиниці - Units settings - Налаштування одиниць + Units settings + Налаштування одиниць - Standard (mm/kg/s/degree) - Стандарт (мм/кг/с/град) + Standard (mm/kg/s/degree) + Стандарт (мм/кг/с/град) - MKS (m/kg/s/degree) - МКС (м/кг/с/град) + MKS (m/kg/s/degree) + МКС (м/кг/с/град) - Magnitude - Величина + Magnitude + Величина - Unit - Одиниця + Unit + Одиниця - User system: - Користувач системи: + User system: + Користувач системи: - Imperial (in/lb) - Імперська (in/lb) + Imperial (in/lb) + Імперська (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - Кольори + Colors + Кольори - Selection - Вибір + Selection + Вибір - Enable selection highlighting - Увімкнути підсвічування виділеного + Enable selection highlighting + Увімкнути підсвічування виділеного - Enable preselection highlighting - Увімкнути підсвічування виділеного + Enable preselection highlighting + Увімкнути підсвічування виділеного - Background color - Колір фону + Background color + Колір фону - Middle color - Середній колір + Middle color + Середній колір - Color gradient - Градієнт кольору + Color gradient + Градієнт кольору - Simple color - Прості кольори + Simple color + Прості кольори - Default colors - Default colors + Default colors + Default colors - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - Construction geometry + Construction geometry + Construction geometry - Fully constrained geometry - Fully constrained geometry + Fully constrained geometry + Fully constrained geometry - The color of construction geometry in editmode - The color of construction geometry in editmode + The color of construction geometry in editmode + The color of construction geometry in editmode - The color of fully constrained geometry in editmode - The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode + The color of fully constrained geometry in editmode - The color of vertices being edited - The color of vertices being edited + The color of vertices being edited + The color of vertices being edited - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - Порада дня + Tip of the day + Порада дня - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">Чи знаєте Ви ...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Чи знаєте Ви ...</font></font></b> - &Show tips at start up - &Показувати поради при запуску + &Show tips at start up + &Показувати поради при запуску - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - &Наступна порада + &Next Tip + &Наступна порада - Alt+N - Alt+N + Alt+N + Alt+N - &Close - &Закрити + &Close + &Закрити - Alt+C - Alt+C + Alt+C + Alt+C - - Про програму + + Про програму - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - Помилка під час завантаження: %1 + Помилка під час завантаження: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - Якщо Ви бажаєте дізнатися більше про FreeCAD слід перейти до %1 або натиснути пункт Довідка в Меню довідки. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + Якщо Ви бажаєте дізнатися більше про FreeCAD слід перейти до %1 або натиснути пункт Довідка в Меню довідки. - - + + Gui::Dialog::DockablePlacement - Placement - Розташування + Placement + Розташування - - + + Gui::Dialog::DownloadDialog - Canceled. - Canceled. + Canceled. + Canceled. - - + + Download + + + + Cancel + Скасувати + + + Close + Закрити + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + Помилка завантаження: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - Add icon + Add icon + Add icon - - + + Gui::Dialog::InputVector - Input vector - Вхідний вектор + Input vector + Вхідний вектор - Vector - Вектор + Vector + Вектор - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - Гаразд + OK + Гаразд - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - Кнопки мишки + Mouse buttons + Кнопки мишки - Configuration - Налаштування + Configuration + Налаштування - Selection: - Вибір: + Selection: + Вибір: - Panning - Панорамування + Panning + Панорамування - Rotation: - Обертання: + Rotation: + Обертання: - Zooming: - Масштабування: + Zooming: + Масштабування: - - + + Gui::Dialog::ParameterGroup - Expand - Розгорнути + Expand + Розгорнути - Add sub-group - Додати підгрупу + Add sub-group + Додати підгрупу - Remove group - Видалити групу + Remove group + Видалити групу - Rename group - Перейменувати групу + Rename group + Перейменувати групу - Export parameter - Параметри експорту + Export parameter + Параметри експорту - Import parameter - Параметр імпорту + Import parameter + Параметр імпорту - Collapse - Згорнути + Collapse + Згорнути - Do really want to remove this parameter group? - Дійсно бажаєте видалити групу параметрів ? + Do really want to remove this parameter group? + Дійсно бажаєте видалити групу параметрів ? - Existing sub-group - Існуючі підгрупи + Existing sub-group + Існуючі підгрупи - The sub-group '%1' already exists. - Підгрупа "%1" вже існує. + The sub-group '%1' already exists. + Підгрупа "%1" вже існує. - Export parameter to file - Експорт параметрів до файлу + Export parameter to file + Експорт параметрів до файлу - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - Імпорт параметрів з файлу + Import parameter from file + Імпорт параметрів з файлу - Import Error - Помилка імпорту + Import Error + Помилка імпорту - Reading from '%1' failed. - Помилка читання з '%1'. + Reading from '%1' failed. + Помилка читання з '%1'. - - + + Gui::Dialog::ParameterValue - Change value - Змінити значення + Change value + Змінити значення - Remove key - Видалити ключ + Remove key + Видалити ключ - Rename key - Перейменувати ключ + Rename key + Перейменувати ключ - New - Новий + New + Новий - New string item - Новий рядок елементу + New string item + Новий рядок елементу - New float item - New float item + New float item + New float item - New integer item - Новий елемент, ціле число + New integer item + Новий елемент, ціле число - New unsigned item - Новий непідписаний елемент + New unsigned item + Новий непідписаний елемент - New Boolean item - Новий логічний елемент + New Boolean item + Новий логічний елемент - Existing item - Існуючий елемент + Existing item + Існуючий елемент - The item '%1' already exists. - Елемент '%1' вже існує. + The item '%1' already exists. + Елемент '%1' вже існує. - - + + Gui::Dialog::Placement - Placement - Розташування + Placement + Розташування - OK - Гаразд + OK + Гаразд - Translation: - Переміщення: + Translation: + Переміщення: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - Обертання: + Rotation: + Обертання: - Angle: - Кут: + Angle: + Кут: - Axis: - Вісь: + Axis: + Вісь: - Center: - Центр: + Center: + Центр: - Pitch: - Крок: + Pitch: + Крок: - Roll: - Кинути: + Roll: + Кинути: - Yaw: - Відхилення: + Yaw: + Відхилення: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - Кути Ейлера + Euler angles + Кути Ейлера - Apply placement changes immediately - Apply placement changes immediately + Apply placement changes immediately + Apply placement changes immediately - Apply incremental changes to object placement - Apply incremental changes to object placement + Apply incremental changes to object placement + Apply incremental changes to object placement - Apply - Застосувати + Apply + Застосувати - Reset - Скинути + Reset + Скинути - Close - Закрити + Close + Закрити - - + + Gui::Dialog::PrintModel - Button - Button + Button + Button - Command - Команда + Command + Команда - - + + Gui::Dialog::SceneInspector - Dialog - Діалогове вікно + Dialog + Діалогове вікно - Close - Закрити + Close + Закрити - Refresh - Оновити + Refresh + Оновити - - + + Gui::Dialog::SceneModel - Inventor Tree - Винахідник дерева + Inventor Tree + Винахідник дерева - Nodes - Вузли + Nodes + Вузли - - + + Gui::Dialog::TextureMapping - Texture - Текстура + Texture + Текстура - Texture mapping - Текстури + Texture mapping + Текстури - Global - Глобальна + Global + Глобальна - Environment - Середовище + Environment + Середовище - Image files (%1) - Файли зображень (%1) + Image files (%1) + Файли зображень (%1) - No image - Зображення відсутнє + No image + Зображення відсутнє - The specified file is not a valid image file. - Вказаний файл не є допустимим файлом зображення. + The specified file is not a valid image file. + Вказаний файл не є допустимим файлом зображення. - No 3d view - 3d вигляд відсутній + No 3d view + 3d вигляд відсутній - No active 3d view found. - Не знайдено активного 3d вигляду. + No active 3d view found. + Не знайдено активного 3d вигляду. - - + + Gui::Dialog::Transform - Cancel - Скасувати + Cancel + Скасувати - Transform - Перетворення + Transform + Перетворення - - + + Gui::DlgTreeWidget - Dialog - Діалогове вікно + Dialog + Діалогове вікно - Items - Елементи + Items + Елементи - OK - Гаразд + OK + Гаразд - Cancel - Скасувати + Cancel + Скасувати - - Про програму + + Про програму - - + + Gui::DockWnd::CombiView - CombiView - КомбінованийВигляд + CombiView + КомбінованийВигляд - Project - Проект + Project + Проект - Tasks - Завдання + Tasks + Завдання - - + + Gui::DockWnd::HelpView - Previous - Назад + Previous + Назад - Next - Вперед + Next + Вперед - Home - Додому + Home + Додому - Open - Відкрити + Open + Відкрити - Open file - Відкрити файл + Open file + Відкрити файл - All HTML files (*.html *.htm) - Всі HTML-файли (*.HTML *.HTM) + All HTML files (*.html *.htm) + Всі HTML-файли (*.HTML *.HTM) - External browser - Зовнішній браузер + External browser + Зовнішній браузер - No external browser found. Specify in preferences, please - Не знайдено зовнішній браузер. Вкажіть його в настройках, будь ласка, + No external browser found. Specify in preferences, please + Не знайдено зовнішній браузер. Вкажіть його в настройках, будь ласка, - Starting of %1 failed - Старт з %1 не вдався + Starting of %1 failed + Старт з %1 не вдався - - + + Gui::DockWnd::PropertyDockView - Property View - Перегляд властивостей + Property View + Перегляд властивостей - - + + Gui::DockWnd::ReportOutput - Logging - Ведення журналу + Logging + Ведення журналу - Warning - Попередження + Warning + Попередження - Error - Помилка + Error + Помилка - Options - Параметри + Options + Параметри - Clear - Очистити + Clear + Очистити - Save As... - Зберегти як... + Save As... + Зберегти як... - Save Report Output - Зберегти звіт + Save Report Output + Зберегти звіт - Plain Text Files (*.txt *.log) - Текстові файли (*.txt *.log) + Plain Text Files (*.txt *.log) + Текстові файли (*.txt *.log) - Go to end - Перейти в кінець + Go to end + Перейти в кінець - Redirect Python output - Redirect Python output + Redirect Python output + Redirect Python output - Redirect Python errors - Перенаправлення помилок Python + Redirect Python errors + Перенаправлення помилок Python - - + + Gui::DockWnd::ReportView - Output - Вивід + Output + Вивід - Python console - Консоль python + Python console + Консоль python - - + + Gui::DockWnd::SelectionView - Property View - Перегляд властивостей + Property View + Перегляд властивостей - - + + Gui::DockWnd::TaskPanelView - Task View - Вигляд завдання + Task View + Вигляд завдання - - + + Gui::DockWnd::TextBrowser - Could not open file. - Неможливо відкрити файл. + Could not open file. + Неможливо відкрити файл. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - Ви спробували отримати доступ до адреси %1, яка в даний час недоступна. Будь ласка, переконайтеся, що URL-адреса існує і спробуйте перезавантажити сторінку. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + Ви спробували отримати доступ до адреси %1, яка в даний час недоступна. Будь ласка, переконайтеся, що URL-адреса існує і спробуйте перезавантажити сторінку. - Connecting to %1 - З'єднання з %1 + Connecting to %1 + З'єднання з %1 - Sending to %1 - Надсилання до %1 + Sending to %1 + Надсилання до %1 - Reading from %1 - Читання з %1 + Reading from %1 + Читання з %1 - Download failed: %1. - Помилка завантаження: %1. + Download failed: %1. + Помилка завантаження: %1. - Previous - Назад + Previous + Назад - Forward - Далі + Forward + Далі - Home - Додому + Home + Додому - Refresh - Оновити + Refresh + Оновити - Copy - Копіювати + Copy + Копіювати - Select all - Виділити все + Select all + Виділити все - No description for - Нема опису для + No description for + Нема опису для - - + + Gui::DocumentModel - Application - Програма + Application + Програма - Labels & Attributes - Етикетки та атрибути + Labels & Attributes + Етикетки та атрибути - - + + Gui::EditorView - Modified file - Змінений файл + Modified file + Змінений файл - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. Файл було змінено поза редактором. Бажаєте перезавантаити його? - Unsaved document - Незбережений документ + Unsaved document + Незбережений документ - The document has been modified. + The document has been modified. Do you want to save your changes? - Документ було змінено. + Документ було змінено. Бажаєте зберегти внесені зміни? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD макрос (*.FCMacro);;Python (*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD макрос (*.FCMacro);;Python (*.py) - Export PDF - Експорт в PDF + Export PDF + Експорт в PDF - PDF file (*.pdf) - Файл PDF (*.pdf) + PDF file (*.pdf) + Файл PDF (*.pdf) - untitled[*] - без імені [*] + untitled[*] + без імені [*] - - Editor - - Редактор + - Editor + - Редактор - %1 chars removed - %1 символів видалено + %1 chars removed + %1 символів видалено - %1 chars added - %1 символів додано + %1 chars added + %1 символів додано - Formatted - Форматований + Formatted + Форматований - - + + Gui::FileChooser - Select a file - Виберіть файл + Select a file + Виберіть файл - Select a directory - Виберіть каталог + Select a directory + Виберіть каталог - - + + Gui::FileDialog - Save as - Зберегти як + Save as + Зберегти як - Open - Відкрити + Open + Відкрити - - + + Gui::FileOptionsDialog - Extended - Розширений + Extended + Розширений - All files (*.*) - Усі файли (*.*) + All files (*.*) + Усі файли (*.*) - - + + Gui::Flag - Top left - Вгорі ліворуч + Top left + Вгорі ліворуч - Bottom left - Внизу ліворуч + Bottom left + Внизу ліворуч - Top right - Вгорі праворуч + Top right + Вгорі праворуч - Bottom right - Внизу праворуч + Bottom right + Внизу праворуч - Remove - Видалити + Remove + Видалити - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - Натисніть CTRL та ліву кнопку миші + Press CTRL and left mouse button + Натисніть CTRL та ліву кнопку миші - Press middle mouse button - Натиснути середню кнопку миші + Press middle mouse button + Натиснути середню кнопку миші - Press left mouse button - Натиснути ліву кнопку миші + Press left mouse button + Натиснути ліву кнопку миші - Scroll middle mouse button - Прокручування середньою кнопкою миші + Scroll middle mouse button + Прокручування середньою кнопкою миші - - + + Gui::LocationDialog - Wrong direction - Неправильний напрямок + Wrong direction + Неправильний напрямок - Direction must not be the null vector - Напрям не може мати нульовий вектор + Direction must not be the null vector + Напрям не може мати нульовий вектор - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - Визначено користувачем... + User defined... + Визначено користувачем... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - Макроси + Macros + Макроси - - + + Gui::MainWindow - Dimension - Розмірність + Dimension + Розмірність - Ready - Готово + Ready + Готово - Toggles this toolbar - Переключення цієї панелі + Toggles this toolbar + Переключення цієї панелі - Toggles this dockable window - Переключення цього закріплюваного вікна + Toggles this dockable window + Переключення цього закріплюваного вікна - Close All - Закрити все + Close All + Закрити все - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - Завантаження розпочато... + Завантаження розпочато... - - + + Gui::ProgressBar - Remaining: %1 - Залишилося:%1 + Remaining: %1 + Залишилося:%1 - Aborting - Переривання + Aborting + Переривання - Do you really want to abort the operation? - Ви дійсно бажаєте перервати операцію? + Do you really want to abort the operation? + Ви дійсно бажаєте перервати операцію? - - + + Gui::ProgressDialog - Remaining: %1 - Залишилося:%1 + Remaining: %1 + Залишилося:%1 - Aborting - Переривання + Aborting + Переривання - Do you really want to abort the operation? - Ви дійсно бажаєте перервати операцію? + Do you really want to abort the operation? + Ви дійсно бажаєте перервати операцію? - - + + Gui::PropertyEditor::PropertyModel - Property - Властивість + Property + Властивість - Value - Значення + Value + Значення - - + + Gui::PropertyView - View - Вигляд + View + Вигляд - Data - Дані + Data + Дані - - + + Gui::PythonConsole - System exit - Вихід із системи + System exit + Вихід із системи - The application is still running. + The application is still running. Do you want to exit without saving your data? - Програма, досі працює. + Програма, досі працює. Бажаєте вийти без збереження даних? - Python console - Консоль python + Python console + Консоль python - Unhandled PyCXX exception. - Необроблене виключення PyCXX. + Unhandled PyCXX exception. + Необроблене виключення PyCXX. - Unhandled FreeCAD exception. - Необроблене виключення FreeCAD. + Unhandled FreeCAD exception. + Необроблене виключення FreeCAD. - Unhandled unknown C++ exception. - Необроблений невідомий виняток C++. + Unhandled unknown C++ exception. + Необроблений невідомий виняток C++. - &Copy command - &Копіювати команду + &Copy command + &Копіювати команду - &Copy history - &Копіювати історію + &Copy history + &Копіювати історію - Save history as... - Зберегти історію як... + Save history as... + Зберегти історію як... - Insert file name... - Введіть ім'я файлу ... + Insert file name... + Введіть ім'я файлу ... - Save History - Зберегти історію + Save History + Зберегти історію - Macro Files (*.FCMacro *.py) - Файли макросів (*.FCMacro *.ру) + Macro Files (*.FCMacro *.py) + Файли макросів (*.FCMacro *.ру) - Insert file name - Введіть ім'я файлу + Insert file name + Введіть ім'я файлу - All Files (*.*) - Всі файли (*.*) + All Files (*.*) + Всі файли (*.*) - Python Input Dialog - Діалогове віконце вводу Python + Python Input Dialog + Діалогове віконце вводу Python - Unhandled std C++ exception. - Необроблений виняток C++. + Unhandled std C++ exception. + Необроблений виняток C++. - Word wrap - Перенесення слів + Word wrap + Перенесення слів - &Copy - &Копіювати + &Copy + &Копіювати - &Paste - &Вставити + &Paste + &Вставити - Select All - Вибрати все + Select All + Вибрати все - - + + Clear console + + + + Gui::PythonEditor - Comment - Коментар + Comment + Коментар - Uncomment - Розкоментувати + Uncomment + Розкоментувати - - + + Gui::PythonInputField - OK - Гаразд + OK + Гаразд - Clear - Очистити + Clear + Очистити - - + + Gui::RecentFilesAction - Open file %1 - Відкрити файл %1 + Open file %1 + Відкрити файл %1 - File not found - Файл не знайдено + File not found + Файл не знайдено - The file '%1' cannot be opened. - Файл '%1' не може бути відкритий. + The file '%1' cannot be opened. + Файл '%1' не може бути відкритий. - - + + Gui::SelectModule - Select module - Виберіть модуль + Select module + Виберіть модуль - Open %1 as - Відкрити %1 як + Open %1 as + Відкрити %1 як - Select - Вибрати + Select + Вибрати - - + + Gui::StdCmdDescription - Help - Довідка + Help + Довідка - Des&cription - Опис + Des&cription + Опис - Long description of commands - Детальний опис команд + Long description of commands + Детальний опис команд - - + + Gui::StdCmdDownloadOnlineHelp - Help - Довідка + Help + Довідка - Download online help - Завантажити довідку з інтернету + Download online help + Завантажити довідку з інтернету - Download %1's online help - Завантаження %1's довідки з інтернету + Download %1's online help + Завантаження %1's довідки з інтернету - Non-existing directory - Неіснуючий каталог + Non-existing directory + Неіснуючий каталог - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - Каталог '%1' не існує. + Каталог '%1' не існує. Бажаєте призначити існуючий каталог? - Missing permission - Відсутній дозвіл + Missing permission + Відсутній дозвіл - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - Ви не маєте дозволу на запис до '%1' + Ви не маєте дозволу на запис до '%1' Бажаєте вказати інший каталог? - Stop downloading - Зупинка завантаження + Stop downloading + Зупинка завантаження - - + + Gui::StdCmdPythonHelp - Tools - Інструменти + Tools + Інструменти - Python Modules - Модулі Python + Python Modules + Модулі Python - Opens a browser to show the Python modules - Відкрити браузер для перегляду модулів Python + Opens a browser to show the Python modules + Відкрити браузер для перегляду модулів Python - - + + Gui::TaskBoxAngle - Angle - Кут + Angle + Кут - - + + Gui::TaskBoxPosition - Position - Позиція + Position + Позиція - - + + Gui::TaskView::TaskAppearance - Display mode: - Режим показу: + Display mode: + Режим показу: - Plot mode: - Plot mode: + Plot mode: + Plot mode: - Point size: - Розмір пункту: + Point size: + Розмір пункту: - Line width: - Ширина лінії: + Line width: + Ширина лінії: - Transparency: - Прозорість: + Transparency: + Прозорість: - Appearance - Зовнішній вигляд + Appearance + Зовнішній вигляд - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - Редагувати + Edit + Редагувати - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - Зовнішній вигляд + Appearance + Зовнішній вигляд - ... - ... + ... + ... - edit selection - редагувати вибір + edit selection + редагувати вибір - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + Натиснути ліву кнопку миші + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - Англійська + English + Англійська - - + + Gui::TreeDockWidget - Tree view - У вигляді дерева + Tree view + У вигляді дерева - - + + Gui::TreeWidget - Create group... - Створити групу... + Create group... + Створити групу... - Create a group - Створити групу + Create a group + Створити групу - Group - Група + Group + Група - Rename - Перейменувати + Rename + Перейменувати - Rename object - Перейменувати об'єкт + Rename object + Перейменувати об'єкт - Labels & Attributes - Етикетки та атрибути + Labels & Attributes + Етикетки та атрибути - Application - Програма + Application + Програма - Finish editing - Завершити редагування + Finish editing + Завершити редагування - Finish editing object - Завершити редагування об'єкту + Finish editing object + Завершити редагування об'єкту - Activate document - Активувати документ + Activate document + Активувати документ - Activate document %1 - Активувати документ %1 + Activate document %1 + Активувати документ %1 - - + + Gui::View3DInventor - Export PDF - Експорт в PDF + Export PDF + Експорт в PDF - PDF file (*.pdf) - Файл PDF (*.pdf) + PDF file (*.pdf) + Файл PDF (*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - Оберіть '%1' робочу область + Select the '%1' workbench + Оберіть '%1' робочу область - - + + Position - Form - Форма + Form + Форма - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 мм + 0.1 mm + 0.1 мм - 0.5 mm - 0.5 мм + 0.5 mm + 0.5 мм - 1 mm - 1 мм + 1 mm + 1 мм - 2 mm - 2 мм + 2 mm + 2 мм - 5 mm - 5 мм + 5 mm + 5 мм - 10 mm - 10 мм + 10 mm + 10 мм - 20 mm - 20 мм + 20 mm + 20 мм - 50 mm - 50 мм + 50 mm + 50 мм - 100 mm - 100 мм + 100 mm + 100 мм - 200 mm - 200 мм + 200 mm + 200 мм - 500 mm - 500 мм + 500 mm + 500 мм - 1 m - 1 м + 1 m + 1 м - 2 m - 2 м + 2 m + 2 м - 5 m - 5 м + 5 m + 5 м - Grid Snap in - Захват сітки в + Grid Snap in + Захват сітки в - - + + QDockWidget - Tree view - У вигляді дерева + Tree view + У вигляді дерева - Property view - Властивості вигляду + Property view + Властивості вигляду - Selection view - Вибір вигляду + Selection view + Вибір вигляду - Report view - Вигляд звіту + Report view + Вигляд звіту - Task View - Вигляд завдання + Task View + Вигляд завдання - Combo View - Комбінований вигляд + Combo View + Комбінований вигляд - Toolbox - Панель інструментів + Toolbox + Панель інструментів - Python console - Консоль python + Python console + Консоль python - Display properties - Показати властивості + Display properties + Показати властивості - - + + QObject - General - Загальне + General + Загальне - Display - Відображення + Display + Відображення - Unknown filetype - Невідомий тип файлу + Unknown filetype + Невідомий тип файлу - Cannot open unknown filetype: %1 - Не вдається відкрити невідомий тип файлу: %1 + Cannot open unknown filetype: %1 + Не вдається відкрити невідомий тип файлу: %1 - Cannot save to unknown filetype: %1 - Не вдається зберегти в невідомий тип файлу: %1 + Cannot save to unknown filetype: %1 + Не вдається зберегти в невідомий тип файлу: %1 - Workbench failure - Крах робочої області + Workbench failure + Крах робочої області - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - Неможливо запустити Qt Assistant (%1) + Unable to launch Qt Assistant (%1) + Неможливо запустити Qt Assistant (%1) - Exception - Виняток + Exception + Виняток - Open document - Відкрити документ + Open document + Відкрити документ - Import file - Імпорт файлу + Import file + Імпорт файлу - Export file - Експорт файлу + Export file + Експорт файлу - Printing... - Друк... + Printing... + Друк... - Cannot load workbench - Не вдається завантажити робочу область + Cannot load workbench + Не вдається завантажити робочу область - A general error occurred while loading the workbench - Загальна помилка при завантаженні робочої області + A general error occurred while loading the workbench + Загальна помилка при завантаженні робочої області - File not found - Файл не знайдено + File not found + Файл не знайдено - Cannot open file %1 - Не вдається відкрити файл %1 + Cannot open file %1 + Не вдається відкрити файл %1 - Save views... - Зберегти вигляд... + Save views... + Зберегти вигляд... - Load views... - Завантажити вигляд... + Load views... + Завантажити вигляд... - Freeze view - Заморозити вигляд + Freeze view + Заморозити вигляд - Clear views - Очистити вигляд + Clear views + Очистити вигляд - Restore view &%1 - Відновити вигляд &%1 + Restore view &%1 + Відновити вигляд &%1 - Save frozen views - Зберегти заморожені вигляди + Save frozen views + Зберегти заморожені вигляди - Frozen views (*.cam) - Заморожені вигляди (*.cam) + Frozen views (*.cam) + Заморожені вигляди (*.cam) - Restore views - Відновити вигляди + Restore views + Відновити вигляди - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - При імпорті виглядів очиститься поточний вигляд. + При імпорті виглядів очиститься поточний вигляд. Бажаєте продовжити? - Restore frozen views - Відновлення заморожених виглядів + Restore frozen views + Відновлення заморожених виглядів - Cannot open file '%1'. - Не вдається відкрити файл %1. + Cannot open file '%1'. + Не вдається відкрити файл %1. - Docked - Закріплено + Docked + Закріплено - Undocked - Не закріплено + Undocked + Не закріплено - Fullscreen - На весь екран + Fullscreen + На весь екран - files - Файли + files + Файли - Save picture - Зберегти зображення + Save picture + Зберегти зображення - New sub-group - Нова підгрупа + New sub-group + Нова підгрупа - Enter the name: - Введіть назву: + Enter the name: + Введіть назву: - New text item - Новий текстовий елемент + New text item + Новий текстовий елемент - Enter your text: - Введіть текст: + Enter your text: + Введіть текст: - New integer item - Новий елемент, ціле число + New integer item + Новий елемент, ціле число - Enter your number: - Введіть номер: + Enter your number: + Введіть номер: - New unsigned item - Новий непідписаний елемент + New unsigned item + Новий непідписаний елемент - New float item - New float item + New float item + New float item - New Boolean item - Новий логічний елемент + New Boolean item + Новий логічний елемент - Choose an item: - Виберіть елемент: + Choose an item: + Виберіть елемент: - Rename group - Перейменувати групу + Rename group + Перейменувати групу - The group '%1' cannot be renamed. - Групу '%1' неможливо перейменувати. + The group '%1' cannot be renamed. + Групу '%1' неможливо перейменувати. - Existing group - Існуюча група + Existing group + Існуюча група - The group '%1' already exists. - Група '%1' вже існує. + The group '%1' already exists. + Група '%1' вже існує. - Change value - Змінити значення + Change value + Змінити значення - Save document under new filename... - Зберегти документ під новим ім'ям ... + Save document under new filename... + Зберегти документ під новим ім'ям ... - Saving aborted - Збереження перервано + Saving aborted + Збереження перервано - Unsaved document - Незбережений документ + Unsaved document + Незбережений документ - Save document before close? - Зберегти документ перед закриттям? + Save document before close? + Зберегти документ перед закриттям? - Save Macro - Зберегти макрос + Save Macro + Зберегти макрос - Finish - Завершити + Finish + Завершити - Clear - Очистити + Clear + Очистити - Cancel - Скасувати + Cancel + Скасувати - Inner - Внутрішній + Inner + Внутрішній - Outer - Зовнішній + Outer + Зовнішній - No Browser - Браузер відсутній + No Browser + Браузер відсутній - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - Не вдається відкрити браузер. + Не вдається відкрити браузер. Будь ласка, відкрийте вікно браузера та введіть адресу: http://localhost:%1. - No Server - Сервер відсутній + No Server + Сервер відсутній - Unable to start the server to port %1: %2. - Не вдалося запустити сервер з портом %1: %2. + Unable to start the server to port %1: %2. + Не вдалося запустити сервер з портом %1: %2. - Unable to open your system browser. - Не вдається відкрити Ваш системний браузер. + Unable to open your system browser. + Не вдається відкрити Ваш системний браузер. - Options... - Параметри... + Options... + Параметри... - Out of memory - Не вистачає пам'яті + Out of memory + Не вистачає пам'яті - Not enough memory available to display the data. - Недостатньо пам'яті для відображення даних. + Not enough memory available to display the data. + Недостатньо пам'яті для відображення даних. - Cannot find file %1 - Не вдається знайти файл %1 + Cannot find file %1 + Не вдається знайти файл %1 - Cannot find file %1 neither in %2 nor in %3 - Не вдається знайти файл %1 ні в %2 , ні в %3 + Cannot find file %1 neither in %2 nor in %3 + Не вдається знайти файл %1 ні в %2 , ні в %3 - Save %1 Document - Зберегти %1 документ + Save %1 Document + Зберегти %1 документ - %1 document (*.FCStd) - Документ %1 (*.FCStd) + %1 document (*.FCStd) + Документ %1 (*.FCStd) - Save As - Зберегти як + Save As + Зберегти як - %1 already exists. + %1 already exists. Do you want to replace it? - %1 вже існує. + %1 вже існує. Бажаєте замінити? - Document not closable - Документ не закривається + Document not closable + Документ не закривається - The document is not closable for the moment. - Документ не може бути закритим в даний час. + The document is not closable for the moment. + Документ не може бути закритим в даний час. - No OpenGL - Без OpenGL + No OpenGL + Без OpenGL - This system does not support OpenGL - Ця система не підтримує OpenGL + This system does not support OpenGL + Ця система не підтримує OpenGL - Help - Довідка + Help + Довідка - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - Неможливо завантажити документацію. + Неможливо завантажити документацію. Щоб завантажити це потрібно Qt 4.4 або вище. - %1 Help - %1 Довідка + %1 Help + %1 Довідка - Exporting PDF... - Експорт в PDF ... + Exporting PDF... + Експорт в PDF ... - Wrong selection - Невірний вибір + Wrong selection + Невірний вибір - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - New boolean item - Новий логічний елемент + New boolean item + Новий логічний елемент - Navigation styles - Стилі навігації + Navigation styles + Стилі навігації - %1 navigation - %1 навігація + %1 navigation + %1 навігація - Move annotation - Переміщення анотації + Move annotation + Переміщення анотації - Transform - Перетворення + Transform + Перетворення - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - - + + + StdBoxSelection + + Standard-View + Стандартні вигляди + + + Box selection + + + + StdCmdAbout - Help - Довідка + Help + Довідка - &About %1 - Про %1 + &About %1 + Про %1 - About %1 - Про %1 + About %1 + Про %1 - - + + StdCmdAboutQt - Help - Довідка + Help + Довідка - About &Qt - Про &Qt + About &Qt + Про &Qt - About Qt - Про Qt + About Qt + Про Qt - - + + StdCmdActivateNextWindow - Window - Вікно + Window + Вікно - Ne&xt - Далі + Ne&xt + Далі - Activate next window - Активувати наступне вікно + Activate next window + Активувати наступне вікно - - + + StdCmdActivatePrevWindow - Window - Вікно + Window + Вікно - Pre&vious - Назад + Pre&vious + Назад - Activate previous window - Активувати попереднє вікно + Activate previous window + Активувати попереднє вікно - - + + + StdCmdAlignment + + Edit + Редагувати + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - Вікно + Window + Вікно - Arrange &Icons - Організувати &Ікони + Arrange &Icons + Організувати &Ікони - Arrange Icons - Організувати Ікони + Arrange Icons + Організувати Ікони - - + + StdCmdAxisCross - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - Вікно + Window + Вікно - &Cascade - &Каскадом + &Cascade + &Каскадом - Tile pragmatic - Tile pragmatic + Tile pragmatic + Tile pragmatic - - + + StdCmdCloseActiveWindow - Window - Вікно + Window + Вікно - Cl&ose - Зак&рити + Cl&ose + Зак&рити - Close active window - Закрити активне вікно + Close active window + Закрити активне вікно - - + + StdCmdCloseAllWindows - Window - Вікно + Window + Вікно - Close Al&l - Закрити всі + Close Al&l + Закрити всі - Close all windows - Закрити всі вікна + Close all windows + Закрити всі вікна - - + + StdCmdCommandLine - Tools - Інструменти + Tools + Інструменти - Start command &line... - Запуск командного рядка... + Start command &line... + Запуск командного рядка... - Opens the command line in the console - Відкриття командного рядка в консолі + Opens the command line in the console + Відкриття командного рядка в консолі - - + + StdCmdCopy - Edit - Редагувати + Edit + Редагувати - C&opy - Копіювати + C&opy + Копіювати - Copy operation - Операції копіювання + Copy operation + Операції копіювання - - + + StdCmdCut - Edit - Редагувати + Edit + Редагувати - &Cut - Вирізати + &Cut + Вирізати - Cut out - Вирізати + Cut out + Вирізати - - + + StdCmdDDuplicateSelection - Edit - Редагувати + Edit + Редагувати - Duplicate selection - Дублювання виділеного + Duplicate selection + Дублювання виділеного - Put duplicates of the selected objects to the active document - Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document - - + + StdCmdDelete - Edit - Редагувати + Edit + Редагувати - &Delete - Видалити + &Delete + Видалити - Deletes the selected objects - Видаляє вибрані об'єкти + Deletes the selected objects + Видаляє вибрані об'єкти - - + + StdCmdDemoMode - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - View turntable... - Відкрити програвач ... + View turntable... + Відкрити програвач ... - View turntable - Відкрити програвач + View turntable + Відкрити програвач - - + + StdCmdDlgCustomize - Tools - Інструменти + Tools + Інструменти - Cu&stomize... - Власні установки... + Cu&stomize... + Власні установки... - Customize toolbars and command bars - Налаштування панелі інструментів та панелі команд + Customize toolbars and command bars + Налаштування панелі інструментів та панелі команд - - + + StdCmdDlgMacroExecute - Macros ... - Макроси ... + Macros ... + Макроси ... - Opens a dialog to let you execute a recorded macro - Відкриває діалогове вікно, щоб виконати записаний макрос + Opens a dialog to let you execute a recorded macro + Відкриває діалогове вікно, щоб виконати записаний макрос - Macro - Макрос + Macro + Макрос - - + + StdCmdDlgMacroExecuteDirect - Macro - Макрос + Macro + Макрос - Execute macro - Виконати макрос + Execute macro + Виконати макрос - Execute the macro in the editor - Виконати макрос у редакторі + Execute the macro in the editor + Виконати макрос у редакторі - - + + StdCmdDlgMacroRecord - &Macro recording ... - Запис макросу ... + &Macro recording ... + Запис макросу ... - Opens a dialog to record a macro - Відкриває діалогове вікно для запису макросів + Opens a dialog to record a macro + Відкриває діалогове вікно для запису макросів - Macro - Макрос + Macro + Макрос - - + + StdCmdDlgParameter - Tools - Інструменти + Tools + Інструменти - E&dit parameters ... - Редагування параметрів ... + E&dit parameters ... + Редагування параметрів ... - Opens a Dialog to edit the parameters - Відкриває діалогове вікно для зміни параметрів + Opens a Dialog to edit the parameters + Відкриває діалогове вікно для зміни параметрів - - + + StdCmdDlgPreferences - Tools - Інструменти + Tools + Інструменти - &Preferences ... - &Установки ... + &Preferences ... + &Установки ... - Opens a Dialog to edit the preferences - Відкриває діалогове вікно для зміни установок + Opens a Dialog to edit the preferences + Відкриває діалогове вікно для зміни установок - - + + StdCmdDockViewMenu - View - Вигляд + View + Вигляд - Vie&ws - Відображення + Vie&ws + Відображення - Toggles this window - Перемкнути це вікно + Toggles this window + Перемкнути це вікно - - + + StdCmdDrawStyle - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + Редагувати + + + Duplicate selection + Дублювання виділеного + + + Put duplicates of the selected objects to the active document + Put duplicates of the selected objects to the active document + + + + StdCmdEdit + + Edit + Редагувати + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - Файл + File + Файл - &Export... - &Експорт... + &Export... + &Експорт... - Export an object in the active document - Експорт об'єкта в активний документ + Export an object in the active document + Експорт об'єкта в активний документ - Supported formats - Підтримувані формати + Supported formats + Підтримувані формати - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + Інструменти + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - Файл + File + Файл - &Recompute - &Перерахувати + &Recompute + &Перерахувати - Recompute feature or document - Перерахувати функцію або документ + Recompute feature or document + Перерахувати функцію або документ - - + + StdCmdFreeCADWebsite - Help - Довідка + Help + Довідка - FreeCAD Website - Сайт FreeCAD + FreeCAD Website + Сайт FreeCAD - The FreeCAD website - Сайт FreeCAD + The FreeCAD website + Сайт FreeCAD - - + + StdCmdFreezeViews - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Freeze display - Замороження дисплею + Freeze display + Замороження дисплею - Freezes the current view position - Замерзає поточну позицію перегляду + Freezes the current view position + Замерзає поточну позицію перегляду - - + + StdCmdHideObjects - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Hide all objects - Сховати всі об'єкти + Hide all objects + Сховати всі об'єкти - Hide all objects in the document - Сховати всі об'єкти в документі + Hide all objects in the document + Сховати всі об'єкти в документі - - + + StdCmdHideSelection - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Hide selection - Сховати вибране + Hide selection + Сховати вибране - Hide all selected objects - Приховати всі вибрані об'єкти + Hide all selected objects + Приховати всі вибрані об'єкти - - + + StdCmdImport - File - Файл + File + Файл - &Import... - &Імпорт... + &Import... + &Імпорт... - Import a file in the active document - Імпорт файлу в активний документ + Import a file in the active document + Імпорт файлу в активний документ - Supported formats - Підтримувані формати + Supported formats + Підтримувані формати - All files (*.*) - Усі файли (*.*) + All files (*.*) + Усі файли (*.*) - - + + StdCmdMacroStartDebug - Macro - Макрос + Macro + Макрос - Debug macro - Відлагодження макросу + Debug macro + Відлагодження макросу - Start debugging of macro - Почати налагодження макросу + Start debugging of macro + Почати налагодження макросу - - + + StdCmdMacroStepOver - Macro - Макрос + Macro + Макрос - Step over - Переступити + Step over + Переступити - - + + StdCmdMacroStopDebug - Macro - Макрос + Macro + Макрос - Stop debugging - Зупинити налагодження + Stop debugging + Зупинити налагодження - Stop debugging of macro - Зупинити відлагодження макросу + Stop debugging of macro + Зупинити відлагодження макросу - - + + StdCmdMacroStopRecord - Macro - Макрос + Macro + Макрос - S&top macro recording - Зупинити запис макросу + S&top macro recording + Зупинити запис макросу - Stop the macro recording session - Зупинка запису макросу + Stop the macro recording session + Зупинка запису макросу - - + + StdCmdMeasureDistance - View - Вигляд + View + Вигляд - Measure distance - Виміряти відстань + Measure distance + Виміряти відстань - - + + StdCmdMeasurementSimple - Tools - Інструменти + Tools + Інструменти - Mesure distance - Виміряти відстань + Mesure distance + Виміряти відстань - Measures distance between two selected objects - Виміряти відстань між двома обраними об'єктами + Measures distance between two selected objects + Виміряти відстань між двома обраними об'єктами - - + + Measure distance + Виміряти відстань + + + StdCmdMergeProjects - File - Файл + File + Файл - Merge project... - Злиття проекту ... + Merge project... + Злиття проекту ... - Merge project - Злиття проекту + Merge project + Злиття проекту - %1 document (*.fcstd) - %1 документ (*.fcstd) + %1 document (*.fcstd) + %1 документ (*.fcstd) - Cannot merge project with itself. - Неможливо злити проекту з самим собою. + Cannot merge project with itself. + Неможливо злити проекту з самим собою. - - + + StdCmdNew - File - Файл + File + Файл - &New - Новий + &New + Новий - Create a new empty document - Створити новий порожній документ + Create a new empty document + Створити новий порожній документ - - + + StdCmdOnlineHelp - Help - Довідка + Help + Довідка - Show help to the application - Показати довідку по програмі + Show help to the application + Показати довідку по програмі - - + + StdCmdOnlineHelpPython - Help - Довідка + Help + Довідка - Python Manuals - Керівництво по Python + Python Manuals + Керівництво по Python - Show the Python documentation - Показати документацію по Python + Show the Python documentation + Показати документацію по Python - - + + StdCmdOnlineHelpWebsite - Help - Довідка + Help + Довідка - Help Website - Сайт довідки + Help Website + Сайт довідки - The website where the help is maintained - Сайт де можна отримати допомогу від розробників + The website where the help is maintained + Сайт де можна отримати допомогу від розробників - - + + StdCmdOpen - File - Файл + File + Файл - &Open... - &Відкрити... + &Open... + &Відкрити... - Open a document or import files - Відкрити документ або імпортувати файли + Open a document or import files + Відкрити документ або імпортувати файли - Supported formats - Підтримувані формати + Supported formats + Підтримувані формати - All files (*.*) - Усі файли (*.*) + All files (*.*) + Усі файли (*.*) - - + + StdCmdPaste - Edit - Редагувати + Edit + Редагувати - &Paste - &Вставити + &Paste + &Вставити - Paste operation - Операція вставки + Paste operation + Операція вставки - - + + StdCmdPlacement - Edit - Редагувати + Edit + Редагувати - Placement... - Розташування... + Placement... + Розташування... - Place the selected objects - Розміщення вибраних об'єктів + Place the selected objects + Розміщення вибраних об'єктів - - + + StdCmdPrint - File - Файл + File + Файл - &Print... - &Друк... + &Print... + &Друк... - Print the document - Друк документа + Print the document + Друк документа - - + + StdCmdPrintPdf - File - Файл + File + Файл - &Export PDF... - &Експорт до PDF... + &Export PDF... + &Експорт до PDF... - Export the document as PDF - Експорт документа в PDF + Export the document as PDF + Експорт документа в PDF - - + + StdCmdPrintPreview - File - Файл + File + Файл - &Print preview... - &Print preview... + &Print preview... + &Print preview... - Print the document - Друк документа + Print the document + Друк документа - Print preview - Print preview + Print preview + Print preview - - + + StdCmdProjectInfo - File - Файл + File + Файл - Project i&nformation... - Інформація про проект... + Project i&nformation... + Інформація про проект... - Show details of the currently active project - Показати подробиці про поточний проект + Show details of the currently active project + Показати подробиці про поточний проект - - + + StdCmdProjectUtil - Tools - Інструменти + Tools + Інструменти - Project utility... - Project utility... + Project utility... + Project utility... - Utility to extract or create project files - Utility to extract or create project files + Utility to extract or create project files + Utility to extract or create project files - - + + StdCmdPythonWebsite - Help - Довідка + Help + Довідка - Python Website - Сайт Python + Python Website + Сайт Python - The official Python website - Офіційний сайт Python + The official Python website + Офіційний сайт Python - - + + StdCmdQuit - File - Файл + File + Файл - E&xit - Вихід + E&xit + Вихід - Quits the application - Вихід з програми + Quits the application + Вихід з програми - - + + StdCmdRandomColor - File - Файл + File + Файл - Random color - Випадковий колір + Random color + Випадковий колір - - + + StdCmdRecentFiles - File - Файл + File + Файл - Recent files - Нещодавні файли + Recent files + Нещодавні файли - Recent file list - Список останніх файлів + Recent file list + Список останніх файлів - - + + StdCmdRedo - Edit - Редагувати + Edit + Редагувати - &Redo - Повторити + &Redo + Повторити - Redoes a previously undone action - Повторює останню скасовану дію + Redoes a previously undone action + Повторює останню скасовану дію - - + + StdCmdRefresh - Edit - Редагувати + Edit + Редагувати - &Refresh - Оновити + &Refresh + Оновити - Recomputes the current active document - Перераховує поточного активного документ + Recomputes the current active document + Перераховує поточного активного документ - - + + StdCmdSave - File - Файл + File + Файл - &Save - &Зберегти + &Save + &Зберегти - Save the active document - Зберегти активний документ + Save the active document + Зберегти активний документ - - + + StdCmdSaveAs - File - Файл + File + Файл - Save &As... - Зберегти як... + Save &As... + Зберегти як... - Save the active document under a new file name - Зберегти поточний документ під новим ім'ям + Save the active document under a new file name + Зберегти поточний документ під новим ім'ям - - + + StdCmdSceneInspector - Tools - Інструменти + Tools + Інструменти - Scene inspector... - Інспектор сцени... + Scene inspector... + Інспектор сцени... - Scene inspector - Інспектор сцени + Scene inspector + Інспектор сцени - - + + StdCmdSelectAll - Edit - Редагувати + Edit + Редагувати - Select &All - Вибрати усе + Select &All + Вибрати усе - Select all - Виділити все + Select all + Виділити все - - + + StdCmdSetAppearance - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Appearance... - Зовнішній вигляд... + Appearance... + Зовнішній вигляд... - Sets the display properties of the selected object - Задає вигляд виділеного об'єкта + Sets the display properties of the selected object + Задає вигляд виділеного об'єкта - - + + StdCmdShowObjects - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Show all objects - Показати всі об'єкти + Show all objects + Показати всі об'єкти - Show all objects in the document - Показати всі об'єкти в документі + Show all objects in the document + Показати всі об'єкти в документі - - + + StdCmdShowSelection - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Show selection - Показати віділене + Show selection + Показати віділене - Show all selected objects - Показати всі виділені об'єкти + Show all selected objects + Показати всі виділені об'єкти - - + + StdCmdStatusBar - View - Вигляд + View + Вигляд - Status bar - Рядок стану + Status bar + Рядок стану - Toggles the status bar - Перемикнути рядок стану + Toggles the status bar + Перемикнути рядок стану - - + + StdCmdTextureMapping - Tools - Інструменти + Tools + Інструменти - Texture mapping... - Відображення текстури... + Texture mapping... + Відображення текстури... - Texture mapping - Текстури + Texture mapping + Текстури - - + + StdCmdTileWindows - Window - Вікно + Window + Вікно - &Tile - Плитка + &Tile + Плитка - Tile the windows - Вікна плиткою + Tile the windows + Вікна плиткою - - + + StdCmdToggleBreakpoint - Macro - Макрос + Macro + Макрос - Toggle breakpoint - Поміняти точку зупинки + Toggle breakpoint + Поміняти точку зупинки - - + + StdCmdToggleClipPlane - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Clipping plane - Площини обрізання + Clipping plane + Площини обрізання - Toggles clipping plane for active view - Переключення площину відсікання для активного перегляду + Toggles clipping plane for active view + Переключення площину відсікання для активного перегляду - - + + StdCmdToggleNavigation - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Toggle navigation/Edit mode - Перемкнути навігацію/Змінити режим + Toggle navigation/Edit mode + Перемкнути навігацію/Змінити режим - Toggle between navigation and edit mode - Переключення між навігацією і режимом редагування + Toggle between navigation and edit mode + Переключення між навігацією і режимом редагування - - + + StdCmdToggleObjects - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Toggle all objects - Перемкнути всі об'єкти + Toggle all objects + Перемкнути всі об'єкти - Toggles visibility of all objects in the active document - Вмикає/вимикає видимість всіх об'єктів в активному документі + Toggles visibility of all objects in the active document + Вмикає/вимикає видимість всіх об'єктів в активному документі - - + + StdCmdToggleSelectability - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Toggle selectability - Toggle selectability + Toggle selectability + Toggle selectability - Toggles the property of the objects to get selected in the 3D-View - Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View + Toggles the property of the objects to get selected in the 3D-View - - + + StdCmdToggleVisibility - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Toggle visibility - Перемикнути видимість + Toggle visibility + Перемикнути видимість - Toggles visibility - Вмикає/вимикає видимість + Toggles visibility + Вмикає/вимикає видимість - - + + StdCmdToolBarMenu - View - Вигляд + View + Вигляд - Tool&bars - Панелі інструментів + Tool&bars + Панелі інструментів - Toggles this window - Перемкнути це вікно + Toggles this window + Перемкнути це вікно - - + + StdCmdTransform - Edit - Редагувати + Edit + Редагувати - Transform... - Перетворення... + Transform... + Перетворення... - Transform the geometry of selected objects - Перетворення геометрії вибраних об'єктів + Transform the geometry of selected objects + Перетворення геометрії вибраних об'єктів - - + + StdCmdTreeSelection - View - Вигляд + View + Вигляд - Go to selection - Перейти до вибраного + Go to selection + Перейти до вибраного - Scroll to first selected item - Прокрутити до першого виділеного елемента + Scroll to first selected item + Прокрутити до першого виділеного елемента - - + + StdCmdUndo - Edit - Редагувати + Edit + Редагувати - &Undo - Відмінити + &Undo + Відмінити - Undo exactly one action - Скасувати рівно одну дію + Undo exactly one action + Скасувати рівно одну дію - - + + StdCmdUserInterface - View - Вигляд + View + Вигляд - Dock views - Dock views + Dock views + Dock views - Dock all top-level views - Dock all top-level views + Dock all top-level views + Dock all top-level views - - + + StdCmdViewAxo - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Axometric - Аксонометрія + Axometric + Аксонометрія - Set to axometric view - Встановити аксонометричну проекцію + Set to axometric view + Встановити аксонометричну проекцію - - + + StdCmdViewBottom - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Bottom - Внизу + Bottom + Внизу - Set to bottom view - Встановити вид знизу + Set to bottom view + Встановити вид знизу - - + + StdCmdViewCreate - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Create new view - Створити новий вигляд + Create new view + Створити новий вигляд - Creates a new view window for the active document - Створення нового вікна перегляду для активного документа + Creates a new view window for the active document + Створення нового вікна перегляду для активного документа - - + + StdCmdViewExample1 - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Inventor example #1 - Винахідник Приклад #1 + Inventor example #1 + Винахідник Приклад #1 - Shows a 3D texture with manipulator - Показує 3D текстури з маніпулятором + Shows a 3D texture with manipulator + Показує 3D текстури з маніпулятором - - + + StdCmdViewExample2 - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Inventor example #2 - Винахідник Приклад #2 + Inventor example #2 + Винахідник Приклад #2 - Shows spheres and drag-lights - Показ сфер та перетягувані ліхтарі + Shows spheres and drag-lights + Показ сфер та перетягувані ліхтарі - - + + StdCmdViewExample3 - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Inventor example #3 - Винахідник Приклад #3 + Inventor example #3 + Винахідник Приклад #3 - Shows a animated texture - Показ анімованих текстур + Shows a animated texture + Показ анімованих текстур - - + + StdCmdViewFitAll - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Fit all - Вмістити все + Fit all + Вмістити все - Fits the whole content on the screen - Вмістити весь вміст на екрані + Fits the whole content on the screen + Вмістити весь вміст на екрані - - + + StdCmdViewFitSelection - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Fit selection - Вмістити вибране + Fit selection + Вмістити вибране - Fits the selected content on the screen - Вмістити вибране на екрані + Fits the selected content on the screen + Вмістити вибране на екрані - - + + StdCmdViewFront - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Front - Фронт + Front + Фронт - Set to front view - Показ вигляду з переду + Set to front view + Показ вигляду з переду - - + + StdCmdViewIvIssueCamPos - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Issue camera position - Вихідне положення камери + Issue camera position + Вихідне положення камери - Issue the camera position to the console and to a macro, to easily recall this position - Вихідне положення камери для консолі і макросів, щоб потім швидко відновити цю позицію + Issue the camera position to the console and to a macro, to easily recall this position + Вихідне положення камери для консолі і макросів, щоб потім швидко відновити цю позицію - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Stereo Interleaved Columns - Стерео стовпці + Stereo Interleaved Columns + Стерео стовпці - Switch stereo viewing to Interleaved Columns - Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns + Switch stereo viewing to Interleaved Columns - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Stereo Interleaved Rows - Стерео рядки + Stereo Interleaved Rows + Стерео рядки - Switch stereo viewing to Interleaved Rows - Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows + Switch stereo viewing to Interleaved Rows - - + + StdCmdViewIvStereoOff - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Stereo Off - Вимкнути стерео + Stereo Off + Вимкнути стерео - Switch stereo viewing off - Вимкнути стерео вигляд + Switch stereo viewing off + Вимкнути стерео вигляд - - + + StdCmdViewIvStereoQuadBuff - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Stereo quad buffer - Stereo quad buffer + Stereo quad buffer + Stereo quad buffer - Switch stereo viewing to quad buffer - Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer + Switch stereo viewing to quad buffer - - + + StdCmdViewIvStereoRedGreen - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Stereo red/green - Стерео червоний/зелений + Stereo red/green + Стерео червоний/зелений - Switch stereo viewing to red/green - Перемикнути стерео перегляд у червоний/зелений + Switch stereo viewing to red/green + Перемикнути стерео перегляд у червоний/зелений - - + + StdCmdViewLeft - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Left - Ліворуч + Left + Ліворуч - Set to left view - Встановити вид зліва + Set to left view + Встановити вид зліва - - + + StdCmdViewRear - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Rear - Тил + Rear + Тил - Set to rear view - Встановити вид ззаду + Set to rear view + Встановити вид ззаду - - + + StdCmdViewRight - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Right - Праворуч + Right + Праворуч - Set to right view - Встановити вигляд з права + Set to right view + Встановити вигляд з права - - + + + StdCmdViewRotateLeft + + Standard-View + Стандартні вигляди + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + Стандартні вигляди + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Top - Згори + Top + Згори - Set to top view - Встановити вигляд зверху + Set to top view + Встановити вигляд зверху - - + + StdCmdWhatsThis - Help - Довідка + Help + Довідка - &What's This? - &Що це? + &What's This? + &Що це? - What's This - Що це таке + What's This + Що це таке - - + + StdCmdWindows - Window - Вікно + Window + Вікно - &Windows... - Вікна... + &Windows... + Вікна... - Windows list - Список вікон + Windows list + Список вікон - - + + StdCmdWindowsMenu - Window - Вікно + Window + Вікно - Activates this window - Активувати це вікно + Activates this window + Активувати це вікно - - + + StdCmdWorkbench - View - Вигляд + View + Вигляд - Workbench - Робочий простір + Workbench + Робочий простір - Switch between workbenches - Перемикання між робочими областями + Switch between workbenches + Перемикання між робочими областями - - + + StdOrthographicCamera - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Orthographic view - Ортогональний вигляд + Orthographic view + Ортогональний вигляд - Switches to orthographic view mode - Перемкнутись до режиму Ортогональна подання + Switches to orthographic view mode + Перемкнутись до режиму Ортогональна подання - - + + StdPerspectiveCamera - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Perspective view - Перспектива + Perspective view + Перспектива - Switches to perspective view mode - Переключення в режим перегляду перспективи + Switches to perspective view mode + Переключення в режим перегляду перспективи - - + + StdViewBoxZoom - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Box zoom - Поле маштабування + Box zoom + Поле маштабування - - + + StdViewDockUndockFullscreen - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Document window - вікно документа + Document window + вікно документа - Display the active view either in fullscreen, in undocked or docked mode - Показати активний вид в повноекранному режимі, у відстикованому, або зістикуваваному режимі + Display the active view either in fullscreen, in undocked or docked mode + Показати активний вид в повноекранному режимі, у відстикованому, або зістикуваваному режимі - - + + StdViewScreenShot - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Save picture... - Зберегти зображення... + Save picture... + Зберегти зображення... - Creates a screenshot of the active view - Створити знімок активного вигляду + Creates a screenshot of the active view + Створити знімок активного вигляду - - + + StdViewZoomIn - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Zoom In - Збільшити + Zoom In + Збільшити - - + + StdViewZoomOut - Standard-View - Стандартні вигляди + Standard-View + Стандартні вигляди - Zoom Out - Зменшити + Zoom Out + Зменшити - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - &Файл + &File + &Файл - &Edit - &Редагувати + &Edit + &Редагувати - Standard views - Стандартні вигляди + Standard views + Стандартні вигляди - &Stereo - &Стерео + &Stereo + &Стерео - &Zoom - &Збільшення + &Zoom + &Збільшення - Visibility - Видимість + Visibility + Видимість - &View - &Вигляд + &View + &Вигляд - &Tools - &Інструменти + &Tools + &Інструменти - &Macro - Макрос + &Macro + Макрос - &Windows - &Вікна + &Windows + &Вікна - &On-line help - &Он-лайн допомога + &On-line help + &Он-лайн допомога - &Help - &Довідка + &Help + &Довідка - File - Файл + File + Файл - Macro - Макрос + Macro + Макрос - View - Вигляд + View + Вигляд - Special Ops - Спеціальні операції + Special Ops + Спеціальні операції - - + + testClass - test - Тест + test + Тест - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - Виберіть стиль панелі завдань + Choose the style of the Task Panel + Виберіть стиль панелі завдань - Default - За замовчуванням + Default + За замовчуванням - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Gui/Language/FreeCAD_zh.ts b/src/Gui/Language/FreeCAD_zh.ts index a63f7f181..42b80a62e 100644 --- a/src/Gui/Language/FreeCAD_zh.ts +++ b/src/Gui/Language/FreeCAD_zh.ts @@ -1,5484 +1,5902 @@ - - + + Angle - Form - 窗体 + Form + 窗体 - A: - A: + A: + A: - B: - B: + B: + B: - C: - C: + C: + C: - Angle Snap - 角度捕捉 + Angle Snap + 角度捕捉 - - 1 ° - 1 ° + + 1 ° + 1 ° - - 2 ° - 2 ° + + 2 ° + 2 ° - - 5 ° - 5 ° + + 5 ° + 5 ° - - 10 ° - 10 ° + + 10 ° + 10 ° - - 20 ° - 20 ° + + 20 ° + 20 ° - - 45 ° - 45 ° + + 45 ° + 45 ° - - 90 ° - 90 ° + + 90 ° + 90 ° - - 180 ° - 180 ° + + 180 ° + 180 ° - - + + Gui::AccelLineEdit - none - + none + - - + + + Gui::ActionSelector + + Available: + + + + Selected: + + + + Add + 添加 + + + Remove + 删除 + + + Move up + 上移 + + + Move down + 下移 + + + + Gui::AlignmentView + + Movable object + + + + Fixed object + + + + Gui::BlenderNavigationStyle - Press left mouse button - 按鼠标左键 + Press left mouse button + 按鼠标左键 - Press SHIFT and middle mouse button - 按SHIFT和鼠标中键 + Press SHIFT and middle mouse button + 按SHIFT和鼠标中键 - Press middle mouse button - 按鼠标中键 + Press middle mouse button + 按鼠标中键 - Scroll middle mouse button - 滚动鼠标中键 + Scroll middle mouse button + 滚动鼠标中键 - - + + Gui::CADNavigationStyle - Press left mouse button - 按鼠标左键 + Press left mouse button + 按鼠标左键 - Press middle mouse button - 按鼠标中键 + Press middle mouse button + 按鼠标中键 - Press left and middle mouse button - 按鼠标左键和中键 + Press left and middle mouse button + 按鼠标左键和中键 - Scroll middle mouse button - 滚动鼠标中键 + Scroll middle mouse button + 滚动鼠标中键 - - + + Gui::Command - Standard - 标准 + Standard + 标准 - - + + Gui::ContainerDialog - &OK - 确定(&O) + &OK + 确定(&O) - &Cancel - 取消(&C) + &Cancel + 取消(&C) - - + + Gui::ControlSingleton - Task panel - 任务面板 + Task panel + 任务面板 - - + + Gui::Dialog::AboutApplication - About - 关于 + About + 关于 - Revision number - 修订号 + Revision number + 修订号 - Version - 版本 + Version + 版本 - OK - 确定 + OK + 确定 - - 关于 + + 关于 - Release date - 发布日期 + Release date + 发布日期 - Platform - 平台 + Platform + 平台 - License... - 许可... + License... + 许可... - - + + Copy to clipboard + + + + Gui::Dialog::ButtonModel - Button %1 - 按钮 %1 + Button %1 + 按钮 %1 - Out Of Range - 超出范围 + Out Of Range + 超出范围 - - + + Gui::Dialog::CommandModel - Commands - 命令 + Commands + 命令 - - + + Gui::Dialog::DemoMode - View Turntable - 视图罗盘 + View Turntable + 视图罗盘 - Speed - 速度 + Speed + 速度 - Maximum - 最大值 + Maximum + 最大值 - Minimum - 最小值 + Minimum + 最小值 - Fullscreen - 全屏 + Fullscreen + 全屏 - Enable timer - 启用计时器 + Enable timer + 启用计时器 - s - s + s + s - Angle - 角度 + Angle + 角度 + + + 90° + 90° + + + -90° + -90° - 90° - 90° + Play + 播放 - -90° - -90° + Stop + 停止 - Play - 播放 + Close + 关闭 - - Stop - 停止 - - - Close - 关闭 - - - + + Gui::Dialog::DlgActivateWindow - Choose Window - 选择窗口 + Choose Window + 选择窗口 - &Activate - 激活(&A) + &Activate + 激活(&A) - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - 取消(&C) + &Cancel + 取消(&C) - - 关于 + + 关于 - - + + Gui::Dialog::DlgActivateWindowImp - Windows - 窗口 + Windows + 窗口 - - + + Gui::Dialog::DlgAuthorization - Authorization - 身份验证 + Authorization + 身份验证 - &OK - 确定(&O) + &OK + 确定(&O) - &Cancel - 取消(&C) + &Cancel + 取消(&C) - Password: - 密码: + Password: + 密码: - User name: - 用户名: + User name: + 用户名: - - 关于 + + 关于 - - + + Gui::Dialog::DlgChooseIcon - Choose Icon - 选择图标 + Choose Icon + 选择图标 - OK - 确定 + OK + 确定 - Cancel - 取消 + Cancel + 取消 - Add icons... - 添加图标... + Add icons... + 添加图标... - - + + Gui::Dialog::DlgCustomActions - Macros - + Macros + - Setup Custom Macros - 设置自定义宏 + Setup Custom Macros + 设置自定义宏 - Macro: - 宏: + Macro: + 宏: - ... - ... + ... + ... - Pixmap - 位图 + Pixmap + 位图 - Accelerator: - 快捷键: + Accelerator: + 快捷键: - What's this: - 这是什么: + What's this: + 这是什么: - Status text: - 状态文字: + Status text: + 状态文字: - Tool tip: - 工具提示: + Tool tip: + 工具提示: - Menu text: - 菜单文本: + Menu text: + 菜单文本: - Add - 添加 + Add + 添加 - Remove - 删除 + Remove + 删除 - Replace - 替换 + Replace + 替换 - - + + Gui::Dialog::DlgCustomActionsImp - Icons - 图标 + Icons + 图标 - Macros - + Macros + - No macro - 无宏定义 + No macro + 无宏定义 - No macros found. - 未发现宏. + No macros found. + 未发现宏. - Macro not found - 未找到宏 + Macro not found + 未找到宏 - Sorry, couldn't find macro file '%1'. - 对不起,无法找到宏文件 '%1'. + Sorry, couldn't find macro file '%1'. + 对不起,无法找到宏文件 '%1'. - Empty macro - 空白宏 + Empty macro + 空白宏 - Please specify the macro first. - 请先指定宏. + Please specify the macro first. + 请先指定宏. - Empty text - 空文本 + Empty text + 空文本 - Please specify the menu text first. - 请先指定菜单文本. + Please specify the menu text first. + 请先指定菜单文本. - No item selected - 未选中对象 + No item selected + 未选中对象 - Please select a macro item first. - 请先选择一个宏项目. + Please select a macro item first. + 请先选择一个宏项目. - - + + Gui::Dialog::DlgCustomCommands - Commands - 命令 + Commands + 命令 - - 关于 + + 关于 - - + + Gui::Dialog::DlgCustomCommandsImp - Category - 类别 + Category + 类别 - Icon - 图标 + Icon + 图标 - Command - 命令 + Command + 命令 - - + + Gui::Dialog::DlgCustomKeyboard - Keyboard - 键盘 + Keyboard + 键盘 - Description: - 说明: + Description: + 说明: - &Category: - 分类(&C): + &Category: + 分类(&C): - C&ommands: - 命令(&C): + C&ommands: + 命令(&C): - Current shortcut: - 当前快捷键: + Current shortcut: + 当前快捷键: - Press &new shortcut: - 按下新快捷键(&N): + Press &new shortcut: + 按下新快捷键(&N): - Currently assigned to: - 当前分配给: + Currently assigned to: + 当前分配给: - &Assign - 分配(&A) + &Assign + 分配(&A) - Alt+A - Alt+A + Alt+A + Alt+A - &Reset - 重置(&R) + &Reset + 重置(&R) - Alt+R - Alt+R + Alt+R + Alt+R - Re&set All - 全部重设(&S) + Re&set All + 全部重设(&S) - Alt+S - Alt+S + Alt+S + Alt+S - - 关于 + + 关于 - - + + Gui::Dialog::DlgCustomKeyboardImp - Icon - 图标 + Icon + 图标 - Command - 命令 + Command + 命令 - none - + none + - Multiple defined shortcut - 多重定义快捷键 + Multiple defined shortcut + 多重定义快捷键 - The shortcut '%1' is defined more than once. This could result into unexpected behaviour. - 快捷键'%1'不唯一.这将导致不可预料的结果. + The shortcut '%1' is defined more than once. This could result into unexpected behaviour. + 快捷键'%1'不唯一.这将导致不可预料的结果. - Already defined shortcut - 已定义快捷键 + Already defined shortcut + 已定义快捷键 - The shortcut '%1' is already assigned to '%2'. + The shortcut '%1' is already assigned to '%2'. Please define another shortcut. - 快捷键'%1'已经分配给了'%2'. + 快捷键'%1'已经分配给了'%2'. 请重新定义. - - + + Gui::Dialog::DlgCustomToolBoxbarsImp - Toolbox bars - 工具条 + Toolbox bars + 工具条 - - + + Gui::Dialog::DlgCustomToolbars - Toolbars - 工具栏 + Toolbars + 工具栏 - <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> - <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;">Note:</span> 改动将在你下一次加载工作台时生效</p></body></html> + <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;">Note:</span> The changes become active the next time you load the appropriate workbench</p></body></html> + <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;">Note:</span> 改动将在你下一次加载工作台时生效</p></body></html> - Move right - 右移 + Move right + 右移 - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>移动选中对象到下一层级.</b><p>这将同时改变父级对象.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>移动选中对象到下一层级.</b><p>这将同时改变父级对象.</p> - Move left - 左移 + Move left + 左移 - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>移动选中对象到上一层级.</b><p>这将同时改变父级对象.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>移动选中对象到上一层级.</b><p>这将同时改变父级对象.</p> - Move down - 下移 + Move down + 下移 - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>下移选中对象.</b><p>仅在层级中移动.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>下移选中对象.</b><p>仅在层级中移动.</p> - Move up - 上移 + Move up + 上移 - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>上移选中对象.</b><p>仅在层级中移动.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>上移选中对象.</b><p>仅在层级中移动.</p> - New... - 新建... + New... + 新建... - Rename... - 重命名... + Rename... + 重命名... - Delete - 删除 + Delete + 删除 - Icon - 图标 + Icon + 图标 - Command - 命令 + Command + 命令 - <Separator> - <分隔符> + <Separator> + <分隔符> - New toolbar - 新建工具栏 + New toolbar + 新建工具栏 - Toolbar name: - 工具栏名称: + Toolbar name: + 工具栏名称: - Duplicated name - 重复命名 + Duplicated name + 重复命名 - The toolbar name '%1' is already used - 工具栏名称'%1'已被使用 + The toolbar name '%1' is already used + 工具栏名称'%1'已被使用 - Rename toolbar - 重命名工具栏 + Rename toolbar + 重命名工具栏 - - 关于 + + 关于 - - + + Gui::Dialog::DlgCustomizeImp - Customize - 自定义 + Customize + 自定义 - &Help - 帮助(&H) + &Help + 帮助(&H) - &Close - 关闭(&C) + &Close + 关闭(&C) - - + + Gui::Dialog::DlgCustomizeSpaceball - Spaceball - 轨迹球 + Spaceball + 轨迹球 - No Spaceball Present - 当前无轨迹球 + No Spaceball Present + 当前无轨迹球 - Buttons - 按钮 + Buttons + 按钮 - Clear - 清除 + Clear + 清除 - Print Reference - Print Reference + Print Reference + Print Reference - - + + Gui::Dialog::DlgDisplayProperties - Display properties - 显示属性 + Display properties + 显示属性 - Display - 显示 + Display + 显示 - Transparency: - 透明度: + Transparency: + 透明度: - Line width: - 线宽: + Line width: + 线宽: - Point size: - 点大小: + Point size: + 点大小: - Material - 材质 + Material + 材质 - ... - ... + ... + ... - Close - 关闭 + Close + 关闭 - Viewing mode - 查看模式 + Viewing mode + 查看模式 - Display mode: - 显示模式: + Display mode: + 显示模式: - Plot mode: - 绘制模式: + Plot mode: + 绘制模式: - - 关于 + + 关于 - Line transparency: - 线条透明度: + Line transparency: + 线条透明度: - Line color: - 线条颜色: + Line color: + 线条颜色: - Shape color: - 形状颜色: + Shape color: + 形状颜色: - Color plot: - Color plot: + Color plot: + Color plot: - - + + Document window: + + + + Gui::Dialog::DlgEditorSettings - Editor - 编辑器 + Editor + 编辑器 - Options - 选项 + Options + 选项 - Enable line numbers - 启用行号 + Enable line numbers + 启用行号 - Enable folding - 启用折叠 + Enable folding + 启用折叠 - Indentation - 缩进 + Indentation + 缩进 - Insert spaces - 插入空格 + Insert spaces + 插入空格 - Tab size: - 制表符长度: + Tab size: + 制表符长度: - Indent size: - 缩进大小: + Indent size: + 缩进大小: - Keep tabs - 保留制表符 + Keep tabs + 保留制表符 - Display Items - 显示项目 + Display Items + 显示项目 - Family: - 字体族: + Family: + 字体族: - Size: - 大小: + Size: + 大小: - Preview: - 预览: + Preview: + 预览: - - 关于 + + 关于 - - + + Gui::Dialog::DlgGeneral - General - 常规 + General + 常规 - Start up - 启动 + Start up + 启动 - Enable splash screen at start up - 打开软件启动界面 + Enable splash screen at start up + 打开软件启动界面 - Switch to tab of report window: - 切换到报告窗口标签: + Switch to tab of report window: + 切换到报告窗口标签: - Auto load module after start up: - 启动后自动加载模块: + Auto load module after start up: + 启动后自动加载模块: - Language - 语言 + Language + 语言 - Change language: - 更改语言: + Change language: + 更改语言: - Main window - 主窗口 + Main window + 主窗口 - Size of recent file list - 最近文件列表大小 + Size of recent file list + 最近文件列表大小 - Window style: - 窗口风格: + Window style: + 窗口风格: - Size of toolbar icons: - 工具栏图标大小: + Size of toolbar icons: + 工具栏图标大小: - - + + Gui::Dialog::DlgGeneralImp - Default (%1 x %1) - 默认(%1 x %1) + Default (%1 x %1) + 默认(%1 x %1) - Small (%1 x %1) - 小(%1 x %1) + Small (%1 x %1) + 小(%1 x %1) - Large (%1 x %1) - 大(%1 x %1) + Large (%1 x %1) + 大(%1 x %1) - Extra large (%1 x %1) - 特大(%1 x %1) + Extra large (%1 x %1) + 特大(%1 x %1) - - + + Gui::Dialog::DlgInputDialog - Input - 输入 + Input + 输入 - OK - 确定 + OK + 确定 - Cancel - 取消 + Cancel + 取消 - - 关于 + + 关于 - - + + Gui::Dialog::DlgInspector - Scene Inspector - 场景检索 + Scene Inspector + 场景检索 - - + + Gui::Dialog::DlgMacroExecute - Execute macro - 执行宏 + Execute macro + 执行宏 - Macro name: - 宏名称: + Macro name: + 宏名称: - Macro destination: - 宏目录: + Macro destination: + 宏目录: - Execute - 执行 + Execute + 执行 - Close - 关闭 + Close + 关闭 - Create - 创建 + Create + 创建 - Delete - 删除 + Delete + 删除 - Edit - 编辑 + Edit + 编辑 - - + + Gui::Dialog::DlgMacroExecuteImp - Macros - + Macros + - Macro file - 宏文件 + Macro file + 宏文件 - Enter a file name, please: - 请输入文件名称: + Enter a file name, please: + 请输入文件名称: - Existing file - 已存在文件 + Existing file + 已存在文件 - '%1'. + '%1'. This file already exists. - '%1'. + '%1'. 此文件已经存在. - Delete macro - 删除宏 + Delete macro + 删除宏 - Do you really want to delete the macro '%1'? - 你真的要删除宏'%1'? + Do you really want to delete the macro '%1'? + 你真的要删除宏'%1'? - Cannot create file - 无法创建文件 + Cannot create file + 无法创建文件 - Creation of file '%1' failed. - 文件 '%1' 创建失败. + Creation of file '%1' failed. + 文件 '%1' 创建失败. - - + + Gui::Dialog::DlgMacroRecord - Macro recording - 宏录制 + Macro recording + 宏录制 - Macro name: - 宏名称: + Macro name: + 宏名称: - Stop - 停止 + Stop + 停止 - Cancel - 取消 + Cancel + 取消 - Macro path: - 宏路径: + Macro path: + 宏路径: - ... - ... + ... + ... - Record - 录制 + Record + 录制 - - + + Gui::Dialog::DlgMacroRecordImp - Macro recorder - 宏记录器 + Macro recorder + 宏记录器 - Specify first a place to save. - 首先指定保存位置. + Specify first a place to save. + 首先指定保存位置. - Existing macro - 已有的宏 + Existing macro + 已有的宏 - The macro '%1' already exists. Do you want to overwrite? - 宏'%1'已经存在.是否要覆盖? + The macro '%1' already exists. Do you want to overwrite? + 宏'%1'已经存在.是否要覆盖? - The macro directory doesn't exist. Please, choose another one. - 宏目录不存在.请重新选择. + The macro directory doesn't exist. Please, choose another one. + 宏目录不存在.请重新选择. - Choose macro directory - 选择宏目录 + Choose macro directory + 选择宏目录 - - + + Gui::Dialog::DlgMaterialProperties - Material properties - 材质属性 + Material properties + 材质属性 - &Close - 关闭(&C) + &Close + 关闭(&C) - Alt+C - Alt+C + Alt+C + Alt+C - Material - 材质 + Material + 材质 - Diffuse color: - 漫射颜色: + Diffuse color: + 漫射颜色: - Specular color: - 高光颜色: + Specular color: + 高光颜色: - Shininess: - 反光度: + Shininess: + 反光度: - % - % + % + % - Ambient color: - 环境色: + Ambient color: + 环境色: - - 关于 + + 关于 - Emissive color: - 发光颜色: + Emissive color: + 发光颜色: - - + + Gui::Dialog::DlgOnlineHelp - On-line help - 联机帮助 + On-line help + 联机帮助 - Help viewer - 帮助阅读器 + Help viewer + 帮助阅读器 - Location of start page - 起始页的位置 + Location of start page + 起始页的位置 - - + + Gui::Dialog::DlgOnlineHelpImp - HTML files (*.html *.htm) - HTML文件(*.html *.htm) + HTML files (*.html *.htm) + HTML文件(*.html *.htm) - Access denied - 拒绝访问 + Access denied + 拒绝访问 - Access denied to '%1' + Access denied to '%1' Specify another directory, please. - 访问'%1'被拒绝,请指定另一个目录. + 访问'%1'被拒绝,请指定另一个目录. - - + + Gui::Dialog::DlgParameter - Parameter Editor - 参数编辑器 + Parameter Editor + 参数编辑器 - Save to disk - 保存到磁盘 + Save to disk + 保存到磁盘 - Alt+C - Alt+C + Alt+C + Alt+C - &Close - 关闭(&C) + &Close + 关闭(&C) - - + + Gui::Dialog::DlgParameterImp - Group - + Group + - Name - 名称 + Name + 名称 - Type - 类型 + Type + 类型 - Value - + Value + - User parameter - 用户参数 + User parameter + 用户参数 - Invalid input - 输入无效 + Invalid input + 输入无效 - Invalid key name '%1' - 无效的键名'%1' + Invalid key name '%1' + 无效的键名'%1' - System parameter - 系统参数 + System parameter + 系统参数 - - + + Gui::Dialog::DlgPreferences - Preferences - 首选项 + Preferences + 首选项 - &Help - 帮助(&H) + &Help + 帮助(&H) - Alt+H - Alt+H + Alt+H + Alt+H - &OK - 确定(&O) + &OK + 确定(&O) - &Apply - 应用(&A) + &Apply + 应用(&A) - Alt+A - Alt+A + Alt+A + Alt+A - &Cancel - 取消(&C) + &Cancel + 取消(&C) - - 关于 + + 关于 - - + + Gui::Dialog::DlgPreferencesImp - Wrong parameter - 参数错误 + Wrong parameter + 参数错误 - - + + Gui::Dialog::DlgProjectInformation - Project information - 项目信息 + Project information + 项目信息 - Information - 信息 + Information + 信息 - &Name: - 名称(&N): + &Name: + 名称(&N): - Commen&t: - 注释(&T): + Commen&t: + 注释(&T): - Path: - 路径: + Path: + 路径: - &Last modified by: - 上次修改(&L): + &Last modified by: + 上次修改(&L): - Created &by: - 作者(&B): + Created &by: + 作者(&B): - Com&pany: - 公司(&p): + Com&pany: + 公司(&p): - Last &modification date: - 最后修改日期(&M): + Last &modification date: + 最后修改日期(&M): - Creation &date: - 创建日期(&D): + Creation &date: + 创建日期(&D): - &OK - 确定(&O) + &OK + 确定(&O) - &Cancel - 取消(&C) + &Cancel + 取消(&C) - - 关于 + + 关于 - - + + Gui::Dialog::DlgProjectUtility - Project utility - 项目工具 + Project utility + 项目工具 - Extract project - 提取项目 + Extract project + 提取项目 - Source - 来源 + Source + 来源 - Project file (*.fcstd) - 项目文件(*.fcstd) + Project file (*.fcstd) + 项目文件(*.fcstd) - Destination - 目标 + Destination + 目标 - Extract - 提取 + Extract + 提取 - Create project - 创建项目 + Create project + 创建项目 - Document.xml - Document.xml + Document.xml + Document.xml - Create - 创建 + Create + 创建 - Load project file after creation - 创建项目文件后即加载 + Load project file after creation + 创建项目文件后即加载 - Empty source - 来源为空 + Empty source + 来源为空 - No source is defined. - 未定义来源. + No source is defined. + 未定义来源. - Empty destination - 目标为空 + Empty destination + 目标为空 - No destination is defined. - 未定义目标. + No destination is defined. + 未定义目标. - - + + Gui::Dialog::DlgReportView - Output window - 输出窗口 + Output window + 输出窗口 - Output - 输出 + Output + 输出 - Record log messages - 记录日志 + Record log messages + 记录日志 - Record warnings - 记录警告 + Record warnings + 记录警告 - Record error messages - 记录错误 + Record error messages + 记录错误 - Colors - 颜色 + Colors + 颜色 - Normal messages: - 正常的消息: + Normal messages: + 正常的消息: - Log messages: - 日志信息: + Log messages: + 日志信息: - Warnings: - 警告: + Warnings: + 警告: - Errors: - 错误: + Errors: + 错误: - - 关于 + + 关于 - Redirect internal Python errors to report view - Python的错误重定向到报告浏览器 + Redirect internal Python errors to report view + Python的错误重定向到报告浏览器 - Redirect internal Python output to report view - 内部Python输出重定向至报表浏览器 + Redirect internal Python output to report view + 内部Python输出重定向至报表浏览器 - - + + Gui::Dialog::DlgRunExternal - Running external program - 运行外部程序 + Running external program + 运行外部程序 - TextLabel - 文本标签 + TextLabel + 文本标签 - Advanced >> - 高级 >> + Advanced >> + 高级 >> - ... - ... + ... + ... - Accept changes - 接受更改 + Accept changes + 接受更改 - Discard changes - 放弃修改 + Discard changes + 放弃修改 - Abort program - 终止程序 + Abort program + 终止程序 - Help - 帮助 + Help + 帮助 - Select a file - 选择一个文件 + Select a file + 选择一个文件 - - + + Gui::Dialog::DlgSettings3DView - 3D View - 3D 视图 + 3D View + 3D 视图 - 3D View settings - 3D 视图设置 + 3D View settings + 3D 视图设置 - Show coordinate system in the corner - 坐标系统显示在边角 + Show coordinate system in the corner + 坐标系统显示在边角 - Show counter of frames per second - 显示每秒运行帧数 + Show counter of frames per second + 显示每秒运行帧数 - Enable animation - 启用动画 + Enable animation + 启用动画 - Enable anti-aliasing (slower) - 启用抗锯齿(慢) + Enable anti-aliasing (slower) + 启用抗锯齿(慢) - Eye to eye distance for stereo modes: - 立体模式的双眼距离: + Eye to eye distance for stereo modes: + 立体模式的双眼距离: - Camera type - 相机类型 + Camera type + 相机类型 - Orthographic rendering - 等轴侧渲染 + Orthographic rendering + 等轴侧渲染 - Perspective rendering - 透视渲染 + Perspective rendering + 透视渲染 - - 关于 + + 关于 - 3D Navigation - 3D 导航 + 3D Navigation + 3D 导航 - Mouse... - 鼠标... + Mouse... + 鼠标... - Intensity of backlight - 背光强度 + Intensity of backlight + 背光强度 - Enable backlight color - 启用背光颜色 + Enable backlight color + 启用背光颜色 - Orbit style - 导航模式 + Orbit style + 导航模式 - Turntable - 转盘 + Turntable + 转盘 - Trackball - 轨迹球 + Trackball + 轨迹球 - Invert zoom - 反向缩放 + Invert zoom + 反向缩放 - - + + Zoom at cursor + + + + Zoom step + + + + Gui::Dialog::DlgSettings3DViewImp - %1 navigation - %1 导航 + %1 navigation + %1 导航 - - + + Gui::Dialog::DlgSettingsColorGradient - Color model - 颜色模式 + Color model + 颜色模式 - &Gradient: - 渐变(&G): + &Gradient: + 渐变(&G): - red-yellow-green-cyan-blue - 红-黄-绿-青-蓝 + red-yellow-green-cyan-blue + 红-黄-绿-青-蓝 - blue-cyan-green-yellow-red - 蓝-青-绿-黄-红 + blue-cyan-green-yellow-red + 蓝-青-绿-黄-红 - white-black - 白黑 + white-black + 白黑 - black-white - 黑白 + black-white + 黑白 - Visibility - 可见性 + Visibility + 可见性 - Out g&rayed - 灰度(&R) + Out g&rayed + 灰度(&R) - Alt+R - Alt+R + Alt+R + Alt+R - Out &invisible - 不可见(&I) + Out &invisible + 不可见(&I) - Alt+I - Alt+I + Alt+I + Alt+I - Style - 样式 + Style + 样式 - &Zero - 零 (&Z) + &Zero + 零 (&Z) - Alt+Z - Alt+Z + Alt+Z + Alt+Z - &Flow - 流(&F) + &Flow + 流(&F) - Alt+F - Alt+F + Alt+F + Alt+F - &OK - 确定(&O) + &OK + 确定(&O) - &Cancel - 取消(&C) + &Cancel + 取消(&C) - Parameter range - 参数范围 + Parameter range + 参数范围 - Mi&nimum: - 最小值(&N): + Mi&nimum: + 最小值(&N): - Ma&ximum: - 最大值(&X): + Ma&ximum: + 最大值(&X): - &Labels: - 标签(&L): + &Labels: + 标签(&L): - &Decimals: - 小数位数(&D): + &Decimals: + 小数位数(&D): - - 关于 + + 关于 - Color-gradient settings - 颜色渐变设置 + Color-gradient settings + 颜色渐变设置 - - + + Gui::Dialog::DlgSettingsColorGradientImp - Wrong parameter - 参数错误 + Wrong parameter + 参数错误 - The maximum value must be higher than the minimum value. - 最大值必须大于最小值. + The maximum value must be higher than the minimum value. + 最大值必须大于最小值. - - + + Gui::Dialog::DlgSettingsDocument - Document - 文档 + Document + 文档 - General - 常规 + General + 常规 - Document save compression level + Document save compression level (0 = none, 9 = highest, 3 = default) - 保存文件的压缩级别(0 = 无,9 = 最高,3 = 默认) + 保存文件的压缩级别(0 = 无,9 = 最高,3 = 默认) - Create new document at start up - 启动时创建新文档 + Create new document at start up + 启动时创建新文档 - Storage - 存储 + Storage + 存储 - Saving transactions (Auto-save) - 保存交互记录(自动保存) + Saving transactions (Auto-save) + 保存交互记录(自动保存) - Discard saved transaction after saving document - 保存文件后放弃保存历史记录 + Discard saved transaction after saving document + 保存文件后放弃保存历史记录 - Save thumbnail into project file when saving document - 保存文件时同时保存缩略图到项目文件 + Save thumbnail into project file when saving document + 保存文件时同时保存缩略图到项目文件 - Create up to backup files when resaving document - 重新保存文件时创建备份 + Create up to backup files when resaving document + 重新保存文件时创建备份 - Document objects - 文档对象 + Document objects + 文档对象 - Allow duplicate object labels in one document - 在一个文档中允许重复的对象标签 + Allow duplicate object labels in one document + 在一个文档中允许重复的对象标签 - Maximum Undo/Redo steps - 最大撤消/重做步数 + Maximum Undo/Redo steps + 最大撤消/重做步数 - Using Undo/Redo on documents - 在文档上使用撤消/重做 + Using Undo/Redo on documents + 在文档上使用撤消/重做 - - + + Gui::Dialog::DlgSettingsEditorImp - Text - 文本 + Text + 文本 - Bookmark - 书签 + Bookmark + 书签 - Breakpoint - 断点 + Breakpoint + 断点 - Keyword - 关键字 + Keyword + 关键字 - Comment - 注释 + Comment + 注释 - Block comment - 块注释 + Block comment + 块注释 - Number - + Number + - String - 字符串 + String + 字符串 - Character - 字符 + Character + 字符 - Class name - 类名称 + Class name + 类名称 - Define name - 定义名称 + Define name + 定义名称 - Operator - 运算符 + Operator + 运算符 - Python output - Python 输出 + Python output + Python 输出 - Python error - Python 错误 + Python error + Python 错误 - Items - 项目 + Items + 项目 - - + + Current line highlight + + + + Gui::Dialog::DlgSettingsImage - Image settings - 图像设置 + Image settings + 图像设置 - Image properties - 图片属性 + Image properties + 图片属性 - Back&ground: - 背景(&G): + Back&ground: + 背景(&G): - Current - 当前 + Current + 当前 - White - 白色 + White + 白色 - Black - 黑色 + Black + 黑色 - Transparent - 透明 + Transparent + 透明 - Image dimensions - 图像大小 + Image dimensions + 图像大小 - Pixel - 像素 + Pixel + 像素 - &Width: - 宽度(&W): + &Width: + 宽度(&W): - Current screen - 当前屏幕 + Current screen + 当前屏幕 - Icon 32 x 32 - 图标32x32 + Icon 32 x 32 + 图标32x32 - Icon 64 x 64 - 图标64x62 + Icon 64 x 64 + 图标64x62 - Icon 128 x 128 - 图标128x128 + Icon 128 x 128 + 图标128x128 - CGA 320 x 200 - CGA 320x320 + CGA 320 x 200 + CGA 320x320 - QVGA 320 x 240 - QVGA 320x240 + QVGA 320 x 240 + QVGA 320x240 - VGA 640 x 480 - VGA 640x480 + VGA 640 x 480 + VGA 640x480 - NTSC 720 x 480 - NTSC 720x480 + NTSC 720 x 480 + NTSC 720x480 - PAL 768 x 578 - PAL 768x578 + PAL 768 x 578 + PAL 768x578 - SVGA 800 x 600 - SVGA 800x600 + SVGA 800 x 600 + SVGA 800x600 - XGA 1024 x 768 - XGA 1024x768 + XGA 1024 x 768 + XGA 1024x768 - HD720 1280 x 720 - HD720 1280 x 720 + HD720 1280 x 720 + HD720 1280 x 720 - SXGA 1280 x 1024 - SXGA 1280 x 1024 + SXGA 1280 x 1024 + SXGA 1280 x 1024 - SXGA+ 1400 x 1050 - SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 + SXGA+ 1400 x 1050 - UXGA 1600 x 1200 - UXGA 1600 x 1200 + UXGA 1600 x 1200 + UXGA 1600 x 1200 - HD1080 1920 x 1080 - HD1080 1920 x 1080 + HD1080 1920 x 1080 + HD1080 1920 x 1080 - WUXGA 1920 x 1200 - WUXGA 1920 x 1200 + WUXGA 1920 x 1200 + WUXGA 1920 x 1200 - QXGA 2048 x 1538 - QXGA 2048 x 1538 + QXGA 2048 x 1538 + QXGA 2048 x 1538 - WQXGA 2560 x 1600 - WQXGA 2560 x 1600 + WQXGA 2560 x 1600 + WQXGA 2560 x 1600 - QSXGA 2560 x 2048 - QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + QSXGA 2560 x 2048 + + + QUXGA 3200 × 2400 + QUXGA 3200 × 2400 + + + HUXGA 6400 × 4800 + HUXGA 6400 × 4800 - QUXGA 3200 × 2400 - QUXGA 3200 × 2400 + !!! 10000 x 10000 + !!! 10000 x 10000 - HUXGA 6400 × 4800 - HUXGA 6400 × 4800 + Standard sizes: + 标准尺寸: - !!! 10000 x 10000 - !!! 10000 x 10000 + &Height: + 高度(&H): - Standard sizes: - 标准尺寸: + Aspect ratio: + 高宽比: - &Height: - 高度(&H): + &Screen + 屏幕(&S) - Aspect ratio: - 高宽比: + Alt+S + Alt+S - &Screen - 屏幕(&S) + &4:3 + &4:3 - Alt+S - Alt+S + Alt+4 + Alt+4 - &4:3 - &4:3 + 1&6:9 + 1&6:9 - Alt+4 - Alt+4 + Alt+6 + Alt+6 - 1&6:9 - 1&6:9 + &1:1 + &1:1 - Alt+6 - Alt+6 + Alt+1 + Alt+1 - &1:1 - &1:1 + Image comment + 图像备注 - Alt+1 - Alt+1 + Insert MIBA + 插入 MIBA - Image comment - 图像备注 + Insert comment + 插入批注 - - Insert MIBA - 插入 MIBA - - - Insert comment - 插入批注 - - - + + Gui::Dialog::DlgSettingsMacro - Macro - + Macro + - Macro recording settings - 宏录制设置 + Macro recording settings + 宏录制设置 - Logging Commands - 记录命令 + Logging Commands + 记录命令 - Show script commands in python console - 在Python控制台显示脚本 + Show script commands in python console + 在Python控制台显示脚本 - Log all commands issued by menus to file: - 记录所有菜单执行命令到文件: + Log all commands issued by menus to file: + 记录所有菜单执行命令到文件: - FullScript.FCScript - FullScript.FCScript + FullScript.FCScript + FullScript.FCScript - Gui commands - GUI命令 + Gui commands + GUI命令 - Recording GUI commands - 记录GUI命令 + Recording GUI commands + 记录GUI命令 - Record as comment - 录制为注释 + Record as comment + 录制为注释 - Macro path - 宏路径 + Macro path + 宏路径 - - + + General macro settings + + + + Run macros in local environment + + + + Gui::Dialog::DlgSettingsUnits - Units - 单位 + Units + 单位 - Units settings - 单位设置 + Units settings + 单位设置 - Standard (mm/kg/s/degree) - 标准(mm/kg/s/degree) + Standard (mm/kg/s/degree) + 标准(mm/kg/s/degree) - MKS (m/kg/s/degree) - 公制(m/kg/s/degree) + MKS (m/kg/s/degree) + 公制(m/kg/s/degree) - Magnitude - 量纲 + Magnitude + 量纲 - Unit - 单位 + Unit + 单位 - User system: - 用户系统: + User system: + 用户系统: - Imperial (in/lb) - 英制 (in/lb) + Imperial (in/lb) + 英制 (in/lb) - - + + Gui::Dialog::DlgSettingsViewColor - Colors - 颜色 + Colors + 颜色 - Selection - 选择 + Selection + 选择 - Enable selection highlighting - 启用选择高亮 + Enable selection highlighting + 启用选择高亮 - Enable preselection highlighting - 启用预选高亮 + Enable preselection highlighting + 启用预选高亮 - Background color - 背景颜色 + Background color + 背景颜色 - Middle color - 中间色 + Middle color + 中间色 - Color gradient - 渐变颜色 + Color gradient + 渐变颜色 - Simple color - 简单颜色 + Simple color + 简单颜色 - Default colors - 默认颜色 + Default colors + 默认颜色 - Edited edge color - Edited edge color + Edited edge color + Edited edge color - Edited vertex color - Edited vertex color + Edited vertex color + Edited vertex color - Construction geometry - 构造几何体 + Construction geometry + 构造几何体 - Fully constrained geometry - 完全约束几何体 + Fully constrained geometry + 完全约束几何体 - The color of construction geometry in editmode - 编辑模式下构造几何体的颜色 + The color of construction geometry in editmode + 编辑模式下构造几何体的颜色 - The color of fully constrained geometry in editmode - 编辑模式下完全约束几何体的颜色 + The color of fully constrained geometry in editmode + 编辑模式下完全约束几何体的颜色 - The color of vertices being edited - 编辑状态顶点的颜色 + The color of vertices being edited + 编辑状态顶点的颜色 - The color of edges being edited - The color of edges being edited + The color of edges being edited + The color of edges being edited - - + + The color of construction geometry in edit mode + + + + The color of fully constrained geometry in edit mode + + + + Cursor text color + + + + Default shape color + + + + The default color for new shapes + + + + Default line width and color + + + + The default line color for new shapes + + + + The default line thickness for new shapes + + + + px + + + + Gui::Dialog::DlgTipOfTheDay - Tip of the day - 每日一帖 + Tip of the day + 每日一帖 - <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> - <b><font face="Times New Roman"><font size="+3">你知道么...</font></font></b> + <b><font face="Times New Roman"><font size="+3">Did you know...</font></font></b> + <b><font face="Times New Roman"><font size="+3">你知道么...</font></font></b> - &Show tips at start up - 启动时提示(&S) + &Show tips at start up + 启动时提示(&S) - Alt+S - Alt+S + Alt+S + Alt+S - &Next Tip - 下一个(&N) + &Next Tip + 下一个(&N) - Alt+N - Alt+N + Alt+N + Alt+N - &Close - 关闭(&C) + &Close + 关闭(&C) - Alt+C - Alt+C + Alt+C + Alt+C - - 关于 + + 关于 - - + + Gui::Dialog::DlgTipOfTheDayImp - Download failed: %1 + Download failed: %1 - 下载失败: %1 + 下载失败: %1 - If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. - 如果您想了解更多有关FreeCAD,请访问 %1 或点击帮助菜单中的帮助文件. + If you want to learn more about FreeCAD you must go to %1 or press the Help item in the Help menu. + 如果您想了解更多有关FreeCAD,请访问 %1 或点击帮助菜单中的帮助文件. - - + + Gui::Dialog::DockablePlacement - Placement - 定位 + Placement + 定位 - - + + Gui::Dialog::DownloadDialog - Canceled. - 取消. + Canceled. + 取消. - - + + Download + + + + Cancel + 取消 + + + Close + 关闭 + + + There already exists a file called %1 in the current directory. Overwrite? + + + + Unable to save the file %1: %2. + + + + Downloading %1. + + + + Download canceled. + + + + Download failed: %1. + 下载失败: %1. + + + Downloaded %1 to current directory. + + + + Gui::Dialog::IconDialog - Add icon - 添加图标 + Add icon + 添加图标 - - + + Gui::Dialog::InputVector - Input vector - 输入向量 + Input vector + 输入向量 - Vector - 向量 + Vector + 向量 - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - OK - 确定 + OK + 确定 - - + + + Gui::Dialog::LicenseDialog + + Copyright + + + + Gui::Dialog::MouseButtons - Mouse buttons - 鼠标按键 + Mouse buttons + 鼠标按键 - Configuration - 配置 + Configuration + 配置 - Selection: - 选择: + Selection: + 选择: - Panning - 平移 + Panning + 平移 - Rotation: - 旋转: + Rotation: + 旋转: - Zooming: - 缩放: + Zooming: + 缩放: - - + + Gui::Dialog::ParameterGroup - Expand - 展开 + Expand + 展开 - Add sub-group - 添加子组 + Add sub-group + 添加子组 - Remove group - 删除组 + Remove group + 删除组 - Rename group - 重命名组 + Rename group + 重命名组 - Export parameter - 导出参数 + Export parameter + 导出参数 - Import parameter - 导入参数 + Import parameter + 导入参数 - Collapse - 折叠 + Collapse + 折叠 - Do really want to remove this parameter group? - 是否真的删除此参数组? + Do really want to remove this parameter group? + 是否真的删除此参数组? - Existing sub-group - 已存在子组 + Existing sub-group + 已存在子组 - The sub-group '%1' already exists. - 子组'%1'已经存在. + The sub-group '%1' already exists. + 子组'%1'已经存在. - Export parameter to file - 导出参数到文件 + Export parameter to file + 导出参数到文件 - XML (*.FCParam) - XML (*.FCParam) + XML (*.FCParam) + XML (*.FCParam) - Import parameter from file - 从文件中导入参数 + Import parameter from file + 从文件中导入参数 - Import Error - 导入错误 + Import Error + 导入错误 - Reading from '%1' failed. - 读取'%1'失败. + Reading from '%1' failed. + 读取'%1'失败. - - + + Gui::Dialog::ParameterValue - Change value - 更改值 + Change value + 更改值 - Remove key - 删除键 + Remove key + 删除键 - Rename key - 重命名键 + Rename key + 重命名键 - New - 新建 + New + 新建 - New string item - 新字符串项 + New string item + 新字符串项 - New float item - 新浮点数 + New float item + 新浮点数 - New integer item - 新整数 + New integer item + 新整数 - New unsigned item - 新无符号数 + New unsigned item + 新无符号数 - New Boolean item - 新布尔值 + New Boolean item + 新布尔值 - Existing item - 已存在项目 + Existing item + 已存在项目 - The item '%1' already exists. - 对象'%1'已经存在. + The item '%1' already exists. + 对象'%1'已经存在. - - + + Gui::Dialog::Placement - Placement - 定位 + Placement + 定位 - OK - 确定 + OK + 确定 - Translation: - 变换: + Translation: + 变换: - Z: - Z: + Z: + Z: - Y: - Y: + Y: + Y: - X: - X: + X: + X: - Rotation: - 旋转: + Rotation: + 旋转: - Angle: - 角度: + Angle: + 角度: - Axis: - 轴: + Axis: + 轴: - Center: - 中心: + Center: + 中心: - Pitch: - 间距: + Pitch: + 间距: - Roll: - 卷: + Roll: + 卷: - Yaw: - 偏: + Yaw: + 偏: - Rotation axis with angle - Rotation axis with angle + Rotation axis with angle + Rotation axis with angle - Euler angles - 欧拉角 + Euler angles + 欧拉角 - Apply placement changes immediately - 立即应用更改 + Apply placement changes immediately + 立即应用更改 - Apply incremental changes to object placement - 应用更改到对象 + Apply incremental changes to object placement + 应用更改到对象 - Apply - 应用 + Apply + 应用 - Reset - 重设 + Reset + 重设 - Close - 关闭 + Close + 关闭 - - + + Gui::Dialog::PrintModel - Button - 按钮 + Button + 按钮 - Command - 命令 + Command + 命令 - - + + Gui::Dialog::SceneInspector - Dialog - 对话框 + Dialog + 对话框 - Close - 关闭 + Close + 关闭 - Refresh - 刷新 + Refresh + 刷新 - - + + Gui::Dialog::SceneModel - Inventor Tree - 结构树 + Inventor Tree + 结构树 - Nodes - 节点 + Nodes + 节点 - - + + Gui::Dialog::TextureMapping - Texture - 纹理 + Texture + 纹理 - Texture mapping - 纹理映射 + Texture mapping + 纹理映射 - Global - 全局 + Global + 全局 - Environment - 环境 + Environment + 环境 - Image files (%1) - 图像文件(%1) + Image files (%1) + 图像文件(%1) - No image - 无图片 + No image + 无图片 - The specified file is not a valid image file. - 指定的文件不是有效的图像文件. + The specified file is not a valid image file. + 指定的文件不是有效的图像文件. - No 3d view - 无3D视图 + No 3d view + 无3D视图 - No active 3d view found. - 未发现活动的3d视图. + No active 3d view found. + 未发现活动的3d视图. - - + + Gui::Dialog::Transform - Cancel - 取消 + Cancel + 取消 - Transform - 变换 + Transform + 变换 - - + + Gui::DlgTreeWidget - Dialog - 对话框 + Dialog + 对话框 - Items - 项目 + Items + 项目 - OK - 确定 + OK + 确定 - Cancel - 取消 + Cancel + 取消 - - 关于 + + 关于 - - + + Gui::DockWnd::CombiView - CombiView - 组合视图 + CombiView + 组合视图 - Project - 项目 + Project + 项目 - Tasks - 任务 + Tasks + 任务 - - + + Gui::DockWnd::HelpView - Previous - 上一个 + Previous + 上一个 - Next - 下一个 + Next + 下一个 - Home - 主页 + Home + 主页 - Open - 打开 + Open + 打开 - Open file - 打开文件 + Open file + 打开文件 - All HTML files (*.html *.htm) - 所有HTML文件(*.html *.htm) + All HTML files (*.html *.htm) + 所有HTML文件(*.html *.htm) - External browser - 外部浏览器 + External browser + 外部浏览器 - No external browser found. Specify in preferences, please - 未发现外部浏览器.请在首选项中设置 + No external browser found. Specify in preferences, please + 未发现外部浏览器.请在首选项中设置 - Starting of %1 failed - 启动 %1 失败 + Starting of %1 failed + 启动 %1 失败 - - + + Gui::DockWnd::PropertyDockView - Property View - 属性浏览器 + Property View + 属性浏览器 - - + + Gui::DockWnd::ReportOutput - Logging - 日志 + Logging + 日志 - Warning - 警告 + Warning + 警告 - Error - 错误 + Error + 错误 - Options - 选项 + Options + 选项 - Clear - 清除 + Clear + 清除 - Save As... - 另存为... + Save As... + 另存为... - Save Report Output - 保存输出报告 + Save Report Output + 保存输出报告 - Plain Text Files (*.txt *.log) - 文本文件(*.txt *.log) + Plain Text Files (*.txt *.log) + 文本文件(*.txt *.log) - Go to end - 转到结束 + Go to end + 转到结束 - Redirect Python output - 重定向Python输出 + Redirect Python output + 重定向Python输出 - Redirect Python errors - Python错误重定向 + Redirect Python errors + Python错误重定向 - - + + Gui::DockWnd::ReportView - Output - 输出 + Output + 输出 - Python console - Python控制台 + Python console + Python控制台 - - + + Gui::DockWnd::SelectionView - Property View - 属性浏览器 + Property View + 属性浏览器 - - + + Gui::DockWnd::TaskPanelView - Task View - 任务浏览器 + Task View + 任务浏览器 - - + + Gui::DockWnd::TextBrowser - Could not open file. - 无法打开文件. + Could not open file. + 无法打开文件. - You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. - 您试图访问地址'%1',当前不可用。请确保URL存在,并重新尝试加载该页面. + You tried to access the address %1 which is currently unavailable. Please make sure that the URL exists and try reloading the page. + 您试图访问地址'%1',当前不可用。请确保URL存在,并重新尝试加载该页面. - Connecting to %1 - 连接到 %1 + Connecting to %1 + 连接到 %1 - Sending to %1 - 发送到 %1 + Sending to %1 + 发送到 %1 - Reading from %1 - 读取'%1' + Reading from %1 + 读取'%1' - Download failed: %1. - 下载失败: %1. + Download failed: %1. + 下载失败: %1. - Previous - 上一个 + Previous + 上一个 - Forward - 向前 + Forward + 向前 - Home - 主页 + Home + 主页 - Refresh - 刷新 + Refresh + 刷新 - Copy - 复制 + Copy + 复制 - Select all - 全选 + Select all + 全选 - No description for - 无说明 + No description for + 无说明 - - + + Gui::DocumentModel - Application - 工程 + Application + 工程 - Labels & Attributes - 标签 & 属性 + Labels & Attributes + 标签 & 属性 - - + + Gui::EditorView - Modified file - 修改后的文件 + Modified file + 修改后的文件 - %1. + %1. This has been modified outside of the source editor. Do you want to reload it? - %1. + %1. 它已被代码编辑器之外的程序修改.是否重新加载? - Unsaved document - 未保存的文件 + Unsaved document + 未保存的文件 - The document has been modified. + The document has been modified. Do you want to save your changes? - 该文件已被修改. + 该文件已被修改. 是否要保存更改? - FreeCAD macro (*.FCMacro);;Python (*.py) - FreeCAD 宏(*.FCMacro);;Python(*.py) + FreeCAD macro (*.FCMacro);;Python (*.py) + FreeCAD 宏(*.FCMacro);;Python(*.py) - Export PDF - 导出PDF + Export PDF + 导出PDF - PDF file (*.pdf) - PDF 文件(*.pdf) + PDF file (*.pdf) + PDF 文件(*.pdf) - untitled[*] - 无标题[*] + untitled[*] + 无标题[*] - - Editor - - Editor + - Editor + - Editor - %1 chars removed - 删除了 %1 个字符 + %1 chars removed + 删除了 %1 个字符 - %1 chars added - 增加了 %1 个字符 + %1 chars added + 增加了 %1 个字符 - Formatted - 已格式化 + Formatted + 已格式化 - - + + Gui::FileChooser - Select a file - 选择一个文件 + Select a file + 选择一个文件 - Select a directory - 选择一个目录 + Select a directory + 选择一个目录 - - + + Gui::FileDialog - Save as - 另存为 + Save as + 另存为 - Open - 打开 + Open + 打开 - - + + Gui::FileOptionsDialog - Extended - 扩展 + Extended + 扩展 - All files (*.*) - 所有文件(*.*) + All files (*.*) + 所有文件(*.*) - - + + Gui::Flag - Top left - 左上 + Top left + 左上 - Bottom left - 左下 + Bottom left + 左下 - Top right - 右上 + Top right + 右上 - Bottom right - 右下 + Bottom right + 右下 - Remove - 删除 + Remove + 删除 - - + + Gui::InventorNavigationStyle - Press CTRL and left mouse button - 按CTRL和鼠标左键 + Press CTRL and left mouse button + 按CTRL和鼠标左键 - Press middle mouse button - 按鼠标中键 + Press middle mouse button + 按鼠标中键 - Press left mouse button - 按鼠标左键 + Press left mouse button + 按鼠标左键 - Scroll middle mouse button - 滚动鼠标中键 + Scroll middle mouse button + 滚动鼠标中键 - - + + Gui::LocationDialog - Wrong direction - 方向错误 + Wrong direction + 方向错误 - Direction must not be the null vector - 方向不能是零向量 + Direction must not be the null vector + 方向不能是零向量 - X - X + X + X - Y - Y + Y + Y - Z - Z + Z + Z - User defined... - 用户定义... + User defined... + 用户定义... - - + + + Gui::LocationWidget + + X: + X: + + + Y: + Y: + + + Z: + Z: + + + Direction: + + + + Gui::MacroCommand - Macros - + Macros + - - + + Gui::MainWindow - Dimension - 尺寸标注 + Dimension + 尺寸标注 - Ready - 就绪 + Ready + 就绪 - Toggles this toolbar - 切换此工具栏 + Toggles this toolbar + 切换此工具栏 - Toggles this dockable window - 切换此可停靠的窗口 + Toggles this dockable window + 切换此可停靠的窗口 - Close All - 全部关闭 + Close All + 全部关闭 - - + + + Gui::ManualAlignment + + Manual alignment + + + + The alignment is already in progress. + + + + Alignment[*] + + + + Please, select at least one point in the left and the right view + + + + Please, select at least %1 points in the left and the right view + + + + Please pick points in the left and right view + + + + The alignment has finished + + + + The alignment has been canceled + + + + Too few points picked in the left view. At least %1 points are needed. + + + + Too few points picked in the right view. At least %1 points are needed. + + + + 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. + + + + Try to align group of views + + + + The alignment failed. +How do you want to proceed? + + + + Retry + + + + Ignore + + + + Abort + + + + 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. + + + + Point picked at (%1,%2,%3) + + + + No point was picked + + + + Gui::NetworkRetriever - Download started... + Download started... - 下载开始... + 下载开始... - - + + Gui::ProgressBar - Remaining: %1 - 剩余:%1 + Remaining: %1 + 剩余:%1 - Aborting - 异常终止 + Aborting + 异常终止 - Do you really want to abort the operation? - 你真的想中止运行么? + Do you really want to abort the operation? + 你真的想中止运行么? - - + + Gui::ProgressDialog - Remaining: %1 - 剩余:%1 + Remaining: %1 + 剩余:%1 - Aborting - 异常终止 + Aborting + 异常终止 - Do you really want to abort the operation? - 你真的想中止运行么? + Do you really want to abort the operation? + 你真的想中止运行么? - - + + Gui::PropertyEditor::PropertyModel - Property - 属性 + Property + 属性 - Value - + Value + - - + + Gui::PropertyView - View - 视图 + View + 视图 - Data - 数据 + Data + 数据 - - + + Gui::PythonConsole - System exit - 系统退出 + System exit + 系统退出 - The application is still running. + The application is still running. Do you want to exit without saving your data? - 应用程序仍在运行. + 应用程序仍在运行. 是否要退出而不保存数据? - Python console - Python控制台 + Python console + Python控制台 - Unhandled PyCXX exception. - 未处理的PyCXX异常. + Unhandled PyCXX exception. + 未处理的PyCXX异常. - Unhandled FreeCAD exception. - 未处理的FreeCAD异常. + Unhandled FreeCAD exception. + 未处理的FreeCAD异常. - Unhandled unknown C++ exception. - 未处理的未知c++异常. + Unhandled unknown C++ exception. + 未处理的未知c++异常. - &Copy command - 复制命令(&C) + &Copy command + 复制命令(&C) - &Copy history - 复制历史(&C) + &Copy history + 复制历史(&C) - Save history as... - 历史记录另存为... + Save history as... + 历史记录另存为... - Insert file name... - 插入文件名... + Insert file name... + 插入文件名... - Save History - 保存历史记录 + Save History + 保存历史记录 - Macro Files (*.FCMacro *.py) - 宏文件(*.FCMacro *.py) + Macro Files (*.FCMacro *.py) + 宏文件(*.FCMacro *.py) - Insert file name - 插入文件名 + Insert file name + 插入文件名 - All Files (*.*) - 所有文件(*.*) + All Files (*.*) + 所有文件(*.*) - Python Input Dialog - Python输入对话框 + Python Input Dialog + Python输入对话框 - Unhandled std C++ exception. - 未处理的标准c++异常. + Unhandled std C++ exception. + 未处理的标准c++异常. - Word wrap - 自动换行 + Word wrap + 自动换行 - &Copy - 复制(&C) + &Copy + 复制(&C) - &Paste - 粘贴(&P) + &Paste + 粘贴(&P) - Select All - 全选 + Select All + 全选 - - + + Clear console + + + + Gui::PythonEditor - Comment - 注释 + Comment + 注释 - Uncomment - 取消注释 + Uncomment + 取消注释 - - + + Gui::PythonInputField - OK - 确定 + OK + 确定 - Clear - 清除 + Clear + 清除 - - + + Gui::RecentFilesAction - Open file %1 - 打开文件%1 + Open file %1 + 打开文件%1 - File not found - 文件未找到 + File not found + 文件未找到 - The file '%1' cannot be opened. - 无法打开文件'%1'. + The file '%1' cannot be opened. + 无法打开文件'%1'. - - + + Gui::SelectModule - Select module - 选择模块 + Select module + 选择模块 - Open %1 as - 打开 %1 作为 + Open %1 as + 打开 %1 作为 - Select - 选择 + Select + 选择 - - + + Gui::StdCmdDescription - Help - 帮助 + Help + 帮助 - Des&cription - 描述(&C) + Des&cription + 描述(&C) - Long description of commands - 命令的详细描述 + Long description of commands + 命令的详细描述 - - + + Gui::StdCmdDownloadOnlineHelp - Help - 帮助 + Help + 帮助 - Download online help - 下载在线帮助 + Download online help + 下载在线帮助 - Download %1's online help - 下载 %1 的联机帮助 + Download %1's online help + 下载 %1 的联机帮助 - Non-existing directory - 不存在的目录 + Non-existing directory + 不存在的目录 - The directory '%1' does not exist. + The directory '%1' does not exist. Do you want to specify an existing directory? - 目录'%1'不存在. + 目录'%1'不存在. 你要指定一个现有的目录? - Missing permission - 缺少权限 + Missing permission + 缺少权限 - You don't have write permission to '%1' + You don't have write permission to '%1' Do you want to specify another directory? - 您没有写入'%1'权限 + 您没有写入'%1'权限 要指定另一个目录? - Stop downloading - 停止下载 + Stop downloading + 停止下载 - - + + Gui::StdCmdPythonHelp - Tools - 工具 + Tools + 工具 - Python Modules - Python模块 + Python Modules + Python模块 - Opens a browser to show the Python modules - 打开浏览器来查看Python模块 + Opens a browser to show the Python modules + 打开浏览器来查看Python模块 - - + + Gui::TaskBoxAngle - Angle - 角度 + Angle + 角度 - - + + Gui::TaskBoxPosition - Position - 位置 + Position + 位置 - - + + Gui::TaskView::TaskAppearance - Display mode: - 显示模式: + Display mode: + 显示模式: - Plot mode: - 绘制模式: + Plot mode: + 绘制模式: - Point size: - 点大小: + Point size: + 点大小: - Line width: - 线宽: + Line width: + 线宽: - Transparency: - 透明度: + Transparency: + 透明度: - Appearance - 外观 + Appearance + 外观 - - + + Document window: + + + + Gui::TaskView::TaskEditControl - Edit - 编辑 + Edit + 编辑 - - + + Gui::TaskView::TaskSelectLinkProperty - Appearance - 外观 + Appearance + 外观 - ... - ... + ... + ... - edit selection - 编辑选择 + edit selection + 编辑选择 - - + + + Gui::TouchpadNavigationStyle + + Press left mouse button + 按鼠标左键 + + + Press SHIFT button + + + + Press ALT button + + + + Press PgUp/PgDown button + + + + Gui::Translator - English - 英语 + English + 英语 - - + + Gui::TreeDockWidget - Tree view - 结构树浏览器 + Tree view + 结构树浏览器 - - + + Gui::TreeWidget - Create group... - 创建组... + Create group... + 创建组... - Create a group - 创建组 + Create a group + 创建组 - Group - + Group + - Rename - 重命名 + Rename + 重命名 - Rename object - 重命名对象 + Rename object + 重命名对象 - Labels & Attributes - 标签 & 属性 + Labels & Attributes + 标签 & 属性 - Application - 工程 + Application + 工程 - Finish editing - 完成编辑 + Finish editing + 完成编辑 - Finish editing object - 完成编辑对象 + Finish editing object + 完成编辑对象 - Activate document - 激活文档 + Activate document + 激活文档 - Activate document %1 - 激活文档 %1 + Activate document %1 + 激活文档 %1 - - + + Gui::View3DInventor - Export PDF - 导出PDF + Export PDF + 导出PDF - PDF file (*.pdf) - PDF 文件(*.pdf) + PDF file (*.pdf) + PDF 文件(*.pdf) - - + + Gui::WorkbenchGroup - Select the '%1' workbench - 选择'%1'工作台 + Select the '%1' workbench + 选择'%1'工作台 - - + + Position - Form - 窗体 + Form + 窗体 - X: - X: + X: + X: - Y: - Y: + Y: + Y: - Z: - Z: + Z: + Z: - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 100 mm + 200 mm + 100 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - Grid Snap in - 网格捕捉开 + Grid Snap in + 网格捕捉开 - - + + QDockWidget - Tree view - 结构树浏览器 + Tree view + 结构树浏览器 - Property view - 属性浏览器 + Property view + 属性浏览器 - Selection view - 选择浏览器 + Selection view + 选择浏览器 - Report view - 报告浏览器 + Report view + 报告浏览器 - Task View - 任务浏览器 + Task View + 任务浏览器 - Combo View - 组合浏览器 + Combo View + 组合浏览器 - Toolbox - 工具箱 + Toolbox + 工具箱 - Python console - Python控制台 + Python console + Python控制台 - Display properties - 显示属性 + Display properties + 显示属性 - - + + QObject - General - 常规 + General + 常规 - Display - 显示 + Display + 显示 - Unknown filetype - 未知文件类型 + Unknown filetype + 未知文件类型 - Cannot open unknown filetype: %1 - 无法打开未知文件类型: %1 + Cannot open unknown filetype: %1 + 无法打开未知文件类型: %1 - Cannot save to unknown filetype: %1 - 无法保存为未知的文件类型: %1 + Cannot save to unknown filetype: %1 + 无法保存为未知的文件类型: %1 - Workbench failure - 工作台故障 + Workbench failure + 工作台故障 - %1 - %1 + %1 + %1 - Unable to launch Qt Assistant (%1) - 无法启动Qt助手(%1) + Unable to launch Qt Assistant (%1) + 无法启动Qt助手(%1) - Exception - 异常 + Exception + 异常 - Open document - 打开文档 + Open document + 打开文档 - Import file - 导入文件 + Import file + 导入文件 - Export file - 导出文件 + Export file + 导出文件 - Printing... - 打印... + Printing... + 打印... - Cannot load workbench - 无法加载工作台 + Cannot load workbench + 无法加载工作台 - A general error occurred while loading the workbench - 加载工作台时出错 + A general error occurred while loading the workbench + 加载工作台时出错 - File not found - 文件未找到 + File not found + 文件未找到 - Cannot open file %1 - 无法打开文件 %1 + Cannot open file %1 + 无法打开文件 %1 - Save views... - 保存视图... + Save views... + 保存视图... - Load views... - 加载视图... + Load views... + 加载视图... - Freeze view - 冻结视图 + Freeze view + 冻结视图 - Clear views - 清除视图 + Clear views + 清除视图 - Restore view &%1 - 还原视图 &%1 + Restore view &%1 + 还原视图 &%1 - Save frozen views - 保存冻结视图 + Save frozen views + 保存冻结视图 - Frozen views (*.cam) - 冻结视图(*.cam) + Frozen views (*.cam) + 冻结视图(*.cam) - Restore views - 还原视图 + Restore views + 还原视图 - Importing the restored views would clear the already stored views. + Importing the restored views would clear the already stored views. Do you want to continue? - 导入还原视图将清除已存储的视图.是否继续? + 导入还原视图将清除已存储的视图.是否继续? - Restore frozen views - 回复冻结视图 + Restore frozen views + 回复冻结视图 - Cannot open file '%1'. - 无法打开文件'%1'. + Cannot open file '%1'. + 无法打开文件'%1'. - Docked - 停靠 + Docked + 停靠 - Undocked - 不停靠 + Undocked + 不停靠 - Fullscreen - 全屏 + Fullscreen + 全屏 - files - 文件 + files + 文件 - Save picture - 保存图片 + Save picture + 保存图片 - New sub-group - 新次级组 + New sub-group + 新次级组 - Enter the name: - 输入名称: + Enter the name: + 输入名称: - New text item - 新文本 + New text item + 新文本 - Enter your text: - 输入文本: + Enter your text: + 输入文本: - New integer item - 新整数 + New integer item + 新整数 - Enter your number: - 输入数字: + Enter your number: + 输入数字: - New unsigned item - 新无符号数 + New unsigned item + 新无符号数 - New float item - 新浮点数 + New float item + 新浮点数 - New Boolean item - 新布尔值 + New Boolean item + 新布尔值 - Choose an item: - 选择对象: + Choose an item: + 选择对象: - Rename group - 重命名组 + Rename group + 重命名组 - The group '%1' cannot be renamed. - 组'%1'无法重命名. + The group '%1' cannot be renamed. + 组'%1'无法重命名. - Existing group - 已存在组 + Existing group + 已存在组 - The group '%1' already exists. - 组'%1'已存在. + The group '%1' already exists. + 组'%1'已存在. - Change value - 更改值 + Change value + 更改值 - Save document under new filename... - 使用新的文件名保存文档... + Save document under new filename... + 使用新的文件名保存文档... - Saving aborted - 保存中止 + Saving aborted + 保存中止 - Unsaved document - 未保存的文件 + Unsaved document + 未保存的文件 - Save document before close? - 关闭前保存文档? + Save document before close? + 关闭前保存文档? - Save Macro - 保存宏 + Save Macro + 保存宏 - Finish - 完成 + Finish + 完成 - Clear - 清除 + Clear + 清除 - Cancel - 取消 + Cancel + 取消 - Inner - + Inner + - Outer - + Outer + - No Browser - 无浏览器 + No Browser + 无浏览器 - Unable to open your browser. + Unable to open your browser. Please open a browser window and type in: http://localhost:%1. - 无法打开您的浏览器。请打开浏览器窗口并输入:http://localhost:%1. + 无法打开您的浏览器。请打开浏览器窗口并输入:http://localhost:%1. - No Server - 无服务器 + No Server + 无服务器 - Unable to start the server to port %1: %2. - 无法从端口“%1:%2”启动服务器. + Unable to start the server to port %1: %2. + 无法从端口“%1:%2”启动服务器. - Unable to open your system browser. - 无法打开您的系统浏览器. + Unable to open your system browser. + 无法打开您的系统浏览器. - Options... - 选项... + Options... + 选项... - Out of memory - 内存不足 + Out of memory + 内存不足 - Not enough memory available to display the data. - 没有足够的可用内存来显示数据. + Not enough memory available to display the data. + 没有足够的可用内存来显示数据. - Cannot find file %1 - 找不到文件 %1 + Cannot find file %1 + 找不到文件 %1 - Cannot find file %1 neither in %2 nor in %3 - 在 %2 或 %3 中找不到文件 %1 + Cannot find file %1 neither in %2 nor in %3 + 在 %2 或 %3 中找不到文件 %1 - Save %1 Document - 保存%1文件 + Save %1 Document + 保存%1文件 - %1 document (*.FCStd) - %1 文档(*.FCStd) + %1 document (*.FCStd) + %1 文档(*.FCStd) - Save As - 另存为 + Save As + 另存为 - %1 already exists. + %1 already exists. Do you want to replace it? - %1 已存在.想覆盖它吗? + %1 已存在.想覆盖它吗? - Document not closable - 文档不可关闭 + Document not closable + 文档不可关闭 - The document is not closable for the moment. - 文档当前无法关闭. + The document is not closable for the moment. + 文档当前无法关闭. - No OpenGL - 无 OpenGL + No OpenGL + 无 OpenGL - This system does not support OpenGL - 此系统不支持 OpenGL + This system does not support OpenGL + 此系统不支持 OpenGL - Help - 帮助 + Help + 帮助 - Unable to load documentation. + Unable to load documentation. In order to load it Qt 4.4 or higher is required. - 无法加载文档. + 无法加载文档. 加载它需要Qt4.4或更高版本. - %1 Help - %1 帮助 + %1 Help + %1 帮助 - Exporting PDF... - 导出 PDF... + Exporting PDF... + 导出 PDF... - Wrong selection - 选择错误 + Wrong selection + 选择错误 - Only one object selected. Please select two objects. + Only one object selected. Please select two objects. Be aware the point where you click matters. - 只有一个对象选中.请选择两个对象. + 只有一个对象选中.请选择两个对象. 请注意您的点击位置. - Please select two objects. + Please select two objects. Be aware the point where you click matters. - 请选择两个对象. + 请选择两个对象. 请注意您的点击位置. - New boolean item - 新布尔值 + New boolean item + 新布尔值 - Navigation styles - 导航样式 + Navigation styles + 导航样式 - %1 navigation - %1 导航 + %1 navigation + %1 导航 - Move annotation - 移动批注 + Move annotation + 移动批注 - Transform - 变换 + Transform + 变换 - The document is in editing mode and thus cannot be closed for the moment. + The document is in editing mode and thus cannot be closed for the moment. You either have to finish or cancel the editing in the task panel. - 文档处于编辑模式,当前无法关闭. 您可选择在任务面板中完成或取消编辑. + 文档处于编辑模式,当前无法关闭. 您可选择在任务面板中完成或取消编辑. - - + + + StdBoxSelection + + Standard-View + 标准视图 + + + Box selection + + + + StdCmdAbout - Help - 帮助 + Help + 帮助 - &About %1 - 关于%1(&A) + &About %1 + 关于%1(&A) - About %1 - 关于 %1 + About %1 + 关于 %1 - - + + StdCmdAboutQt - Help - 帮助 + Help + 帮助 - About &Qt - 关于Qt(&Q) + About &Qt + 关于Qt(&Q) - About Qt - 关于Qt + About Qt + 关于Qt - - + + StdCmdActivateNextWindow - Window - 窗口 + Window + 窗口 - Ne&xt - 下一个(&X) + Ne&xt + 下一个(&X) - Activate next window - 激活下一个窗口 + Activate next window + 激活下一个窗口 - - + + StdCmdActivatePrevWindow - Window - 窗口 + Window + 窗口 - Pre&vious - 上一个(&V) + Pre&vious + 上一个(&V) - Activate previous window - 激活上一个窗口 + Activate previous window + 激活上一个窗口 - - + + + StdCmdAlignment + + Edit + 编辑 + + + Alignment... + + + + Align the selected objects + + + + StdCmdArrangeIcons - Window - 窗口 + Window + 窗口 - Arrange &Icons - 排列图标(&I) + Arrange &Icons + 排列图标(&I) - Arrange Icons - 排列图标 + Arrange Icons + 排列图标 - - + + StdCmdAxisCross - Standard-View - 标准视图 + Standard-View + 标准视图 - Toggle axis cross - Toggle axis cross + Toggle axis cross + Toggle axis cross - - + + StdCmdCascadeWindows - Window - 窗口 + Window + 窗口 - &Cascade - 层叠(&C) + &Cascade + 层叠(&C) - Tile pragmatic - 完整平铺 + Tile pragmatic + 完整平铺 - - + + StdCmdCloseActiveWindow - Window - 窗口 + Window + 窗口 - Cl&ose - 关闭 + Cl&ose + 关闭 - Close active window - 关闭当前窗口 + Close active window + 关闭当前窗口 - - + + StdCmdCloseAllWindows - Window - 窗口 + Window + 窗口 - Close Al&l - 全部关闭(&L) + Close Al&l + 全部关闭(&L) - Close all windows - 关闭所有窗口 + Close all windows + 关闭所有窗口 - - + + StdCmdCommandLine - Tools - 工具 + Tools + 工具 - Start command &line... - 启动命令行(&L)... + Start command &line... + 启动命令行(&L)... - Opens the command line in the console - 在控制台打开命令行 + Opens the command line in the console + 在控制台打开命令行 - - + + StdCmdCopy - Edit - 编辑 + Edit + 编辑 - C&opy - 复制(&C) + C&opy + 复制(&C) - Copy operation - 复制操作 + Copy operation + 复制操作 - - + + StdCmdCut - Edit - 编辑 + Edit + 编辑 - &Cut - 剪切(&C) + &Cut + 剪切(&C) - Cut out - 剪出 + Cut out + 剪出 - - + + StdCmdDDuplicateSelection - Edit - 编辑 + Edit + 编辑 - Duplicate selection - 复制选择 + Duplicate selection + 复制选择 - Put duplicates of the selected objects to the active document - 把选中对象的复制副本放到当前文档 + Put duplicates of the selected objects to the active document + 把选中对象的复制副本放到当前文档 - - + + StdCmdDelete - Edit - 编辑 + Edit + 编辑 - &Delete - 删除(&D) + &Delete + 删除(&D) - Deletes the selected objects - 删除选中的对象 + Deletes the selected objects + 删除选中的对象 - - + + StdCmdDemoMode - Standard-View - 标准视图 + Standard-View + 标准视图 - View turntable... - 视图罗盘... + View turntable... + 视图罗盘... - View turntable - 视图罗盘 + View turntable + 视图罗盘 - - + + StdCmdDlgCustomize - Tools - 工具 + Tools + 工具 - Cu&stomize... - 自定义(&S)... + Cu&stomize... + 自定义(&S)... - Customize toolbars and command bars - 自定义工具栏和命令栏 + Customize toolbars and command bars + 自定义工具栏和命令栏 - - + + StdCmdDlgMacroExecute - Macros ... - 宏 ... + Macros ... + 宏 ... - Opens a dialog to let you execute a recorded macro - 打开一个对话框,执行一个录制的宏 + Opens a dialog to let you execute a recorded macro + 打开一个对话框,执行一个录制的宏 - Macro - + Macro + - - + + StdCmdDlgMacroExecuteDirect - Macro - + Macro + - Execute macro - 执行宏 + Execute macro + 执行宏 - Execute the macro in the editor - 在编辑器中运行宏 + Execute the macro in the editor + 在编辑器中运行宏 - - + + StdCmdDlgMacroRecord - &Macro recording ... - 宏录制(&M)... + &Macro recording ... + 宏录制(&M)... - Opens a dialog to record a macro - 打开一个对话框,录制宏 + Opens a dialog to record a macro + 打开一个对话框,录制宏 - Macro - + Macro + - - + + StdCmdDlgParameter - Tools - 工具 + Tools + 工具 - E&dit parameters ... - 编辑参数(&E)... + E&dit parameters ... + 编辑参数(&E)... - Opens a Dialog to edit the parameters - 打开一个对话框编辑参数 + Opens a Dialog to edit the parameters + 打开一个对话框编辑参数 - - + + StdCmdDlgPreferences - Tools - 工具 + Tools + 工具 - &Preferences ... - 选项(&P)... + &Preferences ... + 选项(&P)... - Opens a Dialog to edit the preferences - 打开一个对话框编辑首选项 + Opens a Dialog to edit the preferences + 打开一个对话框编辑首选项 - - + + StdCmdDockViewMenu - View - 视图 + View + 视图 - Vie&ws - 视图(&W) + Vie&ws + 视图(&W) - Toggles this window - 切换窗口 + Toggles this window + 切换窗口 - - + + StdCmdDrawStyle - Standard-View - 标准视图 + Standard-View + 标准视图 - Draw style - Draw style + Draw style + Draw style - - + + + StdCmdDuplicateSelection + + Edit + 编辑 + + + Duplicate selection + 复制选择 + + + Put duplicates of the selected objects to the active document + 把选中对象的复制副本放到当前文档 + + + + StdCmdEdit + + Edit + 编辑 + + + Toggle &Edit mode + + + + Toggles the selected object's edit mode + + + + Enters or leaves the selected object's edit mode + + + + StdCmdExport - File - 文件 + File + 文件 - &Export... - 导出(&E)... + &Export... + 导出(&E)... - Export an object in the active document - 导出当前文档中的一个对象 + Export an object in the active document + 导出当前文档中的一个对象 - Supported formats - 支持的格式 + Supported formats + 支持的格式 - - + + No selection + + + + Please select first the objects you want to export. + + + + + StdCmdExportGraphviz + + Tools + 工具 + + + Dependency graph... + + + + Show the dependency graph of the objects in the active document + + + + StdCmdFeatRecompute - File - 文件 + File + 文件 - &Recompute - 重新计算(&R) + &Recompute + 重新计算(&R) - Recompute feature or document - 重新计算"特征"或"文档" + Recompute feature or document + 重新计算"特征"或"文档" - - + + StdCmdFreeCADWebsite - Help - 帮助 + Help + 帮助 - FreeCAD Website - FreeCAD网站 + FreeCAD Website + FreeCAD网站 - The FreeCAD website - FreeCAD 网站 + The FreeCAD website + FreeCAD 网站 - - + + StdCmdFreezeViews - Standard-View - 标准视图 + Standard-View + 标准视图 - Freeze display - 冻结显示 + Freeze display + 冻结显示 - Freezes the current view position - 冻结当前视图位置 + Freezes the current view position + 冻结当前视图位置 - - + + StdCmdHideObjects - Standard-View - 标准视图 + Standard-View + 标准视图 - Hide all objects - 隐藏所有对象 + Hide all objects + 隐藏所有对象 - Hide all objects in the document - 隐藏文档中的所有对象 + Hide all objects in the document + 隐藏文档中的所有对象 - - + + StdCmdHideSelection - Standard-View - 标准视图 + Standard-View + 标准视图 - Hide selection - 隐藏选中对象 + Hide selection + 隐藏选中对象 - Hide all selected objects - 隐藏所有选定的对象 + Hide all selected objects + 隐藏所有选定的对象 - - + + StdCmdImport - File - 文件 + File + 文件 - &Import... - 导入(&I)... + &Import... + 导入(&I)... - Import a file in the active document - 在当前文档中导入文件 + Import a file in the active document + 在当前文档中导入文件 - Supported formats - 支持的格式 + Supported formats + 支持的格式 - All files (*.*) - 所有文件(*.*) + All files (*.*) + 所有文件(*.*) - - + + StdCmdMacroStartDebug - Macro - + Macro + - Debug macro - 调试宏 + Debug macro + 调试宏 - Start debugging of macro - 开始调试宏 + Start debugging of macro + 开始调试宏 - - + + StdCmdMacroStepOver - Macro - + Macro + - Step over - 步进 + Step over + 步进 - - + + StdCmdMacroStopDebug - Macro - + Macro + - Stop debugging - 停止调试 + Stop debugging + 停止调试 - Stop debugging of macro - 停止调试宏 + Stop debugging of macro + 停止调试宏 - - + + StdCmdMacroStopRecord - Macro - + Macro + - S&top macro recording - 停止宏录制(&T) + S&top macro recording + 停止宏录制(&T) - Stop the macro recording session - 停止宏录制进程 + Stop the macro recording session + 停止宏录制进程 - - + + StdCmdMeasureDistance - View - 视图 + View + 视图 - Measure distance - 测量距离 + Measure distance + 测量距离 - - + + StdCmdMeasurementSimple - Tools - 工具 + Tools + 工具 - Mesure distance - 测量距离 + Mesure distance + 测量距离 - Measures distance between two selected objects - 测量两个选中物体间距离 + Measures distance between two selected objects + 测量两个选中物体间距离 - - + + Measure distance + 测量距离 + + + StdCmdMergeProjects - File - 文件 + File + 文件 - Merge project... - 合并项目... + Merge project... + 合并项目... - Merge project - 合并项目 + Merge project + 合并项目 - %1 document (*.fcstd) - %1 文档(*.fcstd) + %1 document (*.fcstd) + %1 文档(*.fcstd) - Cannot merge project with itself. - 不能合并项目本身. + Cannot merge project with itself. + 不能合并项目本身. - - + + StdCmdNew - File - 文件 + File + 文件 - &New - 新建(&N) + &New + 新建(&N) - Create a new empty document - 创建一个新空白文档 + Create a new empty document + 创建一个新空白文档 - - + + StdCmdOnlineHelp - Help - 帮助 + Help + 帮助 - Show help to the application - 显示程序帮助 + Show help to the application + 显示程序帮助 - - + + StdCmdOnlineHelpPython - Help - 帮助 + Help + 帮助 - Python Manuals - Python手册 + Python Manuals + Python手册 - Show the Python documentation - 显示 Python 文档 + Show the Python documentation + 显示 Python 文档 - - + + StdCmdOnlineHelpWebsite - Help - 帮助 + Help + 帮助 - Help Website - 帮助网站 + Help Website + 帮助网站 - The website where the help is maintained - 帮助文件所在网站 + The website where the help is maintained + 帮助文件所在网站 - - + + StdCmdOpen - File - 文件 + File + 文件 - &Open... - 打开(&O)... + &Open... + 打开(&O)... - Open a document or import files - 打开一个文档或导入文件 + Open a document or import files + 打开一个文档或导入文件 - Supported formats - 支持的格式 + Supported formats + 支持的格式 - All files (*.*) - 所有文件(*.*) + All files (*.*) + 所有文件(*.*) - - + + StdCmdPaste - Edit - 编辑 + Edit + 编辑 - &Paste - 粘贴(&P) + &Paste + 粘贴(&P) - Paste operation - 粘贴操作 + Paste operation + 粘贴操作 - - + + StdCmdPlacement - Edit - 编辑 + Edit + 编辑 - Placement... - 定位... + Placement... + 定位... - Place the selected objects - 放置所选对象 + Place the selected objects + 放置所选对象 - - + + StdCmdPrint - File - 文件 + File + 文件 - &Print... - 打印(&P)... + &Print... + 打印(&P)... - Print the document - 打印文档 + Print the document + 打印文档 - - + + StdCmdPrintPdf - File - 文件 + File + 文件 - &Export PDF... - 导出PDF(&E)... + &Export PDF... + 导出PDF(&E)... - Export the document as PDF - 将文档导出为 PDF + Export the document as PDF + 将文档导出为 PDF - - + + StdCmdPrintPreview - File - 文件 + File + 文件 - &Print preview... - 打印预览(&P)... + &Print preview... + 打印预览(&P)... - Print the document - 打印文档 + Print the document + 打印文档 - Print preview - 打印预览 + Print preview + 打印预览 - - + + StdCmdProjectInfo - File - 文件 + File + 文件 - Project i&nformation... - 项目信息(&N)... + Project i&nformation... + 项目信息(&N)... - Show details of the currently active project - 显示当前项目详情 + Show details of the currently active project + 显示当前项目详情 - - + + StdCmdProjectUtil - Tools - 工具 + Tools + 工具 - Project utility... - 项目工具... + Project utility... + 项目工具... - Utility to extract or create project files - 提取或创建项目文件的工具 + Utility to extract or create project files + 提取或创建项目文件的工具 - - + + StdCmdPythonWebsite - Help - 帮助 + Help + 帮助 - Python Website - Python网站 + Python Website + Python网站 - The official Python website - Python官方网站 + The official Python website + Python官方网站 - - + + StdCmdQuit - File - 文件 + File + 文件 - E&xit - 退出(&X) + E&xit + 退出(&X) - Quits the application - 退出程序 + Quits the application + 退出程序 - - + + StdCmdRandomColor - File - 文件 + File + 文件 - Random color - 随机颜色 + Random color + 随机颜色 - - + + StdCmdRecentFiles - File - 文件 + File + 文件 - Recent files - 最近打开的文件 + Recent files + 最近打开的文件 - Recent file list - 最近文件列表 + Recent file list + 最近文件列表 - - + + StdCmdRedo - Edit - 编辑 + Edit + 编辑 - &Redo - 重做(&R) + &Redo + 重做(&R) - Redoes a previously undone action - 重做上次撤消的操作 + Redoes a previously undone action + 重做上次撤消的操作 - - + + StdCmdRefresh - Edit - 编辑 + Edit + 编辑 - &Refresh - 刷新(&R) + &Refresh + 刷新(&R) - Recomputes the current active document - 重新计算当前文档 + Recomputes the current active document + 重新计算当前文档 - - + + StdCmdSave - File - 文件 + File + 文件 - &Save - 保存(&S) + &Save + 保存(&S) - Save the active document - 保存当前文当 + Save the active document + 保存当前文当 - - + + StdCmdSaveAs - File - 文件 + File + 文件 - Save &As... - 另存为(&A)... + Save &As... + 另存为(&A)... - Save the active document under a new file name - 使用新文件名保存当前文档 + Save the active document under a new file name + 使用新文件名保存当前文档 - - + + StdCmdSceneInspector - Tools - 工具 + Tools + 工具 - Scene inspector... - 场景检索... + Scene inspector... + 场景检索... - Scene inspector - 场景检索 + Scene inspector + 场景检索 - - + + StdCmdSelectAll - Edit - 编辑 + Edit + 编辑 - Select &All - 全选(&A) + Select &All + 全选(&A) - Select all - 全选 + Select all + 全选 - - + + StdCmdSetAppearance - Standard-View - 标准视图 + Standard-View + 标准视图 - Appearance... - 外观... + Appearance... + 外观... - Sets the display properties of the selected object - 设置选中对象的显示属性 + Sets the display properties of the selected object + 设置选中对象的显示属性 - - + + StdCmdShowObjects - Standard-View - 标准视图 + Standard-View + 标准视图 - Show all objects - 显示所有对象 + Show all objects + 显示所有对象 - Show all objects in the document - 显示文档中的所有对象 + Show all objects in the document + 显示文档中的所有对象 - - + + StdCmdShowSelection - Standard-View - 标准视图 + Standard-View + 标准视图 - Show selection - 显示选择 + Show selection + 显示选择 - Show all selected objects - 显示所有选择的对象 + Show all selected objects + 显示所有选择的对象 - - + + StdCmdStatusBar - View - 视图 + View + 视图 - Status bar - 状态栏 + Status bar + 状态栏 - Toggles the status bar - 切换状态栏 + Toggles the status bar + 切换状态栏 - - + + StdCmdTextureMapping - Tools - 工具 + Tools + 工具 - Texture mapping... - 纹理映射... + Texture mapping... + 纹理映射... - Texture mapping - 纹理映射 + Texture mapping + 纹理映射 - - + + StdCmdTileWindows - Window - 窗口 + Window + 窗口 - &Tile - 平铺(&T) + &Tile + 平铺(&T) - Tile the windows - 平铺窗口 + Tile the windows + 平铺窗口 - - + + StdCmdToggleBreakpoint - Macro - + Macro + - Toggle breakpoint - 切换断点 + Toggle breakpoint + 切换断点 - - + + StdCmdToggleClipPlane - Standard-View - 标准视图 + Standard-View + 标准视图 - Clipping plane - 修剪平面 + Clipping plane + 修剪平面 - Toggles clipping plane for active view - 切换当前视图的平面裁剪 + Toggles clipping plane for active view + 切换当前视图的平面裁剪 - - + + StdCmdToggleNavigation - Standard-View - 标准视图 + Standard-View + 标准视图 - Toggle navigation/Edit mode - 切换导航/编辑模式 + Toggle navigation/Edit mode + 切换导航/编辑模式 - Toggle between navigation and edit mode - 在导航和编辑模式之间切换 + Toggle between navigation and edit mode + 在导航和编辑模式之间切换 - - + + StdCmdToggleObjects - Standard-View - 标准视图 + Standard-View + 标准视图 - Toggle all objects - 切换所有对象 + Toggle all objects + 切换所有对象 - Toggles visibility of all objects in the active document - 切换当前文档中所有对象的可见性 + Toggles visibility of all objects in the active document + 切换当前文档中所有对象的可见性 - - + + StdCmdToggleSelectability - Standard-View - 标准视图 + Standard-View + 标准视图 - Toggle selectability - 切换可选择性 + Toggle selectability + 切换可选择性 - Toggles the property of the objects to get selected in the 3D-View - 切换属性以在三维视图中选定对象 + Toggles the property of the objects to get selected in the 3D-View + 切换属性以在三维视图中选定对象 - - + + StdCmdToggleVisibility - Standard-View - 标准视图 + Standard-View + 标准视图 - Toggle visibility - 切换可见性 + Toggle visibility + 切换可见性 - Toggles visibility - 切换可见性 + Toggles visibility + 切换可见性 - - + + StdCmdToolBarMenu - View - 视图 + View + 视图 - Tool&bars - 工具栏(&B) + Tool&bars + 工具栏(&B) - Toggles this window - 切换窗口 + Toggles this window + 切换窗口 - - + + StdCmdTransform - Edit - 编辑 + Edit + 编辑 - Transform... - 变换... + Transform... + 变换... - Transform the geometry of selected objects - 几何变换选中对象 + Transform the geometry of selected objects + 几何变换选中对象 - - + + StdCmdTreeSelection - View - 视图 + View + 视图 - Go to selection - 转到选择 + Go to selection + 转到选择 - Scroll to first selected item - 滚动到第一选择的对象 + Scroll to first selected item + 滚动到第一选择的对象 - - + + StdCmdUndo - Edit - 编辑 + Edit + 编辑 - &Undo - 撤消(&U) + &Undo + 撤消(&U) - Undo exactly one action - 仅撤消一个操作 + Undo exactly one action + 仅撤消一个操作 - - + + StdCmdUserInterface - View - 视图 + View + 视图 - Dock views - 停靠视图 + Dock views + 停靠视图 - Dock all top-level views - 停靠所有顶级视图 + Dock all top-level views + 停靠所有顶级视图 - - + + StdCmdViewAxo - Standard-View - 标准视图 + Standard-View + 标准视图 - Axometric - 轴侧 + Axometric + 轴侧 - Set to axometric view - 设置为轴侧视图 + Set to axometric view + 设置为轴侧视图 - - + + StdCmdViewBottom - Standard-View - 标准视图 + Standard-View + 标准视图 - Bottom - 底视 + Bottom + 底视 - Set to bottom view - 设置为底视图 + Set to bottom view + 设置为底视图 - - + + StdCmdViewCreate - Standard-View - 标准视图 + Standard-View + 标准视图 - Create new view - 创建新视图 + Create new view + 创建新视图 - Creates a new view window for the active document - 为当前文档创建一个新的视图窗口 + Creates a new view window for the active document + 为当前文档创建一个新的视图窗口 - - + + StdCmdViewExample1 - Standard-View - 标准视图 + Standard-View + 标准视图 - Inventor example #1 - Inventor 实例#1 + Inventor example #1 + Inventor 实例#1 - Shows a 3D texture with manipulator - 自动控制显示3D纹理 + Shows a 3D texture with manipulator + 自动控制显示3D纹理 - - + + StdCmdViewExample2 - Standard-View - 标准视图 + Standard-View + 标准视图 - Inventor example #2 - Inventor 实例#2 + Inventor example #2 + Inventor 实例#2 - Shows spheres and drag-lights - 显示操控球和拖放指示 + Shows spheres and drag-lights + 显示操控球和拖放指示 - - + + StdCmdViewExample3 - Standard-View - 标准视图 + Standard-View + 标准视图 - Inventor example #3 - Inventor 实例#3 + Inventor example #3 + Inventor 实例#3 - Shows a animated texture - 显示一个动画纹理 + Shows a animated texture + 显示一个动画纹理 - - + + StdCmdViewFitAll - Standard-View - 标准视图 + Standard-View + 标准视图 - Fit all - 适合所有 + Fit all + 适合所有 - Fits the whole content on the screen - 在屏幕上容纳全部内容 + Fits the whole content on the screen + 在屏幕上容纳全部内容 - - + + StdCmdViewFitSelection - Standard-View - 标准视图 + Standard-View + 标准视图 - Fit selection - 适合选中 + Fit selection + 适合选中 - Fits the selected content on the screen - 适合在屏幕上选取的内容 + Fits the selected content on the screen + 适合在屏幕上选取的内容 - - + + StdCmdViewFront - Standard-View - 标准视图 + Standard-View + 标准视图 - Front - 前视 + Front + 前视 - Set to front view - 设置为前视图 + Set to front view + 设置为前视图 - - + + StdCmdViewIvIssueCamPos - Standard-View - 标准视图 + Standard-View + 标准视图 - Issue camera position - 发布相机位置 + Issue camera position + 发布相机位置 - Issue the camera position to the console and to a macro, to easily recall this position - 发布相机位置至控制台或宏,以便重新访问 + Issue the camera position to the console and to a macro, to easily recall this position + 发布相机位置至控制台或宏,以便重新访问 - - + + StdCmdViewIvStereoInterleavedColumns - Standard-View - 标准视图 + Standard-View + 标准视图 - Stereo Interleaved Columns - 三维成像列扫描 + Stereo Interleaved Columns + 三维成像列扫描 - Switch stereo viewing to Interleaved Columns - 切换三维成像视图为列扫描显示 + Switch stereo viewing to Interleaved Columns + 切换三维成像视图为列扫描显示 - - + + StdCmdViewIvStereoInterleavedRows - Standard-View - 标准视图 + Standard-View + 标准视图 - Stereo Interleaved Rows - 三维成像行扫描 + Stereo Interleaved Rows + 三维成像行扫描 - Switch stereo viewing to Interleaved Rows - 切换三维成像视图为行扫描显示 + Switch stereo viewing to Interleaved Rows + 切换三维成像视图为行扫描显示 - - + + StdCmdViewIvStereoOff - Standard-View - 标准视图 + Standard-View + 标准视图 - Stereo Off - 关闭三维成像 + Stereo Off + 关闭三维成像 - Switch stereo viewing off - 关闭三维成像视图 + Switch stereo viewing off + 关闭三维成像视图 - - + + StdCmdViewIvStereoQuadBuff - Standard-View - 标准视图 + Standard-View + 标准视图 - Stereo quad buffer - 三维成像缓存 + Stereo quad buffer + 三维成像缓存 - Switch stereo viewing to quad buffer - 切换三维成像视图为缓存显示 + Switch stereo viewing to quad buffer + 切换三维成像视图为缓存显示 - - + + StdCmdViewIvStereoRedGreen - Standard-View - 标准视图 + Standard-View + 标准视图 - Stereo red/green - 三维成像 红/绿 + Stereo red/green + 三维成像 红/绿 - Switch stereo viewing to red/green - 切换三维成像视图为红/绿显示 + Switch stereo viewing to red/green + 切换三维成像视图为红/绿显示 - - + + StdCmdViewLeft - Standard-View - 标准视图 + Standard-View + 标准视图 - Left - 左视 + Left + 左视 - Set to left view - 设置为左视图 + Set to left view + 设置为左视图 - - + + StdCmdViewRear - Standard-View - 标准视图 + Standard-View + 标准视图 - Rear - 后视 + Rear + 后视 - Set to rear view - 设置为后视图 + Set to rear view + 设置为后视图 - - + + StdCmdViewRight - Standard-View - 标准视图 + Standard-View + 标准视图 - Right - + Right + - Set to right view - 设置为右视图 + Set to right view + 设置为右视图 - - + + + StdCmdViewRotateLeft + + Standard-View + 标准视图 + + + Rotate Left + + + + Rotate the view by 90° counter-clockwise + + + + + StdCmdViewRotateRight + + Standard-View + 标准视图 + + + Rotate Right + + + + Rotate the view by 90° clockwise + + + + StdCmdViewTop - Standard-View - 标准视图 + Standard-View + 标准视图 - Top - 顶视 + Top + 顶视 - Set to top view - 设置为顶视图 + Set to top view + 设置为顶视图 - - + + StdCmdWhatsThis - Help - 帮助 + Help + 帮助 - &What's This? - 这是什么(&W)? + &What's This? + 这是什么(&W)? - What's This - 这是什么 + What's This + 这是什么 - - + + StdCmdWindows - Window - 窗口 + Window + 窗口 - &Windows... - 窗口(&W)... + &Windows... + 窗口(&W)... - Windows list - 窗口列表 + Windows list + 窗口列表 - - + + StdCmdWindowsMenu - Window - 窗口 + Window + 窗口 - Activates this window - 激活此窗口 + Activates this window + 激活此窗口 - - + + StdCmdWorkbench - View - 视图 + View + 视图 - Workbench - 工作台 + Workbench + 工作台 - Switch between workbenches - 工作台之间切换 + Switch between workbenches + 工作台之间切换 - - + + StdOrthographicCamera - Standard-View - 标准视图 + Standard-View + 标准视图 - Orthographic view - 平行视图 + Orthographic view + 平行视图 - Switches to orthographic view mode - 切换到正交视图模式 + Switches to orthographic view mode + 切换到正交视图模式 - - + + StdPerspectiveCamera - Standard-View - 标准视图 + Standard-View + 标准视图 - Perspective view - 透视视图 + Perspective view + 透视视图 - Switches to perspective view mode - 切换到透视视图模式 + Switches to perspective view mode + 切换到透视视图模式 - - + + StdViewBoxZoom - Standard-View - 标准视图 + Standard-View + 标准视图 - Box zoom - 框选缩放 + Box zoom + 框选缩放 - - + + StdViewDockUndockFullscreen - Standard-View - 标准视图 + Standard-View + 标准视图 - Document window - 文档窗口 + Document window + 文档窗口 - Display the active view either in fullscreen, in undocked or docked mode - 当前视图显示模式:1.全屏,2.不停靠,3.停靠 + Display the active view either in fullscreen, in undocked or docked mode + 当前视图显示模式:1.全屏,2.不停靠,3.停靠 - - + + StdViewScreenShot - Standard-View - 标准视图 + Standard-View + 标准视图 - Save picture... - 保存图片... + Save picture... + 保存图片... - Creates a screenshot of the active view - 创建当前视图的屏幕截图 + Creates a screenshot of the active view + 创建当前视图的屏幕截图 - - + + StdViewZoomIn - Standard-View - 标准视图 + Standard-View + 标准视图 - Zoom In - 放大 + Zoom In + 放大 - - + + StdViewZoomOut - Standard-View - 标准视图 + Standard-View + 标准视图 - Zoom Out - 缩小 + Zoom Out + 缩小 - - + + Std_DrawStyle - As is - As is + As is + As is - Normal mode - Normal mode + Normal mode + Normal mode - Wireframe - Wireframe + Wireframe + Wireframe - Wireframe mode - Wireframe mode + Wireframe mode + Wireframe mode - - + + + Std_ExportGraphviz + + Graphviz not found + + + + Graphviz couldn't be found on your system. +Do you want to specify its installation path if it's already installed? + + + + Graphviz installation path + + + + Dependency graph + + + + Graphviz failed + + + + Graphviz failed to create an image file + + + + Workbench - &File - 文件(&F) + &File + 文件(&F) - &Edit - 编辑(&E) + &Edit + 编辑(&E) - Standard views - 标准视图 + Standard views + 标准视图 - &Stereo - 立体成像(&S) + &Stereo + 立体成像(&S) - &Zoom - 缩放(&Z) + &Zoom + 缩放(&Z) - Visibility - 可见性 + Visibility + 可见性 - &View - 视图(&V) + &View + 视图(&V) - &Tools - 工具(&T) + &Tools + 工具(&T) - &Macro - 宏(&M) + &Macro + 宏(&M) - &Windows - 窗口(&W) + &Windows + 窗口(&W) - &On-line help - 在线帮助(&O) + &On-line help + 在线帮助(&O) - &Help - 帮助(&H) + &Help + 帮助(&H) - File - 文件 + File + 文件 - Macro - + Macro + - View - 视图 + View + 视图 - Special Ops - 特殊Ops + Special Ops + 特殊Ops - - + + testClass - test - 测试 + test + 测试 - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:20pt; font-weight:600;">iisTaskPanel</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:20pt; font-weight:600;"><span style=" font-size:12pt;">Created for Qt 4.3.x</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">www.ii-system.com</p></body></html> - Choose the style of the Task Panel - 选择任务面板的样式 + Choose the style of the Task Panel + 选择任务面板的样式 - Default - 默认 + Default + 默认 - Windows XP - Windows XP + Windows XP + Windows XP - + diff --git a/src/Mod/Arch/Resources/translations/Arch.ts b/src/Mod/Arch/Resources/translations/Arch.ts index 012eafbc1..252acbf82 100644 --- a/src/Mod/Arch/Resources/translations/Arch.ts +++ b/src/Mod/Arch/Resources/translations/Arch.ts @@ -3,43 +3,525 @@ Arch - + Components - - Remove child + + Components of this object - - Components of this object + + Axes + + + + + Create Axis + + + + + The intervals between axes + + + + + The angles of each axis + + + + + The length of the axes + + + + + The size of the axis bubbles + + + + + The numeration style + + + + + Remove + + + + + Add + + + + + Distances and angles between axes + + + + + Axis + + + + + Distance + + + + + Angle + + + + + Building + + + + + Type conversion + + + + + Create Building + + + + + Floor + + + + + removing sketch support to avoid cross-referencing + + + + + No objects are cut by the plane + + + + + is not closed + + + + + is not valid + + + + + doesn't contain any solid + + + + + contains a non-closed solid + + + + + contains faces that are not part of any solid + + + + + Grouping + + + + + Ungrouping + + + + + Split Mesh + + + + + Mesh to Shape + + + + + All good! no problems found + + + + + Base component + + + + + Additions + + + + + Subtractions + + + + + Objects + + + + + closing Sketch edit + + + + + The height of this floor + + + + + Roof + + + + + Create Roof + + + + + Unable to create a roof + + + + + No object selected + + + + + The angle of this roof + + + + + The face number of the base object used to build this roof + + + + + Page + + + + + View of + + + + + Create Section Plane + + + + + The objects that must be considered by this section plane. Empty means all document + + + + + The display size of this section plane + + + + + No shape has been computed yet, select wireframe rendering and render again + + + + + Skipping invalid object: + + + + + Site + + + + + Create Site + + + + + Structure + + + + + Create Structure + + + + + The length of this element, if not based on a profile + + + + + The width of this element, if not based on a profile + + + + + The height or extrusion depth of this element. Keep 0 for automatic + + + + + Axes systems this structure is built on + + + + + The normal extrusion direction of this object (keep (0,0,0) for automatic normal) + + + + + The element numbers to exclude when this structure is based on axes + + + + + Couldn't compute the wall shape + + + + + Wall + + + + + Create Wall + + + + + WallTrace + + + + + Wall options + + + + + Width + + + + + Height + + + + + Alignment + + + + + Continue + + + + + The width of this wall. Not used if this wall is based on a face + + + + + The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid + + + + + The alignment of this wall on its base object, if applicable + + + + + If True, if this wall is based on a face, it will use its border wire as trace, and disconsider the face. + + + + + Error: Invalid base object + + + + + This mesh is an invalid solid + + + + + Error removing splitter from wall shape + + + + + Window + + + + + Create Window + + + + + the components of this window + + + + + Unable to create component + + + + + Edit + + + + + Create/update component + + + + + Base 2D object + + + + + Wires + + + + + Create new component + + + + + Name + + + + + Type + + + + + Thickness + + + + + Z offset + + + + + pycollada not found, no collada support. + + + + + + Error: Couldn't determine character encoding + + + + + file %s successfully created. + + + + + Error: Couldn't determine character encoding + + + + + + Couldn't locate IfcOpenShell + + + + + + IFC Schema not found, IFC import disabled. + + + + + + successfully written Arch_Add - + Add component - + Adds the selected components to the active object + + Arch_Axis + + + Axis + + + + + Creates an axis system. + + + Arch_Building - + Building - + Creates a building object including selected objects. @@ -47,54 +529,80 @@ Arch_Cell - + Cell - + Creates a cell object including selected objects + + Arch_Check + + + Check + + + + + Checks the selected objects for problems + + + + + Arch_CloseHoles + + + Close holes + + + + + Closes holes in open shapes, turning them solids + + + Arch_Floor - + Floor - + Creates a floor object including selected objects Arch_MeshToPart - - - Turns selected meshes into Part Shape objects - - Arch_MeshToShape - + Mesh to Shape + + + Turns selected meshes into Part Shape objects + + Arch_Remove - + Remove component - + Remove the selected components from their parents, or create a hole in a component @@ -102,38 +610,51 @@ Arch_RemoveShape - + Remove Shape from Arch - + Removes cubic shapes from Arch components + + Arch_Roof + + + Roof + + + + + Creates a roof object from the selected face of an object + + + Arch_SectionPlane - + Section Plane - - Adds a section plane object to the document + + Creates a section plane object, including the selected objects Arch_SelectNonSolidMeshes - + Select non-manifold meshes - + Selects all non-manifold meshes from the document or from the selected groups @@ -141,12 +662,12 @@ Arch_Site - + Site - + Creates a site object including selected objects. @@ -154,12 +675,12 @@ Arch_SplitMesh - + Split Mesh - + Splits selected meshes into independent components @@ -167,12 +688,12 @@ Arch_Structure - + Structure - + Creates a structure object from scratch or from a selected object (sketch, wire, face or solid) @@ -180,12 +701,12 @@ Arch_Wall - + Wall - + Creates a wall object from scratch or from a selected object (wire, face or solid) @@ -193,13 +714,13 @@ Arch_Window - + Window - - Creates a window object from scratch or from a selected object (wire, rectangle or sketch) + + Creates a window object from a selected object (wire, rectangle or sketch) @@ -235,32 +756,113 @@ This is the default color for new Structure objects + + + Default color for windows + + + + + IFC import + + + + + If this is checked, the IFCOpenShell importer will be used, allowing to import more IFC types + + + + + Use IFCOpenShell if available + + + + + Creates groups for each Arch object type + + + + + Group components by types + + + + + Import furniture (can make the model heavy) + + + + + 2D rendering + + + + + Show debug information during 2D rendering + + + + + Show renderer debug messages + + + + + Cut areas line thickness ratio + + + + + Specifies how many times the viewed line thickness must be applied to cut lines + + arch - + Arch tools - + Draft tools - - Architecture + + Draft mod tools - - Tools + + &Architecture - - Draft + + Conversion Tools + + + + + Calculation Tools + + + + + &Draft + + + + + Context Tools + + + + + pycollada not found, collada support will be disabled. + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_af.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_af.ts index 0432f4b6b..28d2dada1 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_af.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_af.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Samevoeging + + Assembly + Samevoeging - - + + CmdAssemblyConstraintAxle - - Assembly - Samevoeging + + Assembly + Samevoeging - Constraint Axle... - Beperking met 'n as... + + Constraint Axle... + Beperking met 'n as... - set a axle constraint between two objects - definieer 'n bewegingsbeperking tussen twee voorwerpe met 'n as + + set a axle constraint between two objects + definieer 'n bewegingsbeperking tussen twee voorwerpe met 'n as - - + + Workbench - Assembly - Samevoeging + Assembly + Samevoeging - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_de.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_de.ts index f41d0a66c..22a4a0997 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_de.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_de.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Baugruppe + + Assembly + Baugruppe - - + + CmdAssemblyConstraintAxle - - Assembly - Baugruppe + + Assembly + Baugruppe - Constraint Axle... - Achseneinschränkung... + + Constraint Axle... + Achseneinschränkung... - set a axle constraint between two objects - Festlegen der Achsen-Einschränkung zwischen zwei Objekten + + set a axle constraint between two objects + Festlegen der Achsen-Einschränkung zwischen zwei Objekten - - + + Workbench - Assembly - Baugruppe + Assembly + Baugruppe - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_es.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_es.ts index 075dca66a..f20ddefe9 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_es.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_es.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Ensamblaje + + Assembly + Ensamblaje - - + + CmdAssemblyConstraintAxle - - Assembly - Ensamblaje + + Assembly + Ensamblaje - Constraint Axle... - Restricción de eje... + + Constraint Axle... + Restricción de eje... - set a axle constraint between two objects - definir una restricción de eje entre dos objetos + + set a axle constraint between two objects + definir una restricción de eje entre dos objetos - - + + Workbench - Assembly - Ensamblaje + Assembly + Ensamblaje - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_fi.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_fi.ts index 0caa8a788..23c04c2bf 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_fi.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_fi.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Kokoonpano + + Assembly + Kokoonpano - - + + CmdAssemblyConstraintAxle - - Assembly - Kokoonpano + + Assembly + Kokoonpano - Constraint Axle... - Akseli rajoite... + + Constraint Axle... + Akseli rajoite... - set a axle constraint between two objects - aseta akselirajoite kahden kohteen välille + + set a axle constraint between two objects + aseta akselirajoite kahden kohteen välille - - + + Workbench - Assembly - Kokoonpano + Assembly + Kokoonpano - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_fr.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_fr.ts index c4bb42139..5496d9185 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_fr.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_fr.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Assemblage + + Assembly + Assemblage - - + + CmdAssemblyConstraintAxle - - Assembly - Assemblage + + Assembly + Assemblage - Constraint Axle... - Contrainte axiale... + + Constraint Axle... + Contrainte axiale... - set a axle constraint between two objects - définir une contrainte axiale entre deux objets + + set a axle constraint between two objects + définir une contrainte axiale entre deux objets - - + + Workbench - Assembly - Assemblage + Assembly + Assemblage - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_hr.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_hr.ts index 9d3b0ca20..1af4818d3 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_hr.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_hr.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Montaža + + Assembly + Montaža - - + + CmdAssemblyConstraintAxle - - Assembly - Montaža + + Assembly + Montaža - Constraint Axle... - Ograničena osovina... + + Constraint Axle... + Ograničena osovina... - set a axle constraint between two objects - postaviti ograničenja osovine između dva objekta + + set a axle constraint between two objects + postaviti ograničenja osovine između dva objekta - - + + Workbench - Assembly - Montaža + Assembly + Montaža - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_hu.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_hu.ts index de1da07a5..ca864f50f 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_hu.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_hu.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Összeállítás + + Assembly + Összeállítás - - + + CmdAssemblyConstraintAxle - - Assembly - Összeállítás + + Assembly + Összeállítás - Constraint Axle... - Tengely menti kötés... + + Constraint Axle... + Tengely menti kötés... - set a axle constraint between two objects - tengely kötést hoz létre két tárgy között + + set a axle constraint between two objects + tengely kötést hoz létre két tárgy között - - + + Workbench - Assembly - Összeállítás + Assembly + Összeállítás - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_it.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_it.ts index 31d6f74b2..8b62be0e8 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_it.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_it.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Assembly + + Assembly + Assembly - - + + CmdAssemblyConstraintAxle - - Assembly - Assembly + + Assembly + Assembly - Constraint Axle... - Vincolo assiale... + + Constraint Axle... + Vincolo assiale... - set a axle constraint between two objects - Imposta un vincolo assiale tra due oggetti + + set a axle constraint between two objects + Imposta un vincolo assiale tra due oggetti - - + + Workbench - Assembly - Assembly + Assembly + Assembly - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_ja.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_ja.ts index 40e6ce8bb..efade504f 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_ja.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_ja.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - アセンブリ + + Assembly + アセンブリ - - + + CmdAssemblyConstraintAxle - - Assembly - アセンブリ + + Assembly + アセンブリ - Constraint Axle... - 軸拘束の設定... + + Constraint Axle... + 軸拘束の設定... - set a axle constraint between two objects - 二つのオブジェクト間に軸拘束を設定します。 + + set a axle constraint between two objects + 二つのオブジェクト間に軸拘束を設定します。 - - + + Workbench - Assembly - アセンブリ + Assembly + アセンブリ - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_nl.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_nl.ts index 22d2f0b98..fb67d12d7 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_nl.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_nl.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Samenstelling + + Assembly + Samenstelling - - + + CmdAssemblyConstraintAxle - - Assembly - Samenstelling + + Assembly + Samenstelling - Constraint Axle... - As-beperking... + + Constraint Axle... + As-beperking... - set a axle constraint between two objects - Stel een as-beperking tussen twee objecten in + + set a axle constraint between two objects + Stel een as-beperking tussen twee objecten in - - + + Workbench - Assembly - Samenstelling + Assembly + Samenstelling - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_no.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_no.ts index e5d17f48b..7ed835a0b 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_no.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_no.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Montering + + Assembly + Montering - - + + CmdAssemblyConstraintAxle - - Assembly - Montering + + Assembly + Montering - Constraint Axle... - Aksellås... + + Constraint Axle... + Aksellås... - set a axle constraint between two objects - sett en aksellås mellom to objekter + + set a axle constraint between two objects + sett en aksellås mellom to objekter - - + + Workbench - Assembly - Montering + Assembly + Montering - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_pl.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_pl.ts index aa15adea9..175c9be4a 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_pl.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_pl.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Złożenie + + Assembly + Złożenie - - + + CmdAssemblyConstraintAxle - - Assembly - Złożenie + + Assembly + Złożenie - Constraint Axle... - Ograniczenie osi ... + + Constraint Axle... + Ograniczenie osi ... - set a axle constraint between two objects - ustaw oś graniczną między dwoma obiektami + + set a axle constraint between two objects + ustaw oś graniczną między dwoma obiektami - - + + Workbench - Assembly - Złożenie + Assembly + Złożenie - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_pt.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_pt.ts index 1259b1cf2..c3792423b 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_pt.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_pt.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Assemblagem + + Assembly + Assemblagem - - + + CmdAssemblyConstraintAxle - - Assembly - Assemblagem + + Assembly + Assemblagem - Constraint Axle... - Restrição de eixo... + + Constraint Axle... + Restrição de eixo... - set a axle constraint between two objects - definir uma restrição de eixo entre dois objetos + + set a axle constraint between two objects + definir uma restrição de eixo entre dois objetos - - + + Workbench - Assembly - Assemblagem + Assembly + Assemblagem - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_ru.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_ru.ts index 2501d66f9..584d6afc2 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_ru.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_ru.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Сборка + + Assembly + Сборка - - + + CmdAssemblyConstraintAxle - - Assembly - Сборка + + Assembly + Сборка - Constraint Axle... - Ограничение оси... + + Constraint Axle... + Ограничение оси... - set a axle constraint between two objects - задать ось, ограниченную двумя объектами + + set a axle constraint between two objects + задать ось, ограниченную двумя объектами - - + + Workbench - Assembly - Сборка + Assembly + Сборка - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_se.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_se.ts index d8542b6ea..594232f5c 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_se.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_se.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Ihopsättning + + Assembly + Ihopsättning - - + + CmdAssemblyConstraintAxle - - Assembly - Ihopsättning + + Assembly + Ihopsättning - Constraint Axle... - Begränsningsaxel... + + Constraint Axle... + Begränsningsaxel... - set a axle constraint between two objects - Sätt en axelbegränsning mellan två objekt + + set a axle constraint between two objects + Sätt en axelbegränsning mellan två objekt - - + + Workbench - Assembly - Ihopsättning + Assembly + Ihopsättning - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_uk.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_uk.ts index a164bb182..7177ff6cb 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_uk.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_uk.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - Збірка + + Assembly + Збірка - - + + CmdAssemblyConstraintAxle - - Assembly - Збірка + + Assembly + Збірка - Constraint Axle... - Обмеження осі... + + Constraint Axle... + Обмеження осі... - set a axle constraint between two objects - задати вісь обмежену двома об'єктами + + set a axle constraint between two objects + задати вісь обмежену двома об'єктами - - + + Workbench - Assembly - Збірка + Assembly + Збірка - + diff --git a/src/Mod/Assembly/Gui/Resources/translations/Assembly_zh.ts b/src/Mod/Assembly/Gui/Resources/translations/Assembly_zh.ts index 66074d644..fb6eda014 100644 --- a/src/Mod/Assembly/Gui/Resources/translations/Assembly_zh.ts +++ b/src/Mod/Assembly/Gui/Resources/translations/Assembly_zh.ts @@ -1,35 +1,37 @@ - - + + AssemblyGui::Workbench - - Assembly - 装配 + + Assembly + 装配 - - + + CmdAssemblyConstraintAxle - - Assembly - 装配 + + Assembly + 装配 - Constraint Axle... - 约束轴... + + Constraint Axle... + 约束轴... - set a axle constraint between two objects - 两个对象之间设置轴约束 + + set a axle constraint between two objects + 两个对象之间设置轴约束 - - + + Workbench - Assembly - 装配 + Assembly + 装配 - + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_af.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_af.ts index d1adc14ef..325201491 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_af.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_af.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Volledig + + Complete + Volledig - Constraint Axle... - Beperking met 'n as... + + Constraint Axle... + Beperking met 'n as... - set a axle constraint between two objects - definieer 'n bewegingsbeperking tussen twee voorwerpe met 'n as + + set a axle constraint between two objects + definieer 'n bewegingsbeperking tussen twee voorwerpe met 'n as - - + + Test_Test - - Self-test... - Self-test... + + Self-test... + Self-test... - Runs a self-test to check if the application works properly - Runs a self-test to check if the application works properly + + Runs a self-test to check if the application works properly + Runs a self-test to check if the application works properly - - + + Workbench - Dr&awing - &Teken + + Dr&awing + &Teken - S&ketch - &Skets + + S&ketch + &Skets - &Raytracing - &Straalsporing + + &Raytracing + &Straalsporing - &Drafting - &Teken + + &Drafting + &Teken - Sketch based - Sketsgebaseerd + + Sketch based + Sketsgebaseerd - Parametric - Parametries + + Primitives + - Object appearence - Object appearence + Parametric + Parametries - Wire Tools - Wire Tools + + Object appearence + Object appearence - + + + Wire Tools + Wire Tools + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_de.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_de.ts index 8b39f34e4..a9893c602 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_de.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_de.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Komplett + + Complete + Komplett - Constraint Axle... - Achse vorgeben... + + Constraint Axle... + Achse vorgeben... - set a axle constraint between two objects - Eine Achse zwischen zwei Objekten vorgeben + + set a axle constraint between two objects + Eine Achse zwischen zwei Objekten vorgeben - - + + Test_Test - - Self-test... - Selbsttest... + + Self-test... + Selbsttest... - Runs a self-test to check if the application works properly - Führt einen Selbsttest durch, um zu prüfen, ob die Anwendung richtig funktioniert + + Runs a self-test to check if the application works properly + Führt einen Selbsttest durch, um zu prüfen, ob die Anwendung richtig funktioniert - - + + Workbench - Dr&awing - &Zeichnung + + Dr&awing + &Zeichnung - S&ketch - Ski&zze + + S&ketch + Ski&zze - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - &Drafting - &Entwurf + + &Drafting + &Entwurf - Sketch based - skizzenbasiert + + Sketch based + skizzenbasiert - Parametric - Parametrisch + + Primitives + - Object appearence - Objektdarstellung + Parametric + Parametrisch - Wire Tools - Linien-Werkzeuge + + Object appearence + Objektdarstellung - + + + Wire Tools + Linien-Werkzeuge + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_es.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_es.ts index a4befd9fe..ab6ed8074 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_es.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_es.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Completado + + Complete + Completado - Constraint Axle... - Restricción de eje... + + Constraint Axle... + Restricción de eje... - set a axle constraint between two objects - definir una restricción de eje entre dos objetos + + set a axle constraint between two objects + definir una restricción de eje entre dos objetos - - + + Test_Test - - Self-test... - Self-test... + + Self-test... + Self-test... - Runs a self-test to check if the application works properly - Runs a self-test to check if the application works properly + + Runs a self-test to check if the application works properly + Runs a self-test to check if the application works properly - - + + Workbench - Dr&awing - %Dibujo + + Dr&awing + %Dibujo - S&ketch - Boc&eto + + S&ketch + Boc&eto - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - &Drafting - &Borrador + + &Drafting + &Borrador - Sketch based - Basado en esbozo + + Sketch based + Basado en esbozo - Parametric - Paramétrico + + Primitives + - Object appearence - Apariencia del objeto + Parametric + Paramétrico - Wire Tools - Wire Tools + + Object appearence + Apariencia del objeto - + + + Wire Tools + Wire Tools + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_fi.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_fi.ts index 1dfd6c849..e6201addb 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_fi.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_fi.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Valmis + + Complete + Valmis - Constraint Axle... - Akseli rajoite... + + Constraint Axle... + Akseli rajoite... - set a axle constraint between two objects - Määritä akseli rajoite kahden kohteen välille + + set a axle constraint between two objects + Määritä akseli rajoite kahden kohteen välille - - + + Test_Test - - Self-test... - Self-test... + + Self-test... + Self-test... - Runs a self-test to check if the application works properly - Runs a self-test to check if the application works properly + + Runs a self-test to check if the application works properly + Runs a self-test to check if the application works properly - - + + Workbench - Dr&awing - &Piirustus + + Dr&awing + &Piirustus - S&ketch - Ske&tch + + S&ketch + Ske&tch - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - &Drafting - &Drafting + + &Drafting + &Drafting - Sketch based - Sketch based + + Sketch based + Sketch based - Parametric - Parametrinen + + Primitives + - Object appearence - Object appearence + Parametric + Parametrinen - Wire Tools - Wire Tools + + Object appearence + Object appearence - + + + Wire Tools + Wire Tools + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_fr.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_fr.ts index aedbd4a84..7d5537dc6 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_fr.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_fr.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Complet + + Complete + Complet - Constraint Axle... - Contrainte axiale... + + Constraint Axle... + Contrainte axiale... - set a axle constraint between two objects - définir une contrainte axiale entre deux objets + + set a axle constraint between two objects + définir une contrainte axiale entre deux objets - - + + Test_Test - - Self-test... - Auto-test... + + Self-test... + Auto-test... - Runs a self-test to check if the application works properly - Exécute un auto-test pour vérifier si l'application fonctionne correctement + + Runs a self-test to check if the application works properly + Exécute un auto-test pour vérifier si l'application fonctionne correctement - - + + Workbench - Dr&awing - &Dessin + + Dr&awing + &Dessin - S&ketch - Es&quisse + + S&ketch + Es&quisse - &Raytracing - &Lancer de rayon + + &Raytracing + &Lancer de rayon - &Drafting - &Planche à dessin + + &Drafting + &Planche à dessin - Sketch based - À base d'esquisse + + Sketch based + À base d'esquisse - Parametric - Paramétrique + + Primitives + - Object appearence - Apparence d'objet + Parametric + Paramétrique - Wire Tools - Outils filaires + + Object appearence + Apparence d'objet - + + + Wire Tools + Outils filaires + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_hr.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_hr.ts index e386f67a5..e72fce00e 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_hr.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_hr.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Kompletan + + Complete + Kompletan - Constraint Axle... - Ograničena osovina... + + Constraint Axle... + Ograničena osovina... - set a axle constraint between two objects - postaviti ograničenja osovine između dva objekta + + set a axle constraint between two objects + postaviti ograničenja osovine između dva objekta - - + + Test_Test - - Self-test... - Samoprovjera ... + + Self-test... + Samoprovjera ... - Runs a self-test to check if the application works properly - Izvrši samoprovjeru i vidi da li program radi ispravno + + Runs a self-test to check if the application works properly + Izvrši samoprovjeru i vidi da li program radi ispravno - - + + Workbench - Dr&awing - &Crtež + + Dr&awing + &Crtež - S&ketch - Sk&ica + + S&ketch + Sk&ica - &Raytracing - Metode trasiranja putem zrake + + &Raytracing + Metode trasiranja putem zrake - &Drafting - &Skica + + &Drafting + &Skica - Sketch based - Na temelju skice + + Sketch based + Na temelju skice - Parametric - Parametarski + + Primitives + - Object appearence - Izgled objekta + Parametric + Parametarski - Wire Tools - Alati žice + + Object appearence + Izgled objekta - + + + Wire Tools + Alati žice + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_hu.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_hu.ts index 3210bbb88..770a741e0 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_hu.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_hu.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Befejez + + Complete + Befejez - Constraint Axle... - Tengely menti kötés... + + Constraint Axle... + Tengely menti kötés... - set a axle constraint between two objects - tengely menti kötést hoz létre két tárgy között + + set a axle constraint between two objects + tengely menti kötést hoz létre két tárgy között - - + + Test_Test - - Self-test... - Ön-teszt... + + Self-test... + Ön-teszt... - Runs a self-test to check if the application works properly - Fut egy önteszt, hogy ellenőrizze, ha az alkalmazás megfelelően működik + + Runs a self-test to check if the application works properly + Fut egy önteszt, hogy ellenőrizze, ha az alkalmazás megfelelően működik - - + + Workbench - Dr&awing - Rajzolás + + Dr&awing + Rajzolás - S&ketch - Vázlat + + S&ketch + Vázlat - &Raytracing - Sugáriánynyomvonal + + &Raytracing + Sugáriánynyomvonal - &Drafting - Vázlatkészítés + + &Drafting + Vázlatkészítés - Sketch based - Vázlat alap + + Sketch based + Vázlat alap - Parametric - Változós + + Primitives + - Object appearence - Az objektum megjelenése + Parametric + Változós - Wire Tools - Vonal eszköztár + + Object appearence + Az objektum megjelenése - + + + Wire Tools + Vonal eszköztár + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_it.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_it.ts index 3f8e83425..e2306ee8c 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_it.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_it.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Completo + + Complete + Completo - Constraint Axle... - Vincolo assiale... + + Constraint Axle... + Vincolo assiale... - set a axle constraint between two objects - Imposta un vincolo assiale tra due oggetti + + set a axle constraint between two objects + Imposta un vincolo assiale tra due oggetti - - + + Test_Test - - Self-test... - Autotest... + + Self-test... + Autotest... - Runs a self-test to check if the application works properly - Esegue un autotest per verificare se l'applicazione funziona correttamente + + Runs a self-test to check if the application works properly + Esegue un autotest per verificare se l'applicazione funziona correttamente - - + + Workbench - Dr&awing - &Disegno + + Dr&awing + &Disegno - S&ketch - S&ketch + + S&ketch + S&ketch - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - &Drafting - Draf&ting + + &Drafting + Draf&ting - Sketch based - Sketch + + Sketch based + Sketch - Parametric - Parametrica + + Primitives + - Object appearence - Aspetto dell'oggetto + Parametric + Parametrica - Wire Tools - Strumenti Wire + + Object appearence + Aspetto dell'oggetto - + + + Wire Tools + Strumenti Wire + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_ja.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_ja.ts index 0a05b50ae..169eb04fc 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_ja.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_ja.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - 完了 + + Complete + 完了 - Constraint Axle... - 軸拘束の設定... + + Constraint Axle... + 軸拘束の設定... - set a axle constraint between two objects - 二つのオブジェクト間に軸拘束を設定します。 + + set a axle constraint between two objects + 二つのオブジェクト間に軸拘束を設定します。 - - + + Test_Test - - Self-test... - 自己診断... + + Self-test... + 自己診断... - Runs a self-test to check if the application works properly - アプリケーションが正常に動作するかどうかを確認する自己診断を実行します。 + + Runs a self-test to check if the application works properly + アプリケーションが正常に動作するかどうかを確認する自己診断を実行します。 - - + + Workbench - Dr&awing - ドローイング (&D) + + Dr&awing + ドローイング (&D) - S&ketch - スケッチ(&T) + + S&ketch + スケッチ(&T) - &Raytracing - レイトレーシング (&R) + + &Raytracing + レイトレーシング (&R) - &Drafting - ドラフト (&D) + + &Drafting + ドラフト (&D) - Sketch based - スケッチベース + + Sketch based + スケッチベース - Parametric - パラメトリック + + Primitives + - Object appearence - オブジェクトの外観 + Parametric + パラメトリック - Wire Tools - ポリラインツール + + Object appearence + オブジェクトの外観 - + + + Wire Tools + ポリラインツール + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_nl.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_nl.ts index c3d1b6a81..987daf9b2 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_nl.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_nl.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Voltooid + + Complete + Voltooid - Constraint Axle... - As-beperking... + + Constraint Axle... + As-beperking... - set a axle constraint between two objects - Stel een as-beperking in tussen twee objecten + + set a axle constraint between two objects + Stel een as-beperking in tussen twee objecten - - + + Test_Test - - Self-test... - Self-test... + + Self-test... + Self-test... - Runs a self-test to check if the application works properly - Runs a self-test to check if the application works properly + + Runs a self-test to check if the application works properly + Runs a self-test to check if the application works properly - - + + Workbench - Dr&awing - &Tekenen + + Dr&awing + &Tekenen - S&ketch - Sche&ts + + S&ketch + Sche&ts - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - &Drafting - &Schetsen + + &Drafting + &Schetsen - Sketch based - Schets gebaseerd + + Sketch based + Schets gebaseerd - Parametric - Parametrisch + + Primitives + - Object appearence - Object uiterlijk + Parametric + Parametrisch - Wire Tools - Draad Gereedschap + + Object appearence + Object uiterlijk - + + + Wire Tools + Draad Gereedschap + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_no.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_no.ts index 6d80d0509..af96c4e5c 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_no.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_no.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Fullført + + Complete + Fullført - Constraint Axle... - Aksellås... + + Constraint Axle... + Aksellås... - set a axle constraint between two objects - angi en akselbetingelse mellom to objekter + + set a axle constraint between two objects + angi en akselbetingelse mellom to objekter - - + + Test_Test - - Self-test... - Self-test... + + Self-test... + Self-test... - Runs a self-test to check if the application works properly - Runs a self-test to check if the application works properly + + Runs a self-test to check if the application works properly + Runs a self-test to check if the application works properly - - + + Workbench - Dr&awing - &Tegning + + Dr&awing + &Tegning - S&ketch - Sk&isser + + S&ketch + Sk&isser - &Raytracing - &Strålesporing + + &Raytracing + &Strålesporing - &Drafting - &Skissering + + &Drafting + &Skissering - Sketch based - Skissebasert + + Sketch based + Skissebasert - Parametric - Parametrisk + + Primitives + - Object appearence - Object appearence + Parametric + Parametrisk - Wire Tools - Wire Tools + + Object appearence + Object appearence - + + + Wire Tools + Wire Tools + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_pl.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_pl.ts index 58b62fd97..81c60eee9 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_pl.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_pl.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Kompletny + + Complete + Kompletny - Constraint Axle... - Ograniczenie osi... + + Constraint Axle... + Ograniczenie osi... - set a axle constraint between two objects - ustaw ograniczenie osi między dwoma obiektami + + set a axle constraint between two objects + ustaw ograniczenie osi między dwoma obiektami - - + + Test_Test - - Self-test... - Autotest... + + Self-test... + Autotest... - Runs a self-test to check if the application works properly - Wykonanie autotestu w celu sprawdzenia poprawności aplikacji. + + Runs a self-test to check if the application works properly + Wykonanie autotestu w celu sprawdzenia poprawności aplikacji. - - + + Workbench - Dr&awing - &Rysunek + + Dr&awing + &Rysunek - S&ketch - Szki&c + + S&ketch + Szki&c - &Raytracing - Raytracing + + &Raytracing + Raytracing - &Drafting - &Kreślenie + + &Drafting + &Kreślenie - Sketch based - Ze szkicu + + Sketch based + Ze szkicu - Parametric - Parametryczny + + Primitives + - Object appearence - Wygląd obiektu + Parametric + Parametryczny - Wire Tools - Narzędzia Szkieletu + + Object appearence + Wygląd obiektu - + + + Wire Tools + Narzędzia Szkieletu + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_pt.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_pt.ts index 408fba3d3..7e034eeb5 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_pt.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_pt.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Completo + + Complete + Completo - Constraint Axle... - Restrição de eixo... + + Constraint Axle... + Restrição de eixo... - set a axle constraint between two objects - definir uma restrição de eixo entre dois objetos + + set a axle constraint between two objects + definir uma restrição de eixo entre dois objetos - - + + Test_Test - - Self-test... - Teste automático... + + Self-test... + Teste automático... - Runs a self-test to check if the application works properly - Executa um teste automático para verificar se o aplicativo funciona corretamente + + Runs a self-test to check if the application works properly + Executa um teste automático para verificar se o aplicativo funciona corretamente - - + + Workbench - Dr&awing - &Desenho + + Dr&awing + &Desenho - S&ketch - Sk&etch + + S&ketch + Sk&etch - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - &Drafting - &Drafting + + &Drafting + &Drafting - Sketch based - Sketch + + Sketch based + Sketch - Parametric - Paramétrico + + Primitives + - Object appearence - Aparência do objeto + Parametric + Paramétrico - Wire Tools - Ferramentas de arame + + Object appearence + Aparência do objeto - + + + Wire Tools + Ferramentas de arame + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_ru.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_ru.ts index ac8194f3c..f17d0c220 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_ru.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_ru.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Выполнено + + Complete + Выполнено - Constraint Axle... - Ограничение оси... + + Constraint Axle... + Ограничение оси... - set a axle constraint between two objects - задать ось ограниченную двумя объектами + + set a axle constraint between two objects + задать ось ограниченную двумя объектами - - + + Test_Test - - Self-test... - Самотестирование ... + + Self-test... + Самотестирование ... - Runs a self-test to check if the application works properly - Выполняет самопроверку для проверки правильности функционирования приложения + + Runs a self-test to check if the application works properly + Выполняет самопроверку для проверки правильности функционирования приложения - - + + Workbench - Dr&awing - &Рисование + + Dr&awing + &Рисование - S&ketch - Эс&киз + + S&ketch + Эс&киз - &Raytracing - &Трассировка лучей + + &Raytracing + &Трассировка лучей - &Drafting - &Черчение + + &Drafting + &Черчение - Sketch based - Основанный на эскизе + + Sketch based + Основанный на эскизе - Parametric - Параметрический + + Primitives + - Object appearence - Внешность объекта + Parametric + Параметрический - Wire Tools - Wire Tools + + Object appearence + Внешность объекта - + + + Wire Tools + Wire Tools + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_se.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_se.ts index 868c35e03..8dcf347fd 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_se.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_se.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Komplett + + Complete + Komplett - Constraint Axle... - Begränsningsaxel... + + Constraint Axle... + Begränsningsaxel... - set a axle constraint between two objects - Sätt en axelbegränsning mellan två objekt + + set a axle constraint between two objects + Sätt en axelbegränsning mellan två objekt - - + + Test_Test - - Self-test... - Självtest ... + + Self-test... + Självtest ... - Runs a self-test to check if the application works properly - Kör ett självtest för att kontrollera om programmet fungerar + + Runs a self-test to check if the application works properly + Kör ett självtest för att kontrollera om programmet fungerar - - + + Workbench - Dr&awing - R&itning + + Dr&awing + R&itning - S&ketch - S&kiss + + S&ketch + S&kiss - &Raytracing - R&endering + + &Raytracing + R&endering - &Drafting - &Skissning + + &Drafting + &Skissning - Sketch based - Skiss baserad + + Sketch based + Skiss baserad - Parametric - Parametrisk + + Primitives + - Object appearence - Objekt utseende + Parametric + Parametrisk - Wire Tools - Trådverktyg + + Object appearence + Objekt utseende - + + + Wire Tools + Trådverktyg + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_uk.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_uk.ts index 49840b58c..1fc114b88 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_uk.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_uk.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - Виконано + + Complete + Виконано - Constraint Axle... - Обмеження осі... + + Constraint Axle... + Обмеження осі... - set a axle constraint between two objects - задати вісь обмежену двома об'єктами + + set a axle constraint between two objects + задати вісь обмежену двома об'єктами - - + + Test_Test - - Self-test... - Self-test... + + Self-test... + Self-test... - Runs a self-test to check if the application works properly - Runs a self-test to check if the application works properly + + Runs a self-test to check if the application works properly + Runs a self-test to check if the application works properly - - + + Workbench - Dr&awing - &Малювання + + Dr&awing + &Малювання - S&ketch - Ес&кіз + + S&ketch + Ес&кіз - &Raytracing - &Трасування променів + + &Raytracing + &Трасування променів - &Drafting - &Креслення + + &Drafting + &Креслення - Sketch based - Базуючись на ескізі + + Sketch based + Базуючись на ескізі - Parametric - Параметричний + + Primitives + - Object appearence - Object appearence + Parametric + Параметричний - Wire Tools - Wire Tools + + Object appearence + Object appearence - + + + Wire Tools + Wire Tools + + diff --git a/src/Mod/Complete/Gui/Resources/translations/Complete_zh.ts b/src/Mod/Complete/Gui/Resources/translations/Complete_zh.ts index 26cfdf217..140bd53f8 100644 --- a/src/Mod/Complete/Gui/Resources/translations/Complete_zh.ts +++ b/src/Mod/Complete/Gui/Resources/translations/Complete_zh.ts @@ -1,67 +1,82 @@ - - + + CmdCompleteConstraintAxle - - Complete - 全部 + + Complete + 全部 - Constraint Axle... - 约束轴... + + Constraint Axle... + 约束轴... - set a axle constraint between two objects - 两对象间设置轴约束 + + set a axle constraint between two objects + 两对象间设置轴约束 - - + + Test_Test - - Self-test... - 自检... + + Self-test... + 自检... - Runs a self-test to check if the application works properly - 运行自检测试程序是否正常工作 + + Runs a self-test to check if the application works properly + 运行自检测试程序是否正常工作 - - + + Workbench - Dr&awing - 图纸(&D) + + Dr&awing + 图纸(&D) - S&ketch - 草绘(&T) + + S&ketch + 草绘(&T) - &Raytracing - 光线追踪(&R) + + &Raytracing + 光线追踪(&R) - &Drafting - 绘图(&D) + + &Drafting + 绘图(&D) - Sketch based - 基于草绘 + + Sketch based + 基于草绘 - Parametric - 参数化 + + Primitives + - Object appearence - 对象外观 + Parametric + 参数化 - Wire Tools - 线框工具 + + Object appearence + 对象外观 - + + + Wire Tools + 线框工具 + + diff --git a/src/Mod/Draft/Resources/translations/Draft.ts b/src/Mod/Draft/Resources/translations/Draft.ts index fc81b322f..70697b012 100755 --- a/src/Mod/Draft/Resources/translations/Draft.ts +++ b/src/Mod/Draft/Resources/translations/Draft.ts @@ -3,12 +3,12 @@ Draft_AddPoint - + Add Point - + Adds a point to an existing wire/bspline @@ -16,12 +16,12 @@ Draft_AddToGroup - + Adds the selected object(s) to an existing group - + Add to group... @@ -29,12 +29,12 @@ Draft_ApplyStyle - + Apply Current Style - + Applies current line width and color to selected objects @@ -42,25 +42,38 @@ Draft_Arc - + Arc - + Creates an arc. CTRL to snap, SHIFT to constrain + + Draft_Array + + + Array + + + + + Creates a polar or rectangular array from a selected object + + + Draft_BSpline - + B-Spline - + Creates a multiple-point b-spline. CTRL to snap, SHIFT to constrain @@ -68,25 +81,38 @@ Draft_Circle - + Circle - + Creates a circle. CTRL to snap, ALT to select tangent objects + + Draft_Clone + + + Clone + + + + + Clones the selected object(s) + + + Draft_CloseLine - + Close Line - + Closes the line being drawn @@ -94,12 +120,12 @@ Draft_DelPoint - + Remove Point - + Removes a point from an existing wire or bspline @@ -107,12 +133,12 @@ Draft_Dimension - + Dimension - + Creates a dimension. CTRL to snap, SHIFT to constrain, ALT to select a segment @@ -120,25 +146,33 @@ Draft_Downgrade - + Downgrade - + Explodes the selected objects into simpler objects, or subtract faces + + Draft_Draft2Sketch + + + Draft to Sketch + + + Draft_Drawing - + Drawing - + Puts the selected objects on a Drawing sheet. @@ -146,12 +180,12 @@ Draft_Edit - + Edit - + Edits the active object @@ -159,12 +193,12 @@ Draft_FinishLine - + Finish line - + Finishes a line without closing it @@ -172,12 +206,12 @@ Draft_Line - + Line - + Creates a 2-point line. CTRL to snap, SHIFT to constrain @@ -185,12 +219,12 @@ Draft_Move - + Move - + Moves the selected objects between 2 points. CTRL to snap, SHIFT to constrain, ALT to copy @@ -198,25 +232,38 @@ Draft_Offset - + Offset - + Offsets the active object. CTRL to snap, SHIFT to constrain, ALT to copy + + Draft_Point + + + Point + + + + + Creates a point object + + + Draft_Polygon - + Polygon - + Creates a regular polygon. CTRL to snap, SHIFT to constrain @@ -224,12 +271,12 @@ Draft_Rectangle - + Rectangle - + Creates a 2-point rectangle. CTRL to snap @@ -237,12 +284,12 @@ Draft_Rotate - + Rotate - + Rotates the selected objects. CTRL to snap, SHIFT to constrain, ALT creates a copy @@ -250,12 +297,12 @@ Draft_Scale - + Scale - + Scales the selected objects from a base point. CTRL to snap, SHIFT to constrain, ALT to copy @@ -263,12 +310,12 @@ Draft_SelectGroup - + Select group - + Selects all objects with the same parents as this group @@ -276,12 +323,12 @@ Draft_SelectPlane - + SelectPlane - + Select a working plane for geometry creation @@ -289,25 +336,43 @@ Draft_Shape2DView - + Shape 2D view - + Creates Shape 2D views of selected objects + + + Convert bidirectionally between Draft and Sketch objects + + + + + Draft_ShowSnapBar + + + Show Snap Bar + + + + + Shows Draft snap toolbar + + Draft_Text - + Text - + Creates an annotation. CTRL to snap @@ -315,12 +380,12 @@ Draft_ToggleConstructionMode - + Toggle construcion Mode - + Toggles the Construction Mode for next objects. @@ -328,12 +393,12 @@ Draft_ToggleContinueMode - + Toggle continue Mode - + Toggles the Continue Mode for next commands. @@ -341,25 +406,51 @@ Draft_ToggleDisplayMode - + Toggle display mode - + Swaps display mode of selected objects between wireframe and flatlines + + Draft_ToggleGrid + + + Toggle Grid + + + + + Toggles the Draft gid on/off + + + + + Draft_ToggleSnap + + + Toggle snap + + + + + Toggles Draft snap on or off + + + Draft_Trimex - + Trimex - + Trims or extends the selected object, or extrudes single faces. CTRL snaps, SHIFT constrains to current segment or to normal, ALT inverts @@ -367,12 +458,12 @@ Draft_UndoLine - + Undo last segment - + Undoes the last drawn segment of the line being drawn @@ -380,12 +471,12 @@ Draft_Upgrade - + Upgrade - + Joins the selected objects into one, or converts closed wires to filled faces, or unite faces @@ -393,25 +484,25 @@ Draft_Wire - - Wire + + DWire - - Creates a multiple-point wire. CTRL to snap, SHIFT to constrain + + Creates a multiple-point DraftWire (DWire). CTRL to snap, SHIFT to constrain Draft_WireToBSpline - + Wire to BSpline - + Converts between Wire and BSpline @@ -424,137 +515,137 @@ - + Default color - + the default color for new objects - + Default linewidth - + the default linewidth for new objects - + Snap color - + the default color for snap symbols - + Construction color - + This is the default color for objects being drawn while in construction mode. - + This is the default group name for construction geometry - + Construction - + check this if you want to use the color/linewidth from the toolbar as default - + Save current color and linewidth across sessions - + If this is checked, copy mode will be kept across command, otherwise commands will always start in no-copy mode - + Global copy mode - + If this is checked, you will always snap to existing objects while drawing. If not, you will be snapping only when pressing CTRL. - + If this is checked, objects will appear as filled as default. Otherwise, they will appear as wireframe - + Fill objects by default - + Default working plane - + None - + XY (Top) - + XZ (Front) - + YZ (Side) - + The number of decimals in internal coordinates operations (for ex. 3 = 0.001) - + Default text height - + Default height for texts and dimensions - + Default text font - + This is the default font name for all Draft texts and dimensions. It can be a font name such as "Arial", a default style such as "sans", "serif" or "mono", or a family such as "Arial,Helvetica,sans" or a name with a style @@ -562,22 +653,22 @@ such as "Arial:Bold" - + Arial - + Default template sheet - + The default template to use when creating a new drawing sheet - + Import style @@ -589,17 +680,17 @@ If color mapping is choosed, you must choose a color mapping file containing a t - + None (fastest) - + Use default color and linewidth - + Original color and linewidth @@ -609,52 +700,52 @@ If color mapping is choosed, you must choose a color mapping file containing a t - + if this is checked, paper space objects will be imported too - + Import layouts - + if this is unchecked, texts/mtexts won't be imported - + Color mapping file - + The color mapping file for translating dxf colors into linewidths - + Max Spline Segment - + When exporting splines to DXF, they are transformed in polylines. This value is the maximum length of each of the polyline segments. If 0, then the whole spline is treated as a straight segment. - + This is the method choosed for importing SVG object color into FreeCAD. - + Check this if you want the areas (3D faces) to be imported too. - + Import OCA areas @@ -664,83 +755,83 @@ If color mapping is choosed, you must choose a color mapping file containing a t - + Construction group name - + Tolerance - + This is the value used by functions that use a tolerance. Values with differences below this value will be treated as same. - + Dimensions & Leader arrow style - + Dot 5 - + Dot 7 - + Dot 9 - + Circle 5 - + Circle 7 - + Circle 9 - + Slash 5 - + Slash 7 - + Slash 9 - + Backslash 5 - + Backslash 7 - + Backslash 9 @@ -755,202 +846,202 @@ Values with differences below this value will be treated as same. - + Import texts and dimensions - + Check this if you want the non-named blocks (beginning with a *) to be imported too - + Import *blocks - + If checked, freecad will try to joint coincident objects into wires. Beware, this can take a while... - + Join geometry - + SVG format options - + OCA format options - + Alternate SVG Patterns location - + Here you can specify a directory containing SVG files containing <pattern> definitions that can be added to the standard Draft hatch patterns - + Draft interface mode - + This is the UI mode in which the Draft module will work: Toolbar mode will place all Draft settings in a separate toolbar, while taskbar mode will use the FreeCAD Taskview system for all its user interaction - + Toolbar - + Taskview - + Constrain mod - + The Constraining modifier key - + shift - + ctrl - + alt - + Snap mod - + The snap modifier key - + Alt mod - + The alt modifier key - + Normally, after copying objects, the copies get selected. If this option is checked, the base objects will be selected instead. - + Select base objects after copying - + Always snap to objects (disable snap mod key) - + The radius for snapping to special points. Set to 0 for no distance (infinite) - + Snap range - + px - + If checked, a grid will appear when drawing - + Use grid - + Grid spacing - + The spacing between each grid line - + Main lines every - + Mainlines will be drawn thicker. Specify here how many squares between mainlines. - + Internal precision level - + Dimensions precision level - + Vertical dimensions text orientation - + This is the orientation of the dimension texts when those dimensions are vertical. Default is left, which is the ISO standard. - + Left (ISO standard) - + Right @@ -960,739 +1051,935 @@ Values with differences below this value will be treated as same. - + if this is checked, objects from the same layers will be joined into Draft Blocks, turning the display faster, but making them less easily editable - + Group layers into blocks - + If this is checked, all objects containing faces will be exported as 3d polyfaces - + Export 3D objects as polyface meshes + + + If this is checked, the Draft workbench won't appear. Useful since all of the Draft tools are also in the Arch workbench. + + + + + Hide Draft workbench + + + + + If this is checked, snapping will not occur against objects with more than the indicated number of edges + + + + + Snap maximum + + + + + Maximum number of edges to be considered for snapping + + + + + Maximum number of edges + + + + + If checked, the Snap toolbar will be shown whenever you use snapping + + + + + Show Draft Snap toolbar + + + + + Hide Draft snap toolbar after use + + + + + if checked, a widget indicating the current working plane orientation appears during drawing operations + + + + + Show Working Plane tracker + + + + + If checked, the Draft grid will always be visible when the Draft workbench is active. Otherwise only when using a command + + + + + Always show + + + + + Create Sketches + + + + + If this is checked, imported texts will get the standard Draft text size, instead of the size they have in the DXF document + + + + + Use standard font size for texts + + + + + If this is checked, hatches will be converted into simple wires + + + + + Import hatch boundaries as wires + + + + + If this is checked, when polylines have a width defined, they will be rendered as closed wires with the correct width + + + + + Render polylines with width + + + + + Export Style + + + + + Style of SVG file to write when exporting a Sketch. + + + + + Translated (for print & display) + + + + + Raw (for CAM) + + + + + When exporting SVG views, make all white linework appear in black, for better readability against white backgrounds + + + + + Translate white line color to black + + draft - + active command: - + None - + Active Draft command - + X coordinate of next point - + X - + Y - + Z - + Y coordinate of next point - + Z coordinate of next point - + Radius - + Radius of Circle - + Coordinates relative to last point or absolute (SPACE) - + Undo the last segment (CTRL+Z) - + Finishes and closes the current line (C) - + Offset - + XY - + Select XY plane - + XZ - + Select XZ plane - + YZ - + Select YZ plane - + View - + Select plane perpendicular to the current view - + Do not project points to a drawing plane - + If checked, objects will be copied instead of moved (C) - + Line Color - + Face Color - + Line Width - + Font Size - + Apply to selected objects - + Toggles Construction Mode - + Select Plane - + Line - + Circle - + Center X - + Arc - + Pick Object - + draft Command Bar - + Pick a face to define the drawing plane - + Pick first point: - + Pick next point: - + Pick next point, or (F)inish or (C)lose: - + Pick opposite point: - + Pick center point: - + Pick radius: - + Pick start angle: - + Pick aperture: - + Aperture angle: - + Pick location point: - + Select an object to move - + Pick start point: - + Pick end point: - + Select an object to rotate - + Pick rotation center: - + Pick base angle: - + Pick rotation angle: - + Select an object to offset - + Offset only works on one object at a time - + Pick distance: - + Select an object to upgrade - + Select an object to trim/extend - + Select an object to scale - + Pick base point: - + Pick scale factor: - + Number of sides - + &Relative - + &Undo - + &Close - + &Copy - + If checked, command will not finish until you press the command button again - + &Continue - - Wire has been closed - - - - - + Last point has been removed - + Spline has been closed - + Edges don't intersect! - + Cannot offset this object type - + Found groups: closing each open object inside - + Found 2 objects: fusing them - + Found 1 non-parametric objects: draftifying it - + Found 1 closed sketch object: making a face from it - - Found closed wires: making faces - - - - - + Found 1 open wire: closing it - + Found several edges: wiring them - + Found several non-connected edges: making compound - + Found several non-treatable objects: making compound - + Found 1 parametric object: breaking its dependencies - + Found 2 objects: subtracting them - + Found several faces: splitting them - + Found several objects: subtracting them from the first one - + Found 1 face: extracting its wires - + Found only wires: extracting their edges - + This object type is not editable - + Active object must have more than two points/nodes - + Finishes the current drawing or editing operation (F) - + Add points to the current object - + Remove points from the current object - + F&illed - + Check this if the object should appear as filled, otherwise it will appear as wireframe (i) - + &Finish - + If checked, an OCC-style offset will be performed instead of the classic offset - + &OCC-style offset - + &Wipe - + Wipes the existing segments of this line and starts again from the last point (W) - + Point - + Distance - + Edit - - Create Wire - - - - + Create BSpline - + Create Rectangle - + Create Circle - + Create Arc - + Create Polygon - + Create Text - + Create Dimension - - Delete Measurement - - - - + Copy - + Move - + Change Style - + Rotate - + Found 1 solidificable object: solidifying it - + Found several objects or faces: making a parametric face - + Found objects containing curves: fusing them - + Found several objects: fusing them - + Scale - + Trim - + Start Angle - + Aperture - + Installed Macros - - Draft tools - - - - - Draft - - - - - Display options - - - - + Wire tools + + + DWire + + + + + Create DWire + + + + + DWire has been closed + + + + + + BSpline + + + + + Rectangle + + + + + Polygon + + + + + Text + + + + + Dimension + + + + + No upgrade available for this object + + + + + + Couldn't upgrade these objects + + + + + + One wire is not planar, upgrade not done + + + + + + Found a closed wire: making a face + + + + + + Found 1 open edge: making a line + + + + + + Found 1 circular edge: making a circle + + + + + + No more downgrade possible + + + + + + Draft creation tools + + + + + Draft modification tools + + + + + &Draft + + + + + Context tools + + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_af.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_af.ts index afdcfef20..0cdf7b7cc 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_af.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_af.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Tekening + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Tekening + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Lêer + + File + Lêer - &Export page... - &Voer bladsy uit... + + &Export page... + &Voer bladsy uit... - Export a page to an SVG file - Voer 'n blad uit na 'n SVG-lêer + + + Export a page to an SVG file + Voer 'n blad uit na 'n SVG-lêer - - + + CmdDrawingNewA3Landscape - Drawing - Tekening + + Drawing + Tekening - Insert new A3 landscape drawing - Voeg nuwe A3 landskaptekening in + + + Insert new A3 landscape drawing + Voeg nuwe A3 landskaptekening in - - + + CmdDrawingNewPage - Drawing - Tekening + + Drawing + Tekening - Insert new drawing - Insert new drawing + + + Insert new drawing + Insert new drawing - - + + CmdDrawingNewView - Drawing - Tekening + + Drawing + Tekening - Insert view in drawing - Voeg aansig in in die tekening + + Insert view in drawing + Voeg aansig in in die tekening - Insert a new View of a Part in the active drawing - Voeg 'n nuwe aansig van 'n onderdeel in in die aktiewe tekening + + Insert a new View of a Part in the active drawing + Voeg 'n nuwe aansig van 'n onderdeel in in die aktiewe tekening - - + + CmdDrawingOpen - Drawing - Tekening + + Drawing + Tekening - Open SVG... - Maak SVG oop... + + Open SVG... + Maak SVG oop... - Open a scalable vector graphic - Maak skaalbare vektor grafika (SVG) oop + + Open a scalable vector graphic + Maak skaalbare vektor grafika (SVG) oop - - + + + CmdDrawingOpenBrowserView + + + Drawing + Tekening + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Tekening + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Tekening + + Drawing + Tekening - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Agtergrond + + &Background + &Agtergrond - &Outline - &Buitelyn + + &Outline + &Buitelyn - &Native - &Native + + &Native + &Native - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Beeld + + &Image + &Beeld - &High Quality Antialiasing - &Hoë kwaliteit kantversagting + + &High Quality Antialiasing + &Hoë kwaliteit kantversagting - Open SVG File - Maak SVG-lêer oop + + Open SVG File + Maak SVG-lêer oop - Could not open file '%1'. - Kon nie lêer '%1' oop maak nie. + + Could not open file '%1'. + Kon nie lêer '%1' oop maak nie. - &Renderer - &Skepper + + &Renderer + &Skepper - Export PDF - Stoor na PDF + + Export PDF + Stoor na PDF - PDF file (*.pdf) - PDF-lêer (*.pdf) + + PDF file (*.pdf) + PDF-lêer (*.pdf) - Page sizes - Page sizes + + Page sizes + Page sizes - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 landscape + A0 landscape + A0 landscape - Insert new A0 landscape drawing - Insert new A0 landscape drawing + Insert new A0 landscape drawing + Insert new A0 landscape drawing - A1 landscape - A1 landscape + A1 landscape + A1 landscape - Insert new A1 landscape drawing - Insert new A1 landscape drawing + Insert new A1 landscape drawing + Insert new A1 landscape drawing - A2 landscape - A2 landscape + A2 landscape + A2 landscape - Insert new A2 landscape drawing - Insert new A2 landscape drawing + Insert new A2 landscape drawing + Insert new A2 landscape drawing - A3 landscape - A3 landscape + A3 landscape + A3 landscape - Insert new A3 landscape drawing - Voeg nuwe A3 landskaptekening in + Insert new A3 landscape drawing + Voeg nuwe A3 landskaptekening in - A4 landscape - A4 landscape + A4 landscape + A4 landscape - Insert new A4 landscape drawing - Insert new A4 landscape drawing + Insert new A4 landscape drawing + Insert new A4 landscape drawing - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Kies 'n SVG-lêer om oop te maak + + Choose an SVG file to open + Kies 'n SVG-lêer om oop te maak - - Drawing viewer - Tekeningleser + + + + Drawing viewer + Tekeningleser - - Scalable Vector Graphics (*.svg *.svgz) - Skaalbare Vektor Grafika (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Skaalbare Vektor Grafika (*.svg *.svgz) - Wrong selection - Verkeerde keuse + + + + + Wrong selection + Verkeerde keuse - Select a Part object. - Kies 'n onderdeel. + + + Select a Part object. + Kies 'n onderdeel. - No page to insert - Geen bladsy om in te voeg nie + + + + + No page to insert + Geen bladsy om in te voeg nie - Create a page to insert. - Skep 'n bladsy om in te voeg. + + + + Create a page to insert. + Skep 'n bladsy om in te voeg. - Select one Page object. - Kies een Bladsyvoorwerp. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Kies een Bladsyvoorwerp. - All Files (*.*) - Alle lêers (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Voer bladsy uit + + All Files (*.*) + Alle lêers (*.*) - - Show drawing - Show drawing + + Export page + Voer bladsy uit - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Tekening + + Drawing + Tekening - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts index 3fe18daed..5506c5ec3 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts @@ -1,325 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Zeichnung + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Zeichnung + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Datei + + File + Datei - &Export page... - Seite &exportieren... + + &Export page... + Seite &exportieren... - Export a page to an SVG file - Seite in SVG-Datei exportieren + + + Export a page to an SVG file + Seite in SVG-Datei exportieren - - + + CmdDrawingNewA3Landscape - Drawing - Zeichnung + + Drawing + Zeichnung - Insert new A3 landscape drawing - Neue A3-Zeichung einfügen (im Querformat) + + + Insert new A3 landscape drawing + Neue A3-Zeichung einfügen (im Querformat) - - + + CmdDrawingNewPage - Drawing - Zeichnung + + Drawing + Zeichnung - Insert new drawing - Neue Zeichnung einfügen + + + Insert new drawing + Neue Zeichnung einfügen - - + + CmdDrawingNewView - Drawing - Zeichnung + + Drawing + Zeichnung - Insert view in drawing - Ansicht in Zeichnung einfügen + + Insert view in drawing + Ansicht in Zeichnung einfügen - Insert a new View of a Part in the active drawing - Neue Ansicht eines Teils in aktive Zeichnung einfügen + + Insert a new View of a Part in the active drawing + Neue Ansicht eines Teils in aktive Zeichnung einfügen - - + + CmdDrawingOpen - Drawing - Zeichnung + + Drawing + Zeichnung - Open SVG... - Öffne SVG... + + Open SVG... + Öffne SVG... - Open a scalable vector graphic - Eine skalierbare Vektorgrafik (SVG) öffnen + + Open a scalable vector graphic + Eine skalierbare Vektorgrafik (SVG) öffnen - - + + + CmdDrawingOpenBrowserView + + + Drawing + Zeichnung + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Zeichnung + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Zeichnung + + Drawing + Zeichnung - Project shape... - Fläche projizieren... + + Project shape... + Fläche projizieren... - Project shape onto a user-defined plane - Fläche auf eine benutzerdefinierte Ebene projizieren + + + Project shape onto a user-defined plane + Fläche auf eine benutzerdefinierte Ebene projizieren - - + + DrawingGui::DrawingView - - &Background - &Hintergrund + + &Background + &Hintergrund - &Outline - &Umriss + + &Outline + &Umriss - &Native - &Nativ + + &Native + &Nativ - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Grafik + + &Image + &Grafik - &High Quality Antialiasing - &High Quality Antialiasing + + &High Quality Antialiasing + &High Quality Antialiasing - Open SVG File - SVG-Datei öffnen + + Open SVG File + SVG-Datei öffnen - Could not open file '%1'. - Datei '%1' konnte nicht geöffnet werden. + + Could not open file '%1'. + Datei '%1' konnte nicht geöffnet werden. - &Renderer - &Rendern + + &Renderer + &Rendern - Export PDF - PDF exportieren + + Export PDF + PDF exportieren - PDF file (*.pdf) - PDF-Datei (*.pdf) + + PDF file (*.pdf) + PDF-Datei (*.pdf) - Page sizes - Seiten Größen + + Page sizes + Seiten Größen - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Sichtbare scharfe Kanten + + Visible sharp edges + Sichtbare scharfe Kanten - Visible smooth edges - Sichtbare glatte Kanten + + Visible smooth edges + Sichtbare glatte Kanten - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 landscape + A0 landscape + A0 landscape - Insert new A0 landscape drawing - Neue A3-Zeichung einfügen (im Querformat) {0 ?} + Insert new A0 landscape drawing + Neue A3-Zeichung einfügen (im Querformat) {0 ?} - A1 landscape - A1 landscape + A1 landscape + A1 landscape - Insert new A1 landscape drawing - Neue A3-Zeichung einfügen (im Querformat) {1 ?} + Insert new A1 landscape drawing + Neue A3-Zeichung einfügen (im Querformat) {1 ?} - A2 landscape - A2 landscape + A2 landscape + A2 landscape - Insert new A2 landscape drawing - Neue A3-Zeichung einfügen (im Querformat) {2 ?} + Insert new A2 landscape drawing + Neue A3-Zeichung einfügen (im Querformat) {2 ?} - A3 landscape - A3 landscape + A3 landscape + A3 landscape - Insert new A3 landscape drawing - Neue A3-Zeichung einfügen (im Querformat) + Insert new A3 landscape drawing + Neue A3-Zeichung einfügen (im Querformat) - A4 landscape - A4 landscape + A4 landscape + A4 landscape - Insert new A4 landscape drawing - Neue A3-Zeichung einfügen (im Querformat) {4 ?} + Insert new A4 landscape drawing + Neue A3-Zeichung einfügen (im Querformat) {4 ?} - Insert new A%1 landscape drawing - Neue A%1-Zeichung im Querformat einfügen + + Insert new A%1 landscape drawing + Neue A%1-Zeichung im Querformat einfügen - A%1 landscape - A%1 im Querformat + + A%1 landscape + A%1 im Querformat - - + + QObject - Choose an SVG file to open - Wählen Sie eine SVG-Datei zum Öffnen aus + + Choose an SVG file to open + Wählen Sie eine SVG-Datei zum Öffnen aus - - Drawing viewer - Zeichnungsbetrachter + + + + Drawing viewer + Zeichnungsbetrachter - - Scalable Vector Graphics (*.svg *.svgz) - Skalierbare Vektorgrafik (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Skalierbare Vektorgrafik (*.svg *.svgz) - Wrong selection - Falsche Auswahl + + + + + Wrong selection + Falsche Auswahl - Select a Part object. - Wählen Sie ein Teile-Objekt aus.. + + + Select a Part object. + Wählen Sie ein Teile-Objekt aus.. - No page to insert - Keine Seite zum einfügen + + + + + No page to insert + Keine Seite zum einfügen - Create a page to insert. - Erzeugen Sie eine Seite zum Einfügen des Objekts. + + + + Create a page to insert. + Erzeugen Sie eine Seite zum Einfügen des Objekts. - Select one Page object. - Wählen Sie ein Page-Objekt aus. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Wählen Sie ein Page-Objekt aus. - All Files (*.*) - Alle Dateien (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Seite exportieren + + All Files (*.*) + Alle Dateien (*.*) - - Show drawing - Show drawing + + Export page + Seite exportieren - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Zeichnung + + Drawing + Zeichnung - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_es.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_es.ts index 6b6294c2c..f031c0539 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_es.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_es.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Dibujo + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Dibujo + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Archivo + + File + Archivo - &Export page... - &Exportar página... + + &Export page... + &Exportar página... - Export a page to an SVG file - Exportar una página a un archivo SVG + + + Export a page to an SVG file + Exportar una página a un archivo SVG - - + + CmdDrawingNewA3Landscape - Drawing - Dibujo + + Drawing + Dibujo - Insert new A3 landscape drawing - Inserta un nuevo dibujo en formato A3 + + + Insert new A3 landscape drawing + Inserta un nuevo dibujo en formato A3 - - + + CmdDrawingNewPage - Drawing - Dibujo + + Drawing + Dibujo - Insert new drawing - Insertar nuevo dibujo + + + Insert new drawing + Insertar nuevo dibujo - - + + CmdDrawingNewView - Drawing - Dibujo + + Drawing + Dibujo - Insert view in drawing - Insertar vista en el dibujo + + Insert view in drawing + Insertar vista en el dibujo - Insert a new View of a Part in the active drawing - Insertar una nueva Vista de una Pieza en el dibujo activo + + Insert a new View of a Part in the active drawing + Insertar una nueva Vista de una Pieza en el dibujo activo - - + + CmdDrawingOpen - Drawing - Dibujo + + Drawing + Dibujo - Open SVG... - Abrir SVG... + + Open SVG... + Abrir SVG... - Open a scalable vector graphic - Abre una imagen vectorial escalable + + Open a scalable vector graphic + Abre una imagen vectorial escalable - - + + + CmdDrawingOpenBrowserView + + + Drawing + Dibujo + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Dibujo + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Dibujo + + Drawing + Dibujo - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Fondo + + &Background + &Fondo - &Outline - &Contorno + + &Outline + &Contorno - &Native - &Nativo + + &Native + &Nativo - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Imagen + + &Image + &Imagen - &High Quality Antialiasing - &Antialiasing alta calidad + + &High Quality Antialiasing + &Antialiasing alta calidad - Open SVG File - Abrir archivo SVG + + Open SVG File + Abrir archivo SVG - Could not open file '%1'. - No se pudo abrir el archivo '%1'. + + Could not open file '%1'. + No se pudo abrir el archivo '%1'. - &Renderer - &Renderizador + + &Renderer + &Renderizador - Export PDF - Exportar PDF + + Export PDF + Exportar PDF - PDF file (*.pdf) - Archivo PDF (*.pdf) + + PDF file (*.pdf) + Archivo PDF (*.pdf) - Page sizes - Tamaños de página + + Page sizes + Tamaños de página - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 landscape + A0 landscape + A0 landscape - Insert new A0 landscape drawing - Insert new A0 landscape drawing + Insert new A0 landscape drawing + Insert new A0 landscape drawing - A1 landscape - A1 landscape + A1 landscape + A1 landscape - Insert new A1 landscape drawing - Insert new A1 landscape drawing + Insert new A1 landscape drawing + Insert new A1 landscape drawing - A2 landscape - A2 landscape + A2 landscape + A2 landscape - Insert new A2 landscape drawing - Insert new A2 landscape drawing + Insert new A2 landscape drawing + Insert new A2 landscape drawing - A3 landscape - A3 landscape + A3 landscape + A3 landscape - Insert new A3 landscape drawing - Inserta un nuevo dibujo en formato A3 + Insert new A3 landscape drawing + Inserta un nuevo dibujo en formato A3 - A4 landscape - A4 landscape + A4 landscape + A4 landscape - Insert new A4 landscape drawing - Insert new A4 landscape drawing + Insert new A4 landscape drawing + Insert new A4 landscape drawing - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Seleccionar un archivo SVG para abrir + + Choose an SVG file to open + Seleccionar un archivo SVG para abrir - - Drawing viewer - Visor de dibujos + + + + Drawing viewer + Visor de dibujos - - Scalable Vector Graphics (*.svg *.svgz) - Imagen vectorial escalable (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Imagen vectorial escalable (*.svg *.svgz) - Wrong selection - Selección incorrecta + + + + + Wrong selection + Selección incorrecta - Select a Part object. - Seleccionar un objeto Pieza. + + + Select a Part object. + Seleccionar un objeto Pieza. - No page to insert - Ninguna página para insertar + + + + + No page to insert + Ninguna página para insertar - Create a page to insert. - Crear una página para insertar. + + + + Create a page to insert. + Crear una página para insertar. - Select one Page object. - Seleccionar una página de objetos. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Seleccionar una página de objetos. - All Files (*.*) - Todos los archivos (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Exportar página + + All Files (*.*) + Todos los archivos (*.*) - - Show drawing - Show drawing + + Export page + Exportar página - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Dibujo + + Drawing + Dibujo - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_fi.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_fi.ts index 791593262..0cfc259dd 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_fi.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_fi.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Piirustus + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Piirustus + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Tiedosto + + File + Tiedosto - &Export page... - &Vie sivu... + + &Export page... + &Vie sivu... - Export a page to an SVG file - Vie sivu SVG-tiedostoon + + + Export a page to an SVG file + Vie sivu SVG-tiedostoon - - + + CmdDrawingNewA3Landscape - Drawing - Piirustus + + Drawing + Piirustus - Insert new A3 landscape drawing - Lisää uusi A3 piirustus + + + Insert new A3 landscape drawing + Lisää uusi A3 piirustus - - + + CmdDrawingNewPage - Drawing - Piirustus + + Drawing + Piirustus - Insert new drawing - Insert new drawing + + + Insert new drawing + Insert new drawing - - + + CmdDrawingNewView - Drawing - Piirustus + + Drawing + Piirustus - Insert view in drawing - Insert view in drawing + + Insert view in drawing + Insert view in drawing - Insert a new View of a Part in the active drawing - Insert a new View of a Part in the active drawing + + Insert a new View of a Part in the active drawing + Insert a new View of a Part in the active drawing - - + + CmdDrawingOpen - Drawing - Piirustus + + Drawing + Piirustus - Open SVG... - Avaa SVG ... + + Open SVG... + Avaa SVG ... - Open a scalable vector graphic - Open a scalable vector graphic + + Open a scalable vector graphic + Open a scalable vector graphic - - + + + CmdDrawingOpenBrowserView + + + Drawing + Piirustus + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Piirustus + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Piirustus + + Drawing + Piirustus - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Tausta + + &Background + &Tausta - &Outline - &Outline + + &Outline + &Outline - &Native - &Native + + &Native + &Native - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Kuva + + &Image + &Kuva - &High Quality Antialiasing - &High Quality Antialiasing + + &High Quality Antialiasing + &High Quality Antialiasing - Open SVG File - Avaa SVG-tiedosto + + Open SVG File + Avaa SVG-tiedosto - Could not open file '%1'. - Tiedostoa '%1' ei voitu avata. + + Could not open file '%1'. + Tiedostoa '%1' ei voitu avata. - &Renderer - &Renderöinti + + &Renderer + &Renderöinti - Export PDF - Vie PDF-asiakirjaan + + Export PDF + Vie PDF-asiakirjaan - PDF file (*.pdf) - PDF-tiedosto (*.pdf) + + PDF file (*.pdf) + PDF-tiedosto (*.pdf) - Page sizes - Page sizes + + Page sizes + Page sizes - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 landscape + A0 landscape + A0 landscape - Insert new A0 landscape drawing - Insert new A0 landscape drawing + Insert new A0 landscape drawing + Insert new A0 landscape drawing - A1 landscape - A1 landscape + A1 landscape + A1 landscape - Insert new A1 landscape drawing - Insert new A1 landscape drawing + Insert new A1 landscape drawing + Insert new A1 landscape drawing - A2 landscape - A2 landscape + A2 landscape + A2 landscape - Insert new A2 landscape drawing - Insert new A2 landscape drawing + Insert new A2 landscape drawing + Insert new A2 landscape drawing - A3 landscape - A3 landscape + A3 landscape + A3 landscape - Insert new A3 landscape drawing - Lisää uusi A3 piirustus + Insert new A3 landscape drawing + Lisää uusi A3 piirustus - A4 landscape - A4 landscape + A4 landscape + A4 landscape - Insert new A4 landscape drawing - Insert new A4 landscape drawing + Insert new A4 landscape drawing + Insert new A4 landscape drawing - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Valitse avattava SVG-tiedosto + + Choose an SVG file to open + Valitse avattava SVG-tiedosto - - Drawing viewer - Piirustuksen katseluohjelma + + + + Drawing viewer + Piirustuksen katseluohjelma - - Scalable Vector Graphics (*.svg *.svgz) - Scalable Vector Graphics (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Scalable Vector Graphics (*.svg *.svgz) - Wrong selection - Väärä valinta + + + + + Wrong selection + Väärä valinta - Select a Part object. - Select a Part object. + + + Select a Part object. + Select a Part object. - No page to insert - No page to insert + + + + + No page to insert + No page to insert - Create a page to insert. - Create a page to insert. + + + + Create a page to insert. + Create a page to insert. - Select one Page object. - Valitse yksi sivu objektista. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Valitse yksi sivu objektista. - All Files (*.*) - Kaikki tiedostot (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Vie sivu + + All Files (*.*) + Kaikki tiedostot (*.*) - - Show drawing - Show drawing + + Export page + Vie sivu - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Piirustus + + Drawing + Piirustus - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_fr.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_fr.ts index 201f2b725..2b77a3904 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_fr.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_fr.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Mise en plan + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Mise en plan + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Fichier + + File + Fichier - &Export page... - &Exporter la page... + + &Export page... + &Exporter la page... - Export a page to an SVG file - Exporter une page vers un fichier SVG + + + Export a page to an SVG file + Exporter une page vers un fichier SVG - - + + CmdDrawingNewA3Landscape - Drawing - Mise en plan + + Drawing + Mise en plan - Insert new A3 landscape drawing - Insérer une nouvelle mise en plan A3 paysage + + + Insert new A3 landscape drawing + Insérer une nouvelle mise en plan A3 paysage - - + + CmdDrawingNewPage - Drawing - Mise en plan + + Drawing + Mise en plan - Insert new drawing - Insérer une nouvelle mise en plan + + + Insert new drawing + Insérer une nouvelle mise en plan - - + + CmdDrawingNewView - Drawing - Mise en plan + + Drawing + Mise en plan - Insert view in drawing - Insérer une vue dans la page + + Insert view in drawing + Insérer une vue dans la page - Insert a new View of a Part in the active drawing - Insérer une nouvelle vue de la pièce dans la page active + + Insert a new View of a Part in the active drawing + Insérer une nouvelle vue de la pièce dans la page active - - + + CmdDrawingOpen - Drawing - Mise en plan + + Drawing + Mise en plan - Open SVG... - Ouvrir SVG... + + Open SVG... + Ouvrir SVG... - Open a scalable vector graphic - Ouvrir un fichier vectoriel SVG + + Open a scalable vector graphic + Ouvrir un fichier vectoriel SVG - - + + + CmdDrawingOpenBrowserView + + + Drawing + Mise en plan + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Mise en plan + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Mise en plan + + Drawing + Mise en plan - Project shape... - Projeter la forme... + + Project shape... + Projeter la forme... - Project shape onto a user-defined plane - Projeter une forme sur un plan défini par l'utilisateur + + + Project shape onto a user-defined plane + Projeter une forme sur un plan défini par l'utilisateur - - + + DrawingGui::DrawingView - - &Background - &Arrière-plan + + &Background + &Arrière-plan - &Outline - &Contour + + &Outline + &Contour - &Native - &Natif + + &Native + &Natif - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Image + + &Image + &Image - &High Quality Antialiasing - Anticrénelage &haute qualité + + &High Quality Antialiasing + Anticrénelage &haute qualité - Open SVG File - Ouvrir un fichier SVG + + Open SVG File + Ouvrir un fichier SVG - Could not open file '%1'. - Impossible d'ouvrir le fichier'%1'. + + Could not open file '%1'. + Impossible d'ouvrir le fichier'%1'. - &Renderer - Moteur de &rendu + + &Renderer + Moteur de &rendu - Export PDF - Exporter vers PDF + + Export PDF + Exporter vers PDF - PDF file (*.pdf) - Fichier PDF (*.pdf) + + PDF file (*.pdf) + Fichier PDF (*.pdf) - Page sizes - Formats de papier + + Page sizes + Formats de papier - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Arêtes vives visibles + + Visible sharp edges + Arêtes vives visibles - Visible smooth edges - Arêtes de tangence visibles + + Visible smooth edges + Arêtes de tangence visibles - Visible sewn edges - Arêtes cousues visibles + + Visible sewn edges + Arêtes cousues visibles - Visible outline edges - Arêtes de contour visibles + + Visible outline edges + Arêtes de contour visibles - Visible isoparameters - Isoparamètres visibles + + Visible isoparameters + Isoparamètres visibles - Hidden sharp edges - Arêtes vives masquées + + Hidden sharp edges + Arêtes vives masquées - Hidden smooth edges - Arêtes de tangence masquées + + Hidden smooth edges + Arêtes de tangence masquées - Hidden sewn edges - Arêtes cousues masquées + + Hidden sewn edges + Arêtes cousues masquées - Hidden outline edges - Arêtes de contour masquées + + Hidden outline edges + Arêtes de contour masquées - Hidden isoparameters - Isoparamètres masqués + + Hidden isoparameters + Isoparamètres masqués - Project shapes - Projeter les formes + + Project shapes + Projeter les formes - - + + Drawing_NewPage - - A0 landscape - A0 paysage + A0 landscape + A0 paysage - Insert new A0 landscape drawing - Insérer une mise en plan A0 paysage + Insert new A0 landscape drawing + Insérer une mise en plan A0 paysage - A1 landscape - A1 paysage + A1 landscape + A1 paysage - Insert new A1 landscape drawing - Insérer une mise en plan A1 paysage + Insert new A1 landscape drawing + Insérer une mise en plan A1 paysage - A2 landscape - A2 paysage + A2 landscape + A2 paysage - Insert new A2 landscape drawing - Insérer une mise en plan A2 paysage + Insert new A2 landscape drawing + Insérer une mise en plan A2 paysage - A3 landscape - A3 Paysage + A3 landscape + A3 Paysage - Insert new A3 landscape drawing - Insérer une nouvelle mise en plan A3 paysage + Insert new A3 landscape drawing + Insérer une nouvelle mise en plan A3 paysage - A4 landscape - A4 paysage + A4 landscape + A4 paysage - Insert new A4 landscape drawing - Insérer une mise en plan A4 paysage + Insert new A4 landscape drawing + Insérer une mise en plan A4 paysage - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Choisir un fichier SVG à ouvrir + + Choose an SVG file to open + Choisir un fichier SVG à ouvrir - - Drawing viewer - Visionneuse de mise en plan + + + + Drawing viewer + Visionneuse de mise en plan - - Scalable Vector Graphics (*.svg *.svgz) - Fichier vectoriel SVG (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Fichier vectoriel SVG (*.svg *.svgz) - Wrong selection - Mauvaise sélection + + + + + Wrong selection + Mauvaise sélection - Select a Part object. - Sélectionnez un objet pièce. + + + Select a Part object. + Sélectionnez un objet pièce. - No page to insert - Aucune page pour insérer + + + + + No page to insert + Aucune page pour insérer - Create a page to insert. - Créer une page à insérer. + + + + Create a page to insert. + Créer une page à insérer. - Select one Page object. - Sélectionnez un objet Page. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Sélectionnez un objet Page. - All Files (*.*) - Tous les fichiers (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Exporter la page + + All Files (*.*) + Tous les fichiers (*.*) - - Show drawing - Afficher la mise en plan + + Export page + Exporter la page - - + + + Show drawing + Afficher la mise en plan + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Mise en plan + + Drawing + Mise en plan - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_hr.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_hr.ts index a0618d8a1..5f224d090 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_hr.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_hr.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Crtanje + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Crtanje + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Datoteka + + File + Datoteka - &Export page... - Izvedi stranicu... + + &Export page... + Izvedi stranicu... - Export a page to an SVG file - Izvoz stranicu za SVG datoteku + + + Export a page to an SVG file + Izvoz stranicu za SVG datoteku - - + + CmdDrawingNewA3Landscape - Drawing - Crtanje + + Drawing + Crtanje - Insert new A3 landscape drawing - Umetanje novog A3 pejzaža za crtanje + + + Insert new A3 landscape drawing + Umetanje novog A3 pejzaža za crtanje - - + + CmdDrawingNewPage - Drawing - Crtanje + + Drawing + Crtanje - Insert new drawing - Umetni novi crtež + + + Insert new drawing + Umetni novi crtež - - + + CmdDrawingNewView - Drawing - Crtanje + + Drawing + Crtanje - Insert view in drawing - Umetnite pogled u crtežu + + Insert view in drawing + Umetnite pogled u crtežu - Insert a new View of a Part in the active drawing - Umetnite novi pogled na dio u aktivnom crtežu + + Insert a new View of a Part in the active drawing + Umetnite novi pogled na dio u aktivnom crtežu - - + + CmdDrawingOpen - Drawing - Crtanje + + Drawing + Crtanje - Open SVG... - Otvori SVG ... + + Open SVG... + Otvori SVG ... - Open a scalable vector graphic - Otvorite ljestivcu- vektorska grafika + + Open a scalable vector graphic + Otvorite ljestivcu- vektorska grafika - - + + + CmdDrawingOpenBrowserView + + + Drawing + Crtanje + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Crtanje + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Crtanje + + Drawing + Crtanje - Project shape... - Projecirani oblik ... + + Project shape... + Projecirani oblik ... - Project shape onto a user-defined plane - Projeciraj oblik na korisnički definiranu ravninu + + + Project shape onto a user-defined plane + Projeciraj oblik na korisnički definiranu ravninu - - + + DrawingGui::DrawingView - - &Background - I pozadina + + &Background + I pozadina - &Outline - &amp; Potez + + &Outline + &amp; Potez - &Native - &amp; Prirodan + + &Native + &amp; Prirodan - &OpenGL - I OpenGL + + &OpenGL + I OpenGL - &Image - I slike + + &Image + I slike - &High Quality Antialiasing - &amp; visko kvalitetno anti prekrivanje + + &High Quality Antialiasing + &amp; visko kvalitetno anti prekrivanje - Open SVG File - Otvori SVG datoteku + + Open SVG File + Otvori SVG datoteku - Could not open file '%1'. - Nije moguće otvoriti datoteku '%1. + + Could not open file '%1'. + Nije moguće otvoriti datoteku '%1. - &Renderer - &; Renderer + + &Renderer + &; Renderer - Export PDF - Izvoz PDF + + Export PDF + Izvoz PDF - PDF file (*.pdf) - PDF datoteke (*. pdf) + + PDF file (*.pdf) + PDF datoteke (*. pdf) - Page sizes - Veličine stranica + + Page sizes + Veličine stranica - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Vidljivi oštri rubovi + + Visible sharp edges + Vidljivi oštri rubovi - Visible smooth edges - Vidljivi glatki rubovi + + Visible smooth edges + Vidljivi glatki rubovi - Visible sewn edges - Vidljivi iscrtkani rubovi + + Visible sewn edges + Vidljivi iscrtkani rubovi - Visible outline edges - Vidljivi vanjski rubovi + + Visible outline edges + Vidljivi vanjski rubovi - Visible isoparameters - Vidljivi izometrijski parametri + + Visible isoparameters + Vidljivi izometrijski parametri - Hidden sharp edges - Skriveni oštri rubovi + + Hidden sharp edges + Skriveni oštri rubovi - Hidden smooth edges - Skriveni glatki rubovi + + Hidden smooth edges + Skriveni glatki rubovi - Hidden sewn edges - Skriveni iscrtkani rubovi + + Hidden sewn edges + Skriveni iscrtkani rubovi - Hidden outline edges - Skriveni vanjski rubovi + + Hidden outline edges + Skriveni vanjski rubovi - Hidden isoparameters - Skriveni izometrijski parametri + + Hidden isoparameters + Skriveni izometrijski parametri - Project shapes - Projecirani oblik + + Project shapes + Projecirani oblik - - + + Drawing_NewPage - - A0 landscape - A0 pejzaž + A0 landscape + A0 pejzaž - Insert new A0 landscape drawing - Umetnite novi A0 pejzažni crtež + Insert new A0 landscape drawing + Umetnite novi A0 pejzažni crtež - A1 landscape - A1 pejzaž + A1 landscape + A1 pejzaž - Insert new A1 landscape drawing - Umetnite novi A1 pejzažni crtež + Insert new A1 landscape drawing + Umetnite novi A1 pejzažni crtež - A2 landscape - A2 pejzaž + A2 landscape + A2 pejzaž - Insert new A2 landscape drawing - Umetnite novi A2 pejzažni crtež + Insert new A2 landscape drawing + Umetnite novi A2 pejzažni crtež - A3 landscape - A3 pejzaž + A3 landscape + A3 pejzaž - Insert new A3 landscape drawing - Umetanje novog A3 pejzaža za crtanje + Insert new A3 landscape drawing + Umetanje novog A3 pejzaža za crtanje - A4 landscape - A4 pejzaž + A4 landscape + A4 pejzaž - Insert new A4 landscape drawing - Umetnite novi A4 pejzažni crtež + Insert new A4 landscape drawing + Umetnite novi A4 pejzažni crtež - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Odaberite SVG datoteku za otvaranje + + Choose an SVG file to open + Odaberite SVG datoteku za otvaranje - - Drawing viewer - Preglednik za crtanje + + + + Drawing viewer + Preglednik za crtanje - - Scalable Vector Graphics (*.svg *.svgz) - Ljestvica- Vector Graphics (SVG *. *. svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Ljestvica- Vector Graphics (SVG *. *. svgz) - Wrong selection - Pogrešan odabir + + + + + Wrong selection + Pogrešan odabir - Select a Part object. - Odaberite dio objekta. + + + Select a Part object. + Odaberite dio objekta. - No page to insert - Nema stranica za umetanje + + + + + No page to insert + Nema stranica za umetanje - Create a page to insert. - Stvaranje stranica za umetanje. + + + + Create a page to insert. + Stvaranje stranica za umetanje. - Select one Page object. - Odaberite jednu stranicu objekta + + Create a page to insert views into. + - SVG(*.svg) - SVG (*. svg) + + + Select one Page object. + Odaberite jednu stranicu objekta - All Files (*.*) - Sve datoteke (*.*) + + SVG(*.svg) + SVG (*. svg) - Export page - Izvedi stranicu + + All Files (*.*) + Sve datoteke (*.*) - - Show drawing - Prikaži crtež + + Export page + Izvedi stranicu - - + + + Show drawing + Prikaži crtež + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Crtanje + + Drawing + Crtanje - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_hu.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_hu.ts index ecef59eb6..7e6c83c5a 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_hu.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_hu.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Rajz + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Rajz + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Fájl + + File + Fájl - &Export page... - #Oldal exportálása... + + &Export page... + #Oldal exportálása... - Export a page to an SVG file - Oldalt exportál SVG fájlba + + + Export a page to an SVG file + Oldalt exportál SVG fájlba - - + + CmdDrawingNewA3Landscape - Drawing - Rajz + + Drawing + Rajz - Insert new A3 landscape drawing - Új A3 tájkép rajzot illeszt + + + Insert new A3 landscape drawing + Új A3 tájkép rajzot illeszt - - + + CmdDrawingNewPage - Drawing - Rajz + + Drawing + Rajz - Insert new drawing - Helyezze be az új rajzot + + + Insert new drawing + Helyezze be az új rajzot - - + + CmdDrawingNewView - Drawing - Rajz + + Drawing + Rajz - Insert view in drawing - A rajzba nézetet illeszt + + Insert view in drawing + A rajzba nézetet illeszt - Insert a new View of a Part in the active drawing - A meglévő rajzba új rész nézetet illeszt + + Insert a new View of a Part in the active drawing + A meglévő rajzba új rész nézetet illeszt - - + + CmdDrawingOpen - Drawing - Rajz + + Drawing + Rajz - Open SVG... - SVG megynyitása... + + Open SVG... + SVG megynyitása... - Open a scalable vector graphic - Skálázható vektor grafikát nyit meg + + Open a scalable vector graphic + Skálázható vektor grafikát nyit meg - - + + + CmdDrawingOpenBrowserView + + + Drawing + Rajz + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Rajz + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Rajz + + Drawing + Rajz - Project shape... - Terv formák... + + Project shape... + Terv formák... - Project shape onto a user-defined plane - A felhasználó által meghatározott síkra vetített formák + + + Project shape onto a user-defined plane + A felhasználó által meghatározott síkra vetített formák - - + + DrawingGui::DrawingView - - &Background - &Háttér + + &Background + &Háttér - &Outline - &Körvonal + + &Outline + &Körvonal - &Native - &Natív + + &Native + &Natív - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Kép + + &Image + &Kép - &High Quality Antialiasing - &Magas minőségű Antialiasing + + &High Quality Antialiasing + &Magas minőségű Antialiasing - Open SVG File - SVG fájl megnyitása + + Open SVG File + SVG fájl megnyitása - Could not open file '%1'. - Nem tudja megnyitni a '%1'fájlt. + + Could not open file '%1'. + Nem tudja megnyitni a '%1'fájlt. - &Renderer - Renderelő + + &Renderer + Renderelő - Export PDF - Exportálás PDF-be + + Export PDF + Exportálás PDF-be - PDF file (*.pdf) - PDF fájl (*.pdf) + + PDF file (*.pdf) + PDF fájl (*.pdf) - Page sizes - Oldalméretek + + Page sizes + Oldalméretek - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4-es + + A4 + A4-es - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Látható éles élek + + Visible sharp edges + Látható éles élek - Visible smooth edges - Látható simított élek + + Visible smooth edges + Látható simított élek - Visible sewn edges - Látható varrott élek + + Visible sewn edges + Látható varrott élek - Visible outline edges - Látható körvonal élek + + Visible outline edges + Látható körvonal élek - Visible isoparameters - Látható isoparaméterek + + Visible isoparameters + Látható isoparaméterek - Hidden sharp edges - Rejtett éles élek + + Hidden sharp edges + Rejtett éles élek - Hidden smooth edges - Rejtett simított élek + + Hidden smooth edges + Rejtett simított élek - Hidden sewn edges - Rejtett varrott élek + + Hidden sewn edges + Rejtett varrott élek - Hidden outline edges - Rejtett vázlat élek + + Hidden outline edges + Rejtett vázlat élek - Hidden isoparameters - Rejtett iso-paraméterek + + Hidden isoparameters + Rejtett iso-paraméterek - Project shapes - Terv formák + + Project shapes + Terv formák - - + + Drawing_NewPage - - A0 landscape - A0-es fekvő + A0 landscape + A0-es fekvő - Insert new A0 landscape drawing - Helyezze be az új A4-es fekvő rajzot + Insert new A0 landscape drawing + Helyezze be az új A4-es fekvő rajzot - A1 landscape - A4-es fekvő + A1 landscape + A4-es fekvő - Insert new A1 landscape drawing - Helyezze be az új A4-es fekvő rajzot + Insert new A1 landscape drawing + Helyezze be az új A4-es fekvő rajzot - A2 landscape - A4-es fekvő + A2 landscape + A4-es fekvő - Insert new A2 landscape drawing - Helyezze be az új A4-es fekvő rajzot + Insert new A2 landscape drawing + Helyezze be az új A4-es fekvő rajzot - A3 landscape - A4-es fekvő + A3 landscape + A4-es fekvő - Insert new A3 landscape drawing - Új A3 tájkép rajzot illeszt + Insert new A3 landscape drawing + Új A3 tájkép rajzot illeszt - A4 landscape - A4-es fekvő + A4 landscape + A4-es fekvő - Insert new A4 landscape drawing - Helyezze be az új A4-es fekvő rajzot + Insert new A4 landscape drawing + Helyezze be az új A4-es fekvő rajzot - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - SVG fájl kiválasztása megnyitáshoz + + Choose an SVG file to open + SVG fájl kiválasztása megnyitáshoz - - Drawing viewer - Rajz nézegető + + + + Drawing viewer + Rajz nézegető - - Scalable Vector Graphics (*.svg *.svgz) - Skálázható vektor grafika (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Skálázható vektor grafika (*.svg *.svgz) - Wrong selection - Nem megfelelő kiválasztás + + + + + Wrong selection + Nem megfelelő kiválasztás - Select a Part object. - Objektum rész kiválasztása. + + + Select a Part object. + Objektum rész kiválasztása. - No page to insert - Nem létező oldal a beillesztéshez + + + + + No page to insert + Nem létező oldal a beillesztéshez - Create a page to insert. - Oldal létrehozása a beillesztéshez. + + + + Create a page to insert. + Oldal létrehozása a beillesztéshez. - Select one Page object. - Válasszon ki egy oldalas objektumot. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Válasszon ki egy oldalas objektumot. - All Files (*.*) - Összes fájl (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Oldal exportálása + + All Files (*.*) + Összes fájl (*.*) - - Show drawing - Mutasd a rajzot + + Export page + Oldal exportálása - - + + + Show drawing + Mutasd a rajzot + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Rajz + + Drawing + Rajz - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_it.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_it.ts index d4c2697e7..99a799394 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_it.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_it.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Disegno + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Disegno + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - File + + File + File - &Export page... - &Esporta pagina... + + &Export page... + &Esporta pagina... - Export a page to an SVG file - Esporta una pagina in un file SVG + + + Export a page to an SVG file + Esporta una pagina in un file SVG - - + + CmdDrawingNewA3Landscape - Drawing - Disegno + + Drawing + Disegno - Insert new A3 landscape drawing - Inserisci un nuovo disegno A3 orizzontale + + + Insert new A3 landscape drawing + Inserisci un nuovo disegno A3 orizzontale - - + + CmdDrawingNewPage - Drawing - Disegno + + Drawing + Disegno - Insert new drawing - Inserisci nuovo disegno + + + Insert new drawing + Inserisci nuovo disegno - - + + CmdDrawingNewView - Drawing - Disegno + + Drawing + Disegno - Insert view in drawing - Inserisci vista nel disegno + + Insert view in drawing + Inserisci vista nel disegno - Insert a new View of a Part in the active drawing - Inserisce una nuova vista di una parte del disegno attivo + + Insert a new View of a Part in the active drawing + Inserisce una nuova vista di una parte del disegno attivo - - + + CmdDrawingOpen - Drawing - Disegno + + Drawing + Disegno - Open SVG... - Apri SVG... + + Open SVG... + Apri SVG... - Open a scalable vector graphic - Apre una grafica vettoriale scalabile + + Open a scalable vector graphic + Apre una grafica vettoriale scalabile - - + + + CmdDrawingOpenBrowserView + + + Drawing + Disegno + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Disegno + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Disegno + + Drawing + Disegno - Project shape... - Proietta le forme... + + Project shape... + Proietta le forme... - Project shape onto a user-defined plane - Proietta una forma su di un piano definito dall'utente + + + Project shape onto a user-defined plane + Proietta una forma su di un piano definito dall'utente - - + + DrawingGui::DrawingView - - &Background - &Sfondo + + &Background + &Sfondo - &Outline - C&ontorno + + &Outline + C&ontorno - &Native - &Nativo + + &Native + &Nativo - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Immagine + + &Image + &Immagine - &High Quality Antialiasing - &Antialiasing di qualità elevata + + &High Quality Antialiasing + &Antialiasing di qualità elevata - Open SVG File - Apri file SVG + + Open SVG File + Apri file SVG - Could not open file '%1'. - Impossibile aprire il file '%1'. + + Could not open file '%1'. + Impossibile aprire il file '%1'. - &Renderer - &Render + + &Renderer + &Render - Export PDF - Esporta PDF + + Export PDF + Esporta PDF - PDF file (*.pdf) - File PDF (*.pdf) + + PDF file (*.pdf) + File PDF (*.pdf) - Page sizes - Dimensioni pagina + + Page sizes + Dimensioni pagina - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - mostra gli spigoli vivi + + Visible sharp edges + mostra gli spigoli vivi - Visible smooth edges - Mostra i bordi smussati + + Visible smooth edges + Mostra i bordi smussati - Visible sewn edges - Mostra i bordi cuciti + + Visible sewn edges + Mostra i bordi cuciti - Visible outline edges - Mostra i bordi esterni + + Visible outline edges + Mostra i bordi esterni - Visible isoparameters - Mostra le isoparametriche + + Visible isoparameters + Mostra le isoparametriche - Hidden sharp edges - Nascondi gli spigoli vivi + + Hidden sharp edges + Nascondi gli spigoli vivi - Hidden smooth edges - Nascondi i bordi smussati + + Hidden smooth edges + Nascondi i bordi smussati - Hidden sewn edges - Nascondi i bordi cuciti + + Hidden sewn edges + Nascondi i bordi cuciti - Hidden outline edges - Nascondi i bordi esterni + + Hidden outline edges + Nascondi i bordi esterni - Hidden isoparameters - Nascondi le isoparametriche + + Hidden isoparameters + Nascondi le isoparametriche - Project shapes - Proietta le forme + + Project shapes + Proietta le forme - - + + Drawing_NewPage - - A0 landscape - A0 orizzontale + A0 landscape + A0 orizzontale - Insert new A0 landscape drawing - Inserisce nuovo disegno A0 orizzontale + Insert new A0 landscape drawing + Inserisce nuovo disegno A0 orizzontale - A1 landscape - A1 orizzontale + A1 landscape + A1 orizzontale - Insert new A1 landscape drawing - Inserisce nuovo disegno A2 orizzontale + Insert new A1 landscape drawing + Inserisce nuovo disegno A2 orizzontale - A2 landscape - A2 orizzontale + A2 landscape + A2 orizzontale - Insert new A2 landscape drawing - Inserisce nuovo disegno A2 orizzontale + Insert new A2 landscape drawing + Inserisce nuovo disegno A2 orizzontale - A3 landscape - A3 orizzontale + A3 landscape + A3 orizzontale - Insert new A3 landscape drawing - Inserisci un nuovo disegno A3 orizzontale + Insert new A3 landscape drawing + Inserisci un nuovo disegno A3 orizzontale - A4 landscape - A4 orizzontale + A4 landscape + A4 orizzontale - Insert new A4 landscape drawing - Inserisce nuovo disegno A4 orizzontale + Insert new A4 landscape drawing + Inserisce nuovo disegno A4 orizzontale - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Seleziona un file SVG da aprire + + Choose an SVG file to open + Seleziona un file SVG da aprire - - Drawing viewer - Visualizzatore disegno + + + + Drawing viewer + Visualizzatore disegno - - Scalable Vector Graphics (*.svg *.svgz) - Grafica Vettoriale Scalabile (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Grafica Vettoriale Scalabile (*.svg *.svgz) - Wrong selection - Selezione errata + + + + + Wrong selection + Selezione errata - Select a Part object. - Seleziona un oggetto Parte. + + + Select a Part object. + Seleziona un oggetto Parte. - No page to insert - Nessuna pagina da inserire + + + + + No page to insert + Nessuna pagina da inserire - Create a page to insert. - Crea una pagina da inserire. + + + + Create a page to insert. + Crea una pagina da inserire. - Select one Page object. - Seleziona un oggetto Pagina. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Seleziona un oggetto Pagina. - All Files (*.*) - Tutti i file (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Esporta pagina + + All Files (*.*) + Tutti i file (*.*) - - Show drawing - Mostra disegno + + Export page + Esporta pagina - - + + + Show drawing + Mostra disegno + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Disegno + + Drawing + Disegno - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_ja.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_ja.ts index 021388eed..6402207c1 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_ja.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_ja.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + 図面 + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + 図面 + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - ファイル + + File + ファイル - &Export page... - &Export page... + + &Export page... + &Export page... - Export a page to an SVG file - SVGファイルにエクスポート + + + Export a page to an SVG file + SVGファイルにエクスポート - - + + CmdDrawingNewA3Landscape - Drawing - 図面 + + Drawing + 図面 - Insert new A3 landscape drawing - Insert new A3 landscape drawing + + + Insert new A3 landscape drawing + Insert new A3 landscape drawing - - + + CmdDrawingNewPage - Drawing - 図面 + + Drawing + 図面 - Insert new drawing - 新しい図面を挿入 + + + Insert new drawing + 新しい図面を挿入 - - + + CmdDrawingNewView - Drawing - 図面 + + Drawing + 図面 - Insert view in drawing - Insert view in drawing + + Insert view in drawing + Insert view in drawing - Insert a new View of a Part in the active drawing - Insert a new View of a Part in the active drawing + + Insert a new View of a Part in the active drawing + Insert a new View of a Part in the active drawing - - + + CmdDrawingOpen - Drawing - 図面 + + Drawing + 図面 - Open SVG... - Open SVG... + + Open SVG... + Open SVG... - Open a scalable vector graphic - ベクトルグラフィックを開きます。 + + Open a scalable vector graphic + ベクトルグラフィックを開きます。 - - + + + CmdDrawingOpenBrowserView + + + Drawing + 図面 + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + 図面 + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - 図面 + + Drawing + 図面 - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Background + + &Background + &Background - &Outline - &Outline + + &Outline + &Outline - &Native - &Native + + &Native + &Native - &OpenGL - OpenGL (&o) + + &OpenGL + OpenGL (&o) - &Image - 画像(&i) + + &Image + 画像(&i) - &High Quality Antialiasing - 高品質アンチエイリアス(&H) + + &High Quality Antialiasing + 高品質アンチエイリアス(&H) - Open SVG File - SVG ファイルを開く + + Open SVG File + SVG ファイルを開く - Could not open file '%1'. - Could not open file '%1'. + + Could not open file '%1'. + Could not open file '%1'. - &Renderer - &Renderer + + &Renderer + &Renderer - Export PDF - PDFファイル形式でエクスポート + + Export PDF + PDFファイル形式でエクスポート - PDF file (*.pdf) - PDF ファイル (*.pdf) + + PDF file (*.pdf) + PDF ファイル (*.pdf) - Page sizes - ページサイズ + + Page sizes + ページサイズ - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 横 + A0 landscape + A0 横 - Insert new A0 landscape drawing - Insert new A0 landscape drawing + Insert new A0 landscape drawing + Insert new A0 landscape drawing - A1 landscape - A1 横 + A1 landscape + A1 横 - Insert new A1 landscape drawing - Insert new A1 landscape drawing + Insert new A1 landscape drawing + Insert new A1 landscape drawing - A2 landscape - A2 横 + A2 landscape + A2 横 - Insert new A2 landscape drawing - Insert new A2 landscape drawing + Insert new A2 landscape drawing + Insert new A2 landscape drawing - A3 landscape - A3 横 + A3 landscape + A3 横 - Insert new A3 landscape drawing - Insert new A3 landscape drawing + Insert new A3 landscape drawing + Insert new A3 landscape drawing - A4 landscape - A4 横 + A4 landscape + A4 横 - Insert new A4 landscape drawing - Insert new A4 landscape drawing + Insert new A4 landscape drawing + Insert new A4 landscape drawing - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - SVG ファイルを選択 + + Choose an SVG file to open + SVG ファイルを選択 - - Drawing viewer - Drawing viewer + + + + Drawing viewer + Drawing viewer - - Scalable Vector Graphics (*.svg *.svgz) - Scalable Vector Graphics (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Scalable Vector Graphics (*.svg *.svgz) - Wrong selection - 誤った選択 + + + + + Wrong selection + 誤った選択 - Select a Part object. - Select a Part object. + + + Select a Part object. + Select a Part object. - No page to insert - No page to insert + + + + + No page to insert + No page to insert - Create a page to insert. - Create a page to insert. + + + + Create a page to insert. + Create a page to insert. - Select one Page object. - Select one Page object. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Select one Page object. - All Files (*.*) - すべてのファイル (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Export page + + All Files (*.*) + すべてのファイル (*.*) - - Show drawing - Show drawing + + Export page + Export page - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - 図面 + + Drawing + 図面 - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_nl.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_nl.ts index e16424ddd..533849f94 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_nl.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_nl.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Tekening + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Tekening + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Bestand + + File + Bestand - &Export page... - &Exporteer pagina... + + &Export page... + &Exporteer pagina... - Export a page to an SVG file - Een pagina naar een SVG-bestand exporteren + + + Export a page to an SVG file + Een pagina naar een SVG-bestand exporteren - - + + CmdDrawingNewA3Landscape - Drawing - Tekening + + Drawing + Tekening - Insert new A3 landscape drawing - Nieuwe A3-tekening (liggend) invoegen + + + Insert new A3 landscape drawing + Nieuwe A3-tekening (liggend) invoegen - - + + CmdDrawingNewPage - Drawing - Tekening + + Drawing + Tekening - Insert new drawing - Nieuwe tekening invoegen + + + Insert new drawing + Nieuwe tekening invoegen - - + + CmdDrawingNewView - Drawing - Tekening + + Drawing + Tekening - Insert view in drawing - Aanzicht invoegen in een tekening + + Insert view in drawing + Aanzicht invoegen in een tekening - Insert a new View of a Part in the active drawing - Plaats een nieuwe aanzicht van een onderdeel in de actieve tekening + + Insert a new View of a Part in the active drawing + Plaats een nieuwe aanzicht van een onderdeel in de actieve tekening - - + + CmdDrawingOpen - Drawing - Tekening + + Drawing + Tekening - Open SVG... - Open SVG... + + Open SVG... + Open SVG... - Open a scalable vector graphic - Open een scalable vector graphic + + Open a scalable vector graphic + Open een scalable vector graphic - - + + + CmdDrawingOpenBrowserView + + + Drawing + Tekening + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Tekening + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Tekening + + Drawing + Tekening - Project shape... - Projectvorm... + + Project shape... + Projectvorm... - Project shape onto a user-defined plane - Projecteer vorm op een door de gebruiker gedefinieerd vlak + + + Project shape onto a user-defined plane + Projecteer vorm op een door de gebruiker gedefinieerd vlak - - + + DrawingGui::DrawingView - - &Background - &Achtergrond + + &Background + &Achtergrond - &Outline - &Omtrek + + &Outline + &Omtrek - &Native - &Eigen + + &Native + &Eigen - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Afbeelding + + &Image + &Afbeelding - &High Quality Antialiasing - Hoge kwaliteit Antialiasing + + &High Quality Antialiasing + Hoge kwaliteit Antialiasing - Open SVG File - Open SVG-bestand + + Open SVG File + Open SVG-bestand - Could not open file '%1'. - Kon bestand '%1' niet openen. + + Could not open file '%1'. + Kon bestand '%1' niet openen. - &Renderer - Renderer + + &Renderer + Renderer - Export PDF - Exporteren als PDF + + Export PDF + Exporteren als PDF - PDF file (*.pdf) - PDF-bestand (*.pdf) + + PDF file (*.pdf) + PDF-bestand (*.pdf) - Page sizes - Paginaformaten + + Page sizes + Paginaformaten - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Zichtbare scherpe randen + + Visible sharp edges + Zichtbare scherpe randen - Visible smooth edges - Zichtbare gladde randen + + Visible smooth edges + Zichtbare gladde randen - Visible sewn edges - Zichtbare genaaide randen + + Visible sewn edges + Zichtbare genaaide randen - Visible outline edges - Zichtbare omtrekranden + + Visible outline edges + Zichtbare omtrekranden - Visible isoparameters - Zichtbare ISO-parameters + + Visible isoparameters + Zichtbare ISO-parameters - Hidden sharp edges - Verborgen scherpe randen + + Hidden sharp edges + Verborgen scherpe randen - Hidden smooth edges - Verborgen gladde randen + + Hidden smooth edges + Verborgen gladde randen - Hidden sewn edges - Verborgen genaaide randen + + Hidden sewn edges + Verborgen genaaide randen - Hidden outline edges - Verborgen omtrekranden + + Hidden outline edges + Verborgen omtrekranden - Hidden isoparameters - Verborgen ISO-parameters + + Hidden isoparameters + Verborgen ISO-parameters - Project shapes - Projecteer vormen + + Project shapes + Projecteer vormen - - + + Drawing_NewPage - - A0 landscape - A0 liggend + A0 landscape + A0 liggend - Insert new A0 landscape drawing - Nieuwe A0-tekening (liggend) invoegen + Insert new A0 landscape drawing + Nieuwe A0-tekening (liggend) invoegen - A1 landscape - A1 liggend + A1 landscape + A1 liggend - Insert new A1 landscape drawing - Nieuwe A1-tekening (liggend) invoegen + Insert new A1 landscape drawing + Nieuwe A1-tekening (liggend) invoegen - A2 landscape - A2 liggend + A2 landscape + A2 liggend - Insert new A2 landscape drawing - Nieuwe A2-tekening (liggend) invoegen + Insert new A2 landscape drawing + Nieuwe A2-tekening (liggend) invoegen - A3 landscape - A3 liggend + A3 landscape + A3 liggend - Insert new A3 landscape drawing - Nieuwe A3-tekening (liggend) invoegen + Insert new A3 landscape drawing + Nieuwe A3-tekening (liggend) invoegen - A4 landscape - A4 liggend + A4 landscape + A4 liggend - Insert new A4 landscape drawing - Nieuwe A4-tekening (liggend) invoegen + Insert new A4 landscape drawing + Nieuwe A4-tekening (liggend) invoegen - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Kies een SVG-bestand om te openen + + Choose an SVG file to open + Kies een SVG-bestand om te openen - - Drawing viewer - Tekening bekijker + + + + Drawing viewer + Tekening bekijker - - Scalable Vector Graphics (*.svg *.svgz) - Scalable Vector Graphics (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Scalable Vector Graphics (*.svg *.svgz) - Wrong selection - Verkeerde selectie + + + + + Wrong selection + Verkeerde selectie - Select a Part object. - Selecteer een onderdeel-object. + + + Select a Part object. + Selecteer een onderdeel-object. - No page to insert - Geen pagina om in te voegen + + + + + No page to insert + Geen pagina om in te voegen - Create a page to insert. - Maak een pagina om in te voegen. + + + + Create a page to insert. + Maak een pagina om in te voegen. - Select one Page object. - Selecteer een pagina-object. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Selecteer een pagina-object. - All Files (*.*) - Alle bestanden (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Exporteer pagina + + All Files (*.*) + Alle bestanden (*.*) - - Show drawing - Toon tekening + + Export page + Exporteer pagina - - + + + Show drawing + Toon tekening + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Tekening + + Drawing + Tekening - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_no.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_no.ts index 33cc53400..9c71f7fa5 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_no.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_no.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Tegning + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Tegning + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Fil + + File + Fil - &Export page... - &Eksporter side... + + &Export page... + &Eksporter side... - Export a page to an SVG file - Eksportere en side til en SVG-fil + + + Export a page to an SVG file + Eksportere en side til en SVG-fil - - + + CmdDrawingNewA3Landscape - Drawing - Tegning + + Drawing + Tegning - Insert new A3 landscape drawing - Sett inn ny A3 landskapstegning + + + Insert new A3 landscape drawing + Sett inn ny A3 landskapstegning - - + + CmdDrawingNewPage - Drawing - Tegning + + Drawing + Tegning - Insert new drawing - Insert new drawing + + + Insert new drawing + Insert new drawing - - + + CmdDrawingNewView - Drawing - Tegning + + Drawing + Tegning - Insert view in drawing - Sett inn visning i tegning + + Insert view in drawing + Sett inn visning i tegning - Insert a new View of a Part in the active drawing - Sett inn en ny visning av et komponent i den aktive tegningen + + Insert a new View of a Part in the active drawing + Sett inn en ny visning av et komponent i den aktive tegningen - - + + CmdDrawingOpen - Drawing - Tegning + + Drawing + Tegning - Open SVG... - Åpne SVG... + + Open SVG... + Åpne SVG... - Open a scalable vector graphic - Åpne skalerbar vektorgrafikk + + Open a scalable vector graphic + Åpne skalerbar vektorgrafikk - - + + + CmdDrawingOpenBrowserView + + + Drawing + Tegning + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Tegning + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Tegning + + Drawing + Tegning - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Bakgrunn + + &Background + &Bakgrunn - &Outline - &Disposisjon + + &Outline + &Disposisjon - &Native - &Opprinnelig + + &Native + &Opprinnelig - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Bilde + + &Image + &Bilde - &High Quality Antialiasing - &Høykvalitets kantutjevning + + &High Quality Antialiasing + &Høykvalitets kantutjevning - Open SVG File - Åpne SVG-fil + + Open SVG File + Åpne SVG-fil - Could not open file '%1'. - Kunne ikke åpne filen '%1'. + + Could not open file '%1'. + Kunne ikke åpne filen '%1'. - &Renderer - &Bildegenerering + + &Renderer + &Bildegenerering - Export PDF - Eksporter PDF + + Export PDF + Eksporter PDF - PDF file (*.pdf) - PDF-fil (*.pdf) + + PDF file (*.pdf) + PDF-fil (*.pdf) - Page sizes - Page sizes + + Page sizes + Page sizes - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 landscape + A0 landscape + A0 landscape - Insert new A0 landscape drawing - Insert new A0 landscape drawing + Insert new A0 landscape drawing + Insert new A0 landscape drawing - A1 landscape - A1 landscape + A1 landscape + A1 landscape - Insert new A1 landscape drawing - Insert new A1 landscape drawing + Insert new A1 landscape drawing + Insert new A1 landscape drawing - A2 landscape - A2 landscape + A2 landscape + A2 landscape - Insert new A2 landscape drawing - Insert new A2 landscape drawing + Insert new A2 landscape drawing + Insert new A2 landscape drawing - A3 landscape - A3 landscape + A3 landscape + A3 landscape - Insert new A3 landscape drawing - Sett inn ny A3 landskapstegning + Insert new A3 landscape drawing + Sett inn ny A3 landskapstegning - A4 landscape - A4 landscape + A4 landscape + A4 landscape - Insert new A4 landscape drawing - Insert new A4 landscape drawing + Insert new A4 landscape drawing + Insert new A4 landscape drawing - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Velg en SVG-fil å åpne + + Choose an SVG file to open + Velg en SVG-fil å åpne - - Drawing viewer - Tegningsviser + + + + Drawing viewer + Tegningsviser - - Scalable Vector Graphics (*.svg *.svgz) - Skalerbar Vektor Grafikk (SVG *. *. svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Skalerbar Vektor Grafikk (SVG *. *. svgz) - Wrong selection - Feil valg + + + + + Wrong selection + Feil valg - Select a Part object. - Velg et komponentobjekt. + + + Select a Part object. + Velg et komponentobjekt. - No page to insert - Ingen side å sette inn + + + + + No page to insert + Ingen side å sette inn - Create a page to insert. - Lag en side å sette inn. + + + + Create a page to insert. + Lag en side å sette inn. - Select one Page object. - Velg ett objekt på siden. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Velg ett objekt på siden. - All Files (*.*) - Alle filer (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Eksporter side + + All Files (*.*) + Alle filer (*.*) - - Show drawing - Show drawing + + Export page + Eksporter side - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Tegning + + Drawing + Tegning - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_pl.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_pl.ts index 4ad221519..6ed1b1286 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_pl.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_pl.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Rysunek + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Rysunek + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Plik + + File + Plik - &Export page... - &Eksportuj stronę... + + &Export page... + &Eksportuj stronę... - Export a page to an SVG file - Eksport strony do pliku SVG + + + Export a page to an SVG file + Eksport strony do pliku SVG - - + + CmdDrawingNewA3Landscape - Drawing - Rysunek + + Drawing + Rysunek - Insert new A3 landscape drawing - Wstaw formatkę A3 poziomo + + + Insert new A3 landscape drawing + Wstaw formatkę A3 poziomo - - + + CmdDrawingNewPage - Drawing - Rysunek + + Drawing + Rysunek - Insert new drawing - Wstaw nowy rysunek + + + Insert new drawing + Wstaw nowy rysunek - - + + CmdDrawingNewView - Drawing - Rysunek + + Drawing + Rysunek - Insert view in drawing - Wstaw widok w rysunku + + Insert view in drawing + Wstaw widok w rysunku - Insert a new View of a Part in the active drawing - Wstaw nowy widok części w aktywnym rysunku + + Insert a new View of a Part in the active drawing + Wstaw nowy widok części w aktywnym rysunku - - + + CmdDrawingOpen - Drawing - Rysunek + + Drawing + Rysunek - Open SVG... - Otwórz SVG... + + Open SVG... + Otwórz SVG... - Open a scalable vector graphic - Otwórz skalowalną grafikę wektorową + + Open a scalable vector graphic + Otwórz skalowalną grafikę wektorową - - + + + CmdDrawingOpenBrowserView + + + Drawing + Rysunek + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Rysunek + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Rysunek + + Drawing + Rysunek - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Tło + + &Background + &Tło - &Outline - &Zarys + + &Outline + &Zarys - &Native - &Wbudowany + + &Native + &Wbudowany - &OpenGL - OpenGL + + &OpenGL + OpenGL - &Image - &Obraz + + &Image + &Obraz - &High Quality Antialiasing - &Wygładzanie wysokiej jakości + + &High Quality Antialiasing + &Wygładzanie wysokiej jakości - Open SVG File - Otwórz plik SVG + + Open SVG File + Otwórz plik SVG - Could not open file '%1'. - Nie można otworzyć pliku '%1'. + + Could not open file '%1'. + Nie można otworzyć pliku '%1'. - &Renderer - &Renderer + + &Renderer + &Renderer - Export PDF - Eksport PDF + + Export PDF + Eksport PDF - PDF file (*.pdf) - Plik PDF (*. pdf) + + PDF file (*.pdf) + Plik PDF (*. pdf) - Page sizes - Rozmiary stron + + Page sizes + Rozmiary stron - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 poziomo + A0 landscape + A0 poziomo - Insert new A0 landscape drawing - Wstaw formatkę A0 poziomo + Insert new A0 landscape drawing + Wstaw formatkę A0 poziomo - A1 landscape - A1 poziomo + A1 landscape + A1 poziomo - Insert new A1 landscape drawing - Wstaw formatkę A1 poziomo + Insert new A1 landscape drawing + Wstaw formatkę A1 poziomo - A2 landscape - A2 poziomo + A2 landscape + A2 poziomo - Insert new A2 landscape drawing - Wstaw formatkę A3 poziomo + Insert new A2 landscape drawing + Wstaw formatkę A3 poziomo - A3 landscape - A3 poziomo + A3 landscape + A3 poziomo - Insert new A3 landscape drawing - Wstaw formatkę A3 poziomo + Insert new A3 landscape drawing + Wstaw formatkę A3 poziomo - A4 landscape - A4 poziomo + A4 landscape + A4 poziomo - Insert new A4 landscape drawing - Wstaw formatkę A4 poziomo + Insert new A4 landscape drawing + Wstaw formatkę A4 poziomo - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Wybierz plik SVG do otwarcia + + Choose an SVG file to open + Wybierz plik SVG do otwarcia - - Drawing viewer - Podgląd rysunku + + + + Drawing viewer + Podgląd rysunku - - Scalable Vector Graphics (*.svg *.svgz) - Skalowalna Grafika Wektorowa (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Skalowalna Grafika Wektorowa (*.svg *.svgz) - Wrong selection - Niewłaściwy wybór + + + + + Wrong selection + Niewłaściwy wybór - Select a Part object. - Wybierz stronę. + + + Select a Part object. + Wybierz stronę. - No page to insert - Brak strony do wstawienia. + + + + + No page to insert + Brak strony do wstawienia. - Create a page to insert. - Utwórz stronę do wstawienia. + + + + Create a page to insert. + Utwórz stronę do wstawienia. - Select one Page object. - Wybierz jedną Stronę + + Create a page to insert views into. + - SVG(*.svg) - SVG (*. svg) + + + Select one Page object. + Wybierz jedną Stronę - All Files (*.*) - Wszystkie pliki (*.*) + + SVG(*.svg) + SVG (*. svg) - Export page - Wyślij stronę + + All Files (*.*) + Wszystkie pliki (*.*) - - Show drawing - Pokaż rysunek + + Export page + Wyślij stronę - - + + + Show drawing + Pokaż rysunek + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Rysunek + + Drawing + Rysunek - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_pt.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_pt.ts index 709080dae..ede240b9e 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_pt.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_pt.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Desenho + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Desenho + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Arquivo + + File + Arquivo - &Export page... - &Exportar página... + + &Export page... + &Exportar página... - Export a page to an SVG file - Exportar página para um arquivo SVG + + + Export a page to an SVG file + Exportar página para um arquivo SVG - - + + CmdDrawingNewA3Landscape - Drawing - Desenho + + Drawing + Desenho - Insert new A3 landscape drawing - Inserir um novo desenho A3 paisagem + + + Insert new A3 landscape drawing + Inserir um novo desenho A3 paisagem - - + + CmdDrawingNewPage - Drawing - Desenho + + Drawing + Desenho - Insert new drawing - Inserir novo desenho + + + Insert new drawing + Inserir novo desenho - - + + CmdDrawingNewView - Drawing - Desenho + + Drawing + Desenho - Insert view in drawing - Inserir uma vista no desenho + + Insert view in drawing + Inserir uma vista no desenho - Insert a new View of a Part in the active drawing - Inserir uma nova Vista de uma peça no desenho ativo + + Insert a new View of a Part in the active drawing + Inserir uma nova Vista de uma peça no desenho ativo - - + + CmdDrawingOpen - Drawing - Desenho + + Drawing + Desenho - Open SVG... - Abrir SVG... + + Open SVG... + Abrir SVG... - Open a scalable vector graphic - Abrir um gráfico vetorial escalável + + Open a scalable vector graphic + Abrir um gráfico vetorial escalável - - + + + CmdDrawingOpenBrowserView + + + Drawing + Desenho + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Desenho + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Desenho + + Drawing + Desenho - Project shape... - Projetar uma forma... + + Project shape... + Projetar uma forma... - Project shape onto a user-defined plane - Projeta uma forma sobre um plano definido pelo usuário + + + Project shape onto a user-defined plane + Projeta uma forma sobre um plano definido pelo usuário - - + + DrawingGui::DrawingView - - &Background - Plano de &Fundo + + &Background + Plano de &Fundo - &Outline - &Contorno + + &Outline + &Contorno - &Native - &Nativo + + &Native + &Nativo - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Imagem + + &Image + &Imagem - &High Quality Antialiasing - Antialiasing de alta qualidade + + &High Quality Antialiasing + Antialiasing de alta qualidade - Open SVG File - Abrir arquivo SVG + + Open SVG File + Abrir arquivo SVG - Could not open file '%1'. - Não foi possível abrir o arquivo "%1". + + Could not open file '%1'. + Não foi possível abrir o arquivo "%1". - &Renderer - &Renderizador + + &Renderer + &Renderizador - Export PDF - Exportar PDF + + Export PDF + Exportar PDF - PDF file (*.pdf) - Arquivo PDF (*.pdf) + + PDF file (*.pdf) + Arquivo PDF (*.pdf) - Page sizes - Tamanhos de página + + Page sizes + Tamanhos de página - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Bordas afiadas visíveis + + Visible sharp edges + Bordas afiadas visíveis - Visible smooth edges - Bordas alisadas visíveis + + Visible smooth edges + Bordas alisadas visíveis - Visible sewn edges - Bordas costuradas visíveis + + Visible sewn edges + Bordas costuradas visíveis - Visible outline edges - Bordas de contorno visíveis + + Visible outline edges + Bordas de contorno visíveis - Visible isoparameters - Isoparâmetros visíveis + + Visible isoparameters + Isoparâmetros visíveis - Hidden sharp edges - Bordas afiadas escondidas + + Hidden sharp edges + Bordas afiadas escondidas - Hidden smooth edges - Bordas alisadas escondidas + + Hidden smooth edges + Bordas alisadas escondidas - Hidden sewn edges - Bordas costuradas escondidas + + Hidden sewn edges + Bordas costuradas escondidas - Hidden outline edges - Bordas de contorno escondidas + + Hidden outline edges + Bordas de contorno escondidas - Hidden isoparameters - Isoparâmetros escondidos + + Hidden isoparameters + Isoparâmetros escondidos - Project shapes - Projetar formas + + Project shapes + Projetar formas - - + + Drawing_NewPage - - A0 landscape - A0 paisagem + A0 landscape + A0 paisagem - Insert new A0 landscape drawing - Inserir uma nova página A0 paisagem + Insert new A0 landscape drawing + Inserir uma nova página A0 paisagem - A1 landscape - A1 paisagem + A1 landscape + A1 paisagem - Insert new A1 landscape drawing - Inserir uma nova página A1 paisagem + Insert new A1 landscape drawing + Inserir uma nova página A1 paisagem - A2 landscape - A2 paisagem + A2 landscape + A2 paisagem - Insert new A2 landscape drawing - Inserir uma nova página A2 paisagem + Insert new A2 landscape drawing + Inserir uma nova página A2 paisagem - A3 landscape - A3 paisagem + A3 landscape + A3 paisagem - Insert new A3 landscape drawing - Inserir um novo desenho A3 paisagem + Insert new A3 landscape drawing + Inserir um novo desenho A3 paisagem - A4 landscape - A4 paisagem + A4 landscape + A4 paisagem - Insert new A4 landscape drawing - Inserir uma nova página A4 paisagem + Insert new A4 landscape drawing + Inserir uma nova página A4 paisagem - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Escolha um arquivo SVG para abrir + + Choose an SVG file to open + Escolha um arquivo SVG para abrir - - Drawing viewer - Visualizador de desenho + + + + Drawing viewer + Visualizador de desenho - - Scalable Vector Graphics (*.svg *.svgz) - Scalable Vector Graphics (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Scalable Vector Graphics (*.svg *.svgz) - Wrong selection - Seleção errada + + + + + Wrong selection + Seleção errada - Select a Part object. - Selecione um objeto Part. + + + Select a Part object. + Selecione um objeto Part. - No page to insert - Nenhuma página para inserir + + + + + No page to insert + Nenhuma página para inserir - Create a page to insert. - Criar uma página para inserir. + + + + Create a page to insert. + Criar uma página para inserir. - Select one Page object. - Selecione um objeto de tipo Página. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Selecione um objeto de tipo Página. - All Files (*.*) - Todos os arquivos (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Exportar uma página + + All Files (*.*) + Todos os arquivos (*.*) - - Show drawing - Mostrar o desenho + + Export page + Exportar uma página - - + + + Show drawing + Mostrar o desenho + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Desenho + + Drawing + Desenho - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_ru.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_ru.ts index ab2a25b40..7ad0e5760 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_ru.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_ru.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Чертеж + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Чертеж + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Файл + + File + Файл - &Export page... - Экспортировать страницу... + + &Export page... + Экспортировать страницу... - Export a page to an SVG file - Экспорт страницу в файл SVG + + + Export a page to an SVG file + Экспорт страницу в файл SVG - - + + CmdDrawingNewA3Landscape - Drawing - Чертеж + + Drawing + Чертеж - Insert new A3 landscape drawing - Вставить новый фоновый чертеж А3 + + + Insert new A3 landscape drawing + Вставить новый фоновый чертеж А3 - - + + CmdDrawingNewPage - Drawing - Чертеж + + Drawing + Чертеж - Insert new drawing - Вставить новый чертеж + + + Insert new drawing + Вставить новый чертеж - - + + CmdDrawingNewView - Drawing - Чертеж + + Drawing + Чертеж - Insert view in drawing - Вставить вид в чертеж + + Insert view in drawing + Вставить вид в чертеж - Insert a new View of a Part in the active drawing - Вставить новый вид детали в текущий чертеж + + Insert a new View of a Part in the active drawing + Вставить новый вид детали в текущий чертеж - - + + CmdDrawingOpen - Drawing - Чертеж + + Drawing + Чертеж - Open SVG... - Открыть SVG... + + Open SVG... + Открыть SVG... - Open a scalable vector graphic - Открыть масштабируемую векторную графику + + Open a scalable vector graphic + Открыть масштабируемую векторную графику - - + + + CmdDrawingOpenBrowserView + + + Drawing + Чертеж + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Чертеж + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Чертеж + + Drawing + Чертеж - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Фон + + &Background + &Фон - &Outline - &Контур + + &Outline + &Контур - &Native - &Собственный + + &Native + &Собственный - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Изображение + + &Image + &Изображение - &High Quality Antialiasing - &Высокое качество сглаживания + + &High Quality Antialiasing + &Высокое качество сглаживания - Open SVG File - Открыть файл SVG + + Open SVG File + Открыть файл SVG - Could not open file '%1'. - Не удалось открыть файл '% 1'. + + Could not open file '%1'. + Не удалось открыть файл '% 1'. - &Renderer - Рендерер + + &Renderer + Рендерер - Export PDF - Экспорт в PDF + + Export PDF + Экспорт в PDF - PDF file (*.pdf) - PDF-файл (*. PDF) + + PDF file (*.pdf) + PDF-файл (*. PDF) - Page sizes - Размеры страницы + + Page sizes + Размеры страницы - A0 - А0 + + A0 + А0 - A1 - А1 + + A1 + А1 - A2 - А2 + + A2 + А2 - A3 - А3 + + A3 + А3 - A4 - А4 + + A4 + А4 - A5 - А5 + + A5 + А5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - А0 альбомный + A0 landscape + А0 альбомный - Insert new A0 landscape drawing - Вставить новый альбомный чертеж А0 + Insert new A0 landscape drawing + Вставить новый альбомный чертеж А0 - A1 landscape - А1 альбомный + A1 landscape + А1 альбомный - Insert new A1 landscape drawing - Вставить новый альбомный чертеж А1 + Insert new A1 landscape drawing + Вставить новый альбомный чертеж А1 - A2 landscape - А2 альбомный + A2 landscape + А2 альбомный - Insert new A2 landscape drawing - Вставить новый альбомный чертеж А2 + Insert new A2 landscape drawing + Вставить новый альбомный чертеж А2 - A3 landscape - А3 альбомный + A3 landscape + А3 альбомный - Insert new A3 landscape drawing - Вставить новый фоновый чертеж А3 + Insert new A3 landscape drawing + Вставить новый фоновый чертеж А3 - A4 landscape - А4 альбомный + A4 landscape + А4 альбомный - Insert new A4 landscape drawing - Вставить новый альбомный чертеж А4 + Insert new A4 landscape drawing + Вставить новый альбомный чертеж А4 - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Выберите SVG-файл для открытия + + Choose an SVG file to open + Выберите SVG-файл для открытия - - Drawing viewer - Вид чертежа + + + + Drawing viewer + Вид чертежа - - Scalable Vector Graphics (*.svg *.svgz) - Масштабируемая векторная графика (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Масштабируемая векторная графика (*.svg *.svgz) - Wrong selection - Неправильный выбор + + + + + Wrong selection + Неправильный выбор - Select a Part object. - Выберите часть объекта. + + + Select a Part object. + Выберите часть объекта. - No page to insert - Нет страницы для вставки + + + + + No page to insert + Нет страницы для вставки - Create a page to insert. - Создать страницу для вставки. + + + + Create a page to insert. + Создать страницу для вставки. - Select one Page object. - Выберите одну страницу объекта. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Выберите одну страницу объекта. - All Files (*.*) - Все файлы (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Экспортировать страницу + + All Files (*.*) + Все файлы (*.*) - - Show drawing - Показать чертеж + + Export page + Экспортировать страницу - - + + + Show drawing + Показать чертеж + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Чертеж + + Drawing + Чертеж - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_se.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_se.ts index 58d982c90..0e21fcbe3 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_se.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_se.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Ritning + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Ritning + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Fil + + File + Fil - &Export page... - &Exportera sida... + + &Export page... + &Exportera sida... - Export a page to an SVG file - Exportera en sida till en SVG-fil + + + Export a page to an SVG file + Exportera en sida till en SVG-fil - - + + CmdDrawingNewA3Landscape - Drawing - Ritning + + Drawing + Ritning - Insert new A3 landscape drawing - Infoga ny A3 landskap ritning + + + Insert new A3 landscape drawing + Infoga ny A3 landskap ritning - - + + CmdDrawingNewPage - Drawing - Ritning + + Drawing + Ritning - Insert new drawing - Sätt in ny ritning + + + Insert new drawing + Sätt in ny ritning - - + + CmdDrawingNewView - Drawing - Ritning + + Drawing + Ritning - Insert view in drawing - Infoga vy i ritningen + + Insert view in drawing + Infoga vy i ritningen - Insert a new View of a Part in the active drawing - Sätt in en ny vy av en Del i den aktiva ritningen + + Insert a new View of a Part in the active drawing + Sätt in en ny vy av en Del i den aktiva ritningen - - + + CmdDrawingOpen - Drawing - Ritning + + Drawing + Ritning - Open SVG... - Öppna SVG... + + Open SVG... + Öppna SVG... - Open a scalable vector graphic - Öppna en skalbar vektorgrafik + + Open a scalable vector graphic + Öppna en skalbar vektorgrafik - - + + + CmdDrawingOpenBrowserView + + + Drawing + Ritning + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Ritning + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Ritning + + Drawing + Ritning - Project shape... - Projekt former... + + Project shape... + Projekt former... - Project shape onto a user-defined plane - Projicera form på ett användardefinierat plan + + + Project shape onto a user-defined plane + Projicera form på ett användardefinierat plan - - + + DrawingGui::DrawingView - - &Background - B&akgrund + + &Background + B&akgrund - &Outline - &Kontur + + &Outline + &Kontur - &Native - &Nativ + + &Native + &Nativ - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Bild + + &Image + &Bild - &High Quality Antialiasing - &Högkvalitets kantutjämning + + &High Quality Antialiasing + &Högkvalitets kantutjämning - Open SVG File - Öppna SVG-fil + + Open SVG File + Öppna SVG-fil - Could not open file '%1'. - Det gick inte att öppna fil '%1'. + + Could not open file '%1'. + Det gick inte att öppna fil '%1'. - &Renderer - &Renderare + + &Renderer + &Renderare - Export PDF - Exportera PDF + + Export PDF + Exportera PDF - PDF file (*.pdf) - PDF-fil (*.pdf) + + PDF file (*.pdf) + PDF-fil (*.pdf) - Page sizes - Sidstorlekar + + Page sizes + Sidstorlekar - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Synliga vassa kanter + + Visible sharp edges + Synliga vassa kanter - Visible smooth edges - Synliga jämna kanter + + Visible smooth edges + Synliga jämna kanter - Visible sewn edges - Synliga sydda kanter + + Visible sewn edges + Synliga sydda kanter - Visible outline edges - Synliga kontur kanter + + Visible outline edges + Synliga kontur kanter - Visible isoparameters - Synliga isoparametrar + + Visible isoparameters + Synliga isoparametrar - Hidden sharp edges - Dolda vassa kanter + + Hidden sharp edges + Dolda vassa kanter - Hidden smooth edges - Dolda jämna kanter + + Hidden smooth edges + Dolda jämna kanter - Hidden sewn edges - Dolda sydda kanter + + Hidden sewn edges + Dolda sydda kanter - Hidden outline edges - Dolda kontur kanter + + Hidden outline edges + Dolda kontur kanter - Hidden isoparameters - Dolda isoparametrar + + Hidden isoparameters + Dolda isoparametrar - Project shapes - Projekt former + + Project shapes + Projekt former - - + + Drawing_NewPage - - A0 landscape - Liggande A0 + A0 landscape + Liggande A0 - Insert new A0 landscape drawing - Infoga ny liggande A0 ritning + Insert new A0 landscape drawing + Infoga ny liggande A0 ritning - A1 landscape - Liggande A1 + A1 landscape + Liggande A1 - Insert new A1 landscape drawing - Infoga ny liggande A1 ritning + Insert new A1 landscape drawing + Infoga ny liggande A1 ritning - A2 landscape - Liggande A2 + A2 landscape + Liggande A2 - Insert new A2 landscape drawing - Infoga ny liggande A2 ritning + Insert new A2 landscape drawing + Infoga ny liggande A2 ritning - A3 landscape - Liggande A3 + A3 landscape + Liggande A3 - Insert new A3 landscape drawing - Infoga ny A3 landskap ritning + Insert new A3 landscape drawing + Infoga ny A3 landskap ritning - A4 landscape - Liggande A4 + A4 landscape + Liggande A4 - Insert new A4 landscape drawing - Infoga ny liggande A4 ritning + Insert new A4 landscape drawing + Infoga ny liggande A4 ritning - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Välj en SVG fil att öppna + + Choose an SVG file to open + Välj en SVG fil att öppna - - Drawing viewer - Ritningsvisare + + + + Drawing viewer + Ritningsvisare - - Scalable Vector Graphics (*.svg *.svgz) - Skalbar vektorgrafik (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Skalbar vektorgrafik (*.svg *.svgz) - Wrong selection - Fel val + + + + + Wrong selection + Fel val - Select a Part object. - Välj ett Del objekt. + + + Select a Part object. + Välj ett Del objekt. - No page to insert - Ingen sida att infoga + + + + + No page to insert + Ingen sida att infoga - Create a page to insert. - Skapa en sida att infoga. + + + + Create a page to insert. + Skapa en sida att infoga. - Select one Page object. - Välj ett sidobjekt. + + Create a page to insert views into. + - SVG(*.svg) - SVG (*.svg) + + + Select one Page object. + Välj ett sidobjekt. - All Files (*.*) - Alla filer (*.*) + + SVG(*.svg) + SVG (*.svg) - Export page - Exportera sida + + All Files (*.*) + Alla filer (*.*) - - Show drawing - Visa ritning + + Export page + Exportera sida - - + + + Show drawing + Visa ritning + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Ritning + + Drawing + Ritning - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_uk.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_uk.ts index b0feccd3d..28b9d87cf 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_uk.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_uk.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + Креслення + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + Креслення + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - Файл + + File + Файл - &Export page... - &Експорт сторінки... + + &Export page... + &Експорт сторінки... - Export a page to an SVG file - Експорт сторінки в SVG файл + + + Export a page to an SVG file + Експорт сторінки в SVG файл - - + + CmdDrawingNewA3Landscape - Drawing - Креслення + + Drawing + Креслення - Insert new A3 landscape drawing - Вставить нове фонове креслення А3 + + + Insert new A3 landscape drawing + Вставить нове фонове креслення А3 - - + + CmdDrawingNewPage - Drawing - Креслення + + Drawing + Креслення - Insert new drawing - Insert new drawing + + + Insert new drawing + Insert new drawing - - + + CmdDrawingNewView - Drawing - Креслення + + Drawing + Креслення - Insert view in drawing - Додати вигляд в креслення + + Insert view in drawing + Додати вигляд в креслення - Insert a new View of a Part in the active drawing - Вставить новий вигляд деталі в поточне креслення + + Insert a new View of a Part in the active drawing + Вставить новий вигляд деталі в поточне креслення - - + + CmdDrawingOpen - Drawing - Креслення + + Drawing + Креслення - Open SVG... - Відкрити SVG ... + + Open SVG... + Відкрити SVG ... - Open a scalable vector graphic - Відкрити масштабовану векторну графіку (SVG) + + Open a scalable vector graphic + Відкрити масштабовану векторну графіку (SVG) - - + + + CmdDrawingOpenBrowserView + + + Drawing + Креслення + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + Креслення + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - Креслення + + Drawing + Креслення - Project shape... - Project shape... + + Project shape... + Project shape... - Project shape onto a user-defined plane - Project shape onto a user-defined plane + + + Project shape onto a user-defined plane + Project shape onto a user-defined plane - - + + DrawingGui::DrawingView - - &Background - &Фон + + &Background + &Фон - &Outline - &Контур + + &Outline + &Контур - &Native - &Рідне + + &Native + &Рідне - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - &Зображення + + &Image + &Зображення - &High Quality Antialiasing - &Висока якість згладжування + + &High Quality Antialiasing + &Висока якість згладжування - Open SVG File - Відкрити SVG файл + + Open SVG File + Відкрити SVG файл - Could not open file '%1'. - Не вдається відкрити файл '%1'. + + Could not open file '%1'. + Не вдається відкрити файл '%1'. - &Renderer - &Промалювувач + + &Renderer + &Промалювувач - Export PDF - Експорт в PDF + + Export PDF + Експорт в PDF - PDF file (*.pdf) - PDF файл (*.pdf) + + PDF file (*.pdf) + PDF файл (*.pdf) - Page sizes - Page sizes + + Page sizes + Page sizes - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - Visible sharp edges + + Visible sharp edges + Visible sharp edges - Visible smooth edges - Visible smooth edges + + Visible smooth edges + Visible smooth edges - Visible sewn edges - Visible sewn edges + + Visible sewn edges + Visible sewn edges - Visible outline edges - Visible outline edges + + Visible outline edges + Visible outline edges - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - Hidden sharp edges + + Hidden sharp edges + Hidden sharp edges - Hidden smooth edges - Hidden smooth edges + + Hidden smooth edges + Hidden smooth edges - Hidden sewn edges - Hidden sewn edges + + Hidden sewn edges + Hidden sewn edges - Hidden outline edges - Hidden outline edges + + Hidden outline edges + Hidden outline edges - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - Project shapes + + Project shapes + Project shapes - - + + Drawing_NewPage - - A0 landscape - A0 landscape + A0 landscape + A0 landscape - Insert new A0 landscape drawing - Insert new A0 landscape drawing + Insert new A0 landscape drawing + Insert new A0 landscape drawing - A1 landscape - A1 landscape + A1 landscape + A1 landscape - Insert new A1 landscape drawing - Insert new A1 landscape drawing + Insert new A1 landscape drawing + Insert new A1 landscape drawing - A2 landscape - A2 landscape + A2 landscape + A2 landscape - Insert new A2 landscape drawing - Insert new A2 landscape drawing + Insert new A2 landscape drawing + Insert new A2 landscape drawing - A3 landscape - A3 landscape + A3 landscape + A3 landscape - Insert new A3 landscape drawing - Вставить нове фонове креслення А3 + Insert new A3 landscape drawing + Вставить нове фонове креслення А3 - A4 landscape - A4 landscape + A4 landscape + A4 landscape - Insert new A4 landscape drawing - Insert new A4 landscape drawing + Insert new A4 landscape drawing + Insert new A4 landscape drawing - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - Виберіть файл SVG для відкриття + + Choose an SVG file to open + Виберіть файл SVG для відкриття - - Drawing viewer - Переглядач креслення + + + + Drawing viewer + Переглядач креслення - - Scalable Vector Graphics (*.svg *.svgz) - Масштабована векторна графіка (*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + Масштабована векторна графіка (*.svg *.svgz) - Wrong selection - Невірний вибір + + + + + Wrong selection + Невірний вибір - Select a Part object. - Виберіть об'єкт деталі. + + + Select a Part object. + Виберіть об'єкт деталі. - No page to insert - Немає сторінки для вставки + + + + + No page to insert + Немає сторінки для вставки - Create a page to insert. - Створити сторінку для вставки. + + + + Create a page to insert. + Створити сторінку для вставки. - Select one Page object. - Оберіть один об'єкт сторінки. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + Оберіть один об'єкт сторінки. - All Files (*.*) - Всі файли (*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - Експорт сторінки + + All Files (*.*) + Всі файли (*.*) - - Show drawing - Show drawing + + Export page + Експорт сторінки - - + + + Show drawing + Show drawing + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - Креслення + + Drawing + Креслення - + diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_zh.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_zh.ts index 71e07e9cb..d16a45603 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_zh.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_zh.ts @@ -1,317 +1,636 @@ - - + + + CmdDrawingAnnotation + + + Drawing + 图纸 + + + + &Annotation + + + + + + Inserts an Annotation view in the active drawing + + + + + CmdDrawingClip + + + Drawing + 图纸 + + + + &Clip + + + + + + Inserts a clip group in the active drawing + + + + CmdDrawingExportPage - - File - 文件 + + File + 文件 - &Export page... - 导出页(&E)... + + &Export page... + 导出页(&E)... - Export a page to an SVG file - 将页面导出为SVG文件 + + + Export a page to an SVG file + 将页面导出为SVG文件 - - + + CmdDrawingNewA3Landscape - Drawing - 图纸 + + Drawing + 图纸 - Insert new A3 landscape drawing - 插入A3横向图框 + + + Insert new A3 landscape drawing + 插入A3横向图框 - - + + CmdDrawingNewPage - Drawing - 图纸 + + Drawing + 图纸 - Insert new drawing - 插入新图纸 + + + Insert new drawing + 插入新图纸 - - + + CmdDrawingNewView - Drawing - 图纸 + + Drawing + 图纸 - Insert view in drawing - 在图纸中插入视图 + + Insert view in drawing + 在图纸中插入视图 - Insert a new View of a Part in the active drawing - 在当前图纸中插入一个零件视图 + + Insert a new View of a Part in the active drawing + 在当前图纸中插入一个零件视图 - - + + CmdDrawingOpen - Drawing - 图纸 + + Drawing + 图纸 - Open SVG... - 打开SVG... + + Open SVG... + 打开SVG... - Open a scalable vector graphic - 打开一个可缩放的矢量图形 + + Open a scalable vector graphic + 打开一个可缩放的矢量图形 - - + + + CmdDrawingOpenBrowserView + + + Drawing + 图纸 + + + + Open &browser view + + + + + + Opens the selected page in a browser view + + + + + CmdDrawingOrthoViews + + + Drawing + 图纸 + + + + Insert orthographic views + + + + + Insert an orthographic projection of a part in the active drawing + + + + CmdDrawingProjectShape - Drawing - 图纸 + + Drawing + 图纸 - Project shape... - 投影形体... + + Project shape... + 投影形体... - Project shape onto a user-defined plane - 投影形体至用户定义平面 + + + Project shape onto a user-defined plane + 投影形体至用户定义平面 - - + + DrawingGui::DrawingView - - &Background - 背景(&B) + + &Background + 背景(&B) - &Outline - 轮廓(&O) + + &Outline + 轮廓(&O) - &Native - 本地(&N) + + &Native + 本地(&N) - &OpenGL - &OpenGL + + &OpenGL + &OpenGL - &Image - 图片(&I) + + &Image + 图片(&I) - &High Quality Antialiasing - 高品质抗锯齿(&H) + + &High Quality Antialiasing + 高品质抗锯齿(&H) - Open SVG File - 打开SVG文件 + + Open SVG File + 打开SVG文件 - Could not open file '%1'. - 无法打开文件'%1'. + + Could not open file '%1'. + 无法打开文件'%1'. - &Renderer - 渲染器(&R) + + &Renderer + 渲染器(&R) - Export PDF - 导出PDF + + Export PDF + 导出PDF - PDF file (*.pdf) - PDF文件(*.pdf) + + PDF file (*.pdf) + PDF文件(*.pdf) - Page sizes - 页面大小 + + Page sizes + 页面大小 - A0 - A0 + + A0 + A0 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - - + + + DrawingGui::TaskOrthoViews + + + Orthographic Projection + + + + + Projection + + + + + Third Angle + + + + + First Angle + + + + + Primary View + + + + + Front + + + + + Right + + + + + Back + + + + + Left + + + + + Top + + + + + Bottom + + + + + - Rotate + + + + + 0 + + + + + 90 + + + + + 180 + + + + + 270 + + + + + Primary view + + + + + Secondary Views + + + + + General + + + + + Auto scale / position + + + + + Scale + + + + + Primary x / y + + + + + Secondary dx / dy + + + + + Show hidden + + + + + Show smooth + + + + + Axonometric + + + + DrawingGui::TaskProjection - - Visible sharp edges - 锐化边缘可见 + + Visible sharp edges + 锐化边缘可见 - Visible smooth edges - 平滑边缘可见 + + Visible smooth edges + 平滑边缘可见 - Visible sewn edges - 镶贴边缘可见 + + Visible sewn edges + 镶贴边缘可见 - Visible outline edges - 轮廓边缘可见 + + Visible outline edges + 轮廓边缘可见 - Visible isoparameters - Visible isoparameters + + Visible isoparameters + Visible isoparameters - Hidden sharp edges - 锐化边缘隐藏 + + Hidden sharp edges + 锐化边缘隐藏 - Hidden smooth edges - 平滑边缘隐藏 + + Hidden smooth edges + 平滑边缘隐藏 - Hidden sewn edges - 镶贴边缘隐藏 + + Hidden sewn edges + 镶贴边缘隐藏 - Hidden outline edges - 轮廓边缘隐藏 + + Hidden outline edges + 轮廓边缘隐藏 - Hidden isoparameters - Hidden isoparameters + + Hidden isoparameters + Hidden isoparameters - Project shapes - 投影形体 + + Project shapes + 投影形体 - - + + Drawing_NewPage - - A0 landscape - A0横向 + A0 landscape + A0横向 - Insert new A0 landscape drawing - 插入A0横向图纸 + Insert new A0 landscape drawing + 插入A0横向图纸 - A1 landscape - A1横向 + A1 landscape + A1横向 - Insert new A1 landscape drawing - 插入A1横向图纸 + Insert new A1 landscape drawing + 插入A1横向图纸 - A2 landscape - A2横向 + A2 landscape + A2横向 - Insert new A2 landscape drawing - 插入A2横向图纸 + Insert new A2 landscape drawing + 插入A2横向图纸 - A3 landscape - A3横向 + A3 landscape + A3横向 - Insert new A3 landscape drawing - 插入A3横向图框 + Insert new A3 landscape drawing + 插入A3横向图框 - A4 landscape - A4横向 + A4 landscape + A4横向 - Insert new A4 landscape drawing - 插入A4横向图纸 + Insert new A4 landscape drawing + 插入A4横向图纸 - - + + + A%1 landscape + + + + + Insert new A%1 landscape drawing + + + + QObject - Choose an SVG file to open - 选择一个SVG文件打开 + + Choose an SVG file to open + 选择一个SVG文件打开 - - Drawing viewer - 图纸浏览器 + + + + Drawing viewer + 图纸浏览器 - - Scalable Vector Graphics (*.svg *.svgz) - 可缩放矢量图形(*.svg *.svgz) + + Scalable Vector Graphics (*.svg *.svgz) + 可缩放矢量图形(*.svg *.svgz) - Wrong selection - 选择错误 + + + + + Wrong selection + 选择错误 - Select a Part object. - 选择零件对象. + + + Select a Part object. + 选择零件对象. - No page to insert - 无页面可插入 + + + + + No page to insert + 无页面可插入 - Create a page to insert. - 创建一个插入页面. + + + + Create a page to insert. + 创建一个插入页面. - Select one Page object. - 选择一个页对象. + + Create a page to insert views into. + - SVG(*.svg) - SVG(*.svg) + + + Select one Page object. + 选择一个页对象. - All Files (*.*) - 所有文件(*.*) + + SVG(*.svg) + SVG(*.svg) - Export page - 导出页面 + + All Files (*.*) + 所有文件(*.*) - - Show drawing - 显示绘图 + + Export page + 导出页面 - - + + + Show drawing + 显示绘图 + + + + Front + + + + + Back + + + + + Right + + + + + Left + + + + + Top + + + + + Bottom + + + + Workbench - - Drawing - 图纸 + + Drawing + 图纸 - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_af.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_af.ts index 52519425d..b5cf2fda2 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_af.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_af.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Skep FEM-maas + + Create FEM mesh + Skep FEM-maas - Create FEM mesh from shape - Skep FEM-maas van vorm + + Create FEM mesh from shape + Skep FEM-maas van vorm - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_de.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_de.ts index d3cd2eb66..22b87d550 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_de.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_de.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - FEM-Netz erzeugen + + Create FEM mesh + FEM-Netz erzeugen - Create FEM mesh from shape - FEM-Netz aus Form erstellen + + Create FEM mesh from shape + FEM-Netz aus Form erstellen - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_es.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_es.ts index 7c4219889..25e12428e 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_es.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_es.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Crear malla FEM + + Create FEM mesh + Crear malla FEM - Create FEM mesh from shape - Crear malla FEM de forma + + Create FEM mesh from shape + Crear malla FEM de forma - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_fi.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_fi.ts index 7a2221464..d7730b27a 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_fi.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_fi.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Create FEM mesh + + Create FEM mesh + Create FEM mesh - Create FEM mesh from shape - Create FEM mesh from shape + + Create FEM mesh from shape + Create FEM mesh from shape - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_fr.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_fr.ts index b9e5ae81d..8db45e567 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_fr.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_fr.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Créer un maillage FEM + + Create FEM mesh + Créer un maillage FEM - Create FEM mesh from shape - Créer un maillage FEM à partir d'une forme + + Create FEM mesh from shape + Créer un maillage FEM à partir d'une forme - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_hr.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_hr.ts index 18b8d1672..4e3d1827f 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_hr.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_hr.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Metoda konačnih elemenata + + Fem + Metoda konačnih elemenata - Create FEM mesh - Napravi MKE mrežu + + Create FEM mesh + Napravi MKE mrežu - Create FEM mesh from shape - Napravite MKE mrežu od oblika + + Create FEM mesh from shape + Napravite MKE mrežu od oblika - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - MKE + + FEM + MKE - &FEM - &MKE + + &FEM + &MKE - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_hu.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_hu.ts index c71712b5d..c5138dd48 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_hu.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_hu.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Végeselemes analízis FEM + + Fem + Végeselemes analízis FEM - Create FEM mesh - Végeselemes analízis (FEM) háló létrehozása + + Create FEM mesh + Végeselemes analízis (FEM) háló létrehozása - Create FEM mesh from shape - Végeselemes analízis háló létrehozása az alakzaton + + Create FEM mesh from shape + Végeselemes analízis háló létrehozása az alakzaton - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM Végeselemes analízis + + &FEM + &FEM Végeselemes analízis - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_it.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_it.ts index ff8c9f788..b33a186e3 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_it.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_it.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Crea una mesh FEM + + Create FEM mesh + Crea una mesh FEM - Create FEM mesh from shape - Crea una mesh FEM da una forma + + Create FEM mesh from shape + Crea una mesh FEM da una forma - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_ja.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_ja.ts index eda0cc3c2..0948ed668 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_ja.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_ja.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - 有限要素法 + + Fem + 有限要素法 - Create FEM mesh - 有限要素メッシュを作成します。 + + Create FEM mesh + 有限要素メッシュを作成します。 - Create FEM mesh from shape - 形状から有限要素メッシュを作成する + + Create FEM mesh from shape + 形状から有限要素メッシュを作成する - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - 有限要素法 + + FEM + 有限要素法 - &FEM - FEM(&F) + + &FEM + FEM(&F) - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_nl.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_nl.ts index 1b26769b0..201b04fed 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_nl.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_nl.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - EEM + + Fem + EEM - Create FEM mesh - Creëer een EEM-net + + Create FEM mesh + Creëer een EEM-net - Create FEM mesh from shape - Creëer een EEM-net van een vorm + + Create FEM mesh from shape + Creëer een EEM-net van een vorm - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - EEM + + FEM + EEM - &FEM - &EEM + + &FEM + &EEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_no.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_no.ts index 99cd22568..670e59f91 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_no.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_no.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Lag FEM-nett + + Create FEM mesh + Lag FEM-nett - Create FEM mesh from shape - Lag FEM-nett av figuren + + Create FEM mesh from shape + Lag FEM-nett av figuren - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_pl.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_pl.ts index da9e98ebc..ffa8f6d19 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_pl.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_pl.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Mes + + Fem + Mes - Create FEM mesh - Tworzenie siatki MES + + Create FEM mesh + Tworzenie siatki MES - Create FEM mesh from shape - Tworzenie siatki MES z kształtu + + Create FEM mesh from shape + Tworzenie siatki MES z kształtu - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - MES + + FEM + MES - &FEM - &MES + + &FEM + &MES - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_pt.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_pt.ts index a96bfd185..8ce02bed5 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_pt.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_pt.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Criar malha FEM + + Create FEM mesh + Criar malha FEM - Create FEM mesh from shape - Criar malha FEM mesh a partir de uma forma + + Create FEM mesh from shape + Criar malha FEM mesh a partir de uma forma - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_ru.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_ru.ts index 62309f4e4..f587c3931 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_ru.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_ru.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - МКЭ (метод конечных элементов) + + Fem + МКЭ (метод конечных элементов) - Create FEM mesh - Создать МКЭ сетку + + Create FEM mesh + Создать МКЭ сетку - Create FEM mesh from shape - Создать МКЭ сетку из формы + + Create FEM mesh from shape + Создать МКЭ сетку из формы - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - МКЭ + + FEM + МКЭ - &FEM - &МКЭ + + &FEM + &МКЭ - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_se.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_se.ts index c0d64eee8..19c6a0716 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_se.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_se.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - Fem + + Fem + Fem - Create FEM mesh - Skapa FEM nät + + Create FEM mesh + Skapa FEM nät - Create FEM mesh from shape - Skapa FEM nät från form + + Create FEM mesh from shape + Skapa FEM nät från form - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - FEM + + FEM + FEM - &FEM - &FEM + + &FEM + &FEM - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_uk.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_uk.ts index 006322e9e..780aed9e1 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_uk.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_uk.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - МСЕ (Метод скінченних елементів) + + Fem + МСЕ (Метод скінченних елементів) - Create FEM mesh - Створити МСЕ сітку + + Create FEM mesh + Створити МСЕ сітку - Create FEM mesh from shape - Створити МСЕ сітку з форми + + Create FEM mesh from shape + Створити МСЕ сітку з форми - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - МСЕ + + FEM + МСЕ - &FEM - &МСЕ + + &FEM + &МСЕ - + diff --git a/src/Mod/Fem/Gui/Resources/translations/Fem_zh.ts b/src/Mod/Fem/Gui/Resources/translations/Fem_zh.ts index 6b77b2409..998a05837 100644 --- a/src/Mod/Fem/Gui/Resources/translations/Fem_zh.ts +++ b/src/Mod/Fem/Gui/Resources/translations/Fem_zh.ts @@ -1,32 +1,63 @@ - - + + CmdFemCreateFromShape - - Fem - 有限元 + + Fem + 有限元 - Create FEM mesh - 创建有限元网格 + + Create FEM mesh + 创建有限元网格 - Create FEM mesh from shape - 从形体创建有限元网格 + + Create FEM mesh from shape + 从形体创建有限元网格 - - + + + FemGui::HypothesisWidget + + + Hypothesis + + + + + Quadrangle + + + + + Maximum length + + + + + Local length + + + + + Maximum element area + + + + Workbench - - FEM - 有限元 + + FEM + 有限元 - &FEM - 有限元(&F) + + &FEM + 有限元(&F) - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_af.ts b/src/Mod/Image/Gui/Resources/translations/Image_af.ts index 18f5dd7c5..d37cd1376 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_af.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_af.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Beeld + + Image + Beeld - Create image plane... - Skep beeldvlak... + + Create image plane... + Skep beeldvlak... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - skep 'n 2D-beeld in die 3D-ruimte + create a planar image in the 3D space + skep 'n 2D-beeld in die 3D-ruimte - - + + CmdImageOpen - Image - Beeld + + Image + Beeld - Open... - Maak oop... + + Open... + Maak oop... - Open image view - Maak beeldaansig oop + + Open image view + Maak beeldaansig oop - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Ongedefinieerde kleurruimte vir beeldvertoning + + Undefined type of colour space for image viewing + Ongedefinieerde kleurruimte vir beeldvertoning - Image pixel format - Beeldelementformaat + + Image pixel format + Beeldelementformaat - - + + ImageGui::ImageView - - &Fit image - &Pas beeld + + &Fit image + &Pas beeld - Stretch the image to fit the view - Rek die beeld om die aansig te pas + + Stretch the image to fit the view + Rek die beeld om die aansig te pas - &1:1 scale - &1:1 skaal + + &1:1 scale + &1:1 skaal - Display the image at a 1:1 scale - Wys die beeld op 'n 1:1 skaal + + Display the image at a 1:1 scale + Wys die beeld op 'n 1:1 skaal - &Original color - &Oorspronklike kleur + &Original color + &Oorspronklike kleur - Display the image with its original color(s) - Vertoon die beeld met sy oorspronklike kleur(e) + Display the image with its original color(s) + Vertoon die beeld met sy oorspronklike kleur(e) - &Brightened color - &Verhelderde kleur + &Brightened color + &Verhelderde kleur - Display the image with brightened color(s) - Wys die beeld met verhelderde kleur(e) + Display the image with brightened color(s) + Wys die beeld met verhelderde kleur(e) - Standard - Standaard + + Standard + Standaard - Ready... - Gereed... + + Ready... + Gereed... - grey - grys + + grey + grys - zoom - Zoem + + + + + + + + + + + zoom + Zoem - outside image - buite beeld + + + + + + outside image + buite beeld - - + + QObject - Image viewer - Beeldleser + Image viewer + Beeldleser - - Images (*.png *.xpm *.jpg *.bmp) - Beelde (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Beelde (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Kies 'n beeldlêer om oop te maak + + + + Choose an image file to open + Kies 'n beeldlêer om oop te maak - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Probleem om beeld oop te maak + + Error open image + Probleem om beeld oop te maak - Could not load the choosen image - Kon nie die gekose beeld laai nie + + Could not load the choosen image + Kon nie die gekose beeld laai nie - - + + Workbench - - Image - Beeld + + Image + Beeld - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_de.ts b/src/Mod/Image/Gui/Resources/translations/Image_de.ts index 6096e2d92..9ffabd460 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_de.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_de.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Grafik + + Image + Grafik - Create image plane... - Erstellen Sie eine Bildebene... + + Create image plane... + Erstellen Sie eine Bildebene... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - Erstellen Sie eine ebenes Bild im 3D-Raum + create a planar image in the 3D space + Erstellen Sie eine ebenes Bild im 3D-Raum - - + + CmdImageOpen - Image - Grafik + + Image + Grafik - Open... - Öffnen... + + Open... + Öffnen... - Open image view - Öffne Bildansicht + + Open image view + Öffne Bildansicht - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Undefinierter Farbraum-Typ für die Bildbetrachtung + + Undefined type of colour space for image viewing + Undefinierter Farbraum-Typ für die Bildbetrachtung - Image pixel format - Pixelformat des Bildes + + Image pixel format + Pixelformat des Bildes - - + + ImageGui::ImageView - - &Fit image - Bild an&passen + + &Fit image + Bild an&passen - Stretch the image to fit the view - Bild auf die Ansicht ausdehnen + + Stretch the image to fit the view + Bild auf die Ansicht ausdehnen - &1:1 scale - &1:1 Maßstab + + &1:1 scale + &1:1 Maßstab - Display the image at a 1:1 scale - Das Bild im Maßstab 1:1 anzeigen + + Display the image at a 1:1 scale + Das Bild im Maßstab 1:1 anzeigen - &Original color - &Ursprüngliche Farbe + &Original color + &Ursprüngliche Farbe - Display the image with its original color(s) - Das Bild mit seinen ursprünglichen Farbe(n) anzeigen + Display the image with its original color(s) + Das Bild mit seinen ursprünglichen Farbe(n) anzeigen - &Brightened color - &Farbe aufhellen + &Brightened color + &Farbe aufhellen - Display the image with brightened color(s) - Das Bild mit aufgehellten Farben anzeigen + Display the image with brightened color(s) + Das Bild mit aufgehellten Farben anzeigen - Standard - Standard + + Standard + Standard - Ready... - Fertig... + + Ready... + Fertig... - grey - grau + + grey + grau - zoom - Zoom + + + + + + + + + + + zoom + Zoom - outside image - außerhalb Bild + + + + + + outside image + außerhalb Bild - - + + QObject - Image viewer - Bildbetrachter + Image viewer + Bildbetrachter - - Images (*.png *.xpm *.jpg *.bmp) - Bilder (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Bilder (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Wählen Sie ein Bild zum Öffnen aus + + + + Choose an image file to open + Wählen Sie ein Bild zum Öffnen aus - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Fehler beim Öffnen des Bildes + + Error open image + Fehler beim Öffnen des Bildes - Could not load the choosen image - Das gewählte Bild konnte nicht geladen werden + + Could not load the choosen image + Das gewählte Bild konnte nicht geladen werden - - + + Workbench - - Image - Grafik + + Image + Grafik - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_es.ts b/src/Mod/Image/Gui/Resources/translations/Image_es.ts index 5ed46c274..ab350c8a2 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_es.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_es.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Imagen + + Image + Imagen - Create image plane... - Crear plano de imagen... + + Create image plane... + Crear plano de imagen... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - crear una imagen plana en el espacio 3D + create a planar image in the 3D space + crear una imagen plana en el espacio 3D - - + + CmdImageOpen - Image - Imagen + + Image + Imagen - Open... - Abrir... + + Open... + Abrir... - Open image view - Abrir vista de imagen + + Open image view + Abrir vista de imagen - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Tipo de espacio color no definido para la visualización de la imagen + + Undefined type of colour space for image viewing + Tipo de espacio color no definido para la visualización de la imagen - Image pixel format - Formato de pixel de imagen + + Image pixel format + Formato de pixel de imagen - - + + ImageGui::ImageView - - &Fit image - &Ajustar imagen + + &Fit image + &Ajustar imagen - Stretch the image to fit the view - Estirar la imagen para ajustarse a la vista + + Stretch the image to fit the view + Estirar la imagen para ajustarse a la vista - &1:1 scale - &Escala 1:1 + + &1:1 scale + &Escala 1:1 - Display the image at a 1:1 scale - Muestra la imagen a escala 1:1 + + Display the image at a 1:1 scale + Muestra la imagen a escala 1:1 - &Original color - &Color original + &Original color + &Color original - Display the image with its original color(s) - Muestra la imagen con su(s) color(es) original(es) + Display the image with its original color(s) + Muestra la imagen con su(s) color(es) original(es) - &Brightened color - &Color más luminoso + &Brightened color + &Color más luminoso - Display the image with brightened color(s) - Muestra la imagen con color(es) más luminoso(s) + Display the image with brightened color(s) + Muestra la imagen con color(es) más luminoso(s) - Standard - Estándar + + Standard + Estándar - Ready... - Preparado... + + Ready... + Preparado... - grey - Gris + + grey + Gris - zoom - Zoom + + + + + + + + + + + zoom + Zoom - outside image - Imagen exterior + + + + + + outside image + Imagen exterior - - + + QObject - Image viewer - Visor de imagenes + Image viewer + Visor de imagenes - - Images (*.png *.xpm *.jpg *.bmp) - Imagenes (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Imagenes (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Selecciona un archivo de imagen para abrir + + + + Choose an image file to open + Selecciona un archivo de imagen para abrir - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Error al abrir imagen + + Error open image + Error al abrir imagen - Could not load the choosen image - No se pudo cargar la imagen elegida + + Could not load the choosen image + No se pudo cargar la imagen elegida - - + + Workbench - - Image - Imagen + + Image + Imagen - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fi.ts b/src/Mod/Image/Gui/Resources/translations/Image_fi.ts index 37dd76acc..dbe9a1150 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_fi.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_fi.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Kuva + + Image + Kuva - Create image plane... - Create image plane... + + Create image plane... + Create image plane... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - create a planar image in the 3D space + create a planar image in the 3D space + create a planar image in the 3D space - - + + CmdImageOpen - Image - Kuva + + Image + Kuva - Open... - Avaa... + + Open... + Avaa... - Open image view - Avaa kuvan näkymä + + Open image view + Avaa kuvan näkymä - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Määrittämätön tyyppi väriavaruudesta kuvien katseluun + + Undefined type of colour space for image viewing + Määrittämätön tyyppi väriavaruudesta kuvien katseluun - Image pixel format - Image pixel format + + Image pixel format + Image pixel format - - + + ImageGui::ImageView - - &Fit image - &Sovita kuva + + &Fit image + &Sovita kuva - Stretch the image to fit the view - Venytä kuva sopimaan näkymään + + Stretch the image to fit the view + Venytä kuva sopimaan näkymään - &1:1 scale - mittakaavassa &1:1 + + &1:1 scale + mittakaavassa &1:1 - Display the image at a 1:1 scale - Näytä kuva mittakaavassa 1:1 + + Display the image at a 1:1 scale + Näytä kuva mittakaavassa 1:1 - &Original color - &Alkuperäinen väri + &Original color + &Alkuperäinen väri - Display the image with its original color(s) - Näyttää kuvan alkuperäisten värie(n) kanssa + Display the image with its original color(s) + Näyttää kuvan alkuperäisten värie(n) kanssa - &Brightened color - &Brightened color + &Brightened color + &Brightened color - Display the image with brightened color(s) - Display the image with brightened color(s) + Display the image with brightened color(s) + Display the image with brightened color(s) - Standard - Standardi + + Standard + Standardi - Ready... - Valmis... + + Ready... + Valmis... - grey - harmaa + + grey + harmaa - zoom - zoom + + + + + + + + + + + zoom + zoom - outside image - kuvan ulkopuolella + + + + + + outside image + kuvan ulkopuolella - - + + QObject - Image viewer - Kuvakatselin + Image viewer + Kuvakatselin - - Images (*.png *.xpm *.jpg *.bmp) - Kuvat (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Kuvat (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Choose an image file to open + + + + Choose an image file to open + Choose an image file to open - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Error open image + + Error open image + Error open image - Could not load the choosen image - Could not load the choosen image + + Could not load the choosen image + Could not load the choosen image - - + + Workbench - - Image - Kuva + + Image + Kuva - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fr.ts b/src/Mod/Image/Gui/Resources/translations/Image_fr.ts index 54bbd72a2..798a8ca45 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_fr.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_fr.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Image + + Image + Image - Create image plane... - Créer un plan d'image... + + Create image plane... + Créer un plan d'image... - Create a planar image in the 3D space - Créer une image plane dans l'espace 3D + + Create a planar image in the 3D space + Créer une image plane dans l'espace 3D - create a planar image in the 3D space - Créer une image plane dans l'espace 3D + create a planar image in the 3D space + Créer une image plane dans l'espace 3D - - + + CmdImageOpen - Image - Image + + Image + Image - Open... - Ouvrir... + + Open... + Ouvrir... - Open image view - Ouvrir une image + + Open image view + Ouvrir une image - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Type d'espace colorimétrique indéfini + + Undefined type of colour space for image viewing + Type d'espace colorimétrique indéfini - Image pixel format - Format de l'image en pixels + + Image pixel format + Format de l'image en pixels - - + + ImageGui::ImageView - - &Fit image - &Adapter l'image + + &Fit image + &Adapter l'image - Stretch the image to fit the view - Étirer l'image pour l'adapter à la vue + + Stretch the image to fit the view + Étirer l'image pour l'adapter à la vue - &1:1 scale - Échelle &1:1 + + &1:1 scale + Échelle &1:1 - Display the image at a 1:1 scale - Afficher l'image à l'échelle 1:1 + + Display the image at a 1:1 scale + Afficher l'image à l'échelle 1:1 - &Original color - Couleurs d'&origine + &Original color + Couleurs d'&origine - Display the image with its original color(s) - Afficher l'image avec ses couleurs d'origine + Display the image with its original color(s) + Afficher l'image avec ses couleurs d'origine - &Brightened color - Couleurs é&claircies + &Brightened color + Couleurs é&claircies - Display the image with brightened color(s) - Afficher l'image avec des couleurs éclaircies + Display the image with brightened color(s) + Afficher l'image avec des couleurs éclaircies - Standard - Standard + + Standard + Standard - Ready... - Prêt... + + Ready... + Prêt... - grey - gris + + grey + gris - zoom - zoom + + + + + + + + + + + zoom + zoom - outside image - image extérieure + + + + + + outside image + image extérieure - - + + QObject - Image viewer - Visionneuse d'image + Image viewer + Visionneuse d'image - - Images (*.png *.xpm *.jpg *.bmp) - Images (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Images (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Choisir un fichier d'image à ouvrir + + + + Choose an image file to open + Choisir un fichier d'image à ouvrir - Images - Images + + + Images + Images - All files - Tous les fichiers + + + All files + Tous les fichiers - Error open image - Erreur à l'ouverture de l'image + + Error open image + Erreur à l'ouverture de l'image - Could not load the choosen image - Impossible de charger l'image choisie + + Could not load the choosen image + Impossible de charger l'image choisie - - + + Workbench - - Image - Image + + Image + Image - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_hr.ts b/src/Mod/Image/Gui/Resources/translations/Image_hr.ts index d55dce0c3..7d419a9ba 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_hr.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_hr.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Slika + + Image + Slika - Create image plane... - Napravi ravninu slike ... + + Create image plane... + Napravi ravninu slike ... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - stvoriti planarnu sliku u 3D prikazu + create a planar image in the 3D space + stvoriti planarnu sliku u 3D prikazu - - + + CmdImageOpen - Image - Slika + + Image + Slika - Open... - Otvori ... + + Open... + Otvori ... - Open image view - Otvori pogled slike + + Open image view + Otvori pogled slike - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - nedefinirani tip boja za gledanje slika + + Undefined type of colour space for image viewing + nedefinirani tip boja za gledanje slika - Image pixel format - format slike u pixelima + + Image pixel format + format slike u pixelima - - + + ImageGui::ImageView - - &Fit image - Prilagodi sliku + + &Fit image + Prilagodi sliku - Stretch the image to fit the view - rastegni sliku da odgovara prikazu + + Stretch the image to fit the view + rastegni sliku da odgovara prikazu - &1:1 scale - u mjerilu 1:1 + + &1:1 scale + u mjerilu 1:1 - Display the image at a 1:1 scale - Prikaz slike u mjerilu 1:1 + + Display the image at a 1:1 scale + Prikaz slike u mjerilu 1:1 - &Original color - I originalna boja + &Original color + I originalna boja - Display the image with its original color(s) - Prikaži sliku s originalnim bojama + Display the image with its original color(s) + Prikaži sliku s originalnim bojama - &Brightened color - I Razvedri boju + &Brightened color + I Razvedri boju - Display the image with brightened color(s) - Prikaži sliku s s izbjeljenim bojama + Display the image with brightened color(s) + Prikaži sliku s s izbjeljenim bojama - Standard - Standard + + Standard + Standard - Ready... - Spreman... + + Ready... + Spreman... - grey - siva + + grey + siva - zoom - zum + + + + + + + + + + + zoom + zum - outside image - izvan slike + + + + + + outside image + izvan slike - - + + QObject - Image viewer - Pregled slike + Image viewer + Pregled slike - - Images (*.png *.xpm *.jpg *.bmp) - Slike (*. png *. XPM *. jpg *. bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Slike (*. png *. XPM *. jpg *. bmp) - Choose an image file to open - Odaberite koju ce te sliku otvoriti + + + + Choose an image file to open + Odaberite koju ce te sliku otvoriti - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Pogreška pri otvaranju slike + + Error open image + Pogreška pri otvaranju slike - Could not load the choosen image - Nije moguće učitati izabranu sliku + + Could not load the choosen image + Nije moguće učitati izabranu sliku - - + + Workbench - - Image - Slika + + Image + Slika - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_hu.ts b/src/Mod/Image/Gui/Resources/translations/Image_hu.ts index 6fc098870..85c21561b 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_hu.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_hu.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Kép + + Image + Kép - Create image plane... - Kép sík létrehozása... + + Create image plane... + Kép sík létrehozása... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - hozzon létre egy síkbeli képet a 3D-s térben + create a planar image in the 3D space + hozzon létre egy síkbeli képet a 3D-s térben - - + + CmdImageOpen - Image - Kép + + Image + Kép - Open... - Megnyitás... + + Open... + Megnyitás... - Open image view - Kép megnyitása megtekintése + + Open image view + Kép megnyitása megtekintése - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - A képnéző által meghatározhatatlan típusú színtér + + Undefined type of colour space for image viewing + A képnéző által meghatározhatatlan típusú színtér - Image pixel format - Képpont formátum + + Image pixel format + Képpont formátum - - + + ImageGui::ImageView - - &Fit image - Kép kitöltse a képernyőt + + &Fit image + Kép kitöltse a képernyőt - Stretch the image to fit the view - Nyújtsa ki a képet, hogy illeszkedjen a nézethez + + Stretch the image to fit the view + Nyújtsa ki a képet, hogy illeszkedjen a nézethez - &1:1 scale - &1:1 léptékű + + &1:1 scale + &1:1 léptékű - Display the image at a 1:1 scale - A kép megjelenítése 1:1 méretarányban + + Display the image at a 1:1 scale + A kép megjelenítése 1:1 méretarányban - &Original color - &Eredeti szín + &Original color + &Eredeti szín - Display the image with its original color(s) - Eredeti színekkel jelenítse meg a képet + Display the image with its original color(s) + Eredeti színekkel jelenítse meg a képet - &Brightened color - &Világosított szín + &Brightened color + &Világosított szín - Display the image with brightened color(s) - Világosított színekkel jelenítse meg a képet + Display the image with brightened color(s) + Világosított színekkel jelenítse meg a képet - Standard - Szabvány + + Standard + Szabvány - Ready... - Kész ... + + Ready... + Kész ... - grey - szürke + + grey + szürke - zoom - Nagyítás + + + + + + + + + + + zoom + Nagyítás - outside image - külső kép + + + + + + outside image + külső kép - - + + QObject - Image viewer - Képnéző + Image viewer + Képnéző - - Images (*.png *.xpm *.jpg *.bmp) - Képek (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Képek (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Egy képfájl kiválasztása megnyitásra + + + + Choose an image file to open + Egy képfájl kiválasztása megnyitásra - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Hiba a kép megnyitásakor + + Error open image + Hiba a kép megnyitásakor - Could not load the choosen image - Nem sikerült betölteni a kiválasztott képet + + Could not load the choosen image + Nem sikerült betölteni a kiválasztott képet - - + + Workbench - - Image - Kép + + Image + Kép - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_it.ts b/src/Mod/Image/Gui/Resources/translations/Image_it.ts index 1991740eb..adedd06db 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_it.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_it.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Immagine + + Image + Immagine - Create image plane... - Crea un piano immagine... + + Create image plane... + Crea un piano immagine... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - crea un'immagine piana nello spazio 3D + create a planar image in the 3D space + crea un'immagine piana nello spazio 3D - - + + CmdImageOpen - Image - Immagine + + Image + Immagine - Open... - Apri... + + Open... + Apri... - Open image view - Apri il visualizzatore di immagini + + Open image view + Apri il visualizzatore di immagini - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Tipo di spazio colore indefinito per la visualizzazione delle immagini + + Undefined type of colour space for image viewing + Tipo di spazio colore indefinito per la visualizzazione delle immagini - Image pixel format - Formato pixel + + Image pixel format + Formato pixel - - + + ImageGui::ImageView - - &Fit image - &Adatta immagine + + &Fit image + &Adatta immagine - Stretch the image to fit the view - Stira l'immagine per adattarsi alla vista + + Stretch the image to fit the view + Stira l'immagine per adattarsi alla vista - &1:1 scale - Scala &1:1 + + &1:1 scale + Scala &1:1 - Display the image at a 1:1 scale - Visualizza l'immagine in scala 1:1 + + Display the image at a 1:1 scale + Visualizza l'immagine in scala 1:1 - &Original color - Colori &originali + &Original color + Colori &originali - Display the image with its original color(s) - Visualizza l'immagine con i suoi colori originali + Display the image with its original color(s) + Visualizza l'immagine con i suoi colori originali - &Brightened color - &Colori più luminosi + &Brightened color + &Colori più luminosi - Display the image with brightened color(s) - Visualizza l'immagine con colori più luminosi + Display the image with brightened color(s) + Visualizza l'immagine con colori più luminosi - Standard - Standard + + Standard + Standard - Ready... - Pronto... + + Ready... + Pronto... - grey - grigio + + grey + grigio - zoom - zoom + + + + + + + + + + + zoom + zoom - outside image - fuori dall'immagine + + + + + + outside image + fuori dall'immagine - - + + QObject - Image viewer - Visualizzatore di immagini + Image viewer + Visualizzatore di immagini - - Images (*.png *.xpm *.jpg *.bmp) - Immagini (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Immagini (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Seleziona un file immagine da aprire + + + + Choose an image file to open + Seleziona un file immagine da aprire - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Errore durante l'apertura dell'immagine + + Error open image + Errore durante l'apertura dell'immagine - Could not load the choosen image - Impossibile caricare l'immagine scelta + + Could not load the choosen image + Impossibile caricare l'immagine scelta - - + + Workbench - - Image - Immagine + + Image + Immagine - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ja.ts b/src/Mod/Image/Gui/Resources/translations/Image_ja.ts index edf30d04b..12b008308 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_ja.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_ja.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - 画像 + + Image + 画像 - Create image plane... - Create image plane... + + Create image plane... + Create image plane... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - create a planar image in the 3D space + create a planar image in the 3D space + create a planar image in the 3D space - - + + CmdImageOpen - Image - 画像 + + Image + 画像 - Open... - 開く... + + Open... + 開く... - Open image view - 画像ビューを開く + + Open image view + 画像ビューを開く - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - 表示中の画像の色空間は未定義です + + Undefined type of colour space for image viewing + 表示中の画像の色空間は未定義です - Image pixel format - 画像のピクセルフォーマット + + Image pixel format + 画像のピクセルフォーマット - - + + ImageGui::ImageView - - &Fit image - 画像に合わせる(&F) + + &Fit image + 画像に合わせる(&F) - Stretch the image to fit the view - 画像ビューサイズに合わせて画像を拡大 + + Stretch the image to fit the view + 画像ビューサイズに合わせて画像を拡大 - &1:1 scale - 1:1スケール(&1) + + &1:1 scale + 1:1スケール(&1) - Display the image at a 1:1 scale - 1:1のスケールで画像を表示する + + Display the image at a 1:1 scale + 1:1のスケールで画像を表示する - &Original color - 元の色 (&O) + &Original color + 元の色 (&O) - Display the image with its original color(s) - 元の色で画像を表示する + Display the image with its original color(s) + 元の色で画像を表示する - &Brightened color - &Brightened color + &Brightened color + &Brightened color - Display the image with brightened color(s) - Display the image with brightened color(s) + Display the image with brightened color(s) + Display the image with brightened color(s) - Standard - 標準 + + Standard + 標準 - Ready... - Ready... + + Ready... + Ready... - grey - グレー + + grey + グレー - zoom - ズーム + + + + + + + + + + + zoom + ズーム - outside image - outside image + + + + + + outside image + outside image - - + + QObject - Image viewer - 画像ビューア + Image viewer + 画像ビューア - - Images (*.png *.xpm *.jpg *.bmp) - Images (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Images (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Choose an image file to open + + + + Choose an image file to open + Choose an image file to open - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Error open image + + Error open image + Error open image - Could not load the choosen image - Could not load the choosen image + + Could not load the choosen image + Could not load the choosen image - - + + Workbench - - Image - 画像 + + Image + 画像 - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_nl.ts b/src/Mod/Image/Gui/Resources/translations/Image_nl.ts index d97669dd8..bc10f1d83 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_nl.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_nl.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Afbeelding + + Image + Afbeelding - Create image plane... - Maak beeldvlak ... + + Create image plane... + Maak beeldvlak ... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - een vlakke afbeelding maken in de 3D-ruimte + create a planar image in the 3D space + een vlakke afbeelding maken in de 3D-ruimte - - + + CmdImageOpen - Image - Afbeelding + + Image + Afbeelding - Open... - Openen... + + Open... + Openen... - Open image view - Open afbeelding weergave + + Open image view + Open afbeelding weergave - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Ongedefinieerd type kleurruimte om beelden te bekijken + + Undefined type of colour space for image viewing + Ongedefinieerd type kleurruimte om beelden te bekijken - Image pixel format - Pixel-formaat + + Image pixel format + Pixel-formaat - - + + ImageGui::ImageView - - &Fit image - &Passend + + &Fit image + &Passend - Stretch the image to fit the view - Uitrekken tot grootte weergave venster + + Stretch the image to fit the view + Uitrekken tot grootte weergave venster - &1:1 scale - Schaal &1:1 + + &1:1 scale + Schaal &1:1 - Display the image at a 1:1 scale - Toon de afbeelding op schaal van 1:1 + + Display the image at a 1:1 scale + Toon de afbeelding op schaal van 1:1 - &Original color - &Oorspronkelijke kleur + &Original color + &Oorspronkelijke kleur - Display the image with its original color(s) - Toon de afbeelding met de oorspronkelijke kleur(en) + Display the image with its original color(s) + Toon de afbeelding met de oorspronkelijke kleur(en) - &Brightened color - &Verhelder kleur + &Brightened color + &Verhelder kleur - Display the image with brightened color(s) - Toon de afbeelding met verhelderde kleur(en) + Display the image with brightened color(s) + Toon de afbeelding met verhelderde kleur(en) - Standard - Standaard + + Standard + Standaard - Ready... - Gereed... + + Ready... + Gereed... - grey - grijs + + grey + grijs - zoom - zoom + + + + + + + + + + + zoom + zoom - outside image - buiten afbeelding + + + + + + outside image + buiten afbeelding - - + + QObject - Image viewer - Afbeeldingenviewer + Image viewer + Afbeeldingenviewer - - Images (*.png *.xpm *.jpg *.bmp) - Afbeeldingen(*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Afbeeldingen(*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Kies een te openen afbeeldingsbestand + + + + Choose an image file to open + Kies een te openen afbeeldingsbestand - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Fout geopende afbeelding + + Error open image + Fout geopende afbeelding - Could not load the choosen image - Kon geselecteerde afbeelding niet laden + + Could not load the choosen image + Kon geselecteerde afbeelding niet laden - - + + Workbench - - Image - Afbeelding + + Image + Afbeelding - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_no.ts b/src/Mod/Image/Gui/Resources/translations/Image_no.ts index f03e900a4..e5c234f54 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_no.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_no.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Bilde + + Image + Bilde - Create image plane... - Opprett billedplan... + + Create image plane... + Opprett billedplan... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - lag et plant bilde i 3D-område + create a planar image in the 3D space + lag et plant bilde i 3D-område - - + + CmdImageOpen - Image - Bilde + + Image + Bilde - Open... - Åpne... + + Open... + Åpne... - Open image view - Åpne bildevisning + + Open image view + Åpne bildevisning - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Udefinert type fargerom for bildevisning + + Undefined type of colour space for image viewing + Udefinert type fargerom for bildevisning - Image pixel format - Bildepikselformat + + Image pixel format + Bildepikselformat - - + + ImageGui::ImageView - - &Fit image - &Tilpass bildet + + &Fit image + &Tilpass bildet - Stretch the image to fit the view - Strekk bildet slik at det passer visningen + + Stretch the image to fit the view + Strekk bildet slik at det passer visningen - &1:1 scale - &1:1 skala + + &1:1 scale + &1:1 skala - Display the image at a 1:1 scale - Vis bildet i 1:1 skala + + Display the image at a 1:1 scale + Vis bildet i 1:1 skala - &Original color - &Opprinnelig farge + &Original color + &Opprinnelig farge - Display the image with its original color(s) - Vis bildet med sine opprinnelige farger + Display the image with its original color(s) + Vis bildet med sine opprinnelige farger - &Brightened color - &Lysnet farge + &Brightened color + &Lysnet farge - Display the image with brightened color(s) - Vis bildet med lysnet farge + Display the image with brightened color(s) + Vis bildet med lysnet farge - Standard - Standard + + Standard + Standard - Ready... - Klar... + + Ready... + Klar... - grey - grå + + grey + grå - zoom - zoom + + + + + + + + + + + zoom + zoom - outside image - utenfor bildet + + + + + + outside image + utenfor bildet - - + + QObject - Image viewer - Bildeviser + Image viewer + Bildeviser - - Images (*.png *.xpm *.jpg *.bmp) - Bilder (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Bilder (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Velg en bildefil å åpne + + + + Choose an image file to open + Velg en bildefil å åpne - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Feil ved bilde åpning + + Error open image + Feil ved bilde åpning - Could not load the choosen image - Kunne ikke laste det valgte bildet + + Could not load the choosen image + Kunne ikke laste det valgte bildet - - + + Workbench - - Image - Bilde + + Image + Bilde - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pl.ts b/src/Mod/Image/Gui/Resources/translations/Image_pl.ts index b82de11f9..55e93297e 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_pl.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_pl.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Obraz + + Image + Obraz - Create image plane... - Utwórz płaszczyznę obrazu... + + Create image plane... + Utwórz płaszczyznę obrazu... - Create a planar image in the 3D space - Utwórz płaski obraz w przestrzeni 3D + + Create a planar image in the 3D space + Utwórz płaski obraz w przestrzeni 3D - create a planar image in the 3D space - Utwórz płaski obraz w przestrzeni 3D + create a planar image in the 3D space + Utwórz płaski obraz w przestrzeni 3D - - + + CmdImageOpen - Image - Obraz + + Image + Obraz - Open... - Otwórz... + + Open... + Otwórz... - Open image view - Otwórz widok obrazu + + Open image view + Otwórz widok obrazu - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Niezdefiniowana przestrzeń kolorów do podglądu obrazu + + Undefined type of colour space for image viewing + Niezdefiniowana przestrzeń kolorów do podglądu obrazu - Image pixel format - Format piksela obrazu + + Image pixel format + Format piksela obrazu - - + + ImageGui::ImageView - - &Fit image - &Dopasuj obraz + + &Fit image + &Dopasuj obraz - Stretch the image to fit the view - Rozciąga obraz, aby dopasować do widoku + + Stretch the image to fit the view + Rozciąga obraz, aby dopasować do widoku - &1:1 scale - & skala 1: 1 + + &1:1 scale + & skala 1: 1 - Display the image at a 1:1 scale - Wyświetlanie obrazu w skali 1:1 + + Display the image at a 1:1 scale + Wyświetlanie obrazu w skali 1:1 - &Original color - & Kolor oryginalny + &Original color + & Kolor oryginalny - Display the image with its original color(s) - Wyświetlanie obrazu w oryginalnym kolorze (ach) + Display the image with its original color(s) + Wyświetlanie obrazu w oryginalnym kolorze (ach) - &Brightened color - &Rozjaśniony kolor + &Brightened color + &Rozjaśniony kolor - Display the image with brightened color(s) - Wyświetlaj obraz w rozjaśnionym kolorze(rach) + Display the image with brightened color(s) + Wyświetlaj obraz w rozjaśnionym kolorze(rach) - Standard - Standard + + Standard + Standard - Ready... - Gotowe ... + + Ready... + Gotowe ... - grey - szary + + grey + szary - zoom - Powiększenie + + + + + + + + + + + zoom + Powiększenie - outside image - poza obrazem + + + + + + outside image + poza obrazem - - + + QObject - Image viewer - Przeglądarka obrazów + Image viewer + Przeglądarka obrazów - - Images (*.png *.xpm *.jpg *.bmp) - Format (*. png *. xpm *. jpg *. bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Format (*. png *. xpm *. jpg *. bmp) - Choose an image file to open - Wybierz plik obrazu, aby otworzyć + + + + Choose an image file to open + Wybierz plik obrazu, aby otworzyć - Images - Obrazy + + + Images + Obrazy - All files - Wszystkie pliki + + + All files + Wszystkie pliki - Error open image - Błąd otwarcia obrazu + + Error open image + Błąd otwarcia obrazu - Could not load the choosen image - Nie można załadować wybranego obrazu + + Could not load the choosen image + Nie można załadować wybranego obrazu - - + + Workbench - - Image - Obraz + + Image + Obraz - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pt.ts b/src/Mod/Image/Gui/Resources/translations/Image_pt.ts index 30bbc383c..776fe75e3 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_pt.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_pt.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Imagem + + Image + Imagem - Create image plane... - Criar um plano de imagem... + + Create image plane... + Criar um plano de imagem... - Create a planar image in the 3D space - Criar uma imagem planar no espaço 3D + + Create a planar image in the 3D space + Criar uma imagem planar no espaço 3D - create a planar image in the 3D space - criar uma imagem planar no espaço 3D + create a planar image in the 3D space + criar uma imagem planar no espaço 3D - - + + CmdImageOpen - Image - Imagem + + Image + Imagem - Open... - Abrir... + + Open... + Abrir... - Open image view - Abrir uma imagem + + Open image view + Abrir uma imagem - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Tipo de espaço de cor indefinido para visualização de imagens + + Undefined type of colour space for image viewing + Tipo de espaço de cor indefinido para visualização de imagens - Image pixel format - Formato de pixel de imagem + + Image pixel format + Formato de pixel de imagem - - + + ImageGui::ImageView - - &Fit image - &Ajustar imagem + + &Fit image + &Ajustar imagem - Stretch the image to fit the view - Esticar a imagem para ajustar à janela + + Stretch the image to fit the view + Esticar a imagem para ajustar à janela - &1:1 scale - Escala &1:1 + + &1:1 scale + Escala &1:1 - Display the image at a 1:1 scale - Exibir a imagem em escala 1:1 + + Display the image at a 1:1 scale + Exibir a imagem em escala 1:1 - &Original color - Cor &original + &Original color + Cor &original - Display the image with its original color(s) - Exibir a imagem com as suas cores originais + Display the image with its original color(s) + Exibir a imagem com as suas cores originais - &Brightened color - Cor &amplificada + &Brightened color + Cor &amplificada - Display the image with brightened color(s) - Exibir a imagem com cores mais fortes + Display the image with brightened color(s) + Exibir a imagem com cores mais fortes - Standard - Padrão + + Standard + Padrão - Ready... - Pronto... + + Ready... + Pronto... - grey - cinza + + grey + cinza - zoom - Ampliar + + + + + + + + + + + zoom + Ampliar - outside image - imagem exterior + + + + + + outside image + imagem exterior - - + + QObject - Image viewer - Visualizador de imagens + Image viewer + Visualizador de imagens - - Images (*.png *.xpm *.jpg *.bmp) - Imagens (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Imagens (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Escolha um arquivo de imagem para abrir + + + + Choose an image file to open + Escolha um arquivo de imagem para abrir - Images - Imagens + + + Images + Imagens - All files - Todos os arquivos + + + All files + Todos os arquivos - Error open image - Erro ao abrir a imagem + + Error open image + Erro ao abrir a imagem - Could not load the choosen image - Não foi possível carregar a imagem escolhida + + Could not load the choosen image + Não foi possível carregar a imagem escolhida - - + + Workbench - - Image - Imagem + + Image + Imagem - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ru.ts b/src/Mod/Image/Gui/Resources/translations/Image_ru.ts index 983e2aecc..86d07052e 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_ru.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_ru.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Изображение + + Image + Изображение - Create image plane... - Создать плоскость изображения ... + + Create image plane... + Создать плоскость изображения ... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - Cоздание плоского изображения в 3D пространстве + create a planar image in the 3D space + Cоздание плоского изображения в 3D пространстве - - + + CmdImageOpen - Image - Изображение + + Image + Изображение - Open... - Открыть... + + Open... + Открыть... - Open image view - Открыть изображение + + Open image view + Открыть изображение - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Неопределенный тип цвета пространства для просмотра изображений + + Undefined type of colour space for image viewing + Неопределенный тип цвета пространства для просмотра изображений - Image pixel format - Растровый формат изображения + + Image pixel format + Растровый формат изображения - - + + ImageGui::ImageView - - &Fit image - & Растянуть изображения + + &Fit image + & Растянуть изображения - Stretch the image to fit the view - Растянуть изображение по размеру вида + + Stretch the image to fit the view + Растянуть изображение по размеру вида - &1:1 scale - & масштаб 1:1 + + &1:1 scale + & масштаб 1:1 - Display the image at a 1:1 scale - Отображает изображение в масштабе 1: 1 + + Display the image at a 1:1 scale + Отображает изображение в масштабе 1: 1 - &Original color - &Исходный цвета + &Original color + &Исходный цвета - Display the image with its original color(s) - Изображение в исходных цветах + Display the image with its original color(s) + Изображение в исходных цветах - &Brightened color - &Оживить цвет + &Brightened color + &Оживить цвет - Display the image with brightened color(s) - Показать изображение в ярком цвете(ах) + Display the image with brightened color(s) + Показать изображение в ярком цвете(ах) - Standard - Стандарт + + Standard + Стандарт - Ready... - Готово... + + Ready... + Готово... - grey - Серый + + grey + Серый - zoom - Масштаб + + + + + + + + + + + zoom + Масштаб - outside image - за пределами изображения + + + + + + outside image + за пределами изображения - - + + QObject - Image viewer - Просмотр изображения + Image viewer + Просмотр изображения - - Images (*.png *.xpm *.jpg *.bmp) - Изображения (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Изображения (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Выберите файл изображения, чтобы открыть + + + + Choose an image file to open + Выберите файл изображения, чтобы открыть - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Ошибка при открытии изображения + + Error open image + Ошибка при открытии изображения - Could not load the choosen image - Не удалось загрузить выбранное изображение + + Could not load the choosen image + Не удалось загрузить выбранное изображение - - + + Workbench - - Image - Изображение + + Image + Изображение - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_se.ts b/src/Mod/Image/Gui/Resources/translations/Image_se.ts index 0dc7ac24d..a7bc174da 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_se.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_se.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Bild + + Image + Bild - Create image plane... - Skapa bildplan ... + + Create image plane... + Skapa bildplan ... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - skapa en plan bild i 3D-rymden + create a planar image in the 3D space + skapa en plan bild i 3D-rymden - - + + CmdImageOpen - Image - Bild + + Image + Bild - Open... - Öppna... + + Open... + Öppna... - Open image view - Öppna bildvy + + Open image view + Öppna bildvy - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Odefinierad färgrymd för bildvisning + + Undefined type of colour space for image viewing + Odefinierad färgrymd för bildvisning - Image pixel format - Bildens pixelformat + + Image pixel format + Bildens pixelformat - - + + ImageGui::ImageView - - &Fit image - An&passa bild + + &Fit image + An&passa bild - Stretch the image to fit the view - Skala bilden till vyn + + Stretch the image to fit the view + Skala bilden till vyn - &1:1 scale - &1:1 Skala + + &1:1 scale + &1:1 Skala - Display the image at a 1:1 scale - Visa bilden i 1:1 skala + + Display the image at a 1:1 scale + Visa bilden i 1:1 skala - &Original color - &Originalfärg + &Original color + &Originalfärg - Display the image with its original color(s) - Visa bilden med dess originalfärger + Display the image with its original color(s) + Visa bilden med dess originalfärger - &Brightened color - &Ljusa färger + &Brightened color + &Ljusa färger - Display the image with brightened color(s) - Visa bilden med ljusare färger + Display the image with brightened color(s) + Visa bilden med ljusare färger - Standard - Standard + + Standard + Standard - Ready... - Klar... + + Ready... + Klar... - grey - Grå + + grey + Grå - zoom - zoom + + + + + + + + + + + zoom + zoom - outside image - Utanför bild + + + + + + outside image + Utanför bild - - + + QObject - Image viewer - Bildvisare + Image viewer + Bildvisare - - Images (*.png *.xpm *.jpg *.bmp) - Bildformat (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Bildformat (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Välj en bildfil att öppna + + + + Choose an image file to open + Välj en bildfil att öppna - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Fel vid öppning av bilden + + Error open image + Fel vid öppning av bilden - Could not load the choosen image - Kunde inte ladda den valda bilden + + Could not load the choosen image + Kunde inte ladda den valda bilden - - + + Workbench - - Image - Bild + + Image + Bild - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_uk.ts b/src/Mod/Image/Gui/Resources/translations/Image_uk.ts index ca4eadac8..4be9b5665 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_uk.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_uk.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - Зображення + + Image + Зображення - Create image plane... - Створити площину зображення... + + Create image plane... + Створити площину зображення... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - Створення плоского зображення в 3D просторі + create a planar image in the 3D space + Створення плоского зображення в 3D просторі - - + + CmdImageOpen - Image - Зображення + + Image + Зображення - Open... - Відкрити... + + Open... + Відкрити... - Open image view - Відкрити зображення + + Open image view + Відкрити зображення - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - Невизначений тип кольору простору для перегляду зображень + + Undefined type of colour space for image viewing + Невизначений тип кольору простору для перегляду зображень - Image pixel format - Формат пікселя зображення + + Image pixel format + Формат пікселя зображення - - + + ImageGui::ImageView - - &Fit image - &Вмістити зображення + + &Fit image + &Вмістити зображення - Stretch the image to fit the view - Розтягнути зображення до розмірів подання + + Stretch the image to fit the view + Розтягнути зображення до розмірів подання - &1:1 scale - Масштаб &1:1 + + &1:1 scale + Масштаб &1:1 - Display the image at a 1:1 scale - Показати зображення в масштабі 1:1 + + Display the image at a 1:1 scale + Показати зображення в масштабі 1:1 - &Original color - &Оригінальний колір + &Original color + &Оригінальний колір - Display the image with its original color(s) - Відтворення зображення в оригінальних кольорах + Display the image with its original color(s) + Відтворення зображення в оригінальних кольорах - &Brightened color - &Підвищити яскравість кольору + &Brightened color + &Підвищити яскравість кольору - Display the image with brightened color(s) - Показувати зображення з підвищеною яскравістю кольорів + Display the image with brightened color(s) + Показувати зображення з підвищеною яскравістю кольорів - Standard - Стандартно + + Standard + Стандартно - Ready... - Готово... + + Ready... + Готово... - grey - сірий + + grey + сірий - zoom - масштаб + + + + + + + + + + + zoom + масштаб - outside image - за межами зображення + + + + + + outside image + за межами зображення - - + + QObject - Image viewer - Перегляд зображень + Image viewer + Перегляд зображень - - Images (*.png *.xpm *.jpg *.bmp) - Зображення (*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + Зображення (*.png *.xpm *.jpg *.bmp) - Choose an image file to open - Оберіть файл зображення для відкриття + + + + Choose an image file to open + Оберіть файл зображення для відкриття - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - Помилка відкриття зображення + + Error open image + Помилка відкриття зображення - Could not load the choosen image - Не вдалось завантажити обране зображення + + Could not load the choosen image + Не вдалось завантажити обране зображення - - + + Workbench - - Image - Зображення + + Image + Зображення - + diff --git a/src/Mod/Image/Gui/Resources/translations/Image_zh.ts b/src/Mod/Image/Gui/Resources/translations/Image_zh.ts index 219549b3b..6657ced73 100644 --- a/src/Mod/Image/Gui/Resources/translations/Image_zh.ts +++ b/src/Mod/Image/Gui/Resources/translations/Image_zh.ts @@ -1,147 +1,183 @@ - - + + CmdCreateImagePlane - - Image - 图像 + + Image + 图像 - Create image plane... - 创建平面图像... + + Create image plane... + 创建平面图像... - Create a planar image in the 3D space - Create a planar image in the 3D space + + Create a planar image in the 3D space + Create a planar image in the 3D space - create a planar image in the 3D space - 三维空间中创建一个平面图像 + create a planar image in the 3D space + 三维空间中创建一个平面图像 - - + + CmdImageOpen - Image - 图像 + + Image + 图像 - Open... - 打开... + + Open... + 打开... - Open image view - 打开图像视图 + + Open image view + 打开图像视图 - - + + ImageGui::GLImageBox - - Undefined type of colour space for image viewing - 图片视图的色彩模式未定义 + + Undefined type of colour space for image viewing + 图片视图的色彩模式未定义 - Image pixel format - 图像像素格式 + + Image pixel format + 图像像素格式 - - + + ImageGui::ImageView - - &Fit image - 适应图像尺寸(&F) + + &Fit image + 适应图像尺寸(&F) - Stretch the image to fit the view - 拉伸图像以适应视图 + + Stretch the image to fit the view + 拉伸图像以适应视图 - &1:1 scale - &1:1 缩放 + + &1:1 scale + &1:1 缩放 - Display the image at a 1:1 scale - 按1:1比例显示图像 + + Display the image at a 1:1 scale + 按1:1比例显示图像 - &Original color - 原始色(&O) + &Original color + 原始色(&O) - Display the image with its original color(s) - 以原始色显示图像 + Display the image with its original color(s) + 以原始色显示图像 - &Brightened color - 高亮色(&B) + &Brightened color + 高亮色(&B) - Display the image with brightened color(s) - 以高亮色显示图像 + Display the image with brightened color(s) + 以高亮色显示图像 - Standard - 标准 + + Standard + 标准 - Ready... - 就绪... + + Ready... + 就绪... - grey - 灰色 + + grey + 灰色 - zoom - 缩放 + + + + + + + + + + + zoom + 缩放 - outside image - 图像外部 + + + + + + outside image + 图像外部 - - + + QObject - Image viewer - 图像浏览器 + Image viewer + 图像浏览器 - - Images (*.png *.xpm *.jpg *.bmp) - 图像(*.png *.xpm *.jpg *.bmp) + + Images (*.png *.xpm *.jpg *.bmp) + 图像(*.png *.xpm *.jpg *.bmp) - Choose an image file to open - 选择一个图像文件打开 + + + + Choose an image file to open + 选择一个图像文件打开 - Images - Images + + + Images + Images - All files - All files + + + All files + All files - Error open image - 打开图像错误 + + Error open image + 打开图像错误 - Could not load the choosen image - 无法加载选择的图像 + + Could not load the choosen image + 无法加载选择的图像 - - + + Workbench - - Image - 图像 + + Image + 图像 - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_af.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_af.ts index ff055b8be..f1bf8b679 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_af.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_af.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - Maas + Mesh + Maas - Add triangle - Voeg driehoek by + Add triangle + Voeg driehoek by - Add triangle manually to a mesh - Voeg driehoek self by die maas + Add triangle manually to a mesh + Voeg driehoek self by die maas - - + + CmdMeshBoundingBox - Mesh - Maas + Mesh + Maas - Boundings info... - Begrensings informasie ... + Boundings info... + Begrensings informasie ... - Shows the boundings of the selected mesh - Wys die begrensings van die gekose maas + Shows the boundings of the selected mesh + Wys die begrensings van die gekose maas - - + + CmdMeshBuildRegularSolid - Mesh - Maas + Mesh + Maas - Regular solid... - Tipiese soliede liggaam ... + Regular solid... + Tipiese soliede liggaam ... - Builds a regular solid - Skep 'n soliede liggaam + Builds a regular solid + Skep 'n soliede liggaam - - + + CmdMeshDemolding - Interactive demolding direction - Interaktiewe ontgietingsrigting + Interactive demolding direction + Interaktiewe ontgietingsrigting - Mesh - Maas + Mesh + Maas - - + + CmdMeshDifference - Mesh - Maas + Mesh + Maas - Difference - Verskil + Difference + Verskil - - + + CmdMeshEvaluateFacet - Mesh - Maas + Mesh + Maas - Face info - Vlakinformasie + Face info + Vlakinformasie - Information about face - Informasie oor die vlak + Information about face + Informasie oor die vlak - - + + CmdMeshEvaluateSolid - Mesh - Maas + Mesh + Maas - Check solid mesh - Kontroleer soliede maas + Check solid mesh + Kontroleer soliede maas - Checks whether the mesh is a solid - Kontroleer of die maas 'n soliede is + Checks whether the mesh is a solid + Kontroleer of die maas 'n soliede is - - + + CmdMeshEvaluation - Mesh - Maas + Mesh + Maas - Opens a dialog to analyze and repair a mesh - Maak 'n dialoog oop om 'n maas te ontleed en herstel + Opens a dialog to analyze and repair a mesh + Maak 'n dialoog oop om 'n maas te ontleed en herstel - Evaluate && Repair mesh... - Evalueer en herstel maas... + Evaluate && Repair mesh... + Evalueer en herstel maas... - - + + CmdMeshExMakeMesh - Mesh - Maas + Mesh + Maas - Make a Box - Maak 'n boks + Make a Box + Maak 'n boks - - + + CmdMeshExMakeTool - Mesh - Maas + Mesh + Maas - Make a Tool - Maak 'n werktuig + Make a Tool + Maak 'n werktuig - - + + CmdMeshExMakeUnion - Mesh - Maas + Mesh + Maas - Make Union - Maak unie + Make Union + Maak unie - - + + CmdMeshExport - Mesh - Maas + Mesh + Maas - Export mesh... - Voer maas uit ... + Export mesh... + Voer maas uit ... - Exports a mesh to file - Voer maas uit na lêer + Exports a mesh to file + Voer maas uit na lêer - - + + CmdMeshFillInteractiveHole - Mesh - Maas + Mesh + Maas - Close hole - Vul gaping + Close hole + Vul gaping - Close holes interactively - Vul gapings interaktief + Close holes interactively + Vul gapings interaktief - - + + CmdMeshFillupHoles - Mesh - Maas + Mesh + Maas - Fill holes... - Vul gapings ... + Fill holes... + Vul gapings ... - Fill holes of the mesh - Vul gapings in die maas + Fill holes of the mesh + Vul gapings in die maas - - + + CmdMeshFlipNormals - Mesh - Maas + Mesh + Maas - Flip normals - Keer normaallyne om + Flip normals + Keer normaallyne om - Flips the normals of the mesh - Keer die maas se normaallyne om + Flips the normals of the mesh + Keer die maas se normaallyne om - - + + CmdMeshFromGeometry - Mesh - Maas + Mesh + Maas - Create mesh from geometry... - Skep 'n maas van 'n vorm ... + Create mesh from geometry... + Skep 'n maas van 'n vorm ... - Create mesh from the selected geometry - Skep maas van die gekose vorm + Create mesh from the selected geometry + Skep maas van die gekose vorm - - + + CmdMeshHarmonizeNormals - Mesh - Maas + Mesh + Maas - Harmonize normals - Harmoniseer normaallyne + Harmonize normals + Harmoniseer normaallyne - Harmonizes the normals of the mesh - Harmoniseer die normaallyne van die maas + Harmonizes the normals of the mesh + Harmoniseer die normaallyne van die maas - - + + CmdMeshImport - Mesh - Maas + Mesh + Maas - Import mesh... - Voer maas in ... + Import mesh... + Voer maas in ... - Imports a mesh from file - Voer 'n maas in van 'n lêer + Imports a mesh from file + Voer 'n maas in van 'n lêer - - + + CmdMeshIntersection - Mesh - Maas + Mesh + Maas - Intersection - Snyding + Intersection + Snyding - - + + CmdMeshPolyCut - Mesh - Maas + Mesh + Maas - Cut mesh - Sny maas + Cut mesh + Sny maas - Cuts a mesh with a picked polygon - Sny 'n maas met 'n gekose veelhoek + Cuts a mesh with a picked polygon + Sny 'n maas met 'n gekose veelhoek - - + + CmdMeshPolySegm - Mesh - Maas + Mesh + Maas - Make segment - Maak segment + Make segment + Maak segment - Creates a mesh segment - Skep 'n maassegment + Creates a mesh segment + Skep 'n maassegment - - + + CmdMeshPolySelect - Mesh - Maas + Mesh + Maas - Select mesh - Kies maas + Select mesh + Kies maas - Select an area of the mesh - Kies 'n gedeelte van die maas + Select an area of the mesh + Kies 'n gedeelte van die maas - - + + CmdMeshPolySplit - Mesh - Maas + Mesh + Maas - Split mesh - Verdeel 'n maas + Split mesh + Verdeel 'n maas - Splits a mesh into two meshes - Verdeel 'n maas in twee mase + Splits a mesh into two meshes + Verdeel 'n maas in twee mase - - + + + CmdMeshPolyTrim + + Mesh + Maas + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Maas + Mesh + Maas - Remove components by hand... - Verwyder komponente met die hand ... + Remove components by hand... + Verwyder komponente met die hand ... - Mark a component to remove it from the mesh - Merk 'n komponent om dit te verwyder uit die maas + Mark a component to remove it from the mesh + Merk 'n komponent om dit te verwyder uit die maas - - + + CmdMeshRemoveComponents - Mesh - Maas + Mesh + Maas - Remove components... - Verwyder komponente ... + Remove components... + Verwyder komponente ... - Remove topologic independent components from the mesh - Remove topologic independent components from the mesh + Remove topologic independent components from the mesh + Remove topologic independent components from the mesh - - + + + CmdMeshSegmentation + + Mesh + Maas + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Maas + Mesh + Maas - Smooth... - Stryk ... + Smooth... + Stryk ... - Smooth the selected meshes - Stryk die geselekteerde mase se oppervlakke uit + Smooth the selected meshes + Stryk die geselekteerde mase se oppervlakke uit - - + + CmdMeshToolMesh - Mesh - Maas + Mesh + Maas - Segment by tool mesh - Segmenteer met 'n maaswerktuig + Segment by tool mesh + Segmenteer met 'n maaswerktuig - Creates a segment from a given tool mesh - Skep 'n segment van 'n gegewe maaswerktuig + Creates a segment from a given tool mesh + Skep 'n segment van 'n gegewe maaswerktuig - - + + CmdMeshTransform - Mesh - Maas + Mesh + Maas - Transform mesh - Transformeer maas + Transform mesh + Transformeer maas - Rotate or move a mesh - Draai of skuif 'n maas + Rotate or move a mesh + Draai of skuif 'n maas - - + + CmdMeshUnion - Mesh - Maas + Mesh + Maas - Union - Vereniging + Union + Vereniging - - + + CmdMeshVertexCurvature - Mesh - Maas + Mesh + Maas - Calculates the curvature of the vertices of a mesh - Bereken die kromming van die hoekpunte van 'n maas + Calculates the curvature of the vertices of a mesh + Bereken die kromming van die hoekpunte van 'n maas - Curvature plot - Krommingplot + Curvature plot + Krommingplot - - + + CmdMeshVertexCurvatureInfo - Mesh - Maas + Mesh + Maas - Curvature info - Kromminginformasie + Curvature info + Kromminginformasie - Information about curvature - Inligting oor die kromming + Information about curvature + Inligting oor die kromming - - + + MeshGui::DlgEvaluateMesh - &Help - &Hulp + &Help + &Hulp - F1 - F1 + F1 + F1 - &Close - &MaakToe + &Close + &MaakToe - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Maas inligting + Mesh information + Maas inligting - No information - Geen inligting + No information + Geen inligting - Number of points: - Aantal punte: + Number of points: + Aantal punte: - Number of edges: - Aantal kante: + Number of edges: + Aantal kante: - Refresh - Verfris + Refresh + Verfris - Analyze - Ontleed + Analyze + Ontleed - Repair - Herstel + Repair + Herstel - Orientation - Oriëntasie + Orientation + Oriëntasie - Degenerated faces - Vervalle vlakke + Degenerated faces + Vervalle vlakke - Face indices - Vlakindekse + Face indices + Vlakindekse - Number of faces: - Aantal vlakke: + Number of faces: + Aantal vlakke: - Duplicated faces - Herhaalde vlakke + Duplicated faces + Herhaalde vlakke - Duplicated points - Herhaalde punte + Duplicated points + Herhaalde punte - Non-manifolds - Nie-menigvoude + Non-manifolds + Nie-menigvoude - Self-intersections - Self-snydings + Self-intersections + Self-snydings - All above tests together - Al die bogenoemde toetse saam + All above tests together + Al die bogenoemde toetse saam - Repetitive repair - Herhalende herstelling + Repetitive repair + Herhalende herstelling - Evaluate & Repair Mesh - Evalueer en herstel maas + Evaluate & Repair Mesh + Evalueer en herstel maas - Folds on surface - Voue op die oppervlak + Folds on surface + Voue op die oppervlak - - + + MeshGui::DlgEvaluateMeshImp - No information - Geen inligting + No information + Geen inligting - Invalid neighbour indices - Ongeldige buurindekse + Invalid neighbour indices + Ongeldige buurindekse - Invalid face indices - Ongeldige vlakindekse + Invalid face indices + Ongeldige vlakindekse - Invalid point indices - Ongeldige puntindekse + Invalid point indices + Ongeldige puntindekse - Multiple point indices - Veelvuldige puntindekse + Multiple point indices + Veelvuldige puntindekse - Non-manifolds - Nie-menigvoude + Non-manifolds + Nie-menigvoude - Cannot remove non-manifolds - Kan nie nie-menigvoude verwyder nie + Cannot remove non-manifolds + Kan nie nie-menigvoude verwyder nie - No selection - Geen keuse + No selection + Geen keuse - No flipped normals - Geen omgekeerde normaallyne nie + No flipped normals + Geen omgekeerde normaallyne nie - %1 flipped normals - %1 omgekeerde normaallyne + %1 flipped normals + %1 omgekeerde normaallyne - No non-manifolds - Geen nie-menigvoude nie + No non-manifolds + Geen nie-menigvoude nie - %1 non-manifolds - %1 nie-menigvoude + %1 non-manifolds + %1 nie-menigvoude - No invalid indices - Geen ongeldige indekse + No invalid indices + Geen ongeldige indekse - No degenerations - Geen vervallings + No degenerations + Geen vervallings - %1 degenerated faces - %1 vervalle vlakke + %1 degenerated faces + %1 vervalle vlakke - No duplicated faces - Geen herhaalde vlakke + No duplicated faces + Geen herhaalde vlakke - %1 duplicated faces - %1 herhaalde vlakke + %1 duplicated faces + %1 herhaalde vlakke - No duplicated points - Geen herhaalde punte nie + No duplicated points + Geen herhaalde punte nie - Duplicated points - Herhaalde punte + Duplicated points + Herhaalde punte - Orientation - Oriëntasie + Orientation + Oriëntasie - Indices - Indekse + Indices + Indekse - Degenerations - Vervallings + Degenerations + Vervallings - Duplicated faces - Herhaalde vlakke + Duplicated faces + Herhaalde vlakke - No self-intersections - Geen selfsnydings + No self-intersections + Geen selfsnydings - Self-intersections - Self-snydings + Self-intersections + Self-snydings - Mesh repair - Maasherstelling + Mesh repair + Maasherstelling - Flipped normals found - Omgekeerde normaallyne gevind + Flipped normals found + Omgekeerde normaallyne gevind - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Kontrole het misluk weens voue op die oppervlak. + Kontrole het misluk weens voue op die oppervlak. Gee eers die opdrag om die voue te herstel - No folds on surface - Geen voue op die oppervlak + No folds on surface + Geen voue op die oppervlak - %1 folds on surface - %1 voue op die oppervlak + %1 folds on surface + %1 voue op die oppervlak - Folds - Voue + Folds + Voue - - + + MeshGui::DlgRegularSolid - Regular Solid - Tipiese Soliede + Regular Solid + Tipiese Soliede - &Create - &Skep + &Create + &Skep - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - &MaakToe + Cl&ose + &MaakToe - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Soliede: + Solid: + Soliede: - Cube - Kubus + Cube + Kubus - Cylinder - Silinder + Cylinder + Silinder - Cone - Keël + Cone + Keël - Sphere - Sfeer + Sphere + Sfeer - Ellipsoid - Ellipsoïed + Ellipsoid + Ellipsoïed - Torus - Torus + Torus + Torus - Height: - Hoogte: + Height: + Hoogte: - Length: - Lengte: + Length: + Lengte: - Width: - Wydte: + Width: + Wydte: - Radius: - Radius: + Radius: + Radius: - Closed - Gesluit + Closed + Gesluit - Sampling: - Steekproefneming: + Sampling: + Steekproefneming: - Edge length: - Kantlengte: + Edge length: + Kantlengte: - Radius 1: - Radius 1: + Radius 1: + Radius 1: - Radius 2: - Radius 2: + Radius 2: + Radius 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Skep %1 + Create %1 + Skep %1 - No active document - Geen aktiewe dokument + No active document + Geen aktiewe dokument - - + + MeshGui::DlgSettingsMeshView - Mesh view - Maasaansig + Mesh view + Maasaansig - Two-side rendering - Tweekantige vorming + Two-side rendering + Tweekantige vorming - Backface color - Agtervlakkleur + Backface color + Agtervlakkleur - Smoothing - Gladmaking + Smoothing + Gladmaking - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Hierdie is die kleinste hoek tussen twee vlakke waar normaallyne bereken word om platskaduïng te doen.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Indien die hoek tussen die normaallyne van twee aangrensende vlakke kleiner is as die plooihoek, sal die vlakke gladgeskadu word om hulle gemeensame kant.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Hierdie is die kleinste hoek tussen twee vlakke waar normaallyne bereken word om platskaduïng te doen.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Indien die hoek tussen die normaallyne van twee aangrensende vlakke kleiner is as die plooihoek, sal die vlakke gladgeskadu word om hulle gemeensame kant.</p></body></html> - Crease angle - Plooihoek + Crease angle + Plooihoek - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Platskaduïng/Phong-skaduïng</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definieer die voorkoms van oppervlakke.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Met platskaduïng word die vlaknormaallyne nie gedefinieer per hoekpunt nie, dit lei tot 'n onrealistiese voorkoms vir gekurwe oppervlakke, terwyl Phong-skaduïng 'n gladder voorkoms gee. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Indien hierdie opsie gekies is, word Phong-skaduïng gebruik, andersins word platskaduïng gebruik.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Platskaduïng/Phong-skaduïng</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definieer die voorkoms van oppervlakke.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Met platskaduïng word die vlaknormaallyne nie gedefinieer per hoekpunt nie, dit lei tot 'n onrealistiese voorkoms vir gekurwe oppervlakke, terwyl Phong-skaduïng 'n gladder voorkoms gee. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Indien hierdie opsie gekies is, word Phong-skaduïng gebruik, andersins word platskaduïng gebruik.</p></body></html> - Define normal per vertex - Definieer die normale per hoekpunt + Define normal per vertex + Definieer die normale per hoekpunt + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Om die normaallyne per hoekpunt te definieer word ook genoem<span style=" font-style:italic;">Phong-skaduïng</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">terwyl die definiëring van die normale per vlak beskryf word as</span>platskaduïng<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Om die normaallyne per hoekpunt te definieer word ook genoem<span style=" font-style:italic;">Phong-skaduïng</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">terwyl die definiëring van die normale per vlak beskryf word as</span>platskaduïng<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Versuimvoorkoms vir nuwe mase - Default appearance for new meshes - Versuimvoorkoms vir nuwe mase + Default line color + Versuimlynkleur - Default line color - Versuimlynkleur + Mesh transparency + Maasdeursigtigheid - Mesh transparency - Maasdeursigtigheid + Default mesh color + Standaard maaskleur - Default mesh color - Standaard maaskleur + Show bounding-box for highlighted or selected meshes + Wys begrensingsboks vir beklemtoonde of gekose mase - Show bounding-box for highlighted or selected meshes - Wys begrensingsboks vir beklemtoonde of gekose mase + Line transparency + Lyndeursigtigheid - - Line transparency - Lyndeursigtigheid - - - + + MeshGui::DlgSmoothing - Smoothing - Gladmaking + Smoothing + Gladmaking - Method - Metode + Method + Metode - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parameter + Parameter + Parameter - Iterations: - Iterasies: + Iterations: + Iterasies: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Voeg driehoek by + Add triangle + Voeg driehoek by - Flip normal - Swaai normaallyn om + Flip normal + Swaai normaallyn om - Clear - Maak skoon + Clear + Maak skoon - Finish - Klaar + Finish + Klaar - - + + MeshGui::RemoveComponents - Remove components - Verwyder komponente + Remove components + Verwyder komponente - Select - Kies + Select + Kies - Select whole component - Kies die hele komponent + Select whole component + Kies die hele komponent - Pick triangle - Kies driehoek + Pick triangle + Kies driehoek - < faces than - < vlakke as + < faces than + < vlakke as - Region - Streek + Region + Streek - Components - Komponente + Components + Komponente - All - Almal + All + Almal - Deselect - Deselekteer + Deselect + Deselekteer - Deselect whole component - Deselekteer die hele komponent + Deselect whole component + Deselekteer die hele komponent - > faces than - > vlakke as + > faces than + > vlakke as - Region options - Streekopsies + Region options + Streekopsies - Respect only triangles with normals facing screen - Respekteer slegs driehoeke waarvan die normale in lyn met die skerm is + Respect only triangles with normals facing screen + Respekteer slegs driehoeke waarvan die normale in lyn met die skerm is - Respect only visible triangles - Respekteer slegs sigbare driehoeke + Respect only visible triangles + Respekteer slegs sigbare driehoeke - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Silinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sfeer + + + MeshGui::TaskRemoveComponents - Delete - Verwyder + Delete + Verwyder - Invert - Inverteer + Invert + Inverteer - - + + QDockWidget - Evaluate & Repair Mesh - Evalueer en herstel maas + Evaluate & Repair Mesh + Evalueer en herstel maas - - + + QObject - Import mesh - Voer maas in + Import mesh + Voer maas in - Export mesh - Voer maas uit + Export mesh + Voer maas uit - Solid Mesh - Soliede Maas + Solid Mesh + Soliede Maas - Boundings - Begrensings + Boundings + Begrensings - Fill holes - Vul gapings + Fill holes + Vul gapings - Fill holes with maximum number of edges: - Vul gapings met 'n maksimum aantal kante: + Fill holes with maximum number of edges: + Vul gapings met 'n maksimum aantal kante: - Binary STL (*.stl) - Binêre STL (*.stl) + Binary STL (*.stl) + Binêre STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Binêre maas (*.bms) + Binary Mesh (*.bms) + Binêre maas (*.bms) - Alias Mesh (*.obj) - Alias Maas (*.obj) + Alias Mesh (*.obj) + Alias Maas (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Alle lêers (*.*) + All Files (*.*) + Alle lêers (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Gekomprimeerde VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Gekomprimeerde VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Pythonmodule def (*.py) + Python module def (*.py) + Pythonmodule def (*.py) - Meshing Tolerance - Maastoleransie + Meshing Tolerance + Maastoleransie - Enter tolerance for meshing geometry: - Gee toleransie vir maasvorms: + Enter tolerance for meshing geometry: + Gee toleransie vir maasvorms: - The mesh '%1' is a solid. - Die maas '%1' is 'n soliede. + The mesh '%1' is a solid. + Die maas '%1' is 'n soliede. - The mesh '%1' is not a solid. - Die maas '%1' is nie 'n soliede nie. + The mesh '%1' is not a solid. + Die maas '%1' is nie 'n soliede nie. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Maks=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Punte: %1, Kante: %2, Vlakke: %3] + [Points: %1, Edges: %2 Faces: %3] + [Punte: %1, Kante: %2, Vlakke: %3] - Leave info mode - Verlaat inligtingsmodus + Leave info mode + Verlaat inligtingsmodus - Index: %1 - Indeks: %1 + Index: %1 + Indeks: %1 - Leave hole-filling mode - Verlaat gapingvullingsmodus + Leave hole-filling mode + Verlaat gapingvullingsmodus - Leave removal mode - Verlaat verwyderingsmodus + Leave removal mode + Verlaat verwyderingsmodus - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Alle maaslêers (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Alle maaslêers (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford-veelhoek (*.ply) + Stanford Polygon (*.ply) + Stanford-veelhoek (*.ply) - Object File Format (*.off) - Voorwerp-lêerformaat (*.off) + Object File Format (*.off) + Voorwerp-lêerformaat (*.off) - Standford Polygon (*.ply) - Standford-veelhoek (*.ply) + Standford Polygon (*.ply) + Standford-veelhoek (*.ply) - Delete selected faces - Verwyder gekose vlakke + Delete selected faces + Verwyder gekose vlakke - Clear selected faces - Verwyder gekose vlakke + Clear selected faces + Verwyder gekose vlakke - Annotation - Aantekening + Annotation + Aantekening - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Ontleed + Analyze + Ontleed - Boolean - Boolese + Boolean + Boolese - &Meshes - &Mase + &Meshes + &Mase - Mesh tools - Maaswerktuie + Mesh tools + Maaswerktuie - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_de.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_de.ts index b0113f6de..3b5d05cc9 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_de.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_de.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - Netz + Mesh + Netz - Add triangle - Dreieck hinzufügen + Add triangle + Dreieck hinzufügen - Add triangle manually to a mesh - Dreieck manuell zu einem Netz hinzufügen + Add triangle manually to a mesh + Dreieck manuell zu einem Netz hinzufügen - - + + CmdMeshBoundingBox - Mesh - Netz + Mesh + Netz - Boundings info... - Abmessungen... + Boundings info... + Abmessungen... - Shows the boundings of the selected mesh - Anzeigen der Abmessungen des gewählten Netzes + Shows the boundings of the selected mesh + Anzeigen der Abmessungen des gewählten Netzes - - + + CmdMeshBuildRegularSolid - Mesh - Netz + Mesh + Netz - Regular solid... - Regelgeometrie... + Regular solid... + Regelgeometrie... - Builds a regular solid - Erstellen einer Regelgeometrie + Builds a regular solid + Erstellen einer Regelgeometrie - - + + CmdMeshDemolding - Interactive demolding direction - Interaktive Entformrichtung + Interactive demolding direction + Interaktive Entformrichtung - Mesh - Netz + Mesh + Netz - - + + CmdMeshDifference - Mesh - Netz + Mesh + Netz - Difference - Differenz + Difference + Differenz - - + + CmdMeshEvaluateFacet - Mesh - Netz + Mesh + Netz - Face info - Dreiecksinformation + Face info + Dreiecksinformation - Information about face - Information über Dreieck + Information about face + Information über Dreieck - - + + CmdMeshEvaluateSolid - Mesh - Netz + Mesh + Netz - Check solid mesh - Netz auf Solid überprüfen + Check solid mesh + Netz auf Solid überprüfen - Checks whether the mesh is a solid - Überprüft, ob das Netz ein Solid ist + Checks whether the mesh is a solid + Überprüft, ob das Netz ein Solid ist - - + + CmdMeshEvaluation - Mesh - Netz + Mesh + Netz - Opens a dialog to analyze and repair a mesh - Öffnet einen Dialog zum Analysieren und Reparieren eines Netzes + Opens a dialog to analyze and repair a mesh + Öffnet einen Dialog zum Analysieren und Reparieren eines Netzes - Evaluate && Repair mesh... - Netz auswerten && reparieren... + Evaluate && Repair mesh... + Netz auswerten && reparieren... - - + + CmdMeshExMakeMesh - Mesh - Netz + Mesh + Netz - Make a Box - Würfel erstellen + Make a Box + Würfel erstellen - - + + CmdMeshExMakeTool - Mesh - Netz + Mesh + Netz - Make a Tool - Werkzeug erstellen + Make a Tool + Werkzeug erstellen - - + + CmdMeshExMakeUnion - Mesh - Netz + Mesh + Netz - Make Union - Verschneiden + Make Union + Verschneiden - - + + CmdMeshExport - Mesh - Netz + Mesh + Netz - Export mesh... - Netz exportieren... + Export mesh... + Netz exportieren... - Exports a mesh to file - Netz in eine Datei exportieren + Exports a mesh to file + Netz in eine Datei exportieren - - + + CmdMeshFillInteractiveHole - Mesh - Netz + Mesh + Netz - Close hole - Loch schließen + Close hole + Loch schließen - Close holes interactively - Loch interaktiv schließen + Close holes interactively + Loch interaktiv schließen - - + + CmdMeshFillupHoles - Mesh - Netz + Mesh + Netz - Fill holes... - Löcher schließen... + Fill holes... + Löcher schließen... - Fill holes of the mesh - Schließt Löcher in dem Netz + Fill holes of the mesh + Schließt Löcher in dem Netz - - + + CmdMeshFlipNormals - Mesh - Netz + Mesh + Netz - Flip normals - Normalen umdrehen + Flip normals + Normalen umdrehen - Flips the normals of the mesh - Dreht die Dreiecksnormalen des Netzes um + Flips the normals of the mesh + Dreht die Dreiecksnormalen des Netzes um - - + + CmdMeshFromGeometry - Mesh - Netz + Mesh + Netz - Create mesh from geometry... - Erzeuge Netz aus Geometrie... + Create mesh from geometry... + Erzeuge Netz aus Geometrie... - Create mesh from the selected geometry - Erzeuge Netz aus selektierter Geometrie + Create mesh from the selected geometry + Erzeuge Netz aus selektierter Geometrie - - + + CmdMeshHarmonizeNormals - Mesh - Netz + Mesh + Netz - Harmonize normals - Normalen ausrichten + Harmonize normals + Normalen ausrichten - Harmonizes the normals of the mesh - Richtet die Normalen des Netzes aus + Harmonizes the normals of the mesh + Richtet die Normalen des Netzes aus - - + + CmdMeshImport - Mesh - Netz + Mesh + Netz - Import mesh... - Netz importieren... + Import mesh... + Netz importieren... - Imports a mesh from file - Importiert Netz aus einer Datei + Imports a mesh from file + Importiert Netz aus einer Datei - - + + CmdMeshIntersection - Mesh - Netz + Mesh + Netz - Intersection - Schnitt + Intersection + Schnitt - - + + CmdMeshPolyCut - Mesh - Netz + Mesh + Netz - Cut mesh - Netz schneiden + Cut mesh + Netz schneiden - Cuts a mesh with a picked polygon - Schneidet ein Netz mit einem ausgewählten Polygon + Cuts a mesh with a picked polygon + Schneidet ein Netz mit einem ausgewählten Polygon - - + + CmdMeshPolySegm - Mesh - Netz + Mesh + Netz - Make segment - Segment erzeugen + Make segment + Segment erzeugen - Creates a mesh segment - Erzeuge Netz-Segment + Creates a mesh segment + Erzeuge Netz-Segment - - + + CmdMeshPolySelect - Mesh - Netz + Mesh + Netz - Select mesh - Netz auswählen + Select mesh + Netz auswählen - Select an area of the mesh - Wähle einen Bereich des Netzes aus + Select an area of the mesh + Wähle einen Bereich des Netzes aus - - + + CmdMeshPolySplit - Mesh - Netz + Mesh + Netz - Split mesh - Netz auftrennen + Split mesh + Netz auftrennen - Splits a mesh into two meshes - Netz in zwei Teile trennen + Splits a mesh into two meshes + Netz in zwei Teile trennen - - + + + CmdMeshPolyTrim + + Mesh + Netz + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Netz + Mesh + Netz - Remove components by hand... - Komponente von Hand entfernen... + Remove components by hand... + Komponente von Hand entfernen... - Mark a component to remove it from the mesh - Markiere Komponente um von Hand zu entfernen + Mark a component to remove it from the mesh + Markiere Komponente um von Hand zu entfernen - - + + CmdMeshRemoveComponents - Mesh - Netz + Mesh + Netz - Remove components... - Komponenten entfernen... + Remove components... + Komponenten entfernen... - Remove topologic independent components from the mesh - Entfernt topologisch unabhängige Komponenten aus dem Netz + Remove topologic independent components from the mesh + Entfernt topologisch unabhängige Komponenten aus dem Netz - - + + + CmdMeshSegmentation + + Mesh + Netz + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Netz + Mesh + Netz - Smooth... - Glätten... + Smooth... + Glätten... - Smooth the selected meshes - Selektierte Netze glätten + Smooth the selected meshes + Selektierte Netze glätten - - + + CmdMeshToolMesh - Mesh - Netz + Mesh + Netz - Segment by tool mesh - Segmentieren + Segment by tool mesh + Segmentieren - Creates a segment from a given tool mesh - Segment mit Hilfe eines gegebenen Hilfsnetzes erstellen + Creates a segment from a given tool mesh + Segment mit Hilfe eines gegebenen Hilfsnetzes erstellen - - + + CmdMeshTransform - Mesh - Netz + Mesh + Netz - Transform mesh - Netz transformieren + Transform mesh + Netz transformieren - Rotate or move a mesh - Dreht oder verschiebt ein Netz + Rotate or move a mesh + Dreht oder verschiebt ein Netz - - + + CmdMeshUnion - Mesh - Netz + Mesh + Netz - Union - Vereinigung + Union + Vereinigung - - + + CmdMeshVertexCurvature - Mesh - Netz + Mesh + Netz - Calculates the curvature of the vertices of a mesh - Berechnet die Krümmungen in den Vertexen eines Netzes + Calculates the curvature of the vertices of a mesh + Berechnet die Krümmungen in den Vertexen eines Netzes - Curvature plot - Krümmungsplot + Curvature plot + Krümmungsplot - - + + CmdMeshVertexCurvatureInfo - Mesh - Netz + Mesh + Netz - Curvature info - Krümmungsinformation + Curvature info + Krümmungsinformation - Information about curvature - Informationen über Krümmung + Information about curvature + Informationen über Krümmung - - + + MeshGui::DlgEvaluateMesh - &Help - &Hilfe + &Help + &Hilfe - F1 - F1 + F1 + F1 - &Close - Schl&ießen + &Close + Schl&ießen - Alt+C - Alt+S + Alt+C + Alt+S - Mesh information - Informationen zum Netz + Mesh information + Informationen zum Netz - No information - Keine Informationen + No information + Keine Informationen - Number of points: - Anzahl Punkte: + Number of points: + Anzahl Punkte: - Number of edges: - Anzahl Kanten: + Number of edges: + Anzahl Kanten: - Refresh - Erneut laden + Refresh + Erneut laden - Analyze - Analysieren + Analyze + Analysieren - Repair - Reparieren + Repair + Reparieren - Orientation - Orientierung + Orientation + Orientierung - Degenerated faces - Entartete Facetten + Degenerated faces + Entartete Facetten - Face indices - Facettenindexe + Face indices + Facettenindexe - Number of faces: - Anzahl Facetten: + Number of faces: + Anzahl Facetten: - Duplicated faces - Doppelte Dreiecke + Duplicated faces + Doppelte Dreiecke - Duplicated points - Doppelte Punkte + Duplicated points + Doppelte Punkte - Non-manifolds - Nichtmannigfaltigkeiten + Non-manifolds + Nichtmannigfaltigkeiten - Self-intersections - Selbstdurchdringungen + Self-intersections + Selbstdurchdringungen - All above tests together - Alle Tests zusammen + All above tests together + Alle Tests zusammen - Repetitive repair - Reparatur wiederholen + Repetitive repair + Reparatur wiederholen - Evaluate & Repair Mesh - Netz auswerten & reparieren + Evaluate & Repair Mesh + Netz auswerten & reparieren - Folds on surface - Oberflächenfalten + Folds on surface + Oberflächenfalten - - + + MeshGui::DlgEvaluateMeshImp - No information - Keine Informationen + No information + Keine Informationen - Invalid neighbour indices - Ungültige Nachbarindexe + Invalid neighbour indices + Ungültige Nachbarindexe - Invalid face indices - Ungültige Facettenindexe + Invalid face indices + Ungültige Facettenindexe - Invalid point indices - Ungültige Punktindexe + Invalid point indices + Ungültige Punktindexe - Multiple point indices - Mehrfache Punktindexe + Multiple point indices + Mehrfache Punktindexe - Non-manifolds - Nichtmannigfaltigkeiten + Non-manifolds + Nichtmannigfaltigkeiten - Cannot remove non-manifolds - Nichtmannigfaltigkeiten können nicht entfernt werden + Cannot remove non-manifolds + Nichtmannigfaltigkeiten können nicht entfernt werden - No selection - Keine Auswahl + No selection + Keine Auswahl - No flipped normals - Keine verdrehten Normalen + No flipped normals + Keine verdrehten Normalen - %1 flipped normals - %1 verdrehte Normalen + %1 flipped normals + %1 verdrehte Normalen - No non-manifolds - Keine Nichtmannigfaltigkeiten + No non-manifolds + Keine Nichtmannigfaltigkeiten - %1 non-manifolds - %1 Nichtmannigfaltigkeiten + %1 non-manifolds + %1 Nichtmannigfaltigkeiten - No invalid indices - Keine ungültige Indexe + No invalid indices + Keine ungültige Indexe - No degenerations - Keine Entartungen + No degenerations + Keine Entartungen - %1 degenerated faces - %1 entartete Facetten + %1 degenerated faces + %1 entartete Facetten - No duplicated faces - Keine doppelten Facetten + No duplicated faces + Keine doppelten Facetten - %1 duplicated faces - %1 doppelte Facetten + %1 duplicated faces + %1 doppelte Facetten - No duplicated points - Keine doppelten Punkte + No duplicated points + Keine doppelten Punkte - Duplicated points - Doppelte Punkte + Duplicated points + Doppelte Punkte - Orientation - Orientierung + Orientation + Orientierung - Indices - Indexe + Indices + Indexe - Degenerations - Degenerierungen + Degenerations + Degenerierungen - Duplicated faces - Doppelte Dreiecke + Duplicated faces + Doppelte Dreiecke - No self-intersections - Keine Selbstdurchdringungen + No self-intersections + Keine Selbstdurchdringungen - Self-intersections - Selbstdurchdringungen + Self-intersections + Selbstdurchdringungen - Mesh repair - Netz reparieren + Mesh repair + Netz reparieren - Flipped normals found - Verdrehte Normalen gefunden + Flipped normals found + Verdrehte Normalen gefunden - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Überprüfung wegen Falten in der Oberfläche fehlgeschlagen. + Überprüfung wegen Falten in der Oberfläche fehlgeschlagen. Bitte starten Sie vorher den Befehl zum Reparieren von Falten - No folds on surface - Keine Oberflächenfalten + No folds on surface + Keine Oberflächenfalten - %1 folds on surface - %1 Oberflächenfalten + %1 folds on surface + %1 Oberflächenfalten - Folds - Falten + Folds + Falten - - + + MeshGui::DlgRegularSolid - Regular Solid - Regelgeometrie + Regular Solid + Regelgeometrie - &Create - &Erstellen + &Create + &Erstellen - Alt+C - Alt+S + Alt+C + Alt+S - Cl&ose - Schl&ießen + Cl&ose + Schl&ießen - Alt+O - Alt+I + Alt+O + Alt+I - Solid: - Körper: + Solid: + Körper: - Cube - Würfel + Cube + Würfel - Cylinder - Zylinder + Cylinder + Zylinder - Cone - Kegel + Cone + Kegel - Sphere - Kugel + Sphere + Kugel - Ellipsoid - Ellipsoid + Ellipsoid + Ellipsoid - Torus - Torus + Torus + Torus - Height: - Höhe: + Height: + Höhe: - Length: - Länge: + Length: + Länge: - Width: - Breite: + Width: + Breite: - Radius: - Radius: + Radius: + Radius: - Closed - Geschlossen + Closed + Geschlossen - Sampling: - Abtastung: + Sampling: + Abtastung: - Edge length: - Kantenlänge: + Edge length: + Kantenlänge: - Radius 1: - Radius 1: + Radius 1: + Radius 1: - Radius 2: - Radius 2: + Radius 2: + Radius 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Erstelle %1 + Create %1 + Erstelle %1 - No active document - Kein aktives Dokument + No active document + Kein aktives Dokument - - + + MeshGui::DlgSettingsMeshView - Mesh view - Netz + Mesh view + Netz - Two-side rendering - Doppelseitiges Rendern + Two-side rendering + Doppelseitiges Rendern - Backface color - Untergrundfarbe + Backface color + Untergrundfarbe - Smoothing - Glättung + Smoothing + Glättung - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Das ist der kleinste Winkel zwischen zwei Dreiecken zur Berechenung beider Normalen für das Flat-Shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Falls der Winkel zweier benachbarter dreiecke kleiner als der Knitterwinkel ist, werden die Dreiecke um die gemeinsame Kante geglättet gerendert.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Das ist der kleinste Winkel zwischen zwei Dreiecken zur Berechenung beider Normalen für das Flat-Shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Falls der Winkel zweier benachbarter dreiecke kleiner als der Knitterwinkel ist, werden die Dreiecke um die gemeinsame Kante geglättet gerendert.</p></body></html> - Crease angle - Knitterwinkel + Crease angle + Knitterwinkel - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiert das Aussehen von Oberflächen.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Bei Flat-Shading werden die Flächennormalen nicht pro Vertex gesetzt, was zu unnatürlichem Aussehen führen kann, während Phong-Shading zu glatterem Aussehen führt. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Falls diese Option gesetzt ist, wird Phong-Shading verwendet, andernfalls wird Flat-Shading verwendet.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiert das Aussehen von Oberflächen.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Bei Flat-Shading werden die Flächennormalen nicht pro Vertex gesetzt, was zu unnatürlichem Aussehen führen kann, während Phong-Shading zu glatterem Aussehen führt. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Falls diese Option gesetzt ist, wird Phong-Shading verwendet, andernfalls wird Flat-Shading verwendet.</p></body></html> - Define normal per vertex - Definiere Normale pro Vertex + Define normal per vertex + Definiere Normale pro Vertex + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hinweis</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Die Angabe der Normalen per Vertex wird auch <span style=" font-style:italic;">Phong shading</span> genannt,</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">während die Angabe der Normalen pro Fläche </span>Flat shading<span style=" font-style:normal;"> gennant wird.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hinweis</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Die Angabe der Normalen per Vertex wird auch <span style=" font-style:italic;">Phong shading</span> genannt,</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">während die Angabe der Normalen pro Fläche </span>Flat shading<span style=" font-style:normal;"> gennant wird.</span></p></body></html> + Default appearance for new meshes + Standardmäßiges Erscheinungsbild für neue Netze - Default appearance for new meshes - Standardmäßiges Erscheinungsbild für neue Netze + Default line color + Standard-Kantenfarbe - Default line color - Standard-Kantenfarbe + Mesh transparency + Transparenz des Netzes - Mesh transparency - Transparenz des Netzes + Default mesh color + Standard-Flächenfarbe - Default mesh color - Standard-Flächenfarbe + Show bounding-box for highlighted or selected meshes + Bounding-Box für gehighlightete oder selekierte Netze anzeigen - Show bounding-box for highlighted or selected meshes - Bounding-Box für gehighlightete oder selekierte Netze anzeigen + Line transparency + Transparenz der Kanten - - Line transparency - Transparenz der Kanten - - - + + MeshGui::DlgSmoothing - Smoothing - Glättung + Smoothing + Glättung - Method - Methode + Method + Methode - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parameter + Parameter + Parameter - Iterations: - Iterationen: + Iterations: + Iterationen: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Dreieck hinzufügen + Add triangle + Dreieck hinzufügen - Flip normal - Normalen umdrehen + Flip normal + Normalen umdrehen - Clear - Löschen + Clear + Löschen - Finish - Fertig + Finish + Fertig - - + + MeshGui::RemoveComponents - Remove components - Komponenten entfernen + Remove components + Komponenten entfernen - Select - Auswählen + Select + Auswählen - Select whole component - Ganze Komponente auswählen + Select whole component + Ganze Komponente auswählen - Pick triangle - Dreieck aufnehmen + Pick triangle + Dreieck aufnehmen - < faces than - < Dreiecke als + < faces than + < Dreiecke als - Region - Bereich + Region + Bereich - Components - Komponenten + Components + Komponenten - All - Alles + All + Alles - Deselect - Auswahl aufheben + Deselect + Auswahl aufheben - Deselect whole component - Ganze Komponente abwählen + Deselect whole component + Ganze Komponente abwählen - > faces than - > Dreiecke als + > faces than + > Dreiecke als - Region options - Einstellungen + Region options + Einstellungen - Respect only triangles with normals facing screen - Nur Dreiecke mit Normalen beachten, die zum Bildschirm zeigen + Respect only triangles with normals facing screen + Nur Dreiecke mit Normalen beachten, die zum Bildschirm zeigen - Respect only visible triangles - Nur sichtbare Dreiecke berücksichtigen + Respect only visible triangles + Nur sichtbare Dreiecke berücksichtigen - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Zylinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Kugel + + + MeshGui::TaskRemoveComponents - Delete - Löschen + Delete + Löschen - Invert - Umkehren + Invert + Umkehren - - + + QDockWidget - Evaluate & Repair Mesh - Netz auswerten & reparieren + Evaluate & Repair Mesh + Netz auswerten & reparieren - - + + QObject - Import mesh - Netz importieren + Import mesh + Netz importieren - Export mesh - Netz exportieren + Export mesh + Netz exportieren - Solid Mesh - Fester Körper + Solid Mesh + Fester Körper - Boundings - Abmessungen + Boundings + Abmessungen - Fill holes - Löcher schließen + Fill holes + Löcher schließen - Fill holes with maximum number of edges: - Löcher schließen mit maximaler Anzahl Kanten: + Fill holes with maximum number of edges: + Löcher schließen mit maximaler Anzahl Kanten: - Binary STL (*.stl) - Binäres STL (*.stl) + Binary STL (*.stl) + Binäres STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Netz-Binärformat (*.bms) + Binary Mesh (*.bms) + Netz-Binärformat (*.bms) - Alias Mesh (*.obj) - Alias-Format (*.obj) + Alias Mesh (*.obj) + Alias-Format (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Alle Dateien (*.*) + All Files (*.*) + Alle Dateien (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Komprimiertes VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Komprimiertes VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python-Modul (*.py) + Python module def (*.py) + Python-Modul (*.py) - Meshing Tolerance - Toleranz + Meshing Tolerance + Toleranz - Enter tolerance for meshing geometry: - Toleranz zum Erzeugen von Dreiecksnetz eingeben: + Enter tolerance for meshing geometry: + Toleranz zum Erzeugen von Dreiecksnetz eingeben: - The mesh '%1' is a solid. - Das Netz '%1' ist ein Solid. + The mesh '%1' is a solid. + Das Netz '%1' ist ein Solid. - The mesh '%1' is not a solid. - Das Netz '%1' ist kein Solid. + The mesh '%1' is not a solid. + Das Netz '%1' ist kein Solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Punkte: %1, Kanten: %2 Dreiecke: %3] + [Points: %1, Edges: %2 Faces: %3] + [Punkte: %1, Kanten: %2 Dreiecke: %3] - Leave info mode - Info-Modus verlassen + Leave info mode + Info-Modus verlassen - Index: %1 - Index: %1 + Index: %1 + Index: %1 - Leave hole-filling mode - Löcher-Schließen-Modus verlassen + Leave hole-filling mode + Löcher-Schließen-Modus verlassen - Leave removal mode - Entfernen-Modus verlassen + Leave removal mode + Entfernen-Modus verlassen - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Alle Mesh Formate (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Alle Mesh Formate (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Selektierte Dreiecke löschen + Delete selected faces + Selektierte Dreiecke löschen - Clear selected faces - Auswahl aufheben + Clear selected faces + Auswahl aufheben - Annotation - Anmerkung + Annotation + Anmerkung - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analysieren + Analyze + Analysieren - Boolean - Bool'sche Operationen + Boolean + Bool'sche Operationen - &Meshes - &Netze + &Meshes + &Netze - Mesh tools - Netz-Werkzeuge + Mesh tools + Netz-Werkzeuge - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_es.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_es.ts index 0faf3afc9..431366926 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_es.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_es.ts @@ -1,1120 +1,1201 @@ - - + + CmdMeshAddFacet - Mesh - Malla + Mesh + Malla - Add triangle - Añadir triángulo + Add triangle + Añadir triángulo - Add triangle manually to a mesh - Añadir triángulo manualmente a malla + Add triangle manually to a mesh + Añadir triángulo manualmente a malla - - + + CmdMeshBoundingBox - Mesh - Malla + Mesh + Malla - Boundings info... - Información de límites... + Boundings info... + Información de límites... - Shows the boundings of the selected mesh - Muestra los límites de la malla seleccionada + Shows the boundings of the selected mesh + Muestra los límites de la malla seleccionada - - + + CmdMeshBuildRegularSolid - Mesh - Malla + Mesh + Malla - Regular solid... - Sólido regular... + Regular solid... + Sólido regular... - Builds a regular solid - Crea un sólido regular + Builds a regular solid + Crea un sólido regular - - + + CmdMeshDemolding - Interactive demolding direction - Dirección de desmoldeo interactiva + Interactive demolding direction + Dirección de desmoldeo interactiva - Mesh - Malla + Mesh + Malla - - + + CmdMeshDifference - Mesh - Malla + Mesh + Malla - Difference - Diferencia + Difference + Diferencia - - + + CmdMeshEvaluateFacet - Mesh - Malla + Mesh + Malla - Face info - Información de la cara + Face info + Información de la cara - Information about face - Información de la cara + Information about face + Información de la cara - - + + CmdMeshEvaluateSolid - Mesh - Malla + Mesh + Malla - Check solid mesh - Comprobar la malla del sólido + Check solid mesh + Comprobar la malla del sólido - Checks whether the mesh is a solid - Comprueba si la malla es un sólido + Checks whether the mesh is a solid + Comprueba si la malla es un sólido - - + + CmdMeshEvaluation - Mesh - Malla + Mesh + Malla - Opens a dialog to analyze and repair a mesh - Abre un letrero de diálogo para analizar y reparar una malla + Opens a dialog to analyze and repair a mesh + Abre un letrero de diálogo para analizar y reparar una malla - Evaluate && Repair mesh... - Evaluar y reparar malla... + Evaluate && Repair mesh... + Evaluar y reparar malla... - - + + CmdMeshExMakeMesh - Mesh - Malla + Mesh + Malla - Make a Box - Hacer un cuadro + Make a Box + Hacer un cuadro - - + + CmdMeshExMakeTool - Mesh - Malla + Mesh + Malla - Make a Tool - Crea una herramienta + Make a Tool + Crea una herramienta - - + + CmdMeshExMakeUnion - Mesh - Malla + Mesh + Malla - Make Union - Crear unión + Make Union + Crear unión - - + + CmdMeshExport - Mesh - Malla + Mesh + Malla - Export mesh... - Esportar malla... + Export mesh... + Esportar malla... - Exports a mesh to file - Esporta la malla a un archivo + Exports a mesh to file + Esporta la malla a un archivo - - + + CmdMeshFillInteractiveHole - Mesh - Malla + Mesh + Malla - Close hole - Tapa agujero + Close hole + Tapa agujero - Close holes interactively - Tapa un agujero interactivamente + Close holes interactively + Tapa un agujero interactivamente - - + + CmdMeshFillupHoles - Mesh - Malla + Mesh + Malla - Fill holes... - Rellenar agujeros... + Fill holes... + Rellenar agujeros... - Fill holes of the mesh - Rellenar agujeros de la malla + Fill holes of the mesh + Rellenar agujeros de la malla - - + + CmdMeshFlipNormals - Mesh - Malla + Mesh + Malla - Flip normals - Invertir normales + Flip normals + Invertir normales - Flips the normals of the mesh - Invierte la normal de la malla + Flips the normals of the mesh + Invierte la normal de la malla - - + + CmdMeshFromGeometry - Mesh - Malla + Mesh + Malla - Create mesh from geometry... - Crea una malla a partir de la geometría... + Create mesh from geometry... + Crea una malla a partir de la geometría... - Create mesh from the selected geometry - Crea una malla a partir de la geometría seleccionada + Create mesh from the selected geometry + Crea una malla a partir de la geometría seleccionada - - + + CmdMeshHarmonizeNormals - Mesh - Malla + Mesh + Malla - Harmonize normals - Armonizar normales + Harmonize normals + Armonizar normales - Harmonizes the normals of the mesh - Armonizar las normales de la malla + Harmonizes the normals of the mesh + Armonizar las normales de la malla - - + + CmdMeshImport - Mesh - Malla + Mesh + Malla - Import mesh... - Importar malla... + Import mesh... + Importar malla... - Imports a mesh from file - Importa una malla de un archivo + Imports a mesh from file + Importa una malla de un archivo - - + + CmdMeshIntersection - Mesh - Malla + Mesh + Malla - Intersection - Intersección + Intersection + Intersección - - + + CmdMeshPolyCut - Mesh - Malla + Mesh + Malla - Cut mesh - Cortar malla + Cut mesh + Cortar malla - Cuts a mesh with a picked polygon - Corta una malla con un poligono designado + Cuts a mesh with a picked polygon + Corta una malla con un poligono designado - - + + CmdMeshPolySegm - Mesh - Malla + Mesh + Malla - Make segment - Hacer segmento + Make segment + Hacer segmento - Creates a mesh segment - Crea un segmento de la malla + Creates a mesh segment + Crea un segmento de la malla - - + + CmdMeshPolySelect - Mesh - Malla + Mesh + Malla - Select mesh - Seleccionar malla + Select mesh + Seleccionar malla - Select an area of the mesh - Seleccionar un área de la malla + Select an area of the mesh + Seleccionar un área de la malla - - + + CmdMeshPolySplit - Mesh - Malla + Mesh + Malla - Split mesh - Dividir malla + Split mesh + Dividir malla - Splits a mesh into two meshes - Divide la malla en dos + Splits a mesh into two meshes + Divide la malla en dos - - + + + CmdMeshPolyTrim + + Mesh + Malla + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Malla + Mesh + Malla - Remove components by hand... - Eliminar componentes a mano... + Remove components by hand... + Eliminar componentes a mano... - Mark a component to remove it from the mesh - Marcar un componente para eliminarlo de la malla + Mark a component to remove it from the mesh + Marcar un componente para eliminarlo de la malla - - + + CmdMeshRemoveComponents - Mesh - Malla + Mesh + Malla - Remove components... - Eliminar componentes... + Remove components... + Eliminar componentes... - Remove topologic independent components from the mesh - Eliminar componentes topológicos independientes de la malla + Remove topologic independent components from the mesh + Eliminar componentes topológicos independientes de la malla - - + + + CmdMeshSegmentation + + Mesh + Malla + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Malla + Mesh + Malla - Smooth... - Suavizar... + Smooth... + Suavizar... - Smooth the selected meshes - Suaviza las mallas seleccionadas + Smooth the selected meshes + Suaviza las mallas seleccionadas - - + + CmdMeshToolMesh - Mesh - Malla + Mesh + Malla - Segment by tool mesh - Segmento de la herramienta de malla + Segment by tool mesh + Segmento de la herramienta de malla - Creates a segment from a given tool mesh - Crea un segmento desde una herramienta de malla dada + Creates a segment from a given tool mesh + Crea un segmento desde una herramienta de malla dada - - + + CmdMeshTransform - Mesh - Malla + Mesh + Malla - Transform mesh - Trasformar malla + Transform mesh + Trasformar malla - Rotate or move a mesh - Rotar o mover malla + Rotate or move a mesh + Rotar o mover malla - - + + CmdMeshUnion - Mesh - Malla + Mesh + Malla - Union - Unión + Union + Unión - - + + CmdMeshVertexCurvature - Mesh - Malla + Mesh + Malla - Calculates the curvature of the vertices of a mesh - Calcula la curvatura de los vértices de una malla + Calculates the curvature of the vertices of a mesh + Calcula la curvatura de los vértices de una malla - Curvature plot - Traza la curvatura + Curvature plot + Traza la curvatura - - + + CmdMeshVertexCurvatureInfo - Mesh - Malla + Mesh + Malla - Curvature info - Información de la curvatura + Curvature info + Información de la curvatura - Information about curvature - Información de la curvatura + Information about curvature + Información de la curvatura - - + + MeshGui::DlgEvaluateMesh - &Help - &Ayuda + &Help + &Ayuda - F1 - F1 + F1 + F1 - &Close - &Cerrar + &Close + &Cerrar - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Información de la malla + Mesh information + Información de la malla - No information - Ninguna información + No information + Ninguna información - Number of points: - Número de puntos: + Number of points: + Número de puntos: - Number of edges: - Número de bordes: + Number of edges: + Número de bordes: - Refresh - Actualizar + Refresh + Actualizar - Analyze - Analizar + Analyze + Analizar - Repair - Reparar + Repair + Reparar - Orientation - Orientación + Orientation + Orientación - Degenerated faces - Caras degeneradas + Degenerated faces + Caras degeneradas - Face indices - Índices de cara + Face indices + Índices de cara - Number of faces: - Número de caras: + Number of faces: + Número de caras: - Duplicated faces - Caras duplicadas + Duplicated faces + Caras duplicadas - Duplicated points - Puntos duplicados + Duplicated points + Puntos duplicados - Non-manifolds - No multiplicidad + Non-manifolds + No multiplicidad - Self-intersections - Autointersecciones + Self-intersections + Autointersecciones - All above tests together - Todo sobre los test + All above tests together + Todo sobre los test - Repetitive repair - Reparación repetitiva + Repetitive repair + Reparación repetitiva - Evaluate & Repair Mesh - Evaluar y reparar malla + Evaluate & Repair Mesh + Evaluar y reparar malla - Folds on surface - Pliegues en superficie + Folds on surface + Pliegues en superficie - - + + MeshGui::DlgEvaluateMeshImp - No information - Ninguna información + No information + Ninguna información - Invalid neighbour indices - Índices vecinos inválidos + Invalid neighbour indices + Índices vecinos inválidos - Invalid face indices - índices de cara inválidos + Invalid face indices + índices de cara inválidos - Invalid point indices - Índices de puntos inválidos + Invalid point indices + Índices de puntos inválidos - Multiple point indices - índices de punto múltiples + Multiple point indices + índices de punto múltiples - Non-manifolds - No multiplicidad + Non-manifolds + No multiplicidad - Cannot remove non-manifolds - No es posible quitar la no multiplicidad + Cannot remove non-manifolds + No es posible quitar la no multiplicidad - No selection - Ninguna selección + No selection + Ninguna selección - No flipped normals - Ninguna normal invertida + No flipped normals + Ninguna normal invertida - %1 flipped normals - %1 normales invertidas + %1 flipped normals + %1 normales invertidas - No non-manifolds - Ninguna no multiplicidad + No non-manifolds + Ninguna no multiplicidad - %1 non-manifolds - %1 no multiplicidad + %1 non-manifolds + %1 no multiplicidad - No invalid indices - Ningún índice inválido + No invalid indices + Ningún índice inválido - No degenerations - ninguna degeneración + No degenerations + ninguna degeneración - %1 degenerated faces - %1 caras degeneradas + %1 degenerated faces + %1 caras degeneradas - No duplicated faces - Ninguna cara duplicada + No duplicated faces + Ninguna cara duplicada - %1 duplicated faces - %1 caras duplicadas + %1 duplicated faces + %1 caras duplicadas - No duplicated points - Ningún punto duplicado + No duplicated points + Ningún punto duplicado - Duplicated points - Puntos duplicados + Duplicated points + Puntos duplicados - Orientation - Orientación + Orientation + Orientación - Indices - Índices + Indices + Índices - Degenerations - Degeneraciones + Degenerations + Degeneraciones - Duplicated faces - Caras duplicadas + Duplicated faces + Caras duplicadas - No self-intersections - Ninguna autointersección + No self-intersections + Ninguna autointersección - Self-intersections - Autointersecciones + Self-intersections + Autointersecciones - Mesh repair - Reparación de malla + Mesh repair + Reparación de malla - Flipped normals found - Normales invertidas encontradas + Flipped normals found + Normales invertidas encontradas - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - La comprobación falló debido a pliegues en la superficie. Vuelva a ejecutar el comando para reparar los pliegues primero + La comprobación falló debido a pliegues en la superficie. Vuelva a ejecutar el comando para reparar los pliegues primero - No folds on surface - No hay pliegues en superficie + No folds on surface + No hay pliegues en superficie - %1 folds on surface - %1 pliegues en superficie + %1 folds on surface + %1 pliegues en superficie - Folds - Pliegues + Folds + Pliegues - - + + MeshGui::DlgRegularSolid - Regular Solid - Sólido regular + Regular Solid + Sólido regular - &Create - &Crear + &Create + &Crear - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - &Cerrar + Cl&ose + &Cerrar - Alt+O - ALT+O + Alt+O + ALT+O - Solid: - Sólido: + Solid: + Sólido: - Cube - Cubo + Cube + Cubo - Cylinder - Cilindro + Cylinder + Cilindro - Cone - Cono + Cone + Cono - Sphere - Esféra + Sphere + Esféra - Ellipsoid - Elipsoide + Ellipsoid + Elipsoide - Torus - Toro + Torus + Toro - Height: - Altura: + Height: + Altura: - Length: - Longitud: + Length: + Longitud: - Width: - Ancho: + Width: + Ancho: - Radius: - Radio: + Radius: + Radio: - Closed - Cerrado + Closed + Cerrado - Sampling: - Muestreo: + Sampling: + Muestreo: - Edge length: - Longitud de borde: + Edge length: + Longitud de borde: - Radius 1: - Radio 1: + Radius 1: + Radio 1: - Radius 2: - Radio 2: + Radius 2: + Radio 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Crear %1 + Create %1 + Crear %1 - No active document - Ningún documento activo + No active document + Ningún documento activo - - + + MeshGui::DlgSettingsMeshView - Mesh view - Vista de malla + Mesh view + Vista de malla - Two-side rendering - Renderizado a dos caras + Two-side rendering + Renderizado a dos caras - Backface color - Color de la cara posterior + Backface color + Color de la cara posterior - Smoothing - Suavizado + Smoothing + Suavizado - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Este bes el menor ángulo entre dos caras donde las normales son calculadas para hacer un sombreado plano.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si el ángulo entre las normales de dos caras vecinas es menor que el ángulo de pliegue, las caras serán suavizadas por su borde común.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Este bes el menor ángulo entre dos caras donde las normales son calculadas para hacer un sombreado plano.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si el ángulo entre las normales de dos caras vecinas es menor que el ángulo de pliegue, las caras serán suavizadas por su borde común.</p></body></html> - Crease angle - Ángulo de pliegue + Crease angle + Ángulo de pliegue - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Sombreado plano/Sombreado Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Define la apariencia de las superficies.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Con sombreado plano las normales de las superficies no están definidas por vértice lo que lleva a una apariencia no real para superficies curvas mientras que usando el sombreado Phong se consigue una apariencia más suave. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si esta opción está definida se utiliza el sombreado Phong, si no está activada se utiliza el sombreado plano.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Sombreado plano/Sombreado Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Define la apariencia de las superficies.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Con sombreado plano las normales de las superficies no están definidas por vértice lo que lleva a una apariencia no real para superficies curvas mientras que usando el sombreado Phong se consigue una apariencia más suave. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si esta opción está definida se utiliza el sombreado Phong, si no está activada se utiliza el sombreado plano.</p></body></html> - Define normal per vertex - Definir la normal por vértice + Define normal per vertex + Definir la normal por vértice + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiendo las normales por vértice también se llama <span style=" font-style:italic;">Sombreado Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mientras definiendo las normales por cara se llama </span>Sombreado plano<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiendo las normales por vértice también se llama <span style=" font-style:italic;">Sombreado Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mientras definiendo las normales por cara se llama </span>Sombreado plano<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Apariencia predeterminada para nuevas mallas - Default appearance for new meshes - Apariencia predeterminada para nuevas mallas + Default line color + Color de línea predeterminado - Default line color - Color de línea predeterminado + Mesh transparency + Transparencia de malla - Mesh transparency - Transparencia de malla + Default mesh color + Color de malla predeterminado - Default mesh color - Color de malla predeterminado + Show bounding-box for highlighted or selected meshes + Mostrar cuadro delimitador para mallas resaltadas o seleccionadas - Show bounding-box for highlighted or selected meshes - Mostrar cuadro delimitador para mallas resaltadas o seleccionadas + Line transparency + Transparencia de línea - - Line transparency - Transparencia de línea - - - + + MeshGui::DlgSmoothing - Smoothing - Suavizado + Smoothing + Suavizado - Method - Método + Method + Método - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parámetro + Parameter + Parámetro - Iterations: - Iteraciones: + Iterations: + Iteraciones: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Añadir triángulo + Add triangle + Añadir triángulo - Flip normal - Invertir normal + Flip normal + Invertir normal - Clear - Borrar + Clear + Borrar - Finish - Finalizar + Finish + Finalizar - - + + MeshGui::RemoveComponents - Remove components - Eliminar componentes + Remove components + Eliminar componentes - Select - Seleccionar + Select + Seleccionar - Select whole component - Seleccionar componente entero + Select whole component + Seleccionar componente entero - Pick triangle - Elija triángulo + Pick triangle + Elija triángulo - < faces than - < nº de caras que + < faces than + < nº de caras que - Region - Región + Region + Región - Components - Componentes + Components + Componentes - All - Todo + All + Todo - Deselect - Deseleccionar + Deselect + Deseleccionar - Deselect whole component - Deseleccionar componente entero + Deselect whole component + Deseleccionar componente entero - > faces than - > nº caras que + > faces than + > nº caras que - Region options - Opciones de región + Region options + Opciones de región - Respect only triangles with normals facing screen - Únicamente respecto a triángulos con las normales frente a pantalla + Respect only triangles with normals facing screen + Únicamente respecto a triángulos con las normales frente a pantalla - Respect only visible triangles - ünicamente respecto a triángulos visibles + Respect only visible triangles + ünicamente respecto a triángulos visibles - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cilindro + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Esféra + + + MeshGui::TaskRemoveComponents - Delete - Eliminar + Delete + Eliminar - Invert - Invertir + Invert + Invertir - - + + QDockWidget - Evaluate & Repair Mesh - Evaluar y reparar malla + Evaluate & Repair Mesh + Evaluar y reparar malla - - + + QObject - Import mesh - Importar malla + Import mesh + Importar malla - Export mesh - Esportar malla + Export mesh + Esportar malla - Solid Mesh - Mallado sólido + Solid Mesh + Mallado sólido - Boundings - Límites + Boundings + Límites - Fill holes - Rellenar agujeros + Fill holes + Rellenar agujeros - Fill holes with maximum number of edges: - Rellena los agujeros con número máximo de bordes: + Fill holes with maximum number of edges: + Rellena los agujeros con número máximo de bordes: - Binary STL (*.stl) - STL binario (*.stl) + Binary STL (*.stl) + STL binario (*.stl) - ASCII STL (*.ast) - STL ASCII(*.ast) + ASCII STL (*.ast) + STL ASCII(*.ast) - Binary Mesh (*.bms) - Malla-Binario (*.bms) + Binary Mesh (*.bms) + Malla-Binario (*.bms) - Alias Mesh (*.obj) - Alias malla (*.obj) + Alias Mesh (*.obj) + Alias malla (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii(*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii(*.iv) - All Files (*.*) - Todos los archivos (*.*) + All Files (*.*) + Todos los archivos (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0(*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0(*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - VRML 2.0 Comprimido (*.wrz) + Compressed VRML 2.0 (*.wrz) + VRML 2.0 Comprimido (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Definición de Modulo Python (*.py) + Python module def (*.py) + Definición de Modulo Python (*.py) - Meshing Tolerance - Tolerancia de mallado + Meshing Tolerance + Tolerancia de mallado - Enter tolerance for meshing geometry: - Introduzca la tolerancia para la geometría de mallado: + Enter tolerance for meshing geometry: + Introduzca la tolerancia para la geometría de mallado: - The mesh '%1' is a solid. - La malla '%1' es un sólido. + The mesh '%1' is a solid. + La malla '%1' es un sólido. - The mesh '%1' is not a solid. - La malla '%1' no es un sólido. + The mesh '%1' is not a solid. + La malla '%1' no es un sólido. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Mín=<%1,%2,%3> Máx=<%4,%5,%6> + Mín=<%1,%2,%3> Máx=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Puntos: %1, Bordes: %2 Caras: %3] + [Points: %1, Edges: %2 Faces: %3] + [Puntos: %1, Bordes: %2 Caras: %3] - Leave info mode - Permitir modo info + Leave info mode + Permitir modo info - Index: %1 - Índice: %1 + Index: %1 + Índice: %1 - Leave hole-filling mode - Permitir modo de rellenado de agujeros + Leave hole-filling mode + Permitir modo de rellenado de agujeros - Leave removal mode - Permitir modo de eliminación + Leave removal mode + Permitir modo de eliminación - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Todos los archivos de malla (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Todos los archivos de malla (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Standford Polygon(*.ply) + Stanford Polygon (*.ply) + Standford Polygon(*.ply) - Object File Format (*.off) - Object File Format(*.off) + Object File Format (*.off) + Object File Format(*.off) - Standford Polygon (*.ply) - Standford Polygon(*.ply) + Standford Polygon (*.ply) + Standford Polygon(*.ply) - Delete selected faces - Eliminar caras seleccionadas + Delete selected faces + Eliminar caras seleccionadas - Clear selected faces - Borrar caras seleccionadas + Clear selected faces + Borrar caras seleccionadas - Annotation - Anotación + Annotation + Anotación - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analizar + Analyze + Analizar - Boolean - Booleano + Boolean + Booleano - &Meshes - &Malla + &Meshes + &Malla - Mesh tools - Herramientas de malla + Mesh tools + Herramientas de malla - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_fi.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_fi.ts index b52f7d42b..413e9ac04 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_fi.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_fi.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - Mesh + Mesh + Mesh - Add triangle - Add triangle + Add triangle + Add triangle - Add triangle manually to a mesh - Add triangle manually to a mesh + Add triangle manually to a mesh + Add triangle manually to a mesh - - + + CmdMeshBoundingBox - Mesh - Mesh + Mesh + Mesh - Boundings info... - Boundings info... + Boundings info... + Boundings info... - Shows the boundings of the selected mesh - Shows the boundings of the selected mesh + Shows the boundings of the selected mesh + Shows the boundings of the selected mesh - - + + CmdMeshBuildRegularSolid - Mesh - Mesh + Mesh + Mesh - Regular solid... - Regular solid... + Regular solid... + Regular solid... - Builds a regular solid - Builds a regular solid + Builds a regular solid + Builds a regular solid - - + + CmdMeshDemolding - Interactive demolding direction - Interactive demolding direction + Interactive demolding direction + Interactive demolding direction - Mesh - Mesh + Mesh + Mesh - - + + CmdMeshDifference - Mesh - Mesh + Mesh + Mesh - Difference - Difference + Difference + Difference - - + + CmdMeshEvaluateFacet - Mesh - Mesh + Mesh + Mesh - Face info - Face info + Face info + Face info - Information about face - Information about face + Information about face + Information about face - - + + CmdMeshEvaluateSolid - Mesh - Mesh + Mesh + Mesh - Check solid mesh - Check solid mesh + Check solid mesh + Check solid mesh - Checks whether the mesh is a solid - Checks whether the mesh is a solid + Checks whether the mesh is a solid + Checks whether the mesh is a solid - - + + CmdMeshEvaluation - Mesh - Mesh + Mesh + Mesh - Opens a dialog to analyze and repair a mesh - Opens a dialog to analyze and repair a mesh + Opens a dialog to analyze and repair a mesh + Opens a dialog to analyze and repair a mesh - Evaluate && Repair mesh... - Evaluate && Repair mesh... + Evaluate && Repair mesh... + Evaluate && Repair mesh... - - + + CmdMeshExMakeMesh - Mesh - Mesh + Mesh + Mesh - Make a Box - Make a Box + Make a Box + Make a Box - - + + CmdMeshExMakeTool - Mesh - Mesh + Mesh + Mesh - Make a Tool - Make a Tool + Make a Tool + Make a Tool - - + + CmdMeshExMakeUnion - Mesh - Mesh + Mesh + Mesh - Make Union - Make Union + Make Union + Make Union - - + + CmdMeshExport - Mesh - Mesh + Mesh + Mesh - Export mesh... - Export mesh... + Export mesh... + Export mesh... - Exports a mesh to file - Exports a mesh to file + Exports a mesh to file + Exports a mesh to file - - + + CmdMeshFillInteractiveHole - Mesh - Mesh + Mesh + Mesh - Close hole - Close hole + Close hole + Close hole - Close holes interactively - Close holes interactively + Close holes interactively + Close holes interactively - - + + CmdMeshFillupHoles - Mesh - Mesh + Mesh + Mesh - Fill holes... - Fill holes... + Fill holes... + Fill holes... - Fill holes of the mesh - Fill holes of the mesh + Fill holes of the mesh + Fill holes of the mesh - - + + CmdMeshFlipNormals - Mesh - Mesh + Mesh + Mesh - Flip normals - Flip normals + Flip normals + Flip normals - Flips the normals of the mesh - Flips the normals of the mesh + Flips the normals of the mesh + Flips the normals of the mesh - - + + CmdMeshFromGeometry - Mesh - Mesh + Mesh + Mesh - Create mesh from geometry... - Create mesh from geometry... + Create mesh from geometry... + Create mesh from geometry... - Create mesh from the selected geometry - Create mesh from the selected geometry + Create mesh from the selected geometry + Create mesh from the selected geometry - - + + CmdMeshHarmonizeNormals - Mesh - Mesh + Mesh + Mesh - Harmonize normals - Harmonize normals + Harmonize normals + Harmonize normals - Harmonizes the normals of the mesh - Harmonizes the normals of the mesh + Harmonizes the normals of the mesh + Harmonizes the normals of the mesh - - + + CmdMeshImport - Mesh - Mesh + Mesh + Mesh - Import mesh... - Import mesh... + Import mesh... + Import mesh... - Imports a mesh from file - Imports a mesh from file + Imports a mesh from file + Imports a mesh from file - - + + CmdMeshIntersection - Mesh - Mesh + Mesh + Mesh - Intersection - Intersection + Intersection + Intersection - - + + CmdMeshPolyCut - Mesh - Mesh + Mesh + Mesh - Cut mesh - Cut mesh + Cut mesh + Cut mesh - Cuts a mesh with a picked polygon - Cuts a mesh with a picked polygon + Cuts a mesh with a picked polygon + Cuts a mesh with a picked polygon - - + + CmdMeshPolySegm - Mesh - Mesh + Mesh + Mesh - Make segment - Make segment + Make segment + Make segment - Creates a mesh segment - Creates a mesh segment + Creates a mesh segment + Creates a mesh segment - - + + CmdMeshPolySelect - Mesh - Mesh + Mesh + Mesh - Select mesh - Select mesh + Select mesh + Select mesh - Select an area of the mesh - Select an area of the mesh + Select an area of the mesh + Select an area of the mesh - - + + CmdMeshPolySplit - Mesh - Mesh + Mesh + Mesh - Split mesh - Split mesh + Split mesh + Split mesh - Splits a mesh into two meshes - Splits a mesh into two meshes + Splits a mesh into two meshes + Splits a mesh into two meshes - - + + + CmdMeshPolyTrim + + Mesh + Mesh + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Mesh + Mesh + Mesh - Remove components by hand... - Remove components by hand... + Remove components by hand... + Remove components by hand... - Mark a component to remove it from the mesh - Mark a component to remove it from the mesh + Mark a component to remove it from the mesh + Mark a component to remove it from the mesh - - + + CmdMeshRemoveComponents - Mesh - Mesh + Mesh + Mesh - Remove components... - Remove components... + Remove components... + Remove components... - Remove topologic independent components from the mesh - Remove topologic independent components from the mesh + Remove topologic independent components from the mesh + Remove topologic independent components from the mesh - - + + + CmdMeshSegmentation + + Mesh + Mesh + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Mesh + Mesh + Mesh - Smooth... - Smooth... + Smooth... + Smooth... - Smooth the selected meshes - Smooth the selected meshes + Smooth the selected meshes + Smooth the selected meshes - - + + CmdMeshToolMesh - Mesh - Mesh + Mesh + Mesh - Segment by tool mesh - Segment by tool mesh + Segment by tool mesh + Segment by tool mesh - Creates a segment from a given tool mesh - Creates a segment from a given tool mesh + Creates a segment from a given tool mesh + Creates a segment from a given tool mesh - - + + CmdMeshTransform - Mesh - Mesh + Mesh + Mesh - Transform mesh - Transform mesh + Transform mesh + Transform mesh - Rotate or move a mesh - Rotate or move a mesh + Rotate or move a mesh + Rotate or move a mesh - - + + CmdMeshUnion - Mesh - Mesh + Mesh + Mesh - Union - Union + Union + Union - - + + CmdMeshVertexCurvature - Mesh - Mesh + Mesh + Mesh - Calculates the curvature of the vertices of a mesh - Calculates the curvature of the vertices of a mesh + Calculates the curvature of the vertices of a mesh + Calculates the curvature of the vertices of a mesh - Curvature plot - Curvature plot + Curvature plot + Curvature plot - - + + CmdMeshVertexCurvatureInfo - Mesh - Mesh + Mesh + Mesh - Curvature info - Curvature info + Curvature info + Curvature info - Information about curvature - Information about curvature + Information about curvature + Information about curvature - - + + MeshGui::DlgEvaluateMesh - &Help - &Ohje + &Help + &Ohje - F1 - F1 + F1 + F1 - &Close - &Close + &Close + &Close - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Mesh information + Mesh information + Mesh information - No information - No information + No information + No information - Number of points: - Number of points: + Number of points: + Number of points: - Number of edges: - Number of edges: + Number of edges: + Number of edges: - Refresh - Päivitä + Refresh + Päivitä - Analyze - Analyze + Analyze + Analyze - Repair - Repair + Repair + Repair - Orientation - Orientation + Orientation + Orientation - Degenerated faces - Degenerated faces + Degenerated faces + Degenerated faces - Face indices - Face indices + Face indices + Face indices - Number of faces: - Number of faces: + Number of faces: + Number of faces: - Duplicated faces - Duplicated faces + Duplicated faces + Duplicated faces - Duplicated points - Duplicated points + Duplicated points + Duplicated points - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Self-intersections - Self-intersections + Self-intersections + Self-intersections - All above tests together - All above tests together + All above tests together + All above tests together - Repetitive repair - Repetitive repair + Repetitive repair + Repetitive repair - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - Folds on surface - Folds on surface + Folds on surface + Folds on surface - - + + MeshGui::DlgEvaluateMeshImp - No information - No information + No information + No information - Invalid neighbour indices - Invalid neighbour indices + Invalid neighbour indices + Invalid neighbour indices - Invalid face indices - Invalid face indices + Invalid face indices + Invalid face indices - Invalid point indices - Invalid point indices + Invalid point indices + Invalid point indices - Multiple point indices - Multiple point indices + Multiple point indices + Multiple point indices - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Cannot remove non-manifolds - Cannot remove non-manifolds + Cannot remove non-manifolds + Cannot remove non-manifolds - No selection - No selection + No selection + No selection - No flipped normals - No flipped normals + No flipped normals + No flipped normals - %1 flipped normals - %1 flipped normals + %1 flipped normals + %1 flipped normals - No non-manifolds - No non-manifolds + No non-manifolds + No non-manifolds - %1 non-manifolds - %1 non-manifolds + %1 non-manifolds + %1 non-manifolds - No invalid indices - No invalid indices + No invalid indices + No invalid indices - No degenerations - No degenerations + No degenerations + No degenerations - %1 degenerated faces - %1 degenerated faces + %1 degenerated faces + %1 degenerated faces - No duplicated faces - No duplicated faces + No duplicated faces + No duplicated faces - %1 duplicated faces - %1 duplicated faces + %1 duplicated faces + %1 duplicated faces - No duplicated points - No duplicated points + No duplicated points + No duplicated points - Duplicated points - Duplicated points + Duplicated points + Duplicated points - Orientation - Orientation + Orientation + Orientation - Indices - Indices + Indices + Indices - Degenerations - Degenerations + Degenerations + Degenerations - Duplicated faces - Duplicated faces + Duplicated faces + Duplicated faces - No self-intersections - No self-intersections + No self-intersections + No self-intersections - Self-intersections - Self-intersections + Self-intersections + Self-intersections - Mesh repair - Mesh repair + Mesh repair + Mesh repair - Flipped normals found - Flipped normals found + Flipped normals found + Flipped normals found - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - No folds on surface - No folds on surface + No folds on surface + No folds on surface - %1 folds on surface - %1 folds on surface + %1 folds on surface + %1 folds on surface - Folds - Folds + Folds + Folds - - + + MeshGui::DlgRegularSolid - Regular Solid - Regular Solid + Regular Solid + Regular Solid - &Create - &Create + &Create + &Create - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Sulje + Cl&ose + Sulje - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Solid: + Solid: + Solid: - Cube - Cube + Cube + Cube - Cylinder - Cylinder + Cylinder + Cylinder - Cone - Cone + Cone + Cone - Sphere - Sphere + Sphere + Sphere - Ellipsoid - Ellipsoid + Ellipsoid + Ellipsoid - Torus - Torus + Torus + Torus - Height: - Height: + Height: + Height: - Length: - Length: + Length: + Length: - Width: - Width: + Width: + Width: - Radius: - Radius: + Radius: + Radius: - Closed - Closed + Closed + Closed - Sampling: - Sampling: + Sampling: + Sampling: - Edge length: - Edge length: + Edge length: + Edge length: - Radius 1: - Radius 1: + Radius 1: + Radius 1: - Radius 2: - Radius 2: + Radius 2: + Radius 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Create %1 + Create %1 + Create %1 - No active document - No active document + No active document + No active document - - + + MeshGui::DlgSettingsMeshView - Mesh view - Mesh view + Mesh view + Mesh view - Two-side rendering - Two-side rendering + Two-side rendering + Two-side rendering - Backface color - Backface color + Backface color + Backface color - Smoothing - Smoothing + Smoothing + Smoothing - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - Crease angle - Crease angle + Crease angle + Crease angle - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Define normal per vertex + Define normal per vertex + Define normal per vertex + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Default appearance for new meshes - Default appearance for new meshes - Default appearance for new meshes + Default line color + Default line color - Default line color - Default line color + Mesh transparency + Mesh transparency - Mesh transparency - Mesh transparency + Default mesh color + Default mesh color - Default mesh color - Default mesh color + Show bounding-box for highlighted or selected meshes + Show bounding-box for highlighted or selected meshes - Show bounding-box for highlighted or selected meshes - Show bounding-box for highlighted or selected meshes + Line transparency + Line transparency - - Line transparency - Line transparency - - - + + MeshGui::DlgSmoothing - Smoothing - Smoothing + Smoothing + Smoothing - Method - Method + Method + Method - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parameter + Parameter + Parameter - Iterations: - Iterations: + Iterations: + Iterations: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Add triangle + Add triangle + Add triangle - Flip normal - Flip normal + Flip normal + Flip normal - Clear - Tyhjennä + Clear + Tyhjennä - Finish - Valmis + Finish + Valmis - - + + MeshGui::RemoveComponents - Remove components - Remove components + Remove components + Remove components - Select - Valitse + Select + Valitse - Select whole component - Select whole component + Select whole component + Select whole component - Pick triangle - Pick triangle + Pick triangle + Pick triangle - < faces than - < faces than + < faces than + < faces than - Region - Region + Region + Region - Components - Components + Components + Components - All - All + All + All - Deselect - Deselect + Deselect + Deselect - Deselect whole component - Deselect whole component + Deselect whole component + Deselect whole component - > faces than - > faces than + > faces than + > faces than - Region options - Region options + Region options + Region options - Respect only triangles with normals facing screen - Respect only triangles with normals facing screen + Respect only triangles with normals facing screen + Respect only triangles with normals facing screen - Respect only visible triangles - Respect only visible triangles + Respect only visible triangles + Respect only visible triangles - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cylinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sphere + + + MeshGui::TaskRemoveComponents - Delete - Poista + Delete + Poista - Invert - Invert + Invert + Invert - - + + QDockWidget - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - - + + QObject - Import mesh - Import mesh + Import mesh + Import mesh - Export mesh - Export mesh + Export mesh + Export mesh - Solid Mesh - Solid Mesh + Solid Mesh + Solid Mesh - Boundings - Boundings + Boundings + Boundings - Fill holes - Fill holes + Fill holes + Fill holes - Fill holes with maximum number of edges: - Fill holes with maximum number of edges: + Fill holes with maximum number of edges: + Fill holes with maximum number of edges: - Binary STL (*.stl) - Binary STL (*.stl) + Binary STL (*.stl) + Binary STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Binary Mesh (*.bms) + Binary Mesh (*.bms) + Binary Mesh (*.bms) - Alias Mesh (*.obj) - Alias Mesh (*.obj) + Alias Mesh (*.obj) + Alias Mesh (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Kaikki tiedostot (*.*) + All Files (*.*) + Kaikki tiedostot (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Compressed VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python module def (*.py) + Python module def (*.py) + Python module def (*.py) - Meshing Tolerance - Meshing Tolerance + Meshing Tolerance + Meshing Tolerance - Enter tolerance for meshing geometry: - Enter tolerance for meshing geometry: + Enter tolerance for meshing geometry: + Enter tolerance for meshing geometry: - The mesh '%1' is a solid. - The mesh '%1' is a solid. + The mesh '%1' is a solid. + The mesh '%1' is a solid. - The mesh '%1' is not a solid. - The mesh '%1' is not a solid. + The mesh '%1' is not a solid. + The mesh '%1' is not a solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] - Leave info mode - Leave info mode + Leave info mode + Leave info mode - Index: %1 - Index: %1 + Index: %1 + Index: %1 - Leave hole-filling mode - Leave hole-filling mode + Leave hole-filling mode + Leave hole-filling mode - Leave removal mode - Leave removal mode + Leave removal mode + Leave removal mode - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Delete selected faces + Delete selected faces + Delete selected faces - Clear selected faces - Clear selected faces + Clear selected faces + Clear selected faces - Annotation - Annotation + Annotation + Annotation - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analyze + Analyze + Analyze - Boolean - Boolean + Boolean + Boolean - &Meshes - &Meshes + &Meshes + &Meshes - Mesh tools - Mesh tools + Mesh tools + Mesh tools - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_fr.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_fr.ts index 9f52b365d..f8ba8ba46 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_fr.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_fr.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Maillage + Mesh + Maillage - Add triangle - Ajouter un triangle + Add triangle + Ajouter un triangle - Add triangle manually to a mesh - Ajouter manuellement un triangle à une maille + Add triangle manually to a mesh + Ajouter manuellement un triangle à une maille - - + + CmdMeshBoundingBox - Mesh - Maillage + Mesh + Maillage - Boundings info... - Dimensions extérieures... + Boundings info... + Dimensions extérieures... - Shows the boundings of the selected mesh - Affiche les dimensions englobantes du maillage sélectionné + Shows the boundings of the selected mesh + Affiche les dimensions englobantes du maillage sélectionné - - + + CmdMeshBuildRegularSolid - Mesh - Maillage + Mesh + Maillage - Regular solid... - Solide régulier... + Regular solid... + Solide régulier... - Builds a regular solid - Construire un solide régulier + Builds a regular solid + Construire un solide régulier - - + + CmdMeshDemolding - Interactive demolding direction - Direction de démoulage interactive + Interactive demolding direction + Direction de démoulage interactive - Mesh - Maillage + Mesh + Maillage - - + + CmdMeshDifference - Mesh - Maillage + Mesh + Maillage - Difference - Différence + Difference + Différence - - + + CmdMeshEvaluateFacet - Mesh - Maillage + Mesh + Maillage - Face info - Infos sur la face + Face info + Infos sur la face - Information about face - Informations sur la face + Information about face + Informations sur la face - - + + CmdMeshEvaluateSolid - Mesh - Maillage + Mesh + Maillage - Check solid mesh - Vérifier le maillage solide + Check solid mesh + Vérifier le maillage solide - Checks whether the mesh is a solid - Vérifie si le maillage est un solide + Checks whether the mesh is a solid + Vérifie si le maillage est un solide - - + + CmdMeshEvaluation - Mesh - Maillage + Mesh + Maillage - Opens a dialog to analyze and repair a mesh - Ouvre une fenêtre permettant d'analyser et de réparer un maillage + Opens a dialog to analyze and repair a mesh + Ouvre une fenêtre permettant d'analyser et de réparer un maillage - Evaluate && Repair mesh... - Évaluer et réparer un maillage... + Evaluate && Repair mesh... + Évaluer et réparer un maillage... - - + + CmdMeshExMakeMesh - Mesh - Maillage + Mesh + Maillage - Make a Box - Créer un cube + Make a Box + Créer un cube - - + + CmdMeshExMakeTool - Mesh - Maillage + Mesh + Maillage - Make a Tool - Créer un outil + Make a Tool + Créer un outil - - + + CmdMeshExMakeUnion - Mesh - Maillage + Mesh + Maillage - Make Union - Union + Make Union + Union - - + + CmdMeshExport - Mesh - Maillage + Mesh + Maillage - Export mesh... - Exporter le maillage... + Export mesh... + Exporter le maillage... - Exports a mesh to file - Exporte le maillage dans un fichier + Exports a mesh to file + Exporte le maillage dans un fichier - - + + CmdMeshFillInteractiveHole - Mesh - Maillage + Mesh + Maillage - Close hole - Boucher un trou + Close hole + Boucher un trou - Close holes interactively - Bouche un trou de manière interactive + Close holes interactively + Bouche un trou de manière interactive - - + + CmdMeshFillupHoles - Mesh - Maillage + Mesh + Maillage - Fill holes... - Remplir les trous... + Fill holes... + Remplir les trous... - Fill holes of the mesh - Remplit un trou de manière interactive + Fill holes of the mesh + Remplit un trou de manière interactive - - + + CmdMeshFlipNormals - Mesh - Maillage + Mesh + Maillage - Flip normals - Inverser les normales + Flip normals + Inverser les normales - Flips the normals of the mesh - Inverse les normales du maillage + Flips the normals of the mesh + Inverse les normales du maillage - - + + CmdMeshFromGeometry - Mesh - Maillage + Mesh + Maillage - Create mesh from geometry... - Créer un maillage depuis une géométrie... + Create mesh from geometry... + Créer un maillage depuis une géométrie... - Create mesh from the selected geometry - Crée un maillage à partir de la géométrie sélectionnée + Create mesh from the selected geometry + Crée un maillage à partir de la géométrie sélectionnée - - + + CmdMeshHarmonizeNormals - Mesh - Maillage + Mesh + Maillage - Harmonize normals - Harmoniser les normales + Harmonize normals + Harmoniser les normales - Harmonizes the normals of the mesh - Harmonise les normales du maillage + Harmonizes the normals of the mesh + Harmonise les normales du maillage - - + + CmdMeshImport - Mesh - Maillage + Mesh + Maillage - Import mesh... - Importer un maillage... + Import mesh... + Importer un maillage... - Imports a mesh from file - Importe un maillage depuis un fichier + Imports a mesh from file + Importe un maillage depuis un fichier - - + + CmdMeshIntersection - Mesh - Maillage + Mesh + Maillage - Intersection - Intersection + Intersection + Intersection - - + + CmdMeshPolyCut - Mesh - Maillage + Mesh + Maillage - Cut mesh - Couper le maillage + Cut mesh + Couper le maillage - Cuts a mesh with a picked polygon - Coupe un maillage à l'aide du polygone sélectionné + Cuts a mesh with a picked polygon + Coupe un maillage à l'aide du polygone sélectionné - - + + CmdMeshPolySegm - Mesh - Maillage + Mesh + Maillage - Make segment - Créer un segment + Make segment + Créer un segment - Creates a mesh segment - Crée un segment de maillage + Creates a mesh segment + Crée un segment de maillage - - + + CmdMeshPolySelect - Mesh - Maillage + Mesh + Maillage - Select mesh - Sélectionnez un maillage + Select mesh + Sélectionnez un maillage - Select an area of the mesh - Sélectionnez une zone du maillage + Select an area of the mesh + Sélectionnez une zone du maillage - - + + CmdMeshPolySplit - Mesh - Maillage + Mesh + Maillage - Split mesh - Diviser un maillage + Split mesh + Diviser un maillage - Splits a mesh into two meshes - Divise un maillage en deux + Splits a mesh into two meshes + Divise un maillage en deux - - + + + CmdMeshPolyTrim + + Mesh + Maillage + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Maillage + Mesh + Maillage - Remove components by hand... - Supprimer manuellement des composants... + Remove components by hand... + Supprimer manuellement des composants... - Mark a component to remove it from the mesh - Marque un composant pour le supprimer du maillage + Mark a component to remove it from the mesh + Marque un composant pour le supprimer du maillage - - + + CmdMeshRemoveComponents - Mesh - Maillage + Mesh + Maillage - Remove components... - Supprimer des composants... + Remove components... + Supprimer des composants... - Remove topologic independent components from the mesh - Supprimer les composants de topologie indépendants du maillage + Remove topologic independent components from the mesh + Supprimer les composants de topologie indépendants du maillage - - + + + CmdMeshSegmentation + + Mesh + Maillage + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Maillage + Mesh + Maillage - Smooth... - Lisser... + Smooth... + Lisser... - Smooth the selected meshes - Lisse les maillages sélectionnés + Smooth the selected meshes + Lisse les maillages sélectionnés - - + + CmdMeshToolMesh - Mesh - Maillage + Mesh + Maillage - Segment by tool mesh - Segment à partir d'un maillage + Segment by tool mesh + Segment à partir d'un maillage - Creates a segment from a given tool mesh - Crée un segment à l'aide d'un outil de maillage + Creates a segment from a given tool mesh + Crée un segment à l'aide d'un outil de maillage - - + + CmdMeshTransform - Mesh - Maillage + Mesh + Maillage - Transform mesh - Transformer le maillage + Transform mesh + Transformer le maillage - Rotate or move a mesh - Rotation ou déplacement du maillage + Rotate or move a mesh + Rotation ou déplacement du maillage - - + + CmdMeshUnion - Mesh - Maillage + Mesh + Maillage - Union - Union + Union + Union - - + + CmdMeshVertexCurvature - Mesh - Maillage + Mesh + Maillage - Calculates the curvature of the vertices of a mesh - Calcule la courbure des sommets du maillage + Calculates the curvature of the vertices of a mesh + Calcule la courbure des sommets du maillage - Curvature plot - Tracé de courbure + Curvature plot + Tracé de courbure - - + + CmdMeshVertexCurvatureInfo - Mesh - Maillage + Mesh + Maillage - Curvature info - Infos de courbure + Curvature info + Infos de courbure - Information about curvature - Informations sur la courbure + Information about curvature + Informations sur la courbure - - + + MeshGui::DlgEvaluateMesh - &Help - &Aide + &Help + &Aide - F1 - F1 + F1 + F1 - &Close - &Fermer + &Close + &Fermer - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Informations sur le maillage + Mesh information + Informations sur le maillage - No information - Aucune information + No information + Aucune information - Number of points: - Nombre de points : + Number of points: + Nombre de points : - Number of edges: - Nombre de contours : + Number of edges: + Nombre de contours : - Refresh - Actualiser + Refresh + Actualiser - Analyze - Analyser + Analyze + Analyser - Repair - Réparer + Repair + Réparer - Orientation - Orientation + Orientation + Orientation - Degenerated faces - Faces dégénérées + Degenerated faces + Faces dégénérées - Face indices - Indices des faces + Face indices + Indices des faces - Number of faces: - Nombre de faces : + Number of faces: + Nombre de faces : - Duplicated faces - Faces dupliquées + Duplicated faces + Faces dupliquées - Duplicated points - Points dupliqués + Duplicated points + Points dupliqués - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Self-intersections - Collisions internes + Self-intersections + Collisions internes - All above tests together - Tous les tests ensemble + All above tests together + Tous les tests ensemble - Repetitive repair - Réparation répétitive + Repetitive repair + Réparation répétitive - Evaluate & Repair Mesh - Évaluer et réparer un maillage + Evaluate & Repair Mesh + Évaluer et réparer un maillage - Folds on surface - Plis sur la surface + Folds on surface + Plis sur la surface - - + + MeshGui::DlgEvaluateMeshImp - No information - Aucune information + No information + Aucune information - Invalid neighbour indices - Indices voisins invalides + Invalid neighbour indices + Indices voisins invalides - Invalid face indices - Indices de face invalides + Invalid face indices + Indices de face invalides - Invalid point indices - Indices de point invalides + Invalid point indices + Indices de point invalides - Multiple point indices - Indices de point multiples + Multiple point indices + Indices de point multiples - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Cannot remove non-manifolds - Impossible de supprimer les non-manifolds + Cannot remove non-manifolds + Impossible de supprimer les non-manifolds - No selection - Aucune sélection + No selection + Aucune sélection - No flipped normals - Aucune normale inversée + No flipped normals + Aucune normale inversée - %1 flipped normals - %1 normales inversées + %1 flipped normals + %1 normales inversées - No non-manifolds - Aucun non-manifold + No non-manifolds + Aucun non-manifold - %1 non-manifolds - %1 non-manifolds + %1 non-manifolds + %1 non-manifolds - No invalid indices - Aucun indice invalide + No invalid indices + Aucun indice invalide - No degenerations - Aucune dégénération + No degenerations + Aucune dégénération - %1 degenerated faces - %1 faces dégénérées + %1 degenerated faces + %1 faces dégénérées - No duplicated faces - Aucune face dupliquée + No duplicated faces + Aucune face dupliquée - %1 duplicated faces - %1 faces dupliquées + %1 duplicated faces + %1 faces dupliquées - No duplicated points - Aucun point dupliqué + No duplicated points + Aucun point dupliqué - Duplicated points - Points dupliqués + Duplicated points + Points dupliqués - Orientation - Orientation + Orientation + Orientation - Indices - Indices + Indices + Indices - Degenerations - Dégénérations + Degenerations + Dégénérations - Duplicated faces - Faces dupliquées + Duplicated faces + Faces dupliquées - No self-intersections - Aucune collision interne + No self-intersections + Aucune collision interne - Self-intersections - Collisions internes + Self-intersections + Collisions internes - Mesh repair - Réparer le maillage + Mesh repair + Réparer le maillage - Flipped normals found - Normales inversées trouvées + Flipped normals found + Normales inversées trouvées - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Vérification échouée en raison de plis sur la surface. Exécutez d'abord la commande "réparer les plis" + Vérification échouée en raison de plis sur la surface. Exécutez d'abord la commande "réparer les plis" - No folds on surface - Aucun pli sur la surface + No folds on surface + Aucun pli sur la surface - %1 folds on surface - %1 plis sur la surface + %1 folds on surface + %1 plis sur la surface - Folds - Plis + Folds + Plis - - + + MeshGui::DlgRegularSolid - Regular Solid - Solide régulier + Regular Solid + Solide régulier - &Create - &Créer + &Create + &Créer - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - &Fermer + Cl&ose + &Fermer - Alt+O - Alt+F + Alt+O + Alt+F - Solid: - Solide : + Solid: + Solide : - Cube - Cube + Cube + Cube - Cylinder - Cylindre + Cylinder + Cylindre - Cone - Cône + Cone + Cône - Sphere - Sphère + Sphere + Sphère - Ellipsoid - Ellipsoïde + Ellipsoid + Ellipsoïde - Torus - Tore + Torus + Tore - Height: - Hauteur : + Height: + Hauteur : - Length: - Longueur : + Length: + Longueur : - Width: - Largeur : + Width: + Largeur : - Radius: - Rayon : + Radius: + Rayon : - Closed - Fermé + Closed + Fermé - Sampling: - Numérisation : + Sampling: + Numérisation : - Edge length: - Longueur du contour : + Edge length: + Longueur du contour : - Radius 1: - Rayon 1 : + Radius 1: + Rayon 1 : - Radius 2: - Rayon 2 : + Radius 2: + Rayon 2 : - - + + MeshGui::DlgRegularSolidImp - Create %1 - Créer %1 + Create %1 + Créer %1 - No active document - Aucun document actif + No active document + Aucun document actif - - + + MeshGui::DlgSettingsMeshView - Mesh view - Vue du maillage + Mesh view + Vue du maillage - Two-side rendering - Rendu biface + Two-side rendering + Rendu biface - Backface color - Couleur de la face arrière + Backface color + Couleur de la face arrière - Smoothing - Lissage + Smoothing + Lissage - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Il s'agit du plus petit angle entre deux faces dont les normales sont calculées pour un ombrage plat.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si l'angle entre les normales de deux faces voisines est plus petit que l'angle de pliage, les faces seront traitées en ombrage lissé autour de leur arête commune.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Il s'agit du plus petit angle entre deux faces dont les normales sont calculées pour un ombrage plat.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si l'angle entre les normales de deux faces voisines est plus petit que l'angle de pliage, les faces seront traitées en ombrage lissé autour de leur arête commune.</p></body></html> - Crease angle - Angle de pliage + Crease angle + Angle de pliage - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Ombrage plat/Ombrage Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Définit l'apparence des surfaces</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Avec l'ombrage plat, les normales des surfaces ne sont pas définies par vertex, ce qui entraîne une apparence irréelle des surfaces courbes, alors que l'ombrage Phong produit une apparence plus lisse. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si cette option est activée, l'ombrage Phong sera utilisé, sinon l'ombrage plat sera utilisé.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Ombrage plat/Ombrage Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Définit l'apparence des surfaces</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Avec l'ombrage plat, les normales des surfaces ne sont pas définies par vertex, ce qui entraîne une apparence irréelle des surfaces courbes, alors que l'ombrage Phong produit une apparence plus lisse. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si cette option est activée, l'ombrage Phong sera utilisé, sinon l'ombrage plat sera utilisé.</p></body></html> - Define normal per vertex - Définir les normales par vertex + Define normal per vertex + Définir les normales par vertex + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Définir les normales par vertex est aussi appelé <span style=" font-style:italic;">ombrage Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">alors que définir les normales par face est appelé</span>ombrage plat<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Définir les normales par vertex est aussi appelé <span style=" font-style:italic;">ombrage Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">alors que définir les normales par face est appelé</span>ombrage plat<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Apparence par défaut pour les nouveaux maillages - Default appearance for new meshes - Apparence par défaut pour les nouveaux maillages + Default line color + Couleur de ligne par défaut - Default line color - Couleur de ligne par défaut + Mesh transparency + Transparence des maillages - Mesh transparency - Transparence des maillages + Default mesh color + Couleur par défaut des maillages - Default mesh color - Couleur par défaut des maillages + Show bounding-box for highlighted or selected meshes + Afficher le volume capable des mailles en surbrillance ou sélectionnées - Show bounding-box for highlighted or selected meshes - Afficher le volume capable des mailles en surbrillance ou sélectionnées + Line transparency + Transparence de ligne - - Line transparency - Transparence de ligne - - - + + MeshGui::DlgSmoothing - Smoothing - Lissage + Smoothing + Lissage - Method - Méthode + Method + Méthode - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Paramètre + Parameter + Paramètre - Iterations: - Itérations : + Iterations: + Itérations : - Lambda: - Lambda : + Lambda: + Lambda : - Mu: - Mu : + Mu: + Mu : - - + + MeshGui::MeshFaceAddition - Add triangle - Ajouter un triangle + Add triangle + Ajouter un triangle - Flip normal - Inverser les normales + Flip normal + Inverser les normales - Clear - Effacer + Clear + Effacer - Finish - Terminer + Finish + Terminer - - + + MeshGui::RemoveComponents - Remove components - Supprimer des composants + Remove components + Supprimer des composants - Select - Sélectionner + Select + Sélectionner - Select whole component - Sélectionner le composant entier + Select whole component + Sélectionner le composant entier - Pick triangle - Choisissez un triangle + Pick triangle + Choisissez un triangle - < faces than - < de faces que + < faces than + < de faces que - Region - Région + Region + Région - Components - Composants + Components + Composants - All - Tous + All + Tous - Deselect - Dé-sélectionner + Deselect + Dé-sélectionner - Deselect whole component - Dé-sélectionner le composant entier + Deselect whole component + Dé-sélectionner le composant entier - > faces than - > de faces que + > faces than + > de faces que - Region options - Options de région + Region options + Options de région - Respect only triangles with normals facing screen - Respecter seulement les triangles dont les normales font face à écran + Respect only triangles with normals facing screen + Respecter seulement les triangles dont les normales font face à écran - Respect only visible triangles - Respecter uniquement les triangles visibles + Respect only visible triangles + Respecter uniquement les triangles visibles - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cylindre + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sphère + + + MeshGui::TaskRemoveComponents - Delete - Supprimer + Delete + Supprimer - Invert - Inverser + Invert + Inverser - - + + QDockWidget - Evaluate & Repair Mesh - Évaluer et réparer un maillage + Evaluate & Repair Mesh + Évaluer et réparer un maillage - - + + QObject - Import mesh - Importer un maillage + Import mesh + Importer un maillage - Export mesh - Exporter un maillage + Export mesh + Exporter un maillage - Solid Mesh - Maillage solide + Solid Mesh + Maillage solide - Boundings - Limites englobantes + Boundings + Limites englobantes - Fill holes - Remplir les trous + Fill holes + Remplir les trous - Fill holes with maximum number of edges: - Remplir les trous avec un nombre maximum de contours : + Fill holes with maximum number of edges: + Remplir les trous avec un nombre maximum de contours : - Binary STL (*.stl) - STL binaire (*.stl) + Binary STL (*.stl) + STL binaire (*.stl) - ASCII STL (*.ast) - STL ASCII (*.ast) + ASCII STL (*.ast) + STL ASCII (*.ast) - Binary Mesh (*.bms) - Maillage binaire (*.bms) + Binary Mesh (*.bms) + Maillage binaire (*.bms) - Alias Mesh (*.obj) - Maillage Alias (*.obj) + Alias Mesh (*.obj) + Maillage Alias (*.obj) - Inventor V2.1 ascii (*.iv) - ASCII Inventor V2.1 (*.iv) + Inventor V2.1 ascii (*.iv) + ASCII Inventor V2.1 (*.iv) - All Files (*.*) - Tous les fichiers (*.*) + All Files (*.*) + Tous les fichiers (*.*) - ASCII STL (*.stl) - STL ASCII (*.stl) + ASCII STL (*.stl) + STL ASCII (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - VRML 2.0 compressé (*.wrz) + Compressed VRML 2.0 (*.wrz) + VRML 2.0 compressé (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Module Python(*.py) + Python module def (*.py) + Module Python(*.py) - Meshing Tolerance - Tolérance de maillage + Meshing Tolerance + Tolérance de maillage - Enter tolerance for meshing geometry: - Saisir la tolérance pour la géométrie maillée : + Enter tolerance for meshing geometry: + Saisir la tolérance pour la géométrie maillée : - The mesh '%1' is a solid. - Le maillage '%1' est un solide. + The mesh '%1' is a solid. + Le maillage '%1' est un solide. - The mesh '%1' is not a solid. - Le maillage '%1' n'est pas un solide. + The mesh '%1' is not a solid. + Le maillage '%1' n'est pas un solide. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Points: %1, Contours: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Contours: %2 Faces: %3] - Leave info mode - Quitter le mode d'information + Leave info mode + Quitter le mode d'information - Index: %1 - Index : %1 + Index: %1 + Index : %1 - Leave hole-filling mode - Quitter le mode de remplissage des trous + Leave hole-filling mode + Quitter le mode de remplissage des trous - Leave removal mode - Quitter le mode de suppression + Leave removal mode + Quitter le mode de suppression - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Tous les fichiers de maillage (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Tous les fichiers de maillage (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Polygone de Stanford (*.ply) + Stanford Polygon (*.ply) + Polygone de Stanford (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Supprimer les faces sélectionnées + Delete selected faces + Supprimer les faces sélectionnées - Clear selected faces - Dé-sélectionner les faces sélectionnées + Clear selected faces + Dé-sélectionner les faces sélectionnées - Annotation - Annotation + Annotation + Annotation - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analyser + Analyze + Analyser - Boolean - Opération booléenne + Boolean + Opération booléenne - &Meshes - &Maillages + &Meshes + &Maillages - Mesh tools - Outils de maillage + Mesh tools + Outils de maillage - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_hr.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_hr.ts index 2c1ee1084..6aa72e06d 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_hr.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_hr.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - Mreža + Mesh + Mreža - Add triangle - Dodaj trokut + Add triangle + Dodaj trokut - Add triangle manually to a mesh - Ručno dodaj trokut mreži + Add triangle manually to a mesh + Ručno dodaj trokut mreži - - + + CmdMeshBoundingBox - Mesh - Mreža + Mesh + Mreža - Boundings info... - Informacije o granicama... + Boundings info... + Informacije o granicama... - Shows the boundings of the selected mesh - Prikazuje granicu odabrane mreže + Shows the boundings of the selected mesh + Prikazuje granicu odabrane mreže - - + + CmdMeshBuildRegularSolid - Mesh - Mreža + Mesh + Mreža - Regular solid... - Obično tijelo... + Regular solid... + Obično tijelo... - Builds a regular solid - Kreira obično tijelo + Builds a regular solid + Kreira obično tijelo - - + + CmdMeshDemolding - Interactive demolding direction - Smjer interaktivnog oblikovanja + Interactive demolding direction + Smjer interaktivnog oblikovanja - Mesh - Mreža + Mesh + Mreža - - + + CmdMeshDifference - Mesh - Mreža + Mesh + Mreža - Difference - Razlika + Difference + Razlika - - + + CmdMeshEvaluateFacet - Mesh - Mreža + Mesh + Mreža - Face info - Informacije površine + Face info + Informacije površine - Information about face - Informacije o površini + Information about face + Informacije o površini - - + + CmdMeshEvaluateSolid - Mesh - Mreža + Mesh + Mreža - Check solid mesh - Provjerite tijelo MESH-a + Check solid mesh + Provjerite tijelo MESH-a - Checks whether the mesh is a solid - Provjerava je li MESH tijelo + Checks whether the mesh is a solid + Provjerava je li MESH tijelo - - + + CmdMeshEvaluation - Mesh - Mreža + Mesh + Mreža - Opens a dialog to analyze and repair a mesh - Otvara dijalog za analizu i popravak MESH-a + Opens a dialog to analyze and repair a mesh + Otvara dijalog za analizu i popravak MESH-a - Evaluate && Repair mesh... - Procijeni i Pop&ravi MESH... + Evaluate && Repair mesh... + Procijeni i Pop&ravi MESH... - - + + CmdMeshExMakeMesh - Mesh - Mreža + Mesh + Mreža - Make a Box - Napravi kvadar + Make a Box + Napravi kvadar - - + + CmdMeshExMakeTool - Mesh - Mreža + Mesh + Mreža - Make a Tool - Napravi Alat + Make a Tool + Napravi Alat - - + + CmdMeshExMakeUnion - Mesh - Mreža + Mesh + Mreža - Make Union - Napravi uniju + Make Union + Napravi uniju - - + + CmdMeshExport - Mesh - Mreža + Mesh + Mreža - Export mesh... - Izvoz MESH-a... + Export mesh... + Izvoz MESH-a... - Exports a mesh to file - Izvoz MESH-a u datoteku + Exports a mesh to file + Izvoz MESH-a u datoteku - - + + CmdMeshFillInteractiveHole - Mesh - Mreža + Mesh + Mreža - Close hole - Zatvori rupe + Close hole + Zatvori rupe - Close holes interactively - Zatvori rupe interaktivno + Close holes interactively + Zatvori rupe interaktivno - - + + CmdMeshFillupHoles - Mesh - Mreža + Mesh + Mreža - Fill holes... - Ispuni rupe... + Fill holes... + Ispuni rupe... - Fill holes of the mesh - Ispuni rupe MESH-a + Fill holes of the mesh + Ispuni rupe MESH-a - - + + CmdMeshFlipNormals - Mesh - Mreža + Mesh + Mreža - Flip normals - Zrcali normale + Flip normals + Zrcali normale - Flips the normals of the mesh - Zrcali normale MESH-a + Flips the normals of the mesh + Zrcali normale MESH-a - - + + CmdMeshFromGeometry - Mesh - Mreža + Mesh + Mreža - Create mesh from geometry... - Stvaranje MESH iz geometrije ... + Create mesh from geometry... + Stvaranje MESH iz geometrije ... - Create mesh from the selected geometry - Stvori MESH od odabranih objekata + Create mesh from the selected geometry + Stvori MESH od odabranih objekata - - + + CmdMeshHarmonizeNormals - Mesh - Mreža + Mesh + Mreža - Harmonize normals - Uskladi normale + Harmonize normals + Uskladi normale - Harmonizes the normals of the mesh - Usklađuje normale MESH-a + Harmonizes the normals of the mesh + Usklađuje normale MESH-a - - + + CmdMeshImport - Mesh - Mreža + Mesh + Mreža - Import mesh... - Uvezi MESH... + Import mesh... + Uvezi MESH... - Imports a mesh from file - Uvoz MESH-a iz datoteke + Imports a mesh from file + Uvoz MESH-a iz datoteke - - + + CmdMeshIntersection - Mesh - Mreža + Mesh + Mreža - Intersection - Presjek + Intersection + Presjek - - + + CmdMeshPolyCut - Mesh - Mreža + Mesh + Mreža - Cut mesh - Izreži MESH + Cut mesh + Izreži MESH - Cuts a mesh with a picked polygon - Presjeca MESH sa odabranim poligonom + Cuts a mesh with a picked polygon + Presjeca MESH sa odabranim poligonom - - + + CmdMeshPolySegm - Mesh - Mreža + Mesh + Mreža - Make segment - Stvori segment + Make segment + Stvori segment - Creates a mesh segment - Stvara segment MESH-a + Creates a mesh segment + Stvara segment MESH-a - - + + CmdMeshPolySelect - Mesh - Mreža + Mesh + Mreža - Select mesh - Odaberi MESH + Select mesh + Odaberi MESH - Select an area of the mesh - Odaberite područje MESH-a + Select an area of the mesh + Odaberite područje MESH-a - - + + CmdMeshPolySplit - Mesh - Mreža + Mesh + Mreža - Split mesh - Podjeli MESH + Split mesh + Podjeli MESH - Splits a mesh into two meshes - Podijeli MESH na dva dijela + Splits a mesh into two meshes + Podijeli MESH na dva dijela - - + + + CmdMeshPolyTrim + + Mesh + Mreža + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Mreža + Mesh + Mreža - Remove components by hand... - Ukloniti komponente ručno... + Remove components by hand... + Ukloniti komponente ručno... - Mark a component to remove it from the mesh - Označi komponenta koju želite uklonili iz MESH-a + Mark a component to remove it from the mesh + Označi komponenta koju želite uklonili iz MESH-a - - + + CmdMeshRemoveComponents - Mesh - Mreža + Mesh + Mreža - Remove components... - Ukloniti komponente... + Remove components... + Ukloniti komponente... - Remove topologic independent components from the mesh - Izvadite komponente neovisne o topologiji iz MESH-a + Remove topologic independent components from the mesh + Izvadite komponente neovisne o topologiji iz MESH-a - - + + + CmdMeshSegmentation + + Mesh + Mreža + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Mreža + Mesh + Mreža - Smooth... - Izgladi... + Smooth... + Izgladi... - Smooth the selected meshes - Izgladi odabrani MESH + Smooth the selected meshes + Izgladi odabrani MESH - - + + CmdMeshToolMesh - Mesh - Mreža + Mesh + Mreža - Segment by tool mesh - Segmentiraj pomoću MESH-a + Segment by tool mesh + Segmentiraj pomoću MESH-a - Creates a segment from a given tool mesh - Stvara segment iz danog alata MESH-a + Creates a segment from a given tool mesh + Stvara segment iz danog alata MESH-a - - + + CmdMeshTransform - Mesh - Mreža + Mesh + Mreža - Transform mesh - Transformacija MESH-a + Transform mesh + Transformacija MESH-a - Rotate or move a mesh - Zakretanje ili premještanje MESH-a + Rotate or move a mesh + Zakretanje ili premještanje MESH-a - - + + CmdMeshUnion - Mesh - Mreža + Mesh + Mreža - Union - Unija + Union + Unija - - + + CmdMeshVertexCurvature - Mesh - Mreža + Mesh + Mreža - Calculates the curvature of the vertices of a mesh - Izračunava zakrivljenost vrhova mreže + Calculates the curvature of the vertices of a mesh + Izračunava zakrivljenost vrhova mreže - Curvature plot - Iscrtavanje krivina + Curvature plot + Iscrtavanje krivina - - + + CmdMeshVertexCurvatureInfo - Mesh - Mreža + Mesh + Mreža - Curvature info - Informacije krivina + Curvature info + Informacije krivina - Information about curvature - Informacije o zakrivljenosti + Information about curvature + Informacije o zakrivljenosti - - + + MeshGui::DlgEvaluateMesh - &Help - &Pomoć + &Help + &Pomoć - F1 - F1 + F1 + F1 - &Close - &Zatvori + &Close + &Zatvori - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Informacije MESH-a + Mesh information + Informacije MESH-a - No information - Nema informacija + No information + Nema informacija - Number of points: - Broj vrhova: + Number of points: + Broj vrhova: - Number of edges: - Broj rubova: + Number of edges: + Broj rubova: - Refresh - Osvježi + Refresh + Osvježi - Analyze - Analiziraj + Analyze + Analiziraj - Repair - Popravak + Repair + Popravak - Orientation - Orijentacija + Orientation + Orijentacija - Degenerated faces - Degenerirane površine + Degenerated faces + Degenerirane površine - Face indices - Indeksi površina + Face indices + Indeksi površina - Number of faces: - Broj površina: + Number of faces: + Broj površina: - Duplicated faces - Dvostruke površine + Duplicated faces + Dvostruke površine - Duplicated points - Dvostruki vrhovi + Duplicated points + Dvostruki vrhovi - Non-manifolds - Jednostruki + Non-manifolds + Jednostruki - Self-intersections - Preklapanja + Self-intersections + Preklapanja - All above tests together - Sve gore testovi zajedno + All above tests together + Sve gore testovi zajedno - Repetitive repair - Ponavljajući popravak + Repetitive repair + Ponavljajući popravak - Evaluate & Repair Mesh - Procijeni & Popravi MESH + Evaluate & Repair Mesh + Procijeni & Popravi MESH - Folds on surface - Nabori na površini + Folds on surface + Nabori na površini - - + + MeshGui::DlgEvaluateMeshImp - No information - Nema informacija + No information + Nema informacija - Invalid neighbour indices - Nevažeći susjedni indeksi + Invalid neighbour indices + Nevažeći susjedni indeksi - Invalid face indices - Nevaljani indeksi površina + Invalid face indices + Nevaljani indeksi površina - Invalid point indices - Nevažeća točka indeksa + Invalid point indices + Nevažeća točka indeksa - Multiple point indices - Višestruki indeksi točaka + Multiple point indices + Višestruki indeksi točaka - Non-manifolds - Jednostruki + Non-manifolds + Jednostruki - Cannot remove non-manifolds - Ne mogu ukloniti jednostruke + Cannot remove non-manifolds + Ne mogu ukloniti jednostruke - No selection - Nema odabira + No selection + Nema odabira - No flipped normals - Nema zrcaljenih normala + No flipped normals + Nema zrcaljenih normala - %1 flipped normals - %1 zrcaljenih normala + %1 flipped normals + %1 zrcaljenih normala - No non-manifolds - Nema jednostrukih + No non-manifolds + Nema jednostrukih - %1 non-manifolds - %1 jednostrukih + %1 non-manifolds + %1 jednostrukih - No invalid indices - Nema nevažećih indeksa + No invalid indices + Nema nevažećih indeksa - No degenerations - Nema degeneracija + No degenerations + Nema degeneracija - %1 degenerated faces - %1 degeneriranih površina + %1 degenerated faces + %1 degeneriranih površina - No duplicated faces - Nema dvostrukih površina + No duplicated faces + Nema dvostrukih površina - %1 duplicated faces - %1 dvostrukih površina + %1 duplicated faces + %1 dvostrukih površina - No duplicated points - Nema dvostrukih točaka + No duplicated points + Nema dvostrukih točaka - Duplicated points - Dvostruki vrhovi + Duplicated points + Dvostruki vrhovi - Orientation - Orijentacija + Orientation + Orijentacija - Indices - Indeksi + Indices + Indeksi - Degenerations - Degeneracije + Degenerations + Degeneracije - Duplicated faces - Dvostruke površine + Duplicated faces + Dvostruke površine - No self-intersections - Nema prekalpanja + No self-intersections + Nema prekalpanja - Self-intersections - Preklapanja + Self-intersections + Preklapanja - Mesh repair - Popravi MESH + Mesh repair + Popravi MESH - Flipped normals found - Pronađene zrcaljene normale + Flipped normals found + Pronađene zrcaljene normale - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Provjera nije uspjela zbog nabora na površini. + Provjera nije uspjela zbog nabora na površini. Molimo pokrenite naredbu za popravak nabora - No folds on surface - Bez nabora na površini + No folds on surface + Bez nabora na površini - %1 folds on surface - %1 nabori na površini + %1 folds on surface + %1 nabori na površini - Folds - Sklapanje + Folds + Sklapanje - - + + MeshGui::DlgRegularSolid - Regular Solid - Obično tijelo + Regular Solid + Obično tijelo - &Create - &Izradi + &Create + &Izradi - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Za&tvori + Cl&ose + Za&tvori - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Čvrsto tijelo: + Solid: + Čvrsto tijelo: - Cube - Kocka + Cube + Kocka - Cylinder - Valjak + Cylinder + Valjak - Cone - Stožac + Cone + Stožac - Sphere - Kugla + Sphere + Kugla - Ellipsoid - Elipsoid + Ellipsoid + Elipsoid - Torus - Zavojnica + Torus + Zavojnica - Height: - Duljina: + Height: + Duljina: - Length: - Duljina: + Length: + Duljina: - Width: - Širina: + Width: + Širina: - Radius: - Polumjer: + Radius: + Polumjer: - Closed - Zatvoreno + Closed + Zatvoreno - Sampling: - Uzorkovanje: + Sampling: + Uzorkovanje: - Edge length: - Duljina ruba: + Edge length: + Duljina ruba: - Radius 1: - Polumjer 1: + Radius 1: + Polumjer 1: - Radius 2: - Polumjer 2: + Radius 2: + Polumjer 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Napravi %1 + Create %1 + Napravi %1 - No active document - Nema aktivnog dokumenta + No active document + Nema aktivnog dokumenta - - + + MeshGui::DlgSettingsMeshView - Mesh view - Pregled MESH-a + Mesh view + Pregled MESH-a - Two-side rendering - Dvostrano renderiranje + Two-side rendering + Dvostrano renderiranje - Backface color - Boja stražnje površine + Backface color + Boja stražnje površine - Smoothing - Izglađivanje + Smoothing + Izglađivanje - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> To je najmanji kut između dva lica gdje se normale izračunavaju za napraviti ravno sjenčanje. </p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Ako je kut između normale na dvije susjedne lica je manji od pregib kut, lica će biti smoothshaded oko njihove zajedničke ruba. </p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> To je najmanji kut između dva lica gdje se normale izračunavaju za napraviti ravno sjenčanje. </p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Ako je kut između normale na dvije susjedne lica je manji od pregib kut, lica će biti smoothshaded oko njihove zajedničke ruba. </p></body></html> - Crease angle - Nabor kuta + Crease angle + Nabor kuta - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Sa ravnim sjenčanjem normale površina nisu definiane po točkama što vodi do neprirodnog izgleda zakrivljenih površina, dok upotreba Phong sjenčanja vodi do boljeg izgleda. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Sa ravnim sjenčanjem normale površina nisu definiane po točkama što vodi do neprirodnog izgleda zakrivljenih površina, dok upotreba Phong sjenčanja vodi do boljeg izgleda. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Definiraj normalu po vrhu + Define normal per vertex + Definiraj normalu po vrhu + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Savjet</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Definiranje normale na vrh je također pozvao <span style=" font-style:italic;">Phong sjenčanje</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">pri definiranju normale po licu se zove</span> Stan <span style=" font-style:normal;">sjenčanje.</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Savjet</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Definiranje normale na vrh je također pozvao <span style=" font-style:italic;">Phong sjenčanje</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">pri definiranju normale po licu se zove</span> Stan <span style=" font-style:normal;">sjenčanje.</span> </p></body></html> + Default appearance for new meshes + Inicijalni izgled za nove MESH-eve - Default appearance for new meshes - Inicijalni izgled za nove MESH-eve + Default line color + Zadana boja linije - Default line color - Zadana boja linije + Mesh transparency + Transparentnost MESH-a - Mesh transparency - Transparentnost MESH-a + Default mesh color + Zadana boja MESH-a - Default mesh color - Zadana boja MESH-a + Show bounding-box for highlighted or selected meshes + Pokaži graničnu kutiju za istaknute ili odabrane mreže - Show bounding-box for highlighted or selected meshes - Pokaži graničnu kutiju za istaknute ili odabrane mreže + Line transparency + Transparentnost linije - - Line transparency - Transparentnost linije - - - + + MeshGui::DlgSmoothing - Smoothing - Izglađivanje + Smoothing + Izglađivanje - Method - Metoda + Method + Metoda - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parametar + Parameter + Parametar - Iterations: - Iteracije: + Iterations: + Iteracije: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Dodaj trokut + Add triangle + Dodaj trokut - Flip normal - Okreni normalu + Flip normal + Okreni normalu - Clear - Brisanje + Clear + Brisanje - Finish - Završiti + Finish + Završiti - - + + MeshGui::RemoveComponents - Remove components - Ukloniti komponente + Remove components + Ukloniti komponente - Select - Odaberite + Select + Odaberite - Select whole component - Odznači cijelu komponentu + Select whole component + Odznači cijelu komponentu - Pick triangle - Odaberite trokut + Pick triangle + Odaberite trokut - < faces than - < lica od + < faces than + < lica od - Region - Regija + Region + Regija - Components - Komponente + Components + Komponente - All - Sve + All + Sve - Deselect - Odznači + Deselect + Odznači - Deselect whole component - Odznači cijelu komponentu + Deselect whole component + Odznači cijelu komponentu - > faces than - > lica od + > faces than + > lica od - Region options - Opcije regija + Region options + Opcije regija - Respect only triangles with normals facing screen - Poštovanje samo trokuta s normalama prema zaslonu + Respect only triangles with normals facing screen + Poštovanje samo trokuta s normalama prema zaslonu - Respect only visible triangles - Poštovanje jedino vidljivih trokuta + Respect only visible triangles + Poštovanje jedino vidljivih trokuta - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Valjak + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Kugla + + + MeshGui::TaskRemoveComponents - Delete - Izbriši + Delete + Izbriši - Invert - Invertiraj + Invert + Invertiraj - - + + QDockWidget - Evaluate & Repair Mesh - Procijeni & Popravi MESH + Evaluate & Repair Mesh + Procijeni & Popravi MESH - - + + QObject - Import mesh - Uvezi mrežu + Import mesh + Uvezi mrežu - Export mesh - Izvezi mrežu + Export mesh + Izvezi mrežu - Solid Mesh - Čvrsta mreža + Solid Mesh + Čvrsta mreža - Boundings - Granice + Boundings + Granice - Fill holes - Ispuni rupe + Fill holes + Ispuni rupe - Fill holes with maximum number of edges: - Ispunite rupe s maksimalnim brojem rubova: + Fill holes with maximum number of edges: + Ispunite rupe s maksimalnim brojem rubova: - Binary STL (*.stl) - Binarni STL (*.STL) + Binary STL (*.stl) + Binarni STL (*.STL) - ASCII STL (*.ast) - ASCII STL (*.AST) + ASCII STL (*.ast) + ASCII STL (*.AST) - Binary Mesh (*.bms) - Binarni MESH (*.BMS) + Binary Mesh (*.bms) + Binarni MESH (*.BMS) - Alias Mesh (*.obj) - Alias MESH (*.obj) + Alias Mesh (*.obj) + Alias MESH (*.obj) - Inventor V2.1 ascii (*.iv) - Izumitelj V2.1 ASCII (*.iv) + Inventor V2.1 ascii (*.iv) + Izumitelj V2.1 ASCII (*.iv) - All Files (*.*) - Sve datoteke (*.*) + All Files (*.*) + Sve datoteke (*.*) - ASCII STL (*.stl) - ASCII STL (*.STL) + ASCII STL (*.stl) + ASCII STL (*.STL) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Komprimirani VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Komprimirani VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.NAS *.BDF) + Nastran (*.nas *.bdf) + Nastran (*.NAS *.BDF) - Python module def (*.py) - Python modul (*.py) + Python module def (*.py) + Python modul (*.py) - Meshing Tolerance - Tolerancija MESH-a + Meshing Tolerance + Tolerancija MESH-a - Enter tolerance for meshing geometry: - Unesite toleranciju geometrije MESH-a: + Enter tolerance for meshing geometry: + Unesite toleranciju geometrije MESH-a: - The mesh '%1' is a solid. - MESH '%1' je tijelo. + The mesh '%1' is a solid. + MESH '%1' je tijelo. - The mesh '%1' is not a solid. - MESH '%1' nije tijelo. + The mesh '%1' is not a solid. + MESH '%1' nije tijelo. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Vrhovi: %1, Rubovi: %2 Površine: %3] + [Points: %1, Edges: %2 Faces: %3] + [Vrhovi: %1, Rubovi: %2 Površine: %3] - Leave info mode - Zatvori info način rada + Leave info mode + Zatvori info način rada - Index: %1 - Indeks: %1 + Index: %1 + Indeks: %1 - Leave hole-filling mode - Zatvori način rada za popunjavanje otvora + Leave hole-filling mode + Zatvori način rada za popunjavanje otvora - Leave removal mode - Zatvori način rada za uklanjanje + Leave removal mode + Zatvori način rada za uklanjanje - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Sve datoteke mreže (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Sve datoteke mreže (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Poligon (*.ply) + Stanford Polygon (*.ply) + Stanford Poligon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Poligon (*. ply) + Standford Polygon (*.ply) + Standford Poligon (*. ply) - Delete selected faces - Izbriši odabrane površine + Delete selected faces + Izbriši odabrane površine - Clear selected faces - Izbriši odabrane površine + Clear selected faces + Izbriši odabrane površine - Annotation - Anotacija + Annotation + Anotacija - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analiziraj + Analyze + Analiziraj - Boolean - Boolean + Boolean + Boolean - &Meshes - &MESH-evi + &Meshes + &MESH-evi - Mesh tools - Alati mreže + Mesh tools + Alati mreže - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_hu.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_hu.ts index 40fadd4e6..2491443bf 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_hu.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_hu.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - Mesh + Mesh + Mesh - Add triangle - Háromszöget adjon hozzá + Add triangle + Háromszöget adjon hozzá - Add triangle manually to a mesh - Addjon háromszöget kézzel a hálóhoz + Add triangle manually to a mesh + Addjon háromszöget kézzel a hálóhoz - - + + CmdMeshBoundingBox - Mesh - Mesh + Mesh + Mesh - Boundings info... - Határolók információi... + Boundings info... + Határolók információi... - Shows the boundings of the selected mesh - Megmutatja a kiválasztott háló határvoalait + Shows the boundings of the selected mesh + Megmutatja a kiválasztott háló határvoalait - - + + CmdMeshBuildRegularSolid - Mesh - Mesh + Mesh + Mesh - Regular solid... - Szabályos szilárd test... + Regular solid... + Szabályos szilárd test... - Builds a regular solid - Szabályos szilárd testet épít + Builds a regular solid + Szabályos szilárd testet épít - - + + CmdMeshDemolding - Interactive demolding direction - Interaktív formárambontás iránya + Interactive demolding direction + Interaktív formárambontás iránya - Mesh - Mesh + Mesh + Mesh - - + + CmdMeshDifference - Mesh - Mesh + Mesh + Mesh - Difference - Különbség + Difference + Különbség - - + + CmdMeshEvaluateFacet - Mesh - Mesh + Mesh + Mesh - Face info - Felület infó + Face info + Felület infó - Information about face - Információ a felületről + Information about face + Információ a felületről - - + + CmdMeshEvaluateSolid - Mesh - Mesh + Mesh + Mesh - Check solid mesh - Szilárd háló ellenőrzése + Check solid mesh + Szilárd háló ellenőrzése - Checks whether the mesh is a solid - Ellenőrzi, ha a háló egy szilárd testet ad ki + Checks whether the mesh is a solid + Ellenőrzi, ha a háló egy szilárd testet ad ki - - + + CmdMeshEvaluation - Mesh - Mesh + Mesh + Mesh - Opens a dialog to analyze and repair a mesh - Megnyit egy párbeszédablakot, a háló elemezzéséehez és javításához + Opens a dialog to analyze and repair a mesh + Megnyit egy párbeszédablakot, a háló elemezzéséehez és javításához - Evaluate && Repair mesh... - Háló értékelése & javítása... + Evaluate && Repair mesh... + Háló értékelése & javítása... - - + + CmdMeshExMakeMesh - Mesh - Mesh + Mesh + Mesh - Make a Box - Make a Box + Make a Box + Make a Box - - + + CmdMeshExMakeTool - Mesh - Mesh + Mesh + Mesh - Make a Tool - Make a Tool + Make a Tool + Make a Tool - - + + CmdMeshExMakeUnion - Mesh - Mesh + Mesh + Mesh - Make Union - Make Union + Make Union + Make Union - - + + CmdMeshExport - Mesh - Mesh + Mesh + Mesh - Export mesh... - Háló exportálása... + Export mesh... + Háló exportálása... - Exports a mesh to file - Fájlba exportálja a hálót + Exports a mesh to file + Fájlba exportálja a hálót - - + + CmdMeshFillInteractiveHole - Mesh - Mesh + Mesh + Mesh - Close hole - Lyukat bezárja + Close hole + Lyukat bezárja - Close holes interactively - Interaktívan bezárja a lyukakat + Close holes interactively + Interaktívan bezárja a lyukakat - - + + CmdMeshFillupHoles - Mesh - Mesh + Mesh + Mesh - Fill holes... - Lyukak kitöltése... + Fill holes... + Lyukak kitöltése... - Fill holes of the mesh - A hálón lévő lyukak kitöltése + Fill holes of the mesh + A hálón lévő lyukak kitöltése - - + + CmdMeshFlipNormals - Mesh - Mesh + Mesh + Mesh - Flip normals - Normál tükrözés + Flip normals + Normál tükrözés - Flips the normals of the mesh - A háló normál tükrözése + Flips the normals of the mesh + A háló normál tükrözése - - + + CmdMeshFromGeometry - Mesh - Mesh + Mesh + Mesh - Create mesh from geometry... - Háló létrehozása a geometriából... + Create mesh from geometry... + Háló létrehozása a geometriából... - Create mesh from the selected geometry - Háló létrehozása a kijelölt geometriából + Create mesh from the selected geometry + Háló létrehozása a kijelölt geometriából - - + + CmdMeshHarmonizeNormals - Mesh - Mesh + Mesh + Mesh - Harmonize normals - Normálisok összehangolása + Harmonize normals + Normálisok összehangolása - Harmonizes the normals of the mesh - A hálón lévő normálisok összehangolása + Harmonizes the normals of the mesh + A hálón lévő normálisok összehangolása - - + + CmdMeshImport - Mesh - Mesh + Mesh + Mesh - Import mesh... - Háló importálása... + Import mesh... + Háló importálása... - Imports a mesh from file - A háló importálása fájlból + Imports a mesh from file + A háló importálása fájlból - - + + CmdMeshIntersection - Mesh - Mesh + Mesh + Mesh - Intersection - Metszet + Intersection + Metszet - - + + CmdMeshPolyCut - Mesh - Mesh + Mesh + Mesh - Cut mesh - Háló vágása + Cut mesh + Háló vágása - Cuts a mesh with a picked polygon - Háló kivágása a kiválasztott sokszög rácsvonallal + Cuts a mesh with a picked polygon + Háló kivágása a kiválasztott sokszög rácsvonallal - - + + CmdMeshPolySegm - Mesh - Mesh + Mesh + Mesh - Make segment - Szegmens létrehozása + Make segment + Szegmens létrehozása - Creates a mesh segment - A háló szegmens létrehozása + Creates a mesh segment + A háló szegmens létrehozása - - + + CmdMeshPolySelect - Mesh - Mesh + Mesh + Mesh - Select mesh - Háló kijelölése + Select mesh + Háló kijelölése - Select an area of the mesh - Jelöljön egy területet a hálón + Select an area of the mesh + Jelöljön egy területet a hálón - - + + CmdMeshPolySplit - Mesh - Mesh + Mesh + Mesh - Split mesh - Háló osztása + Split mesh + Háló osztása - Splits a mesh into two meshes - Háló osztása két részre + Splits a mesh into two meshes + Háló osztása két részre - - + + + CmdMeshPolyTrim + + Mesh + Mesh + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Mesh + Mesh + Mesh - Remove components by hand... - Távolítsa el kézzel az összetevőket... + Remove components by hand... + Távolítsa el kézzel az összetevőket... - Mark a component to remove it from the mesh - Egy összetevő megjelölése a hálóból való eltávolításához + Mark a component to remove it from the mesh + Egy összetevő megjelölése a hálóból való eltávolításához - - + + CmdMeshRemoveComponents - Mesh - Mesh + Mesh + Mesh - Remove components... - Összetevők eltávolítása... + Remove components... + Összetevők eltávolítása... - Remove topologic independent components from the mesh - Vegye ki a topológiailag független részegységeket a hálóból + Remove topologic independent components from the mesh + Vegye ki a topológiailag független részegységeket a hálóból - - + + + CmdMeshSegmentation + + Mesh + Mesh + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Mesh + Mesh + Mesh - Smooth... - Simítás + Smooth... + Simítás - Smooth the selected meshes - Kiválasztott háló simítása + Smooth the selected meshes + Kiválasztott háló simítása - - + + CmdMeshToolMesh - Mesh - Mesh + Mesh + Mesh - Segment by tool mesh - Metszet a háló eszközből + Segment by tool mesh + Metszet a háló eszközből - Creates a segment from a given tool mesh - A megadott háló eszközből készít egy metszetet + Creates a segment from a given tool mesh + A megadott háló eszközből készít egy metszetet - - + + CmdMeshTransform - Mesh - Mesh + Mesh + Mesh - Transform mesh - Háló átalakítás + Transform mesh + Háló átalakítás - Rotate or move a mesh - Háló forgatása vagy mozgatása + Rotate or move a mesh + Háló forgatása vagy mozgatása - - + + CmdMeshUnion - Mesh - Mesh + Mesh + Mesh - Union - Egyesítés + Union + Egyesítés - - + + CmdMeshVertexCurvature - Mesh - Mesh + Mesh + Mesh - Calculates the curvature of the vertices of a mesh - Kiszámítja egy háló csúcspont görbületét + Calculates the curvature of the vertices of a mesh + Kiszámítja egy háló csúcspont görbületét - Curvature plot - Görbület terv + Curvature plot + Görbület terv - - + + CmdMeshVertexCurvatureInfo - Mesh - Mesh + Mesh + Mesh - Curvature info - Görbület információ + Curvature info + Görbület információ - Information about curvature - Görbület információk + Information about curvature + Görbület információk - - + + MeshGui::DlgEvaluateMesh - &Help - &Súgó + &Help + &Súgó - F1 - F1 + F1 + F1 - &Close - &Bezárás + &Close + &Bezárás - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Háló információ + Mesh information + Háló információ - No information - Nincs információ + No information + Nincs információ - Number of points: - Pontok száma: + Number of points: + Pontok száma: - Number of edges: - Élek száma: + Number of edges: + Élek száma: - Refresh - Frissítés + Refresh + Frissítés - Analyze - Elemzése + Analyze + Elemzése - Repair - Javítás + Repair + Javítás - Orientation - Tájolás + Orientation + Tájolás - Degenerated faces - Elváltoztatott felület + Degenerated faces + Elváltoztatott felület - Face indices - Felületi jelzőszám + Face indices + Felületi jelzőszám - Number of faces: - Felületek száma: + Number of faces: + Felületek száma: - Duplicated faces - Felületek megduplázása + Duplicated faces + Felületek megduplázása - Duplicated points - Pontok megkettőzése + Duplicated points + Pontok megkettőzése - Non-manifolds - Nem szthatók + Non-manifolds + Nem szthatók - Self-intersections - Saját csomópontok + Self-intersections + Saját csomópontok - All above tests together - Minden fenti vizsgálat együtt + All above tests together + Minden fenti vizsgálat együtt - Repetitive repair - Ismétlődő javítás + Repetitive repair + Ismétlődő javítás - Evaluate & Repair Mesh - Háló értékelése & javítása + Evaluate & Repair Mesh + Háló értékelése & javítása - Folds on surface - Felszíní hajlítás + Folds on surface + Felszíní hajlítás - - + + MeshGui::DlgEvaluateMeshImp - No information - Nincs információ + No information + Nincs információ - Invalid neighbour indices - Érvénytelen szomszédos indexek + Invalid neighbour indices + Érvénytelen szomszédos indexek - Invalid face indices - Érvénytelen felület indexek + Invalid face indices + Érvénytelen felület indexek - Invalid point indices - Érvénytelen pont indexek + Invalid point indices + Érvénytelen pont indexek - Multiple point indices - Több pontos indexek + Multiple point indices + Több pontos indexek - Non-manifolds - Nem szthatók + Non-manifolds + Nem szthatók - Cannot remove non-manifolds - Nem lehet eltávolítani a nem-szétágazottakat + Cannot remove non-manifolds + Nem lehet eltávolítani a nem-szétágazottakat - No selection - Nincs kijelölés + No selection + Nincs kijelölés - No flipped normals - Nincsenek tükrözött normálisok + No flipped normals + Nincsenek tükrözött normálisok - %1 flipped normals - %1 tükrözött normalisok + %1 flipped normals + %1 tükrözött normalisok - No non-manifolds - Nincsenek nem-szétágazottak + No non-manifolds + Nincsenek nem-szétágazottak - %1 non-manifolds - %1 nem-szétágazott + %1 non-manifolds + %1 nem-szétágazott - No invalid indices - Nincsenek érvénytelen indexek + No invalid indices + Nincsenek érvénytelen indexek - No degenerations - Nincs elváltozás + No degenerations + Nincs elváltozás - %1 degenerated faces - %1 elváltozott felület + %1 degenerated faces + %1 elváltozott felület - No duplicated faces - Nincsenek duplikált felületek + No duplicated faces + Nincsenek duplikált felületek - %1 duplicated faces - %1 duplikált felület + %1 duplicated faces + %1 duplikált felület - No duplicated points - Nincsenek duplikált pontok + No duplicated points + Nincsenek duplikált pontok - Duplicated points - Pontok megkettőzése + Duplicated points + Pontok megkettőzése - Orientation - Tájolás + Orientation + Tájolás - Indices - Indexek + Indices + Indexek - Degenerations - Elváltozás + Degenerations + Elváltozás - Duplicated faces - Felületek megduplázása + Duplicated faces + Felületek megduplázása - No self-intersections - Nem belső-csomópontok + No self-intersections + Nem belső-csomópontok - Self-intersections - Saját csomópontok + Self-intersections + Saját csomópontok - Mesh repair - Háló javítása + Mesh repair + Háló javítása - Flipped normals found - Tükrözött normalist talált + Flipped normals found + Tükrözött normalist talált - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - A felület hajlításának ellenőrzése nem sikerült. + A felület hajlításának ellenőrzése nem sikerült. Kérjük először futtassa a hajlítás javítása parancsot - No folds on surface - Nem hajítható felület + No folds on surface + Nem hajítható felület - %1 folds on surface - %1 felület hajlítása + %1 folds on surface + %1 felület hajlítása - Folds - Hajlítás + Folds + Hajlítás - - + + MeshGui::DlgRegularSolid - Regular Solid - Szabályos szilárd test + Regular Solid + Szabályos szilárd test - &Create - &Létrehozás + &Create + &Létrehozás - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Bezár + Cl&ose + Bezár - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Szilárd test: + Solid: + Szilárd test: - Cube - Kocka + Cube + Kocka - Cylinder - Henger + Cylinder + Henger - Cone - Kúp + Cone + Kúp - Sphere - Gömb + Sphere + Gömb - Ellipsoid - Ellipszoid + Ellipsoid + Ellipszoid - Torus - Tórusz + Torus + Tórusz - Height: - Magasság: + Height: + Magasság: - Length: - Hossz: + Length: + Hossz: - Width: - Szélesség: + Width: + Szélesség: - Radius: - Sugár: + Radius: + Sugár: - Closed - Zárva + Closed + Zárva - Sampling: - Mintavétel: + Sampling: + Mintavétel: - Edge length: - Él hossz: + Edge length: + Él hossz: - Radius 1: - Sugár 1: + Radius 1: + Sugár 1: - Radius 2: - Sugár 2: + Radius 2: + Sugár 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Létrehozás %1 + Create %1 + Létrehozás %1 - No active document - Nincs aktív dokumentum + No active document + Nincs aktív dokumentum - - + + MeshGui::DlgSettingsMeshView - Mesh view - Háló nézet + Mesh view + Háló nézet - Two-side rendering - Két oldali renderelés + Two-side rendering + Két oldali renderelés - Backface color - Hátsó lap szín + Backface color + Hátsó lap szín - Smoothing - Simítás + Smoothing + Simítás - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Ha a két felület között bezárt szög kisebb mint a gyűrődési szög, akkor a közös élen található felületek simák maradnak.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Ha a két felület között bezárt szög kisebb mint a gyűrődési szög, akkor a közös élen található felületek simák maradnak.</p></body></html> - Crease angle - Gyűrődési szög + Crease angle + Gyűrődési szög - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">A lapos árnyékolással a felületi normák nem vertexként definiáltak, így az ívelt felületek írreálisan jelenik meg, azonban Pong árnyékolásnál simábban jelennek meg. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">A lapos árnyékolással a felületi normák nem vertexként definiáltak, így az ívelt felületek írreálisan jelenik meg, azonban Pong árnyékolásnál simábban jelennek meg. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Normál vertex meghatározás + Define normal per vertex + Normál vertex meghatározás + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">A normálisok vertexként való megjelenítését úgy is nevezik, hogy<span style=" font-style:italic;">Phong árnyékolás</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">A normálisok vertexként való megjelenítését úgy is nevezik, hogy<span style=" font-style:italic;">Phong árnyékolás</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Új háló alapértelmezett megjelenítése - Default appearance for new meshes - Új háló alapértelmezett megjelenítése + Default line color + Alapértelmezett vonalszín - Default line color - Alapértelmezett vonalszín + Mesh transparency + Háló átlátszóság - Mesh transparency - Háló átlátszóság + Default mesh color + Alapértelmezett Rácsvonal szín - Default mesh color - Alapértelmezett Rácsvonal szín + Show bounding-box for highlighted or selected meshes + Határolókeretben mutatja a kiemelt vagy kiválasztott hálókat - Show bounding-box for highlighted or selected meshes - Határolókeretben mutatja a kiemelt vagy kiválasztott hálókat + Line transparency + Vonal átlátszóság - - Line transparency - Vonal átlátszóság - - - + + MeshGui::DlgSmoothing - Smoothing - Simítás + Smoothing + Simítás - Method - Módszer + Method + Módszer - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Paraméter + Parameter + Paraméter - Iterations: - Lépésszám: + Iterations: + Lépésszám: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Háromszöget adjon hozzá + Add triangle + Háromszöget adjon hozzá - Flip normal - Normál tükrözés + Flip normal + Normál tükrözés - Clear - Tiszta + Clear + Tiszta - Finish - Befejezés + Finish + Befejezés - - + + MeshGui::RemoveComponents - Remove components - Összetevők eltávolítása + Remove components + Összetevők eltávolítása - Select - Kijelölés + Select + Kijelölés - Select whole component - Összetevő kiválasztása + Select whole component + Összetevő kiválasztása - Pick triangle - Háromszög választása + Pick triangle + Háromszög választása - < faces than - <nézd mint + < faces than + <nézd mint - Region - Régió + Region + Régió - Components - Összetevők + Components + Összetevők - All - Minden + All + Minden - Deselect - Kijelölés megszüntetése + Deselect + Kijelölés megszüntetése - Deselect whole component - Kijelölés megszüntetése az egész alkatrészen + Deselect whole component + Kijelölés megszüntetése az egész alkatrészen - > faces than - >nézd mint + > faces than + >nézd mint - Region options - Területi beállítások + Region options + Területi beállítások - Respect only triangles with normals facing screen - Csak a normál felülettel kijelzett háromszögeket részesíti előnybern + Respect only triangles with normals facing screen + Csak a normál felülettel kijelzett háromszögeket részesíti előnybern - Respect only visible triangles - Csak a látható háromszögek figyelembevétele + Respect only visible triangles + Csak a látható háromszögek figyelembevétele - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Henger + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Gömb + + + MeshGui::TaskRemoveComponents - Delete - Töröl + Delete + Töröl - Invert - Invertálás + Invert + Invertálás - - + + QDockWidget - Evaluate & Repair Mesh - Háló értékelése & javítása + Evaluate & Repair Mesh + Háló értékelése & javítása - - + + QObject - Import mesh - Háló importálása + Import mesh + Háló importálása - Export mesh - Háló exportálása + Export mesh + Háló exportálása - Solid Mesh - Szilárde test háló + Solid Mesh + Szilárde test háló - Boundings - Csatlakozások + Boundings + Csatlakozások - Fill holes - Lyukak kitöltése + Fill holes + Lyukak kitöltése - Fill holes with maximum number of edges: - Töltse ki a lyukakat maximális számú élekkel: + Fill holes with maximum number of edges: + Töltse ki a lyukakat maximális számú élekkel: - Binary STL (*.stl) - Bináris STL (*.stl) + Binary STL (*.stl) + Bináris STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Bináris háló (*.bms) + Binary Mesh (*.bms) + Bináris háló (*.bms) - Alias Mesh (*.obj) - Alias háló (*.obj) + Alias Mesh (*.obj) + Alias háló (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Minden fájl (*. *) + All Files (*.*) + Minden fájl (*. *) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML 2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML 2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Tömörített VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Tömörített VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python modul def (*.py) + Python module def (*.py) + Python modul def (*.py) - Meshing Tolerance - Hálózás tűrése + Meshing Tolerance + Hálózás tűrése - Enter tolerance for meshing geometry: - Adja meg a tűrést az erővonal geometriájának: + Enter tolerance for meshing geometry: + Adja meg a tűrést az erővonal geometriájának: - The mesh '%1' is a solid. - A(z)'%1' háló egy szilárd test. + The mesh '%1' is a solid. + A(z)'%1' háló egy szilárd test. - The mesh '%1' is not a solid. - A(z)'%1' háló nem szilárd test. + The mesh '%1' is not a solid. + A(z)'%1' háló nem szilárd test. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Pontok: %1, Élek: %2 Felületek: %3] + [Points: %1, Edges: %2 Faces: %3] + [Pontok: %1, Élek: %2 Felületek: %3] - Leave info mode - Hagyja az info módot + Leave info mode + Hagyja az info módot - Index: %1 - Index: %1 + Index: %1 + Index: %1 - Leave hole-filling mode - Hagyja lyuk betöltő üzemmódban + Leave hole-filling mode + Hagyja lyuk betöltő üzemmódban - Leave removal mode - Hagyja eltávolítása módban + Leave removal mode + Hagyja eltávolítása módban - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Minden háló Fájl (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Minden háló Fájl (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Standford Polygon (*.ply) + Stanford Polygon (*.ply) + Standford Polygon (*.ply) - Object File Format (*.off) - Objektum formátum (*.off) + Object File Format (*.off) + Objektum formátum (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Törli a kijelölt felületeket + Delete selected faces + Törli a kijelölt felületeket - Clear selected faces - Kijelölt felületek törlése + Clear selected faces + Kijelölt felületek törlése - Annotation - Jegyzet + Annotation + Jegyzet - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Elemzése + Analyze + Elemzése - Boolean - Logikai érték + Boolean + Logikai érték - &Meshes - &Behálóz + &Meshes + &Behálóz - Mesh tools - Háló eszközök + Mesh tools + Háló eszközök - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_it.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_it.ts index 5d145f07d..ccc7fb043 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_it.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_it.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Mesh + Mesh + Mesh - Add triangle - Aggiungi triangolo + Add triangle + Aggiungi triangolo - Add triangle manually to a mesh - Aggiunge manualmente un triangolo alla mesh + Add triangle manually to a mesh + Aggiunge manualmente un triangolo alla mesh - - + + CmdMeshBoundingBox - Mesh - Mesh + Mesh + Mesh - Boundings info... - Dettagli sulle connessioni... + Boundings info... + Dettagli sulle connessioni... - Shows the boundings of the selected mesh - Mostra le connessioni della mesh selezionata + Shows the boundings of the selected mesh + Mostra le connessioni della mesh selezionata - - + + CmdMeshBuildRegularSolid - Mesh - Mesh + Mesh + Mesh - Regular solid... - Solido regolare... + Regular solid... + Solido regolare... - Builds a regular solid - Costruisce un solido regolare + Builds a regular solid + Costruisce un solido regolare - - + + CmdMeshDemolding - Interactive demolding direction - Direzione di demodellazione interattiva + Interactive demolding direction + Direzione di demodellazione interattiva - Mesh - Mesh + Mesh + Mesh - - + + CmdMeshDifference - Mesh - Mesh + Mesh + Mesh - Difference - Differenza + Difference + Differenza - - + + CmdMeshEvaluateFacet - Mesh - Mesh + Mesh + Mesh - Face info - Dettagli faccia + Face info + Dettagli faccia - Information about face - Informazioni sulla faccia + Information about face + Informazioni sulla faccia - - + + CmdMeshEvaluateSolid - Mesh - Mesh + Mesh + Mesh - Check solid mesh - Controlla la mesh del solido + Check solid mesh + Controlla la mesh del solido - Checks whether the mesh is a solid - Controlla se la mesh è un solido + Checks whether the mesh is a solid + Controlla se la mesh è un solido - - + + CmdMeshEvaluation - Mesh - Mesh + Mesh + Mesh - Opens a dialog to analyze and repair a mesh - Apre una finestra di dialogo per analizzare e riparare una mesh + Opens a dialog to analyze and repair a mesh + Apre una finestra di dialogo per analizzare e riparare una mesh - Evaluate && Repair mesh... - Analizza && Ripara la mesh... + Evaluate && Repair mesh... + Analizza && Ripara la mesh... - - + + CmdMeshExMakeMesh - Mesh - Mesh + Mesh + Mesh - Make a Box - Crea un prisma + Make a Box + Crea un prisma - - + + CmdMeshExMakeTool - Mesh - Mesh + Mesh + Mesh - Make a Tool - Crea uno strumento + Make a Tool + Crea uno strumento - - + + CmdMeshExMakeUnion - Mesh - Mesh + Mesh + Mesh - Make Union - Crea un'unione + Make Union + Crea un'unione - - + + CmdMeshExport - Mesh - Mesh + Mesh + Mesh - Export mesh... - Esporta mesh... + Export mesh... + Esporta mesh... - Exports a mesh to file - Esporta la mesh in un file + Exports a mesh to file + Esporta la mesh in un file - - + + CmdMeshFillInteractiveHole - Mesh - Mesh + Mesh + Mesh - Close hole - Chiudi il foro + Close hole + Chiudi il foro - Close holes interactively - Chiudi i fori in modo interattivo + Close holes interactively + Chiudi i fori in modo interattivo - - + + CmdMeshFillupHoles - Mesh - Mesh + Mesh + Mesh - Fill holes... - Riempi i fori... + Fill holes... + Riempi i fori... - Fill holes of the mesh - Riempi i fori della mesh + Fill holes of the mesh + Riempi i fori della mesh - - + + CmdMeshFlipNormals - Mesh - Mesh + Mesh + Mesh - Flip normals - Inverti le normali + Flip normals + Inverti le normali - Flips the normals of the mesh - Inverte le normali della mesh + Flips the normals of the mesh + Inverte le normali della mesh - - + + CmdMeshFromGeometry - Mesh - Mesh + Mesh + Mesh - Create mesh from geometry... - Crea una mesh da una geometria... + Create mesh from geometry... + Crea una mesh da una geometria... - Create mesh from the selected geometry - Crea una mesh dalla geometria selezionata + Create mesh from the selected geometry + Crea una mesh dalla geometria selezionata - - + + CmdMeshHarmonizeNormals - Mesh - Mesh + Mesh + Mesh - Harmonize normals - Armonizza le normali + Harmonize normals + Armonizza le normali - Harmonizes the normals of the mesh - Armonizza le normali della mesh + Harmonizes the normals of the mesh + Armonizza le normali della mesh - - + + CmdMeshImport - Mesh - Mesh + Mesh + Mesh - Import mesh... - Importa mesh... + Import mesh... + Importa mesh... - Imports a mesh from file - Importa una mesh da file + Imports a mesh from file + Importa una mesh da file - - + + CmdMeshIntersection - Mesh - Mesh + Mesh + Mesh - Intersection - Intersezione + Intersection + Intersezione - - + + CmdMeshPolyCut - Mesh - Mesh + Mesh + Mesh - Cut mesh - Taglia la mesh + Cut mesh + Taglia la mesh - Cuts a mesh with a picked polygon - Taglia la mesh con un poligono + Cuts a mesh with a picked polygon + Taglia la mesh con un poligono - - + + CmdMeshPolySegm - Mesh - Mesh + Mesh + Mesh - Make segment - Crea un segmento + Make segment + Crea un segmento - Creates a mesh segment - Crea un segmento di mesh + Creates a mesh segment + Crea un segmento di mesh - - + + CmdMeshPolySelect - Mesh - Mesh + Mesh + Mesh - Select mesh - Seleziona mesh + Select mesh + Seleziona mesh - Select an area of the mesh - Seleziona un'area della mesh + Select an area of the mesh + Seleziona un'area della mesh - - + + CmdMeshPolySplit - Mesh - Mesh + Mesh + Mesh - Split mesh - Dividi la mesh + Split mesh + Dividi la mesh - Splits a mesh into two meshes - Divide la mesh in due mesh + Splits a mesh into two meshes + Divide la mesh in due mesh - - + + + CmdMeshPolyTrim + + Mesh + Mesh + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Mesh + Mesh + Mesh - Remove components by hand... - Rimuovi componenti a mano... + Remove components by hand... + Rimuovi componenti a mano... - Mark a component to remove it from the mesh - Segna un componente per rimuoverlo dalla mesh + Mark a component to remove it from the mesh + Segna un componente per rimuoverlo dalla mesh - - + + CmdMeshRemoveComponents - Mesh - Mesh + Mesh + Mesh - Remove components... - Rimuovi componente... + Remove components... + Rimuovi componente... - Remove topologic independent components from the mesh - Rimuove i componenti topologici indipendenti dalla mesh + Remove topologic independent components from the mesh + Rimuove i componenti topologici indipendenti dalla mesh - - + + + CmdMeshSegmentation + + Mesh + Mesh + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Mesh + Mesh + Mesh - Smooth... - Leviga... + Smooth... + Leviga... - Smooth the selected meshes - Leviga le mesh selezionate + Smooth the selected meshes + Leviga le mesh selezionate - - + + CmdMeshToolMesh - Mesh - Mesh + Mesh + Mesh - Segment by tool mesh - Segmento da strumento di mesh + Segment by tool mesh + Segmento da strumento di mesh - Creates a segment from a given tool mesh - Crea un segmento da uno strumento di mesh dato + Creates a segment from a given tool mesh + Crea un segmento da uno strumento di mesh dato - - + + CmdMeshTransform - Mesh - Mesh + Mesh + Mesh - Transform mesh - Trasforma la mesh + Transform mesh + Trasforma la mesh - Rotate or move a mesh - Ruota o muove una mesh + Rotate or move a mesh + Ruota o muove una mesh - - + + CmdMeshUnion - Mesh - Mesh + Mesh + Mesh - Union - Unione + Union + Unione - - + + CmdMeshVertexCurvature - Mesh - Mesh + Mesh + Mesh - Calculates the curvature of the vertices of a mesh - Calcola la curvatura dei vertici di una mesh + Calculates the curvature of the vertices of a mesh + Calcola la curvatura dei vertici di una mesh - Curvature plot - Colora curvatura + Curvature plot + Colora curvatura - - + + CmdMeshVertexCurvatureInfo - Mesh - Mesh + Mesh + Mesh - Curvature info - Dettagli curvatura + Curvature info + Dettagli curvatura - Information about curvature - Informazioni sulla curvatura + Information about curvature + Informazioni sulla curvatura - - + + MeshGui::DlgEvaluateMesh - &Help - &Aiuto + &Help + &Aiuto - F1 - F1 + F1 + F1 - &Close - &Chiudi + &Close + &Chiudi - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Informazioni sulla mesh + Mesh information + Informazioni sulla mesh - No information - Nessuna informazione + No information + Nessuna informazione - Number of points: - Numero di punti: + Number of points: + Numero di punti: - Number of edges: - Numero di spigoli: + Number of edges: + Numero di spigoli: - Refresh - Aggiorna + Refresh + Aggiorna - Analyze - Analizza + Analyze + Analizza - Repair - Ripara + Repair + Ripara - Orientation - Orientamento + Orientation + Orientamento - Degenerated faces - Facce degenerate + Degenerated faces + Facce degenerate - Face indices - Indici faccia + Face indices + Indici faccia - Number of faces: - Numero di facce: + Number of faces: + Numero di facce: - Duplicated faces - Facce duplicate + Duplicated faces + Facce duplicate - Duplicated points - Punti duplicati + Duplicated points + Punti duplicati - Non-manifolds - Non molteplici + Non-manifolds + Non molteplici - Self-intersections - Auto-intersezioni + Self-intersections + Auto-intersezioni - All above tests together - Tutti i test insieme + All above tests together + Tutti i test insieme - Repetitive repair - Riparazione ripetitiva + Repetitive repair + Riparazione ripetitiva - Evaluate & Repair Mesh - Analizza & Ripara la mesh + Evaluate & Repair Mesh + Analizza & Ripara la mesh - Folds on surface - Pieghe sulla superficie + Folds on surface + Pieghe sulla superficie - - + + MeshGui::DlgEvaluateMeshImp - No information - Nessuna informazione + No information + Nessuna informazione - Invalid neighbour indices - Indici vicini non validi + Invalid neighbour indices + Indici vicini non validi - Invalid face indices - Indici faccia non validi + Invalid face indices + Indici faccia non validi - Invalid point indices - Indici punto non validi + Invalid point indices + Indici punto non validi - Multiple point indices - Indici punto multipli + Multiple point indices + Indici punto multipli - Non-manifolds - Non molteplici + Non-manifolds + Non molteplici - Cannot remove non-manifolds - non è possibile rimuovere i non molteplici + Cannot remove non-manifolds + non è possibile rimuovere i non molteplici - No selection - Nessuna selezione + No selection + Nessuna selezione - No flipped normals - Nessuna normale invertita + No flipped normals + Nessuna normale invertita - %1 flipped normals - %1 normali invertite + %1 flipped normals + %1 normali invertite - No non-manifolds - Nessun non molteplici + No non-manifolds + Nessun non molteplici - %1 non-manifolds - %1 non molteplici + %1 non-manifolds + %1 non molteplici - No invalid indices - Nessun indice non valido + No invalid indices + Nessun indice non valido - No degenerations - Nessuna degenerazione + No degenerations + Nessuna degenerazione - %1 degenerated faces - %1 facce degenerate + %1 degenerated faces + %1 facce degenerate - No duplicated faces - Nessuna faccia duplicata + No duplicated faces + Nessuna faccia duplicata - %1 duplicated faces - %1 facce duplicate + %1 duplicated faces + %1 facce duplicate - No duplicated points - Nessun punto duplicato + No duplicated points + Nessun punto duplicato - Duplicated points - Punti duplicati + Duplicated points + Punti duplicati - Orientation - Orientamento + Orientation + Orientamento - Indices - Indici + Indices + Indici - Degenerations - Degenerazioni + Degenerations + Degenerazioni - Duplicated faces - Facce duplicate + Duplicated faces + Facce duplicate - No self-intersections - Nessuna auto-intersezione + No self-intersections + Nessuna auto-intersezione - Self-intersections - Auto-intersezioni + Self-intersections + Auto-intersezioni - Mesh repair - Ripara la mesh + Mesh repair + Ripara la mesh - Flipped normals found - Trovate normali invertite + Flipped normals found + Trovate normali invertite - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Controllo non riuscito a causa di pieghe sulla superficie. Eseguire il comando per riparare pieghe prima + Controllo non riuscito a causa di pieghe sulla superficie. Eseguire il comando per riparare pieghe prima - No folds on surface - Nessuna piega sulla superficie + No folds on surface + Nessuna piega sulla superficie - %1 folds on surface - %1 pieghe sulla superficie + %1 folds on surface + %1 pieghe sulla superficie - Folds - Pieghe + Folds + Pieghe - - + + MeshGui::DlgRegularSolid - Regular Solid - Solido regolare + Regular Solid + Solido regolare - &Create - &Crea + &Create + &Crea - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Ch&iudi + Cl&ose + Ch&iudi - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Solido: + Solid: + Solido: - Cube - Cubo + Cube + Cubo - Cylinder - Cilindro + Cylinder + Cilindro - Cone - Cono + Cone + Cono - Sphere - Sfera + Sphere + Sfera - Ellipsoid - Ellissoide + Ellipsoid + Ellissoide - Torus - Toro + Torus + Toro - Height: - Altezza: + Height: + Altezza: - Length: - Lunghezza: + Length: + Lunghezza: - Width: - Larghezza: + Width: + Larghezza: - Radius: - Raggio: + Radius: + Raggio: - Closed - Chiuso + Closed + Chiuso - Sampling: - Campionatura: + Sampling: + Campionatura: - Edge length: - Lunghezza spigolo: + Edge length: + Lunghezza spigolo: - Radius 1: - Raggio 1: + Radius 1: + Raggio 1: - Radius 2: - Raggio 2: + Radius 2: + Raggio 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Crea %1 + Create %1 + Crea %1 - No active document - Nessun documento attivo + No active document + Nessun documento attivo - - + + MeshGui::DlgSettingsMeshView - Mesh view - Visualizzazione Mesh + Mesh view + Visualizzazione Mesh - Two-side rendering - Render di entrambi i lati + Two-side rendering + Render di entrambi i lati - Backface color - Colore della faccia posteriore + Backface color + Colore della faccia posteriore - Smoothing - Leviga + Smoothing + Leviga - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> Questo è il più piccolo angolo tra due facce nel caso in cui le normali sono calcolate per ottenere un’ombreggiatura di tipo flat. </p><p style="margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> Se l'angolo tra le normali di due facce vicine è minore dell'angolo di piega, le facce saranno levigate in prossimità del loro spigolo comune.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> Questo è il più piccolo angolo tra due facce nel caso in cui le normali sono calcolate per ottenere un’ombreggiatura di tipo flat. </p><p style="margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> Se l'angolo tra le normali di due facce vicine è minore dell'angolo di piega, le facce saranno levigate in prossimità del loro spigolo comune.</p></body></html> - Crease angle - Angolo di piega + Crease angle + Angolo di piega - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Ombreggiatura Flat/Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definisce l’aspetto delle superfici.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Con l’ombreggiatura flat le normali alla superficie non sono definite per vertice il che conduce ad un aspetto non reale per le superfici curve mentre l’ombreggiatura di Phong porta ad un aspetto più liscio. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Se questa opzione è selezionata sarà utilizzata l’ombreggiatura di Phong , altrimenti sarà utilizzata l’ombreggiatura flat.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Ombreggiatura Flat/Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definisce l’aspetto delle superfici.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Con l’ombreggiatura flat le normali alla superficie non sono definite per vertice il che conduce ad un aspetto non reale per le superfici curve mentre l’ombreggiatura di Phong porta ad un aspetto più liscio. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Se questa opzione è selezionata sarà utilizzata l’ombreggiatura di Phong , altrimenti sarà utilizzata l’ombreggiatura flat.</p></body></html> - Define normal per vertex - Definisci le normali per vertice + Define normal per vertex + Definisci le normali per vertice + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Suggerimento</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definire le normali per vertice è chiamato anche <span style=" font-style:italic;"> ombreggiatura di Phong </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;"> mentre definire le normali per faccia è chiamato anche </span> ombreggiatura Flat<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Suggerimento</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definire le normali per vertice è chiamato anche <span style=" font-style:italic;"> ombreggiatura di Phong </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;"> mentre definire le normali per faccia è chiamato anche </span> ombreggiatura Flat<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Aspetto predefinito per le nuove mesh - Default appearance for new meshes - Aspetto predefinito per le nuove mesh + Default line color + Colore predefinito della linea - Default line color - Colore predefinito della linea + Mesh transparency + Trasparenza della mesh - Mesh transparency - Trasparenza della mesh + Default mesh color + Colore predefinito della mesh - Default mesh color - Colore predefinito della mesh + Show bounding-box for highlighted or selected meshes + Mostra riquadro per le mesh evidenziate o selezionate - Show bounding-box for highlighted or selected meshes - Mostra riquadro per le mesh evidenziate o selezionate + Line transparency + Trasparenza della linea - - Line transparency - Trasparenza della linea - - - + + MeshGui::DlgSmoothing - Smoothing - Leviga + Smoothing + Leviga - Method - Metodo + Method + Metodo - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parametro + Parameter + Parametro - Iterations: - Iterazioni: + Iterations: + Iterazioni: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Aggiungi triangolo + Add triangle + Aggiungi triangolo - Flip normal - Inverti la normale + Flip normal + Inverti la normale - Clear - Cancella + Clear + Cancella - Finish - Termina + Finish + Termina - - + + MeshGui::RemoveComponents - Remove components - Rimuovi componenti + Remove components + Rimuovi componenti - Select - Seleziona + Select + Seleziona - Select whole component - Seleziona l'intero componente + Select whole component + Seleziona l'intero componente - Pick triangle - Scegli il triangolo + Pick triangle + Scegli il triangolo - < faces than - Facce minori di + < faces than + Facce minori di - Region - Regione + Region + Regione - Components - Componenti + Components + Componenti - All - Tutti + All + Tutti - Deselect - Deseleziona + Deselect + Deseleziona - Deselect whole component - Deseleziona l'intero componente + Deselect whole component + Deseleziona l'intero componente - > faces than - Facce maggiori di + > faces than + Facce maggiori di - Region options - Opzioni regione + Region options + Opzioni regione - Respect only triangles with normals facing screen - Rispetta solo i triangoli con le normali in direzione dello schermo + Respect only triangles with normals facing screen + Rispetta solo i triangoli con le normali in direzione dello schermo - Respect only visible triangles - Rispetta solo i triangoli visibili + Respect only visible triangles + Rispetta solo i triangoli visibili - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cilindro + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sfera + + + MeshGui::TaskRemoveComponents - Delete - Elimina + Delete + Elimina - Invert - Inverti + Invert + Inverti - - + + QDockWidget - Evaluate & Repair Mesh - Analizza & Ripara la mesh + Evaluate & Repair Mesh + Analizza & Ripara la mesh - - + + QObject - Import mesh - Importa mesh + Import mesh + Importa mesh - Export mesh - Esporta mesh + Export mesh + Esporta mesh - Solid Mesh - Mesh solida + Solid Mesh + Mesh solida - Boundings - Connessioni + Boundings + Connessioni - Fill holes - Riempi i fori + Fill holes + Riempi i fori - Fill holes with maximum number of edges: - Riempi i fori con il numero massimo di spigoli: + Fill holes with maximum number of edges: + Riempi i fori con il numero massimo di spigoli: - Binary STL (*.stl) - STL binario (*.stl) + Binary STL (*.stl) + STL binario (*.stl) - ASCII STL (*.ast) - STL ASCII (*.ast) + ASCII STL (*.ast) + STL ASCII (*.ast) - Binary Mesh (*.bms) - Mesh Binario (*.bms) + Binary Mesh (*.bms) + Mesh Binario (*.bms) - Alias Mesh (*.obj) - Alias mesh (*.obj) + Alias Mesh (*.obj) + Alias mesh (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Tutti i file (*.*) + All Files (*.*) + Tutti i file (*.*) - ASCII STL (*.stl) - STL ASCII (*.ast) + ASCII STL (*.stl) + STL ASCII (*.ast) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - VRML 2.0 compresso (*.wrz) + Compressed VRML 2.0 (*.wrz) + VRML 2.0 compresso (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Modulo Python (*.py) + Python module def (*.py) + Modulo Python (*.py) - Meshing Tolerance - Tolleranza Mesh + Meshing Tolerance + Tolleranza Mesh - Enter tolerance for meshing geometry: - Inserisci la tolleranza per la geometria della mesh + Enter tolerance for meshing geometry: + Inserisci la tolleranza per la geometria della mesh - The mesh '%1' is a solid. - La mesh '%1' è un solido. + The mesh '%1' is a solid. + La mesh '%1' è un solido. - The mesh '%1' is not a solid. - La mesh '%1' non è un solido. + The mesh '%1' is not a solid. + La mesh '%1' non è un solido. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Punti: %1, Spigoli: %2 Facce: %3] + [Points: %1, Edges: %2 Faces: %3] + [Punti: %1, Spigoli: %2 Facce: %3] - Leave info mode - Permetti modo info + Leave info mode + Permetti modo info - Index: %1 - Indice: %1 + Index: %1 + Indice: %1 - Leave hole-filling mode - Permetti modo riempimento fori + Leave hole-filling mode + Permetti modo riempimento fori - Leave removal mode - permetti modo rimozione + Leave removal mode + permetti modo rimozione - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Tutti i file mesh (*.stl *.ast *.BMS *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Tutti i file mesh (*.stl *.ast *.BMS *.obj *.ply) - Stanford Polygon (*.ply) - Poligono di Stanford (*.ply) + Stanford Polygon (*.ply) + Poligono di Stanford (*.ply) - Object File Format (*.off) - Formato file oggetto (*.off) + Object File Format (*.off) + Formato file oggetto (*.off) - Standford Polygon (*.ply) - Poligono di Standford (*.ply) + Standford Polygon (*.ply) + Poligono di Standford (*.ply) - Delete selected faces - Elimina le facce selezionate + Delete selected faces + Elimina le facce selezionate - Clear selected faces - Cancella le facce selezionate + Clear selected faces + Cancella le facce selezionate - Annotation - Annotazione + Annotation + Annotazione - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analizza + Analyze + Analizza - Boolean - Operazione booleana + Boolean + Operazione booleana - &Meshes - &Mesh + &Meshes + &Mesh - Mesh tools - Strumenti Mesh + Mesh tools + Strumenti Mesh - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_ja.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_ja.ts index 73ae9e97f..4625bfcd2 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_ja.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_ja.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Mesh + Mesh + Mesh - Add triangle - 三角形を追加 + Add triangle + 三角形を追加 - Add triangle manually to a mesh - Add triangle manually to a mesh + Add triangle manually to a mesh + Add triangle manually to a mesh - - + + CmdMeshBoundingBox - Mesh - Mesh + Mesh + Mesh - Boundings info... - Boundings info... + Boundings info... + Boundings info... - Shows the boundings of the selected mesh - Shows the boundings of the selected mesh + Shows the boundings of the selected mesh + Shows the boundings of the selected mesh - - + + CmdMeshBuildRegularSolid - Mesh - Mesh + Mesh + Mesh - Regular solid... - Regular solid... + Regular solid... + Regular solid... - Builds a regular solid - Builds a regular solid + Builds a regular solid + Builds a regular solid - - + + CmdMeshDemolding - Interactive demolding direction - Interactive demolding direction + Interactive demolding direction + Interactive demolding direction - Mesh - Mesh + Mesh + Mesh - - + + CmdMeshDifference - Mesh - Mesh + Mesh + Mesh - Difference - Difference + Difference + Difference - - + + CmdMeshEvaluateFacet - Mesh - Mesh + Mesh + Mesh - Face info - 面の情報 + Face info + 面の情報 - Information about face - Information about face + Information about face + Information about face - - + + CmdMeshEvaluateSolid - Mesh - Mesh + Mesh + Mesh - Check solid mesh - Check solid mesh + Check solid mesh + Check solid mesh - Checks whether the mesh is a solid - Checks whether the mesh is a solid + Checks whether the mesh is a solid + Checks whether the mesh is a solid - - + + CmdMeshEvaluation - Mesh - Mesh + Mesh + Mesh - Opens a dialog to analyze and repair a mesh - Opens a dialog to analyze and repair a mesh + Opens a dialog to analyze and repair a mesh + Opens a dialog to analyze and repair a mesh - Evaluate && Repair mesh... - Evaluate && Repair mesh... + Evaluate && Repair mesh... + Evaluate && Repair mesh... - - + + CmdMeshExMakeMesh - Mesh - Mesh + Mesh + Mesh - Make a Box - Make a Box + Make a Box + Make a Box - - + + CmdMeshExMakeTool - Mesh - Mesh + Mesh + Mesh - Make a Tool - Make a Tool + Make a Tool + Make a Tool - - + + CmdMeshExMakeUnion - Mesh - Mesh + Mesh + Mesh - Make Union - Make Union + Make Union + Make Union - - + + CmdMeshExport - Mesh - Mesh + Mesh + Mesh - Export mesh... - Export mesh... + Export mesh... + Export mesh... - Exports a mesh to file - メッシュをファイルにエクスポート + Exports a mesh to file + メッシュをファイルにエクスポート - - + + CmdMeshFillInteractiveHole - Mesh - Mesh + Mesh + Mesh - Close hole - Close hole + Close hole + Close hole - Close holes interactively - 対話形式で穴を閉じる + Close holes interactively + 対話形式で穴を閉じる - - + + CmdMeshFillupHoles - Mesh - Mesh + Mesh + Mesh - Fill holes... - 穴を閉じる... + Fill holes... + 穴を閉じる... - Fill holes of the mesh - メッシュの穴を閉じる + Fill holes of the mesh + メッシュの穴を閉じる - - + + CmdMeshFlipNormals - Mesh - Mesh + Mesh + Mesh - Flip normals - 法線を反転 + Flip normals + 法線を反転 - Flips the normals of the mesh - Flips the normals of the mesh + Flips the normals of the mesh + Flips the normals of the mesh - - + + CmdMeshFromGeometry - Mesh - Mesh + Mesh + Mesh - Create mesh from geometry... - Create mesh from geometry... + Create mesh from geometry... + Create mesh from geometry... - Create mesh from the selected geometry - Create mesh from the selected geometry + Create mesh from the selected geometry + Create mesh from the selected geometry - - + + CmdMeshHarmonizeNormals - Mesh - Mesh + Mesh + Mesh - Harmonize normals - Harmonize normals + Harmonize normals + Harmonize normals - Harmonizes the normals of the mesh - Harmonizes the normals of the mesh + Harmonizes the normals of the mesh + Harmonizes the normals of the mesh - - + + CmdMeshImport - Mesh - Mesh + Mesh + Mesh - Import mesh... - Import mesh... + Import mesh... + Import mesh... - Imports a mesh from file - Imports a mesh from file + Imports a mesh from file + Imports a mesh from file - - + + CmdMeshIntersection - Mesh - Mesh + Mesh + Mesh - Intersection - Intersection + Intersection + Intersection - - + + CmdMeshPolyCut - Mesh - Mesh + Mesh + Mesh - Cut mesh - Cut mesh + Cut mesh + Cut mesh - Cuts a mesh with a picked polygon - Cuts a mesh with a picked polygon + Cuts a mesh with a picked polygon + Cuts a mesh with a picked polygon - - + + CmdMeshPolySegm - Mesh - Mesh + Mesh + Mesh - Make segment - Make segment + Make segment + Make segment - Creates a mesh segment - Creates a mesh segment + Creates a mesh segment + Creates a mesh segment - - + + CmdMeshPolySelect - Mesh - Mesh + Mesh + Mesh - Select mesh - Select mesh + Select mesh + Select mesh - Select an area of the mesh - Select an area of the mesh + Select an area of the mesh + Select an area of the mesh - - + + CmdMeshPolySplit - Mesh - Mesh + Mesh + Mesh - Split mesh - Split mesh + Split mesh + Split mesh - Splits a mesh into two meshes - Splits a mesh into two meshes + Splits a mesh into two meshes + Splits a mesh into two meshes - - + + + CmdMeshPolyTrim + + Mesh + Mesh + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Mesh + Mesh + Mesh - Remove components by hand... - Remove components by hand... + Remove components by hand... + Remove components by hand... - Mark a component to remove it from the mesh - Mark a component to remove it from the mesh + Mark a component to remove it from the mesh + Mark a component to remove it from the mesh - - + + CmdMeshRemoveComponents - Mesh - Mesh + Mesh + Mesh - Remove components... - Remove components... + Remove components... + Remove components... - Remove topologic independent components from the mesh - Remove topologic independent components from the mesh + Remove topologic independent components from the mesh + Remove topologic independent components from the mesh - - + + + CmdMeshSegmentation + + Mesh + Mesh + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Mesh + Mesh + Mesh - Smooth... - Smooth... + Smooth... + Smooth... - Smooth the selected meshes - Smooth the selected meshes + Smooth the selected meshes + Smooth the selected meshes - - + + CmdMeshToolMesh - Mesh - Mesh + Mesh + Mesh - Segment by tool mesh - Segment by tool mesh + Segment by tool mesh + Segment by tool mesh - Creates a segment from a given tool mesh - Creates a segment from a given tool mesh + Creates a segment from a given tool mesh + Creates a segment from a given tool mesh - - + + CmdMeshTransform - Mesh - Mesh + Mesh + Mesh - Transform mesh - メッシュに変換します。 + Transform mesh + メッシュに変換します。 - Rotate or move a mesh - Rotate or move a mesh + Rotate or move a mesh + Rotate or move a mesh - - + + CmdMeshUnion - Mesh - Mesh + Mesh + Mesh - Union - Union + Union + Union - - + + CmdMeshVertexCurvature - Mesh - Mesh + Mesh + Mesh - Calculates the curvature of the vertices of a mesh - メッシュの頂点の曲率を計算 + Calculates the curvature of the vertices of a mesh + メッシュの頂点の曲率を計算 - Curvature plot - Curvature plot + Curvature plot + Curvature plot - - + + CmdMeshVertexCurvatureInfo - Mesh - Mesh + Mesh + Mesh - Curvature info - Curvature info + Curvature info + Curvature info - Information about curvature - Information about curvature + Information about curvature + Information about curvature - - + + MeshGui::DlgEvaluateMesh - &Help - ヘルプ (&H) + &Help + ヘルプ (&H) - F1 - F1 + F1 + F1 - &Close - 閉じる (&C) + &Close + 閉じる (&C) - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Mesh information + Mesh information + Mesh information - No information - No information + No information + No information - Number of points: - Number of points: + Number of points: + Number of points: - Number of edges: - エッジの数: + Number of edges: + エッジの数: - Refresh - 更新 + Refresh + 更新 - Analyze - Analyze + Analyze + Analyze - Repair - Repair + Repair + Repair - Orientation - 向き + Orientation + 向き - Degenerated faces - Degenerated faces + Degenerated faces + Degenerated faces - Face indices - Face indices + Face indices + Face indices - Number of faces: - 面の数: + Number of faces: + 面の数: - Duplicated faces - Duplicated faces + Duplicated faces + Duplicated faces - Duplicated points - Duplicated points + Duplicated points + Duplicated points - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Self-intersections - Self-intersections + Self-intersections + Self-intersections - All above tests together - All above tests together + All above tests together + All above tests together - Repetitive repair - Repetitive repair + Repetitive repair + Repetitive repair - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - Folds on surface - Folds on surface + Folds on surface + Folds on surface - - + + MeshGui::DlgEvaluateMeshImp - No information - No information + No information + No information - Invalid neighbour indices - Invalid neighbour indices + Invalid neighbour indices + Invalid neighbour indices - Invalid face indices - Invalid face indices + Invalid face indices + Invalid face indices - Invalid point indices - Invalid point indices + Invalid point indices + Invalid point indices - Multiple point indices - Multiple point indices + Multiple point indices + Multiple point indices - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Cannot remove non-manifolds - Cannot remove non-manifolds + Cannot remove non-manifolds + Cannot remove non-manifolds - No selection - No selection + No selection + No selection - No flipped normals - No flipped normals + No flipped normals + No flipped normals - %1 flipped normals - %1 flipped normals + %1 flipped normals + %1 flipped normals - No non-manifolds - No non-manifolds + No non-manifolds + No non-manifolds - %1 non-manifolds - %1 non-manifolds + %1 non-manifolds + %1 non-manifolds - No invalid indices - No invalid indices + No invalid indices + No invalid indices - No degenerations - No degenerations + No degenerations + No degenerations - %1 degenerated faces - %1 degenerated faces + %1 degenerated faces + %1 degenerated faces - No duplicated faces - No duplicated faces + No duplicated faces + No duplicated faces - %1 duplicated faces - %1 の重複面 + %1 duplicated faces + %1 の重複面 - No duplicated points - No duplicated points + No duplicated points + No duplicated points - Duplicated points - Duplicated points + Duplicated points + Duplicated points - Orientation - 向き + Orientation + 向き - Indices - Indices + Indices + Indices - Degenerations - Degenerations + Degenerations + Degenerations - Duplicated faces - Duplicated faces + Duplicated faces + Duplicated faces - No self-intersections - No self-intersections + No self-intersections + No self-intersections - Self-intersections - Self-intersections + Self-intersections + Self-intersections - Mesh repair - Mesh repair + Mesh repair + Mesh repair - Flipped normals found - Flipped normals found + Flipped normals found + Flipped normals found - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - No folds on surface - No folds on surface + No folds on surface + No folds on surface - %1 folds on surface - %1 folds on surface + %1 folds on surface + %1 folds on surface - Folds - Folds + Folds + Folds - - + + MeshGui::DlgRegularSolid - Regular Solid - Regular Solid + Regular Solid + Regular Solid - &Create - &Create + &Create + &Create - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - 閉じる(&O) + Cl&ose + 閉じる(&O) - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Solid: + Solid: + Solid: - Cube - Cube + Cube + Cube - Cylinder - Cylinder + Cylinder + Cylinder - Cone - Cone + Cone + Cone - Sphere - Sphere + Sphere + Sphere - Ellipsoid - Ellipsoid + Ellipsoid + Ellipsoid - Torus - Torus + Torus + Torus - Height: - Height: + Height: + Height: - Length: - Length: + Length: + Length: - Width: - 幅: + Width: + 幅: - Radius: - 半径: + Radius: + 半径: - Closed - Closed + Closed + Closed - Sampling: - Sampling: + Sampling: + Sampling: - Edge length: - エッジの長さ: + Edge length: + エッジの長さ: - Radius 1: - 半径 1: + Radius 1: + 半径 1: - Radius 2: - 半径 2: + Radius 2: + 半径 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Create %1 + Create %1 + Create %1 - No active document - No active document + No active document + No active document - - + + MeshGui::DlgSettingsMeshView - Mesh view - Mesh view + Mesh view + Mesh view - Two-side rendering - Two-side rendering + Two-side rendering + Two-side rendering - Backface color - Backface color + Backface color + Backface color - Smoothing - スムージング + Smoothing + スムージング - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - Crease angle - Crease angle + Crease angle + Crease angle - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - 頂点ごとに法線を定義します。 + Define normal per vertex + 頂点ごとに法線を定義します。 + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">ヒント</span> </p><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-style:italic;">フォンシェーディング</span>と呼ばれています</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">また、面ごとの法線を定義する方法は</span>フラットシェーディング<span style=" font-style:normal;">と呼ばれています。</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">ヒント</span> </p><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-style:italic;">フォンシェーディング</span>と呼ばれています</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">また、面ごとの法線を定義する方法は</span>フラットシェーディング<span style=" font-style:normal;">と呼ばれています。</span> </p></body></html> + Default appearance for new meshes + Default appearance for new meshes - Default appearance for new meshes - Default appearance for new meshes + Default line color + デフォルトの線の色 - Default line color - デフォルトの線の色 + Mesh transparency + メッシュの透過性 - Mesh transparency - メッシュの透過性 + Default mesh color + Default mesh color - Default mesh color - Default mesh color + Show bounding-box for highlighted or selected meshes + Show bounding-box for highlighted or selected meshes - Show bounding-box for highlighted or selected meshes - Show bounding-box for highlighted or selected meshes + Line transparency + 線の透過性 - - Line transparency - 線の透過性 - - - + + MeshGui::DlgSmoothing - Smoothing - スムージング + Smoothing + スムージング - Method - メソッド + Method + メソッド - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - パラメータ + Parameter + パラメータ - Iterations: - Iterations: + Iterations: + Iterations: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - 三角形を追加 + Add triangle + 三角形を追加 - Flip normal - 法線を逆向きに設定 + Flip normal + 法線を逆向きに設定 - Clear - クリア + Clear + クリア - Finish - 完了 + Finish + 完了 - - + + MeshGui::RemoveComponents - Remove components - Remove components + Remove components + Remove components - Select - 選択 + Select + 選択 - Select whole component - Select whole component + Select whole component + Select whole component - Pick triangle - Pick triangle + Pick triangle + Pick triangle - < faces than - < faces than + < faces than + < faces than - Region - 領域 + Region + 領域 - Components - Components + Components + Components - All - すべて + All + すべて - Deselect - Deselect + Deselect + Deselect - Deselect whole component - Deselect whole component + Deselect whole component + Deselect whole component - > faces than - > faces than + > faces than + > faces than - Region options - 領域のオプション + Region options + 領域のオプション - Respect only triangles with normals facing screen - Respect only triangles with normals facing screen + Respect only triangles with normals facing screen + Respect only triangles with normals facing screen - Respect only visible triangles - Respect only visible triangles + Respect only visible triangles + Respect only visible triangles - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cylinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sphere + + + MeshGui::TaskRemoveComponents - Delete - 削除 + Delete + 削除 - Invert - 反転 + Invert + 反転 - - + + QDockWidget - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - - + + QObject - Import mesh - Import mesh + Import mesh + Import mesh - Export mesh - Export mesh + Export mesh + Export mesh - Solid Mesh - Solid Mesh + Solid Mesh + Solid Mesh - Boundings - Boundings + Boundings + Boundings - Fill holes - 穴を埋める + Fill holes + 穴を埋める - Fill holes with maximum number of edges: - Fill holes with maximum number of edges: + Fill holes with maximum number of edges: + Fill holes with maximum number of edges: - Binary STL (*.stl) - Binary STL (*.stl) + Binary STL (*.stl) + Binary STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Binary Mesh (*.bms) + Binary Mesh (*.bms) + Binary Mesh (*.bms) - Alias Mesh (*.obj) - Alias Mesh (*.obj) + Alias Mesh (*.obj) + Alias Mesh (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - すべてのファイル (*.*) + All Files (*.*) + すべてのファイル (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Compressed VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - PythonモジュールDEF(*.py) + Python module def (*.py) + PythonモジュールDEF(*.py) - Meshing Tolerance - Meshing Tolerance + Meshing Tolerance + Meshing Tolerance - Enter tolerance for meshing geometry: - Enter tolerance for meshing geometry: + Enter tolerance for meshing geometry: + Enter tolerance for meshing geometry: - The mesh '%1' is a solid. - '%1'はソリッドメッシュです。 + The mesh '%1' is a solid. + '%1'はソリッドメッシュです。 - The mesh '%1' is not a solid. - The mesh '%1' is not a solid. + The mesh '%1' is not a solid. + The mesh '%1' is not a solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - 最小=<%1,%2,%3> + 最小=<%1,%2,%3> 最大=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] - Leave info mode - Leave info mode + Leave info mode + Leave info mode - Index: %1 - Index: %1 + Index: %1 + Index: %1 - Leave hole-filling mode - Leave hole-filling mode + Leave hole-filling mode + Leave hole-filling mode - Leave removal mode - Leave removal mode + Leave removal mode + Leave removal mode - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Delete selected faces + Delete selected faces + Delete selected faces - Clear selected faces - Clear selected faces + Clear selected faces + Clear selected faces - Annotation - Annotation + Annotation + Annotation - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analyze + Analyze + Analyze - Boolean - Boolean + Boolean + Boolean - &Meshes - メッシュ (&M) + &Meshes + メッシュ (&M) - Mesh tools - メッシュツール + Mesh tools + メッシュツール - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_nl.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_nl.ts index 9082a4c74..4f50ae59d 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_nl.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_nl.ts @@ -1,1124 +1,1205 @@ - - + + CmdMeshAddFacet - Mesh - Mesh + Mesh + Mesh - Add triangle - Driehoek toevoegen + Add triangle + Driehoek toevoegen - Add triangle manually to a mesh - Add triangle manually to a mesh + Add triangle manually to a mesh + Add triangle manually to a mesh - - + + CmdMeshBoundingBox - Mesh - Mesh + Mesh + Mesh - Boundings info... - Boundings info... + Boundings info... + Boundings info... - Shows the boundings of the selected mesh - Shows the boundings of the selected mesh + Shows the boundings of the selected mesh + Shows the boundings of the selected mesh - - + + CmdMeshBuildRegularSolid - Mesh - Mesh + Mesh + Mesh - Regular solid... - Regular solid... + Regular solid... + Regular solid... - Builds a regular solid - Builds a regular solid + Builds a regular solid + Builds a regular solid - - + + CmdMeshDemolding - Interactive demolding direction - Interactive demolding direction + Interactive demolding direction + Interactive demolding direction - Mesh - Mesh + Mesh + Mesh - - + + CmdMeshDifference - Mesh - Mesh + Mesh + Mesh - Difference - Verschil + Difference + Verschil - - + + CmdMeshEvaluateFacet - Mesh - Mesh + Mesh + Mesh - Face info - Vlak-info + Face info + Vlak-info - Information about face - Information about face + Information about face + Information about face - - + + CmdMeshEvaluateSolid - Mesh - Mesh + Mesh + Mesh - Check solid mesh - Check solid mesh + Check solid mesh + Check solid mesh - Checks whether the mesh is a solid - Checks whether the mesh is a solid + Checks whether the mesh is a solid + Checks whether the mesh is a solid - - + + CmdMeshEvaluation - Mesh - Mesh + Mesh + Mesh - Opens a dialog to analyze and repair a mesh - Opens a dialog to analyze and repair a mesh + Opens a dialog to analyze and repair a mesh + Opens a dialog to analyze and repair a mesh - Evaluate && Repair mesh... - Evaluate && Repair mesh... + Evaluate && Repair mesh... + Evaluate && Repair mesh... - - + + CmdMeshExMakeMesh - Mesh - Mesh + Mesh + Mesh - Make a Box - Make a Box + Make a Box + Make a Box - - + + CmdMeshExMakeTool - Mesh - Mesh + Mesh + Mesh - Make a Tool - Make a Tool + Make a Tool + Make a Tool - - + + CmdMeshExMakeUnion - Mesh - Mesh + Mesh + Mesh - Make Union - Make Union + Make Union + Make Union - - + + CmdMeshExport - Mesh - Mesh + Mesh + Mesh - Export mesh... - Export mesh... + Export mesh... + Export mesh... - Exports a mesh to file - Exports a mesh to file + Exports a mesh to file + Exports a mesh to file - - + + CmdMeshFillInteractiveHole - Mesh - Mesh + Mesh + Mesh - Close hole - Dicht gat + Close hole + Dicht gat - Close holes interactively - Sluit gaten interactief + Close holes interactively + Sluit gaten interactief - - + + CmdMeshFillupHoles - Mesh - Mesh + Mesh + Mesh - Fill holes... - Vul gaten... + Fill holes... + Vul gaten... - Fill holes of the mesh - Fill holes of the mesh + Fill holes of the mesh + Fill holes of the mesh - - + + CmdMeshFlipNormals - Mesh - Mesh + Mesh + Mesh - Flip normals - Loodlijnen spiegelen + Flip normals + Loodlijnen spiegelen - Flips the normals of the mesh - Flips the normals of the mesh + Flips the normals of the mesh + Flips the normals of the mesh - - + + CmdMeshFromGeometry - Mesh - Mesh + Mesh + Mesh - Create mesh from geometry... - Create mesh from geometry... + Create mesh from geometry... + Create mesh from geometry... - Create mesh from the selected geometry - Create mesh from the selected geometry + Create mesh from the selected geometry + Create mesh from the selected geometry - - + + CmdMeshHarmonizeNormals - Mesh - Mesh + Mesh + Mesh - Harmonize normals - Harmoniseer loodlijnen + Harmonize normals + Harmoniseer loodlijnen - Harmonizes the normals of the mesh - Harmonizes the normals of the mesh + Harmonizes the normals of the mesh + Harmonizes the normals of the mesh - - + + CmdMeshImport - Mesh - Mesh + Mesh + Mesh - Import mesh... - Import mesh... + Import mesh... + Import mesh... - Imports a mesh from file - Imports a mesh from file + Imports a mesh from file + Imports a mesh from file - - + + CmdMeshIntersection - Mesh - Mesh + Mesh + Mesh - Intersection - Snijpunt + Intersection + Snijpunt - - + + CmdMeshPolyCut - Mesh - Mesh + Mesh + Mesh - Cut mesh - Cut mesh + Cut mesh + Cut mesh - Cuts a mesh with a picked polygon - Cuts a mesh with a picked polygon + Cuts a mesh with a picked polygon + Cuts a mesh with a picked polygon - - + + CmdMeshPolySegm - Mesh - Mesh + Mesh + Mesh - Make segment - Maak segment + Make segment + Maak segment - Creates a mesh segment - Creates a mesh segment + Creates a mesh segment + Creates a mesh segment - - + + CmdMeshPolySelect - Mesh - Mesh + Mesh + Mesh - Select mesh - Select mesh + Select mesh + Select mesh - Select an area of the mesh - Select an area of the mesh + Select an area of the mesh + Select an area of the mesh - - + + CmdMeshPolySplit - Mesh - Mesh + Mesh + Mesh - Split mesh - Split mesh + Split mesh + Split mesh - Splits a mesh into two meshes - Splits a mesh into two meshes + Splits a mesh into two meshes + Splits a mesh into two meshes - - + + + CmdMeshPolyTrim + + Mesh + Mesh + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Mesh + Mesh + Mesh - Remove components by hand... - Verwijder componenten met de hand... + Remove components by hand... + Verwijder componenten met de hand... - Mark a component to remove it from the mesh - Mark a component to remove it from the mesh + Mark a component to remove it from the mesh + Mark a component to remove it from the mesh - - + + CmdMeshRemoveComponents - Mesh - Mesh + Mesh + Mesh - Remove components... - Verwijder componenten... + Remove components... + Verwijder componenten... - Remove topologic independent components from the mesh - Remove topologic independent components from the mesh + Remove topologic independent components from the mesh + Remove topologic independent components from the mesh - - + + + CmdMeshSegmentation + + Mesh + Mesh + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Mesh + Mesh + Mesh - Smooth... - Glad... + Smooth... + Glad... - Smooth the selected meshes - Smooth the selected meshes + Smooth the selected meshes + Smooth the selected meshes - - + + CmdMeshToolMesh - Mesh - Mesh + Mesh + Mesh - Segment by tool mesh - Segment by tool mesh + Segment by tool mesh + Segment by tool mesh - Creates a segment from a given tool mesh - Creates a segment from a given tool mesh + Creates a segment from a given tool mesh + Creates a segment from a given tool mesh - - + + CmdMeshTransform - Mesh - Mesh + Mesh + Mesh - Transform mesh - Transform mesh + Transform mesh + Transform mesh - Rotate or move a mesh - Rotate or move a mesh + Rotate or move a mesh + Rotate or move a mesh - - + + CmdMeshUnion - Mesh - Mesh + Mesh + Mesh - Union - Verbinden + Union + Verbinden - - + + CmdMeshVertexCurvature - Mesh - Mesh + Mesh + Mesh - Calculates the curvature of the vertices of a mesh - Calculates the curvature of the vertices of a mesh + Calculates the curvature of the vertices of a mesh + Calculates the curvature of the vertices of a mesh - Curvature plot - Curvature plot + Curvature plot + Curvature plot - - + + CmdMeshVertexCurvatureInfo - Mesh - Mesh + Mesh + Mesh - Curvature info - Kromming info + Curvature info + Kromming info - Information about curvature - Informatie over kromming + Information about curvature + Informatie over kromming - - + + MeshGui::DlgEvaluateMesh - &Help - &Help + &Help + &Help - F1 - F1 + F1 + F1 - &Close - &Sluiten + &Close + &Sluiten - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Mesh information + Mesh information + Mesh information - No information - Geen informatie + No information + Geen informatie - Number of points: - Aantal punten: + Number of points: + Aantal punten: - Number of edges: - Aantal randen: + Number of edges: + Aantal randen: - Refresh - Verversen + Refresh + Verversen - Analyze - Analyseren + Analyze + Analyseren - Repair - Reparatie + Repair + Reparatie - Orientation - Oriëntatie + Orientation + Oriëntatie - Degenerated faces - Degenerated faces + Degenerated faces + Degenerated faces - Face indices - Vlakindexen + Face indices + Vlakindexen - Number of faces: - Aantal vlakken: + Number of faces: + Aantal vlakken: - Duplicated faces - Dubbele vlakken + Duplicated faces + Dubbele vlakken - Duplicated points - dubbele punten + Duplicated points + dubbele punten - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Self-intersections - Zelf-doorsnijdingen + Self-intersections + Zelf-doorsnijdingen - All above tests together - Alle bovenstaande tests samen + All above tests together + Alle bovenstaande tests samen - Repetitive repair - Repetitive repair + Repetitive repair + Repetitive repair - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - Folds on surface - Folds on surface + Folds on surface + Folds on surface - - + + MeshGui::DlgEvaluateMeshImp - No information - Geen informatie + No information + Geen informatie - Invalid neighbour indices - Invalid neighbour indices + Invalid neighbour indices + Invalid neighbour indices - Invalid face indices - Invalid face indices + Invalid face indices + Invalid face indices - Invalid point indices - Invalid point indices + Invalid point indices + Invalid point indices - Multiple point indices - Multiple point indices + Multiple point indices + Multiple point indices - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Cannot remove non-manifolds - Cannot remove non-manifolds + Cannot remove non-manifolds + Cannot remove non-manifolds - No selection - Geen selectie + No selection + Geen selectie - No flipped normals - No flipped normals + No flipped normals + No flipped normals - %1 flipped normals - %1 flipped normals + %1 flipped normals + %1 flipped normals - No non-manifolds - No non-manifolds + No non-manifolds + No non-manifolds - %1 non-manifolds - %1 non-manifolds + %1 non-manifolds + %1 non-manifolds - No invalid indices - Geen ongeldige indices + No invalid indices + Geen ongeldige indices - No degenerations - No degenerations + No degenerations + No degenerations - %1 degenerated faces - %1 degenerated faces + %1 degenerated faces + %1 degenerated faces - No duplicated faces - Geen gedupliceerde vlakken + No duplicated faces + Geen gedupliceerde vlakken - %1 duplicated faces - %1 dubbele vlakken + %1 duplicated faces + %1 dubbele vlakken - No duplicated points - Geen dubbele punten + No duplicated points + Geen dubbele punten - Duplicated points - dubbele punten + Duplicated points + dubbele punten - Orientation - Oriëntatie + Orientation + Oriëntatie - Indices - Indexen + Indices + Indexen - Degenerations - Degenerations + Degenerations + Degenerations - Duplicated faces - Dubbele vlakken + Duplicated faces + Dubbele vlakken - No self-intersections - No self-intersections + No self-intersections + No self-intersections - Self-intersections - Zelf-doorsnijdingen + Self-intersections + Zelf-doorsnijdingen - Mesh repair - Mesh repair + Mesh repair + Mesh repair - Flipped normals found - Gespiegelde normalen gevonden + Flipped normals found + Gespiegelde normalen gevonden - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - No folds on surface - Geen plooien op het oppervlak + No folds on surface + Geen plooien op het oppervlak - %1 folds on surface - 1% plooien op het oppervlak + %1 folds on surface + 1% plooien op het oppervlak - Folds - Plooien + Folds + Plooien - - + + MeshGui::DlgRegularSolid - Regular Solid - Regular Solid + Regular Solid + Regular Solid - &Create - &Maken + &Create + &Maken - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Sl&uiten + Cl&ose + Sl&uiten - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Solid: + Solid: + Solid: - Cube - Kubus + Cube + Kubus - Cylinder - Cilinder + Cylinder + Cilinder - Cone - Kegel + Cone + Kegel - Sphere - Bol + Sphere + Bol - Ellipsoid - Ellipsoïde + Ellipsoid + Ellipsoïde - Torus - Torus + Torus + Torus - Height: - Hoogte: + Height: + Hoogte: - Length: - Lengte: + Length: + Lengte: - Width: - Breedte: + Width: + Breedte: - Radius: - Straal: + Radius: + Straal: - Closed - Gesloten + Closed + Gesloten - Sampling: - Sampling: + Sampling: + Sampling: - Edge length: - Randlengte: + Edge length: + Randlengte: - Radius 1: - Straal 1: + Radius 1: + Straal 1: - Radius 2: - Straal 2: + Radius 2: + Straal 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Maak %1 + Create %1 + Maak %1 - No active document - Geen actief document + No active document + Geen actief document - - + + MeshGui::DlgSettingsMeshView - Mesh view - Mesh view + Mesh view + Mesh view - Two-side rendering - Twee-zijdig rendering + Two-side rendering + Twee-zijdig rendering - Backface color - Achtervlak kleur + Backface color + Achtervlak kleur - Smoothing - Vloeiend maken + Smoothing + Vloeiend maken - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - Crease angle - Crease angle + Crease angle + Crease angle - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Definieer normaal per vertex + Define normal per vertex + Definieer normaal per vertex + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Het definiëren van normalen per vertex heet ook wel<span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">terwijl het definieren van normalen per vlak wordt genoemd</span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Het definiëren van normalen per vertex heet ook wel<span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">terwijl het definieren van normalen per vlak wordt genoemd</span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Standaardweergave voor nieuwe rasters - Default appearance for new meshes - Standaardweergave voor nieuwe rasters + Default line color + Standaardlijnkleur - Default line color - Standaardlijnkleur + Mesh transparency + Raster-transparantie - Mesh transparency - Raster-transparantie + Default mesh color + Standaard rasterkleur - Default mesh color - Standaard rasterkleur + Show bounding-box for highlighted or selected meshes + Toon omsluitende doos voor gemarkeerde of geselecteerde raster - Show bounding-box for highlighted or selected meshes - Toon omsluitende doos voor gemarkeerde of geselecteerde raster + Line transparency + Lijn transparantie - - Line transparency - Lijn transparantie - - - + + MeshGui::DlgSmoothing - Smoothing - Vloeiend maken + Smoothing + Vloeiend maken - Method - Methode + Method + Methode - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parameter + Parameter + Parameter - Iterations: - Iteraties: + Iterations: + Iteraties: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Driehoek toevoegen + Add triangle + Driehoek toevoegen - Flip normal - Normaal spiegelen + Flip normal + Normaal spiegelen - Clear - Wissen + Clear + Wissen - Finish - Voltooien + Finish + Voltooien - - + + MeshGui::RemoveComponents - Remove components - Verwijder componenten + Remove components + Verwijder componenten - Select - Selecteer + Select + Selecteer - Select whole component - Selecteer gehele component + Select whole component + Selecteer gehele component - Pick triangle - Kies driehoek + Pick triangle + Kies driehoek - < faces than - < vlakken dan + < faces than + < vlakken dan - Region - Sectie + Region + Sectie - Components - Onderdelen + Components + Onderdelen - All - Alle + All + Alle - Deselect - Deselecteer + Deselect + Deselecteer - Deselect whole component - Deselecteer gehele component + Deselect whole component + Deselecteer gehele component - > faces than - > vlakken dan + > faces than + > vlakken dan - Region options - Region options + Region options + Region options - Respect only triangles with normals facing screen - Respecteren alleen driehoeken met normalen naar het scherm toe + Respect only triangles with normals facing screen + Respecteren alleen driehoeken met normalen naar het scherm toe - Respect only visible triangles - Respect alleen zichtbaar driehoeken + Respect only visible triangles + Respect alleen zichtbaar driehoeken - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cilinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Bol + + + MeshGui::TaskRemoveComponents - Delete - Verwijderen + Delete + Verwijderen - Invert - Omkeren + Invert + Omkeren - - + + QDockWidget - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - - + + QObject - Import mesh - Import mesh + Import mesh + Import mesh - Export mesh - Export mesh + Export mesh + Export mesh - Solid Mesh - Solid Mesh + Solid Mesh + Solid Mesh - Boundings - Boundings + Boundings + Boundings - Fill holes - Vul gaten + Fill holes + Vul gaten - Fill holes with maximum number of edges: - Vul de gaten met maximum aantal randen: + Fill holes with maximum number of edges: + Vul de gaten met maximum aantal randen: - Binary STL (*.stl) - Binaire STL (*.stl) + Binary STL (*.stl) + Binaire STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Binary Mesh (*.bms) + Binary Mesh (*.bms) + Binary Mesh (*.bms) - Alias Mesh (*.obj) - Alias Mesh (*.obj) + Alias Mesh (*.obj) + Alias Mesh (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii(*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii(*.iv) - All Files (*.*) - Alle bestanden (*.*) + All Files (*.*) + Alle bestanden (*.*) - ASCII STL (*.stl) - ASCII STL (*. stl) + ASCII STL (*.stl) + ASCII STL (*. stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Gecomprimeerde VRML 2.0 (*.WRZ) + Compressed VRML 2.0 (*.wrz) + Gecomprimeerde VRML 2.0 (*.WRZ) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python module def (*.py) + Python module def (*.py) + Python module def (*.py) - Meshing Tolerance - Meshing Tolerance + Meshing Tolerance + Meshing Tolerance - Enter tolerance for meshing geometry: - Enter tolerance for meshing geometry: + Enter tolerance for meshing geometry: + Enter tolerance for meshing geometry: - The mesh '%1' is a solid. - The mesh '%1' is a solid. + The mesh '%1' is a solid. + The mesh '%1' is a solid. - The mesh '%1' is not a solid. - The mesh '%1' is not a solid. + The mesh '%1' is not a solid. + The mesh '%1' is not a solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Punten: %1, Randen: %2 Vlakken: %3] + [Points: %1, Edges: %2 Faces: %3] + [Punten: %1, Randen: %2 Vlakken: %3] - Leave info mode - Info modus verlaten + Leave info mode + Info modus verlaten - Index: %1 - Index: %1 + Index: %1 + Index: %1 - Leave hole-filling mode - Gatvulmodus verlaten + Leave hole-filling mode + Gatvulmodus verlaten - Leave removal mode - Verwijdermodus verlaten + Leave removal mode + Verwijdermodus verlaten - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object-bestandsindeling (*.off) + Object File Format (*.off) + Object-bestandsindeling (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Verwijder geselecteerde vlakken + Delete selected faces + Verwijder geselecteerde vlakken - Clear selected faces - Opheffen geselecteerde vlakken + Clear selected faces + Opheffen geselecteerde vlakken - Annotation - Aantekening + Annotation + Aantekening - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analyseren + Analyze + Analyseren - Boolean - Boolean + Boolean + Boolean - &Meshes - &Meshes + &Meshes + &Meshes - Mesh tools - Mesh tools + Mesh tools + Mesh tools - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_no.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_no.ts index 53d0b14af..1ee1090b7 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_no.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_no.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Nett + Mesh + Nett - Add triangle - Legg til triangel + Add triangle + Legg til triangel - Add triangle manually to a mesh - Legg triangel manuelt til et nett + Add triangle manually to a mesh + Legg triangel manuelt til et nett - - + + CmdMeshBoundingBox - Mesh - Nett + Mesh + Nett - Boundings info... - Rammeinfo... + Boundings info... + Rammeinfo... - Shows the boundings of the selected mesh - Viser ramme for valgt nett + Shows the boundings of the selected mesh + Viser ramme for valgt nett - - + + CmdMeshBuildRegularSolid - Mesh - Nett + Mesh + Nett - Regular solid... - Vanlig solid... + Regular solid... + Vanlig solid... - Builds a regular solid - Bygger en vanlig solid + Builds a regular solid + Bygger en vanlig solid - - + + CmdMeshDemolding - Interactive demolding direction - Interaktive avstøpningsretning + Interactive demolding direction + Interaktive avstøpningsretning - Mesh - Nett + Mesh + Nett - - + + CmdMeshDifference - Mesh - Nett + Mesh + Nett - Difference - Differanse + Difference + Differanse - - + + CmdMeshEvaluateFacet - Mesh - Nett + Mesh + Nett - Face info - Flateinfo + Face info + Flateinfo - Information about face - Informasjon om falte + Information about face + Informasjon om falte - - + + CmdMeshEvaluateSolid - Mesh - Nett + Mesh + Nett - Check solid mesh - Sjekk solid nett + Check solid mesh + Sjekk solid nett - Checks whether the mesh is a solid - Kontrollerer om nettet er en solid + Checks whether the mesh is a solid + Kontrollerer om nettet er en solid - - + + CmdMeshEvaluation - Mesh - Nett + Mesh + Nett - Opens a dialog to analyze and repair a mesh - Åpner en dialog for å analysere og reparere et nett + Opens a dialog to analyze and repair a mesh + Åpner en dialog for å analysere og reparere et nett - Evaluate && Repair mesh... - Evaluer og reparer nett... + Evaluate && Repair mesh... + Evaluer og reparer nett... - - + + CmdMeshExMakeMesh - Mesh - Nett + Mesh + Nett - Make a Box - Lag en boks + Make a Box + Lag en boks - - + + CmdMeshExMakeTool - Mesh - Nett + Mesh + Nett - Make a Tool - Lag et verktøy + Make a Tool + Lag et verktøy - - + + CmdMeshExMakeUnion - Mesh - Nett + Mesh + Nett - Make Union - Lag sammenføyning + Make Union + Lag sammenføyning - - + + CmdMeshExport - Mesh - Nett + Mesh + Nett - Export mesh... - Eksporter nett... + Export mesh... + Eksporter nett... - Exports a mesh to file - Eksporterer et nett til fil + Exports a mesh to file + Eksporterer et nett til fil - - + + CmdMeshFillInteractiveHole - Mesh - Nett + Mesh + Nett - Close hole - Lukk hull + Close hole + Lukk hull - Close holes interactively - Lukk hull interaktivt + Close holes interactively + Lukk hull interaktivt - - + + CmdMeshFillupHoles - Mesh - Nett + Mesh + Nett - Fill holes... - Fyll hull... + Fill holes... + Fyll hull... - Fill holes of the mesh - Fyll hull i nettet + Fill holes of the mesh + Fyll hull i nettet - - + + CmdMeshFlipNormals - Mesh - Nett + Mesh + Nett - Flip normals - Vend normaler + Flip normals + Vend normaler - Flips the normals of the mesh - Vender normaler på nettet + Flips the normals of the mesh + Vender normaler på nettet - - + + CmdMeshFromGeometry - Mesh - Nett + Mesh + Nett - Create mesh from geometry... - Lag nett av geometri... + Create mesh from geometry... + Lag nett av geometri... - Create mesh from the selected geometry - Lag nett fra valgt geometri + Create mesh from the selected geometry + Lag nett fra valgt geometri - - + + CmdMeshHarmonizeNormals - Mesh - Nett + Mesh + Nett - Harmonize normals - Harmoniser normaler + Harmonize normals + Harmoniser normaler - Harmonizes the normals of the mesh - Harmoniserer normaler i nett + Harmonizes the normals of the mesh + Harmoniserer normaler i nett - - + + CmdMeshImport - Mesh - Nett + Mesh + Nett - Import mesh... - Importer nett... + Import mesh... + Importer nett... - Imports a mesh from file - Importerer et nett fra fil + Imports a mesh from file + Importerer et nett fra fil - - + + CmdMeshIntersection - Mesh - Nett + Mesh + Nett - Intersection - Kryssningspunkt + Intersection + Kryssningspunkt - - + + CmdMeshPolyCut - Mesh - Nett + Mesh + Nett - Cut mesh - Klipp ut nett + Cut mesh + Klipp ut nett - Cuts a mesh with a picked polygon - Klipper ut et nett med en valgt polygon + Cuts a mesh with a picked polygon + Klipper ut et nett med en valgt polygon - - + + CmdMeshPolySegm - Mesh - Nett + Mesh + Nett - Make segment - Lag segment + Make segment + Lag segment - Creates a mesh segment - Lager et nettsegment + Creates a mesh segment + Lager et nettsegment - - + + CmdMeshPolySelect - Mesh - Nett + Mesh + Nett - Select mesh - Velg nett + Select mesh + Velg nett - Select an area of the mesh - Velg et område i nettet + Select an area of the mesh + Velg et område i nettet - - + + CmdMeshPolySplit - Mesh - Nett + Mesh + Nett - Split mesh - Del nett + Split mesh + Del nett - Splits a mesh into two meshes - Deler et nett i to + Splits a mesh into two meshes + Deler et nett i to - - + + + CmdMeshPolyTrim + + Mesh + Nett + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Nett + Mesh + Nett - Remove components by hand... - Fjern elementer for hånd... + Remove components by hand... + Fjern elementer for hånd... - Mark a component to remove it from the mesh - Velg et element å fjerne fra nettet + Mark a component to remove it from the mesh + Velg et element å fjerne fra nettet - - + + CmdMeshRemoveComponents - Mesh - Nett + Mesh + Nett - Remove components... - Fjern elementer... + Remove components... + Fjern elementer... - Remove topologic independent components from the mesh - Remove topologic independent components from the mesh + Remove topologic independent components from the mesh + Remove topologic independent components from the mesh - - + + + CmdMeshSegmentation + + Mesh + Nett + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Nett + Mesh + Nett - Smooth... - Jevn ut... + Smooth... + Jevn ut... - Smooth the selected meshes - Jevn ut valgte nett + Smooth the selected meshes + Jevn ut valgte nett - - + + CmdMeshToolMesh - Mesh - Nett + Mesh + Nett - Segment by tool mesh - Segment av nettverktøyet + Segment by tool mesh + Segment av nettverktøyet - Creates a segment from a given tool mesh - Oppretter et segment fra et gitt nettverktøy + Creates a segment from a given tool mesh + Oppretter et segment fra et gitt nettverktøy - - + + CmdMeshTransform - Mesh - Nett + Mesh + Nett - Transform mesh - Transformer nett + Transform mesh + Transformer nett - Rotate or move a mesh - Roter eller flytt et net + Rotate or move a mesh + Roter eller flytt et net - - + + CmdMeshUnion - Mesh - Nett + Mesh + Nett - Union - Sammenføy + Union + Sammenføy - - + + CmdMeshVertexCurvature - Mesh - Nett + Mesh + Nett - Calculates the curvature of the vertices of a mesh - Beregner krumningen rundt noder i et nett + Calculates the curvature of the vertices of a mesh + Beregner krumningen rundt noder i et nett - Curvature plot - Krummingsplot + Curvature plot + Krummingsplot - - + + CmdMeshVertexCurvatureInfo - Mesh - Nett + Mesh + Nett - Curvature info - Krummingsinfo + Curvature info + Krummingsinfo - Information about curvature - Informasjon om krumning + Information about curvature + Informasjon om krumning - - + + MeshGui::DlgEvaluateMesh - &Help - &Hjelp + &Help + &Hjelp - F1 - F1 + F1 + F1 - &Close - &Lukk + &Close + &Lukk - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Nettinformasjon + Mesh information + Nettinformasjon - No information - Ingen informasjon + No information + Ingen informasjon - Number of points: - Antall punkter: + Number of points: + Antall punkter: - Number of edges: - Antall kanter: + Number of edges: + Antall kanter: - Refresh - Oppdater + Refresh + Oppdater - Analyze - Analyser + Analyze + Analyser - Repair - Reparer + Repair + Reparer - Orientation - Orientering + Orientation + Orientering - Degenerated faces - Degenererte flater + Degenerated faces + Degenererte flater - Face indices - Flateindekser + Face indices + Flateindekser - Number of faces: - Antall flater: + Number of faces: + Antall flater: - Duplicated faces - Dupliserte flater + Duplicated faces + Dupliserte flater - Duplicated points - Dupliserte punkter + Duplicated points + Dupliserte punkter - Non-manifolds - Åpne objekter + Non-manifolds + Åpne objekter - Self-intersections - Selfkryssende + Self-intersections + Selfkryssende - All above tests together - Alle ovennevnte tester sammen + All above tests together + Alle ovennevnte tester sammen - Repetitive repair - Repeterende reparasjon + Repetitive repair + Repeterende reparasjon - Evaluate & Repair Mesh - Evaluer og reparer nett + Evaluate & Repair Mesh + Evaluer og reparer nett - Folds on surface - Folder på overflaten + Folds on surface + Folder på overflaten - - + + MeshGui::DlgEvaluateMeshImp - No information - Ingen informasjon + No information + Ingen informasjon - Invalid neighbour indices - Ugyldige naboindekser + Invalid neighbour indices + Ugyldige naboindekser - Invalid face indices - Ugyldige flateindekser + Invalid face indices + Ugyldige flateindekser - Invalid point indices - Ugyldige punktindekser + Invalid point indices + Ugyldige punktindekser - Multiple point indices - Flere punktindekser + Multiple point indices + Flere punktindekser - Non-manifolds - Åpne objekter + Non-manifolds + Åpne objekter - Cannot remove non-manifolds - Kan ikke fjerne åpne objekter + Cannot remove non-manifolds + Kan ikke fjerne åpne objekter - No selection - Ingen valg + No selection + Ingen valg - No flipped normals - Ingen omvendte normaler + No flipped normals + Ingen omvendte normaler - %1 flipped normals - %1 omvendte normaler + %1 flipped normals + %1 omvendte normaler - No non-manifolds - Ingen åpne objekter + No non-manifolds + Ingen åpne objekter - %1 non-manifolds - %1 åpne objekter + %1 non-manifolds + %1 åpne objekter - No invalid indices - Ingen ugyldige indekser + No invalid indices + Ingen ugyldige indekser - No degenerations - Ingen degenerasjoner + No degenerations + Ingen degenerasjoner - %1 degenerated faces - %1 degenererte flater + %1 degenerated faces + %1 degenererte flater - No duplicated faces - Ingen dupliserte flater + No duplicated faces + Ingen dupliserte flater - %1 duplicated faces - %1 duplisert flate + %1 duplicated faces + %1 duplisert flate - No duplicated points - Ingen dupliserte punkter + No duplicated points + Ingen dupliserte punkter - Duplicated points - Dupliserte punkter + Duplicated points + Dupliserte punkter - Orientation - Orientering + Orientation + Orientering - Indices - Indekser + Indices + Indekser - Degenerations - Degenerasjoner + Degenerations + Degenerasjoner - Duplicated faces - Dupliserte flater + Duplicated faces + Dupliserte flater - No self-intersections - Ingen selvkryssende + No self-intersections + Ingen selvkryssende - Self-intersections - Selfkryssende + Self-intersections + Selfkryssende - Mesh repair - Nettreparasjon + Mesh repair + Nettreparasjon - Flipped normals found - Omvendte normaler funnet + Flipped normals found + Omvendte normaler funnet - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Sjekk mislyktes på grunn av folder på overflaten. Kjør kommandoen for å reparere folder første + Sjekk mislyktes på grunn av folder på overflaten. Kjør kommandoen for å reparere folder første - No folds on surface - Ingen folder på overflaten + No folds on surface + Ingen folder på overflaten - %1 folds on surface - %1 folder på overflaten + %1 folds on surface + %1 folder på overflaten - Folds - Folder + Folds + Folder - - + + MeshGui::DlgRegularSolid - Regular Solid - Standard solid + Regular Solid + Standard solid - &Create - &Lag + &Create + &Lag - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - L&ukk + Cl&ose + L&ukk - Alt+O - Alt + O + Alt+O + Alt + O - Solid: - Solid: + Solid: + Solid: - Cube - Cube + Cube + Cube - Cylinder - Sylinder + Cylinder + Sylinder - Cone - Kjegle + Cone + Kjegle - Sphere - Sfære + Sphere + Sfære - Ellipsoid - Ellipsoide + Ellipsoid + Ellipsoide - Torus - Torus + Torus + Torus - Height: - Høyde: + Height: + Høyde: - Length: - Lengde: + Length: + Lengde: - Width: - Bredde: + Width: + Bredde: - Radius: - Radius: + Radius: + Radius: - Closed - Lukket + Closed + Lukket - Sampling: - Prøvetaking: + Sampling: + Prøvetaking: - Edge length: - Kantlengde: + Edge length: + Kantlengde: - Radius 1: - Radius 1: + Radius 1: + Radius 1: - Radius 2: - Radius 2: + Radius 2: + Radius 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Lag %1 + Create %1 + Lag %1 - No active document - Ingen aktive dokumenter + No active document + Ingen aktive dokumenter - - + + MeshGui::DlgSettingsMeshView - Mesh view - Nett visning + Mesh view + Nett visning - Two-side rendering - Tosidet presentasjonsgjengivelse + Two-side rendering + Tosidet presentasjonsgjengivelse - Backface color - Bakflatefarge + Backface color + Bakflatefarge - Smoothing - Utjevning + Smoothing + Utjevning - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Dette er den minste vinkelen mellom to flater hvor normaler blir kalkulert for flateskyggelegging. </p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Hvis vinkelen på normalene til to nabo flater er mindre enn vinkel på brett, vil flatene bli jevnt skyggelagt rundt felles kant.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Dette er den minste vinkelen mellom to flater hvor normaler blir kalkulert for flateskyggelegging. </p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Hvis vinkelen på normalene til to nabo flater er mindre enn vinkel på brett, vil flatene bli jevnt skyggelagt rundt felles kant.</p></body></html> - Crease angle - Vinkel på brett + Crease angle + Vinkel på brett - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flatskygginging/Phong skyggelegging </span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definerer utseende på overflater.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Ved flatskyggelegging blir ikke overflatenormaler definert per node. Dette gir et urealistisk utseende på kurvede flater. Phongskyggelegging gir et jevnere resultat. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Hvis valgt blir Phongskyggelegging brukt. Hvis ikke blir flatskyggelegging brukt.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flatskygginging/Phong skyggelegging </span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definerer utseende på overflater.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Ved flatskyggelegging blir ikke overflatenormaler definert per node. Dette gir et urealistisk utseende på kurvede flater. Phongskyggelegging gir et jevnere resultat. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Hvis valgt blir Phongskyggelegging brukt. Hvis ikke blir flatskyggelegging brukt.</p></body></html> - Define normal per vertex - Definer normal per node + Define normal per vertex + Definer normal per node + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Å definere normaler per node kalles <span style=" font-style:italic;">Phong skyggelegging </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mens å definere normaler per flate kalles </span>flateskyggelegging<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Å definere normaler per node kalles <span style=" font-style:italic;">Phong skyggelegging </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mens å definere normaler per flate kalles </span>flateskyggelegging<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Standardutseende for nye nett - Default appearance for new meshes - Standardutseende for nye nett + Default line color + Standard linefarge - Default line color - Standard linefarge + Mesh transparency + Gjennomsiktighet for nett - Mesh transparency - Gjennomsiktighet for nett + Default mesh color + Standardnettfarge - Default mesh color - Standardnettfarge + Show bounding-box for highlighted or selected meshes + Vis rammeboks for uthevet eller valgt nett - Show bounding-box for highlighted or selected meshes - Vis rammeboks for uthevet eller valgt nett + Line transparency + Gjennomsiktighet for linje - - Line transparency - Gjennomsiktighet for linje - - - + + MeshGui::DlgSmoothing - Smoothing - Utjevning + Smoothing + Utjevning - Method - Metode + Method + Metode - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parameter + Parameter + Parameter - Iterations: - Gjentakelser: + Iterations: + Gjentakelser: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Legg til triangel + Add triangle + Legg til triangel - Flip normal - Vend normal + Flip normal + Vend normal - Clear - Tøm + Clear + Tøm - Finish - Fullfør + Finish + Fullfør - - + + MeshGui::RemoveComponents - Remove components - Fjern elementer + Remove components + Fjern elementer - Select - Velg + Select + Velg - Select whole component - Velg hele elementet + Select whole component + Velg hele elementet - Pick triangle - Velg triangel + Pick triangle + Velg triangel - < faces than - < flater enn + < faces than + < flater enn - Region - Region + Region + Region - Components - Elementer + Components + Elementer - All - Alle + All + Alle - Deselect - Velg bort + Deselect + Velg bort - Deselect whole component - Velg bort hele elementet + Deselect whole component + Velg bort hele elementet - > faces than - > flater enn + > faces than + > flater enn - Region options - Områdealternativer + Region options + Områdealternativer - Respect only triangles with normals facing screen - Ta bare hensyn til triangler med normaler vendt mot skjermen + Respect only triangles with normals facing screen + Ta bare hensyn til triangler med normaler vendt mot skjermen - Respect only visible triangles - Ta bare hensyn til synlige triangler + Respect only visible triangles + Ta bare hensyn til synlige triangler - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Sylinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sfære + + + MeshGui::TaskRemoveComponents - Delete - Slett + Delete + Slett - Invert - Inverter + Invert + Inverter - - + + QDockWidget - Evaluate & Repair Mesh - Evaluer og reparer nett + Evaluate & Repair Mesh + Evaluer og reparer nett - - + + QObject - Import mesh - Importer nett + Import mesh + Importer nett - Export mesh - Eksporter nett + Export mesh + Eksporter nett - Solid Mesh - Solid nett + Solid Mesh + Solid nett - Boundings - Rammer + Boundings + Rammer - Fill holes - Fyll hull + Fill holes + Fyll hull - Fill holes with maximum number of edges: - Fyll hull med maksimalt antall kanter: + Fill holes with maximum number of edges: + Fyll hull med maksimalt antall kanter: - Binary STL (*.stl) - Binære STL (*.stl) + Binary STL (*.stl) + Binære STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Binære nett (*.bms) + Binary Mesh (*.bms) + Binære nett (*.bms) - Alias Mesh (*.obj) - Alias nett (*.obj) + Alias Mesh (*.obj) + Alias nett (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*. iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*. iv) - All Files (*.*) - Alle filer (*.*) + All Files (*.*) + Alle filer (*.*) - ASCII STL (*.stl) - ASCII STL (*. STL) + ASCII STL (*.stl) + ASCII STL (*. STL) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Komprimert VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Komprimert VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python modul def (*.py) + Python module def (*.py) + Python modul def (*.py) - Meshing Tolerance - Toleranse for nett + Meshing Tolerance + Toleranse for nett - Enter tolerance for meshing geometry: - Angi toleranse for nettgeometri: + Enter tolerance for meshing geometry: + Angi toleranse for nettgeometri: - The mesh '%1' is a solid. - Nett '%1' er solid. + The mesh '%1' is a solid. + Nett '%1' er solid. - The mesh '%1' is not a solid. - Nett '%1' er ikke solid. + The mesh '%1' is not a solid. + Nett '%1' er ikke solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Maks=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Punkter: %1, Kanter: %2 Flater: %3] + [Points: %1, Edges: %2 Faces: %3] + [Punkter: %1, Kanter: %2 Flater: %3] - Leave info mode - Forlat infomodus + Leave info mode + Forlat infomodus - Index: %1 - Indeks: %1 + Index: %1 + Indeks: %1 - Leave hole-filling mode - Forlat hullfyllingsmodus + Leave hole-filling mode + Forlat hullfyllingsmodus - Leave removal mode - Forlat fjerningsmodus + Leave removal mode + Forlat fjerningsmodus - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Alle nett filer (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Alle nett filer (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*. ply) + Stanford Polygon (*.ply) + Stanford Polygon (*. ply) - Object File Format (*.off) - Objekt filformat (*. off) + Object File Format (*.off) + Objekt filformat (*. off) - Standford Polygon (*.ply) - Stanford Polygon (*. ply) + Standford Polygon (*.ply) + Stanford Polygon (*. ply) - Delete selected faces - Slett valgte flater + Delete selected faces + Slett valgte flater - Clear selected faces - Fjern valgte flater + Clear selected faces + Fjern valgte flater - Annotation - Merknad + Annotation + Merknad - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analyser + Analyze + Analyser - Boolean - Boolsk + Boolean + Boolsk - &Meshes - &Nett + &Meshes + &Nett - Mesh tools - Nettverktøy + Mesh tools + Nettverktøy - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_pl.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_pl.ts index 04a4d15ba..51b4e394a 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_pl.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_pl.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - siatka + Mesh + siatka - Add triangle - dodaj trójkąt + Add triangle + dodaj trójkąt - Add triangle manually to a mesh - dodaj trójkąt do siatki + Add triangle manually to a mesh + dodaj trójkąt do siatki - - + + CmdMeshBoundingBox - Mesh - siatka + Mesh + siatka - Boundings info... - granice info + Boundings info... + granice info - Shows the boundings of the selected mesh - Shows the boundings of the selected mesh + Shows the boundings of the selected mesh + Shows the boundings of the selected mesh - - + + CmdMeshBuildRegularSolid - Mesh - siatka + Mesh + siatka - Regular solid... - prymityw + Regular solid... + prymityw - Builds a regular solid - wstaw prymityw + Builds a regular solid + wstaw prymityw - - + + CmdMeshDemolding - Interactive demolding direction - Interactive demolding direction + Interactive demolding direction + Interactive demolding direction - Mesh - siatka + Mesh + siatka - - + + CmdMeshDifference - Mesh - siatka + Mesh + siatka - Difference - Różnica + Difference + Różnica - - + + CmdMeshEvaluateFacet - Mesh - siatka + Mesh + siatka - Face info - Dane fasetki + Face info + Dane fasetki - Information about face - Informacja o fasetce + Information about face + Informacja o fasetce - - + + CmdMeshEvaluateSolid - Mesh - siatka + Mesh + siatka - Check solid mesh - Sprawdź siatkę solid + Check solid mesh + Sprawdź siatkę solid - Checks whether the mesh is a solid - Sprawdza czy siatka jest solidem + Checks whether the mesh is a solid + Sprawdza czy siatka jest solidem - - + + CmdMeshEvaluation - Mesh - siatka + Mesh + siatka - Opens a dialog to analyze and repair a mesh - Okno dialogowe analizy i naprawy siatki + Opens a dialog to analyze and repair a mesh + Okno dialogowe analizy i naprawy siatki - Evaluate && Repair mesh... - Rozwiń && Napraw siatkę + Evaluate && Repair mesh... + Rozwiń && Napraw siatkę - - + + CmdMeshExMakeMesh - Mesh - siatka + Mesh + siatka - Make a Box - Make a Box + Make a Box + Make a Box - - + + CmdMeshExMakeTool - Mesh - siatka + Mesh + siatka - Make a Tool - Make a Tool + Make a Tool + Make a Tool - - + + CmdMeshExMakeUnion - Mesh - siatka + Mesh + siatka - Make Union - Make Union + Make Union + Make Union - - + + CmdMeshExport - Mesh - siatka + Mesh + siatka - Export mesh... - Eksport siatki... + Export mesh... + Eksport siatki... - Exports a mesh to file - Eksport siatki do pliku + Exports a mesh to file + Eksport siatki do pliku - - + + CmdMeshFillInteractiveHole - Mesh - siatka + Mesh + siatka - Close hole - Zamknij otwór + Close hole + Zamknij otwór - Close holes interactively - Zamknij otwory interaktywnie + Close holes interactively + Zamknij otwory interaktywnie - - + + CmdMeshFillupHoles - Mesh - siatka + Mesh + siatka - Fill holes... - Zamknij otwory... + Fill holes... + Zamknij otwory... - Fill holes of the mesh - Zamknij otwory w siatce + Fill holes of the mesh + Zamknij otwory w siatce - - + + CmdMeshFlipNormals - Mesh - siatka + Mesh + siatka - Flip normals - Odwróć 'normalne' + Flip normals + Odwróć 'normalne' - Flips the normals of the mesh - Odwróć 'normalne' siatki + Flips the normals of the mesh + Odwróć 'normalne' siatki - - + + CmdMeshFromGeometry - Mesh - siatka + Mesh + siatka - Create mesh from geometry... - Utwórz siatkę z elementów geometrii... + Create mesh from geometry... + Utwórz siatkę z elementów geometrii... - Create mesh from the selected geometry - Utwórz siatkę z zaznaczonych elementów geometrii + Create mesh from the selected geometry + Utwórz siatkę z zaznaczonych elementów geometrii - - + + CmdMeshHarmonizeNormals - Mesh - siatka + Mesh + siatka - Harmonize normals - Porządkuj normalne + Harmonize normals + Porządkuj normalne - Harmonizes the normals of the mesh - Porządkuje 'normaln'e siatki + Harmonizes the normals of the mesh + Porządkuje 'normaln'e siatki - - + + CmdMeshImport - Mesh - siatka + Mesh + siatka - Import mesh... - Import siatki... + Import mesh... + Import siatki... - Imports a mesh from file - Import siatki z pliku + Imports a mesh from file + Import siatki z pliku - - + + CmdMeshIntersection - Mesh - siatka + Mesh + siatka - Intersection - Przecięcie + Intersection + Przecięcie - - + + CmdMeshPolyCut - Mesh - siatka + Mesh + siatka - Cut mesh - Przytnij siatkę + Cut mesh + Przytnij siatkę - Cuts a mesh with a picked polygon - Przytnij siatkę zaznaczonym wielokątem + Cuts a mesh with a picked polygon + Przytnij siatkę zaznaczonym wielokątem - - + + CmdMeshPolySegm - Mesh - siatka + Mesh + siatka - Make segment - Utwórz segment + Make segment + Utwórz segment - Creates a mesh segment - Tworzy segment siatki + Creates a mesh segment + Tworzy segment siatki - - + + CmdMeshPolySelect - Mesh - siatka + Mesh + siatka - Select mesh - Zaznacz siatkę + Select mesh + Zaznacz siatkę - Select an area of the mesh - Zaznacz fragment siatki + Select an area of the mesh + Zaznacz fragment siatki - - + + CmdMeshPolySplit - Mesh - siatka + Mesh + siatka - Split mesh - Rozdziel siatkę + Split mesh + Rozdziel siatkę - Splits a mesh into two meshes - Rozdziel siatkę na dwoje + Splits a mesh into two meshes + Rozdziel siatkę na dwoje - - + + + CmdMeshPolyTrim + + Mesh + siatka + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - siatka + Mesh + siatka - Remove components by hand... - Usuń fragmenty ręcznie... + Remove components by hand... + Usuń fragmenty ręcznie... - Mark a component to remove it from the mesh - Zaznacz fragment do usunięcia z siatki + Mark a component to remove it from the mesh + Zaznacz fragment do usunięcia z siatki - - + + CmdMeshRemoveComponents - Mesh - siatka + Mesh + siatka - Remove components... - Usuń składniki... + Remove components... + Usuń składniki... - Remove topologic independent components from the mesh - Kasuj topologię niezależną od siatki + Remove topologic independent components from the mesh + Kasuj topologię niezależną od siatki - - + + + CmdMeshSegmentation + + Mesh + siatka + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - siatka + Mesh + siatka - Smooth... - Wygładź... + Smooth... + Wygładź... - Smooth the selected meshes - Wygładź zaznaczone siatki + Smooth the selected meshes + Wygładź zaznaczone siatki - - + + CmdMeshToolMesh - Mesh - siatka + Mesh + siatka - Segment by tool mesh - Segment by tool mesh + Segment by tool mesh + Segment by tool mesh - Creates a segment from a given tool mesh - Creates a segment from a given tool mesh + Creates a segment from a given tool mesh + Creates a segment from a given tool mesh - - + + CmdMeshTransform - Mesh - siatka + Mesh + siatka - Transform mesh - Przekształć siatkę + Transform mesh + Przekształć siatkę - Rotate or move a mesh - Obróć lub przesuń siatkę + Rotate or move a mesh + Obróć lub przesuń siatkę - - + + CmdMeshUnion - Mesh - siatka + Mesh + siatka - Union - Połączenie + Union + Połączenie - - + + CmdMeshVertexCurvature - Mesh - siatka + Mesh + siatka - Calculates the curvature of the vertices of a mesh - Oblicza krzywiznę wierzchołków siatki + Calculates the curvature of the vertices of a mesh + Oblicza krzywiznę wierzchołków siatki - Curvature plot - Curvature plot + Curvature plot + Curvature plot - - + + CmdMeshVertexCurvatureInfo - Mesh - siatka + Mesh + siatka - Curvature info - Informacja o krzywiźnie + Curvature info + Informacja o krzywiźnie - Information about curvature - Information about curvature + Information about curvature + Information about curvature - - + + MeshGui::DlgEvaluateMesh - &Help - &Pomoc + &Help + &Pomoc - F1 - F1 + F1 + F1 - &Close - Zamknij + &Close + Zamknij - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Informacja o siatce + Mesh information + Informacja o siatce - No information - Brak danych + No information + Brak danych - Number of points: - Ilość punktów: + Number of points: + Ilość punktów: - Number of edges: - Ilość krawędzi: + Number of edges: + Ilość krawędzi: - Refresh - Odśwież + Refresh + Odśwież - Analyze - Analizuj + Analyze + Analizuj - Repair - Napraw + Repair + Napraw - Orientation - Orientacja + Orientation + Orientacja - Degenerated faces - Fasetki zniekształcone + Degenerated faces + Fasetki zniekształcone - Face indices - Face indices + Face indices + Face indices - Number of faces: - Ilość fasetek: + Number of faces: + Ilość fasetek: - Duplicated faces - Zduplikowane fasetki + Duplicated faces + Zduplikowane fasetki - Duplicated points - Zduplikowane punkty + Duplicated points + Zduplikowane punkty - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Self-intersections - Samoprzecięcia + Self-intersections + Samoprzecięcia - All above tests together - All above tests together + All above tests together + All above tests together - Repetitive repair - Powtórna naprawa + Repetitive repair + Powtórna naprawa - Evaluate & Repair Mesh - Rozwiń & napraw siatkę + Evaluate & Repair Mesh + Rozwiń & napraw siatkę - Folds on surface - Zagięcia na płaszczyźnie + Folds on surface + Zagięcia na płaszczyźnie - - + + MeshGui::DlgEvaluateMeshImp - No information - Brak danych + No information + Brak danych - Invalid neighbour indices - Invalid neighbour indices + Invalid neighbour indices + Invalid neighbour indices - Invalid face indices - Invalid face indices + Invalid face indices + Invalid face indices - Invalid point indices - Invalid point indices + Invalid point indices + Invalid point indices - Multiple point indices - Multiple point indices + Multiple point indices + Multiple point indices - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Cannot remove non-manifolds - Cannot remove non-manifolds + Cannot remove non-manifolds + Cannot remove non-manifolds - No selection - Brak wyboru + No selection + Brak wyboru - No flipped normals - Brak odwróconych 'normalnych' + No flipped normals + Brak odwróconych 'normalnych' - %1 flipped normals - %1 odwrócone normalne + %1 flipped normals + %1 odwrócone normalne - No non-manifolds - No non-manifolds + No non-manifolds + No non-manifolds - %1 non-manifolds - %1 non-manifolds + %1 non-manifolds + %1 non-manifolds - No invalid indices - No invalid indices + No invalid indices + No invalid indices - No degenerations - Brak zniekształceń + No degenerations + Brak zniekształceń - %1 degenerated faces - %1 degenerated faces + %1 degenerated faces + %1 degenerated faces - No duplicated faces - No duplicated faces + No duplicated faces + No duplicated faces - %1 duplicated faces - %1 duplicated faces + %1 duplicated faces + %1 duplicated faces - No duplicated points - Brak zduplikowanych punktów + No duplicated points + Brak zduplikowanych punktów - Duplicated points - Zduplikowane punkty + Duplicated points + Zduplikowane punkty - Orientation - Orientacja + Orientation + Orientacja - Indices - Indices + Indices + Indices - Degenerations - Zniekształcenia + Degenerations + Zniekształcenia - Duplicated faces - Zduplikowane fasetki + Duplicated faces + Zduplikowane fasetki - No self-intersections - Brak samoprzecięć + No self-intersections + Brak samoprzecięć - Self-intersections - Samoprzecięcia + Self-intersections + Samoprzecięcia - Mesh repair - Napraw siatkę + Mesh repair + Napraw siatkę - Flipped normals found - Znaleziono odwrócone 'normalne' + Flipped normals found + Znaleziono odwrócone 'normalne' - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Błąd sprawdzania z powodu zagięć na powierzchni. Wykonaj najpierw naprawę zagięć. + Błąd sprawdzania z powodu zagięć na powierzchni. Wykonaj najpierw naprawę zagięć. - No folds on surface - Brak zagięć na płaszczyźnie + No folds on surface + Brak zagięć na płaszczyźnie - %1 folds on surface - %1 folds on surface + %1 folds on surface + %1 folds on surface - Folds - Zagięcia + Folds + Zagięcia - - + + MeshGui::DlgRegularSolid - Regular Solid - Bryła podstawowa + Regular Solid + Bryła podstawowa - &Create - &Utwórz + &Create + &Utwórz - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - ZAMKNIJ + Cl&ose + ZAMKNIJ - Alt+O - Alt + O + Alt+O + Alt + O - Solid: - Lity + Solid: + Lity - Cube - Kostka + Cube + Kostka - Cylinder - Cylinder + Cylinder + Cylinder - Cone - Stożek + Cone + Stożek - Sphere - Kula + Sphere + Kula - Ellipsoid - Elipsoida + Ellipsoid + Elipsoida - Torus - torus + Torus + torus - Height: - Wysokość: + Height: + Wysokość: - Length: - Długość: + Length: + Długość: - Width: - Szerokość: + Width: + Szerokość: - Radius: - Promień: + Radius: + Promień: - Closed - Zamknięty + Closed + Zamknięty - Sampling: - Próbkowanie: + Sampling: + Próbkowanie: - Edge length: - Długość krawędzi: + Edge length: + Długość krawędzi: - Radius 1: - Promień 1: + Radius 1: + Promień 1: - Radius 2: - Promień 2: + Radius 2: + Promień 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Utwórz %1 + Create %1 + Utwórz %1 - No active document - Brak aktywnego dokumentu + No active document + Brak aktywnego dokumentu - - + + MeshGui::DlgSettingsMeshView - Mesh view - Widok siatki + Mesh view + Widok siatki - Two-side rendering - Rendering dwustronny + Two-side rendering + Rendering dwustronny - Backface color - Backface color + Backface color + Backface color - Smoothing - Wygładzanie + Smoothing + Wygładzanie - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - Crease angle - Crease angle + Crease angle + Crease angle - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Zdefiniuj 'normalną' wierzchołka + Define normal per vertex + Zdefiniuj 'normalną' wierzchołka + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Domyślny wygląd nowych siatek - Default appearance for new meshes - Domyślny wygląd nowych siatek + Default line color + Domyślny kolor linii - Default line color - Domyślny kolor linii + Mesh transparency + Przezroczystość siatki - Mesh transparency - Przezroczystość siatki + Default mesh color + Domyślny kolor siatki - Default mesh color - Domyślny kolor siatki + Show bounding-box for highlighted or selected meshes + Pokaż kontener dla podświetlenia lub wyboru - Show bounding-box for highlighted or selected meshes - Pokaż kontener dla podświetlenia lub wyboru + Line transparency + Przejrzystości linii - - Line transparency - Przejrzystości linii - - - + + MeshGui::DlgSmoothing - Smoothing - Wygładzanie + Smoothing + Wygładzanie - Method - Metoda + Method + Metoda - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - parametr + Parameter + parametr - Iterations: - iteracje: + Iterations: + iteracje: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - dodaj trójkąt + Add triangle + dodaj trójkąt - Flip normal - odwróć + Flip normal + odwróć - Clear - Wyczyść + Clear + Wyczyść - Finish - Zakończ + Finish + Zakończ - - + + MeshGui::RemoveComponents - Remove components - usuń elementy + Remove components + usuń elementy - Select - Wybierz + Select + Wybierz - Select whole component - zaznacz wszystkie trójkąty + Select whole component + zaznacz wszystkie trójkąty - Pick triangle - wybierz trójkąt + Pick triangle + wybierz trójkąt - < faces than - <powierzchnie niż + < faces than + <powierzchnie niż - Region - region + Region + region - Components - komponenty + Components + komponenty - All - Wszystkie + All + Wszystkie - Deselect - odznacz + Deselect + odznacz - Deselect whole component - odznacz wszystkie komponenty + Deselect whole component + odznacz wszystkie komponenty - > faces than - powierzchnie niż + > faces than + powierzchnie niż - Region options - opcje regionalne + Region options + opcje regionalne - Respect only triangles with normals facing screen - akceptuj tylko trójkąty zwrócone stroną zewnętrzną + Respect only triangles with normals facing screen + akceptuj tylko trójkąty zwrócone stroną zewnętrzną - Respect only visible triangles - akceptuj tylko widoczne trójkąty + Respect only visible triangles + akceptuj tylko widoczne trójkąty - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cylinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Kula + + + MeshGui::TaskRemoveComponents - Delete - Usuń + Delete + Usuń - Invert - przeciwny + Invert + przeciwny - - + + QDockWidget - Evaluate & Repair Mesh - Rozwiń & napraw siatkę + Evaluate & Repair Mesh + Rozwiń & napraw siatkę - - + + QObject - Import mesh - Import siatki + Import mesh + Import siatki - Export mesh - Eksport siatki + Export mesh + Eksport siatki - Solid Mesh - Siatka solid + Solid Mesh + Siatka solid - Boundings - Boundings + Boundings + Boundings - Fill holes - Zamknij otwory + Fill holes + Zamknij otwory - Fill holes with maximum number of edges: - Zamknij otwory max. ilością krawędzi: + Fill holes with maximum number of edges: + Zamknij otwory max. ilością krawędzi: - Binary STL (*.stl) - Binarny STL (*.stl) + Binary STL (*.stl) + Binarny STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*. ast) + ASCII STL (*.ast) + ASCII STL (*. ast) - Binary Mesh (*.bms) - Siatka binarna (*.bms) + Binary Mesh (*.bms) + Siatka binarna (*.bms) - Alias Mesh (*.obj) - Siatka Alias (*.obj) + Alias Mesh (*.obj) + Siatka Alias (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*. iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*. iv) - All Files (*.*) - Wszystkie pliki (*.*) + All Files (*.*) + Wszystkie pliki (*.*) - ASCII STL (*.stl) - ASCII STL (*. stl) + ASCII STL (*.stl) + ASCII STL (*. stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*. wrl *. vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*. wrl *. vrml) - Compressed VRML 2.0 (*.wrz) - Skompresowany VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Skompresowany VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*. nas *. bdf) + Nastran (*.nas *.bdf) + Nastran (*. nas *. bdf) - Python module def (*.py) - Moduł Python def (*.py) + Python module def (*.py) + Moduł Python def (*.py) - Meshing Tolerance - Tolerancja siatki + Meshing Tolerance + Tolerancja siatki - Enter tolerance for meshing geometry: - Podaj tolerancję dla geometrii siatki: + Enter tolerance for meshing geometry: + Podaj tolerancję dla geometrii siatki: - The mesh '%1' is a solid. - The mesh '%1' is a solid. + The mesh '%1' is a solid. + The mesh '%1' is a solid. - The mesh '%1' is not a solid. - The mesh '%1' is not a solid. + The mesh '%1' is not a solid. + The mesh '%1' is not a solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] - Leave info mode - Opuść tryb informacji + Leave info mode + Opuść tryb informacji - Index: %1 - Indeks :%1 + Index: %1 + Indeks :%1 - Leave hole-filling mode - Opuść tryb zamykania otworów + Leave hole-filling mode + Opuść tryb zamykania otworów - Leave removal mode - Opuść tryb kasowania + Leave removal mode + Opuść tryb kasowania - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Wszystkie pliki siatki (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Wszystkie pliki siatki (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Polygon Stanford (*. ply) + Stanford Polygon (*.ply) + Polygon Stanford (*. ply) - Object File Format (*.off) - Format pliku Object (off *.) + Object File Format (*.off) + Format pliku Object (off *.) - Standford Polygon (*.ply) - Polygon Stanford (*. ply) + Standford Polygon (*.ply) + Polygon Stanford (*. ply) - Delete selected faces - Usuń zaznaczone fasetki + Delete selected faces + Usuń zaznaczone fasetki - Clear selected faces - Wyczyść zaznaczone fasetki + Clear selected faces + Wyczyść zaznaczone fasetki - Annotation - Adnotacja + Annotation + Adnotacja - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analizuj + Analyze + Analizuj - Boolean - Boolean + Boolean + Boolean - &Meshes - siatki + &Meshes + siatki - Mesh tools - narzędzia siatki + Mesh tools + narzędzia siatki - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_pt.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_pt.ts index 3ded0e4c9..5e18c9209 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_pt.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_pt.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Malha + Mesh + Malha - Add triangle - Adicionar triângulo + Add triangle + Adicionar triângulo - Add triangle manually to a mesh - Adicionar triângulo manualmente a uma malha + Add triangle manually to a mesh + Adicionar triângulo manualmente a uma malha - - + + CmdMeshBoundingBox - Mesh - Malha + Mesh + Malha - Boundings info... - Info caixa de volume... + Boundings info... + Info caixa de volume... - Shows the boundings of the selected mesh - Mostra a caixa de volume da malha selecionada + Shows the boundings of the selected mesh + Mostra a caixa de volume da malha selecionada - - + + CmdMeshBuildRegularSolid - Mesh - Malha + Mesh + Malha - Regular solid... - Sólido regular ... + Regular solid... + Sólido regular ... - Builds a regular solid - Cria um sólido regular + Builds a regular solid + Cria um sólido regular - - + + CmdMeshDemolding - Interactive demolding direction - Direção de desmoldagem interativa + Interactive demolding direction + Direção de desmoldagem interativa - Mesh - Malha + Mesh + Malha - - + + CmdMeshDifference - Mesh - Malha + Mesh + Malha - Difference - Diferença + Difference + Diferença - - + + CmdMeshEvaluateFacet - Mesh - Malha + Mesh + Malha - Face info - Info face + Face info + Info face - Information about face - Informações sobre a face + Information about face + Informações sobre a face - - + + CmdMeshEvaluateSolid - Mesh - Malha + Mesh + Malha - Check solid mesh - Verificar malha sólida + Check solid mesh + Verificar malha sólida - Checks whether the mesh is a solid - Verifica se a malha é um sólido + Checks whether the mesh is a solid + Verifica se a malha é um sólido - - + + CmdMeshEvaluation - Mesh - Malha + Mesh + Malha - Opens a dialog to analyze and repair a mesh - Abre uma janela para analisar e consertar uma malha + Opens a dialog to analyze and repair a mesh + Abre uma janela para analisar e consertar uma malha - Evaluate && Repair mesh... - Avaliar && consertar malha... + Evaluate && Repair mesh... + Avaliar && consertar malha... - - + + CmdMeshExMakeMesh - Mesh - Malha + Mesh + Malha - Make a Box - Fazer uma caixa + Make a Box + Fazer uma caixa - - + + CmdMeshExMakeTool - Mesh - Malha + Mesh + Malha - Make a Tool - Fazer uma ferramenta + Make a Tool + Fazer uma ferramenta - - + + CmdMeshExMakeUnion - Mesh - Malha + Mesh + Malha - Make Union - Fazer União + Make Union + Fazer União - - + + CmdMeshExport - Mesh - Malha + Mesh + Malha - Export mesh... - Exportar malha... + Export mesh... + Exportar malha... - Exports a mesh to file - Exporta uma malha para um arquivo + Exports a mesh to file + Exporta uma malha para um arquivo - - + + CmdMeshFillInteractiveHole - Mesh - Malha + Mesh + Malha - Close hole - Fechar furo + Close hole + Fechar furo - Close holes interactively - Fechar furos interativamente + Close holes interactively + Fechar furos interativamente - - + + CmdMeshFillupHoles - Mesh - Malha + Mesh + Malha - Fill holes... - Preencher furos... + Fill holes... + Preencher furos... - Fill holes of the mesh - Preencher furos na malha + Fill holes of the mesh + Preencher furos na malha - - + + CmdMeshFlipNormals - Mesh - Malha + Mesh + Malha - Flip normals - Inverter normais + Flip normals + Inverter normais - Flips the normals of the mesh - Inverte as normais da malha + Flips the normals of the mesh + Inverte as normais da malha - - + + CmdMeshFromGeometry - Mesh - Malha + Mesh + Malha - Create mesh from geometry... - Criar malha a partir de geometria... + Create mesh from geometry... + Criar malha a partir de geometria... - Create mesh from the selected geometry - Criar uma malha a partir da geometria selecionada + Create mesh from the selected geometry + Criar uma malha a partir da geometria selecionada - - + + CmdMeshHarmonizeNormals - Mesh - Malha + Mesh + Malha - Harmonize normals - Harmonizar as normais + Harmonize normals + Harmonizar as normais - Harmonizes the normals of the mesh - Harmoniza as normais da malha + Harmonizes the normals of the mesh + Harmoniza as normais da malha - - + + CmdMeshImport - Mesh - Malha + Mesh + Malha - Import mesh... - Importar malha... + Import mesh... + Importar malha... - Imports a mesh from file - Importa uma malha a partir de um arquivo + Imports a mesh from file + Importa uma malha a partir de um arquivo - - + + CmdMeshIntersection - Mesh - Malha + Mesh + Malha - Intersection - Intersecção + Intersection + Intersecção - - + + CmdMeshPolyCut - Mesh - Malha + Mesh + Malha - Cut mesh - Cortar malha + Cut mesh + Cortar malha - Cuts a mesh with a picked polygon - Corta uma malha com um polígono escolhido + Cuts a mesh with a picked polygon + Corta uma malha com um polígono escolhido - - + + CmdMeshPolySegm - Mesh - Malha + Mesh + Malha - Make segment - Fazer um segmento + Make segment + Fazer um segmento - Creates a mesh segment - Criar um segmento de malha + Creates a mesh segment + Criar um segmento de malha - - + + CmdMeshPolySelect - Mesh - Malha + Mesh + Malha - Select mesh - Selecione uma malha + Select mesh + Selecione uma malha - Select an area of the mesh - Selecione uma área da malha + Select an area of the mesh + Selecione uma área da malha - - + + CmdMeshPolySplit - Mesh - Malha + Mesh + Malha - Split mesh - Dividir uma malha + Split mesh + Dividir uma malha - Splits a mesh into two meshes - Dividir uma malha em duas + Splits a mesh into two meshes + Dividir uma malha em duas - - + + + CmdMeshPolyTrim + + Mesh + Malha + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Malha + Mesh + Malha - Remove components by hand... - Remover componentes manualmente... + Remove components by hand... + Remover componentes manualmente... - Mark a component to remove it from the mesh - Marcar um componente para ser removido da malha + Mark a component to remove it from the mesh + Marcar um componente para ser removido da malha - - + + CmdMeshRemoveComponents - Mesh - Malha + Mesh + Malha - Remove components... - Remover componentes... + Remove components... + Remover componentes... - Remove topologic independent components from the mesh - Remover componentes topológicos independentes da malha + Remove topologic independent components from the mesh + Remover componentes topológicos independentes da malha - - + + + CmdMeshSegmentation + + Mesh + Malha + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Malha + Mesh + Malha - Smooth... - Suavizar... + Smooth... + Suavizar... - Smooth the selected meshes - Suavizar as malhas selecionadas + Smooth the selected meshes + Suavizar as malhas selecionadas - - + + CmdMeshToolMesh - Mesh - Malha + Mesh + Malha - Segment by tool mesh - Segmentar por malha ferramenta + Segment by tool mesh + Segmentar por malha ferramenta - Creates a segment from a given tool mesh - Cria um segmento usando uma determinada malha como ferramenta + Creates a segment from a given tool mesh + Cria um segmento usando uma determinada malha como ferramenta - - + + CmdMeshTransform - Mesh - Malha + Mesh + Malha - Transform mesh - Transformar malha + Transform mesh + Transformar malha - Rotate or move a mesh - Girar ou mover uma malha + Rotate or move a mesh + Girar ou mover uma malha - - + + CmdMeshUnion - Mesh - Malha + Mesh + Malha - Union - União + Union + União - - + + CmdMeshVertexCurvature - Mesh - Malha + Mesh + Malha - Calculates the curvature of the vertices of a mesh - Calcula a curvatura dos vértices de uma malha + Calculates the curvature of the vertices of a mesh + Calcula a curvatura dos vértices de uma malha - Curvature plot - Traçado de curvatura + Curvature plot + Traçado de curvatura - - + + CmdMeshVertexCurvatureInfo - Mesh - Malha + Mesh + Malha - Curvature info - Info curvatura + Curvature info + Info curvatura - Information about curvature - Informações sobre a curvatura + Information about curvature + Informações sobre a curvatura - - + + MeshGui::DlgEvaluateMesh - &Help - A&juda + &Help + A&juda - F1 - F1 + F1 + F1 - &Close - &Fechar + &Close + &Fechar - Alt+C - Alt+F + Alt+C + Alt+F - Mesh information - Informação da malha + Mesh information + Informação da malha - No information - Sem Informação + No information + Sem Informação - Number of points: - Número de pontos: + Number of points: + Número de pontos: - Number of edges: - Número de arestas: + Number of edges: + Número de arestas: - Refresh - Atualizar + Refresh + Atualizar - Analyze - Analisar + Analyze + Analisar - Repair - Consertar + Repair + Consertar - Orientation - Orientação + Orientation + Orientação - Degenerated faces - Faces degeneradas + Degenerated faces + Faces degeneradas - Face indices - Índices de faces + Face indices + Índices de faces - Number of faces: - Número de faces: + Number of faces: + Número de faces: - Duplicated faces - Faces duplicadas + Duplicated faces + Faces duplicadas - Duplicated points - Pontos duplicados + Duplicated points + Pontos duplicados - Non-manifolds - Não-manifolds + Non-manifolds + Não-manifolds - Self-intersections - Auto-intersecções + Self-intersections + Auto-intersecções - All above tests together - Todos os testes acima juntos + All above tests together + Todos os testes acima juntos - Repetitive repair - Conserto repetitiva + Repetitive repair + Conserto repetitiva - Evaluate & Repair Mesh - Avaliar & consertar malha + Evaluate & Repair Mesh + Avaliar & consertar malha - Folds on surface - Dobras na superfície + Folds on surface + Dobras na superfície - - + + MeshGui::DlgEvaluateMeshImp - No information - Sem Informação + No information + Sem Informação - Invalid neighbour indices - Índices de vizinhos inválidos + Invalid neighbour indices + Índices de vizinhos inválidos - Invalid face indices - Índices de face inválidos + Invalid face indices + Índices de face inválidos - Invalid point indices - Índices de ponto inválidos + Invalid point indices + Índices de ponto inválidos - Multiple point indices - Vários índices de pontos + Multiple point indices + Vários índices de pontos - Non-manifolds - Não-manifolds + Non-manifolds + Não-manifolds - Cannot remove non-manifolds - Não é possível remover não-manifolds + Cannot remove non-manifolds + Não é possível remover não-manifolds - No selection - Nenhuma seleção + No selection + Nenhuma seleção - No flipped normals - Nenhuma normal invertida + No flipped normals + Nenhuma normal invertida - %1 flipped normals - %1 normais invertidas + %1 flipped normals + %1 normais invertidas - No non-manifolds - Nenhum não-manifold + No non-manifolds + Nenhum não-manifold - %1 non-manifolds - %1 não-manifolds + %1 non-manifolds + %1 não-manifolds - No invalid indices - Nenhum índice inválido + No invalid indices + Nenhum índice inválido - No degenerations - Nenhuma degeneração + No degenerations + Nenhuma degeneração - %1 degenerated faces - %1 faces degeneradas + %1 degenerated faces + %1 faces degeneradas - No duplicated faces - Nenhuma face duplicada + No duplicated faces + Nenhuma face duplicada - %1 duplicated faces - %1 faces duplicadas + %1 duplicated faces + %1 faces duplicadas - No duplicated points - Nenhum ponto duplicado + No duplicated points + Nenhum ponto duplicado - Duplicated points - Pontos duplicados + Duplicated points + Pontos duplicados - Orientation - Orientação + Orientation + Orientação - Indices - Índices + Indices + Índices - Degenerations - Degenerações + Degenerations + Degenerações - Duplicated faces - Faces duplicadas + Duplicated faces + Faces duplicadas - No self-intersections - Nenhuma auto-intersecção + No self-intersections + Nenhuma auto-intersecção - Self-intersections - Auto-intersecções + Self-intersections + Auto-intersecções - Mesh repair - Conserto de malha + Mesh repair + Conserto de malha - Flipped normals found - Foram encontradas normais invertidas + Flipped normals found + Foram encontradas normais invertidas - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - A verificação falhou devido a dobras na superfície. Por favor, execute primeiro o comando "consertar dobras" + A verificação falhou devido a dobras na superfície. Por favor, execute primeiro o comando "consertar dobras" - No folds on surface - Nenhuma dobra na superfície + No folds on surface + Nenhuma dobra na superfície - %1 folds on surface - %1 dobras na superfície + %1 folds on surface + %1 dobras na superfície - Folds - Dobras + Folds + Dobras - - + + MeshGui::DlgRegularSolid - Regular Solid - Sólido regular + Regular Solid + Sólido regular - &Create - &Criar + &Create + &Criar - Alt+C - Alt+F + Alt+C + Alt+F - Cl&ose - &Fechar + Cl&ose + &Fechar - Alt+O - Alt+F + Alt+O + Alt+F - Solid: - Sólido: + Solid: + Sólido: - Cube - Cubo + Cube + Cubo - Cylinder - Cilindro + Cylinder + Cilindro - Cone - Cone + Cone + Cone - Sphere - Esfera + Sphere + Esfera - Ellipsoid - Elipsóide + Ellipsoid + Elipsóide - Torus - Toro + Torus + Toro - Height: - Altura: + Height: + Altura: - Length: - Comprimento: + Length: + Comprimento: - Width: - Largura: + Width: + Largura: - Radius: - Raio: + Radius: + Raio: - Closed - Fechado + Closed + Fechado - Sampling: - Amostragem: + Sampling: + Amostragem: - Edge length: - Comprimento da aresta: + Edge length: + Comprimento da aresta: - Radius 1: - Raio 1: + Radius 1: + Raio 1: - Radius 2: - Raio 2: + Radius 2: + Raio 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Criar %1 + Create %1 + Criar %1 - No active document - Nenhum documento ativo + No active document + Nenhum documento ativo - - + + MeshGui::DlgSettingsMeshView - Mesh view - Vista de malhas + Mesh view + Vista de malhas - Two-side rendering - Renderização de dois lados + Two-side rendering + Renderização de dois lados - Backface color - Core de faces traseiras + Backface color + Core de faces traseiras - Smoothing - Suavização + Smoothing + Suavização - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> Este é o menor ângulo entre duas faces onde será usado o sombreamento plano.</p><p style="margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> se o ângulo entre as normais de duas faces vizinhas é menor do que o ângulo de vincos, as faces serão suavizadas ao redor de sua borda comum.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> Este é o menor ângulo entre duas faces onde será usado o sombreamento plano.</p><p style="margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> se o ângulo entre as normais de duas faces vizinhas é menor do que o ângulo de vincos, as faces serão suavizadas ao redor de sua borda comum.</p></body></html> - Crease angle - Ângulo dos vincos + Crease angle + Ângulo dos vincos - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;"> flat sombreamento de sombreamento/Phong</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> define a aparência de superfícies.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> com sombreamento plano as normais da superfície não são definidas por vértice, o que leva a uma aparência irreal para superfícies curvas. Use sombreamento Phong para uma aparência mais suave.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> se essa opção for definida, o sombreamento Phong será usado, se estiver desactivado o sombreamento plano será usado.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;"> flat sombreamento de sombreamento/Phong</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> define a aparência de superfícies.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> com sombreamento plano as normais da superfície não são definidas por vértice, o que leva a uma aparência irreal para superfícies curvas. Use sombreamento Phong para uma aparência mais suave.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> se essa opção for definida, o sombreamento Phong será usado, se estiver desactivado o sombreamento plano será usado.</p></body></html> - Define normal per vertex - Definir normal por vértice + Define normal per vertex + Definir normal por vértice + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Sugestão</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Definir as normais por vértice é também chamado <span style=" font-style:italic;">sombreamento Phong</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">enquanto define as normais por face é chamado de</span> sombreamento <span style=" font-style:normal;">plano.</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Sugestão</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Definir as normais por vértice é também chamado <span style=" font-style:italic;">sombreamento Phong</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">enquanto define as normais por face é chamado de</span> sombreamento <span style=" font-style:normal;">plano.</span> </p></body></html> + Default appearance for new meshes + Aparência padrão para novas malhas - Default appearance for new meshes - Aparência padrão para novas malhas + Default line color + Cor de linha padrão - Default line color - Cor de linha padrão + Mesh transparency + Transparência de malha - Mesh transparency - Transparência de malha + Default mesh color + Cor padrão de malha - Default mesh color - Cor padrão de malha + Show bounding-box for highlighted or selected meshes + Mostrar caixa de volume para malhas destacadas ou selecionadas - Show bounding-box for highlighted or selected meshes - Mostrar caixa de volume para malhas destacadas ou selecionadas + Line transparency + Transparência das linhas - - Line transparency - Transparência das linhas - - - + + MeshGui::DlgSmoothing - Smoothing - Suavização + Smoothing + Suavização - Method - Método + Method + Método - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parâmetro + Parameter + Parâmetro - Iterations: - Iterações: + Iterations: + Iterações: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Adicionar triângulo + Add triangle + Adicionar triângulo - Flip normal - Inverter normais + Flip normal + Inverter normais - Clear - Limpar + Clear + Limpar - Finish - Concluir + Finish + Concluir - - + + MeshGui::RemoveComponents - Remove components - Remover componentes + Remove components + Remover componentes - Select - Selecione + Select + Selecione - Select whole component - Selecione o componente inteiro + Select whole component + Selecione o componente inteiro - Pick triangle - Escolha um triângulo + Pick triangle + Escolha um triângulo - < faces than - < faces do que + < faces than + < faces do que - Region - Região + Region + Região - Components - Componentes + Components + Componentes - All - Todos + All + Todos - Deselect - Deselecionar + Deselect + Deselecionar - Deselect whole component - Desmarcar componente inteiro + Deselect whole component + Desmarcar componente inteiro - > faces than - > faces do que + > faces than + > faces do que - Region options - Opções de região + Region options + Opções de região - Respect only triangles with normals facing screen - Respeitar somente com triângulos com normais direcionadas para a tela + Respect only triangles with normals facing screen + Respeitar somente com triângulos com normais direcionadas para a tela - Respect only visible triangles - Respeitar apenas triângulos visíveis + Respect only visible triangles + Respeitar apenas triângulos visíveis - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cilindro + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Esfera + + + MeshGui::TaskRemoveComponents - Delete - Excluir + Delete + Excluir - Invert - Inverter + Invert + Inverter - - + + QDockWidget - Evaluate & Repair Mesh - Avaliar & consertar malha + Evaluate & Repair Mesh + Avaliar & consertar malha - - + + QObject - Import mesh - Importar malha + Import mesh + Importar malha - Export mesh - Exportar malha + Export mesh + Exportar malha - Solid Mesh - Malha sólida + Solid Mesh + Malha sólida - Boundings - Caixa de volume + Boundings + Caixa de volume - Fill holes - Preencher furos + Fill holes + Preencher furos - Fill holes with maximum number of edges: - Preenche buracos com um número máximo de arestas: + Fill holes with maximum number of edges: + Preenche buracos com um número máximo de arestas: - Binary STL (*.stl) - STL binário (*.stl) + Binary STL (*.stl) + STL binário (*.stl) - ASCII STL (*.ast) - STL ASCII (*.ast) + ASCII STL (*.ast) + STL ASCII (*.ast) - Binary Mesh (*.bms) - Malha binária (*.bms) + Binary Mesh (*.bms) + Malha binária (*.bms) - Alias Mesh (*.obj) - Malha Alias (*.obj) + Alias Mesh (*.obj) + Malha Alias (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Todos os arquivos (*.*) + All Files (*.*) + Todos os arquivos (*.*) - ASCII STL (*.stl) - STL ASCII (*.stl) + ASCII STL (*.stl) + STL ASCII (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - VRML 2.0 comprimido (*.wrz) + Compressed VRML 2.0 (*.wrz) + VRML 2.0 comprimido (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Modulo do python (*.py) + Python module def (*.py) + Modulo do python (*.py) - Meshing Tolerance - Tolerância de malhagem + Meshing Tolerance + Tolerância de malhagem - Enter tolerance for meshing geometry: - Digite tolerância para a malhagem de geometria: + Enter tolerance for meshing geometry: + Digite tolerância para a malhagem de geometria: - The mesh '%1' is a solid. - A malha '%1' é um sólido. + The mesh '%1' is a solid. + A malha '%1' é um sólido. - The mesh '%1' is not a solid. - A malha '%1' não é um sólido. + The mesh '%1' is not a solid. + A malha '%1' não é um sólido. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Pontos: %1, Arestas: %2 Faces: %3] + [Points: %1, Edges: %2 Faces: %3] + [Pontos: %1, Arestas: %2 Faces: %3] - Leave info mode - Sair do modo de info + Leave info mode + Sair do modo de info - Index: %1 - Índice: %1 + Index: %1 + Índice: %1 - Leave hole-filling mode - Sair do modo de preenchimento de furos + Leave hole-filling mode + Sair do modo de preenchimento de furos - Leave removal mode - Sair do modo de remoção + Leave removal mode + Sair do modo de remoção - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Todos os arquivos de malha (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Todos os arquivos de malha (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Excluir as faces selecionadas + Delete selected faces + Excluir as faces selecionadas - Clear selected faces - Limpar as faces selecionadas + Clear selected faces + Limpar as faces selecionadas - Annotation - Anotação + Annotation + Anotação - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analisar + Analyze + Analisar - Boolean - Booleanas + Boolean + Booleanas - &Meshes - &Malhas + &Meshes + &Malhas - Mesh tools - Ferramentas de malha + Mesh tools + Ferramentas de malha - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_ru.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_ru.ts index 061c67d7d..58bc0ae17 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_ru.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_ru.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Сеть + Mesh + Сеть - Add triangle - Добавить треугольник + Add triangle + Добавить треугольник - Add triangle manually to a mesh - Добавить треугольник в сетку вручную + Add triangle manually to a mesh + Добавить треугольник в сетку вручную - - + + CmdMeshBoundingBox - Mesh - Сеть + Mesh + Сеть - Boundings info... - Информация о структуре... + Boundings info... + Информация о структуре... - Shows the boundings of the selected mesh - Показывает структуру выбранной сетки + Shows the boundings of the selected mesh + Показывает структуру выбранной сетки - - + + CmdMeshBuildRegularSolid - Mesh - Сеть + Mesh + Сеть - Regular solid... - Правлю твердое ... + Regular solid... + Правлю твердое ... - Builds a regular solid - Построение правильного твердого тела + Builds a regular solid + Построение правильного твердого тела - - + + CmdMeshDemolding - Interactive demolding direction - Интерактивное извлечения направлении из формы + Interactive demolding direction + Интерактивное извлечения направлении из формы - Mesh - Сеть + Mesh + Сеть - - + + CmdMeshDifference - Mesh - Сеть + Mesh + Сеть - Difference - Разность + Difference + Разность - - + + CmdMeshEvaluateFacet - Mesh - Сеть + Mesh + Сеть - Face info - Информация о поверхности + Face info + Информация о поверхности - Information about face - Информация о поверхности + Information about face + Информация о поверхности - - + + CmdMeshEvaluateSolid - Mesh - Сеть + Mesh + Сеть - Check solid mesh - Проверить прочность сетки + Check solid mesh + Проверить прочность сетки - Checks whether the mesh is a solid - Проверяет, тверда ли сетка + Checks whether the mesh is a solid + Проверяет, тверда ли сетка - - + + CmdMeshEvaluation - Mesh - Сеть + Mesh + Сеть - Opens a dialog to analyze and repair a mesh - Открывает диалог для анализа и ремонта сети + Opens a dialog to analyze and repair a mesh + Открывает диалог для анализа и ремонта сети - Evaluate && Repair mesh... - Оценить и ремонтировать сетку... + Evaluate && Repair mesh... + Оценить и ремонтировать сетку... - - + + CmdMeshExMakeMesh - Mesh - Сеть + Mesh + Сеть - Make a Box - Создать параллелепипед + Make a Box + Создать параллелепипед - - + + CmdMeshExMakeTool - Mesh - Сеть + Mesh + Сеть - Make a Tool - Создать инструмент + Make a Tool + Создать инструмент - - + + CmdMeshExMakeUnion - Mesh - Сеть + Mesh + Сеть - Make Union - Создать объединение + Make Union + Создать объединение - - + + CmdMeshExport - Mesh - Сеть + Mesh + Сеть - Export mesh... - Экспорт сети... + Export mesh... + Экспорт сети... - Exports a mesh to file - Экспорт сети в файл + Exports a mesh to file + Экспорт сети в файл - - + + CmdMeshFillInteractiveHole - Mesh - Сеть + Mesh + Сеть - Close hole - Закрыть отверстие + Close hole + Закрыть отверстие - Close holes interactively - Закрыть отверстия интерактивно + Close holes interactively + Закрыть отверстия интерактивно - - + + CmdMeshFillupHoles - Mesh - Сеть + Mesh + Сеть - Fill holes... - Закрыть отверстия ... + Fill holes... + Закрыть отверстия ... - Fill holes of the mesh - Закрыть отверстия сетки + Fill holes of the mesh + Закрыть отверстия сетки - - + + CmdMeshFlipNormals - Mesh - Сеть + Mesh + Сеть - Flip normals - Сменить направление нормалей на противоположное + Flip normals + Сменить направление нормалей на противоположное - Flips the normals of the mesh - Сменить направление нормалей сети на противоположное + Flips the normals of the mesh + Сменить направление нормалей сети на противоположное - - + + CmdMeshFromGeometry - Mesh - Сеть + Mesh + Сеть - Create mesh from geometry... - Создать сеть по геометрии ... + Create mesh from geometry... + Создать сеть по геометрии ... - Create mesh from the selected geometry - Создание сети из выбранного геометрии + Create mesh from the selected geometry + Создание сети из выбранного геометрии - - + + CmdMeshHarmonizeNormals - Mesh - Сеть + Mesh + Сеть - Harmonize normals - Согласование нормалей + Harmonize normals + Согласование нормалей - Harmonizes the normals of the mesh - Согласует нормали сети + Harmonizes the normals of the mesh + Согласует нормали сети - - + + CmdMeshImport - Mesh - Сеть + Mesh + Сеть - Import mesh... - Импорт сети... + Import mesh... + Импорт сети... - Imports a mesh from file - Импорт сети из файла + Imports a mesh from file + Импорт сети из файла - - + + CmdMeshIntersection - Mesh - Сеть + Mesh + Сеть - Intersection - Пересечение + Intersection + Пересечение - - + + CmdMeshPolyCut - Mesh - Сеть + Mesh + Сеть - Cut mesh - Обрезать сеть + Cut mesh + Обрезать сеть - Cuts a mesh with a picked polygon - Обрезать сеть, выбранным многоугольником + Cuts a mesh with a picked polygon + Обрезать сеть, выбранным многоугольником - - + + CmdMeshPolySegm - Mesh - Сеть + Mesh + Сеть - Make segment - Создать сегмент + Make segment + Создать сегмент - Creates a mesh segment - Создает сегмент сетки + Creates a mesh segment + Создает сегмент сетки - - + + CmdMeshPolySelect - Mesh - Сеть + Mesh + Сеть - Select mesh - Выберите сеть + Select mesh + Выберите сеть - Select an area of the mesh - Выберите область сетки + Select an area of the mesh + Выберите область сетки - - + + CmdMeshPolySplit - Mesh - Сеть + Mesh + Сеть - Split mesh - Разделить сети + Split mesh + Разделить сети - Splits a mesh into two meshes - Разделяет сетку на две сетки + Splits a mesh into two meshes + Разделяет сетку на две сетки - - + + + CmdMeshPolyTrim + + Mesh + Сеть + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Сеть + Mesh + Сеть - Remove components by hand... - Удалить компоненты вручную ... + Remove components by hand... + Удалить компоненты вручную ... - Mark a component to remove it from the mesh - Пометьте компонент для удаления из сетки + Mark a component to remove it from the mesh + Пометьте компонент для удаления из сетки - - + + CmdMeshRemoveComponents - Mesh - Сеть + Mesh + Сеть - Remove components... - Удалить компоненты... + Remove components... + Удалить компоненты... - Remove topologic independent components from the mesh - Удалить топологически-независимые компоненты из сетки + Remove topologic independent components from the mesh + Удалить топологически-независимые компоненты из сетки - - + + + CmdMeshSegmentation + + Mesh + Сеть + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Сеть + Mesh + Сеть - Smooth... - Сгладить ... + Smooth... + Сгладить ... - Smooth the selected meshes - Сгладить, выбранные сети + Smooth the selected meshes + Сгладить, выбранные сети - - + + CmdMeshToolMesh - Mesh - Сеть + Mesh + Сеть - Segment by tool mesh - Часть инструмента сетки + Segment by tool mesh + Часть инструмента сетки - Creates a segment from a given tool mesh - Создает сегмент из данного инструмента сети + Creates a segment from a given tool mesh + Создает сегмент из данного инструмента сети - - + + CmdMeshTransform - Mesh - Сеть + Mesh + Сеть - Transform mesh - Преобразование сетки + Transform mesh + Преобразование сетки - Rotate or move a mesh - Поворот или перемещение сетки + Rotate or move a mesh + Поворот или перемещение сетки - - + + CmdMeshUnion - Mesh - Сеть + Mesh + Сеть - Union - Объединение + Union + Объединение - - + + CmdMeshVertexCurvature - Mesh - Сеть + Mesh + Сеть - Calculates the curvature of the vertices of a mesh - Вычисляет кривизну вершин сетки + Calculates the curvature of the vertices of a mesh + Вычисляет кривизну вершин сетки - Curvature plot - Кривой участок + Curvature plot + Кривой участок - - + + CmdMeshVertexCurvatureInfo - Mesh - Сеть + Mesh + Сеть - Curvature info - Информация о кривизне + Curvature info + Информация о кривизне - Information about curvature - Информация о кривизне + Information about curvature + Информация о кривизне - - + + MeshGui::DlgEvaluateMesh - &Help - & Справки + &Help + & Справки - F1 - F1 + F1 + F1 - &Close - & Закрыть + &Close + & Закрыть - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Информация о сети + Mesh information + Информация о сети - No information - Информация отсутствует + No information + Информация отсутствует - Number of points: - Количество точек: + Number of points: + Количество точек: - Number of edges: - Количество ребер: + Number of edges: + Количество ребер: - Refresh - Обновить + Refresh + Обновить - Analyze - Анализировать + Analyze + Анализировать - Repair - Ремонт + Repair + Ремонт - Orientation - Ориентация + Orientation + Ориентация - Degenerated faces - Ухудшившийся лица + Degenerated faces + Ухудшившийся лица - Face indices - Индексы лица + Face indices + Индексы лица - Number of faces: - Количество лиц: + Number of faces: + Количество лиц: - Duplicated faces - Повторяющиеся лица + Duplicated faces + Повторяющиеся лица - Duplicated points - Повторяющиеся точки + Duplicated points + Повторяющиеся точки - Non-manifolds - Однообразия + Non-manifolds + Однообразия - Self-intersections - Самопересеченые + Self-intersections + Самопересеченые - All above tests together - Использоват вместе все указанные выше тесты + All above tests together + Использоват вместе все указанные выше тесты - Repetitive repair - Серийный ремонт + Repetitive repair + Серийный ремонт - Evaluate & Repair Mesh - Оценить и ремонтировать сетку + Evaluate & Repair Mesh + Оценить и ремонтировать сетку - Folds on surface - Складки на поверхности + Folds on surface + Складки на поверхности - - + + MeshGui::DlgEvaluateMeshImp - No information - Информация отсутствует + No information + Информация отсутствует - Invalid neighbour indices - Неверные соседи указателей + Invalid neighbour indices + Неверные соседи указателей - Invalid face indices - Неверные индексы граней + Invalid face indices + Неверные индексы граней - Invalid point indices - Неверные индексы точки + Invalid point indices + Неверные индексы точки - Multiple point indices - Составные указатели точек + Multiple point indices + Составные указатели точек - Non-manifolds - Однообразия + Non-manifolds + Однообразия - Cannot remove non-manifolds - Не могу удалить однообразия + Cannot remove non-manifolds + Не могу удалить однообразия - No selection - Нет выбора + No selection + Нет выбора - No flipped normals - Перевернутых нормалей нет + No flipped normals + Перевернутых нормалей нет - %1 flipped normals - %1 перевернуть нормали + %1 flipped normals + %1 перевернуть нормали - No non-manifolds - Нет однообразий + No non-manifolds + Нет однообразий - %1 non-manifolds - %1 однообразный + %1 non-manifolds + %1 однообразный - No invalid indices - Нет недействительных индексов + No invalid indices + Нет недействительных индексов - No degenerations - Не вырождать + No degenerations + Не вырождать - %1 degenerated faces - %1 выродившиеся грани + %1 degenerated faces + %1 выродившиеся грани - No duplicated faces - Нет дублировать грани + No duplicated faces + Нет дублировать грани - %1 duplicated faces - %1 дублирующиеся грани + %1 duplicated faces + %1 дублирующиеся грани - No duplicated points - Нет дублировать точки + No duplicated points + Нет дублировать точки - Duplicated points - Повторяющиеся точки + Duplicated points + Повторяющиеся точки - Orientation - Ориентация + Orientation + Ориентация - Indices - Индексы + Indices + Индексы - Degenerations - Ухудшения + Degenerations + Ухудшения - Duplicated faces - Повторяющиеся лица + Duplicated faces + Повторяющиеся лица - No self-intersections - Не самопересечений + No self-intersections + Не самопересечений - Self-intersections - Самопересеченые + Self-intersections + Самопересеченые - Mesh repair - Ремонт сетки + Mesh repair + Ремонт сетки - Flipped normals found - Найдены перевёрнутые нормали + Flipped normals found + Найдены перевёрнутые нормали - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Не удалось проверить из-за складок на поверхности. Сначала запустите команду для отладки складок + Не удалось проверить из-за складок на поверхности. Сначала запустите команду для отладки складок - No folds on surface - Нет складок на поверхности + No folds on surface + Нет складок на поверхности - %1 folds on surface - %1 складки на поверхности + %1 folds on surface + %1 складки на поверхности - Folds - Складки + Folds + Складки - - + + MeshGui::DlgRegularSolid - Regular Solid - Правильное геометрическое тело + Regular Solid + Правильное геометрическое тело - &Create - & Создать + &Create + & Создать - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Закрыть + Cl&ose + Закрыть - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Правильные: + Solid: + Правильные: - Cube - Куб + Cube + Куб - Cylinder - Цилиндр + Cylinder + Цилиндр - Cone - Конус + Cone + Конус - Sphere - Сфера + Sphere + Сфера - Ellipsoid - Эллипсоид + Ellipsoid + Эллипсоид - Torus - Тор + Torus + Тор - Height: - Высота: + Height: + Высота: - Length: - Длина: + Length: + Длина: - Width: - Ширина: + Width: + Ширина: - Radius: - Радиус: + Radius: + Радиус: - Closed - Закрыто + Closed + Закрыто - Sampling: - Выборка: + Sampling: + Выборка: - Edge length: - Длина кромки: + Edge length: + Длина кромки: - Radius 1: - Радиус 1: + Radius 1: + Радиус 1: - Radius 2: - Радиус 2: + Radius 2: + Радиус 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Создать %1 + Create %1 + Создать %1 - No active document - Нет активного документа + No active document + Нет активного документа - - + + MeshGui::DlgSettingsMeshView - Mesh view - Просмотр в виде сетки + Mesh view + Просмотр в виде сетки - Two-side rendering - Двустороннее отображение + Two-side rendering + Двустороннее отображение - Backface color - Цвет оборотной стороны + Backface color + Цвет оборотной стороны - Smoothing - Размытие + Smoothing + Размытие - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - Crease angle - Угол сгиба + Crease angle + Угол сгиба - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Определить нормаль для каждой вершины + Define normal per vertex + Определить нормаль для каждой вершины + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Внешний вид новых сеток по умолчанию - Default appearance for new meshes - Внешний вид новых сеток по умолчанию + Default line color + Цвет линии по умолчанию - Default line color - Цвет линии по умолчанию + Mesh transparency + Прозрачность сетки - Mesh transparency - Прозрачность сетки + Default mesh color + Цвет сетки по умолчанию - Default mesh color - Цвет сетки по умолчанию + Show bounding-box for highlighted or selected meshes + Показать ограничивающий прямоугольник для подсвеченных или выбранных сеток - Show bounding-box for highlighted or selected meshes - Показать ограничивающий прямоугольник для подсвеченных или выбранных сеток + Line transparency + Прозрачность линии - - Line transparency - Прозрачность линии - - - + + MeshGui::DlgSmoothing - Smoothing - Размытие + Smoothing + Размытие - Method - Метод + Method + Метод - Taubin - Таубин + Taubin + Таубин - Laplace - Лапласа + Laplace + Лапласа - Parameter - Параметр + Parameter + Параметр - Iterations: - Итерации: + Iterations: + Итерации: - Lambda: - Лямбда: + Lambda: + Лямбда: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Добавить треугольник + Add triangle + Добавить треугольник - Flip normal - Направить нормаль в противоположную сторону + Flip normal + Направить нормаль в противоположную сторону - Clear - Очистить + Clear + Очистить - Finish - Завершить + Finish + Завершить - - + + MeshGui::RemoveComponents - Remove components - Удалить компоненты + Remove components + Удалить компоненты - Select - Выбрать + Select + Выбрать - Select whole component - Выбрать все компоненты + Select whole component + Выбрать все компоненты - Pick triangle - Подобрать треугольник + Pick triangle + Подобрать треугольник - < faces than - < faces than + < faces than + < faces than - Region - Регион + Region + Регион - Components - Компоненты + Components + Компоненты - All - Все + All + Все - Deselect - Снять выделение + Deselect + Снять выделение - Deselect whole component - Снять выделение все компоненты + Deselect whole component + Снять выделение все компоненты - > faces than - > наружное покрытие + > faces than + > наружное покрытие - Region options - Параметры региона + Region options + Параметры региона - Respect only triangles with normals facing screen - Привилегировать треугольники с наружным покрытием + Respect only triangles with normals facing screen + Привилегировать треугольники с наружным покрытием - Respect only visible triangles - Уважать только видимые треугольники + Respect only visible triangles + Уважать только видимые треугольники - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Цилиндр + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Сфера + + + MeshGui::TaskRemoveComponents - Delete - Удалить + Delete + Удалить - Invert - Инвертировать + Invert + Инвертировать - - + + QDockWidget - Evaluate & Repair Mesh - Оценить и ремонтировать сетку + Evaluate & Repair Mesh + Оценить и ремонтировать сетку - - + + QObject - Import mesh - Импорт сети + Import mesh + Импорт сети - Export mesh - Экспорт сети + Export mesh + Экспорт сети - Solid Mesh - Прочная сетка + Solid Mesh + Прочная сетка - Boundings - Ограничения + Boundings + Ограничения - Fill holes - Закрыть отверстия + Fill holes + Закрыть отверстия - Fill holes with maximum number of edges: - Заполнить отверстия с максимальным числом ребер: + Fill holes with maximum number of edges: + Заполнить отверстия с максимальным числом ребер: - Binary STL (*.stl) - Двоичный STL (*.stl) + Binary STL (*.stl) + Двоичный STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Двоичный сетки (*.bms) + Binary Mesh (*.bms) + Двоичный сетки (*.bms) - Alias Mesh (*.obj) - Псевдонимные сетки (*.obj) + Alias Mesh (*.obj) + Псевдонимные сетки (*.obj) - Inventor V2.1 ascii (*.iv) - Изобретатель V2.1 ascii (* .iv) + Inventor V2.1 ascii (*.iv) + Изобретатель V2.1 ascii (* .iv) - All Files (*.*) - Все файлы (*.*) + All Files (*.*) + Все файлы (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Сжатый VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Сжатый VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python module def (*.py) + Python module def (*.py) + Python module def (*.py) - Meshing Tolerance - Возможное отклонение сетки + Meshing Tolerance + Возможное отклонение сетки - Enter tolerance for meshing geometry: - Введите возможное отклонение для слияния геометрии: + Enter tolerance for meshing geometry: + Введите возможное отклонение для слияния геометрии: - The mesh '%1' is a solid. - Сетка '%1' прочная. + The mesh '%1' is a solid. + Сетка '%1' прочная. - The mesh '%1' is not a solid. - Сетка '%1' не прочная. + The mesh '%1' is not a solid. + Сетка '%1' не прочная. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Пунктов: %1, Ребер: %2 Лиц: %3] + [Points: %1, Edges: %2 Faces: %3] + [Пунктов: %1, Ребер: %2 Лиц: %3] - Leave info mode - Выйти из информационного режима + Leave info mode + Выйти из информационного режима - Index: %1 - Индекс: %1 + Index: %1 + Индекс: %1 - Leave hole-filling mode - Выйти из режима заполнения отверстий + Leave hole-filling mode + Выйти из режима заполнения отверстий - Leave removal mode - Выйти из режима удаления + Leave removal mode + Выйти из режима удаления - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Все файлы сеток (*.stl *.ast *.bms *.obj * .ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Все файлы сеток (*.stl *.ast *.bms *.obj * .ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Удалить выбранные лица + Delete selected faces + Удалить выбранные лица - Clear selected faces - Очистить выбранные грани + Clear selected faces + Очистить выбранные грани - Annotation - Аннотация + Annotation + Аннотация - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Анализировать + Analyze + Анализировать - Boolean - Булевый + Boolean + Булевый - &Meshes - & Сетки + &Meshes + & Сетки - Mesh tools - Инструменты сетки + Mesh tools + Инструменты сетки - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_se.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_se.ts index b3b57649f..dcb22227b 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_se.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_se.ts @@ -1,1122 +1,1203 @@ - - + + CmdMeshAddFacet - Mesh - Nät + Mesh + Nät - Add triangle - Addera triangel + Add triangle + Addera triangel - Add triangle manually to a mesh - Addera triangel manuellt till ett nät + Add triangle manually to a mesh + Addera triangel manuellt till ett nät - - + + CmdMeshBoundingBox - Mesh - Nät + Mesh + Nät - Boundings info... - Begränsningsinfo... + Boundings info... + Begränsningsinfo... - Shows the boundings of the selected mesh - Visar begränsningarna på det valda nätet + Shows the boundings of the selected mesh + Visar begränsningarna på det valda nätet - - + + CmdMeshBuildRegularSolid - Mesh - Nät + Mesh + Nät - Regular solid... - Reguljär solid... + Regular solid... + Reguljär solid... - Builds a regular solid - Skapar en reguljär solid + Builds a regular solid + Skapar en reguljär solid - - + + CmdMeshDemolding - Interactive demolding direction - Interaktiv avformningsriktning + Interactive demolding direction + Interaktiv avformningsriktning - Mesh - Nät + Mesh + Nät - - + + CmdMeshDifference - Mesh - Nät + Mesh + Nät - Difference - Skillnad + Difference + Skillnad - - + + CmdMeshEvaluateFacet - Mesh - Nät + Mesh + Nät - Face info - Ytinformation + Face info + Ytinformation - Information about face - Information om yta + Information about face + Information om yta - - + + CmdMeshEvaluateSolid - Mesh - Nät + Mesh + Nät - Check solid mesh - Kontrolera solidnät + Check solid mesh + Kontrolera solidnät - Checks whether the mesh is a solid - Kontrollerar om nätet är en solid + Checks whether the mesh is a solid + Kontrollerar om nätet är en solid - - + + CmdMeshEvaluation - Mesh - Nät + Mesh + Nät - Opens a dialog to analyze and repair a mesh - Öppnar en dialog för att analysera och reparera ett nät + Opens a dialog to analyze and repair a mesh + Öppnar en dialog för att analysera och reparera ett nät - Evaluate && Repair mesh... - Utvärdera && reparera nät... + Evaluate && Repair mesh... + Utvärdera && reparera nät... - - + + CmdMeshExMakeMesh - Mesh - Nät + Mesh + Nät - Make a Box - Gör en låda + Make a Box + Gör en låda - - + + CmdMeshExMakeTool - Mesh - Nät + Mesh + Nät - Make a Tool - Gör ett verktyg + Make a Tool + Gör ett verktyg - - + + CmdMeshExMakeUnion - Mesh - Nät + Mesh + Nät - Make Union - Gör en förening + Make Union + Gör en förening - - + + CmdMeshExport - Mesh - Nät + Mesh + Nät - Export mesh... - Exportera nät... + Export mesh... + Exportera nät... - Exports a mesh to file - Exporterar ett nät till fil + Exports a mesh to file + Exporterar ett nät till fil - - + + CmdMeshFillInteractiveHole - Mesh - Nät + Mesh + Nät - Close hole - Stäng hål + Close hole + Stäng hål - Close holes interactively - Stäng hål interaktivt + Close holes interactively + Stäng hål interaktivt - - + + CmdMeshFillupHoles - Mesh - Nät + Mesh + Nät - Fill holes... - Fyll hål... + Fill holes... + Fyll hål... - Fill holes of the mesh - Fyll nätets hål + Fill holes of the mesh + Fyll nätets hål - - + + CmdMeshFlipNormals - Mesh - Nät + Mesh + Nät - Flip normals - Invertera normaler + Flip normals + Invertera normaler - Flips the normals of the mesh - Invertera nätets normaler + Flips the normals of the mesh + Invertera nätets normaler - - + + CmdMeshFromGeometry - Mesh - Nät + Mesh + Nät - Create mesh from geometry... - Skapa nät från geometri... + Create mesh from geometry... + Skapa nät från geometri... - Create mesh from the selected geometry - Skapa nät från den valda geometrin + Create mesh from the selected geometry + Skapa nät från den valda geometrin - - + + CmdMeshHarmonizeNormals - Mesh - Nät + Mesh + Nät - Harmonize normals - Anpassa normaler + Harmonize normals + Anpassa normaler - Harmonizes the normals of the mesh - Anpassa nätets normaler + Harmonizes the normals of the mesh + Anpassa nätets normaler - - + + CmdMeshImport - Mesh - Nät + Mesh + Nät - Import mesh... - Importera nät... + Import mesh... + Importera nät... - Imports a mesh from file - Importerar ett nät från fil + Imports a mesh from file + Importerar ett nät från fil - - + + CmdMeshIntersection - Mesh - Nät + Mesh + Nät - Intersection - Skärning + Intersection + Skärning - - + + CmdMeshPolyCut - Mesh - Nät + Mesh + Nät - Cut mesh - Klipp nät + Cut mesh + Klipp nät - Cuts a mesh with a picked polygon - Klipper ett nät med en vald polygon + Cuts a mesh with a picked polygon + Klipper ett nät med en vald polygon - - + + CmdMeshPolySegm - Mesh - Nät + Mesh + Nät - Make segment - Skapa segment + Make segment + Skapa segment - Creates a mesh segment - Skapar ett nätsegment + Creates a mesh segment + Skapar ett nätsegment - - + + CmdMeshPolySelect - Mesh - Nät + Mesh + Nät - Select mesh - Välj nät + Select mesh + Välj nät - Select an area of the mesh - Markera ett område i nätet + Select an area of the mesh + Markera ett område i nätet - - + + CmdMeshPolySplit - Mesh - Nät + Mesh + Nät - Split mesh - Dela nät + Split mesh + Dela nät - Splits a mesh into two meshes - Delar ett nät till två nät + Splits a mesh into two meshes + Delar ett nät till två nät - - + + + CmdMeshPolyTrim + + Mesh + Nät + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Nät + Mesh + Nät - Remove components by hand... - Ta bort komponenter för hand... + Remove components by hand... + Ta bort komponenter för hand... - Mark a component to remove it from the mesh - Markera en komponent för att ta bort den från nätet + Mark a component to remove it from the mesh + Markera en komponent för att ta bort den från nätet - - + + CmdMeshRemoveComponents - Mesh - Nät + Mesh + Nät - Remove components... - Ta bort komponenter... + Remove components... + Ta bort komponenter... - Remove topologic independent components from the mesh - Ta bort topologiskt oberoende komponenter från nätet + Remove topologic independent components from the mesh + Ta bort topologiskt oberoende komponenter från nätet - - + + + CmdMeshSegmentation + + Mesh + Nät + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Nät + Mesh + Nät - Smooth... - Jämna ut... + Smooth... + Jämna ut... - Smooth the selected meshes - Jämna ut de valda näten + Smooth the selected meshes + Jämna ut de valda näten - - + + CmdMeshToolMesh - Mesh - Nät + Mesh + Nät - Segment by tool mesh - Segmentera + Segment by tool mesh + Segmentera - Creates a segment from a given tool mesh - Skapar ett segment från ett givet verktygsnät + Creates a segment from a given tool mesh + Skapar ett segment från ett givet verktygsnät - - + + CmdMeshTransform - Mesh - Nät + Mesh + Nät - Transform mesh - Transformera nät + Transform mesh + Transformera nät - Rotate or move a mesh - Rotera eller flytta ett nät + Rotate or move a mesh + Rotera eller flytta ett nät - - + + CmdMeshUnion - Mesh - Nät + Mesh + Nät - Union - Förening + Union + Förening - - + + CmdMeshVertexCurvature - Mesh - Nät + Mesh + Nät - Calculates the curvature of the vertices of a mesh - Beräknar hörnens krökning på ett nät + Calculates the curvature of the vertices of a mesh + Beräknar hörnens krökning på ett nät - Curvature plot - Krökningsplott + Curvature plot + Krökningsplott - - + + CmdMeshVertexCurvatureInfo - Mesh - Nät + Mesh + Nät - Curvature info - Krökningsinfo + Curvature info + Krökningsinfo - Information about curvature - Information om krökning + Information about curvature + Information om krökning - - + + MeshGui::DlgEvaluateMesh - &Help - &Hjälp + &Help + &Hjälp - F1 - F1 + F1 + F1 - &Close - &Stäng + &Close + &Stäng - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Nätinformation + Mesh information + Nätinformation - No information - Ingen Information + No information + Ingen Information - Number of points: - Antal punkter: + Number of points: + Antal punkter: - Number of edges: - Antal kanter: + Number of edges: + Antal kanter: - Refresh - Ladda om + Refresh + Ladda om - Analyze - Analysera + Analyze + Analysera - Repair - Reparera + Repair + Reparera - Orientation - Orientering + Orientation + Orientering - Degenerated faces - Degenererade ytor + Degenerated faces + Degenererade ytor - Face indices - Ytindex + Face indices + Ytindex - Number of faces: - Antal ytor: + Number of faces: + Antal ytor: - Duplicated faces - Duplicerade ytor + Duplicated faces + Duplicerade ytor - Duplicated points - Duplicerade punkter + Duplicated points + Duplicerade punkter - Non-manifolds - Icke-mångfalder + Non-manifolds + Icke-mångfalder - Self-intersections - Självskärningar + Self-intersections + Självskärningar - All above tests together - Alla ovanstående test tillsammans + All above tests together + Alla ovanstående test tillsammans - Repetitive repair - Upprepad reparation + Repetitive repair + Upprepad reparation - Evaluate & Repair Mesh - Utvärdera & reparera Nät + Evaluate & Repair Mesh + Utvärdera & reparera Nät - Folds on surface - Veck på ytan + Folds on surface + Veck på ytan - - + + MeshGui::DlgEvaluateMeshImp - No information - Ingen Information + No information + Ingen Information - Invalid neighbour indices - Ogiltiga grannindex + Invalid neighbour indices + Ogiltiga grannindex - Invalid face indices - Ogiltiga ytindex + Invalid face indices + Ogiltiga ytindex - Invalid point indices - Ogiltiga punktindex + Invalid point indices + Ogiltiga punktindex - Multiple point indices - Multipla punktindex + Multiple point indices + Multipla punktindex - Non-manifolds - Icke-mångfalder + Non-manifolds + Icke-mångfalder - Cannot remove non-manifolds - Kan inte ta bort icke-mångfalder + Cannot remove non-manifolds + Kan inte ta bort icke-mångfalder - No selection - Inget val + No selection + Inget val - No flipped normals - Inga inverterade normaler + No flipped normals + Inga inverterade normaler - %1 flipped normals - %1 inverterade normaler + %1 flipped normals + %1 inverterade normaler - No non-manifolds - Inga icke-mångfalder + No non-manifolds + Inga icke-mångfalder - %1 non-manifolds - %1 icke-mångfalder + %1 non-manifolds + %1 icke-mångfalder - No invalid indices - Ingen ogiltig index + No invalid indices + Ingen ogiltig index - No degenerations - Inga degenerationer + No degenerations + Inga degenerationer - %1 degenerated faces - %1 degenererade ytor + %1 degenerated faces + %1 degenererade ytor - No duplicated faces - Inga duplicerade ytor + No duplicated faces + Inga duplicerade ytor - %1 duplicated faces - %1 duplicerade ytor + %1 duplicated faces + %1 duplicerade ytor - No duplicated points - Inga duplicerade punkter + No duplicated points + Inga duplicerade punkter - Duplicated points - Duplicerade punkter + Duplicated points + Duplicerade punkter - Orientation - Orientering + Orientation + Orientering - Indices - Index + Indices + Index - Degenerations - Degenerationer + Degenerations + Degenerationer - Duplicated faces - Duplicerade ytor + Duplicated faces + Duplicerade ytor - No self-intersections - Inga självskärningar + No self-intersections + Inga självskärningar - Self-intersections - Självskärningar + Self-intersections + Självskärningar - Mesh repair - Nätreparation + Mesh repair + Nätreparation - Flipped normals found - Vända normaler hittades + Flipped normals found + Vända normaler hittades - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Kontroll misslyckades på grund av veck på ytan. Kör kommandot för att reparera veck först + Kontroll misslyckades på grund av veck på ytan. Kör kommandot för att reparera veck först - No folds on surface - Inga veck på ytan + No folds on surface + Inga veck på ytan - %1 folds on surface - %1 veck på ytan + %1 folds on surface + %1 veck på ytan - Folds - Veck + Folds + Veck - - + + MeshGui::DlgRegularSolid - Regular Solid - Reguljär solid + Regular Solid + Reguljär solid - &Create - &Skapa + &Create + &Skapa - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - S&täng + Cl&ose + S&täng - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Solid: + Solid: + Solid: - Cube - Kub + Cube + Kub - Cylinder - Cylinder + Cylinder + Cylinder - Cone - Kon + Cone + Kon - Sphere - Sfär + Sphere + Sfär - Ellipsoid - Ellipsoid + Ellipsoid + Ellipsoid - Torus - Torus + Torus + Torus - Height: - Höjd: + Height: + Höjd: - Length: - Längd: + Length: + Längd: - Width: - Bredd: + Width: + Bredd: - Radius: - Radie: + Radius: + Radie: - Closed - Stängd + Closed + Stängd - Sampling: - Skanning: + Sampling: + Skanning: - Edge length: - Kantlängd: + Edge length: + Kantlängd: - Radius 1: - Radie 1: + Radius 1: + Radie 1: - Radius 2: - Radie 2: + Radius 2: + Radie 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Skapa %1 + Create %1 + Skapa %1 - No active document - Inget aktivt dokument + No active document + Inget aktivt dokument - - + + MeshGui::DlgSettingsMeshView - Mesh view - Nätvy + Mesh view + Nätvy - Two-side rendering - Två-sidig rendering + Two-side rendering + Två-sidig rendering - Backface color - Bakgrundsfärg + Backface color + Bakgrundsfärg - Smoothing - Utjämning + Smoothing + Utjämning - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Detta är den minsta vinkeln mellan två ytor där normalerna beräknas för att göra platt skuggning.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Om vinkeln mellan normalerna på två intilliggande ytor är mindre än veckvinkeln, så kommer ytorna att mjukskuggas runt deras gemensamma kant.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Detta är den minsta vinkeln mellan två ytor där normalerna beräknas för att göra platt skuggning.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Om vinkeln mellan normalerna på två intilliggande ytor är mindre än veckvinkeln, så kommer ytorna att mjukskuggas runt deras gemensamma kant.</p></body></html> - Crease angle - Veckvinkel + Crease angle + Veckvinkel - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Platt skuggning/Phong skuggning</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definierar ytornas utseende.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Med plattskuggning så är ytnormalerna inte definierade för hörn som leder till ett onaturligt utseende för kurvade ytor, emedan Phong skuggning leder till ett mjukare utseende. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Om detta alternativ är valt så används Phong skuggning,annars så används plattskuggning.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Platt skuggning/Phong skuggning</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definierar ytornas utseende.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Med plattskuggning så är ytnormalerna inte definierade för hörn som leder till ett onaturligt utseende för kurvade ytor, emedan Phong skuggning leder till ett mjukare utseende. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Om detta alternativ är valt så används Phong skuggning,annars så används plattskuggning.</p></body></html> - Define normal per vertex - Definiera normaler för hörn + Define normal per vertex + Definiera normaler för hörn + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Tips</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiera normaler för hörn kallas också<span style=" font-style:italic;">Phong skuggning</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">medan definition av normaler för yta kallas</span>Plattskuggning<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Tips</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiera normaler för hörn kallas också<span style=" font-style:italic;">Phong skuggning</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">medan definition av normaler för yta kallas</span>Plattskuggning<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Standardutseende för nya nät - Default appearance for new meshes - Standardutseende för nya nät + Default line color + Standard linjefärg - Default line color - Standard linjefärg + Mesh transparency + Nät transparens - Mesh transparency - Nät transparens + Default mesh color + Standard nät färg - Default mesh color - Standard nät färg + Show bounding-box for highlighted or selected meshes + Visa markeringsram för markerade eller valda nät - Show bounding-box for highlighted or selected meshes - Visa markeringsram för markerade eller valda nät + Line transparency + Linjegenomskinlighet - - Line transparency - Linjegenomskinlighet - - - + + MeshGui::DlgSmoothing - Smoothing - Utjämning + Smoothing + Utjämning - Method - Metod + Method + Metod - Taubin - Taubin + Taubin + Taubin - Laplace - Laplace + Laplace + Laplace - Parameter - Parameter + Parameter + Parameter - Iterations: - Iterationer: + Iterations: + Iterationer: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Addera triangel + Add triangle + Addera triangel - Flip normal - Vänd normal + Flip normal + Vänd normal - Clear - Rensa + Clear + Rensa - Finish - Slutför + Finish + Slutför - - + + MeshGui::RemoveComponents - Remove components - Ta bort komponenter + Remove components + Ta bort komponenter - Select - Välj + Select + Välj - Select whole component - Välj hela komponenten + Select whole component + Välj hela komponenten - Pick triangle - Markera triangel + Pick triangle + Markera triangel - < faces than - < ytor än + < faces than + < ytor än - Region - Område + Region + Område - Components - Komponenter + Components + Komponenter - All - Alla + All + Alla - Deselect - Avmarkera + Deselect + Avmarkera - Deselect whole component - Avmarkera hela komponenten + Deselect whole component + Avmarkera hela komponenten - > faces than - > ytor än + > faces than + > ytor än - Region options - Region alternativ + Region options + Region alternativ - Respect only triangles with normals facing screen - Respekt endast trianglar med normaler vända mot skärmen + Respect only triangles with normals facing screen + Respekt endast trianglar med normaler vända mot skärmen - Respect only visible triangles - Respektera endast synliga trianglar + Respect only visible triangles + Respektera endast synliga trianglar - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Cylinder + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Sfär + + + MeshGui::TaskRemoveComponents - Delete - Radera + Delete + Radera - Invert - Invertera + Invert + Invertera - - + + QDockWidget - Evaluate & Repair Mesh - Utvärdera & reparera Nät + Evaluate & Repair Mesh + Utvärdera & reparera Nät - - + + QObject - Import mesh - Importera nät + Import mesh + Importera nät - Export mesh - Exportera nät + Export mesh + Exportera nät - Solid Mesh - Solid nät + Solid Mesh + Solid nät - Boundings - Gränser + Boundings + Gränser - Fill holes - Fyll hål + Fill holes + Fyll hål - Fill holes with maximum number of edges: - Fyll hål med maximalt antal kanter: + Fill holes with maximum number of edges: + Fyll hål med maximalt antal kanter: - Binary STL (*.stl) - Binär STL (*.stl) + Binary STL (*.stl) + Binär STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Nät-Binärformat (*.bms) + Binary Mesh (*.bms) + Nät-Binärformat (*.bms) - Alias Mesh (*.obj) - Alias Mesh (*.obj) + Alias Mesh (*.obj) + Alias Mesh (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Alla Filer (*.*) + All Files (*.*) + Alla Filer (*.*) - ASCII STL (*.stl) - ASCII STL (*.STL) + ASCII STL (*.stl) + ASCII STL (*.STL) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.WRL *.VRML) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.WRL *.VRML) - Compressed VRML 2.0 (*.wrz) - Komprimerad VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Komprimerad VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.NAS *.BDF) + Nastran (*.nas *.bdf) + Nastran (*.NAS *.BDF) - Python module def (*.py) - Python-modul def (*.py) + Python module def (*.py) + Python-modul def (*.py) - Meshing Tolerance - Nät tolerans + Meshing Tolerance + Nät tolerans - Enter tolerance for meshing geometry: - Mata in tolerans för nätning av geometri: + Enter tolerance for meshing geometry: + Mata in tolerans för nätning av geometri: - The mesh '%1' is a solid. - Nätet '%1' är en solid. + The mesh '%1' is a solid. + Nätet '%1' är en solid. - The mesh '%1' is not a solid. - Nätet '%1' är ingen solid. + The mesh '%1' is not a solid. + Nätet '%1' är ingen solid. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Punkter: %1, Kanter: %2 Ytor: %3] + [Points: %1, Edges: %2 Faces: %3] + [Punkter: %1, Kanter: %2 Ytor: %3] - Leave info mode - Lämna info läge + Leave info mode + Lämna info läge - Index: %1 - Index: %1 + Index: %1 + Index: %1 - Leave hole-filling mode - Lämna hålfyllningsläge + Leave hole-filling mode + Lämna hålfyllningsläge - Leave removal mode - Lämna borttagningsläge + Leave removal mode + Lämna borttagningsläge - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Alla Nät-filer (*.STL *.ast *.BMS *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Alla Nät-filer (*.STL *.ast *.BMS *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Objekt-filformat (* .off) + Object File Format (*.off) + Objekt-filformat (* .off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Ta bort markerade ytor + Delete selected faces + Ta bort markerade ytor - Clear selected faces - Rensa valda ytor + Clear selected faces + Rensa valda ytor - Annotation - Annotering + Annotation + Annotering - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Analysera + Analyze + Analysera - Boolean - Boolesk + Boolean + Boolesk - &Meshes - &Nät + &Meshes + &Nät - Mesh tools - Nätverktyg + Mesh tools + Nätverktyg - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_uk.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_uk.ts index 622a0bbc6..6bf756941 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_uk.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_uk.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Add triangle - Додати трикутник + Add triangle + Додати трикутник - Add triangle manually to a mesh - Вручну додати трикутник до сітки + Add triangle manually to a mesh + Вручну додати трикутник до сітки - - + + CmdMeshBoundingBox - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Boundings info... - Boundings info... + Boundings info... + Boundings info... - Shows the boundings of the selected mesh - Shows the boundings of the selected mesh + Shows the boundings of the selected mesh + Shows the boundings of the selected mesh - - + + CmdMeshBuildRegularSolid - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Regular solid... - Regular solid... + Regular solid... + Regular solid... - Builds a regular solid - Builds a regular solid + Builds a regular solid + Builds a regular solid - - + + CmdMeshDemolding - Interactive demolding direction - Interactive demolding direction + Interactive demolding direction + Interactive demolding direction - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - - + + CmdMeshDifference - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Difference - Різниця + Difference + Різниця - - + + CmdMeshEvaluateFacet - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Face info - Інформація про грань + Face info + Інформація про грань - Information about face - Інформація про грань + Information about face + Інформація про грань - - + + CmdMeshEvaluateSolid - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Check solid mesh - Перевірити суцільність сітки + Check solid mesh + Перевірити суцільність сітки - Checks whether the mesh is a solid - Перевірити чи сітка суцільна + Checks whether the mesh is a solid + Перевірити чи сітка суцільна - - + + CmdMeshEvaluation - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Opens a dialog to analyze and repair a mesh - Відкриває діалог для аналізу та ремонту сітки + Opens a dialog to analyze and repair a mesh + Відкриває діалог для аналізу та ремонту сітки - Evaluate && Repair mesh... - Оцінка та Ремонт сітки... + Evaluate && Repair mesh... + Оцінка та Ремонт сітки... - - + + CmdMeshExMakeMesh - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Make a Box - Зробити Коробку + Make a Box + Зробити Коробку - - + + CmdMeshExMakeTool - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Make a Tool - Зробити Інструмент + Make a Tool + Зробити Інструмент - - + + CmdMeshExMakeUnion - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Make Union - Зробити Об’єднання + Make Union + Зробити Об’єднання - - + + CmdMeshExport - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Export mesh... - Експорт сітки... + Export mesh... + Експорт сітки... - Exports a mesh to file - Експорт сітки до файлу + Exports a mesh to file + Експорт сітки до файлу - - + + CmdMeshFillInteractiveHole - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Close hole - Закрити отвір + Close hole + Закрити отвір - Close holes interactively - Close holes interactively + Close holes interactively + Close holes interactively - - + + CmdMeshFillupHoles - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Fill holes... - Fill holes... + Fill holes... + Fill holes... - Fill holes of the mesh - Fill holes of the mesh + Fill holes of the mesh + Fill holes of the mesh - - + + CmdMeshFlipNormals - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Flip normals - Flip normals + Flip normals + Flip normals - Flips the normals of the mesh - Flips the normals of the mesh + Flips the normals of the mesh + Flips the normals of the mesh - - + + CmdMeshFromGeometry - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Create mesh from geometry... - Створити сітку з геометрії ... + Create mesh from geometry... + Створити сітку з геометрії ... - Create mesh from the selected geometry - Створити сітку з обраної геометрії + Create mesh from the selected geometry + Створити сітку з обраної геометрії - - + + CmdMeshHarmonizeNormals - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Harmonize normals - Узгодити нормалі + Harmonize normals + Узгодити нормалі - Harmonizes the normals of the mesh - Узгодити нормалі сітки + Harmonizes the normals of the mesh + Узгодити нормалі сітки - - + + CmdMeshImport - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Import mesh... - Імпорт сітки... + Import mesh... + Імпорт сітки... - Imports a mesh from file - Імпорт сітки з файлу + Imports a mesh from file + Імпорт сітки з файлу - - + + CmdMeshIntersection - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Intersection - Перетин + Intersection + Перетин - - + + CmdMeshPolyCut - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Cut mesh - Вирізати сітку + Cut mesh + Вирізати сітку - Cuts a mesh with a picked polygon - Вирізати сітку з обраного багатокутника + Cuts a mesh with a picked polygon + Вирізати сітку з обраного багатокутника - - + + CmdMeshPolySegm - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Make segment - Зробити сегмент + Make segment + Зробити сегмент - Creates a mesh segment - Creates a mesh segment + Creates a mesh segment + Creates a mesh segment - - + + CmdMeshPolySelect - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Select mesh - Вибір сітки + Select mesh + Вибір сітки - Select an area of the mesh - Вибрати область сітки + Select an area of the mesh + Вибрати область сітки - - + + CmdMeshPolySplit - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Split mesh - Розбити сітку + Split mesh + Розбити сітку - Splits a mesh into two meshes - Splits a mesh into two meshes + Splits a mesh into two meshes + Splits a mesh into two meshes - - + + + CmdMeshPolyTrim + + Mesh + Сітка(Меш) + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Remove components by hand... - Remove components by hand... + Remove components by hand... + Remove components by hand... - Mark a component to remove it from the mesh - Mark a component to remove it from the mesh + Mark a component to remove it from the mesh + Mark a component to remove it from the mesh - - + + CmdMeshRemoveComponents - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Remove components... - Remove components... + Remove components... + Remove components... - Remove topologic independent components from the mesh - Remove topologic independent components from the mesh + Remove topologic independent components from the mesh + Remove topologic independent components from the mesh - - + + + CmdMeshSegmentation + + Mesh + Сітка(Меш) + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Smooth... - Smooth... + Smooth... + Smooth... - Smooth the selected meshes - Smooth the selected meshes + Smooth the selected meshes + Smooth the selected meshes - - + + CmdMeshToolMesh - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Segment by tool mesh - Сегмент з інструменту сітки + Segment by tool mesh + Сегмент з інструменту сітки - Creates a segment from a given tool mesh - Створює сегмент від даного інструменту сітки + Creates a segment from a given tool mesh + Створює сегмент від даного інструменту сітки - - + + CmdMeshTransform - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Transform mesh - Перетворення сітки + Transform mesh + Перетворення сітки - Rotate or move a mesh - Обертання або переміщення сітки + Rotate or move a mesh + Обертання або переміщення сітки - - + + CmdMeshUnion - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Union - Об'єднання + Union + Об'єднання - - + + CmdMeshVertexCurvature - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Calculates the curvature of the vertices of a mesh - Розрахунок викривлення для вершин сітка + Calculates the curvature of the vertices of a mesh + Розрахунок викривлення для вершин сітка - Curvature plot - Ділянка викривлення + Curvature plot + Ділянка викривлення - - + + CmdMeshVertexCurvatureInfo - Mesh - Сітка(Меш) + Mesh + Сітка(Меш) - Curvature info - Інформація викривлення + Curvature info + Інформація викривлення - Information about curvature - Інформація про викривлення + Information about curvature + Інформація про викривлення - - + + MeshGui::DlgEvaluateMesh - &Help - &Допомога + &Help + &Допомога - F1 - F1 + F1 + F1 - &Close - &Закрити + &Close + &Закрити - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - Інформація про сітку + Mesh information + Інформація про сітку - No information - Інформація відсутня + No information + Інформація відсутня - Number of points: - Кількість точок: + Number of points: + Кількість точок: - Number of edges: - Кількість ребер: + Number of edges: + Кількість ребер: - Refresh - Оновити + Refresh + Оновити - Analyze - Аналізувати + Analyze + Аналізувати - Repair - Ремонтувати + Repair + Ремонтувати - Orientation - Orientation + Orientation + Orientation - Degenerated faces - Degenerated faces + Degenerated faces + Degenerated faces - Face indices - Face indices + Face indices + Face indices - Number of faces: - Number of faces: + Number of faces: + Number of faces: - Duplicated faces - Duplicated faces + Duplicated faces + Duplicated faces - Duplicated points - Duplicated points + Duplicated points + Duplicated points - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Self-intersections - Self-intersections + Self-intersections + Self-intersections - All above tests together - All above tests together + All above tests together + All above tests together - Repetitive repair - Repetitive repair + Repetitive repair + Repetitive repair - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - Folds on surface - Складки на поверхні + Folds on surface + Складки на поверхні - - + + MeshGui::DlgEvaluateMeshImp - No information - Інформація відсутня + No information + Інформація відсутня - Invalid neighbour indices - Хибні сусідні індекси + Invalid neighbour indices + Хибні сусідні індекси - Invalid face indices - Хибний індекс переднього плану + Invalid face indices + Хибний індекс переднього плану - Invalid point indices - Хибний індекс точки + Invalid point indices + Хибний індекс точки - Multiple point indices - Multiple point indices + Multiple point indices + Multiple point indices - Non-manifolds - Non-manifolds + Non-manifolds + Non-manifolds - Cannot remove non-manifolds - Cannot remove non-manifolds + Cannot remove non-manifolds + Cannot remove non-manifolds - No selection - Нічого не вибрано + No selection + Нічого не вибрано - No flipped normals - No flipped normals + No flipped normals + No flipped normals - %1 flipped normals - %1 flipped normals + %1 flipped normals + %1 flipped normals - No non-manifolds - No non-manifolds + No non-manifolds + No non-manifolds - %1 non-manifolds - %1 non-manifolds + %1 non-manifolds + %1 non-manifolds - No invalid indices - Невірні індекси відсутні + No invalid indices + Невірні індекси відсутні - No degenerations - Погіршені грані відсутні + No degenerations + Погіршені грані відсутні - %1 degenerated faces - %1 погіршених граней + %1 degenerated faces + %1 погіршених граней - No duplicated faces - Дубльовані грані відсутні + No duplicated faces + Дубльовані грані відсутні - %1 duplicated faces - %1 дубльованих граней + %1 duplicated faces + %1 дубльованих граней - No duplicated points - Дубльовані точки відсутні + No duplicated points + Дубльовані точки відсутні - Duplicated points - Duplicated points + Duplicated points + Duplicated points - Orientation - Orientation + Orientation + Orientation - Indices - Індекси + Indices + Індекси - Degenerations - Погіршення + Degenerations + Погіршення - Duplicated faces - Duplicated faces + Duplicated faces + Duplicated faces - No self-intersections - Самоперетин відсутній + No self-intersections + Самоперетин відсутній - Self-intersections - Self-intersections + Self-intersections + Self-intersections - Mesh repair - Ремонт сітки + Mesh repair + Ремонт сітки - Flipped normals found - Flipped normals found + Flipped normals found + Flipped normals found - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - No folds on surface - No folds on surface + No folds on surface + No folds on surface - %1 folds on surface - %1 folds on surface + %1 folds on surface + %1 folds on surface - Folds - Складки + Folds + Складки - - + + MeshGui::DlgRegularSolid - Regular Solid - Правильне геометричне тіло + Regular Solid + Правильне геометричне тіло - &Create - &Створити + &Create + &Створити - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - Закрити + Cl&ose + Закрити - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - Solid: + Solid: + Solid: - Cube - Куб + Cube + Куб - Cylinder - Циліндр + Cylinder + Циліндр - Cone - Конус + Cone + Конус - Sphere - Сфера + Sphere + Сфера - Ellipsoid - Еліпсоїд + Ellipsoid + Еліпсоїд - Torus - Тор + Torus + Тор - Height: - Висота: + Height: + Висота: - Length: - Довжина: + Length: + Довжина: - Width: - Ширина: + Width: + Ширина: - Radius: - Радіус: + Radius: + Радіус: - Closed - Закрито + Closed + Закрито - Sampling: - Вибірка: + Sampling: + Вибірка: - Edge length: - Довжина краю: + Edge length: + Довжина краю: - Radius 1: - Радіус 1: + Radius 1: + Радіус 1: - Radius 2: - Радіус 2: + Radius 2: + Радіус 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - Створити %1 + Create %1 + Створити %1 - No active document - Немає активного документу + No active document + Немає активного документу - - + + MeshGui::DlgSettingsMeshView - Mesh view - Вигляд сітки + Mesh view + Вигляд сітки - Two-side rendering - Дво-стороння побудова + Two-side rendering + Дво-стороння побудова - Backface color - Колір зворотньої сторони + Backface color + Колір зворотньої сторони - Smoothing - Згладжування + Smoothing + Згладжування - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - Crease angle - Кут згину + Crease angle + Кут згину - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - Define normal per vertex - Визначити нормаль для кожної вершини + Define normal per vertex + Визначити нормаль для кожної вершини + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + Default appearance for new meshes + Стандартний вигляд для нових сіток - Default appearance for new meshes - Стандартний вигляд для нових сіток + Default line color + Стандартний колір лінії - Default line color - Стандартний колір лінії + Mesh transparency + Прозорість сітки - Mesh transparency - Прозорість сітки + Default mesh color + Стандартний колір сітки - Default mesh color - Стандартний колір сітки + Show bounding-box for highlighted or selected meshes + Показувати прямокутник обмеження для підсвічених чи обраних сіток - Show bounding-box for highlighted or selected meshes - Показувати прямокутник обмеження для підсвічених чи обраних сіток + Line transparency + Прозорість лінії - - Line transparency - Прозорість лінії - - - + + MeshGui::DlgSmoothing - Smoothing - Згладжування + Smoothing + Згладжування - Method - Метод + Method + Метод - Taubin - Таубіна + Taubin + Таубіна - Laplace - Лапласа + Laplace + Лапласа - Parameter - Параметр + Parameter + Параметр - Iterations: - Ітерації: + Iterations: + Ітерації: - Lambda: - Лямбда: + Lambda: + Лямбда: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - Додати трикутник + Add triangle + Додати трикутник - Flip normal - Flip normal + Flip normal + Flip normal - Clear - Очистити + Clear + Очистити - Finish - Завершити + Finish + Завершити - - + + MeshGui::RemoveComponents - Remove components - Видалити компоненти + Remove components + Видалити компоненти - Select - Вибрати + Select + Вибрати - Select whole component - Вибрати всі компоненти + Select whole component + Вибрати всі компоненти - Pick triangle - Вибрати трикутник + Pick triangle + Вибрати трикутник - < faces than - < faces than + < faces than + < faces than - Region - Область + Region + Область - Components - Компоненти + Components + Компоненти - All - Все + All + Все - Deselect - Зняти виділення + Deselect + Зняти виділення - Deselect whole component - Зняти виділення з усіх компонентів + Deselect whole component + Зняти виділення з усіх компонентів - > faces than - > faces than + > faces than + > faces than - Region options - Параметри області + Region options + Параметри області - Respect only triangles with normals facing screen - Поважати лише трикутники з нормалями на передньому плані + Respect only triangles with normals facing screen + Поважати лише трикутники з нормалями на передньому плані - Respect only visible triangles - Поважати лише видимі трикутники + Respect only visible triangles + Поважати лише видимі трикутники - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + Циліндр + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + Сфера + + + MeshGui::TaskRemoveComponents - Delete - Видалити + Delete + Видалити - Invert - Інвертувати + Invert + Інвертувати - - + + QDockWidget - Evaluate & Repair Mesh - Evaluate & Repair Mesh + Evaluate & Repair Mesh + Evaluate & Repair Mesh - - + + QObject - Import mesh - Імпорт сітки + Import mesh + Імпорт сітки - Export mesh - Експорт сітки + Export mesh + Експорт сітки - Solid Mesh - Суцільна сітка + Solid Mesh + Суцільна сітка - Boundings - Boundings + Boundings + Boundings - Fill holes - Заповнити отвори + Fill holes + Заповнити отвори - Fill holes with maximum number of edges: - Заповнити отвори з максимальною кількістю ребер: + Fill holes with maximum number of edges: + Заповнити отвори з максимальною кількістю ребер: - Binary STL (*.stl) - Двійкові STL (*.stl) + Binary STL (*.stl) + Двійкові STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - Двійкова сітка (*.bms) + Binary Mesh (*.bms) + Двійкова сітка (*.bms) - Alias Mesh (*.obj) - Псевдоніми Сітки (*.obj) + Alias Mesh (*.obj) + Псевдоніми Сітки (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - Всі файли (*.*) + All Files (*.*) + Всі файли (*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - Стиснутий VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + Стиснутий VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Модуль Python def (*.py) + Python module def (*.py) + Модуль Python def (*.py) - Meshing Tolerance - Відхилення сітки + Meshing Tolerance + Відхилення сітки - Enter tolerance for meshing geometry: - Введіть відхилення для геометрії сітки: + Enter tolerance for meshing geometry: + Введіть відхилення для геометрії сітки: - The mesh '%1' is a solid. - Сітка '%1' є суцільною. + The mesh '%1' is a solid. + Сітка '%1' є суцільною. - The mesh '%1' is not a solid. - Сітка '%1' не суцільна. + The mesh '%1' is not a solid. + Сітка '%1' не суцільна. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Мін=<%1,%2,%3> + Мін=<%1,%2,%3> Макс=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [Точок: %1, Ребер: %2 Граней: %3] + [Points: %1, Edges: %2 Faces: %3] + [Точок: %1, Ребер: %2 Граней: %3] - Leave info mode - Leave info mode + Leave info mode + Leave info mode - Index: %1 - Індекс: %1 + Index: %1 + Індекс: %1 - Leave hole-filling mode - Leave hole-filling mode + Leave hole-filling mode + Leave hole-filling mode - Leave removal mode - Leave removal mode + Leave removal mode + Leave removal mode - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - Всі файли сіток(мешу) (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + Всі файли сіток(мешу) (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - Stanford Polygon (*.ply) + Stanford Polygon (*.ply) + Stanford Polygon (*.ply) - Object File Format (*.off) - Object File Format (*.off) + Object File Format (*.off) + Object File Format (*.off) - Standford Polygon (*.ply) - Standford Polygon (*.ply) + Standford Polygon (*.ply) + Standford Polygon (*.ply) - Delete selected faces - Знищити обрані грані + Delete selected faces + Знищити обрані грані - Clear selected faces - Очистити обрані грані + Clear selected faces + Очистити обрані грані - Annotation - Анотація + Annotation + Анотація - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - Аналізувати + Analyze + Аналізувати - Boolean - Логічне + Boolean + Логічне - &Meshes - &Сітки(Mesh) + &Meshes + &Сітки(Mesh) - Mesh tools - Інструменти для сітки + Mesh tools + Інструменти для сітки - + diff --git a/src/Mod/Mesh/Gui/Resources/translations/Mesh_zh.ts b/src/Mod/Mesh/Gui/Resources/translations/Mesh_zh.ts index c15222c56..edcc10202 100644 --- a/src/Mod/Mesh/Gui/Resources/translations/Mesh_zh.ts +++ b/src/Mod/Mesh/Gui/Resources/translations/Mesh_zh.ts @@ -1,1123 +1,1204 @@ - - + + CmdMeshAddFacet - Mesh - 网格 + Mesh + 网格 - Add triangle - 增加三角形 + Add triangle + 增加三角形 - Add triangle manually to a mesh - 手动给网格添加三角形 + Add triangle manually to a mesh + 手动给网格添加三角形 - - + + CmdMeshBoundingBox - Mesh - 网格 + Mesh + 网格 - Boundings info... - 边界信息... + Boundings info... + 边界信息... - Shows the boundings of the selected mesh - 显示所选网格的边界 + Shows the boundings of the selected mesh + 显示所选网格的边界 - - + + CmdMeshBuildRegularSolid - Mesh - 网格 + Mesh + 网格 - Regular solid... - 合法实体... + Regular solid... + 合法实体... - Builds a regular solid - 建立合法实体 + Builds a regular solid + 建立合法实体 - - + + CmdMeshDemolding - Interactive demolding direction - 交互式脱模方向 + Interactive demolding direction + 交互式脱模方向 - Mesh - 网格 + Mesh + 网格 - - + + CmdMeshDifference - Mesh - 网格 + Mesh + 网格 - Difference - 差集 + Difference + 差集 - - + + CmdMeshEvaluateFacet - Mesh - 网格 + Mesh + 网格 - Face info - 表面信息 + Face info + 表面信息 - Information about face - 表面信息 + Information about face + 表面信息 - - + + CmdMeshEvaluateSolid - Mesh - 网格 + Mesh + 网格 - Check solid mesh - 检查实体网格 + Check solid mesh + 检查实体网格 - Checks whether the mesh is a solid - 检查网格是否为实体 + Checks whether the mesh is a solid + 检查网格是否为实体 - - + + CmdMeshEvaluation - Mesh - 网格 + Mesh + 网格 - Opens a dialog to analyze and repair a mesh - 打开一个对话框,分析并修复网格 + Opens a dialog to analyze and repair a mesh + 打开一个对话框,分析并修复网格 - Evaluate && Repair mesh... - 检测 && 修复网格... + Evaluate && Repair mesh... + 检测 && 修复网格... - - + + CmdMeshExMakeMesh - Mesh - 网格 + Mesh + 网格 - Make a Box - 创建框 + Make a Box + 创建框 - - + + CmdMeshExMakeTool - Mesh - 网格 + Mesh + 网格 - Make a Tool - 创建工具 + Make a Tool + 创建工具 - - + + CmdMeshExMakeUnion - Mesh - 网格 + Mesh + 网格 - Make Union - 合集 + Make Union + 合集 - - + + CmdMeshExport - Mesh - 网格 + Mesh + 网格 - Export mesh... - 导出网格... + Export mesh... + 导出网格... - Exports a mesh to file - 导出网格到文件 + Exports a mesh to file + 导出网格到文件 - - + + CmdMeshFillInteractiveHole - Mesh - 网格 + Mesh + 网格 - Close hole - 关闭孔 + Close hole + 关闭孔 - Close holes interactively - 交互式关闭孔 + Close holes interactively + 交互式关闭孔 - - + + CmdMeshFillupHoles - Mesh - 网格 + Mesh + 网格 - Fill holes... - 填充孔... + Fill holes... + 填充孔... - Fill holes of the mesh - 填充网格孔 + Fill holes of the mesh + 填充网格孔 - - + + CmdMeshFlipNormals - Mesh - 网格 + Mesh + 网格 - Flip normals - 翻转法线 + Flip normals + 翻转法线 - Flips the normals of the mesh - 翻转网格法线 + Flips the normals of the mesh + 翻转网格法线 - - + + CmdMeshFromGeometry - Mesh - 网格 + Mesh + 网格 - Create mesh from geometry... - 从几何体创建网格... + Create mesh from geometry... + 从几何体创建网格... - Create mesh from the selected geometry - 从选定的几何体创建网格 + Create mesh from the selected geometry + 从选定的几何体创建网格 - - + + CmdMeshHarmonizeNormals - Mesh - 网格 + Mesh + 网格 - Harmonize normals - 统一法线 + Harmonize normals + 统一法线 - Harmonizes the normals of the mesh - 平滑网格法线 + Harmonizes the normals of the mesh + 平滑网格法线 - - + + CmdMeshImport - Mesh - 网格 + Mesh + 网格 - Import mesh... - 导入网格... + Import mesh... + 导入网格... - Imports a mesh from file - 从文件中导入网格 + Imports a mesh from file + 从文件中导入网格 - - + + CmdMeshIntersection - Mesh - 网格 + Mesh + 网格 - Intersection - 交集 + Intersection + 交集 - - + + CmdMeshPolyCut - Mesh - 网格 + Mesh + 网格 - Cut mesh - 切割网格 + Cut mesh + 切割网格 - Cuts a mesh with a picked polygon - 使用多边形切割网格 + Cuts a mesh with a picked polygon + 使用多边形切割网格 - - + + CmdMeshPolySegm - Mesh - 网格 + Mesh + 网格 - Make segment - 创建片段 + Make segment + 创建片段 - Creates a mesh segment - 创建网格 + Creates a mesh segment + 创建网格 - - + + CmdMeshPolySelect - Mesh - 网格 + Mesh + 网格 - Select mesh - 选择网格 + Select mesh + 选择网格 - Select an area of the mesh - 选择网格的一个区域 + Select an area of the mesh + 选择网格的一个区域 - - + + CmdMeshPolySplit - Mesh - 网格 + Mesh + 网格 - Split mesh - 拆分网格 + Split mesh + 拆分网格 - Splits a mesh into two meshes - 拆分成两个网格 + Splits a mesh into two meshes + 拆分成两个网格 - - + + + CmdMeshPolyTrim + + Mesh + 网格 + + + Trim mesh + + + + Trims a mesh with a picked polygon + + + + CmdMeshRemoveCompByHand - Mesh - 网格 + Mesh + 网格 - Remove components by hand... - 手动删除组件... + Remove components by hand... + 手动删除组件... - Mark a component to remove it from the mesh - 标记要从网格中删除组件 + Mark a component to remove it from the mesh + 标记要从网格中删除组件 - - + + CmdMeshRemoveComponents - Mesh - 网格 + Mesh + 网格 - Remove components... - 删除组件... + Remove components... + 删除组件... - Remove topologic independent components from the mesh - 从网格中删除拓扑独立部件 + Remove topologic independent components from the mesh + 从网格中删除拓扑独立部件 - - + + + CmdMeshSegmentation + + Mesh + 网格 + + + Create mesh segments... + + + + Create mesh segments + + + + CmdMeshSmoothing - Mesh - 网格 + Mesh + 网格 - Smooth... - 平滑... + Smooth... + 平滑... - Smooth the selected meshes - 平滑选定的网格 + Smooth the selected meshes + 平滑选定的网格 - - + + CmdMeshToolMesh - Mesh - 网格 + Mesh + 网格 - Segment by tool mesh - 网格工具 + Segment by tool mesh + 网格工具 - Creates a segment from a given tool mesh - 从给定网格工具创建 + Creates a segment from a given tool mesh + 从给定网格工具创建 - - + + CmdMeshTransform - Mesh - 网格 + Mesh + 网格 - Transform mesh - 变换网格 + Transform mesh + 变换网格 - Rotate or move a mesh - 旋转或移动网格 + Rotate or move a mesh + 旋转或移动网格 - - + + CmdMeshUnion - Mesh - 网格 + Mesh + 网格 - Union - 并集 + Union + 并集 - - + + CmdMeshVertexCurvature - Mesh - 网格 + Mesh + 网格 - Calculates the curvature of the vertices of a mesh - 计算网格顶点的曲率 + Calculates the curvature of the vertices of a mesh + 计算网格顶点的曲率 - Curvature plot - 曲率图 + Curvature plot + 曲率图 - - + + CmdMeshVertexCurvatureInfo - Mesh - 网格 + Mesh + 网格 - Curvature info - 曲率信息 + Curvature info + 曲率信息 - Information about curvature - 曲率信息 + Information about curvature + 曲率信息 - - + + MeshGui::DlgEvaluateMesh - &Help - 帮助(&H) + &Help + 帮助(&H) - F1 - F1 + F1 + F1 - &Close - 关闭(&C) + &Close + 关闭(&C) - Alt+C - Alt+C + Alt+C + Alt+C - Mesh information - 网格信息 + Mesh information + 网格信息 - No information - 无信息 + No information + 无信息 - Number of points: - 点数: + Number of points: + 点数: - Number of edges: - 边数: + Number of edges: + 边数: - Refresh - 刷新 + Refresh + 刷新 - Analyze - 分析 + Analyze + 分析 - Repair - 修复 + Repair + 修复 - Orientation - 方向 + Orientation + 方向 - Degenerated faces - 退化的面 + Degenerated faces + 退化的面 - Face indices - 表面指数 + Face indices + 表面指数 - Number of faces: - 面数: + Number of faces: + 面数: - Duplicated faces - 重复面 + Duplicated faces + 重复面 - Duplicated points - 重复点 + Duplicated points + 重复点 - Non-manifolds - 非流形 + Non-manifolds + 非流形 - Self-intersections - 自干涉 + Self-intersections + 自干涉 - All above tests together - 测试以上所有 + All above tests together + 测试以上所有 - Repetitive repair - 重复的修复 + Repetitive repair + 重复的修复 - Evaluate & Repair Mesh - 检测 & 修复网格 + Evaluate & Repair Mesh + 检测 & 修复网格 - Folds on surface - 表面折叠 + Folds on surface + 表面折叠 - - + + MeshGui::DlgEvaluateMeshImp - No information - 无信息 + No information + 无信息 - Invalid neighbour indices - 无相邻指数 + Invalid neighbour indices + 无相邻指数 - Invalid face indices - 无效的面指数 + Invalid face indices + 无效的面指数 - Invalid point indices - 无效点指数 + Invalid point indices + 无效点指数 - Multiple point indices - 多点指数 + Multiple point indices + 多点指数 - Non-manifolds - 非流形 + Non-manifolds + 非流形 - Cannot remove non-manifolds - 不能删除非流形 + Cannot remove non-manifolds + 不能删除非流形 - No selection - 无选择 + No selection + 无选择 - No flipped normals - 无翻转法线 + No flipped normals + 无翻转法线 - %1 flipped normals - %1 翻转法线 + %1 flipped normals + %1 翻转法线 - No non-manifolds - 无非流形 + No non-manifolds + 无非流形 - %1 non-manifolds - 非流形 %1 + %1 non-manifolds + 非流形 %1 - No invalid indices - 没有无效指数 + No invalid indices + 没有无效指数 - No degenerations - 无退化 + No degenerations + 无退化 - %1 degenerated faces - 退化面 %1 + %1 degenerated faces + 退化面 %1 - No duplicated faces - 无重复面 + No duplicated faces + 无重复面 - %1 duplicated faces - 重复面 %1 + %1 duplicated faces + 重复面 %1 - No duplicated points - 无重复点 + No duplicated points + 无重复点 - Duplicated points - 重复点 + Duplicated points + 重复点 - Orientation - 方向 + Orientation + 方向 - Indices - 指数 + Indices + 指数 - Degenerations - 退化 + Degenerations + 退化 - Duplicated faces - 重复面 + Duplicated faces + 重复面 - No self-intersections - 无自干涉 + No self-intersections + 无自干涉 - Self-intersections - 自干涉 + Self-intersections + 自干涉 - Mesh repair - 修复网格 + Mesh repair + 修复网格 - Flipped normals found - 发现翻转法线 + Flipped normals found + 发现翻转法线 - Check failed due to folds on the surface. + Check failed due to folds on the surface. Please run the command to repair folds first - 由于表面折叠测试失败. + 由于表面折叠测试失败. 请先运行命令修复折叠 - No folds on surface - 面无折叠 + No folds on surface + 面无折叠 - %1 folds on surface - 面折叠 %1 + %1 folds on surface + 面折叠 %1 - Folds - 折叠 + Folds + 折叠 - - + + MeshGui::DlgRegularSolid - Regular Solid - 合法实体 + Regular Solid + 合法实体 - &Create - 创建(&C) + &Create + 创建(&C) - Alt+C - Alt+C + Alt+C + Alt+C - Cl&ose - 关闭(&O) + Cl&ose + 关闭(&O) - Alt+O - Alt+O + Alt+O + Alt+O - Solid: - 实体: + Solid: + 实体: - Cube - 立方体 + Cube + 立方体 - Cylinder - 圆柱体 + Cylinder + 圆柱体 - Cone - 圆锥体 + Cone + 圆锥体 - Sphere - 球体 + Sphere + 球体 - Ellipsoid - 椭圆体 + Ellipsoid + 椭圆体 - Torus - 圆环 + Torus + 圆环 - Height: - 高度: + Height: + 高度: - Length: - 长度: + Length: + 长度: - Width: - 宽度: + Width: + 宽度: - Radius: - 半径: + Radius: + 半径: - Closed - 关闭 + Closed + 关闭 - Sampling: - 采样: + Sampling: + 采样: - Edge length: - 边长: + Edge length: + 边长: - Radius 1: - 半径 1: + Radius 1: + 半径 1: - Radius 2: - 半径 2: + Radius 2: + 半径 2: - - + + MeshGui::DlgRegularSolidImp - Create %1 - 创建 %1 + Create %1 + 创建 %1 - No active document - 无活动文档 + No active document + 无活动文档 - - + + MeshGui::DlgSettingsMeshView - Mesh view - 网格视图 + Mesh view + 网格视图 - Two-side rendering - 双侧呈现 + Two-side rendering + 双侧呈现 - Backface color - 背面颜色 + Backface color + 背面颜色 - Smoothing - 平滑 + Smoothing + 平滑 - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> - <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 这是最小的角度之间两面法线获得旨在做平底纹。</p><p style="margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 如果之间的两个邻近表面法线的角度小于皱的角度脸上将周围常见的边缘 smoothshaded</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the smallest angle between two faces where normals get calculated to do flat shading.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If the angle between the normals of two neighbouring faces is less than the crease angle, the faces will be smoothshaded around their common edge.</p></body></html> + <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 这是最小的角度之间两面法线获得旨在做平底纹。</p><p style="margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 如果之间的两个邻近表面法线的角度小于皱的角度脸上将周围常见的边缘 smoothshaded</p></body></html> - Crease angle - 抗皱角 + Crease angle + 抗皱角 - <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> - <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;"> 平底纹/海防底纹</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 定义外观的表面。</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 不定义每个顶点单面阴影与表面法线,将导致不真实的外观的曲面时,如果使用多面阴影会得到更平滑的外观。</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 如果设置此选项则使用多面阴影,否则使用单面阴影。</p></body></html> + <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;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defines the appearance of surfaces.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If this option is set Phong shading is used, if it is unset flat shading is used.</p></body></html> + <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;"> 平底纹/海防底纹</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 定义外观的表面。</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 不定义每个顶点单面阴影与表面法线,将导致不真实的外观的曲面时,如果使用多面阴影会得到更平滑的外观。</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> 如果设置此选项则使用多面阴影,否则使用单面阴影。</p></body></html> - Define normal per vertex - 定义每个常规顶点 + Define normal per vertex + 定义每个常规顶点 + + + ° + ° - ° - ° + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">暗示</span> </p><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-style:italic;">Phong光照</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">同时确定每个面的法线称为</span>平阴影<span style=" font-style:normal;">。</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">暗示</span> </p><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-style:italic;">Phong光照</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">同时确定每个面的法线称为</span>平阴影<span style=" font-style:normal;">。</span> </p></body></html> + Default appearance for new meshes + 新网格默认外观 - Default appearance for new meshes - 新网格默认外观 + Default line color + 默认线条颜色 - Default line color - 默认线条颜色 + Mesh transparency + 网格透明度 - Mesh transparency - 网格透明度 + Default mesh color + 默认网格颜色 - Default mesh color - 默认网格颜色 + Show bounding-box for highlighted or selected meshes + 显示高亮或选中网格的边界框 - Show bounding-box for highlighted or selected meshes - 显示高亮或选中网格的边界框 + Line transparency + 线条透明度 - - Line transparency - 线条透明度 - - - + + MeshGui::DlgSmoothing - Smoothing - 平滑 + Smoothing + 平滑 - Method - 方法 + Method + 方法 - Taubin - Taubin + Taubin + Taubin - Laplace - 拉普拉斯 + Laplace + 拉普拉斯 - Parameter - 参数 + Parameter + 参数 - Iterations: - 迭代: + Iterations: + 迭代: - Lambda: - Lambda: + Lambda: + Lambda: - Mu: - Mu: + Mu: + Mu: - - + + MeshGui::MeshFaceAddition - Add triangle - 增加三角形 + Add triangle + 增加三角形 - Flip normal - 翻转法线 + Flip normal + 翻转法线 - Clear - 清除 + Clear + 清除 - Finish - 完成 + Finish + 完成 - - + + MeshGui::RemoveComponents - Remove components - 删除组件 + Remove components + 删除组件 - Select - 选择 + Select + 选择 - Select whole component - 选择整个组件 + Select whole component + 选择整个组件 - Pick triangle - 拾取三角形 + Pick triangle + 拾取三角形 - < faces than - < 面 + < faces than + < 面 - Region - 区域 + Region + 区域 - Components - 组件 + Components + 组件 - All - 全部 + All + 全部 - Deselect - 取消选定 + Deselect + 取消选定 - Deselect whole component - 取消选择整个组件 + Deselect whole component + 取消选择整个组件 - > faces than - >面 + > faces than + >面 - Region options - 区域选项 + Region options + 区域选项 - Respect only triangles with normals facing screen - 仅考虑屏幕常规法线三角形 + Respect only triangles with normals facing screen + 仅考虑屏幕常规法线三角形 - Respect only visible triangles - 仅考虑可见三角形 + Respect only visible triangles + 仅考虑可见三角形 - - + + + MeshGui::Segmentation + + Mesh segmentation + + + + Smooth mesh + + + + Plane + + + + Tolerance + + + + Minumum number of faces + + + + Cylinder + 圆柱体 + + + Radius + + + + Tolerance (Flat) + + + + Tolerance (Curved) + + + + Minimum number of faces + + + + Sphere + 球体 + + + MeshGui::TaskRemoveComponents - Delete - 删除 + Delete + 删除 - Invert - 反转 + Invert + 反转 - - + + QDockWidget - Evaluate & Repair Mesh - 检测 & 修复网格 + Evaluate & Repair Mesh + 检测 & 修复网格 - - + + QObject - Import mesh - 导入网格 + Import mesh + 导入网格 - Export mesh - 导出网格 + Export mesh + 导出网格 - Solid Mesh - 实体网格 + Solid Mesh + 实体网格 - Boundings - 边界 + Boundings + 边界 - Fill holes - 填充孔 + Fill holes + 填充孔 - Fill holes with maximum number of edges: - 使用最大边数填充孔: + Fill holes with maximum number of edges: + 使用最大边数填充孔: - Binary STL (*.stl) - 二进制 STL (*.stl) + Binary STL (*.stl) + 二进制 STL (*.stl) - ASCII STL (*.ast) - ASCII STL (*.ast) + ASCII STL (*.ast) + ASCII STL (*.ast) - Binary Mesh (*.bms) - 二进制网格 (*.bms) + Binary Mesh (*.bms) + 二进制网格 (*.bms) - Alias Mesh (*.obj) - Alias网格 (*.obj) + Alias Mesh (*.obj) + Alias网格 (*.obj) - Inventor V2.1 ascii (*.iv) - Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) + Inventor V2.1 ascii (*.iv) - All Files (*.*) - 所有文件(*.*) + All Files (*.*) + 所有文件(*.*) - ASCII STL (*.stl) - ASCII STL (*.stl) + ASCII STL (*.stl) + ASCII STL (*.stl) - VRML V2.0 (*.wrl *.vrml) - VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) + VRML V2.0 (*.wrl *.vrml) - Compressed VRML 2.0 (*.wrz) - 压缩 VRML 2.0 (*.wrz) + Compressed VRML 2.0 (*.wrz) + 压缩 VRML 2.0 (*.wrz) - Nastran (*.nas *.bdf) - Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) + Nastran (*.nas *.bdf) - Python module def (*.py) - Python 模块定义 (*.py) + Python module def (*.py) + Python 模块定义 (*.py) - Meshing Tolerance - 网格化公差 + Meshing Tolerance + 网格化公差 - Enter tolerance for meshing geometry: - 输入网格化几何体公差: + Enter tolerance for meshing geometry: + 输入网格化几何体公差: - The mesh '%1' is a solid. - 网格'%1'是实体. + The mesh '%1' is a solid. + 网格'%1'是实体. - The mesh '%1' is not a solid. - 网格 '%1' 不是实体. + The mesh '%1' is not a solid. + 网格 '%1' 不是实体. - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - Min=<%1,%2,%3> + Min=<%1,%2,%3> Max=<%4,%5,%6> - [Points: %1, Edges: %2 Faces: %3] - [点: %1, 边: %2 面: %3] + [Points: %1, Edges: %2 Faces: %3] + [点: %1, 边: %2 面: %3] - Leave info mode - 退出查询模式 + Leave info mode + 退出查询模式 - Index: %1 - 索引: %1 + Index: %1 + 索引: %1 - Leave hole-filling mode - 退出孔填充模式 + Leave hole-filling mode + 退出孔填充模式 - Leave removal mode - 退出删除模式 + Leave removal mode + 退出删除模式 - All Mesh Files (*.stl *.ast *.bms *.obj *.ply) - 所有网格文件 (*.stl *.ast *.bms *.obj *.ply) + All Mesh Files (*.stl *.ast *.bms *.obj *.ply) + 所有网格文件 (*.stl *.ast *.bms *.obj *.ply) - Stanford Polygon (*.ply) - 斯坦福多边形 (*.ply) + Stanford Polygon (*.ply) + 斯坦福多边形 (*.ply) - Object File Format (*.off) - 对象文件格式 (*.off) + Object File Format (*.off) + 对象文件格式 (*.off) - Standford Polygon (*.ply) - 斯坦福多边形 (*.ply) + Standford Polygon (*.ply) + 斯坦福多边形 (*.ply) - Delete selected faces - 删除选定的面 + Delete selected faces + 删除选定的面 - Clear selected faces - 清除选中的面 + Clear selected faces + 清除选中的面 - Annotation - 注释 + Annotation + 注释 - - + + All Mesh Files (*.stl *.ast *.bms *.obj *.off *.ply) + + + + Workbench - Analyze - 分析 + Analyze + 分析 - Boolean - 布尔值 + Boolean + 布尔值 - &Meshes - 网格(&M) + &Meshes + 网格(&M) - Mesh tools - 网格工具 + Mesh tools + 网格工具 - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_af.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_af.ts index 61658705c..420d92965 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_af.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_af.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Maas + + Mesh + Maas - Create mesh from shape... - Skep 'n maas van die vorm ... + + Create mesh from shape... + Skep 'n maas van die vorm ... - Tessellate shape - Tesselleer die vorm + + Tessellate shape + Tesselleer die vorm - - + + MeshPartGui::Tessellation - - Tessellation - Tessellasie + + Tessellation + Tessellasie - Shapes - Vorms + + Shapes + Vorms - Settings - Instellings + + Settings + Instellings - Surface deviation: - Oppervlakafwyking: + + Surface deviation: + Oppervlakafwyking: - Max. edge length: - Maks kantlengte: + + Max. edge length: + Maks kantlengte: - - Select a shape for meshing, first. - Kies eers 'n vorm om te omskep in 'n maas. + + Select a shape for meshing, first. + Kies eers 'n vorm om te omskep in 'n maas. - No such document '%1'. - Dokument bestaan nie '%1'. + + No such document '%1'. + Dokument bestaan nie '%1'. - - + + Workbench - - MeshPart - MaasOnderdeel + + MeshPart + MaasOnderdeel - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_de.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_de.ts index c0bedcc3a..72cd685a5 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_de.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_de.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Netz + + Mesh + Netz - Create mesh from shape... - Netz aus Form erstellen... + + Create mesh from shape... + Netz aus Form erstellen... - Tessellate shape - Form tessellieren + + Tessellate shape + Form tessellieren - - + + MeshPartGui::Tessellation - - Tessellation - Tessellierung + + Tessellation + Tessellierung - Shapes - Formen + + Shapes + Formen - Settings - Einstellungen + + Settings + Einstellungen - Surface deviation: - Flächenabweichung: + + Surface deviation: + Flächenabweichung: - Max. edge length: - Max. Kantenlänge: + + Max. edge length: + Max. Kantenlänge: - - Select a shape for meshing, first. - Wählen Sie zuerst eine Form für die Vernetzung. + + Select a shape for meshing, first. + Wählen Sie zuerst eine Form für die Vernetzung. - No such document '%1'. - Es gibt kein Dokument "%1". + + No such document '%1'. + Es gibt kein Dokument "%1". - - + + Workbench - - MeshPart - Netz-Formteil + + MeshPart + Netz-Formteil - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_es.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_es.ts index c2ce81210..2a5f375e0 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_es.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_es.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Malla + + Mesh + Malla - Create mesh from shape... - Crear malla de forma ... + + Create mesh from shape... + Crear malla de forma ... - Tessellate shape - Teselar forma + + Tessellate shape + Teselar forma - - + + MeshPartGui::Tessellation - - Tessellation - Teselado + + Tessellation + Teselado - Shapes - Formas + + Shapes + Formas - Settings - Opciones + + Settings + Opciones - Surface deviation: - Superficie de desviación: + + Surface deviation: + Superficie de desviación: - Max. edge length: - Longitud máx. de la arista: + + Max. edge length: + Longitud máx. de la arista: - - Select a shape for meshing, first. - Seleccione primero una forma para el mallado. + + Select a shape for meshing, first. + Seleccione primero una forma para el mallado. - No such document '%1'. - '%1' No es un documento. + + No such document '%1'. + '%1' No es un documento. - - + + Workbench - - MeshPart - MeshPart + + MeshPart + MeshPart - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fi.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fi.ts index 6d118768c..0dc7a09ca 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fi.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fi.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Mesh + + Mesh + Mesh - Create mesh from shape... - Create mesh from shape... + + Create mesh from shape... + Create mesh from shape... - Tessellate shape - Tessellate shape + + Tessellate shape + Tessellate shape - - + + MeshPartGui::Tessellation - - Tessellation - Tessellation + + Tessellation + Tessellation - Shapes - Shapes + + Shapes + Shapes - Settings - Settings + + Settings + Settings - Surface deviation: - Surface deviation: + + Surface deviation: + Surface deviation: - Max. edge length: - Max. edge length: + + Max. edge length: + Max. edge length: - - Select a shape for meshing, first. - Select a shape for meshing, first. + + Select a shape for meshing, first. + Select a shape for meshing, first. - No such document '%1'. - No such document '%1'. + + No such document '%1'. + No such document '%1'. - - + + Workbench - - MeshPart - VerkotaOsa + + MeshPart + VerkotaOsa - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fr.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fr.ts index ecdf153b1..f2648826d 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fr.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_fr.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Maillage + + Mesh + Maillage - Create mesh from shape... - Créer un maillage à partir d'une forme... + + Create mesh from shape... + Créer un maillage à partir d'une forme... - Tessellate shape - Tessellation de la forme + + Tessellate shape + Tessellation de la forme - - + + MeshPartGui::Tessellation - - Tessellation - Tessellation + + Tessellation + Tessellation - Shapes - Formes + + Shapes + Formes - Settings - Réglages + + Settings + Réglages - Surface deviation: - Déviation de surface : + + Surface deviation: + Déviation de surface : - Max. edge length: - Longueur maximale d'arête : + + Max. edge length: + Longueur maximale d'arête : - - Select a shape for meshing, first. - Sélectionner d'abord une forme pour le maillage. + + Select a shape for meshing, first. + Sélectionner d'abord une forme pour le maillage. - No such document '%1'. - Aucun document '%1'. + + No such document '%1'. + Aucun document '%1'. - - + + Workbench - - MeshPart - Maillage + + MeshPart + Maillage - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hr.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hr.ts index 979e96929..f39f3fefb 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hr.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hr.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Mreža + + Mesh + Mreža - Create mesh from shape... - Stvori mrežu od oblika ... + + Create mesh from shape... + Stvori mrežu od oblika ... - Tessellate shape - Pretvori oblik u mrežu + + Tessellate shape + Pretvori oblik u mrežu - - + + MeshPartGui::Tessellation - - Tessellation - Mozaik + + Tessellation + Mozaik - Shapes - Oblici + + Shapes + Oblici - Settings - Postavke + + Settings + Postavke - Surface deviation: - Odstupanje površine: + + Surface deviation: + Odstupanje površine: - Max. edge length: - Max. duljina ruba: + + Max. edge length: + Max. duljina ruba: - - Select a shape for meshing, first. - Prvo daberite oblik za umrežavanje. + + Select a shape for meshing, first. + Prvo daberite oblik za umrežavanje. - No such document '%1'. - Ne postoji takav dokument '%1'. + + No such document '%1'. + Ne postoji takav dokument '%1'. - - + + Workbench - - MeshPart - Mrežasti Oblik + + MeshPart + Mrežasti Oblik - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hu.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hu.ts index 5432b3269..85f64b7ab 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hu.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_hu.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Hálós test + + Mesh + Hálós test - Create mesh from shape... - Hálós test létrehozása alakzatból + + Create mesh from shape... + Hálós test létrehozása alakzatból - Tessellate shape - Mozaik alakja + + Tessellate shape + Mozaik alakja - - + + MeshPartGui::Tessellation - - Tessellation - Mozaik + + Tessellation + Mozaik - Shapes - Alakzatok + + Shapes + Alakzatok - Settings - Beállítások + + Settings + Beállítások - Surface deviation: - Felületi eltérés: + + Surface deviation: + Felületi eltérés: - Max. edge length: - Max. él hossz: + + Max. edge length: + Max. él hossz: - - Select a shape for meshing, first. - Válassza ki a formát kapcsolás előtt. + + Select a shape for meshing, first. + Válassza ki a formát kapcsolás előtt. - No such document '%1'. - Nincs ilyen dokumentum '%1'. + + No such document '%1'. + Nincs ilyen dokumentum '%1'. - - + + Workbench - - MeshPart - RészekKapcsolása + + MeshPart + RészekKapcsolása - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_it.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_it.ts index dc355719c..c09c23fd8 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_it.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_it.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Mesh + + Mesh + Mesh - Create mesh from shape... - Crea una mesh da una forma ... + + Create mesh from shape... + Crea una mesh da una forma ... - Tessellate shape - Forma della tassellazione + + Tessellate shape + Forma della tassellazione - - + + MeshPartGui::Tessellation - - Tessellation - Tassellazione + + Tessellation + Tassellazione - Shapes - Forme + + Shapes + Forme - Settings - Impostazioni + + Settings + Impostazioni - Surface deviation: - Deviazione di superficie: + + Surface deviation: + Deviazione di superficie: - Max. edge length: - Massima lunghezza del bordo: + + Max. edge length: + Massima lunghezza del bordo: - - Select a shape for meshing, first. - Selezionare prima una forma per il meshing. + + Select a shape for meshing, first. + Selezionare prima una forma per il meshing. - No such document '%1'. - Non esiste nessun documento '%1'. + + No such document '%1'. + Non esiste nessun documento '%1'. - - + + Workbench - - MeshPart - MeshPart + + MeshPart + MeshPart - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ja.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ja.ts index 1fe3c908d..f3b7f272b 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ja.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ja.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Mesh + + Mesh + Mesh - Create mesh from shape... - Create mesh from shape... + + Create mesh from shape... + Create mesh from shape... - Tessellate shape - Tessellate shape + + Tessellate shape + Tessellate shape - - + + MeshPartGui::Tessellation - - Tessellation - Tessellation + + Tessellation + Tessellation - Shapes - Shapes + + Shapes + Shapes - Settings - Settings + + Settings + Settings - Surface deviation: - Surface deviation: + + Surface deviation: + Surface deviation: - Max. edge length: - Max. edge length: + + Max. edge length: + Max. edge length: - - Select a shape for meshing, first. - Select a shape for meshing, first. + + Select a shape for meshing, first. + Select a shape for meshing, first. - No such document '%1'. - No such document '%1'. + + No such document '%1'. + No such document '%1'. - - + + Workbench - - MeshPart - MeshPart + + MeshPart + MeshPart - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_nl.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_nl.ts index 0a6f49b80..d605a0d1d 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_nl.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_nl.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Mesh + + Mesh + Mesh - Create mesh from shape... - Create mesh from shape... + + Create mesh from shape... + Create mesh from shape... - Tessellate shape - Tessellate shape + + Tessellate shape + Tessellate shape - - + + MeshPartGui::Tessellation - - Tessellation - Tessellation + + Tessellation + Tessellation - Shapes - Vormen + + Shapes + Vormen - Settings - Instellingen + + Settings + Instellingen - Surface deviation: - Oppervlakte-afwijking: + + Surface deviation: + Oppervlakte-afwijking: - Max. edge length: - Max. randlengte: + + Max. edge length: + Max. randlengte: - - Select a shape for meshing, first. - Selecteer eerst een vorm voor rasteren + + Select a shape for meshing, first. + Selecteer eerst een vorm voor rasteren - No such document '%1'. - Geen dergelijk document '%1'. + + No such document '%1'. + Geen dergelijk document '%1'. - - + + Workbench - - MeshPart - Net-onderdeel + + MeshPart + Net-onderdeel - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_no.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_no.ts index b0bacbeea..d57d38dbe 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_no.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_no.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Nett + + Mesh + Nett - Create mesh from shape... - Lag nett fra figur... + + Create mesh from shape... + Lag nett fra figur... - Tessellate shape - Tessellér figur + + Tessellate shape + Tessellér figur - - + + MeshPartGui::Tessellation - - Tessellation - Tessellasjon + + Tessellation + Tessellasjon - Shapes - Figurer + + Shapes + Figurer - Settings - Innstillinger + + Settings + Innstillinger - Surface deviation: - Overflateavvik: + + Surface deviation: + Overflateavvik: - Max. edge length: - Maks kantlengde: + + Max. edge length: + Maks kantlengde: - - Select a shape for meshing, first. - Velg en figur å gjøre om til nett først. + + Select a shape for meshing, first. + Velg en figur å gjøre om til nett først. - No such document '%1'. - Ingen slike dokument '%1'. + + No such document '%1'. + Ingen slike dokument '%1'. - - + + Workbench - - MeshPart - Nettkomponent + + MeshPart + Nettkomponent - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pl.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pl.ts index d3f1194a7..64805dbca 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pl.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pl.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - siatka + + Mesh + siatka - Create mesh from shape... - Utwórz siatkę z obwiedni... + + Create mesh from shape... + Utwórz siatkę z obwiedni... - Tessellate shape - Tesselacja obwiedni + + Tessellate shape + Tesselacja obwiedni - - + + MeshPartGui::Tessellation - - Tessellation - Tesselacja + + Tessellation + Tesselacja - Shapes - Kształty + + Shapes + Kształty - Settings - Ustawienia + + Settings + Ustawienia - Surface deviation: - Odchylenie powierzchni + + Surface deviation: + Odchylenie powierzchni - Max. edge length: - Max. Długość krawędzi: + + Max. edge length: + Max. Długość krawędzi: - - Select a shape for meshing, first. - Zaznacz najpierw obwiednię w celu utworzenia siatki + + Select a shape for meshing, first. + Zaznacz najpierw obwiednię w celu utworzenia siatki - No such document '%1'. - Brak dokumentu '%1'. + + No such document '%1'. + Brak dokumentu '%1'. - - + + Workbench - - MeshPart - Składnik_Siatki + + MeshPart + Składnik_Siatki - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pt.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pt.ts index f5eb0a81a..572ac32de 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pt.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_pt.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Malha + + Mesh + Malha - Create mesh from shape... - Criar malha a partir de uma forma... + + Create mesh from shape... + Criar malha a partir de uma forma... - Tessellate shape - Paginar forma + + Tessellate shape + Paginar forma - - + + MeshPartGui::Tessellation - - Tessellation - Paginação + + Tessellation + Paginação - Shapes - Formas + + Shapes + Formas - Settings - Configurações + + Settings + Configurações - Surface deviation: - Desvio de superfície: + + Surface deviation: + Desvio de superfície: - Max. edge length: - Comprimento máximo da aresta: + + Max. edge length: + Comprimento máximo da aresta: - - Select a shape for meshing, first. - Selecione primeiro uma forma para malhagem. + + Select a shape for meshing, first. + Selecione primeiro uma forma para malhagem. - No such document '%1'. - Não há tal documento '%1'. + + No such document '%1'. + Não há tal documento '%1'. - - + + Workbench - - MeshPart - MeshPart + + MeshPart + MeshPart - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ru.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ru.ts index c65b7918c..bbd9421a2 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ru.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_ru.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Сетка + + Mesh + Сетка - Create mesh from shape... - Создайте сетку из фигуры... + + Create mesh from shape... + Создайте сетку из фигуры... - Tessellate shape - Мозаика из фигуры + + Tessellate shape + Мозаика из фигуры - - + + MeshPartGui::Tessellation - - Tessellation - Мозаика + + Tessellation + Мозаика - Shapes - Фигуры + + Shapes + Фигуры - Settings - Настройки + + Settings + Настройки - Surface deviation: - Отклонение поверхности: + + Surface deviation: + Отклонение поверхности: - Max. edge length: - Макс. длина ребра: + + Max. edge length: + Макс. длина ребра: - - Select a shape for meshing, first. - Сначала выберите форму для слияния. + + Select a shape for meshing, first. + Сначала выберите форму для слияния. - No such document '%1'. - Нет такого документа '%1'. + + No such document '%1'. + Нет такого документа '%1'. - - + + Workbench - - MeshPart - Деталь Сетки + + MeshPart + Деталь Сетки - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_se.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_se.ts index a97fbadb7..d234e6259 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_se.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_se.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Nät + + Mesh + Nät - Create mesh from shape... - Skapa nät från form... + + Create mesh from shape... + Skapa nät från form... - Tessellate shape - Tessellera form + + Tessellate shape + Tessellera form - - + + MeshPartGui::Tessellation - - Tessellation - Tessellering + + Tessellation + Tessellering - Shapes - Former + + Shapes + Former - Settings - Inställningar + + Settings + Inställningar - Surface deviation: - Ytavvikelse: + + Surface deviation: + Ytavvikelse: - Max. edge length: - Max. kantlängd: + + Max. edge length: + Max. kantlängd: - - Select a shape for meshing, first. - Markera en form för nät, först. + + Select a shape for meshing, first. + Markera en form för nät, först. - No such document '%1'. - Inget sådant dokument '%1'. + + No such document '%1'. + Inget sådant dokument '%1'. - - + + Workbench - - MeshPart - NätDel + + MeshPart + NätDel - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_uk.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_uk.ts index ce49b26e7..196de66c6 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_uk.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_uk.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - Сітка + + Mesh + Сітка - Create mesh from shape... - Створення сітки з форми ... + + Create mesh from shape... + Створення сітки з форми ... - Tessellate shape - Теселяція форми + + Tessellate shape + Теселяція форми - - + + MeshPartGui::Tessellation - - Tessellation - Теселяція + + Tessellation + Теселяція - Shapes - Форми + + Shapes + Форми - Settings - Параметри + + Settings + Параметри - Surface deviation: - Поверхня відхилення: + + Surface deviation: + Поверхня відхилення: - Max. edge length: - Макс. довжина ребра: + + Max. edge length: + Макс. довжина ребра: - - Select a shape for meshing, first. - Спочатку оберіть форму для злиття. + + Select a shape for meshing, first. + Спочатку оберіть форму для злиття. - No such document '%1'. - Документ '%1' не знайдено. + + No such document '%1'. + Документ '%1' не знайдено. - - + + Workbench - - MeshPart - Частина Сітки + + MeshPart + Частина Сітки - + diff --git a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_zh.ts b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_zh.ts index c5551c7c5..89439185c 100644 --- a/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_zh.ts +++ b/src/Mod/MeshPart/Gui/Resources/translations/MeshPart_zh.ts @@ -1,61 +1,68 @@ - - + + CmdMeshPartMesher - - Mesh - 网格 + + Mesh + 网格 - Create mesh from shape... - 从形体创建网格... + + Create mesh from shape... + 从形体创建网格... - Tessellate shape - 细分形状 + + Tessellate shape + 细分形状 - - + + MeshPartGui::Tessellation - - Tessellation - 曲面细分 + + Tessellation + 曲面细分 - Shapes - 形状 + + Shapes + 形状 - Settings - 设置 + + Settings + 设置 - Surface deviation: - 表面偏差: + + Surface deviation: + 表面偏差: - Max. edge length: - 最大边长: + + Max. edge length: + 最大边长: - - Select a shape for meshing, first. - 请先选择需要网格化的形状. + + Select a shape for meshing, first. + 请先选择需要网格化的形状. - No such document '%1'. - 无此文档 '%1'。 + + No such document '%1'. + 无此文档 '%1'。 - - + + Workbench - - MeshPart - 网格零件 + + MeshPart + 网格零件 - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_af.ts b/src/Mod/Part/Gui/Resources/translations/Part_af.ts index 7e034fc77..147699943 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_af.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_af.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Blokbeskrywing + + Block definition + Blokbeskrywing - First limit - Eerste beperking + + First limit + Eerste beperking - Type: - Soort: + + + Type: + Soort: - mm - mm + + + mm + mm - Length: - Lengte: + + + Length: + Lengte: - Dimension - Dimensie + + + Dimension + Dimensie - Up to next - Op na die volgende + + + Up to next + Op na die volgende - Up to last - Op na die laaste + + + Up to last + Op na die laaste - Up to plane - Op na die tekenvlak + + + Up to plane + Op na die tekenvlak - Up to face - Op na die voorwerpvlak + + + Up to face + Op na die voorwerpvlak - Limit: - Beperking: + + + Limit: + Beperking: - No selection - Geen keuse + + + + + No selection + Geen keuse - Profile - Profiel + + Profile + Profiel - Selection: - Keuse: + + Selection: + Keuse: - Reverse - Keer om + + Reverse + Keer om - Both sides - Beide kante + + Both sides + Beide kante - Second limit - Tweede beperking + + Second limit + Tweede beperking - Direction - Rigting + + Direction + Rigting - Perpendicular to sketch - Loodreg op die skets + + Perpendicular to sketch + Loodreg op die skets - Reference - Verwysing + + Reference + Verwysing - Apply - Pas toe + + Apply + Pas toe - Cancel - Kanselleer + + Cancel + Kanselleer - OK - Goed + + OK + Goed - - + + CmdPartBoolean - - Part - Onderdeel + + Part + Onderdeel - Boolean... - Boolese... + + Boolean... + Boolese... - Run a boolean operation with two shapes selected - Begin 'n booleaanse verwerking met twee gekose vorms + + Run a boolean operation with two shapes selected + Begin 'n booleaanse verwerking met twee gekose vorms - - + + CmdPartBox - - Part - Onderdeel + + Part + Onderdeel - Box - Boks + + Box + Boks - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - Onderdeel + + Part + Onderdeel - Box fix 1 - Boksfiksering 1 + + Box fix 1 + Boksfiksering 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - Onderdeel + + Part + Onderdeel - Box fix 2 - Boksfiksering 2 + + Box fix 2 + Boksfiksering 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - Onderdeel + + Part + Onderdeel - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + Onderdeel + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Onderdeel + + Part + Onderdeel - Intersection - Snyding + + Intersection + Snyding - Make an intersection of two shapes - Make an intersection of two shapes + + Make an intersection of two shapes + Make an intersection of two shapes - - + + CmdPartCone - - Part - Onderdeel + + Part + Onderdeel - Cone - Keël + + Cone + Keël - Create a cone solid - Create a cone solid + + Create a cone solid + Create a cone solid - - + + CmdPartCrossSections - - Part - Onderdeel + + Part + Onderdeel - Cross-sections... - Deursnitte... + + Cross-sections... + Deursnitte... - Cross-sections - Deursnitte + + Cross-sections + Deursnitte - - + + CmdPartCut - Part - Onderdeel + + Part + Onderdeel - Cut - Knip + + Cut + Knip - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - Onderdeel + + Part + Onderdeel - Create a Cylinder - Skep 'n silinder + + Create a Cylinder + Skep 'n silinder - Cylinder - Silinder + + Cylinder + Silinder - - + + CmdPartExport - - Part - Onderdeel + + Part + Onderdeel - Export CAD... - Export CAD... + + Export CAD... + Export CAD... - Exports to a CAD file - Exports to a CAD file + + Exports to a CAD file + Exports to a CAD file - - + + CmdPartExtrude - Part - Onderdeel + + Part + Onderdeel - Extrude... - Strek... + + Extrude... + Strek... - Extrude a selected sketch - Strek 'n gekose skets + + Extrude a selected sketch + Strek 'n gekose skets - - + + CmdPartFillet - Part - Onderdeel + + Part + Onderdeel - Fillet... - Ronding... + + Fillet... + Ronding... - Fillet the selected edges of a shape - Rond die gekose kante van 'n vorm + + Fillet the selected edges of a shape + Rond die gekose kante van 'n vorm - - + + CmdPartFuse - Part - Onderdeel + + Part + Onderdeel - Union - Vereniging + + Union + Vereniging - Make a union of several shapes - Make a union of several shapes + + Make a union of several shapes + Make a union of several shapes - - + + CmdPartImport - Part - Onderdeel + + Part + Onderdeel - Imports a CAD file - Voer 'n CAD-lêer in + + Imports a CAD file + Voer 'n CAD-lêer in - Import CAD... - Voer CAD in... + + Import CAD... + Voer CAD in... - - + + CmdPartImportCurveNet - Part - Onderdeel + + Part + Onderdeel - Import a curve network - Voer 'n kurwenetwerk in + + Import a curve network + Voer 'n kurwenetwerk in - Import curve network... - Voer 'n kurwenetwerk in... + + Import curve network... + Voer 'n kurwenetwerk in... - - + + CmdPartLoft - Part - Onderdeel + + Part + Onderdeel - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Onderdeel + + Part + Onderdeel - Convert to solid - Verander na soliede vorm + + Convert to solid + Verander na soliede vorm - Create solid from a shell or compound - Skep 'n soliede vorm van 'n skil of saamgestelde vorm + + Create solid from a shell or compound + Skep 'n soliede vorm van 'n skil of saamgestelde vorm - - + + CmdPartMirror - Part - Onderdeel + + Part + Onderdeel - Mirroring... - Weerspieëling... + + Mirroring... + Weerspieëling... - Mirroring a selected shape - Spieël 'n gekose vorm + + Mirroring a selected shape + Spieël 'n gekose vorm - - + + CmdPartPickCurveNet - Part - Onderdeel + + Part + Onderdeel - Pick curve network - Kies kurwenetwerk + + Pick curve network + Kies kurwenetwerk - Pick a curve network - Kies kurwenetwerk + + Pick a curve network + Kies kurwenetwerk - - + + CmdPartPrimitives - Part - Onderdeel + + Part + Onderdeel - Create primitives... - Skep primitiewe vorms... + + Create primitives... + Skep primitiewe vorms... - Creation of parametrized geometric primitives - Skepping van gedefinieerde primitiewe vorms + + Creation of parametrized geometric primitives + Skepping van gedefinieerde primitiewe vorms - - + + + CmdPartRefineShape + + + Part + Onderdeel + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Onderdeel + + Part + Onderdeel - Reverse shapes - Omgekeerde vorms + + Reverse shapes + Omgekeerde vorms - Reverse orientation of shapes - Omgekeerde oriëntasie van vorms + + Reverse orientation of shapes + Omgekeerde oriëntasie van vorms - - + + CmdPartRevolve - Part - Onderdeel + + Part + Onderdeel - Revolve... - Roteer... + + Revolve... + Roteer... - Revolve a selected shape - Draai 'n gekose vorm + + Revolve a selected shape + Draai 'n gekose vorm - - + + CmdPartRuledSurface - Part - Onderdeel + + Part + Onderdeel - Create ruled surface - Skep 'n reëloppervlak + + Create ruled surface + Skep 'n reëloppervlak - Create a ruled surface from two curves - Skep 'n reëloppervlak van twee kurwes + + Create a ruled surface from two curves + Skep 'n reëloppervlak van twee kurwes - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - Onderdeel + + Part + Onderdeel - Section - Snyding + + Section + Snyding - - + + CmdPartShapeFromMesh - - Part - Onderdeel + + Part + Onderdeel - Create shape from mesh... - Skep vorm van maas ... + + Create shape from mesh... + Skep vorm van maas ... - Create shape from selected mesh object - Skep vorm van gekose maasvoorwerp + + Create shape from selected mesh object + Skep vorm van gekose maasvoorwerp - - + + CmdPartSimpleCopy - Part - Onderdeel + + Part + Onderdeel - Create simple copy - Create simple copy + + Create simple copy + Create simple copy - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Onderdeel + + Part + Onderdeel - Create Cylinder... - Skep Silinder ... + + Create Cylinder... + Skep Silinder ... - Create a Cylinder - Skep 'n silinder + + Create a Cylinder + Skep 'n silinder - - + + CmdPartSphere - - Create a sphere solid - Create a sphere solid + + Create a sphere solid + Create a sphere solid - Part - Onderdeel + + Part + Onderdeel - Sphere - Sfeer + + Sphere + Sfeer - - + + + CmdPartSweep + + + Part + Onderdeel + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Create a torus solid + + Create a torus solid + Create a torus solid - Part - Onderdeel + + Part + Onderdeel - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Kies eers 'n vorm om te strek. + Select a shape for extrusion, first. + Kies eers 'n vorm om te strek. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Kies eers 'n vorm om te roteer. + Select a shape for revolution, first. + Kies eers 'n vorm om te roteer. - - + + DlgSettings3DViewPart - Deviation - Afwyking + Deviation + Afwyking - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Die keuse van 'n te klein afwyking veroorsaak dat die tessellasie langer vat, en sodoende word die program gevries of vertraag. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Die keuse van 'n te klein afwyking veroorsaak dat die tessellasie langer vat, en sodoende word die program gevries of vertraag. - - + + PartGui::CrossSections - - Cross sections - Deursnitte + + Cross sections + Deursnitte - Guiding plane - Gidsvlak + + Guiding plane + Gidsvlak - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Posisie: + + Position: + Posisie: - Sections - Snitte + + Sections + Snitte - On both sides - Aan beide kante + + On both sides + Aan beide kante - Count - Tel + + Count + Tel - Distance: - Afstand: + + Distance: + Afstand: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Boolese verwerking + + Boolean Operation + Boolese verwerking - Second shape - Tweede vorm + + Second shape + Tweede vorm - First shape - Eerste vorm + + First shape + Eerste vorm - Boolean operation - Boolese verwerking + + Boolean operation + Boolese verwerking - Section - Snyding + + Section + Snyding - Difference - Verskil + + Difference + Verskil - Union - Vereniging + + Union + Vereniging - Intersection - Snyding + + Intersection + Snyding - - Cannot perform a boolean operation with the same shape - Kan nie 'n Booleaanse verwerking doen met dieselfde vorm nie + + Cannot perform a boolean operation with the same shape + Kan nie 'n Booleaanse verwerking doen met dieselfde vorm nie - - Solids - Soliede vorms + + + Solids + Soliede vorms - Shells - Skille + + + Shells + Skille - Compounds - Saamgestelde vorms + + + Compounds + Saamgestelde vorms - Faces - Vlakke + + + Faces + Vlakke - Swap selection - Ruil seleksie uit + + Swap selection + Ruil seleksie uit - - Select a shape on the left side, first - Kies eers 'n vorm aan die linkerkant + + Select a shape on the left side, first + Kies eers 'n vorm aan die linkerkant - Select a shape on the right side, first - Kies eers 'n vorm aan die regterkant + + Select a shape on the right side, first + Kies eers 'n vorm aan die regterkant - No active document available - Geen aktiewe dokument beskikbaar nie + + No active document available + Geen aktiewe dokument beskikbaar nie - One of the selected objects doesn't exist anymore - Een van die gekose voorwerpe bestaan nie meer nie + + One of the selected objects doesn't exist anymore + Een van die gekose voorwerpe bestaan nie meer nie - Performing union on non-solids is not possible - Vereniging van nie-soliede is nie moontlik nie + + Performing union on non-solids is not possible + Vereniging van nie-soliede is nie moontlik nie - Performing intersection on non-solids is not possible - Snyding van nie-soliede is nie moontlik nie + + Performing intersection on non-solids is not possible + Snyding van nie-soliede is nie moontlik nie - Performing difference on non-solids is not possible - Verskilberekening is nie moontlik met nie-soliede nie + + Performing difference on non-solids is not possible + Verskilberekening is nie moontlik met nie-soliede nie - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Strek + + Extrude + Strek - Direction - Rigting + + Direction + Rigting - Along normal - Langs normaallyn + + Along normal + Langs normaallyn - Length: - Lengte: + + Length: + Lengte: - 3D view - 3D view + + 3D view + 3D view - Note:This option works for planes only - Note:This option works for planes only + + Note:This option works for planes only + Note:This option works for planes only - Shape - Vorm + + Create solid + Create solid - - + + Taper outward angle + - X: - X: + + Shape + Vorm - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Kies eers 'n vorm om te strek. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Kies eers 'n vorm om te strek. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Rond kante + + Fillet Edges + Rond kante - Fillet Parameter - Rondparameter + + Fillet Parameter + Rondparameter - Radius: - Radius: + + Radius: + Radius: - Fillet type: - Rondingstipe: + + Fillet type: + Rondingstipe: - Constant Radius - Konstante Radius + + Constant Radius + Konstante Radius - Variable Radius - Veranderlike Radius + + Variable Radius + Veranderlike Radius - Shape - Vorm + + Shape + Vorm - Selected shape: - Gekose vorm: + + Selected shape: + Gekose vorm: - No selection - Geen keuse + + No selection + Geen keuse - - Edges to fillet - Kante om te rond + + Edges to fillet + Kante om te rond - Start radius - Beginradius + + + Start radius + Beginradius - End radius - Eindradius + + End radius + Eindradius - Radius - Radius + + Radius + Radius - No edge selected - Geen kant gekies nie + + No edge selected + Geen kant gekies nie - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Geen kant is gekies te rond nie. + Geen kant is gekies te rond nie. Kies ten minste een kant. - - All - Alle + + All + Alle - None - Geen + + None + Geen - - Edge%1 - Kant %1 + + + Edge%1 + Kant %1 - No shape selected - Geen vorm gekies nie + + No shape selected + Geen vorm gekies nie - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Geen geldige vorm is gekies nie. -Kies eers 'n geldige vorm in die vallys. + Geen geldige vorm is gekies nie. +Kies eers 'n geldige vorm in die vallys. - - + + PartGui::DlgPartBox - - Box definition - Boksbeskrywing + + Box definition + Boksbeskrywing - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Kanselleer + + Cancel + Kanselleer - OK - Goed + + OK + Goed - Size: - Grootte: + + Size: + Grootte: - Height: - Hoogte: + + Height: + Hoogte: - Width: - Wydte: + + Width: + Wydte: - Length: - Lengte: + + Length: + Lengte: - Position: - Posisie: + + Position: + Posisie: - Direction: - Rigting: + + Direction: + Rigting: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Silinderbeskrywing + + Cylinder definition + Silinderbeskrywing - Parameter - Parameter + + Parameter + Parameter - Height: - Hoogte: + + Height: + Hoogte: - Radius: - Radius: + + Radius: + Radius: - Position: - Posisie: + + Position: + Posisie: - Direction: - Rigting: + + Direction: + Rigting: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - Goed + + OK + Goed - Cancel - Kanselleer + + Cancel + Kanselleer - - + + PartGui::DlgPartImportIges - - IGES input file - IGES invoerlêer + + IGES input file + IGES invoerlêer - ... - ... + + ... + ... - Cancel - Kanselleer + + Cancel + Kanselleer - OK - Goed + + OK + Goed - File Name - Lêernaam + + File Name + Lêernaam - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Alle lêers (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Alle lêers (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Kanselleer + + Cancel + Kanselleer - OK - Goed + + OK + Goed - Step input file - STEP invoerlêer + + Step input file + STEP invoerlêer - File Name - Lêernaam + + File Name + Lêernaam - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Alle lêers (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Alle lêers (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Primitiewe vorms + + Geometric Primitives + Primitiewe vorms - Primitive - Primitiewe vorm + Primitive + Primitiewe vorm - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X Axis Value: + X Axis Value: + X Axis Value: - Y Axis Value: - Y Axis Value: + Y Axis Value: + Y Axis Value: - Z Axis Value: - Z Axis Value: + Z Axis Value: + Z Axis Value: - Wedge - Wedge + + Wedge + Wedge - Circle - Sirkel + + Circle + Sirkel - Vertex - Vertex + Vertex + Vertex - Position - Posisie + Position + Posisie - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Rigting: + Direction: + Rigting: - Y: - Y: + + + + Y: + Y: - Plane - Tekenvlak + + Plane + Tekenvlak - Box - Boks + + Box + Boks - Cylinder - Silinder + + Cylinder + Silinder - Cone - Keël + + Cone + Keël - Sphere - Sfeer + + Sphere + Sfeer - Ellipsoid - Ellipsoïed + + Ellipsoid + Ellipsoïed - Torus - Torus + + Torus + Torus - Parameter - Parameter + + Ellipse + - Width: - Wydte: + + Point + - Length: - Lengte: + + Line + - Height: - Hoogte: + + Parameter + Parameter - Angle: - Hoek: + + + Width: + Wydte: - Radius: - Radius: + + + Length: + Lengte: - Radius 1: - Radius 1: + + + + + Height: + Hoogte: - Radius 2: - Radius 2: + + + + Angle: + Hoek: - U parametric: - U parametriese: + + + + + Radius: + Radius: - V parametric: - V parametriese: + + + + Radius 1: + Radius 1: - &Create - &Skep + + + + Radius 2: + Radius 2: - Alt+C - Alt+C + + + + U parametric: + U parametriese: - Cl&ose - &Maak toe + + + + V parametric: + V parametriese: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Skep %1 + + Y min/max: + - No active document - Geen aktiewe dokument + + Z min/max: + - - Pitch: - Styghoek: + + X2 min/max: + - Helix - Heliks + + Z2 min/max: + - 3D View - 3D-aansig + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Skep + + + Alt+C + Alt+C + + + Cl&ose + &Maak toe + + + Alt+O + Alt+O + + + + + + Create %1 + Skep %1 + + + + No active document + Geen aktiewe dokument + + + + Pitch: + Styghoek: + + + + Helix + Heliks + + + 3D View + 3D-aansig + + + PartGui::DlgRevolution - - Revolve - Roteer + + Revolve + Roteer - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Hoek: + + Angle: + Hoek: - Z: - Z: + + Z: + Z: - Axis: - As: + + Axis: + As: - Shape - Vorm + + Shape + Vorm - - Select a shape for revolution, first. - Kies eers 'n vorm om te roteer. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Kies eers 'n vorm om te roteer. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Kyk na akkuraatheid/prestasie + + View accuracy / Performance + Kyk na akkuraatheid/prestasie - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Met behulp van hoë gehalte normaallyne + + Using high-quality normals + Met behulp van hoë gehalte normaallyne - This will slow down render speed but will lead to nicer results - Dit sal die verwerkingsspoed benadeel, maar sal lei tot beter resultate + + This will slow down render speed but will lead to nicer results + Dit sal die verwerkingsspoed benadeel, maar sal lei tot beter resultate - Defines the appearance of surfaces - Definieer die voorkoms van oppervlaktes + + Defines the appearance of surfaces + Definieer die voorkoms van oppervlaktes - Shape view - Vormaansig + + Shape view + Vormaansig - Tessellation - Mosaïekwerk + + Tessellation + Mosaïekwerk - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Platskadu/Phong-skadu</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Met platskadus word die oppervlaknormale nie gedefinieer per hoekpunt nie. Dit lei tot 'n onwerklike voorkoms vir gekurwe oppervlakke, terwyl Phong-skadus 'n gladder voorkoms gee. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Indien hierdie opsie nie geaktiveer is nie, word Phong-skadus gebruik, anders word platskadus gebruik.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Platskadu/Phong-skadu</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Met platskadus word die oppervlaknormale nie gedefinieer per hoekpunt nie. Dit lei tot 'n onwerklike voorkoms vir gekurwe oppervlakke, terwyl Phong-skadus 'n gladder voorkoms gee. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Indien hierdie opsie nie geaktiveer is nie, word Phong-skadus gebruik, anders word platskadus gebruik.</p></body></html> - Do not define normal per vertex - Definieer nie 'n normaallyn per hoekpunt nie + + Do not define normal per vertex + Definieer nie 'n normaallyn per hoekpunt nie - Defines the deviation of tessellation to the actual surface - Definieer die afwyking van mosaïekwerk van die werklike oppervlakte + + Defines the deviation of tessellation to the actual surface + Definieer die afwyking van mosaïekwerk van die werklike oppervlakte - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Mosaïekwerk</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definieer die maksimum afwyking van die mosaïekverwerkte maas van die oppervlak. Hoe kleiner die waarde is, hoe stadiger die verwerkingsspoed en hoe beter die voorkoms.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Mosaïekwerk</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definieer die maksimum afwyking van die mosaïekverwerkte maas van die oppervlak. Hoe kleiner die waarde is, hoe stadiger die verwerkingsspoed en hoe beter die voorkoms.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiëring van die normaallyne per hoekpunt word ook genoem <span style=" font-style:italic;">Phong-skaduïng</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">en definiëring van die normaallyne per vlak noem ons </span>Platskaduïng<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definiëring van die normaallyne per hoekpunt word ook genoem <span style=" font-style:italic;">Phong-skaduïng</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">en definiëring van die normaallyne per vlak noem ons </span>Platskaduïng<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Hoë kwaliteit normaallyne</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hierdie sal die verwerkingsspoed stadiger maak, maar sal lei tot beter resultate.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Hoë kwaliteit normaallyne</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hierdie sal die verwerkingsspoed stadiger maak, maar sal lei tot beter resultate.</p></body></html> - Maximum deviation depending on the model bounding box - Maksimum afwyking hang af van die model limietboks + + Maximum deviation depending on the model bounding box + Maksimum afwyking hang af van die model limietboks - % - % + + % + % - - Deviation - Afwyking + + Deviation + Afwyking - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Die keuse van 'n te klein afwyking veroorsaak dat die tessellasie langer vat, en sodoende word die program gevries of vertraag. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Die keuse van 'n te klein afwyking veroorsaak dat die tessellasie langer vat, en sodoende word die program gevries of vertraag. - - + + PartGui::DlgSettingsGeneral - - General - Algemeen + + General + Algemeen - Export - Voer uit + + Export + Voer uit - Millimeter - Millimeter + + Millimeter + Millimeter - Meter - Meter + + Meter + Meter - Inch - Duim + + Inch + Duim - Units for export of STEP/IGES - Eenhede vir uitvoer van STEP/IGES + + Units for export of STEP/IGES + Eenhede vir uitvoer van STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Posisie + + + + 3D View + 3D-aansig + + + PartGui::LoftWidget - - Too few elements - Too few elements + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Too few elements + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Weerspieëling + + Mirroring + Weerspieëling - Shapes - Vorms + + Shapes + Vorms - Mirror plane: - Spieëlvlak: + + Mirror plane: + Spieëlvlak: - XY plane - XY-vlak + + XY plane + XY-vlak - XZ plane - XZ-vlak + + XZ plane + XZ-vlak - YZ plane - YZ-vlak + + YZ plane + YZ-vlak - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Kies eers 'n vorm om te weerspieël. + + Select a shape for mirroring, first. + Kies eers 'n vorm om te weerspieël. - No such document '%1'. - Geen so 'n dokument '%1' nie. + + No such document '%1'. + Geen so 'n dokument '%1' nie. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Verkeerde keuse + + + + + + Wrong selection + Verkeerde keuse - Select two vertices - Select two vertices + + + Select two vertices + Select two vertices - Select three or more edges - Select three or more edges + Select three or more edges + Select three or more edges - Select two or more faces - Select two or more faces + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Select two or more faces - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - Select adjacent faces + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - All shape types can be selected + + Select adjacent faces + Select adjacent faces - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Too few elements + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Waarde + Value + Waarde - Special - Special + Special + Special - Command - Bevel + Command + Bevel - Stretch - Stretch + Stretch + Stretch - Move - Verskuif + Move + Verskuif - Rotate - Roteer + Rotate + Roteer - Offset - Verplasing + Offset + Verplasing - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Set color per face + + Set color per face + Set color per face - Click on the faces in the 3d view to select them. - Click on the faces in the 3d view to select them. + + Click on the faces in the 3d view to select them. + Click on the faces in the 3d view to select them. - Faces: - Faces: + + Faces: + Faces: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Skuif na regs + Move right + Skuif na regs - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Beweeg die gekose item een vlak neer.</b><p>Dit sal ook die vlak van die oueritem verander.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Beweeg die gekose item een vlak neer.</b><p>Dit sal ook die vlak van die oueritem verander.</p> - Move left - Skuif na links + Move left + Skuif na links - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Beweeg die gekose item een vlak op.</b><p>Dit sal ook die vlak van die oueritem verander.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Beweeg die gekose item een vlak op.</b><p>Dit sal ook die vlak van die oueritem verander.</p> - Move up - Skuif op + Move up + Skuif op - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Beweeg die gekose item op.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Beweeg die gekose item op.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> - Move down - Skuif neer + Move down + Skuif neer - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Beweeg die gekose item neer.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Beweeg die gekose item neer.</b><p>Die item sal geskuif word binne die hiërargie vlak.</p> - Create solid - Create solid + + Create solid + Create solid - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Skep + + Create + Skep - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Create solid + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Verkeerde keuse + + + + + + Wrong selection + Verkeerde keuse - Select two shapes please. - Kies twee vorms asseblief. + + + Select two shapes please. + Kies twee vorms asseblief. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Alle CAD-lêers (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Alle CAD-lêers (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Alle lêers (*.*) + + + + All Files (*.*) + Alle lêers (*.*) - - Sewing Tolerance - Naaitolerans + + Sewing Tolerance + Naaitolerans - Enter tolerance for sewing shape: - Gee toleransvlak vir naaivorm: + + Enter tolerance for sewing shape: + Gee toleransvlak vir naaivorm: - - Edit mirror plane - Wysig spieëlvlak + + Edit mirror plane + Wysig spieëlvlak - Transform - Transformeer + + Edit chamfer edges + - - Part design - Onderdeelontwerp + Transform + Transformeer - - Select two shapes or more, please. - Kies twee of meer vorms, asseblief. + + + Part design + Onderdeelontwerp - You have to select either two edges or two wires. - Jy moet óf twee kante óf twee drade te kies. + + + Select two shapes or more, please. + Kies twee of meer vorms, asseblief. - - Edit fillet edges - Wysig snitkante + + You have to select either two edges or two wires. + Jy moet óf twee kante óf twee drade te kies. - - Set colors... - Set colors... + + Edit fillet edges + Wysig snitkante - - + + + Set colors... + Set colors... + + + Workbench - - &Part - &Onderdeel + + &Part + &Onderdeel - &Simple - &Eenvoudig + + &Simple + &Eenvoudig - &Parametric - &Parametries + + &Parametric + &Parametries - Part tools - Onderdeelgereedskap + + Part tools + Onderdeelgereedskap - Solids - Soliede vorms + + Solids + Soliede vorms - Boolean - Boolese + + Boolean + Boolese - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_de.ts b/src/Mod/Part/Gui/Resources/translations/Part_de.ts index fa525b947..bae37780b 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_de.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_de.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Blockdefinition + + Block definition + Blockdefinition - First limit - Erster Grenzwert + + First limit + Erster Grenzwert - Type: - Typ: + + + Type: + Typ: - mm - mm + + + mm + mm - Length: - Länge: + + + Length: + Länge: - Dimension - Abmessung + + + Dimension + Abmessung - Up to next - Weiter zum Nächsten + + + Up to next + Weiter zum Nächsten - Up to last - Weiter zum Letzten + + + Up to last + Weiter zum Letzten - Up to plane - Weiter zur Ebene + + + Up to plane + Weiter zur Ebene - Up to face - Bis zu Oberfläche + + + Up to face + Bis zu Oberfläche - Limit: - Grenze: + + + Limit: + Grenze: - No selection - Keine Auswahl + + + + + No selection + Keine Auswahl - Profile - Profil + + Profile + Profil - Selection: - Auswahl: + + Selection: + Auswahl: - Reverse - Umkehren + + Reverse + Umkehren - Both sides - Beide Seiten + + Both sides + Beide Seiten - Second limit - Zweite Begrenzung + + Second limit + Zweite Begrenzung - Direction - Richtung + + Direction + Richtung - Perpendicular to sketch - Senkrecht zur Skizze + + Perpendicular to sketch + Senkrecht zur Skizze - Reference - Referenz + + Reference + Referenz - Apply - Anwenden + + Apply + Anwenden - Cancel - Abbrechen + + Cancel + Abbrechen - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Formteil + + Part + Formteil - Boolean... - Boolesche Operation... + + Boolean... + Boolesche Operation... - Run a boolean operation with two shapes selected - Eine boolesche Operation mit zwei ausgewählten Formen durchführen + + Run a boolean operation with two shapes selected + Eine boolesche Operation mit zwei ausgewählten Formen durchführen - - + + CmdPartBox - - Part - Formteil + + Part + Formteil - Box - Quader + + Box + Quader - Create a box solid - Erstellt einen Quader + + Create a box solid + Erstellt einen Quader - - + + CmdPartBox2 - - Part - Formteil + + Part + Formteil - Box fix 1 - Box fix 1 + + Box fix 1 + Box fix 1 - Create a box solid without dialog - Erstellt einen Quader ohne Dialog + + Create a box solid without dialog + Erstellt einen Quader ohne Dialog - - + + CmdPartBox3 - Part - Formteil + + Part + Formteil - Box fix 2 - Box fix 2 + + Box fix 2 + Box fix 2 - Create a box solid without dialog - Erstellt einen Quader ohne Dialog + + Create a box solid without dialog + Erstellt einen Quader ohne Dialog - - + + CmdPartBuilder - Part - Formteil + + Part + Formteil - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + Formteil + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Formteil + + Part + Formteil - Intersection - Überschneidung + + Intersection + Überschneidung - Make an intersection of two shapes - Überschneidet zwei Formen + + Make an intersection of two shapes + Überschneidet zwei Formen - - + + CmdPartCone - - Part - Formteil + + Part + Formteil - Cone - Kegel + + Cone + Kegel - Create a cone solid - Erstellt einen Kegel + + Create a cone solid + Erstellt einen Kegel - - + + CmdPartCrossSections - - Part - Formteil + + Part + Formteil - Cross-sections... - Schnitte... + + Cross-sections... + Schnitte... - Cross-sections - Schnitte + + Cross-sections + Schnitte - - + + CmdPartCut - Part - Formteil + + Part + Formteil - Cut - Ausschneiden + + Cut + Ausschneiden - Make a cut of two shapes - Schneidet zwei Formen + + Make a cut of two shapes + Schneidet zwei Formen - - + + CmdPartCylinder - - Part - Formteil + + Part + Formteil - Create a Cylinder - Einen Zylinder erstellen + + Create a Cylinder + Einen Zylinder erstellen - Cylinder - Zylinder + + Cylinder + Zylinder - - + + CmdPartExport - - Part - Formteil + + Part + Formteil - Export CAD... - Export CAD... + + Export CAD... + Export CAD... - Exports to a CAD file - Exports to a CAD file + + Exports to a CAD file + Exports to a CAD file - - + + CmdPartExtrude - Part - Formteil + + Part + Formteil - Extrude... - Extrudieren... + + Extrude... + Extrudieren... - Extrude a selected sketch - Extrudieren einer ausgewählten Skizze + + Extrude a selected sketch + Extrudieren einer ausgewählten Skizze - - + + CmdPartFillet - Part - Formteil + + Part + Formteil - Fillet... - Abrunden... + + Fillet... + Abrunden... - Fillet the selected edges of a shape - Die ausgewählten Kanten einer Form abrunden + + Fillet the selected edges of a shape + Die ausgewählten Kanten einer Form abrunden - - + + CmdPartFuse - Part - Formteil + + Part + Formteil - Union - Vereinigung + + Union + Vereinigung - Make a union of several shapes - Vereinigt mehrere Formen + + Make a union of several shapes + Vereinigt mehrere Formen - - + + CmdPartImport - Part - Formteil + + Part + Formteil - Imports a CAD file - Importiert eine CAD-Datei + + Imports a CAD file + Importiert eine CAD-Datei - Import CAD... - CAD importieren ... + + Import CAD... + CAD importieren ... - - + + CmdPartImportCurveNet - Part - Formteil + + Part + Formteil - Import a curve network - Ein Kurvennetzwerk importieren + + Import a curve network + Ein Kurvennetzwerk importieren - Import curve network... - Kurvennetzwerk importieren... + + Import curve network... + Kurvennetzwerk importieren... - - + + CmdPartLoft - Part - Formteil + + Part + Formteil - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Formteil + + Part + Formteil - Convert to solid - Festkörper erzeugen + + Convert to solid + Festkörper erzeugen - Create solid from a shell or compound - Festkörper aus Hülle oder Flächenverbund erzeugen + + Create solid from a shell or compound + Festkörper aus Hülle oder Flächenverbund erzeugen - - + + CmdPartMirror - Part - Formteil + + Part + Formteil - Mirroring... - Spiegelung... + + Mirroring... + Spiegelung... - Mirroring a selected shape - Spiegelung einer ausgewählten Form + + Mirroring a selected shape + Spiegelung einer ausgewählten Form - - + + CmdPartPickCurveNet - Part - Formteil + + Part + Formteil - Pick curve network - Kurvennetzwerk auswählen + + Pick curve network + Kurvennetzwerk auswählen - Pick a curve network - Ein Kurvennetzwerk auswählen + + Pick a curve network + Ein Kurvennetzwerk auswählen - - + + CmdPartPrimitives - Part - Formteil + + Part + Formteil - Create primitives... - Grundkörper erstellen... + + Create primitives... + Grundkörper erstellen... - Creation of parametrized geometric primitives - Erstellung von parametrisierten geometrischen Grundkörpern + + Creation of parametrized geometric primitives + Erstellung von parametrisierten geometrischen Grundkörpern - - + + + CmdPartRefineShape + + + Part + Formteil + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Formteil + + Part + Formteil - Reverse shapes - Formen umkehren + + Reverse shapes + Formen umkehren - Reverse orientation of shapes - Orientierung von Formen umkehren + + Reverse orientation of shapes + Orientierung von Formen umkehren - - + + CmdPartRevolve - Part - Formteil + + Part + Formteil - Revolve... - Drehen... + + Revolve... + Drehen... - Revolve a selected shape - Drehen einer ausgewählten Form + + Revolve a selected shape + Drehen einer ausgewählten Form - - + + CmdPartRuledSurface - Part - Formteil + + Part + Formteil - Create ruled surface - Regelfläche erzeugen + + Create ruled surface + Regelfläche erzeugen - Create a ruled surface from two curves - Regelfläche aus zwei Kurven erzeugen + + Create a ruled surface from two curves + Regelfläche aus zwei Kurven erzeugen - - + + CmdPartSection - Make a section of two shapes - Schnitt von zwei Formen erzeugen + + Make a section of two shapes + Schnitt von zwei Formen erzeugen - Part - Formteil + + Part + Formteil - Section - Ausschnitt + + Section + Ausschnitt - - + + CmdPartShapeFromMesh - - Part - Formteil + + Part + Formteil - Create shape from mesh... - Form aus Dreiecksnetz erstellen... + + Create shape from mesh... + Form aus Dreiecksnetz erstellen... - Create shape from selected mesh object - Form aus selektiertem Dreiecksnetz erstellen + + Create shape from selected mesh object + Form aus selektiertem Dreiecksnetz erstellen - - + + CmdPartSimpleCopy - Part - Formteil + + Part + Formteil - Create simple copy - Einfache Kopie erstellen + + Create simple copy + Einfache Kopie erstellen - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Formteil + + Part + Formteil - Create Cylinder... - Zylinder erstellen... + + Create Cylinder... + Zylinder erstellen... - Create a Cylinder - Einen Zylinder erstellen + + Create a Cylinder + Einen Zylinder erstellen - - + + CmdPartSphere - - Create a sphere solid - Erstellt eine Kugel + + Create a sphere solid + Erstellt eine Kugel - Part - Formteil + + Part + Formteil - Sphere - Kugel + + Sphere + Kugel - - + + + CmdPartSweep + + + Part + Formteil + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Erstellt einen Torus + + Create a torus solid + Erstellt einen Torus - Part - Formteil + + Part + Formteil - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Wählen Sie zuerst eine Form zum extrudieren. + Select a shape for extrusion, first. + Wählen Sie zuerst eine Form zum extrudieren. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Select a shape for revolution, first. + Select a shape for revolution, first. + Select a shape for revolution, first. - - + + DlgSettings3DViewPart - Deviation - Deviation + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Schnitte + + Cross sections + Schnitte - Guiding plane - Führungsebene + + Guiding plane + Führungsebene - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Position: + + Position: + Position: - Sections - Abschnitte + + Sections + Abschnitte - On both sides - Beidseitig + + On both sides + Beidseitig - Count - Anzahl + + Count + Anzahl - Distance: - Entfernung: + + Distance: + Entfernung: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Boolesche Operation + + Boolean Operation + Boolesche Operation - Second shape - Zweite Form + + Second shape + Zweite Form - First shape - Erste Form + + First shape + Erste Form - Boolean operation - Boolesche Operation + + Boolean operation + Boolesche Operation - Section - Ausschnitt + + Section + Ausschnitt - Difference - Differenz + + Difference + Differenz - Union - Vereinigung + + Union + Vereinigung - Intersection - Überschneidung + + Intersection + Überschneidung - - Cannot perform a boolean operation with the same shape - Kann eine boolesche Operation mit der gleichen Form nicht ausführen + + Cannot perform a boolean operation with the same shape + Kann eine boolesche Operation mit der gleichen Form nicht ausführen - - Solids - Festkörper + + + Solids + Festkörper - Shells - Hülle + + + Shells + Hülle - Compounds - Flächenverbünde + + + Compounds + Flächenverbünde - Faces - Flächen + + + Faces + Flächen - Swap selection - Auswahl umkehren + + Swap selection + Auswahl umkehren - - Select a shape on the left side, first - Zuerst Form auf der linken Seite auswählen + + Select a shape on the left side, first + Zuerst Form auf der linken Seite auswählen - Select a shape on the right side, first - Zuerst Form auf der rechten Seite auswählen + + Select a shape on the right side, first + Zuerst Form auf der rechten Seite auswählen - No active document available - Kein aktives Dokument verfügbar + + No active document available + Kein aktives Dokument verfügbar - One of the selected objects doesn't exist anymore - Eines der ausgewählten Objekte existiert nicht mehr + + One of the selected objects doesn't exist anymore + Eines der ausgewählten Objekte existiert nicht mehr - Performing union on non-solids is not possible - Vereinigung von Nicht-Festkörpern nicht möglich + + Performing union on non-solids is not possible + Vereinigung von Nicht-Festkörpern nicht möglich - Performing intersection on non-solids is not possible - Überschneidung von Nicht-Festkörpern nicht möglich + + Performing intersection on non-solids is not possible + Überschneidung von Nicht-Festkörpern nicht möglich - Performing difference on non-solids is not possible - Differenz von Nicht-Festkörpern nicht möglich + + Performing difference on non-solids is not possible + Differenz von Nicht-Festkörpern nicht möglich - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Extrudieren + + Extrude + Extrudieren - Direction - Richtung + + Direction + Richtung - Along normal - Entlang der Normalen + + Along normal + Entlang der Normalen - Length: - Länge: + + Length: + Länge: - 3D view - 3D-Ansicht + + 3D view + 3D-Ansicht - Note:This option works for planes only - Achtung: Diese Option wird nur für Ebenen verwendet + + Note:This option works for planes only + Achtung: Diese Option wird nur für Ebenen verwendet - Shape - Form + + Create solid + Create solid - - + + Taper outward angle + - X: - X: + + Shape + Form - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Wählen Sie zuerst eine Form zum extrudieren. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Wählen Sie zuerst eine Form zum extrudieren. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Kanten abrunden + + Fillet Edges + Kanten abrunden - Fillet Parameter - Ausrundungsparameter + + Fillet Parameter + Ausrundungsparameter - Radius: - Radius: + + Radius: + Radius: - Fillet type: - Ausrundungs-Typ: + + Fillet type: + Ausrundungs-Typ: - Constant Radius - Konstanter Radius + + Constant Radius + Konstanter Radius - Variable Radius - Variabler Radius + + Variable Radius + Variabler Radius - Shape - Form + + Shape + Form - Selected shape: - Ausgewählte Form: + + Selected shape: + Ausgewählte Form: - No selection - Keine Auswahl + + No selection + Keine Auswahl - - Edges to fillet - Kanten zum Abrunden + + Edges to fillet + Kanten zum Abrunden - Start radius - Start-Radius + + + Start radius + Start-Radius - End radius - End-Radius + + End radius + End-Radius - Radius - Radius + + Radius + Radius - No edge selected - Keine Kante ausgewählt + + No edge selected + Keine Kante ausgewählt - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Kein Kantengebilde zum Abrunden markiert. + Kein Kantengebilde zum Abrunden markiert. Bitte markieren Sie zuerst ein oder mehrere Kantengebilde. - - All - Alle + + All + Alle - None - Keine + + None + Keine - - Edge%1 - Kante%1 + + + Edge%1 + Kante%1 - No shape selected - Keine Form gewählt + + No shape selected + Keine Form gewählt - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Keine gültige Form gewählt. + Keine gültige Form gewählt. Bitte wählen Sie eine gültige Form im Dropdown-Feld. - - + + PartGui::DlgPartBox - - Box definition - Box-Definition + + Box definition + Box-Definition - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Abbrechen + + Cancel + Abbrechen - OK - OK + + OK + OK - Size: - Größe: + + Size: + Größe: - Height: - Höhe: + + Height: + Höhe: - Width: - Breite: + + Width: + Breite: - Length: - Länge: + + Length: + Länge: - Position: - Position: + + Position: + Position: - Direction: - Richtung: + + Direction: + Richtung: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Zylinder-Definition + + Cylinder definition + Zylinder-Definition - Parameter - Parameter + + Parameter + Parameter - Height: - Höhe: + + Height: + Höhe: - Radius: - Radius: + + Radius: + Radius: - Position: - Position: + + Position: + Position: - Direction: - Richtung: + + Direction: + Richtung: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Abbrechen + + Cancel + Abbrechen - - + + PartGui::DlgPartImportIges - - IGES input file - IGES-Eingabedatei + + IGES input file + IGES-Eingabedatei - ... - ... + + ... + ... - Cancel - Abbrechen + + Cancel + Abbrechen - OK - OK + + OK + OK - File Name - Dateiname + + File Name + Dateiname - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Alle Dateien (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Alle Dateien (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Abbrechen + + Cancel + Abbrechen - OK - OK + + OK + OK - Step input file - STEP-Eingabedatei + + Step input file + STEP-Eingabedatei - File Name - Dateiname + + File Name + Dateiname - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);; Alle Dateien (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);; Alle Dateien (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometrische Grundkörper + + Geometric Primitives + Geometrische Grundkörper - Primitive - Grundkörper + Primitive + Grundkörper - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X Axis Value: + X Axis Value: + X Axis Value: - Y Axis Value: - Y Axis Value: + Y Axis Value: + Y Axis Value: - Z Axis Value: - Z Axis Value: + Z Axis Value: + Z Axis Value: - Wedge - Wedge + + Wedge + Wedge - Circle - Kreis + + Circle + Kreis - Vertex - Vertex + Vertex + Vertex - Position - Position + Position + Position - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Richtung: + Direction: + Richtung: - Y: - Y: + + + + Y: + Y: - Plane - Ebene + + Plane + Ebene - Box - Quader + + Box + Quader - Cylinder - Zylinder + + Cylinder + Zylinder - Cone - Kegel + + Cone + Kegel - Sphere - Kugel + + Sphere + Kugel - Ellipsoid - Ellipsoid + + Ellipsoid + Ellipsoid - Torus - Torus + + Torus + Torus - Parameter - Parameter + + Ellipse + - Width: - Breite: + + Point + - Length: - Länge: + + Line + - Height: - Höhe: + + Parameter + Parameter - Angle: - Winkel: + + + Width: + Breite: - Radius: - Radius: + + + Length: + Länge: - Radius 1: - Radius 1: + + + + + Height: + Höhe: - Radius 2: - Radius 2: + + + + Angle: + Winkel: - U parametric: - U Parameter: + + + + + Radius: + Radius: - V parametric: - V Parameter: + + + + Radius 1: + Radius 1: - &Create - &Erstellen + + + + Radius 2: + Radius 2: - Alt+C - Alt+C + + + + U parametric: + U Parameter: - Cl&ose - Sch&ließen + + + + V parametric: + V Parameter: - Alt+O - Alt+O + + X min/max: + - - Create %1 - %1 erstellen + + Y min/max: + - No active document - Kein aktives Dokument + + Z min/max: + - - Pitch: - Pitch: + + X2 min/max: + - Helix - Helix + + Z2 min/max: + - 3D View - 3D-Ansicht + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Erstellen + + + Alt+C + Alt+C + + + Cl&ose + Sch&ließen + + + Alt+O + Alt+O + + + + + + Create %1 + %1 erstellen + + + + No active document + Kein aktives Dokument + + + + Pitch: + Pitch: + + + + Helix + Helix + + + 3D View + 3D-Ansicht + + + PartGui::DlgRevolution - - Revolve - Umdrehung + + Revolve + Umdrehung - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Winkel: + + Angle: + Winkel: - Z: - Z: + + Z: + Z: - Axis: - Achse: + + Axis: + Achse: - Shape - Form + + Shape + Form - - Select a shape for revolution, first. - Select a shape for revolution, first. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Select a shape for revolution, first. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Anzeigen der Genauigkeit / Performanz + + View accuracy / Performance + Anzeigen der Genauigkeit / Performanz - View smoothing - Glättung + + View smoothing + Glättung - Using high-quality normals - Hochwertige Normalen benutzen + + Using high-quality normals + Hochwertige Normalen benutzen - This will slow down render speed but will lead to nicer results - Dies verlangsamt die Render-Geschwindigkeit, führt aber zu schöneren Ergebnissen + + This will slow down render speed but will lead to nicer results + Dies verlangsamt die Render-Geschwindigkeit, führt aber zu schöneren Ergebnissen - Defines the appearance of surfaces - Definiert das Aussehen von Oberflächen + + Defines the appearance of surfaces + Definiert das Aussehen von Oberflächen - Shape view - Form-Ansicht + + Shape view + Form-Ansicht - Tessellation - Tessellierung + + Tessellation + Tessellierung - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat-Shading/Phong-Shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Bei Flat-Shading werden die Flächennormalen nicht pro Vertex gesetzt, was zu unnatürlichem Aussehen führen kann, während Phong-Shading zu glatterem Aussehen führt. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Falls diese Option nicht gesetzt ist, wird Phong-Shading verwendet, andernfalls wird Flat-Shading verwendet.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat-Shading/Phong-Shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Bei Flat-Shading werden die Flächennormalen nicht pro Vertex gesetzt, was zu unnatürlichem Aussehen führen kann, während Phong-Shading zu glatterem Aussehen führt. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Falls diese Option nicht gesetzt ist, wird Phong-Shading verwendet, andernfalls wird Flat-Shading verwendet.</p></body></html> - Do not define normal per vertex - Flächennormale nicht per Vertex setzen + + Do not define normal per vertex + Flächennormale nicht per Vertex setzen - Defines the deviation of tessellation to the actual surface - Definiert die Abweichung des Mosaiks auf der aktuellen Oberfläche + + Defines the deviation of tessellation to the actual surface + Definiert die Abweichung des Mosaiks auf der aktuellen Oberfläche - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellierung</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Setzt die maximale Abweichung der tessellierten Fläche zur CAD-Fläche. Je niedriger der Wert desto langamer die Darstellungsgeschwindigkeit und schöner die Darstellung.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellierung</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Setzt die maximale Abweichung der tessellierten Fläche zur CAD-Fläche. Je niedriger der Wert desto langamer die Darstellungsgeschwindigkeit und schöner die Darstellung.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hinweis</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Die Angabe der Normalen per Vertex wird auch <span style=" font-style:italic;">Phong shading</span> genannt,</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">während die Angabe der Normalen pro Fläche </span>Flat shading<span style=" font-style:normal;"> gennant wird.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hinweis</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Die Angabe der Normalen per Vertex wird auch <span style=" font-style:italic;">Phong shading</span> genannt,</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">während die Angabe der Normalen pro Fläche </span>Flat shading<span style=" font-style:normal;"> gennant wird.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Hochqualitative Normalen</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dies verringert die Darstellungsgeschwindigkeit aber führt zu schöneren Ergebnissen.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Hochqualitative Normalen</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dies verringert die Darstellungsgeschwindigkeit aber führt zu schöneren Ergebnissen.</p></body></html> - Maximum deviation depending on the model bounding box - Setzt die maximale Abweichung abhängig von der Modell-Bounding-Box + + Maximum deviation depending on the model bounding box + Setzt die maximale Abweichung abhängig von der Modell-Bounding-Box - % - % + + % + % - - Deviation - Deviation + + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Allgemein + + General + Allgemein - Export - Exportieren + + Export + Exportieren - Millimeter - Millimeter + + Millimeter + Millimeter - Meter - Meter + + Meter + Meter - Inch - Zoll + + Inch + Zoll - Units for export of STEP/IGES - Einheiten für den Export von STEP/IGES + + Units for export of STEP/IGES + Einheiten für den Export von STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Position + + + + 3D View + 3D-Ansicht + + + PartGui::LoftWidget - - Too few elements - Zu wenig Elemente + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Zu wenig Elemente + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Spiegelung + + Mirroring + Spiegelung - Shapes - Formen + + Shapes + Formen - Mirror plane: - Spiegelebene: + + Mirror plane: + Spiegelebene: - XY plane - XY-Ebene + + XY plane + XY-Ebene - XZ plane - XZ-Ebene + + XZ plane + XZ-Ebene - YZ plane - YZ-Ebene + + YZ plane + YZ-Ebene - Base point: - Basispunkt: + + Base point: + Basispunkt: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Wählen Sie zuerst eine Form für die Spiegelung. + + Select a shape for mirroring, first. + Wählen Sie zuerst eine Form für die Spiegelung. - No such document '%1'. - Kein derartiges Dokument "%1". + + No such document '%1'. + Kein derartiges Dokument "%1". - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Falsche Auswahl + + + + + + Wrong selection + Falsche Auswahl - Select two vertices - Select two vertices + + + Select two vertices + Select two vertices - Select three or more edges - Select three or more edges + Select three or more edges + Select three or more edges - Select two or more faces - Select two or more faces + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Select two or more faces - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - Select adjacent faces + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - All shape types can be selected + + Select adjacent faces + Select adjacent faces - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Zu wenig Elemente + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Wert + Value + Wert - Special - Special + Special + Special - Command - Befehl + Command + Befehl - Stretch - Stretch + Stretch + Stretch - Move - Verschieben + Move + Verschieben - Rotate - Drehen + Rotate + Drehen - Offset - Versetzen + Offset + Versetzen - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Set color per face + + Set color per face + Set color per face - Click on the faces in the 3d view to select them. - Click on the faces in the 3d view to select them. + + Click on the faces in the 3d view to select them. + Click on the faces in the 3d view to select them. - Faces: - Faces: + + Faces: + Faces: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Nach rechts verschieben + Move right + Nach rechts verschieben - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Ausgewähltes Element um eine Stufe nach unten verschieben.</b><p>Das verändert auch die Stufe des Vaterelements.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Ausgewähltes Element um eine Stufe nach unten verschieben.</b><p>Das verändert auch die Stufe des Vaterelements.</p> - Move left - Nach links verschieben + Move left + Nach links verschieben - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Ausgewähltes Element um eine Stufe nach oben verschieben.</b><p>Das verändert auch die Stufe des Vaterelements.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Ausgewähltes Element um eine Stufe nach oben verschieben.</b><p>Das verändert auch die Stufe des Vaterelements.</p> - Move up - Noch oben verschieben + Move up + Noch oben verschieben - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Ausgewähltes Element nach oben verschieben.</b><p>Das Element wird innerhalb der Hierarchiestufe verschoben.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Ausgewähltes Element nach oben verschieben.</b><p>Das Element wird innerhalb der Hierarchiestufe verschoben.</p> - Move down - Nache unten verschieben + Move down + Nache unten verschieben - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Ausgewähltes Element nach unten verschieben.</b><p>Das Element wird innerhalb der Hierarchiestufe verschoben.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Ausgewähltes Element nach unten verschieben.</b><p>Das Element wird innerhalb der Hierarchiestufe verschoben.</p> - Create solid - Create solid + + Create solid + Create solid - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Erstellen + + Create + Erstellen - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Create solid + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Falsche Auswahl + + + + + + Wrong selection + Falsche Auswahl - Select two shapes please. - Wählen Sie bitte zwei Formen. + + + Select two shapes please. + Wählen Sie bitte zwei Formen. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Alle CAD-Dateien (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Alle CAD-Dateien (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Alle Dateien (*.*) + + + + All Files (*.*) + Alle Dateien (*.*) - - Sewing Tolerance - Toleranz + + Sewing Tolerance + Toleranz - Enter tolerance for sewing shape: - Geben Sie die Toleranz zum Vernähen ein: + + Enter tolerance for sewing shape: + Geben Sie die Toleranz zum Vernähen ein: - - Edit mirror plane - Spiegelebene bearbeiten + + Edit mirror plane + Spiegelebene bearbeiten - Transform - Transformieren + + Edit chamfer edges + - - Part design - Part design + Transform + Transformieren - - Select two shapes or more, please. - Wählen Sie bitte zwei oder mehrere Formen aus. + + + Part design + Part design - You have to select either two edges or two wires. - Wählen Sie entweder zwei Kanten oder zwei Drahtgitter aus. + + + Select two shapes or more, please. + Wählen Sie bitte zwei oder mehrere Formen aus. - - Edit fillet edges - Abgerundete Kanten bearbeiten + + You have to select either two edges or two wires. + Wählen Sie entweder zwei Kanten oder zwei Drahtgitter aus. - - Set colors... - Farben setzen... + + Edit fillet edges + Abgerundete Kanten bearbeiten - - + + + Set colors... + Farben setzen... + + + Workbench - - &Part - &Formteil + + &Part + &Formteil - &Simple - Ein&fach + + &Simple + Ein&fach - &Parametric - &Parametrisch + + &Parametric + &Parametrisch - Part tools - Formteil-Werkzeuge + + Part tools + Formteil-Werkzeuge - Solids - Festkörper + + Solids + Festkörper - Boolean - Boolsche Operation + + Boolean + Boolsche Operation - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_es.ts b/src/Mod/Part/Gui/Resources/translations/Part_es.ts index b7f914194..533b69224 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_es.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_es.ts @@ -1,1873 +1,2521 @@ - - + + BlockDefinition - - Block definition - Bloque de definición + + Block definition + Bloque de definición - First limit - Primer límite + + First limit + Primer límite - Type: - Tipo: + + + Type: + Tipo: - mm - mm + + + mm + mm - Length: - Longitud: + + + Length: + Longitud: - Dimension - Cota + + + Dimension + Cota - Up to next - Cerca del siguiente + + + Up to next + Cerca del siguiente - Up to last - Cerca del último + + + Up to last + Cerca del último - Up to plane - Cerca del plano + + + Up to plane + Cerca del plano - Up to face - Cerca de la cara + + + Up to face + Cerca de la cara - Limit: - Límite: + + + Limit: + Límite: - No selection - Ninguna selección + + + + + No selection + Ninguna selección - Profile - Perfil + + Profile + Perfil - Selection: - Selección: + + Selection: + Selección: - Reverse - Invertir + + Reverse + Invertir - Both sides - Ambos lados + + Both sides + Ambos lados - Second limit - Segundo límite + + Second limit + Segundo límite - Direction - Dirección + + Direction + Dirección - Perpendicular to sketch - Perpendicular para esbozar + + Perpendicular to sketch + Perpendicular para esbozar - Reference - Referencia + + Reference + Referencia - Apply - Aplicar + + Apply + Aplicar - Cancel - Cancelar + + Cancel + Cancelar - OK - Aceptar + + OK + Aceptar - - + + CmdPartBoolean - - Part - Pieza + + Part + Pieza - Boolean... - Booleano... + + Boolean... + Booleano... - Run a boolean operation with two shapes selected - Ejecuta una operación booleana con dos formas seleccionadas + + Run a boolean operation with two shapes selected + Ejecuta una operación booleana con dos formas seleccionadas - - + + CmdPartBox - - Part - Pieza + + Part + Pieza - Box - Caja + + Box + Caja - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - Pieza + + Part + Pieza - Box fix 1 - Fijar prisma 1 + + Box fix 1 + Fijar prisma 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - Pieza + + Part + Pieza - Box fix 2 - Fijar prisma 2 + + Box fix 2 + Fijar prisma 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - Pieza + + Part + Pieza - Shape builder... - Generador de forma... + + Shape builder... + Generador de forma... - Advanced utility to create shapes - Utilidad avanzada para crear formas + + Advanced utility to create shapes + Utilidad avanzada para crear formas - - + + + CmdPartChamfer + + + Part + Pieza + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Pieza + + Part + Pieza - Intersection - Intersección + + Intersection + Intersección - Make an intersection of two shapes - Hacer una intersección de dos formas + + Make an intersection of two shapes + Hacer una intersección de dos formas - - + + CmdPartCone - - Part - Pieza + + Part + Pieza - Cone - Cono + + Cone + Cono - Create a cone solid - Crear un cono sólido + + Create a cone solid + Crear un cono sólido - - + + CmdPartCrossSections - - Part - Pieza + + Part + Pieza - Cross-sections... - Cortes transversales... + + Cross-sections... + Cortes transversales... - Cross-sections - Cortes transversales + + Cross-sections + Cortes transversales - - + + CmdPartCut - Part - Pieza + + Part + Pieza - Cut - Cortar + + Cut + Cortar - Make a cut of two shapes - Hacer un corte de dos formas + + Make a cut of two shapes + Hacer un corte de dos formas - - + + CmdPartCylinder - - Part - Pieza + + Part + Pieza - Create a Cylinder - Crear un cilindro + + Create a Cylinder + Crear un cilindro - Cylinder - Cilindro + + Cylinder + Cilindro - - + + CmdPartExport - - Part - Pieza + + Part + Pieza - Export CAD... - Exportar CAD... + + Export CAD... + Exportar CAD... - Exports to a CAD file - Exporta a un archivo CAD + + Exports to a CAD file + Exporta a un archivo CAD - - + + CmdPartExtrude - Part - Pieza + + Part + Pieza - Extrude... - Estruir... + + Extrude... + Estruir... - Extrude a selected sketch - Estruye el croquis seleccionado + + Extrude a selected sketch + Estruye el croquis seleccionado - - + + CmdPartFillet - Part - Pieza + + Part + Pieza - Fillet... - Redondeo... + + Fillet... + Redondeo... - Fillet the selected edges of a shape - Redondea los bordes seleccionados de una forma + + Fillet the selected edges of a shape + Redondea los bordes seleccionados de una forma - - + + CmdPartFuse - Part - Pieza + + Part + Pieza - Union - Unión + + Union + Unión - Make a union of several shapes - Hacer una unión de varias formas + + Make a union of several shapes + Hacer una unión de varias formas - - + + CmdPartImport - Part - Pieza + + Part + Pieza - Imports a CAD file - Importa un archivo de CAD + + Imports a CAD file + Importa un archivo de CAD - Import CAD... - Importar CAD... + + Import CAD... + Importar CAD... - - + + CmdPartImportCurveNet - Part - Pieza + + Part + Pieza - Import a curve network - Importa una red de curvas + + Import a curve network + Importa una red de curvas - Import curve network... - Importa una red de curvas... + + Import curve network... + Importa una red de curvas... - - + + CmdPartLoft - Part - Pieza + + Part + Pieza - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Pieza + + Part + Pieza - Convert to solid - Convertir a sólido + + Convert to solid + Convertir a sólido - Create solid from a shell or compound - Crear sólidos desde un shell o un compuesto + + Create solid from a shell or compound + Crear sólidos desde un shell o un compuesto - - + + CmdPartMirror - Part - Pieza + + Part + Pieza - Mirroring... - Duplicar... + + Mirroring... + Duplicar... - Mirroring a selected shape - Duplicación de una forma seleccionada + + Mirroring a selected shape + Duplicación de una forma seleccionada - - + + CmdPartPickCurveNet - Part - Pieza + + Part + Pieza - Pick curve network - Designe una red de curvas + + Pick curve network + Designe una red de curvas - Pick a curve network - Designa una red de curvas + + Pick a curve network + Designa una red de curvas - - + + CmdPartPrimitives - Part - Pieza + + Part + Pieza - Create primitives... - Crear primitivas... + + Create primitives... + Crear primitivas... - Creation of parametrized geometric primitives - Creación de primitivas geométricas paramétricas + + Creation of parametrized geometric primitives + Creación de primitivas geométricas paramétricas - - + + + CmdPartRefineShape + + + Part + Pieza + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Pieza + + Part + Pieza - Reverse shapes - Invertir formas + + Reverse shapes + Invertir formas - Reverse orientation of shapes - Invertir la orientación de las formas + + Reverse orientation of shapes + Invertir la orientación de las formas - - + + CmdPartRevolve - Part - Pieza + + Part + Pieza - Revolve... - Girar... + + Revolve... + Girar... - Revolve a selected shape - Girar una forma seleccionada + + Revolve a selected shape + Girar una forma seleccionada - - + + CmdPartRuledSurface - Part - Pieza + + Part + Pieza - Create ruled surface - Crear superficie reglada + + Create ruled surface + Crear superficie reglada - Create a ruled surface from two curves - Crear una superficie reglada a partir de dos curvas + + Create a ruled surface from two curves + Crear una superficie reglada a partir de dos curvas - - + + CmdPartSection - Make a section of two shapes - Hacer una sección de dos formas + + Make a section of two shapes + Hacer una sección de dos formas - Part - Pieza + + Part + Pieza - Section - Sección + + Section + Sección - - + + CmdPartShapeFromMesh - - Part - Pieza + + Part + Pieza - Create shape from mesh... - Crear forma de malla... + + Create shape from mesh... + Crear forma de malla... - Create shape from selected mesh object - Crear la forma del objeto de malla seleccionada + + Create shape from selected mesh object + Crear la forma del objeto de malla seleccionada - - + + CmdPartSimpleCopy - Part - Pieza + + Part + Pieza - Create simple copy - Crear copia simple + + Create simple copy + Crear copia simple - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Pieza + + Part + Pieza - Create Cylinder... - Crear cilindro... + + Create Cylinder... + Crear cilindro... - Create a Cylinder - Crear un cilindro + + Create a Cylinder + Crear un cilindro - - + + CmdPartSphere - - Create a sphere solid - Crear una esfera sólida + + Create a sphere solid + Crear una esfera sólida - Part - Pieza + + Part + Pieza - Sphere - Esfera + + Sphere + Esfera - - + + + CmdPartSweep + + + Part + Pieza + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Crear un toroide sólido + + Create a torus solid + Crear un toroide sólido - Part - Pieza + + Part + Pieza - Torus - Toro + + Torus + Toro - - + + DlgExtrusion - Select a shape for extrusion, first. - Seleccione una forma para la extrusión, en primer lugar. + Select a shape for extrusion, first. + Seleccione una forma para la extrusión, en primer lugar. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Primero seleccione una forma de revolución. + Select a shape for revolution, first. + Primero seleccione una forma de revolución. - - + + DlgSettings3DViewPart - Deviation - Desviación + Deviation + Desviación - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Seleccionando una desviación demasiado pequeña causa que la teselación tome un valor más grande, pudiendo congelar o ralentizar la GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Seleccionando una desviación demasiado pequeña causa que la teselación tome un valor más grande, pudiendo congelar o ralentizar la GUI. - - + + PartGui::CrossSections - - Cross sections - Cortes transversales + + Cross sections + Cortes transversales - Guiding plane - Plano de rector + + Guiding plane + Plano de rector - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Posición: + + Position: + Posición: - Sections - Secciones + + Sections + Secciones - On both sides - A ambos lados + + On both sides + A ambos lados - Count - Count + + Count + Count - Distance: - Distancia: + + Distance: + Distancia: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Operación booleana + + Boolean Operation + Operación booleana - Second shape - Segunda forma + + Second shape + Segunda forma - First shape - Primera forma + + First shape + Primera forma - Boolean operation - Operación booleana + + Boolean operation + Operación booleana - Section - Sección + + Section + Sección - Difference - Diferencia + + Difference + Diferencia - Union - Unión + + Union + Unión - Intersection - Intersección + + Intersection + Intersección - - Cannot perform a boolean operation with the same shape - No es posible realizar una operación booleana con la misma forma + + Cannot perform a boolean operation with the same shape + No es posible realizar una operación booleana con la misma forma - - Solids - Sólidos + + + Solids + Sólidos - Shells - Shells + + + Shells + Shells - Compounds - Compuestos + + + Compounds + Compuestos - Faces - Caras + + + Faces + Caras - Swap selection - Intercambiar selección + + Swap selection + Intercambiar selección - - Select a shape on the left side, first - Seleccione primero una forma en el lado izquierdo, + + Select a shape on the left side, first + Seleccione primero una forma en el lado izquierdo, - Select a shape on the right side, first - Seleccione primero una forma en el lado derecho, + + Select a shape on the right side, first + Seleccione primero una forma en el lado derecho, - No active document available - Ningún documento activo disponible + + No active document available + Ningún documento activo disponible - One of the selected objects doesn't exist anymore - Uno de los objetos seleccionados ya no existe + + One of the selected objects doesn't exist anymore + Uno de los objetos seleccionados ya no existe - Performing union on non-solids is not possible - No es posible realizar la Unión en no sólidos + + Performing union on non-solids is not possible + No es posible realizar la Unión en no sólidos - Performing intersection on non-solids is not possible - No es posible realizar la intersección en no sólidos + + Performing intersection on non-solids is not possible + No es posible realizar la intersección en no sólidos - Performing difference on non-solids is not possible - No es posible realizar la diferencia en no sólidos + + Performing difference on non-solids is not possible + No es posible realizar la diferencia en no sólidos - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Extrusión + + Extrude + Extrusión - Direction - Dirección + + Direction + Dirección - Along normal - A lo largo de la normal + + Along normal + A lo largo de la normal - Length: - Longitud: + + Length: + Longitud: - 3D view - Vista 3D + + 3D view + Vista 3D - Note:This option works for planes only - Nota: Esta opción funciona solo para planos + + Note:This option works for planes only + Nota: Esta opción funciona solo para planos - Shape - Forma + + Create solid + Crear sólido - - (Vacio) + + Taper outward angle + - X: - X: + + Shape + Forma - Z: - Z: + + (Vacio) - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Seleccione una forma para la extrusión, en primer lugar. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Seleccione una forma para la extrusión, en primer lugar. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Redondear bordes + + Fillet Edges + Redondear bordes - Fillet Parameter - Parámetro de redondeo + + Fillet Parameter + Parámetro de redondeo - Radius: - Radio: + + Radius: + Radio: - Fillet type: - Tipo de redondeo: + + Fillet type: + Tipo de redondeo: - Constant Radius - Radio constante + + Constant Radius + Radio constante - Variable Radius - Radio variable + + Variable Radius + Radio variable - Shape - Forma + + Shape + Forma - Selected shape: - Figura seleccionada: + + Selected shape: + Figura seleccionada: - No selection - Ninguna selección + + No selection + Ninguna selección - - Edges to fillet - Bordes a redondear + + Edges to fillet + Bordes a redondear - Start radius - Radio inicial + + + Start radius + Radio inicial - End radius - Radio final + + End radius + Radio final - Radius - Radio + + Radius + Radio - No edge selected - Ningún borde seleccionado + + No edge selected + Ningún borde seleccionado - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Ninguna entidad de borde está marcada para redondear. + Ninguna entidad de borde está marcada para redondear. Por favor seleccione una o más entidades de borde primero. - - All - Todo + + All + Todo - None - Nada + + None + Nada - - Edge%1 - Lado %1 + + + Edge%1 + Lado %1 - No shape selected - No hay forma seleccionada + + No shape selected + No hay forma seleccionada - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - No se ha seleccionado ninguna forma válida. Por favor, primero seleccione una forma válida en el cuadro desplegable. + No se ha seleccionado ninguna forma válida. Por favor, primero seleccione una forma válida en el cuadro desplegable. - - + + PartGui::DlgPartBox - - Box definition - Definición de prisma + + Box definition + Definición de prisma - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Cancelar + + Cancel + Cancelar - OK - Aceptar + + OK + Aceptar - Size: - Tamaño: + + Size: + Tamaño: - Height: - Altura: + + Height: + Altura: - Width: - Ancho: + + Width: + Ancho: - Length: - Longitud: + + Length: + Longitud: - Position: - Posición: + + Position: + Posición: - Direction: - Dirección: + + Direction: + Dirección: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Definición de cilindro + + Cylinder definition + Definición de cilindro - Parameter - Parámetro + + Parameter + Parámetro - Height: - Altura: + + Height: + Altura: - Radius: - Radio: + + Radius: + Radio: - Position: - Posición: + + Position: + Posición: - Direction: - Dirección: + + Direction: + Dirección: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - Aceptar + + OK + Aceptar - Cancel - Cancelar + + Cancel + Cancelar - - + + PartGui::DlgPartImportIges - - IGES input file - Archivo de entrada IGES + + IGES input file + Archivo de entrada IGES - ... - ... + + ... + ... - Cancel - Cancelar + + Cancel + Cancelar - OK - Aceptar + + OK + Aceptar - File Name - Nombre de archivo + + File Name + Nombre de archivo - - (Vacio) + + (Vacio) - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Todos los archivos (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Todos los archivos (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Cancelar + + Cancel + Cancelar - OK - Aceptar + + OK + Aceptar - Step input file - Archivo de entrada Step + + Step input file + Archivo de entrada Step - File Name - Nombre de archivo + + File Name + Nombre de archivo - - (Vacio) + + (Vacio) - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Todos los archivos (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Todos los archivos (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Primitivas geométricas + + Geometric Primitives + Primitivas geométricas - Primitive - primitiva + Primitive + primitiva - X min - X mín + X min + X mín - x max - x máx + x max + x máx - Y min - Y mín + Y min + Y mín - Y max - Y máx + Y max + Y máx - Z min - Z mín + Z min + Z mín - Z max - Z máx + Z max + Z máx - X2 min - X2 mín + X2 min + X2 mín - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - Valor del eje X: + X Axis Value: + Valor del eje X: - Y Axis Value: - Valor del eje Y: + Y Axis Value: + Valor del eje Y: - Z Axis Value: - Valor del eje Z: + Z Axis Value: + Valor del eje Z: - Wedge - Wedge + + Wedge + Wedge - Circle - Circunferencia + + Circle + Circunferencia - Vertex - Vertex + Vertex + Vertex - Position - Posición + Position + Posición - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Dirección: + Direction: + Dirección: - Y: - Y: + + + + Y: + Y: - Plane - Plano + + Plane + Plano - Box - Caja + + Box + Caja - Cylinder - Cilindro + + Cylinder + Cilindro - Cone - Cono + + Cone + Cono - Sphere - Esfera + + Sphere + Esfera - Ellipsoid - Elipsoide + + Ellipsoid + Elipsoide - Torus - Toro + + Torus + Toro - Parameter - Parámetro + + Ellipse + - Width: - Ancho: + + Point + - Length: - Longitud: + + Line + - Height: - Altura: + + Parameter + Parámetro - Angle: - Ángulo: + + + Width: + Ancho: - Radius: - Radio: + + + Length: + Longitud: - Radius 1: - Radio 1: + + + + + Height: + Altura: - Radius 2: - Radio 2: + + + + Angle: + Ángulo: - U parametric: - U paramétrica: + + + + + Radius: + Radio: - V parametric: - V paramétrica: + + + + Radius 1: + Radio 1: - &Create - &Crear + + + + Radius 2: + Radio 2: - Alt+C - Alt+C + + + + U parametric: + U paramétrica: - Cl&ose - &Cerrar + + + + V parametric: + V paramétrica: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Crear %1 + + Y min/max: + - No active document - Ningún documento activo + + Z min/max: + - - Pitch: - Tono: + + X2 min/max: + - Helix - Hélice + + Z2 min/max: + - 3D View - Vista 3D + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Crear + + + Alt+C + Alt+C + + + Cl&ose + &Cerrar + + + Alt+O + Alt+O + + + + + + Create %1 + Crear %1 + + + + No active document + Ningún documento activo + + + + Pitch: + Tono: + + + + Helix + Hélice + + + 3D View + Vista 3D + + + PartGui::DlgRevolution - - Revolve - Girar + + Revolve + Girar - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Ángulo: + + Angle: + Ángulo: - Z: - Z: + + Z: + Z: - Axis: - Eje: + + Axis: + Eje: - Shape - Forma + + Shape + Forma - - Select a shape for revolution, first. - Primero seleccione una forma de revolución. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Primero seleccione una forma de revolución. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Vista Precisión / Rendimiento + + View accuracy / Performance + Vista Precisión / Rendimiento - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Utilizar normales de alta calidad + + Using high-quality normals + Utilizar normales de alta calidad - This will slow down render speed but will lead to nicer results - Esto ralentizará la velocidad de render pero proporcionará mejores resultados + + This will slow down render speed but will lead to nicer results + Esto ralentizará la velocidad de render pero proporcionará mejores resultados - Defines the appearance of surfaces - Define la apariencia de las superficies + + Defines the appearance of surfaces + Define la apariencia de las superficies - Shape view - Vista forma + + Shape view + Vista forma - Tessellation - Teselado + + Tessellation + Teselado - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Sombreado plano/Sombreado Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Con sombreado plano las normales de la superficie no están definidas por vértice lo que conlleva a una apariencia no real para las superficies curvas mientras que utilizando el sombreado Phong se consigue una apariencia más suavizada. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si esta opción no está activada se utilizará el sombreado Phon y si está activadase utilizará el sombreado plano.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Sombreado plano/Sombreado Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Con sombreado plano las normales de la superficie no están definidas por vértice lo que conlleva a una apariencia no real para las superficies curvas mientras que utilizando el sombreado Phong se consigue una apariencia más suavizada. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si esta opción no está activada se utilizará el sombreado Phon y si está activadase utilizará el sombreado plano.</p></body></html> - Do not define normal per vertex - No definir la normal por vértice + + Do not define normal per vertex + No definir la normal por vértice - Defines the deviation of tessellation to the actual surface - Define la desviación del teselado de la superfice actual + + Defines the deviation of tessellation to the actual surface + Define la desviación del teselado de la superfice actual - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Teselado</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defin e la desviación máxima del teselado de la malla de la superficie. El menor valor es el renderizado más lento en velocidad y el mejor en apariencia.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Teselado</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defin e la desviación máxima del teselado de la malla de la superficie. El menor valor es el renderizado más lento en velocidad y el mejor en apariencia.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">La definición de las normales por vértice también se llama <span style=" font-style:italic;">Sombreado Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mientras que la definición de las normales por cara también se llama </span>Sombreado plano<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">La definición de las normales por vértice también se llama <span style=" font-style:italic;">Sombreado Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mientras que la definición de las normales por cara también se llama </span>Sombreado plano<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Normales de alta calidad</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Esto ralentizará la velocidad del render pero permitirá mejores resultados.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Normales de alta calidad</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Esto ralentizará la velocidad del render pero permitirá mejores resultados.</p></body></html> - Maximum deviation depending on the model bounding box - Desviación máxima según el modelo de cuadro delimitador + + Maximum deviation depending on the model bounding box + Desviación máxima según el modelo de cuadro delimitador - % - % + + % + % - - Deviation - Desviación + + Deviation + Desviación - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Seleccionando una desviación demasiado pequeña causa que la teselación tome un valor más grande, pudiendo congelar o ralentizar la GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Seleccionando una desviación demasiado pequeña causa que la teselación tome un valor más grande, pudiendo congelar o ralentizar la GUI. - - + + PartGui::DlgSettingsGeneral - - General - General + + General + General - Export - Exportar + + Export + Exportar - Millimeter - Milímetro + + Millimeter + Milímetro - Meter - Metro + + Meter + Metro - Inch - Pulgada + + Inch + Pulgada - Units for export of STEP/IGES - Unidades para exportar a STEP/IGES + + Units for export of STEP/IGES + Unidades para exportar a STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Posición + + + + 3D View + Vista 3D + + + PartGui::LoftWidget - - Too few elements - Too few elements + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Too few elements + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Duplicar + + Mirroring + Duplicar - Shapes - Formas + + Shapes + Formas - Mirror plane: - Espejo plano: + + Mirror plane: + Espejo plano: - XY plane - Plano XY + + XY plane + Plano XY - XZ plane - Plano XZ + + XZ plane + Plano XZ - YZ plane - Plano YZ + + YZ plane + Plano YZ - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Primero seleccione una forma de creación de reflejo. + + Select a shape for mirroring, first. + Primero seleccione una forma de creación de reflejo. - No such document '%1'. - Ningún documento '%1'. + + No such document '%1'. + Ningún documento '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Selección incorrecta + + + + + + Wrong selection + Selección incorrecta - Select two vertices - Select two vertices + + + Select two vertices + Select two vertices - Select three or more edges - Select three or more edges + Select three or more edges + Select three or more edges - Select two or more faces - Seleccione dos o más caras + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Seleccione dos o más caras - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Seleccione un conjunto cerrado de bordes + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - Seleccione las caras adyacentes + + Select a closed set of edges + Seleccione un conjunto cerrado de bordes - All shape types can be selected - Se pueden seleccionar todos los tipos de forma + + Select adjacent faces + Seleccione las caras adyacentes - - + + + All shape types can be selected + Se pueden seleccionar todos los tipos de forma + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Too few elements + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Valor + Value + Valor - Special - Special + Special + Special - Command - Comando + Command + Comando - Stretch - Stretch + Stretch + Stretch - Move - Mover + Move + Mover - Rotate - Girar + Rotate + Girar - Offset - Equidistancia + Offset + Equidistancia - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Set color per face + + Set color per face + Set color per face - Click on the faces in the 3d view to select them. - Haga clic en las caras en la vista 3D para seleccionarlos. + + Click on the faces in the 3d view to select them. + Haga clic en las caras en la vista 3D para seleccionarlos. - Faces: - Caras: + + Faces: + Caras: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Mover a la derecha + Move right + Mover a la derecha - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Mueva el elemento seleccionado un nivel hacia abajo.</b><p>Esto también cambiará el nivel del elemento padre.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Mueva el elemento seleccionado un nivel hacia abajo.</b><p>Esto también cambiará el nivel del elemento padre.</p> - Move left - Mover a la izquierda + Move left + Mover a la izquierda - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Mueva el elemento seleccionado un nivel hacia arriba.</b><p>Esto también cambiará el nivel del elemento padre.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Mueva el elemento seleccionado un nivel hacia arriba.</b><p>Esto también cambiará el nivel del elemento padre.</p> - Move up - Mover hacia arriba + Move up + Mover hacia arriba - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mueva el elemento seleccionado hacia arriba.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mueva el elemento seleccionado hacia arriba.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> - Move down - Mover hacia abajo + Move down + Mover hacia abajo - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mueva el elemento seleccionado hacia abajo.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mueva el elemento seleccionado hacia abajo.</b><p>El elemento se moverá dentro del nivel de jerarquía.</p> - Create solid - Crear sólido + + Create solid + Crear sólido - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Crear forma + + + Create shape + Crear forma - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Crear + + Create + Crear - All faces - Todas las caras + + All faces + Todas las caras - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Crear sólido + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Selección incorrecta + + + + + + Wrong selection + Selección incorrecta - Select two shapes please. - Seleccione dos formas por favor. + + + Select two shapes please. + Seleccione dos formas por favor. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Todos los archivos de CAD (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Todos los archivos de CAD (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Todos los archivos (*.*) + + + + All Files (*.*) + Todos los archivos (*.*) - - Sewing Tolerance - Tolerancia del modo coser + + Sewing Tolerance + Tolerancia del modo coser - Enter tolerance for sewing shape: - Introduzca la tolerancia para forma cosida: + + Enter tolerance for sewing shape: + Introduzca la tolerancia para forma cosida: - - Edit mirror plane - Editar plano de simetría + + Edit mirror plane + Editar plano de simetría - Transform - Transformar + + Edit chamfer edges + - - Part design - Diseño de piezas + Transform + Transformar - - Select two shapes or more, please. - Seleccione dos o más formas, por favor. + + + Part design + Diseño de piezas - You have to select either two edges or two wires. - Tiene que seleccionar dos aristas o dos alambres. + + + Select two shapes or more, please. + Seleccione dos o más formas, por favor. - - Edit fillet edges - Editar aristas redondeadas + + You have to select either two edges or two wires. + Tiene que seleccionar dos aristas o dos alambres. - - Set colors... - Ajustar colores... + + Edit fillet edges + Editar aristas redondeadas - - + + + Set colors... + Ajustar colores... + + + Workbench - - &Part - &Pieza + + &Part + &Pieza - &Simple - &Simple + + &Simple + &Simple - &Parametric - &Paramétrico + + &Parametric + &Paramétrico - Part tools - Herramientas de pieza + + Part tools + Herramientas de pieza - Solids - Sólidos + + Solids + Sólidos - Boolean - Booleano + + Boolean + Booleano - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_fi.ts b/src/Mod/Part/Gui/Resources/translations/Part_fi.ts index 43b960994..f1853d536 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_fi.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_fi.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Lohkon määrittely + + Block definition + Lohkon määrittely - First limit - Ensimmäinen raja + + First limit + Ensimmäinen raja - Type: - Tyyppi: + + + Type: + Tyyppi: - mm - mm + + + mm + mm - Length: - Pituus: + + + Length: + Pituus: - Dimension - Mitta + + + Dimension + Mitta - Up to next - Ylös seuraavaan + + + Up to next + Ylös seuraavaan - Up to last - Ylös viimeiseen + + + Up to last + Ylös viimeiseen - Up to plane - Ylös tasoon + + + Up to plane + Ylös tasoon - Up to face - Ylös pintaan + + + Up to face + Ylös pintaan - Limit: - Raja: + + + Limit: + Raja: - No selection - Ei valintaa + + + + + No selection + Ei valintaa - Profile - Profiili + + Profile + Profiili - Selection: - Valinta: + + Selection: + Valinta: - Reverse - Käänteinen + + Reverse + Käänteinen - Both sides - Molemmat puolet + + Both sides + Molemmat puolet - Second limit - Toinen raja + + Second limit + Toinen raja - Direction - Suunta + + Direction + Suunta - Perpendicular to sketch - Kohtisuorassa luonnokseen nähden + + Perpendicular to sketch + Kohtisuorassa luonnokseen nähden - Reference - Viittaus + + Reference + Viittaus - Apply - Käytä + + Apply + Käytä - Cancel - Peruuta + + Cancel + Peruuta - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - osa + + Part + osa - Boolean... - Boolean... + + Boolean... + Boolean... - Run a boolean operation with two shapes selected - Suorita boolean toiminto kahdella valitulla muodolla + + Run a boolean operation with two shapes selected + Suorita boolean toiminto kahdella valitulla muodolla - - + + CmdPartBox - - Part - osa + + Part + osa - Box - Laatikko + + Box + Laatikko - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - osa + + Part + osa - Box fix 1 - Laatikon 1 kiinnitys + + Box fix 1 + Laatikon 1 kiinnitys - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - osa + + Part + osa - Box fix 2 - Laatikon 2 kiinnitys + + Box fix 2 + Laatikon 2 kiinnitys - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - osa + + Part + osa - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + osa + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - osa + + Part + osa - Intersection - Risteys + + Intersection + Risteys - Make an intersection of two shapes - Make an intersection of two shapes + + Make an intersection of two shapes + Make an intersection of two shapes - - + + CmdPartCone - - Part - osa + + Part + osa - Cone - Kartio + + Cone + Kartio - Create a cone solid - Create a cone solid + + Create a cone solid + Create a cone solid - - + + CmdPartCrossSections - - Part - osa + + Part + osa - Cross-sections... - Poikkileikkaukset... + + Cross-sections... + Poikkileikkaukset... - Cross-sections - Poikkileikkaukset + + Cross-sections + Poikkileikkaukset - - + + CmdPartCut - Part - osa + + Part + osa - Cut - Leikkaa + + Cut + Leikkaa - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - osa + + Part + osa - Create a Cylinder - Luo Sylinteri + + Create a Cylinder + Luo Sylinteri - Cylinder - Sylinteri + + Cylinder + Sylinteri - - + + CmdPartExport - - Part - osa + + Part + osa - Export CAD... - Export CAD... + + Export CAD... + Export CAD... - Exports to a CAD file - Exports to a CAD file + + Exports to a CAD file + Exports to a CAD file - - + + CmdPartExtrude - Part - osa + + Part + osa - Extrude... - Pursota... + + Extrude... + Pursota... - Extrude a selected sketch - Pursota valittu luonnos + + Extrude a selected sketch + Pursota valittu luonnos - - + + CmdPartFillet - Part - osa + + Part + osa - Fillet... - Pyöristys... + + Fillet... + Pyöristys... - Fillet the selected edges of a shape - Pyöristä muodon valitut särmät + + Fillet the selected edges of a shape + Pyöristä muodon valitut särmät - - + + CmdPartFuse - Part - osa + + Part + osa - Union - Yhdiste + + Union + Yhdiste - Make a union of several shapes - Make a union of several shapes + + Make a union of several shapes + Make a union of several shapes - - + + CmdPartImport - Part - osa + + Part + osa - Imports a CAD file - Tuo CAD tiedoston + + Imports a CAD file + Tuo CAD tiedoston - Import CAD... - Tuo CAD ... + + Import CAD... + Tuo CAD ... - - + + CmdPartImportCurveNet - Part - osa + + Part + osa - Import a curve network - Tuo käyrä-verkko + + Import a curve network + Tuo käyrä-verkko - Import curve network... - Tuo käyrä-verkko... + + Import curve network... + Tuo käyrä-verkko... - - + + CmdPartLoft - Part - osa + + Part + osa - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - osa + + Part + osa - Convert to solid - Muunnta kiinteäksi + + Convert to solid + Muunnta kiinteäksi - Create solid from a shell or compound - Luo kiinteä kuoresta tai yhdisteestä + + Create solid from a shell or compound + Luo kiinteä kuoresta tai yhdisteestä - - + + CmdPartMirror - Part - osa + + Part + osa - Mirroring... - Peilaus... + + Mirroring... + Peilaus... - Mirroring a selected shape - Valitun muodon peilaus + + Mirroring a selected shape + Valitun muodon peilaus - - + + CmdPartPickCurveNet - Part - osa + + Part + osa - Pick curve network - Valitse käyrä-verkko + + Pick curve network + Valitse käyrä-verkko - Pick a curve network - Valitse käyrä-verkko + + Pick a curve network + Valitse käyrä-verkko - - + + CmdPartPrimitives - Part - osa + + Part + osa - Create primitives... - Luo primitiivit... + + Create primitives... + Luo primitiivit... - Creation of parametrized geometric primitives - Parametrisoitujen geometristen primitiivien luonti + + Creation of parametrized geometric primitives + Parametrisoitujen geometristen primitiivien luonti - - + + + CmdPartRefineShape + + + Part + osa + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - osa + + Part + osa - Reverse shapes - Käänteiset muodot + + Reverse shapes + Käänteiset muodot - Reverse orientation of shapes - Käännä muotojen suunta + + Reverse orientation of shapes + Käännä muotojen suunta - - + + CmdPartRevolve - Part - osa + + Part + osa - Revolve... - Pyöräytä... + + Revolve... + Pyöräytä... - Revolve a selected shape - Valitun muodon pyöräytys + + Revolve a selected shape + Valitun muodon pyöräytys - - + + CmdPartRuledSurface - Part - osa + + Part + osa - Create ruled surface - Create ruled surface + + Create ruled surface + Create ruled surface - Create a ruled surface from two curves - Create a ruled surface from two curves + + Create a ruled surface from two curves + Create a ruled surface from two curves - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - osa + + Part + osa - Section - Leikkaus + + Section + Leikkaus - - + + CmdPartShapeFromMesh - - Part - osa + + Part + osa - Create shape from mesh... - luo muoto verkosta... + + Create shape from mesh... + luo muoto verkosta... - Create shape from selected mesh object - luo muoto valituista verkko kohteista + + Create shape from selected mesh object + luo muoto valituista verkko kohteista - - + + CmdPartSimpleCopy - Part - osa + + Part + osa - Create simple copy - Create simple copy + + Create simple copy + Create simple copy - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - osa + + Part + osa - Create Cylinder... - Luo sylinteri... + + Create Cylinder... + Luo sylinteri... - Create a Cylinder - Luo Sylinteri + + Create a Cylinder + Luo Sylinteri - - + + CmdPartSphere - - Create a sphere solid - Create a sphere solid + + Create a sphere solid + Create a sphere solid - Part - osa + + Part + osa - Sphere - Pallo(kuori) + + Sphere + Pallo(kuori) - - + + + CmdPartSweep + + + Part + osa + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Create a torus solid + + Create a torus solid + Create a torus solid - Part - osa + + Part + osa - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Valitse pursotettava muoto, ensimmäinen. + Select a shape for extrusion, first. + Valitse pursotettava muoto, ensimmäinen. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Valitse pyöräytysmuoto. + Select a shape for revolution, first. + Valitse pyöräytysmuoto. - - + + DlgSettings3DViewPart - Deviation - Deviation + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Poikkileikkaukset + + Cross sections + Poikkileikkaukset - Guiding plane - Ohjaus taso + + Guiding plane + Ohjaus taso - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Sijainti: + + Position: + Sijainti: - Sections - Leikkaukset + + Sections + Leikkaukset - On both sides - Molemmille puolille + + On both sides + Molemmille puolille - Count - Määrä + + Count + Määrä - Distance: - Etäisyys: + + Distance: + Etäisyys: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Boolen operaatio + + Boolean Operation + Boolen operaatio - Second shape - Toinen muoto + + Second shape + Toinen muoto - First shape - Ensimmäinen muoto + + First shape + Ensimmäinen muoto - Boolean operation - Boolen operaatio + + Boolean operation + Boolen operaatio - Section - Leikkaus + + Section + Leikkaus - Difference - Erotus + + Difference + Erotus - Union - Yhdiste + + Union + Yhdiste - Intersection - Risteys + + Intersection + Risteys - - Cannot perform a boolean operation with the same shape - Ei voi suorittaa boolean toimintoa saman muodon kanssa + + Cannot perform a boolean operation with the same shape + Ei voi suorittaa boolean toimintoa saman muodon kanssa - - Solids - Kiinteät + + + Solids + Kiinteät - Shells - Kuoret + + + Shells + Kuoret - Compounds - Yhdisteet + + + Compounds + Yhdisteet - Faces - Pinnat + + + Faces + Pinnat - Swap selection - Vaihda valinta + + Swap selection + Vaihda valinta - - Select a shape on the left side, first - Valitse vasemmanpuolinen muoto + + Select a shape on the left side, first + Valitse vasemmanpuolinen muoto - Select a shape on the right side, first - Valitse oikeanpuolinen muoto + + Select a shape on the right side, first + Valitse oikeanpuolinen muoto - No active document available - Ei aktiivista asiakirjaa saatavilla + + No active document available + Ei aktiivista asiakirjaa saatavilla - One of the selected objects doesn't exist anymore - Yhtä valittua kohdetta ei ole enää + + One of the selected objects doesn't exist anymore + Yhtä valittua kohdetta ei ole enää - Performing union on non-solids is not possible - virtuaalisten kappaleiden yhdistäminen ei ole mahdollista + + Performing union on non-solids is not possible + virtuaalisten kappaleiden yhdistäminen ei ole mahdollista - Performing intersection on non-solids is not possible - virtuaalisten kappaleiden risteys ei ole mahdollinen + + Performing intersection on non-solids is not possible + virtuaalisten kappaleiden risteys ei ole mahdollinen - Performing difference on non-solids is not possible - virtuaalisten kappaleiden erottaminen ei ole mahdollista + + Performing difference on non-solids is not possible + virtuaalisten kappaleiden erottaminen ei ole mahdollista - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Pursota + + Extrude + Pursota - Direction - Suunta + + Direction + Suunta - Along normal - Normaali pitkin + + Along normal + Normaali pitkin - Length: - Pituus: + + Length: + Pituus: - 3D view - 3D view + + 3D view + 3D view - Note:This option works for planes only - Note:This option works for planes only + + Note:This option works for planes only + Note:This option works for planes only - Shape - Muoto + + Create solid + Create solid - - + + Taper outward angle + - X: - x: + + Shape + Muoto - Z: - Z: + + - Y: - Y: + + X: + x: - - Select a shape for extrusion, first. - Valitse pursotettava muoto, ensimmäinen. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Valitse pursotettava muoto, ensimmäinen. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Reunojen pyöristys + + Fillet Edges + Reunojen pyöristys - Fillet Parameter - Pyäristys parametri + + Fillet Parameter + Pyäristys parametri - Radius: - Säde: + + Radius: + Säde: - Fillet type: - Pyöristys tyyppi: + + Fillet type: + Pyöristys tyyppi: - Constant Radius - Jatkuva Säde + + Constant Radius + Jatkuva Säde - Variable Radius - Muuttuva Säde + + Variable Radius + Muuttuva Säde - Shape - Muoto + + Shape + Muoto - Selected shape: - Valittu muoto: + + Selected shape: + Valittu muoto: - No selection - Ei valintaa + + No selection + Ei valintaa - - Edges to fillet - pyöristettävät reunat + + Edges to fillet + pyöristettävät reunat - Start radius - Säteen alku + + + Start radius + Säteen alku - End radius - Säteen loppu + + End radius + Säteen loppu - Radius - Säde + + Radius + Säde - No edge selected - Ei valittua reunaa + + No edge selected + Ei valittua reunaa - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Reuna kokonaisuutta ei ole valittu pyöristykseen. + Reuna kokonaisuutta ei ole valittu pyöristykseen. Ole hyvä valitse yksi tai useampi reuna kokonaisuus. - - All - kaikki + + All + kaikki - None - Ei mitään + + None + Ei mitään - - Edge%1 - Reuna %1 + + + Edge%1 + Reuna %1 - No shape selected - Ei valittua muotoa + + No shape selected + Ei valittua muotoa - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Kelvollista muotoa ei ole valittu. + Kelvollista muotoa ei ole valittu. Ole hyvä ja valitse kelvollinen muoto alas veto laatikosta. - - + + PartGui::DlgPartBox - - Box definition - Laatikon määrittely + + Box definition + Laatikon määrittely - X: - x: + + X: + x: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Peruuta + + Cancel + Peruuta - OK - OK + + OK + OK - Size: - Koko: + + Size: + Koko: - Height: - Korkeus: + + Height: + Korkeus: - Width: - Leveys: + + Width: + Leveys: - Length: - Pituus: + + Length: + Pituus: - Position: - Sijainti: + + Position: + Sijainti: - Direction: - Suunta: + + Direction: + Suunta: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Sylinterin määritelmä + + Cylinder definition + Sylinterin määritelmä - Parameter - Parametri + + Parameter + Parametri - Height: - Korkeus: + + Height: + Korkeus: - Radius: - Säde: + + Radius: + Säde: - Position: - Sijainti: + + Position: + Sijainti: - Direction: - Suunta: + + Direction: + Suunta: - X: - x: + + X: + x: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Peruuta + + Cancel + Peruuta - - + + PartGui::DlgPartImportIges - - IGES input file - IGES syötetiedosto + + IGES input file + IGES syötetiedosto - ... - ... + + ... + ... - Cancel - Peruuta + + Cancel + Peruuta - OK - OK + + OK + OK - File Name - Tiedostonimi + + File Name + Tiedostonimi - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*. IGS *. iges); Kaikki tiedostot (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*. IGS *. iges); Kaikki tiedostot (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Peruuta + + Cancel + Peruuta - OK - OK + + OK + OK - Step input file - STEP syöttötiedosto + + Step input file + STEP syöttötiedosto - File Name - Tiedostonimi + + File Name + Tiedostonimi - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*. STP *. askel), Kaikki tiedostot (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*. STP *. askel), Kaikki tiedostot (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometrinen primitiivi + + Geometric Primitives + Geometrinen primitiivi - Primitive - Primitiivi + Primitive + Primitiivi - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X Axis Value: + X Axis Value: + X Axis Value: - Y Axis Value: - Y Axis Value: + Y Axis Value: + Y Axis Value: - Z Axis Value: - Z Axis Value: + Z Axis Value: + Z Axis Value: - Wedge - Wedge + + Wedge + Wedge - Circle - Ympyrä + + Circle + Ympyrä - Vertex - Vertex + Vertex + Vertex - Position - Sijainti + Position + Sijainti - Z: - Z: + + + + Z: + Z: - X: - x: + + + + X: + x: - Direction: - Suunta: + Direction: + Suunta: - Y: - Y: + + + + Y: + Y: - Plane - Taso + + Plane + Taso - Box - Laatikko + + Box + Laatikko - Cylinder - Sylinteri + + Cylinder + Sylinteri - Cone - Kartio + + Cone + Kartio - Sphere - Pallo(kuori) + + Sphere + Pallo(kuori) - Ellipsoid - Ellipsoidi + + Ellipsoid + Ellipsoidi - Torus - Torus + + Torus + Torus - Parameter - Parametri + + Ellipse + - Width: - Leveys: + + Point + - Length: - Pituus: + + Line + - Height: - Korkeus: + + Parameter + Parametri - Angle: - Kulma: + + + Width: + Leveys: - Radius: - Säde: + + + Length: + Pituus: - Radius 1: - Säde 1: + + + + + Height: + Korkeus: - Radius 2: - Säde 2: + + + + Angle: + Kulma: - U parametric: - U parametrinen: + + + + + Radius: + Säde: - V parametric: - V parametrinen: + + + + Radius 1: + Säde 1: - &Create - &Luo + + + + Radius 2: + Säde 2: - Alt+C - Alt + C + + + + U parametric: + U parametrinen: - Cl&ose - Sulje + + + + V parametric: + V parametrinen: - Alt+O - Alt + O + + X min/max: + - - Create %1 - Luo %1 + + Y min/max: + - No active document - Ei aktiivista dokumenttia + + Z min/max: + - - Pitch: - Kaltevuus: + + X2 min/max: + - Helix - Kierre + + Z2 min/max: + - 3D View - 3D-näkymä + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Luo + + + Alt+C + Alt + C + + + Cl&ose + Sulje + + + Alt+O + Alt + O + + + + + + Create %1 + Luo %1 + + + + No active document + Ei aktiivista dokumenttia + + + + Pitch: + Kaltevuus: + + + + Helix + Kierre + + + 3D View + 3D-näkymä + + + PartGui::DlgRevolution - - Revolve - Pyöräytä + + Revolve + Pyöräytä - Y: - Y: + + Y: + Y: - X: - x: + + X: + x: - Angle: - Kulma: + + Angle: + Kulma: - Z: - Z: + + Z: + Z: - Axis: - Akseli: + + Axis: + Akseli: - Shape - Muoto + + Shape + Muoto - - Select a shape for revolution, first. - Valitse pyöräytysmuoto. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Valitse pyöräytysmuoto. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Näytä tarkkuus / suorituskyky + + View accuracy / Performance + Näytä tarkkuus / suorituskyky - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Käytetään korkea-laatuisia vakioita + + Using high-quality normals + Käytetään korkea-laatuisia vakioita - This will slow down render speed but will lead to nicer results - Tämä hidastaa renderöinti nopeutta mutta johtaa hienompiin tuloksiin + + This will slow down render speed but will lead to nicer results + Tämä hidastaa renderöinti nopeutta mutta johtaa hienompiin tuloksiin - Defines the appearance of surfaces - Määrittelee pintojen ulkomuodon + + Defines the appearance of surfaces + Määrittelee pintojen ulkomuodon - Shape view - Muoto näkymä + + Shape view + Muoto näkymä - Tessellation - Mosaiikki + + Tessellation + Mosaiikki - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"> <span style=" font-weight:600;">Flat shading / Phong shading</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Kun tasainen varjostus pinta normaalit ei ole määritelty per piste, joka johtaa epätodellinen ulkoasun kaarevien pintojen käytön aikana Phong shading johtaa pehmeämpi ulkonäkö. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Jos tämä vaihtoehto on katkaistu Phong shading käytetään, jos se on asetettu tasainen varjostus on käytetty. </p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"> <span style=" font-weight:600;">Flat shading / Phong shading</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Kun tasainen varjostus pinta normaalit ei ole määritelty per piste, joka johtaa epätodellinen ulkoasun kaarevien pintojen käytön aikana Phong shading johtaa pehmeämpi ulkonäkö. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Jos tämä vaihtoehto on katkaistu Phong shading käytetään, jos se on asetettu tasainen varjostus on käytetty. </p></body></html> - Do not define normal per vertex - Älä määrittele normaalia kärkipisteeseen + + Do not define normal per vertex + Älä määrittele normaalia kärkipisteeseen - Defines the deviation of tessellation to the actual surface - Mosaiikin poikkeama määritellään todelliseen pintaan + + Defines the deviation of tessellation to the actual surface + Mosaiikin poikkeama määritellään todelliseen pintaan - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"> <span style=" font-weight:600;">Tessellation</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style=" font-weight:400;">Määrittää suurin poikkeama mosaiikki silmän pintaan. Pienempi arvo on hitaampi tehdä nopeutta ja mukavampaa ulkoasua.</span> </p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"> <span style=" font-weight:600;">Tessellation</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style=" font-weight:400;">Määrittää suurin poikkeama mosaiikki silmän pintaan. Pienempi arvo on hitaampi tehdä nopeutta ja mukavampaa ulkoasua.</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Vihje</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Määrittely normaalit per piste kutsutaan myös <span style=" font-style:italic;">Phong shading</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">samalla kun määritellään normaalien kohti edessä on nimeltään</span> Flat <span style=" font-style:normal;">shading.</span> </p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Vihje</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Määrittely normaalit per piste kutsutaan myös <span style=" font-style:italic;">Phong shading</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">samalla kun määritellään normaalien kohti edessä on nimeltään</span> Flat <span style=" font-style:normal;">shading.</span> </p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"> <span style=" font-weight:600;">Laadukas normaalit</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Tämä hidastaa tehdä nopeasti, mutta johtaa mukavampaa tuloksiin. </p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"> <span style=" font-weight:600;">Laadukas normaalit</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Tämä hidastaa tehdä nopeasti, mutta johtaa mukavampaa tuloksiin. </p></body></html> - Maximum deviation depending on the model bounding box - Mallin laatikon maksimi poikkeama + + Maximum deviation depending on the model bounding box + Mallin laatikon maksimi poikkeama - % - % + + % + % - - Deviation - Deviation + + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Yleiset + + General + Yleiset - Export - Vie + + Export + Vie - Millimeter - Millimetri + + Millimeter + Millimetri - Meter - Metri + + Meter + Metri - Inch - Tuuma + + Inch + Tuuma - Units for export of STEP/IGES - Yksiköt STEP / IGES vientiin + + Units for export of STEP/IGES + Yksiköt STEP / IGES vientiin - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Sijainti + + + + 3D View + 3D-näkymä + + + PartGui::LoftWidget - - Too few elements - Too few elements + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Too few elements + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Peilaus + + Mirroring + Peilaus - Shapes - Muodot + + Shapes + Muodot - Mirror plane: - Peilaustaso: + + Mirror plane: + Peilaustaso: - XY plane - XY-taso + + XY plane + XY-taso - XZ plane - XZ taso + + XZ plane + XZ taso - YZ plane - YZ taso + + YZ plane + YZ taso - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - Y + + y + Y - z - z + + z + z - - Select a shape for mirroring, first. - Valitse muoto peilausta varten, ensimmäinen. + + Select a shape for mirroring, first. + Valitse muoto peilausta varten, ensimmäinen. - No such document '%1'. - Ei tällaista asiakirjaa ´%1´. + + No such document '%1'. + Ei tällaista asiakirjaa ´%1´. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Väärä valinta + + + + + + Wrong selection + Väärä valinta - Select two vertices - Select two vertices + + + Select two vertices + Select two vertices - Select three or more edges - Select three or more edges + Select three or more edges + Select three or more edges - Select two or more faces - Select two or more faces + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Select two or more faces - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - Select adjacent faces + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - All shape types can be selected + + Select adjacent faces + Select adjacent faces - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Too few elements + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Arvo + Value + Arvo - Special - Special + Special + Special - Command - Komento + Command + Komento - Stretch - Stretch + Stretch + Stretch - Move - Move + Move + Move - Rotate - Rotate + Rotate + Rotate - Offset - Offset + Offset + Offset - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Set color per face + + Set color per face + Set color per face - Click on the faces in the 3d view to select them. - Click on the faces in the 3d view to select them. + + Click on the faces in the 3d view to select them. + Click on the faces in the 3d view to select them. - Faces: - Faces: + + Faces: + Faces: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Siirrä oikealle + Move right + Siirrä oikealle - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - Move left - Siirrä vasemmalle + Move left + Siirrä vasemmalle - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - Move up - Siirrä ylös + Move up + Siirrä ylös - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - Move down - Siirrä alas + Move down + Siirrä alas - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - Create solid - Create solid + + Create solid + Create solid - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Luo + + Create + Luo - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Create solid + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Väärä valinta + + + + + + Wrong selection + Väärä valinta - Select two shapes please. - Valitse kaksi muotoa kiitos. + + + Select two shapes please. + Valitse kaksi muotoa kiitos. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Kaikki CAD-tiedostot (*. STP *. askel *. IGS *. iges *. BRP *. brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Kaikki CAD-tiedostot (*. STP *. askel *. IGS *. iges *. BRP *. brep) - STEP (*.stp *.step) - STEP (*. STP *. vaihe) + + + + STEP (*.stp *.step) + STEP (*. STP *. vaihe) - IGES (*.igs *.iges) - IGES (*. IGS *. iges) + + + + IGES (*.igs *.iges) + IGES (*. IGS *. iges) - BREP (*.brp *.brep) - BREP (*. BRP *. brep) + + + + BREP (*.brp *.brep) + BREP (*. BRP *. brep) - All Files (*.*) - Kaikki tiedostot (*.*) + + + + All Files (*.*) + Kaikki tiedostot (*.*) - - Sewing Tolerance - Kiinnitys toleranssi + + Sewing Tolerance + Kiinnitys toleranssi - Enter tolerance for sewing shape: - Anna toleranssi kiinnitys muodolle: + + Enter tolerance for sewing shape: + Anna toleranssi kiinnitys muodolle: - - Edit mirror plane - Muokkaa peilaustasoa + + Edit mirror plane + Muokkaa peilaustasoa - Transform - muunna + + Edit chamfer edges + - - Part design - Osa suunnittelu + Transform + muunna - - Select two shapes or more, please. - Select two shapes or more, please. + + + Part design + Osa suunnittelu - You have to select either two edges or two wires. - You have to select either two edges or two wires. + + + Select two shapes or more, please. + Select two shapes or more, please. - - Edit fillet edges - Edit fillet edges + + You have to select either two edges or two wires. + You have to select either two edges or two wires. - - Set colors... - Set colors... + + Edit fillet edges + Edit fillet edges - - + + + Set colors... + Set colors... + + + Workbench - - &Part - osa + + &Part + osa - &Simple - Yksinkertainen + + &Simple + Yksinkertainen - &Parametric - &Parametrinen + + &Parametric + &Parametrinen - Part tools - Osa työkalut + + Part tools + Osa työkalut - Solids - Kiinteät + + Solids + Kiinteät - Boolean - Boolean + + Boolean + Boolean - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_fr.ts b/src/Mod/Part/Gui/Resources/translations/Part_fr.ts index 9c39190fb..7860aeb17 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_fr.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_fr.ts @@ -1,1872 +1,2520 @@ - - + + BlockDefinition - - Block definition - Définition de bloc + + Block definition + Définition de bloc - First limit - Première limite + + First limit + Première limite - Type: - Type : + + + Type: + Type : - mm - mm + + + mm + mm - Length: - Longueur : + + + Length: + Longueur : - Dimension - Dimension + + + Dimension + Dimension - Up to next - Jusqu'au suivant + + + Up to next + Jusqu'au suivant - Up to last - Jusqu'au dernier + + + Up to last + Jusqu'au dernier - Up to plane - Jusqu'au plan + + + Up to plane + Jusqu'au plan - Up to face - Jusqu'à la face + + + Up to face + Jusqu'à la face - Limit: - Limite : + + + Limit: + Limite : - No selection - Aucune sélection + + + + + No selection + Aucune sélection - Profile - Profil + + Profile + Profil - Selection: - Sélection : + + Selection: + Sélection : - Reverse - Inverser + + Reverse + Inverser - Both sides - Deux directions + + Both sides + Deux directions - Second limit - Deuxième limite + + Second limit + Deuxième limite - Direction - Direction + + Direction + Direction - Perpendicular to sketch - Perpendiculaire à l'esquisse + + Perpendicular to sketch + Perpendiculaire à l'esquisse - Reference - Référence + + Reference + Référence - Apply - Appliquer + + Apply + Appliquer - Cancel - Annuler + + Cancel + Annuler - OK - Valider + + OK + Valider - - + + CmdPartBoolean - - Part - Pièce + + Part + Pièce - Boolean... - Opération booléenne... + + Boolean... + Opération booléenne... - Run a boolean operation with two shapes selected - Exécuter une opération booléenne sur deux formes sélectionnées + + Run a boolean operation with two shapes selected + Exécuter une opération booléenne sur deux formes sélectionnées - - + + CmdPartBox - - Part - Pièce + + Part + Pièce - Box - Boîte + + Box + Boîte - Create a box solid - Créer une boîte solide + + Create a box solid + Créer une boîte solide - - + + CmdPartBox2 - - Part - Pièce + + Part + Pièce - Box fix 1 - Boîte correctif 1 + + Box fix 1 + Boîte correctif 1 - Create a box solid without dialog - Créer une boîte solide sans boîte de dialogue + + Create a box solid without dialog + Créer une boîte solide sans boîte de dialogue - - + + CmdPartBox3 - Part - Pièce + + Part + Pièce - Box fix 2 - Boîte correctif 2 + + Box fix 2 + Boîte correctif 2 - Create a box solid without dialog - Créer une boîte solide sans boîte de dialogue + + Create a box solid without dialog + Créer une boîte solide sans boîte de dialogue - - + + CmdPartBuilder - Part - Pièce + + Part + Pièce - Shape builder... - Générateur de forme... + + Shape builder... + Générateur de forme... - Advanced utility to create shapes - Utilitaire avancé de création de formes + + Advanced utility to create shapes + Utilitaire avancé de création de formes - - + + + CmdPartChamfer + + + Part + Pièce + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Pièce + + Part + Pièce - Intersection - Intersection + + Intersection + Intersection - Make an intersection of two shapes - Exécuter une intersection entre deux formes + + Make an intersection of two shapes + Exécuter une intersection entre deux formes - - + + CmdPartCone - - Part - Pièce + + Part + Pièce - Cone - Cône + + Cone + Cône - Create a cone solid - Créer un solide conique + + Create a cone solid + Créer un solide conique - - + + CmdPartCrossSections - - Part - Pièce + + Part + Pièce - Cross-sections... - Coupes... + + Cross-sections... + Coupes... - Cross-sections - Coupes + + Cross-sections + Coupes - - + + CmdPartCut - Part - Pièce + + Part + Pièce - Cut - Soustraction + + Cut + Soustraction - Make a cut of two shapes - Exécuter une soustraction sur deux formes + + Make a cut of two shapes + Exécuter une soustraction sur deux formes - - + + CmdPartCylinder - - Part - Pièce + + Part + Pièce - Create a Cylinder - Créer un cylindre + + Create a Cylinder + Créer un cylindre - Cylinder - Cylindre + + Cylinder + Cylindre - - + + CmdPartExport - - Part - Pièce + + Part + Pièce - Export CAD... - Exportation CAO... + + Export CAD... + Exportation CAO... - Exports to a CAD file - Exporte vers un fichier dans un format de CAO + + Exports to a CAD file + Exporte vers un fichier dans un format de CAO - - + + CmdPartExtrude - Part - Pièce + + Part + Pièce - Extrude... - Extrusion... + + Extrude... + Extrusion... - Extrude a selected sketch - Extrusion d'une esquisse sélectionnée + + Extrude a selected sketch + Extrusion d'une esquisse sélectionnée - - + + CmdPartFillet - Part - Pièce + + Part + Pièce - Fillet... - Congé... + + Fillet... + Congé... - Fillet the selected edges of a shape - Créer un congé sur les arêtes sélectionnées d'une forme + + Fillet the selected edges of a shape + Créer un congé sur les arêtes sélectionnées d'une forme - - + + CmdPartFuse - Part - Pièce + + Part + Pièce - Union - Union + + Union + Union - Make a union of several shapes - Exécuter l'union de plusieurs formes + + Make a union of several shapes + Exécuter l'union de plusieurs formes - - + + CmdPartImport - Part - Pièce + + Part + Pièce - Imports a CAD file - Importe un fichier CAO + + Imports a CAD file + Importe un fichier CAO - Import CAD... - Importation CAO... + + Import CAD... + Importation CAO... - - + + CmdPartImportCurveNet - Part - Pièce + + Part + Pièce - Import a curve network - Importer un réseau de courbes + + Import a curve network + Importer un réseau de courbes - Import curve network... - Importer réseau de courbes... + + Import curve network... + Importer réseau de courbes... - - + + CmdPartLoft - Part - Pièce + + Part + Pièce - Loft... - Lissage... + + Loft... + Lissage... - Advanced utility to lofts - Utilitaire avancé de lissages + + Utility to loft + - - + + Advanced utility to lofts + Utilitaire avancé de lissages + + + CmdPartMakeSolid - Part - Pièce + + Part + Pièce - Convert to solid - Convertir en solide + + Convert to solid + Convertir en solide - Create solid from a shell or compound - Créer un solide à partir d'une coque ou d'un composé + + Create solid from a shell or compound + Créer un solide à partir d'une coque ou d'un composé - - + + CmdPartMirror - Part - Pièce + + Part + Pièce - Mirroring... - Mise en miroir... + + Mirroring... + Mise en miroir... - Mirroring a selected shape - Mise en miroir de la forme sélectionnée + + Mirroring a selected shape + Mise en miroir de la forme sélectionnée - - + + CmdPartPickCurveNet - Part - Pièce + + Part + Pièce - Pick curve network - Choisir un réseau de courbes + + Pick curve network + Choisir un réseau de courbes - Pick a curve network - Choisir un réseau de courbes + + Pick a curve network + Choisir un réseau de courbes - - + + CmdPartPrimitives - Part - Pièce + + Part + Pièce - Create primitives... - Créer des primitives... + + Create primitives... + Créer des primitives... - Creation of parametrized geometric primitives - Création de primitives géométriques paramétrées + + Creation of parametrized geometric primitives + Création de primitives géométriques paramétrées - - + + + CmdPartRefineShape + + + Part + Pièce + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Pièce + + Part + Pièce - Reverse shapes - Formes inversées + + Reverse shapes + Formes inversées - Reverse orientation of shapes - Inverser l'orientation des formes + + Reverse orientation of shapes + Inverser l'orientation des formes - - + + CmdPartRevolve - Part - Pièce + + Part + Pièce - Revolve... - Révolution... + + Revolve... + Révolution... - Revolve a selected shape - Révolutionner une forme sélectionnée + + Revolve a selected shape + Révolutionner une forme sélectionnée - - + + CmdPartRuledSurface - Part - Pièce + + Part + Pièce - Create ruled surface - Créer une surface réglée + + Create ruled surface + Créer une surface réglée - Create a ruled surface from two curves - Créer une surface réglée à partir de deux courbes + + Create a ruled surface from two curves + Créer une surface réglée à partir de deux courbes - - + + CmdPartSection - Make a section of two shapes - Faire une section de deux formes + + Make a section of two shapes + Faire une section de deux formes - Part - Pièce + + Part + Pièce - Section - Section + + Section + Section - - + + CmdPartShapeFromMesh - - Part - Pièce + + Part + Pièce - Create shape from mesh... - Créer la forme à partir d'un maillage... + + Create shape from mesh... + Créer la forme à partir d'un maillage... - Create shape from selected mesh object - Créer une forme à partir du maillage sélectionné + + Create shape from selected mesh object + Créer une forme à partir du maillage sélectionné - - + + CmdPartSimpleCopy - Part - Pièce + + Part + Pièce - Create simple copy - Créer une copie simple + + Create simple copy + Créer une copie simple - Create a simple non-parametric copy - Créer une copie simple non-paramétrique + + Create a simple non-parametric copy + Créer une copie simple non-paramétrique - - + + CmdPartSimpleCylinder - Part - Pièce + + Part + Pièce - Create Cylinder... - Créer un cylindre... + + Create Cylinder... + Créer un cylindre... - Create a Cylinder - Créer un cylindre + + Create a Cylinder + Créer un cylindre - - + + CmdPartSphere - - Create a sphere solid - Créer un solide sphérique + + Create a sphere solid + Créer un solide sphérique - Part - Pièce + + Part + Pièce - Sphere - Sphère + + Sphere + Sphère - - + + + CmdPartSweep + + + Part + Pièce + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Créer un solide toroïdal + + Create a torus solid + Créer un solide toroïdal - Part - Pièce + + Part + Pièce - Torus - Tore + + Torus + Tore - - + + DlgExtrusion - Select a shape for extrusion, first. - Sélectionnez d'abord une forme pour l'extrusion. + Select a shape for extrusion, first. + Sélectionnez d'abord une forme pour l'extrusion. - The document '%1' doesn't exist. - Document « %1 » inexistant. + The document '%1' doesn't exist. + Document « %1 » inexistant. - - + + DlgRevolution - Select a shape for revolution, first. - Sélectionnez d'abord une forme à révolutionner. + Select a shape for revolution, first. + Sélectionnez d'abord une forme à révolutionner. - - + + DlgSettings3DViewPart - Deviation - Déviation + Deviation + Déviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Définir une déviation de tessellation trop faible peut ralentir ou geler l'interface. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Définir une déviation de tessellation trop faible peut ralentir ou geler l'interface. - - + + PartGui::CrossSections - - Cross sections - Coupes + + Cross sections + Coupes - Guiding plane - Plan directeur + + Guiding plane + Plan directeur - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Position : + + Position: + Position : - Sections - Sections + + Sections + Sections - On both sides - Des deux côtés + + On both sides + Des deux côtés - Count - Nombre + + Count + Nombre - Distance: - Distance : + + Distance: + Distance : - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Opération booléenne + + Boolean Operation + Opération booléenne - Second shape - Deuxième forme + + Second shape + Deuxième forme - First shape - Première forme + + First shape + Première forme - Boolean operation - Opération booléenne + + Boolean operation + Opération booléenne - Section - Section + + Section + Section - Difference - Différence + + Difference + Différence - Union - Union + + Union + Union - Intersection - Intersection + + Intersection + Intersection - - Cannot perform a boolean operation with the same shape - Impossible d'effectuer une opération booléenne sur une seule forme + + Cannot perform a boolean operation with the same shape + Impossible d'effectuer une opération booléenne sur une seule forme - - Solids - Solides + + + Solids + Solides - Shells - Coques + + + Shells + Coques - Compounds - Composés + + + Compounds + Composés - Faces - Faces + + + Faces + Faces - Swap selection - Changement de sélection + + Swap selection + Changement de sélection - - Select a shape on the left side, first - Sélectionner d'abord une forme sur le côté gauche + + Select a shape on the left side, first + Sélectionner d'abord une forme sur le côté gauche - Select a shape on the right side, first - Sélectionner d'abord une forme sur le côté droit + + Select a shape on the right side, first + Sélectionner d'abord une forme sur le côté droit - No active document available - Aucun document actif disponible + + No active document available + Aucun document actif disponible - One of the selected objects doesn't exist anymore - Un des objets sélectionnés n'existe plus + + One of the selected objects doesn't exist anymore + Un des objets sélectionnés n'existe plus - Performing union on non-solids is not possible - L'union de formes non-solides n'est pas possible + + Performing union on non-solids is not possible + L'union de formes non-solides n'est pas possible - Performing intersection on non-solids is not possible - L'intersection de formes non-solides n'est pas possible + + Performing intersection on non-solids is not possible + L'intersection de formes non-solides n'est pas possible - Performing difference on non-solids is not possible - La soustraction de formes non-solides n'est pas possible + + Performing difference on non-solids is not possible + La soustraction de formes non-solides n'est pas possible - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Extruder + + Extrude + Extruder - Direction - Direction + + Direction + Direction - Along normal - Le long de la normale + + Along normal + Le long de la normale - Length: - Longueur : + + Length: + Longueur : - 3D view - Vue 3D + + 3D view + Vue 3D - Note:This option works for planes only - Remarque : cette option ne fonctionne que pour les plans + + Note:This option works for planes only + Remarque : cette option ne fonctionne que pour les plans - Shape - Forme + + Create solid + Créer le solide - - + + Taper outward angle + - X: - X : + + Shape + Forme - Z: - Z : + + - Y: - Y : + + X: + X : - - Select a shape for extrusion, first. - Sélectionnez d'abord une forme pour l'extrusion. + + Z: + Z : - The document '%1' doesn't exist. - Document « %1 » inexistant. + + Y: + Y : - - + + + Select a shape for extrusion, first. + Sélectionnez d'abord une forme pour l'extrusion. + + + + The document '%1' doesn't exist. + Document « %1 » inexistant. + + + PartGui::DlgFilletEdges - - Fillet Edges - Congés des arêtes + + Fillet Edges + Congés des arêtes - Fillet Parameter - Paramètres de congé + + Fillet Parameter + Paramètres de congé - Radius: - Rayon : + + Radius: + Rayon : - Fillet type: - Type de congé : + + Fillet type: + Type de congé : - Constant Radius - Rayon constant + + Constant Radius + Rayon constant - Variable Radius - Rayon variable + + Variable Radius + Rayon variable - Shape - Forme + + Shape + Forme - Selected shape: - Forme sélectionnée : + + Selected shape: + Forme sélectionnée : - No selection - Aucune sélection + + No selection + Aucune sélection - - Edges to fillet - Congé sur arêtes + + Edges to fillet + Congé sur arêtes - Start radius - Rayon initial + + + Start radius + Rayon initial - End radius - Rayon final + + End radius + Rayon final - Radius - Rayon + + Radius + Rayon - No edge selected - Aucune arête sélectionnée + + No edge selected + Aucune arête sélectionnée - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Aucune arête n'est sélectionnée pour le congé. Veuillez d'abord cocher une ou plusieurs arêtes. + Aucune arête n'est sélectionnée pour le congé. Veuillez d'abord cocher une ou plusieurs arêtes. - - All - Tous + + All + Tous - None - Aucun + + None + Aucun - - Edge%1 - Arête%1 + + + Edge%1 + Arête%1 - No shape selected - Aucune forme sélectionnée + + No shape selected + Aucune forme sélectionnée - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Aucune forme valide n'est sélectionnée. Veuillez sélectionner d'abord une forme valide dans le menu déroulant. + Aucune forme valide n'est sélectionnée. Veuillez sélectionner d'abord une forme valide dans le menu déroulant. - - + + PartGui::DlgPartBox - - Box definition - Définition de boîte + + Box definition + Définition de boîte - X: - X : + + X: + X : - Z: - Z : + + Z: + Z : - Y: - Y : + + Y: + Y : - Cancel - Annuler + + Cancel + Annuler - OK - Valider + + OK + Valider - Size: - Taille : + + Size: + Taille : - Height: - Hauteur : + + Height: + Hauteur : - Width: - Largeur : + + Width: + Largeur : - Length: - Longueur : + + Length: + Longueur : - Position: - Position : + + Position: + Position : - Direction: - Direction : + + Direction: + Direction : - - + + PartGui::DlgPartCylinder - - Cylinder definition - Définition du cylindre + + Cylinder definition + Définition du cylindre - Parameter - Paramètre + + Parameter + Paramètre - Height: - Hauteur : + + Height: + Hauteur : - Radius: - Rayon : + + Radius: + Rayon : - Position: - Position : + + Position: + Position : - Direction: - Direction : + + Direction: + Direction : - X: - X : + + X: + X : - Z: - Z : + + Z: + Z : - Y: - Y : + + Y: + Y : - OK - Valider + + OK + Valider - Cancel - Annuler + + Cancel + Annuler - - + + PartGui::DlgPartImportIges - - IGES input file - Fichier d'entrée IGES + + IGES input file + Fichier d'entrée IGES - ... - ... + + ... + ... - Cancel - Annuler + + Cancel + Annuler - OK - Valider + + OK + Valider - File Name - Nom du fichier + + File Name + Nom du fichier - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.IGES);; Tous les fichiers (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.IGES);; Tous les fichiers (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Annuler + + Cancel + Annuler - OK - Valider + + OK + Valider - Step input file - Fichier d'entrée STEP + + Step input file + Fichier d'entrée STEP - File Name - Nom du fichier + + File Name + Nom du fichier - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);; Tous les fichiers (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);; Tous les fichiers (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Primitives géométriques + + Geometric Primitives + Primitives géométriques - Primitive - Primitive + Primitive + Primitive - X min - X min + X min + X min - x max - X max + x max + X max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 pour cyl. + Angle - 0 for cyl + Angle - 0 pour cyl. - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - Valeur d'axe X : + X Axis Value: + Valeur d'axe X : - Y Axis Value: - Valeur d'axe Y : + Y Axis Value: + Valeur d'axe Y : - Z Axis Value: - Valeur d'axe Z : + Z Axis Value: + Valeur d'axe Z : - Wedge - Prisme + + Wedge + Prisme - Circle - Cercle + + Circle + Cercle - Vertex - Sommet + Vertex + Sommet - Position - Position + Position + Position - Z: - Z : + + + + Z: + Z : - X: - X : + + + + X: + X : - Direction: - Direction : + Direction: + Direction : - Y: - Y : + + + + Y: + Y : - Plane - Plan + + Plane + Plan - Box - Boîte + + Box + Boîte - Cylinder - Cylindre + + Cylinder + Cylindre - Cone - Cône + + Cone + Cône - Sphere - Sphère + + Sphere + Sphère - Ellipsoid - Ellipsoïde + + Ellipsoid + Ellipsoïde - Torus - Tore + + Torus + Tore - Parameter - Paramètre + + Ellipse + - Width: - Largeur : + + Point + - Length: - Longueur : + + Line + - Height: - Hauteur : + + Parameter + Paramètre - Angle: - Angle : + + + Width: + Largeur : - Radius: - Rayon : + + + Length: + Longueur : - Radius 1: - Rayon 1 : + + + + + Height: + Hauteur : - Radius 2: - Rayon 2 : + + + + Angle: + Angle : - U parametric: - U paramétrique : + + + + + Radius: + Rayon : - V parametric: - V paramétrique : + + + + Radius 1: + Rayon 1 : - &Create - &Créer + + + + Radius 2: + Rayon 2 : - Alt+C - Alt + C + + + + U parametric: + U paramétrique : - Cl&ose - Fer&mer + + + + V parametric: + V paramétrique : - Alt+O - Alt + O + + X min/max: + - - Create %1 - Créer %1 + + Y min/max: + - No active document - Aucun document actif + + Z min/max: + - - Pitch: - Axe de tangage : + + X2 min/max: + - Helix - Hélice + + Z2 min/max: + - 3D View - Vue 3D + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Créer + + + Alt+C + Alt + C + + + Cl&ose + Fer&mer + + + Alt+O + Alt + O + + + + + + Create %1 + Créer %1 + + + + No active document + Aucun document actif + + + + Pitch: + Axe de tangage : + + + + Helix + Hélice + + + 3D View + Vue 3D + + + PartGui::DlgRevolution - - Revolve - Révolution + + Revolve + Révolution - Y: - Y : + + Y: + Y : - X: - X : + + X: + X : - Angle: - Angle : + + Angle: + Angle : - Z: - Z : + + Z: + Z : - Axis: - Axe : + + Axis: + Axe : - Shape - Forme + + Shape + Forme - - Select a shape for revolution, first. - Sélectionnez d'abord une forme à révolutionner. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Sélectionnez d'abord une forme à révolutionner. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Précision d'affichage / performance + + View accuracy / Performance + Précision d'affichage / performance - View smoothing - Lissage de la vue + + View smoothing + Lissage de la vue - Using high-quality normals - Utiliser normales de haute qualité + + Using high-quality normals + Utiliser normales de haute qualité - This will slow down render speed but will lead to nicer results - Ceci ralentira la vitesse de rendu, mais donnera de meilleurs résultats + + This will slow down render speed but will lead to nicer results + Ceci ralentira la vitesse de rendu, mais donnera de meilleurs résultats - Defines the appearance of surfaces - Définit l'apparence des surfaces + + Defines the appearance of surfaces + Définit l'apparence des surfaces - Shape view - Vue de la forme + + Shape view + Vue de la forme - Tessellation - Tessellation + + Tessellation + Tessellation - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Ombrage plat/Ombrage Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Avec l'ombrage plat, les normales à la surface ne sont pas définies par vertex, ce qui conduit à une apparence irréelle pour les surfaces courbes, alors que l'ombrage Phong produit une apparence plus lissée. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si l'option n'est pas sélectionnée, l'ombrage Phong est utilisé. Sinon, l'ombrage plat sera utilisé.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Ombrage plat/Ombrage Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Avec l'ombrage plat, les normales à la surface ne sont pas définies par vertex, ce qui conduit à une apparence irréelle pour les surfaces courbes, alors que l'ombrage Phong produit une apparence plus lissée. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si l'option n'est pas sélectionnée, l'ombrage Phong est utilisé. Sinon, l'ombrage plat sera utilisé.</p></body></html> - Do not define normal per vertex - Ne pas définir les normales par vertex + + Do not define normal per vertex + Ne pas définir les normales par vertex - Defines the deviation of tessellation to the actual surface - Définit la déviation de tessellation à la surface réelle + + Defines the deviation of tessellation to the actual surface + Définit la déviation de tessellation à la surface réelle - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"> <span style=" font-weight:600;">Tessellation</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style=" font-weight:400;">Définit la déviation maximum de la structure en tessellation par rapport à la surface. Plus la valeur est petite, plus la vitesse de rendu est lente et le rendu lissé.</span> </p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"> <span style=" font-weight:600;">Tessellation</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style=" font-weight:400;">Définit la déviation maximum de la structure en tessellation par rapport à la surface. Plus la valeur est petite, plus la vitesse de rendu est lente et le rendu lissé.</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Remarque</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Définir les normales par vertex est aussi appelé <span style=" font-style:italic;">ombrage Phong</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">alors que définir les normales par face est appelé </span>ombrage plat<span style=" font-style:normal;">.</span> </p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Remarque</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"> Définir les normales par vertex est aussi appelé <span style=" font-style:italic;">ombrage Phong</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">alors que définir les normales par face est appelé </span>ombrage plat<span style=" font-style:normal;">.</span> </p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Normales de haute qualité</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cela ralentit la vitesse de rendu, mais produit de meilleurs résultats.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Normales de haute qualité</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cela ralentit la vitesse de rendu, mais produit de meilleurs résultats.</p></body></html> - Maximum deviation depending on the model bounding box - L'écart maximal suivant la boîte englobant le modèle + + Maximum deviation depending on the model bounding box + L'écart maximal suivant la boîte englobant le modèle - % - % + + % + % - - Deviation - Déviation + + Deviation + Déviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Définir une déviation de tessellation trop faible peut ralentir ou geler l'interface. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Définir une déviation de tessellation trop faible peut ralentir ou geler l'interface. - - + + PartGui::DlgSettingsGeneral - - General - Général + + General + Général - Export - Exporter + + Export + Exporter - Millimeter - Millimètre + + Millimeter + Millimètre - Meter - Mètre + + Meter + Mètre - Inch - Pouce + + Inch + Pouce - Units for export of STEP/IGES - Unités pour l'exportation de STEP / IGES + + Units for export of STEP/IGES + Unités pour l'exportation de STEP / IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Position + + + + 3D View + Vue 3D + + + PartGui::LoftWidget - - Too few elements - Trop peu d'éléments + + + Vertex/Wire + Sommet/Fil - At least two vertices or wires are required. - Au moins deux sommets ou fils sont nécessaires. + + + Loft + Lissage - - + + + Too few elements + Trop peu d'éléments + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Au moins deux sommets ou fils sont nécessaires. + + + PartGui::Mirroring - - Mirroring - Mise en miroir + + Mirroring + Mise en miroir - Shapes - Formes + + Shapes + Formes - Mirror plane: - Plan miroir : + + Mirror plane: + Plan miroir : - XY plane - Plan XY + + XY plane + Plan XY - XZ plane - Plan XZ + + XZ plane + Plan XZ - YZ plane - Plan YZ + + YZ plane + Plan YZ - Base point: - Point de départ : + + Base point: + Point de départ : - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Sélectionner d'abord une forme à mettre en miroir. + + Select a shape for mirroring, first. + Sélectionner d'abord une forme à mettre en miroir. - No such document '%1'. - Aucun document '%1'. + + No such document '%1'. + Aucun document '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Sélection invalide + + + + + + Wrong selection + Sélection invalide - Select two vertices - Sélectionnez deux sommets + + + Select two vertices + Sélectionnez deux sommets - Select three or more edges - Sélectionnez au moins trois arêtes + Select three or more edges + Sélectionnez au moins trois arêtes - Select two or more faces - Sélectionnez au moins deux faces + + Select one or more edges + - Select only one part object - Sélectionnez seulement un objet pièce + + Select two or more faces + Sélectionnez au moins deux faces - Select two vertices to create an edge - Sélectionner deux sommets pour créer une arête + + Select only one part object + Sélectionnez seulement un objet pièce - Select a closed set of edges - Sélectionner un ensemble fermé d'arêtes + + Select two vertices to create an edge + Sélectionner deux sommets pour créer une arête - Select adjacent faces - Sélectionner les faces adjacentes + + Select a closed set of edges + Sélectionner un ensemble fermé d'arêtes - All shape types can be selected - Tous les types de forme peuvent être sélectionnés + + Select adjacent faces + Sélectionner les faces adjacentes - - + + + All shape types can be selected + Tous les types de forme peuvent être sélectionnés + + + + PartGui::SweepWidget + + + + Vertex/Wire + Sommet/Fil + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Trop peu d'éléments + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Truc + Hint + Truc - Select Control. - Sélectionnez un contrôle. + Select Control. + Sélectionnez un contrôle. - Control - Contrôle + Control + Contrôle - Dynamic - Dynamique + Dynamic + Dynamique - Align - Aligner + Align + Aligner - Value - Valeur + Value + Valeur - Special - Spécial + Special + Spécial - Command - Commande + Command + Commande - Stretch - Étirer + Stretch + Étirer - Move - Déplacer + Move + Déplacer - Rotate - Pivoter + Rotate + Pivoter - Offset - Décalage + Offset + Décalage - Orient - Orienter + Orient + Orienter - Match - Faire correspondre + Match + Faire correspondre - Surround - Environnant + Surround + Environnant - dummy - factice + dummy + factice - X Axis - Axe X + X Axis + Axe X - Y Axis - Axe Y + Y Axis + Axe Y - Z Axis - Axe Z + Z Axis + Axe Z - Increment - Incrément + Increment + Incrément - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Faites glisser les flèches pour étirer la boîte par incrément + Drag arrows to stretch box by increment + Faites glisser les flèches pour étirer la boîte par incrément - Drag arrows to move box by increment - Faites glisser les flèches pour déplacer la boîte par incrément + Drag arrows to move box by increment + Faites glisser les flèches pour déplacer la boîte par incrément - Not implemented yet - Pas encore implémenté + Not implemented yet + Pas encore implémenté - Drag arrows to offset checked axes by increment - Faites glisser les flèches pour déplacer les axes marqués par incrément + Drag arrows to offset checked axes by increment + Faites glisser les flèches pour déplacer les axes marqués par incrément - Select dragger for stretch by align - Sélectionnez un marqueur pour étirer par alignement + Select dragger for stretch by align + Sélectionnez un marqueur pour étirer par alignement - Select dragger for move by align - Sélectionnez un marqueur pour déplacer para alignement + Select dragger for move by align + Sélectionnez un marqueur pour déplacer para alignement - Select dragger for stretch by value - Sélectionnez le marqueur pour étirer par valeur + Select dragger for stretch by value + Sélectionnez le marqueur pour étirer par valeur - Select dragger for move by value - Sélectionnez un marqueur pour déplacer par valeur + Select dragger for move by value + Sélectionnez un marqueur pour déplacer par valeur - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Entrez une valeur + Enter Value + Entrez une valeur - Select box to match - Sélectionnez une boîte à faire correspondre + Select box to match + Sélectionnez une boîte à faire correspondre - Select a point - Sélectionnez un point + Select a point + Sélectionnez un point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Sélectionnez un marqueur pour aligner + Select dragger to align + Sélectionnez un marqueur pour aligner - Select dragger to modify - Sélectionnez un marqueur pour modifier + Select dragger to modify + Sélectionnez un marqueur pour modifier - - + + PartGui::TaskFaceColors - - Set color per face - Définir la couleur des faces + + Set color per face + Définir la couleur des faces - Click on the faces in the 3d view to select them. - Cliquer sur les faces dans la vue 3D pour les sélectionner. + + Click on the faces in the 3d view to select them. + Cliquer sur les faces dans la vue 3D pour les sélectionner. - Faces: - Faces : + + Faces: + Faces : - Set to default - Définir par défaut + + Set to default + Définir par défaut - - + + PartGui::TaskLoft - - Loft - Lissage + + Loft + Lissage - Vertex/Wire - Sommet/Fil + Vertex/Wire + Sommet/Fil - Move right - Déplacer vers la droite + Move right + Déplacer vers la droite - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Descendre l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Descendre l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> - Move left - Déplacer vers la gauche + Move left + Déplacer vers la gauche - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Monter l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Monter l'élément sélectionné d'un niveau.</b><p>Cela changera aussi le niveau de l'élément parent.</p> - Move up - Déplacer vers le haut + Move up + Déplacer vers le haut - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Monter l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Monter l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> - Move down - Déplacer vers le bas + Move down + Déplacer vers le bas - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Descendre l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Descendre l'élément sélectionné d'un niveau.</b><p>L'élément sera déplacé au sein du niveau de hiérarchie.</p> - Create solid - Créer le solide + + Create solid + Créer le solide - Ruled surface - Surface réglée + + Ruled surface + Surface réglée - - + + PartGui::TaskShapeBuilder - - Create shape - Créer la forme + + + Create shape + Créer la forme - Edge from vertices - Arête à partir de sommets + + Edge from vertices + Arête à partir de sommets - Face from edges - Face à partir d'arêtes + + Face from edges + Face à partir d'arêtes - Planar - Planaire + + Planar + Planaire - Shell from faces - Coque à partir de faces + + Shell from faces + Coque à partir de faces - Solid from shell - Solide depuis une coque + + Solid from shell + Solide depuis une coque - Create - Créer + + Create + Créer - All faces - Toutes les faces + + All faces + Toutes les faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Créer le solide + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Sélection invalide + + + + + + Wrong selection + Sélection invalide - Select two shapes please. - Veuillez sélectionner deux formes. + + + Select two shapes please. + Veuillez sélectionner deux formes. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Tous les fichiers CAO (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Tous les fichiers CAO (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp * .step) + + + + STEP (*.stp *.step) + STEP (*.stp * .step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Tous les fichiers (*.*) + + + + All Files (*.*) + Tous les fichiers (*.*) - - Sewing Tolerance - Tolérance de couture + + Sewing Tolerance + Tolérance de couture - Enter tolerance for sewing shape: - Saisir la tolérance pour coudre la forme : + + Enter tolerance for sewing shape: + Saisir la tolérance pour coudre la forme : - - Edit mirror plane - Éditer le plan du miroir + + Edit mirror plane + Éditer le plan du miroir - Transform - Transformer + + Edit chamfer edges + - - Part design - Conception de pièces + Transform + Transformer - - Select two shapes or more, please. - Veuillez sélectionner au moins deux formes. + + + Part design + Conception de pièces - You have to select either two edges or two wires. - Vous devez sélectionner deux arêtes ou deux fils. + + + Select two shapes or more, please. + Veuillez sélectionner au moins deux formes. - - Edit fillet edges - Modifier les congés d'arête + + You have to select either two edges or two wires. + Vous devez sélectionner deux arêtes ou deux fils. - - Set colors... - Définir les couleurs... + + Edit fillet edges + Modifier les congés d'arête - - + + + Set colors... + Définir les couleurs... + + + Workbench - - &Part - &Pièce + + &Part + &Pièce - &Simple - &Simple + + &Simple + &Simple - &Parametric - &Paramétrique + + &Parametric + &Paramétrique - Part tools - Outils de pièces + + Part tools + Outils de pièces - Solids - Solides + + Solids + Solides - Boolean - Booléen + + Boolean + Booléen - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_hr.ts b/src/Mod/Part/Gui/Resources/translations/Part_hr.ts index d1a049330..c15cd8a11 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_hr.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_hr.ts @@ -1,1872 +1,2520 @@ - - + + BlockDefinition - - Block definition - Definicija bloka + + Block definition + Definicija bloka - First limit - Prva granica + + First limit + Prva granica - Type: - Vrsta: + + + Type: + Vrsta: - mm - mm + + + mm + mm - Length: - Duljina: + + + Length: + Duljina: - Dimension - Dimenzija + + + Dimension + Dimenzija - Up to next - Do sljedećeg + + + Up to next + Do sljedećeg - Up to last - Do posljednjeg + + + Up to last + Do posljednjeg - Up to plane - Do plohe + + + Up to plane + Do plohe - Up to face - Do stranice + + + Up to face + Do stranice - Limit: - Granica: + + + Limit: + Granica: - No selection - Bez izbora + + + + + No selection + Bez izbora - Profile - Profil + + Profile + Profil - Selection: - Odabrano: + + Selection: + Odabrano: - Reverse - Obrnuto + + Reverse + Obrnuto - Both sides - Obje strane + + Both sides + Obje strane - Second limit - Druga granica + + Second limit + Druga granica - Direction - Smjer + + Direction + Smjer - Perpendicular to sketch - Okomito na skicu + + Perpendicular to sketch + Okomito na skicu - Reference - Referenca + + Reference + Referenca - Apply - Primijeni + + Apply + Primijeni - Cancel - Otkaži + + Cancel + Otkaži - OK - U redu + + OK + U redu - - + + CmdPartBoolean - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Boolean... - Booleova ... + + Boolean... + Booleova ... - Run a boolean operation with two shapes selected - Izvrši booleovu operaciju sa odabrana dva oblika + + Run a boolean operation with two shapes selected + Izvrši booleovu operaciju sa odabrana dva oblika - - + + CmdPartBox - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Box - Kutija + + Box + Kutija - Create a box solid - Napravi kvadar + + Create a box solid + Napravi kvadar - - + + CmdPartBox2 - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Box fix 1 - Blok popravak 1 + + Box fix 1 + Blok popravak 1 - Create a box solid without dialog - Napravi kvadar bez dijaloga + + Create a box solid without dialog + Napravi kvadar bez dijaloga - - + + CmdPartBox3 - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Box fix 2 - Blok popravak 2 + + Box fix 2 + Blok popravak 2 - Create a box solid without dialog - Napravi kvadar bez dijaloga + + Create a box solid without dialog + Napravi kvadar bez dijaloga - - + + CmdPartBuilder - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Shape builder... - Graditelj oblika ... + + Shape builder... + Graditelj oblika ... - Advanced utility to create shapes - Napredni alat za izradu oblika + + Advanced utility to create shapes + Napredni alat za izradu oblika - - + + + CmdPartChamfer + + + Part + Geometrijsko tijelo + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Intersection - Presjek + + Intersection + Presjek - Make an intersection of two shapes - Napravite presjek dva oblika + + Make an intersection of two shapes + Napravite presjek dva oblika - - + + CmdPartCone - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Cone - Stožac + + Cone + Stožac - Create a cone solid - Napravi stožasto tijelo + + Create a cone solid + Napravi stožasto tijelo - - + + CmdPartCrossSections - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Cross-sections... - Presjeci... + + Cross-sections... + Presjeci... - Cross-sections - Presjeci + + Cross-sections + Presjeci - - + + CmdPartCut - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Cut - Isječak + + Cut + Isječak - Make a cut of two shapes - Napravi izrez dva oblika + + Make a cut of two shapes + Napravi izrez dva oblika - - + + CmdPartCylinder - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Create a Cylinder - Napravi Cilindar + + Create a Cylinder + Napravi Cilindar - Cylinder - Cilindar + + Cylinder + Cilindar - - + + CmdPartExport - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Export CAD... - Izvezi CAD ... + + Export CAD... + Izvezi CAD ... - Exports to a CAD file - Izvoz u CAD datoteku + + Exports to a CAD file + Izvoz u CAD datoteku - - + + CmdPartExtrude - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Extrude... - Izvuci ... + + Extrude... + Izvuci ... - Extrude a selected sketch - Izvuci odabranu skicu + + Extrude a selected sketch + Izvuci odabranu skicu - - + + CmdPartFillet - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Fillet... - Zaobli ... + + Fillet... + Zaobli ... - Fillet the selected edges of a shape - Zaobli odabrane rubove oblika + + Fillet the selected edges of a shape + Zaobli odabrane rubove oblika - - + + CmdPartFuse - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Union - Unija + + Union + Unija - Make a union of several shapes - Napravi uniju nekoliko oblika + + Make a union of several shapes + Napravi uniju nekoliko oblika - - + + CmdPartImport - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Imports a CAD file - Učitaj CAD datoteku + + Imports a CAD file + Učitaj CAD datoteku - Import CAD... - Učitaj CAD ... + + Import CAD... + Učitaj CAD ... - - + + CmdPartImportCurveNet - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Import a curve network - Uvoz krivulje mreže + + Import a curve network + Uvoz krivulje mreže - Import curve network... - Uvoz krivulje mreže... + + Import curve network... + Uvoz krivulje mreže... - - + + CmdPartLoft - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Loft... - Tuba... + + Loft... + Tuba... - Advanced utility to lofts - Napredni alati za tube + + Utility to loft + - - + + Advanced utility to lofts + Napredni alati za tube + + + CmdPartMakeSolid - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Convert to solid - Pretvori u čvrsto tijelo + + Convert to solid + Pretvori u čvrsto tijelo - Create solid from a shell or compound - Napravi tijelo tijela iz ljuske ili skupine + + Create solid from a shell or compound + Napravi tijelo tijela iz ljuske ili skupine - - + + CmdPartMirror - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Mirroring... - Zrcaljenje ... + + Mirroring... + Zrcaljenje ... - Mirroring a selected shape - Zrcaljenje odabranog oblika + + Mirroring a selected shape + Zrcaljenje odabranog oblika - - + + CmdPartPickCurveNet - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Pick curve network - Odaberite krivulju mreža + + Pick curve network + Odaberite krivulju mreža - Pick a curve network - Odaberite krivulju mreža + + Pick a curve network + Odaberite krivulju mreža - - + + CmdPartPrimitives - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Create primitives... - Napravi primitive ... + + Create primitives... + Napravi primitive ... - Creation of parametrized geometric primitives - Stvaranje parametriziranih geometrijskih primitiva + + Creation of parametrized geometric primitives + Stvaranje parametriziranih geometrijskih primitiva - - + + + CmdPartRefineShape + + + Part + Geometrijsko tijelo + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Reverse shapes - Zamijeni oblike + + Reverse shapes + Zamijeni oblike - Reverse orientation of shapes - Obrnutia orijentacija oblika + + Reverse orientation of shapes + Obrnutia orijentacija oblika - - + + CmdPartRevolve - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Revolve... - Oblik generiran okretanjem ... + + Revolve... + Oblik generiran okretanjem ... - Revolve a selected shape - Generiraj oblik okretanjem + + Revolve a selected shape + Generiraj oblik okretanjem - - + + CmdPartRuledSurface - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Create ruled surface - Napravi glavnu površinu + + Create ruled surface + Napravi glavnu površinu - Create a ruled surface from two curves - Napravi glavnu površinu od dvije krivulje + + Create a ruled surface from two curves + Napravi glavnu površinu od dvije krivulje - - + + CmdPartSection - Make a section of two shapes - Napravi sekciju dva oblika + + Make a section of two shapes + Napravi sekciju dva oblika - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Section - Odsječak + + Section + Odsječak - - + + CmdPartShapeFromMesh - - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Create shape from mesh... - Napravi oblik iz mreže ... + + Create shape from mesh... + Napravi oblik iz mreže ... - Create shape from selected mesh object - Napravi oblik iz odabranog MESHa + + Create shape from selected mesh object + Napravi oblik iz odabranog MESHa - - + + CmdPartSimpleCopy - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Create simple copy - Napravite jednostavnu kopiju + + Create simple copy + Napravite jednostavnu kopiju - Create a simple non-parametric copy - Napravite jednostavnu neparametarsku kopiju + + Create a simple non-parametric copy + Napravite jednostavnu neparametarsku kopiju - - + + CmdPartSimpleCylinder - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Create Cylinder... - Napravi Cilindar ... + + Create Cylinder... + Napravi Cilindar ... - Create a Cylinder - Napravi Cilindar + + Create a Cylinder + Napravi Cilindar - - + + CmdPartSphere - - Create a sphere solid - Napravi sferu + + Create a sphere solid + Napravi sferu - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Sphere - Kugla + + Sphere + Kugla - - + + + CmdPartSweep + + + Part + Geometrijsko tijelo + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Napravi okruglo ispupčenje na stubu + + Create a torus solid + Napravi okruglo ispupčenje na stubu - Part - Geometrijsko tijelo + + Part + Geometrijsko tijelo - Torus - Zavojnica + + Torus + Zavojnica - - + + DlgExtrusion - Select a shape for extrusion, first. - Prvo odaberite oblik za ekstruziju. + Select a shape for extrusion, first. + Prvo odaberite oblik za ekstruziju. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Prvo odaberite oblik. + Select a shape for revolution, first. + Prvo odaberite oblik. - - + + DlgSettings3DViewPart - Deviation - Odstupanje + Deviation + Odstupanje - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Postavljanje premalene devijacije uzrokuje smrzavanje ili usporava korisničko sučelje. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Postavljanje premalene devijacije uzrokuje smrzavanje ili usporava korisničko sučelje. - - + + PartGui::CrossSections - - Cross sections - Presjeci + + Cross sections + Presjeci - Guiding plane - Vodeća površina + + Guiding plane + Vodeća površina - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Položaj: + + Position: + Položaj: - Sections - Odjeljci + + Sections + Odjeljci - On both sides - S obje strane + + On both sides + S obje strane - Count - Broj + + Count + Broj - Distance: - Udaljenost: + + Distance: + Udaljenost: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Booleove operacije + + Boolean Operation + Booleove operacije - Second shape - Drugi oblik + + Second shape + Drugi oblik - First shape - Prvi oblik + + First shape + Prvi oblik - Boolean operation - Booleova operacija + + Boolean operation + Booleova operacija - Section - Odsječak + + Section + Odsječak - Difference - Razlika + + Difference + Razlika - Union - Unija + + Union + Unija - Intersection - Presjek + + Intersection + Presjek - - Cannot perform a boolean operation with the same shape - Ne možete izvesti operaciju s istim oblikom + + Cannot perform a boolean operation with the same shape + Ne možete izvesti operaciju s istim oblikom - - Solids - Tijela + + + Solids + Tijela - Shells - Omotači + + + Shells + Omotači - Compounds - Spojevi + + + Compounds + Spojevi - Faces - Plohe + + + Faces + Plohe - Swap selection - Zamijeni odabir + + Swap selection + Zamijeni odabir - - Select a shape on the left side, first - Prvo odaberite oblik na lijevoj strani + + Select a shape on the left side, first + Prvo odaberite oblik na lijevoj strani - Select a shape on the right side, first - Prvo odaberite oblik na desnoj strani + + Select a shape on the right side, first + Prvo odaberite oblik na desnoj strani - No active document available - Nema aktivnog dostupnog dokumenta + + No active document available + Nema aktivnog dostupnog dokumenta - One of the selected objects doesn't exist anymore - Jedan od odabranih objekata više ne postoji + + One of the selected objects doesn't exist anymore + Jedan od odabranih objekata više ne postoji - Performing union on non-solids is not possible - Nije moguće izvođenje spajanja na objektima koji nisu tijela + + Performing union on non-solids is not possible + Nije moguće izvođenje spajanja na objektima koji nisu tijela - Performing intersection on non-solids is not possible - Nije moguće izvođenje prejeka na objektima koji nisu tijela + + Performing intersection on non-solids is not possible + Nije moguće izvođenje prejeka na objektima koji nisu tijela - Performing difference on non-solids is not possible - Nije moguće izvođenje razlike na objektima koji nisu tijela + + Performing difference on non-solids is not possible + Nije moguće izvođenje razlike na objektima koji nisu tijela - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Izvuceno + + Extrude + Izvuceno - Direction - Smjer + + Direction + Smjer - Along normal - Uz normalu + + Along normal + Uz normalu - Length: - Duljina: + + Length: + Duljina: - 3D view - 3D prikaz + + 3D view + 3D prikaz - Note:This option works for planes only - Napomena: Ova opcija radi samo za ravnine + + Note:This option works for planes only + Napomena: Ova opcija radi samo za ravnine - Shape - Oblik + + Create solid + Napravi čvrsto tijelo - - + + Taper outward angle + - X: - X: + + Shape + Oblik - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Prvo odaberite oblik za ekstruziju. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Prvo odaberite oblik za ekstruziju. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Zaobli rubove + + Fillet Edges + Zaobli rubove - Fillet Parameter - Parametar zaobljenja + + Fillet Parameter + Parametar zaobljenja - Radius: - Radijus: + + Radius: + Radijus: - Fillet type: - Tip zaobljenja: + + Fillet type: + Tip zaobljenja: - Constant Radius - Konstantan Radius + + Constant Radius + Konstantan Radius - Variable Radius - Promjenjivi polumjer + + Variable Radius + Promjenjivi polumjer - Shape - Oblik + + Shape + Oblik - Selected shape: - Odabrani oblik: + + Selected shape: + Odabrani oblik: - No selection - Bez izbora + + No selection + Bez izbora - - Edges to fillet - Zaobli rubove + + Edges to fillet + Zaobli rubove - Start radius - Početni radijus + + + Start radius + Početni radijus - End radius - Krajnji radijus + + End radius + Krajnji radijus - Radius - Polumjer + + Radius + Polumjer - No edge selected - Nema odabranih rubova + + No edge selected + Nema odabranih rubova - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Nema rubova za zaobliti. Molimo prvo označite jedan ili više rubova. + Nema rubova za zaobliti. Molimo prvo označite jedan ili više rubova. - - All - Sve + + All + Sve - None - Nijedan + + None + Nijedan - - Edge%1 - Rub%1 + + + Edge%1 + Rub%1 - No shape selected - Nema odabranih oblika + + No shape selected + Nema odabranih oblika - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nije odabran vanljan oblik. Molimo odaberite valjan oblik u padajućem okviru. + Nije odabran vanljan oblik. Molimo odaberite valjan oblik u padajućem okviru. - - + + PartGui::DlgPartBox - - Box definition - Definicija kutije + + Box definition + Definicija kutije - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Otkaži + + Cancel + Otkaži - OK - U redu + + OK + U redu - Size: - Veličina: + + Size: + Veličina: - Height: - Visina: + + Height: + Visina: - Width: - Širina: + + Width: + Širina: - Length: - Duljina: + + Length: + Duljina: - Position: - Položaj: + + Position: + Položaj: - Direction: - Smjer: + + Direction: + Smjer: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Definiranje cilindra + + Cylinder definition + Definiranje cilindra - Parameter - Parametar + + Parameter + Parametar - Height: - Visina: + + Height: + Visina: - Radius: - Radijus: + + Radius: + Radijus: - Position: - Položaj: + + Position: + Položaj: - Direction: - Smjer: + + Direction: + Smjer: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - U redu + + OK + U redu - Cancel - Otkaži + + Cancel + Otkaži - - + + PartGui::DlgPartImportIges - - IGES input file - IGES ulazna datoteka + + IGES input file + IGES ulazna datoteka - ... - ... + + ... + ... - Cancel - Otkaži + + Cancel + Otkaži - OK - U redu + + OK + U redu - File Name - Naziv datoteke + + File Name + Naziv datoteke - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Sve Datoteke (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Sve Datoteke (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Otkaži + + Cancel + Otkaži - OK - U redu + + OK + U redu - Step input file - STEP ulazna datoteka + + Step input file + STEP ulazna datoteka - File Name - Naziv datoteke + + File Name + Naziv datoteke - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Sve Datoteke (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Sve Datoteke (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometrijski primitivi + + Geometric Primitives + Geometrijski primitivi - Primitive - Primitiv + Primitive + Primitiv - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Kut - 0 za cil + Angle - 0 for cyl + Kut - 0 za cil - Angle0 - Kut0 + Angle0 + Kut0 - Angle1 - Kut1 + Angle1 + Kut1 - X Axis Value: - Vrijednost na X osi : + X Axis Value: + Vrijednost na X osi : - Y Axis Value: - Vrijednost na Y osi : + Y Axis Value: + Vrijednost na Y osi : - Z Axis Value: - Vrijednost na Z osi: + Z Axis Value: + Vrijednost na Z osi: - Wedge - Klin + + Wedge + Klin - Circle - Krug + + Circle + Krug - Vertex - Vrh + Vertex + Vrh - Position - Položaj + Position + Položaj - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Smjer: + Direction: + Smjer: - Y: - Y: + + + + Y: + Y: - Plane - Površina + + Plane + Površina - Box - Kutija + + Box + Kutija - Cylinder - Cilindar + + Cylinder + Cilindar - Cone - Stožac + + Cone + Stožac - Sphere - Kugla + + Sphere + Kugla - Ellipsoid - Elipsoid + + Ellipsoid + Elipsoid - Torus - Zavojnica + + Torus + Zavojnica - Parameter - Parametar + + Ellipse + - Width: - Širina: + + Point + - Length: - Duljina: + + Line + - Height: - Visina: + + Parameter + Parametar - Angle: - Kut: + + + Width: + Širina: - Radius: - Radijus: + + + Length: + Duljina: - Radius 1: - Polumjer 1: + + + + + Height: + Visina: - Radius 2: - Polumjer 2: + + + + Angle: + Kut: - U parametric: - U parametarski: + + + + + Radius: + Radijus: - V parametric: - V parametarski: + + + + Radius 1: + Polumjer 1: - &Create - Napravi + + + + Radius 2: + Polumjer 2: - Alt+C - Alt + C + + + + U parametric: + U parametarski: - Cl&ose - Zatvori + + + + V parametric: + V parametarski: - Alt+O - Alt + O + + X min/max: + - - Create %1 - Napravi %1 + + Y min/max: + - No active document - Nema aktivnog dokumenta + + Z min/max: + - - Pitch: - Vrh: + + X2 min/max: + - Helix - Spirala + + Z2 min/max: + - 3D View - 3D Prikaz + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + Napravi + + + Alt+C + Alt + C + + + Cl&ose + Zatvori + + + Alt+O + Alt + O + + + + + + Create %1 + Napravi %1 + + + + No active document + Nema aktivnog dokumenta + + + + Pitch: + Vrh: + + + + Helix + Spirala + + + 3D View + 3D Prikaz + + + PartGui::DlgRevolution - - Revolve - Oblik generiran okretanjem + + Revolve + Oblik generiran okretanjem - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Kut: + + Angle: + Kut: - Z: - Z: + + Z: + Z: - Axis: - Os: + + Axis: + Os: - Shape - Oblik + + Shape + Oblik - - Select a shape for revolution, first. - Prvo odaberite oblik. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Prvo odaberite oblik. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Pregled točnosti / Performanse + + View accuracy / Performance + Pregled točnosti / Performanse - View smoothing - Pregled izglađivanja + + View smoothing + Pregled izglađivanja - Using high-quality normals - Korištenje visoko kvalitetnih normala + + Using high-quality normals + Korištenje visoko kvalitetnih normala - This will slow down render speed but will lead to nicer results - To će usporiti brzinu rendera, ali će dovesti do boljeg rezultata + + This will slow down render speed but will lead to nicer results + To će usporiti brzinu rendera, ali će dovesti do boljeg rezultata - Defines the appearance of surfaces - Određuje izgled površina + + Defines the appearance of surfaces + Određuje izgled površina - Shape view - Izgled oblika + + Shape view + Izgled oblika - Tessellation - Mozaik + + Tessellation + Mozaik - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - Do not define normal per vertex - Ne definirati normalu po vrhu + + Do not define normal per vertex + Ne definirati normalu po vrhu - Defines the deviation of tessellation to the actual surface - Određuje odstupanje od mozaika i stvarne površine + + Defines the deviation of tessellation to the actual surface + Određuje odstupanje od mozaika i stvarne površine - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - Maximum deviation depending on the model bounding box - Maksimalno odstupanje ovisno o graničnom okviru modela + + Maximum deviation depending on the model bounding box + Maksimalno odstupanje ovisno o graničnom okviru modela - % - % + + % + % - - Deviation - Odstupanje + + Deviation + Odstupanje - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Postavljanje premalene devijacije uzrokuje smrzavanje ili usporava korisničko sučelje. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Postavljanje premalene devijacije uzrokuje smrzavanje ili usporava korisničko sučelje. - - + + PartGui::DlgSettingsGeneral - - General - Općenito + + General + Općenito - Export - Izvoz + + Export + Izvoz - Millimeter - Milimetar + + Millimeter + Milimetar - Meter - Metar + + Meter + Metar - Inch - Palac + + Inch + Palac - Units for export of STEP/IGES - Jedinice za izvoz STEP / IGES + + Units for export of STEP/IGES + Jedinice za izvoz STEP / IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Položaj + + + + 3D View + 3D Prikaz + + + PartGui::LoftWidget - - Too few elements - Premalo elemenata + + + Vertex/Wire + Vrh/Žica - At least two vertices or wires are required. - Najmanje dva vrha ili žice su obavezne. + + + Loft + Tuba - - + + + Too few elements + Premalo elemenata + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Najmanje dva vrha ili žice su obavezne. + + + PartGui::Mirroring - - Mirroring - Zrcaljenje + + Mirroring + Zrcaljenje - Shapes - Oblici + + Shapes + Oblici - Mirror plane: - Površina zrcaljenja: + + Mirror plane: + Površina zrcaljenja: - XY plane - XY ravnina + + XY plane + XY ravnina - XZ plane - Xz ravnina + + XZ plane + Xz ravnina - YZ plane - YZ ravnina + + YZ plane + YZ ravnina - Base point: - Bazna točka: + + Base point: + Bazna točka: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Prvo odaberite oblik za zrcaljenje. + + Select a shape for mirroring, first. + Prvo odaberite oblik za zrcaljenje. - No such document '%1'. - Ne postoji takav dokument '%1'. + + No such document '%1'. + Ne postoji takav dokument '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Pogrešan odabir + + + + + + Wrong selection + Pogrešan odabir - Select two vertices - Odaberite dva vrha + + + Select two vertices + Odaberite dva vrha - Select three or more edges - Odaberite tri ili više rubova + Select three or more edges + Odaberite tri ili više rubova - Select two or more faces - Odaberite dvije ili više površina + + Select one or more edges + - Select only one part object - Odaberite samo jedan čvrsti objekt + + Select two or more faces + Odaberite dvije ili više površina - Select two vertices to create an edge - Odaberite dva vrha za stvaranje ruba + + Select only one part object + Odaberite samo jedan čvrsti objekt - Select a closed set of edges - Odaberite zatvoren skup bridova + + Select two vertices to create an edge + Odaberite dva vrha za stvaranje ruba - Select adjacent faces - Odaberite susjedne plohu + + Select a closed set of edges + Odaberite zatvoren skup bridova - All shape types can be selected - Sve vrste oblika se mogu odabrati + + Select adjacent faces + Odaberite susjedne plohu - - + + + All shape types can be selected + Sve vrste oblika se mogu odabrati + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vrh/Žica + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Premalo elemenata + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Vrijednost + Value + Vrijednost - Special - Special + Special + Special - Command - Naredba + Command + Naredba - Stretch - Stretch + Stretch + Stretch - Move - Pomicanje + Move + Pomicanje - Rotate - Rotiraj + Rotate + Rotiraj - Offset - Pomak + Offset + Pomak - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Postavi boju po pojedinoj plohi + + Set color per face + Postavi boju po pojedinoj plohi - Click on the faces in the 3d view to select them. - Kliknite na plohe u 3D pogledu da bi ih odabrali. + + Click on the faces in the 3d view to select them. + Kliknite na plohe u 3D pogledu da bi ih odabrali. - Faces: - Plohe: + + Faces: + Plohe: - Set to default - Postavi na zadanu vrijednost + + Set to default + Postavi na zadanu vrijednost - - + + PartGui::TaskLoft - - Loft - Tuba + + Loft + Tuba - Vertex/Wire - Vrh/Žica + Vertex/Wire + Vrh/Žica - Move right - Pomakni desno + Move right + Pomakni desno - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Premještanje odabrane stavke jednu razinu prema dolje.</b> <p> To će također promijeniti razinu roditelja stavke. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Premještanje odabrane stavke jednu razinu prema dolje.</b> <p> To će također promijeniti razinu roditelja stavke. </p> - Move left - Pomakni lijevo + Move left + Pomakni lijevo - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Premještanje odabrane stavke jednu razinu gore.</b> <p> To će također promijeniti razinu roditelja stavke. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Premještanje odabrane stavke jednu razinu gore.</b> <p> To će također promijeniti razinu roditelja stavke. </p> - Move up - Pomakni gore + Move up + Pomakni gore - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Premještanje odabrane stavke gore.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Premještanje odabrane stavke gore.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> - Move down - Pomakni dolje + Move down + Pomakni dolje - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Premještanje odabrane stavke prema dolje.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Premještanje odabrane stavke prema dolje.</b> <p> Jedinica će biti premještena unutar razine hijerarhije. </p> - Create solid - Napravi čvrsto tijelo + + Create solid + Napravi čvrsto tijelo - Ruled surface - Ravne površine + + Ruled surface + Ravne površine - - + + PartGui::TaskShapeBuilder - - Create shape - Napravi oblik + + + Create shape + Napravi oblik - Edge from vertices - Rub iz vrhova + + Edge from vertices + Rub iz vrhova - Face from edges - Ploha iz rubova + + Face from edges + Ploha iz rubova - Planar - Planar + + Planar + Planar - Shell from faces - Ljuska iz ploha + + Shell from faces + Ljuska iz ploha - Solid from shell - Čvrsto tijelo iz ljuske + + Solid from shell + Čvrsto tijelo iz ljuske - Create - Stvoriti + + Create + Stvoriti - All faces - Sve plohe + + All faces + Sve plohe - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Napravi čvrsto tijelo + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Pogrešan odabir + + + + + + Wrong selection + Pogrešan odabir - Select two shapes please. - Molim odaberite dva oblika. + + + Select two shapes please. + Molim odaberite dva oblika. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Sve CAD datoteke (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Sve CAD datoteke (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.step *.stp) + + + + STEP (*.stp *.step) + STEP (*.step *.stp) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Sve datoteke (*.*) + + + + All Files (*.*) + Sve datoteke (*.*) - - Sewing Tolerance - Tolerancija za šivanje + + Sewing Tolerance + Tolerancija za šivanje - Enter tolerance for sewing shape: - Unesite tolerancije za šivanje oblika: + + Enter tolerance for sewing shape: + Unesite tolerancije za šivanje oblika: - - Edit mirror plane - Uredi površinu zrcaljenja + + Edit mirror plane + Uredi površinu zrcaljenja - Transform - Transformirati + + Edit chamfer edges + - - Part design - Dizajn Tijela + Transform + Transformirati - - Select two shapes or more, please. - Odaberite dva ili više oblika, molim. + + + Part design + Dizajn Tijela - You have to select either two edges or two wires. - Trebate odabrati bilo dvije oštrice ili dvije žice. + + + Select two shapes or more, please. + Odaberite dva ili više oblika, molim. - - Edit fillet edges - Uredi zaobljene rubove + + You have to select either two edges or two wires. + Trebate odabrati bilo dvije oštrice ili dvije žice. - - Set colors... - Postavljanje boje ... + + Edit fillet edges + Uredi zaobljene rubove - - + + + Set colors... + Postavljanje boje ... + + + Workbench - - &Part - Tijelo + + &Part + Tijelo - &Simple - Jednostavan + + &Simple + Jednostavan - &Parametric - Parametarski + + &Parametric + Parametarski - Part tools - Alati za manipulaciju sa tijelima + + Part tools + Alati za manipulaciju sa tijelima - Solids - Tijela + + Solids + Tijela - Boolean - Booleova + + Boolean + Booleova - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_hu.ts b/src/Mod/Part/Gui/Resources/translations/Part_hu.ts index 5b8c4cf1e..993cc3738 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_hu.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_hu.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Block meghatározása + + Block definition + Block meghatározása - First limit - Első határérték + + First limit + Első határérték - Type: - Típus: + + + Type: + Típus: - mm - mm + + + mm + mm - Length: - Hossz: + + + Length: + Hossz: - Dimension - Méret + + + Dimension + Méret - Up to next - Következőig + + + Up to next + Következőig - Up to last - Előzőig + + + Up to last + Előzőig - Up to plane - Síkig + + + Up to plane + Síkig - Up to face - Felületig + + + Up to face + Felületig - Limit: - Határérték: + + + Limit: + Határérték: - No selection - Nincs kijelölés + + + + + No selection + Nincs kijelölés - Profile - Profil + + Profile + Profil - Selection: - Kijelölés: + + Selection: + Kijelölés: - Reverse - Fordított + + Reverse + Fordított - Both sides - Mindkét oldalon + + Both sides + Mindkét oldalon - Second limit - Második határérték + + Second limit + Második határérték - Direction - Irány + + Direction + Irány - Perpendicular to sketch - Merőleges a vázlatra + + Perpendicular to sketch + Merőleges a vázlatra - Reference - Referencia + + Reference + Referencia - Apply - Alkalmaz + + Apply + Alkalmaz - Cancel - Mégse + + Cancel + Mégse - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Alkatrész + + Part + Alkatrész - Boolean... - Logikai... + + Boolean... + Logikai... - Run a boolean operation with two shapes selected - Logikai művelet végrehajtása a két kijelölt alakzaton + + Run a boolean operation with two shapes selected + Logikai művelet végrehajtása a két kijelölt alakzaton - - + + CmdPartBox - - Part - Alkatrész + + Part + Alkatrész - Box - Doboz + + Box + Doboz - Create a box solid - Hozzon létre egy doboz szilárdtestet + + Create a box solid + Hozzon létre egy doboz szilárdtestet - - + + CmdPartBox2 - - Part - Alkatrész + + Part + Alkatrész - Box fix 1 - Rögzített doboz 1 + + Box fix 1 + Rögzített doboz 1 - Create a box solid without dialog - Hozzon létre egy doboz szilárd testet párbeszéd nélkül + + Create a box solid without dialog + Hozzon létre egy doboz szilárd testet párbeszéd nélkül - - + + CmdPartBox3 - Part - Alkatrész + + Part + Alkatrész - Box fix 2 - Rögzített doboz 2 + + Box fix 2 + Rögzített doboz 2 - Create a box solid without dialog - Hozzon létre egy doboz szilárd testet párbeszéd nélkül + + Create a box solid without dialog + Hozzon létre egy doboz szilárd testet párbeszéd nélkül - - + + CmdPartBuilder - Part - Alkatrész + + Part + Alkatrész - Shape builder... - Alak építő ... + + Shape builder... + Alak építő ... - Advanced utility to create shapes - Forma létrehozó fejlett eszköz + + Advanced utility to create shapes + Forma létrehozó fejlett eszköz - - + + + CmdPartChamfer + + + Part + Alkatrész + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Alkatrész + + Part + Alkatrész - Intersection - Metszet + + Intersection + Metszet - Make an intersection of two shapes - Készíts egy kereszteződés két alakzattal + + Make an intersection of two shapes + Készíts egy kereszteződés két alakzattal - - + + CmdPartCone - - Part - Alkatrész + + Part + Alkatrész - Cone - Kúp + + Cone + Kúp - Create a cone solid - Hozzon létre egy kúp testet + + Create a cone solid + Hozzon létre egy kúp testet - - + + CmdPartCrossSections - - Part - Alkatrész + + Part + Alkatrész - Cross-sections... - Keresztmetszet... + + Cross-sections... + Keresztmetszet... - Cross-sections - Keresztmetszet + + Cross-sections + Keresztmetszet - - + + CmdPartCut - Part - Alkatrész + + Part + Alkatrész - Cut - Kivágás + + Cut + Kivágás - Make a cut of two shapes - Készíts egy vágás a két alakzattal + + Make a cut of two shapes + Készíts egy vágás a két alakzattal - - + + CmdPartCylinder - - Part - Alkatrész + + Part + Alkatrész - Create a Cylinder - Henger létrehozása + + Create a Cylinder + Henger létrehozása - Cylinder - Henger + + Cylinder + Henger - - + + CmdPartExport - - Part - Alkatrész + + Part + Alkatrész - Export CAD... - Export CAD ... + + Export CAD... + Export CAD ... - Exports to a CAD file - CAD fájlok exportálása + + Exports to a CAD file + CAD fájlok exportálása - - + + CmdPartExtrude - Part - Alkatrész + + Part + Alkatrész - Extrude... - Kihúzás... + + Extrude... + Kihúzás... - Extrude a selected sketch - Kiválasztott vázlat kihúzása + + Extrude a selected sketch + Kiválasztott vázlat kihúzása - - + + CmdPartFillet - Part - Alkatrész + + Part + Alkatrész - Fillet... - Lekerekítés... + + Fillet... + Lekerekítés... - Fillet the selected edges of a shape - Egy alakzat kiválasztott éleinek lekerekítése + + Fillet the selected edges of a shape + Egy alakzat kiválasztott éleinek lekerekítése - - + + CmdPartFuse - Part - Alkatrész + + Part + Alkatrész - Union - Egyesítés + + Union + Egyesítés - Make a union of several shapes - Készíts egy uniót több formához + + Make a union of several shapes + Készíts egy uniót több formához - - + + CmdPartImport - Part - Alkatrész + + Part + Alkatrész - Imports a CAD file - CAD-fájl importálása + + Imports a CAD file + CAD-fájl importálása - Import CAD... - CAD import + + Import CAD... + CAD import - - + + CmdPartImportCurveNet - Part - Alkatrész + + Part + Alkatrész - Import a curve network - Görbe hálózat importálása + + Import a curve network + Görbe hálózat importálása - Import curve network... - Görbe hálózat importálás... + + Import curve network... + Görbe hálózat importálás... - - + + CmdPartLoft - Part - Alkatrész + + Part + Alkatrész - Loft... - Szint ... + + Loft... + Szint ... - Advanced utility to lofts - Speciális segédprogram szintekhez + + Utility to loft + - - + + Advanced utility to lofts + Speciális segédprogram szintekhez + + + CmdPartMakeSolid - Part - Alkatrész + + Part + Alkatrész - Convert to solid - Konvertálás szilárd testté + + Convert to solid + Konvertálás szilárd testté - Create solid from a shell or compound - Hozzon létre egy alakzatot szilárd héjból vagy összetettből + + Create solid from a shell or compound + Hozzon létre egy alakzatot szilárd héjból vagy összetettből - - + + CmdPartMirror - Part - Alkatrész + + Part + Alkatrész - Mirroring... - Tükrözés... + + Mirroring... + Tükrözés... - Mirroring a selected shape - A kijelölt alakzat tükrözése + + Mirroring a selected shape + A kijelölt alakzat tükrözése - - + + CmdPartPickCurveNet - Part - Alkatrész + + Part + Alkatrész - Pick curve network - Válasszon görbét + + Pick curve network + Válasszon görbét - Pick a curve network - Válasszon egy görbét + + Pick a curve network + Válasszon egy görbét - - + + CmdPartPrimitives - Part - Alkatrész + + Part + Alkatrész - Create primitives... - Primitívek létrehozása... + + Create primitives... + Primitívek létrehozása... - Creation of parametrized geometric primitives - Paraméteres geometriai primitívek létrehozása + + Creation of parametrized geometric primitives + Paraméteres geometriai primitívek létrehozása - - + + + CmdPartRefineShape + + + Part + Alkatrész + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Alkatrész + + Part + Alkatrész - Reverse shapes - Fordított alakzat + + Reverse shapes + Fordított alakzat - Reverse orientation of shapes - Alakzat irányának megfordítása + + Reverse orientation of shapes + Alakzat irányának megfordítása - - + + CmdPartRevolve - Part - Alkatrész + + Part + Alkatrész - Revolve... - Forgatás + + Revolve... + Forgatás - Revolve a selected shape - Kijelölt alakzat forgatása + + Revolve a selected shape + Kijelölt alakzat forgatása - - + + CmdPartRuledSurface - Part - Alkatrész + + Part + Alkatrész - Create ruled surface - Zárható felület létrehozása + + Create ruled surface + Zárható felület létrehozása - Create a ruled surface from two curves - Hozzon létre egy zárható felületet két görbével + + Create a ruled surface from two curves + Hozzon létre egy zárható felületet két görbével - - + + CmdPartSection - Make a section of two shapes - Szakasz készítése két alakzattal + + Make a section of two shapes + Szakasz készítése két alakzattal - Part - Alkatrész + + Part + Alkatrész - Section - Szakasz + + Section + Szakasz - - + + CmdPartShapeFromMesh - - Part - Alkatrész + + Part + Alkatrész - Create shape from mesh... - Alakzat létrehozása hálóból... + + Create shape from mesh... + Alakzat létrehozása hálóból... - Create shape from selected mesh object - Alakzat létrehozása a kijelölt háló objektumból + + Create shape from selected mesh object + Alakzat létrehozása a kijelölt háló objektumból - - + + CmdPartSimpleCopy - Part - Alkatrész + + Part + Alkatrész - Create simple copy - Készítsen egyszerű másolást + + Create simple copy + Készítsen egyszerű másolást - Create a simple non-parametric copy - Hozzon létre egy egyszerű, nem parametrikus másolatot + + Create a simple non-parametric copy + Hozzon létre egy egyszerű, nem parametrikus másolatot - - + + CmdPartSimpleCylinder - Part - Alkatrész + + Part + Alkatrész - Create Cylinder... - Henger létrehozása... + + Create Cylinder... + Henger létrehozása... - Create a Cylinder - Henger létrehozása + + Create a Cylinder + Henger létrehozása - - + + CmdPartSphere - - Create a sphere solid - Hozzon létre egy szilárdgömb testet + + Create a sphere solid + Hozzon létre egy szilárdgömb testet - Part - Alkatrész + + Part + Alkatrész - Sphere - Gömb + + Sphere + Gömb - - + + + CmdPartSweep + + + Part + Alkatrész + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Hozzon létre egy tórusz testet + + Create a torus solid + Hozzon létre egy tórusz testet - Part - Alkatrész + + Part + Alkatrész - Torus - Tórusz + + Torus + Tórusz - - + + DlgExtrusion - Select a shape for extrusion, first. - Select a shape for extrusion, first. + Select a shape for extrusion, first. + Select a shape for extrusion, first. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Select a shape for revolution, first. + Select a shape for revolution, first. + Select a shape for revolution, first. - - + + DlgSettings3DViewPart - Deviation - Eltérés + Deviation + Eltérés - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Keresztmetszet + + Cross sections + Keresztmetszet - Guiding plane - Irányadó sík + + Guiding plane + Irányadó sík - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Helyzet: + + Position: + Helyzet: - Sections - Szakaszok + + Sections + Szakaszok - On both sides - Mindkét oldalon + + On both sides + Mindkét oldalon - Count - Számol + + Count + Számol - Distance: - Távolság: + + Distance: + Távolság: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Logikai művelet + + Boolean Operation + Logikai művelet - Second shape - Második alakzat + + Second shape + Második alakzat - First shape - Első alakzat + + First shape + Első alakzat - Boolean operation - Logikai művelet + + Boolean operation + Logikai művelet - Section - Szakasz + + Section + Szakasz - Difference - Különbség + + Difference + Különbség - Union - Egyesítés + + Union + Egyesítés - Intersection - Metszet + + Intersection + Metszet - - Cannot perform a boolean operation with the same shape - Nem tud végrehajtani logikai művelet az azonos alakzaton + + Cannot perform a boolean operation with the same shape + Nem tud végrehajtani logikai művelet az azonos alakzaton - - Solids - Szilárd testek + + + Solids + Szilárd testek - Shells - Héjjak + + + Shells + Héjjak - Compounds - Összeállítások + + + Compounds + Összeállítások - Faces - Felületek + + + Faces + Felületek - Swap selection - Kijelölés csere + + Swap selection + Kijelölés csere - - Select a shape on the left side, first - Először bal oldalon jelölje ki az alakzatot + + Select a shape on the left side, first + Először bal oldalon jelölje ki az alakzatot - Select a shape on the right side, first - Először jobb oldalon jelölje ki az alakzatot + + Select a shape on the right side, first + Először jobb oldalon jelölje ki az alakzatot - No active document available - Nincs elérhető aktív dokumentum + + No active document available + Nincs elérhető aktív dokumentum - One of the selected objects doesn't exist anymore - Az egyik kijelölt objektum nem létezik + + One of the selected objects doesn't exist anymore + Az egyik kijelölt objektum nem létezik - Performing union on non-solids is not possible - Nem szilárd testek egységesítése nem lehetséges + + Performing union on non-solids is not possible + Nem szilárd testek egységesítése nem lehetséges - Performing intersection on non-solids is not possible - Nem szilárd test metszése nem lehetséges + + Performing intersection on non-solids is not possible + Nem szilárd test metszése nem lehetséges - Performing difference on non-solids is not possible - Nem szilárd test kivonása egymásból nem lehetséges + + Performing difference on non-solids is not possible + Nem szilárd test kivonása egymásból nem lehetséges - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Kihúzás + + Extrude + Kihúzás - Direction - Irány + + Direction + Irány - Along normal - Normál mentén + + Along normal + Normál mentén - Length: - Hossz: + + Length: + Hossz: - 3D view - 3D nézet + + 3D view + 3D nézet - Note:This option works for planes only - Megjegyzés: Ez a beállítás csak a tervezés módban használható + + Note:This option works for planes only + Megjegyzés: Ez a beállítás csak a tervezés módban használható - Shape - Alakzat + + Create solid + Szilárd test létrehozása - - Program infó + + Taper outward angle + - X: - X: + + Shape + Alakzat - Z: - Z: + + Program infó - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Select a shape for extrusion, first. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Select a shape for extrusion, first. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Élkerekítés + + Fillet Edges + Élkerekítés - Fillet Parameter - Lekerekítés paraméter + + Fillet Parameter + Lekerekítés paraméter - Radius: - Sugár: + + Radius: + Sugár: - Fillet type: - Fájltípus: + + Fillet type: + Fájltípus: - Constant Radius - Állandó sugárral + + Constant Radius + Állandó sugárral - Variable Radius - Változó sugárral + + Variable Radius + Változó sugárral - Shape - Alakzat + + Shape + Alakzat - Selected shape: - Kiválasztott alakzat: + + Selected shape: + Kiválasztott alakzat: - No selection - Nincs kijelölés + + No selection + Nincs kijelölés - - Edges to fillet - Lekerekítendő élek + + Edges to fillet + Lekerekítendő élek - Start radius - Kezdeti sugár + + + Start radius + Kezdeti sugár - End radius - Vég sugár + + End radius + Vég sugár - Radius - Sugár + + Radius + Sugár - No edge selected - Nincs kiválasztott él + + No edge selected + Nincs kiválasztott él - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Egyetlen élet sem választott ki. + Egyetlen élet sem választott ki. Kérem, válasszon ki legalább egyet! - - All - Minden + + All + Minden - None - Nincs + + None + Nincs - - Edge%1 - Él%1 + + + Edge%1 + Él%1 - No shape selected - Nincs kijelölve alakzat + + No shape selected + Nincs kijelölve alakzat - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nem érvényes alakzat van kijelölve. Kérjük, először válasszon egy érvényes alakzatot a legördülő listában. + Nem érvényes alakzat van kijelölve. Kérjük, először válasszon egy érvényes alakzatot a legördülő listában. - - + + PartGui::DlgPartBox - - Box definition - Doboz meghatározás + + Box definition + Doboz meghatározás - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Mégse + + Cancel + Mégse - OK - OK + + OK + OK - Size: - Méret: + + Size: + Méret: - Height: - Magasság: + + Height: + Magasság: - Width: - Szélesség: + + Width: + Szélesség: - Length: - Hossz: + + Length: + Hossz: - Position: - Helyzet: + + Position: + Helyzet: - Direction: - Irány: + + Direction: + Irány: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Henger meghatározása + + Cylinder definition + Henger meghatározása - Parameter - Paraméter + + Parameter + Paraméter - Height: - Magasság: + + Height: + Magasság: - Radius: - Sugár: + + Radius: + Sugár: - Position: - Helyzet: + + Position: + Helyzet: - Direction: - Irány: + + Direction: + Irány: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Mégse + + Cancel + Mégse - - + + PartGui::DlgPartImportIges - - IGES input file - IGES bemeneti fájl + + IGES input file + IGES bemeneti fájl - ... - ... + + ... + ... - Cancel - Mégse + + Cancel + Mégse - OK - OK + + OK + OK - File Name - Fájlnév + + File Name + Fájlnév - - Program infó + + Program infó - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Minden fájl (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Minden fájl (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Mégse + + Cancel + Mégse - OK - OK + + OK + OK - Step input file - Step bemeneti fájl + + Step input file + Step bemeneti fájl - File Name - Fájlnév + + File Name + Fájlnév - - Program infó + + Program infó - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Minden fájl (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Minden fájl (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometriai primitívek + + Geometric Primitives + Geometriai primitívek - Primitive - Primitív + Primitive + Primitív - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Szög - 0 cyl + Angle - 0 for cyl + Szög - 0 cyl - Angle0 - Szög0 + Angle0 + Szög0 - Angle1 - Szög1 + Angle1 + Szög1 - X Axis Value: - X tengely értéke: + X Axis Value: + X tengely értéke: - Y Axis Value: - Y tengely értéke: + Y Axis Value: + Y tengely értéke: - Z Axis Value: - Z tengely értéke: + Z Axis Value: + Z tengely értéke: - Wedge - Ék + + Wedge + Ék - Circle - Kör + + Circle + Kör - Vertex - Csúcs + Vertex + Csúcs - Position - Pozíció + Position + Pozíció - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Irány: + Direction: + Irány: - Y: - Y: + + + + Y: + Y: - Plane - Sík + + Plane + Sík - Box - Doboz + + Box + Doboz - Cylinder - Henger + + Cylinder + Henger - Cone - Kúp + + Cone + Kúp - Sphere - Gömb + + Sphere + Gömb - Ellipsoid - Ellipszoid + + Ellipsoid + Ellipszoid - Torus - Tórusz + + Torus + Tórusz - Parameter - Paraméter + + Ellipse + - Width: - Szélesség: + + Point + - Length: - Hossz: + + Line + - Height: - Magasság: + + Parameter + Paraméter - Angle: - Szög: + + + Width: + Szélesség: - Radius: - Sugár: + + + Length: + Hossz: - Radius 1: - Sugár 1: + + + + + Height: + Magasság: - Radius 2: - Sugár 2: + + + + Angle: + Szög: - U parametric: - U paraméter: + + + + + Radius: + Sugár: - V parametric: - V paraméter: + + + + Radius 1: + Sugár 1: - &Create - Létrehozás + + + + Radius 2: + Sugár 2: - Alt+C - Alt+C + + + + U parametric: + U paraméter: - Cl&ose - Bezár + + + + V parametric: + V paraméter: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Létrehozás %1 + + Y min/max: + - No active document - Nincs aktív dokumentum + + Z min/max: + - - Pitch: - Döntés: + + X2 min/max: + - Helix - Csigavonal + + Z2 min/max: + - 3D View - 3D-nézet + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + Létrehozás + + + Alt+C + Alt+C + + + Cl&ose + Bezár + + + Alt+O + Alt+O + + + + + + Create %1 + Létrehozás %1 + + + + No active document + Nincs aktív dokumentum + + + + Pitch: + Döntés: + + + + Helix + Csigavonal + + + 3D View + 3D-nézet + + + PartGui::DlgRevolution - - Revolve - Forgatás + + Revolve + Forgatás - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Szög: + + Angle: + Szög: - Z: - Z: + + Z: + Z: - Axis: - Tengely: + + Axis: + Tengely: - Shape - Alakzat + + Shape + Alakzat - - Select a shape for revolution, first. - Select a shape for revolution, first. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Select a shape for revolution, first. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Pontosság/teljesítmény nézet + + View accuracy / Performance + Pontosság/teljesítmény nézet - View smoothing - Simítás nézet + + View smoothing + Simítás nézet - Using high-quality normals - Magas-minőségű normák használata + + Using high-quality normals + Magas-minőségű normák használata - This will slow down render speed but will lead to nicer results - Ez lassítja a fordítás sebességét, de szebb eredményhez vezet + + This will slow down render speed but will lead to nicer results + Ez lassítja a fordítás sebességét, de szebb eredményhez vezet - Defines the appearance of surfaces - Meghatározza a felületek megjelenését + + Defines the appearance of surfaces + Meghatározza a felületek megjelenését - Shape view - Alakzat-nézet + + Shape view + Alakzat-nézet - Tessellation - Csempézés + + Tessellation + Csempézés - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"> <span style="font-weight:600;"> Lapos árnyalás/Phong-árnyalás</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;"> A lapos árnyékolással a felszíni normákat nem vertexek határozzák meg, amely ahhoz vezet, hogy a hajlított felületek irreálisak, míg a Phong árnyalás simább megjelenést biztosít.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;">, ha ez a beállítás nem beállított akkor a Phong-árnyalást használja, ha értéke beállított, akkor a sima árnyalás van használtban.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"> <span style="font-weight:600;"> Lapos árnyalás/Phong-árnyalás</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;"> A lapos árnyékolással a felszíni normákat nem vertexek határozzák meg, amely ahhoz vezet, hogy a hajlított felületek irreálisak, míg a Phong árnyalás simább megjelenést biztosít.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px;">, ha ez a beállítás nem beállított akkor a Phong-árnyalást használja, ha értéke beállított, akkor a sima árnyalás van használtban.</p></body></html> - Do not define normal per vertex - Normál esetben ne vertexbe határozza meg + + Do not define normal per vertex + Normál esetben ne vertexbe határozza meg - Defines the deviation of tessellation to the actual surface - Meghatározza a mozaik eltérését az aktuális felületre vonatkozólag + + Defines the deviation of tessellation to the actual surface + Meghatározza a mozaik eltérését az aktuális felületre vonatkozólag - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Meghatározza a mozaik háló testre vonatkozó maximum eltérését. Minél kisebb az érték, annál lasúbb a renderelés sebessége és szebb a végeredmény.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Meghatározza a mozaik háló testre vonatkozó maximum eltérését. Minél kisebb az érték, annál lasúbb a renderelés sebessége és szebb a végeredmény.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">A normálisok vertexként való megjelenítését úgy is nevezik, hogy<span style=" font-style:italic;">Phong árnyékolás</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">A normálisok vertexként való megjelenítését úgy is nevezik, hogy<span style=" font-style:italic;">Phong árnyékolás</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ez a renderelést lelassítja, + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ez a renderelést lelassítja, de szebb végeredményt ad.</p></body></html> - Maximum deviation depending on the model bounding box - Legnagyobb eltérés a modell határolókeretétől függ + + Maximum deviation depending on the model bounding box + Legnagyobb eltérés a modell határolókeretétől függ - % - % + + % + % - - Deviation - Eltérés + + Deviation + Eltérés - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Általános + + General + Általános - Export - Export + + Export + Export - Millimeter - Milliméter + + Millimeter + Milliméter - Meter - Méter + + Meter + Méter - Inch - Hüvelyk + + Inch + Hüvelyk - Units for export of STEP/IGES - Az STEP/IGES exportban használt egységek + + Units for export of STEP/IGES + Az STEP/IGES exportban használt egységek - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Pozíció + + + + 3D View + 3D-nézet + + + PartGui::LoftWidget - - Too few elements - Túl kevés elem + + + Vertex/Wire + Vertex / Vonal - At least two vertices or wires are required. - Legalább két csúcs, illetve vonal szükséges. + + + Loft + Szint - - + + + Too few elements + Túl kevés elem + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Legalább két csúcs, illetve vonal szükséges. + + + PartGui::Mirroring - - Mirroring - Tükrözés + + Mirroring + Tükrözés - Shapes - Alakzatok + + Shapes + Alakzatok - Mirror plane: - Tükör sík: + + Mirror plane: + Tükör sík: - XY plane - XY sík + + XY plane + XY sík - XZ plane - XZ sík + + XZ plane + XZ sík - YZ plane - YZ síkban + + YZ plane + YZ síkban - Base point: - Alap pont: + + Base point: + Alap pont: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Tükrözéshez előszőr a formát válassza ki. + + Select a shape for mirroring, first. + Tükrözéshez előszőr a formát válassza ki. - No such document '%1'. - Nincs ilyen dokumentum '%1'. + + No such document '%1'. + Nincs ilyen dokumentum '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Hibás kijelölés + + + + + + Wrong selection + Hibás kijelölés - Select two vertices - Válasszon ki a két csúcsot + + + Select two vertices + Válasszon ki a két csúcsot - Select three or more edges - Válasszon ki a három vagy több élet + Select three or more edges + Válasszon ki a három vagy több élet - Select two or more faces - Válasszon ki a két vagy több felületet + + Select one or more edges + - Select only one part object - Válasszon ki a csak egy tárgy részt + + Select two or more faces + Válasszon ki a két vagy több felületet - Select two vertices to create an edge - Válasszon ki a két csúcsot egy él létrehozásához + + Select only one part object + Válasszon ki a csak egy tárgy részt - Select a closed set of edges - Válasszon ki egy zárt él halmazt + + Select two vertices to create an edge + Válasszon ki a két csúcsot egy él létrehozásához - Select adjacent faces - Válasszon ki szomszédos felületeket + + Select a closed set of edges + Válasszon ki egy zárt él halmazt - All shape types can be selected - Minden alakzat kiválasztható + + Select adjacent faces + Válasszon ki szomszédos felületeket - - + + + All shape types can be selected + Minden alakzat kiválasztható + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex / Vonal + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Túl kevés elem + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Érték + Value + Érték - Special - Special + Special + Special - Command - Parancs + Command + Parancs - Stretch - Stretch + Stretch + Stretch - Move - Mozgat + Move + Mozgat - Rotate - Forgatás + Rotate + Forgatás - Offset - Eltolás + Offset + Eltolás - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Szín beállítása egy felületre + + Set color per face + Szín beállítása egy felületre - Click on the faces in the 3d view to select them. - Kattints a 3D nézetben a felületekre a kijelöléshez. + + Click on the faces in the 3d view to select them. + Kattints a 3D nézetben a felületekre a kijelöléshez. - Faces: - Felületek: + + Faces: + Felületek: - Set to default - Az alapértelmezett beállítása + + Set to default + Az alapértelmezett beállítása - - + + PartGui::TaskLoft - - Loft - Szint + + Loft + Szint - Vertex/Wire - Vertex / Vonal + Vertex/Wire + Vertex / Vonal - Move right - Mozgatás jobbra + Move right + Mozgatás jobbra - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> - Move left - Mozgatás balra + Move left + Mozgatás balra - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Mozgasd a kiválasztott elemet egy szinttel lejjebb.</b><p>Ez a meglévő elemet szintjét is megváltoztatja.</p> - Move up - Mozgatás felfelé + Move up + Mozgatás felfelé - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> - Move down - Mozgatás lefelé + Move down + Mozgatás lefelé - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Mozgasd a kiválasztott elemet lejjebb.</b><p>Az elem a hierarchia szinten lesz mozgatva.</p> - Create solid - Szilárd test létrehozása + + Create solid + Szilárd test létrehozása - Ruled surface - Döntött felület + + Ruled surface + Döntött felület - - + + PartGui::TaskShapeBuilder - - Create shape - Alakzat létrehozása + + + Create shape + Alakzat létrehozása - Edge from vertices - Csúcsok élei + + Edge from vertices + Csúcsok élei - Face from edges - Felületek élekből + + Face from edges + Felületek élekből - Planar - Planar + + Planar + Planar - Shell from faces - Héjjak felületekből + + Shell from faces + Héjjak felületekből - Solid from shell - Szilárd testek felületekből + + Solid from shell + Szilárd testek felületekből - Create - Létrehozás + + Create + Létrehozás - All faces - Minden felület + + All faces + Minden felület - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Szilárd test létrehozása + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Hibás kijelölés + + + + + + Wrong selection + Hibás kijelölés - Select two shapes please. - Két alakzatot jelöljön ki. + + + Select two shapes please. + Két alakzatot jelöljön ki. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Minden CAD Fájl (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Minden CAD Fájl (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Minden fájl (*.*) + + + + All Files (*.*) + Minden fájl (*.*) - - Sewing Tolerance - Varró tolerancia + + Sewing Tolerance + Varró tolerancia - Enter tolerance for sewing shape: - Adja meg a varrás alakja toleranciáját: + + Enter tolerance for sewing shape: + Adja meg a varrás alakja toleranciáját: - - Edit mirror plane - Tükrözési sík szerkesztése + + Edit mirror plane + Tükrözési sík szerkesztése - Transform - Átalakítás + + Edit chamfer edges + - - Part design - Alkatrész tervezés + Transform + Átalakítás - - Select two shapes or more, please. - Kérem válasszon ki a két alakzatot vagy többet. + + + Part design + Alkatrész tervezés - You have to select either two edges or two wires. - Választani kell két élet, vagy két hálót. + + + Select two shapes or more, please. + Kérem válasszon ki a két alakzatot vagy többet. - - Edit fillet edges - Kijelölt élek szerkesztése + + You have to select either two edges or two wires. + Választani kell két élet, vagy két hálót. - - Set colors... - Színek beállítása... + + Edit fillet edges + Kijelölt élek szerkesztése - - + + + Set colors... + Színek beállítása... + + + Workbench - - &Part - Rész + + &Part + Rész - &Simple - Egyszerű + + &Simple + Egyszerű - &Parametric - Változós + + &Parametric + Változós - Part tools - Rész eszközök + + Part tools + Rész eszközök - Solids - Szilárd testek + + Solids + Szilárd testek - Boolean - Logikai érték + + Boolean + Logikai érték - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_it.ts b/src/Mod/Part/Gui/Resources/translations/Part_it.ts index 832bb8cd2..bd980fa47 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_it.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_it.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Definizione blocco + + Block definition + Definizione blocco - First limit - Primo limite + + First limit + Primo limite - Type: - Tipo: + + + Type: + Tipo: - mm - mm + + + mm + mm - Length: - Lunghezza: + + + Length: + Lunghezza: - Dimension - Dimensione + + + Dimension + Dimensione - Up to next - Fino al prossimo + + + Up to next + Fino al prossimo - Up to last - Fino all'ultimo + + + Up to last + Fino all'ultimo - Up to plane - Fino al piano + + + Up to plane + Fino al piano - Up to face - Fino alla faccia + + + Up to face + Fino alla faccia - Limit: - Limite: + + + Limit: + Limite: - No selection - Nessuna selezione + + + + + No selection + Nessuna selezione - Profile - Profilo + + Profile + Profilo - Selection: - Selezione: + + Selection: + Selezione: - Reverse - Inverti + + Reverse + Inverti - Both sides - Entrambi i lati + + Both sides + Entrambi i lati - Second limit - Secondo limite + + Second limit + Secondo limite - Direction - Direzione + + Direction + Direzione - Perpendicular to sketch - Perpendicolare allo sketch + + Perpendicular to sketch + Perpendicolare allo sketch - Reference - Riferimento + + Reference + Riferimento - Apply - Applica + + Apply + Applica - Cancel - Annulla + + Cancel + Annulla - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Parte + + Part + Parte - Boolean... - Operazione booleana... + + Boolean... + Operazione booleana... - Run a boolean operation with two shapes selected - Esegue un'operazione booleana tra le due forme selezionate + + Run a boolean operation with two shapes selected + Esegue un'operazione booleana tra le due forme selezionate - - + + CmdPartBox - - Part - Parte + + Part + Parte - Box - Prisma + + Box + Prisma - Create a box solid - Crea un prisma solido + + Create a box solid + Crea un prisma solido - - + + CmdPartBox2 - - Part - Parte + + Part + Parte - Box fix 1 - Fissa prisma 1 + + Box fix 1 + Fissa prisma 1 - Create a box solid without dialog - Crea una prisma solido senza finestra di dialogo + + Create a box solid without dialog + Crea una prisma solido senza finestra di dialogo - - + + CmdPartBox3 - Part - Parte + + Part + Parte - Box fix 2 - Fissa prisma 2 + + Box fix 2 + Fissa prisma 2 - Create a box solid without dialog - Crea una prisma solido senza finestra di dialogo + + Create a box solid without dialog + Crea una prisma solido senza finestra di dialogo - - + + CmdPartBuilder - Part - Parte + + Part + Parte - Shape builder... - Generatore di forma... + + Shape builder... + Generatore di forma... - Advanced utility to create shapes - Utilità avanzate per creare forme + + Advanced utility to create shapes + Utilità avanzate per creare forme - - + + + CmdPartChamfer + + + Part + Parte + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Parte + + Part + Parte - Intersection - Intersezione + + Intersection + Intersezione - Make an intersection of two shapes - Esegue un'intersezione di due forme + + Make an intersection of two shapes + Esegue un'intersezione di due forme - - + + CmdPartCone - - Part - Parte + + Part + Parte - Cone - Cono + + Cone + Cono - Create a cone solid - Crea un cono solido + + Create a cone solid + Crea un cono solido - - + + CmdPartCrossSections - - Part - Parte + + Part + Parte - Cross-sections... - Sezioni... + + Cross-sections... + Sezioni... - Cross-sections - Sezioni + + Cross-sections + Sezioni - - + + CmdPartCut - Part - Parte + + Part + Parte - Cut - Taglia + + Cut + Taglia - Make a cut of two shapes - Esegue un taglio di due forme + + Make a cut of two shapes + Esegue un taglio di due forme - - + + CmdPartCylinder - - Part - Parte + + Part + Parte - Create a Cylinder - Crea un cilindro + + Create a Cylinder + Crea un cilindro - Cylinder - Cilindro + + Cylinder + Cilindro - - + + CmdPartExport - - Part - Parte + + Part + Parte - Export CAD... - Esporta CAD... + + Export CAD... + Esporta CAD... - Exports to a CAD file - Esportazione in un file CAD + + Exports to a CAD file + Esportazione in un file CAD - - + + CmdPartExtrude - Part - Parte + + Part + Parte - Extrude... - Estrudi... + + Extrude... + Estrudi... - Extrude a selected sketch - Estrude uno schizzo selezionato + + Extrude a selected sketch + Estrude uno schizzo selezionato - - + + CmdPartFillet - Part - Parte + + Part + Parte - Fillet... - Raccordo... + + Fillet... + Raccordo... - Fillet the selected edges of a shape - Raccorda gli spigoli di una forma selezionati + + Fillet the selected edges of a shape + Raccorda gli spigoli di una forma selezionati - - + + CmdPartFuse - Part - Parte + + Part + Parte - Union - Unione + + Union + Unione - Make a union of several shapes - Esegue un'unione di varie forme + + Make a union of several shapes + Esegue un'unione di varie forme - - + + CmdPartImport - Part - Parte + + Part + Parte - Imports a CAD file - Importa un file CAD + + Imports a CAD file + Importa un file CAD - Import CAD... - Importa CAD... + + Import CAD... + Importa CAD... - - + + CmdPartImportCurveNet - Part - Parte + + Part + Parte - Import a curve network - Importa una rete di curve + + Import a curve network + Importa una rete di curve - Import curve network... - Importa una rete di curve... + + Import curve network... + Importa una rete di curve... - - + + CmdPartLoft - Part - Parte + + Part + Parte - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Utilità avanzate per lofts + + Utility to loft + - - + + Advanced utility to lofts + Utilità avanzate per lofts + + + CmdPartMakeSolid - Part - Parte + + Part + Parte - Convert to solid - Converti in solido + + Convert to solid + Converti in solido - Create solid from a shell or compound - Crea solido da un guscio o un composto + + Create solid from a shell or compound + Crea solido da un guscio o un composto - - + + CmdPartMirror - Part - Parte + + Part + Parte - Mirroring... - Specchia... + + Mirroring... + Specchia... - Mirroring a selected shape - Specchia una forma selezionata + + Mirroring a selected shape + Specchia una forma selezionata - - + + CmdPartPickCurveNet - Part - Parte + + Part + Parte - Pick curve network - Specifica rete di curve + + Pick curve network + Specifica rete di curve - Pick a curve network - Specifica una rete di curve + + Pick a curve network + Specifica una rete di curve - - + + CmdPartPrimitives - Part - Parte + + Part + Parte - Create primitives... - Crea primitive... + + Create primitives... + Crea primitive... - Creation of parametrized geometric primitives - Creazione di primitive geometriche parametrizzate + + Creation of parametrized geometric primitives + Creazione di primitive geometriche parametrizzate - - + + + CmdPartRefineShape + + + Part + Parte + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Parte + + Part + Parte - Reverse shapes - Inverti forme + + Reverse shapes + Inverti forme - Reverse orientation of shapes - Inverte l'orientamento delle forme + + Reverse orientation of shapes + Inverte l'orientamento delle forme - - + + CmdPartRevolve - Part - Parte + + Part + Parte - Revolve... - Rivoluziona... + + Revolve... + Rivoluziona... - Revolve a selected shape - Rivoluziona una forma selezionata + + Revolve a selected shape + Rivoluziona una forma selezionata - - + + CmdPartRuledSurface - Part - Parte + + Part + Parte - Create ruled surface - Creare la superficie rigata + + Create ruled surface + Creare la superficie rigata - Create a ruled surface from two curves - Crea una superficie rigata da due curve + + Create a ruled surface from two curves + Crea una superficie rigata da due curve - - + + CmdPartSection - Make a section of two shapes - Esegue una sezione di due forme + + Make a section of two shapes + Esegue una sezione di due forme - Part - Parte + + Part + Parte - Section - Sezione + + Section + Sezione - - + + CmdPartShapeFromMesh - - Part - Parte + + Part + Parte - Create shape from mesh... - Crea forma da mesh... + + Create shape from mesh... + Crea forma da mesh... - Create shape from selected mesh object - Crea forma dall'oggetto mesh selezionato + + Create shape from selected mesh object + Crea forma dall'oggetto mesh selezionato - - + + CmdPartSimpleCopy - Part - Parte + + Part + Parte - Create simple copy - Crea una copia semplice + + Create simple copy + Crea una copia semplice - Create a simple non-parametric copy - Crea una copia semplice non parametrica + + Create a simple non-parametric copy + Crea una copia semplice non parametrica - - + + CmdPartSimpleCylinder - Part - Parte + + Part + Parte - Create Cylinder... - Crea cilindro... + + Create Cylinder... + Crea cilindro... - Create a Cylinder - Crea un cilindro + + Create a Cylinder + Crea un cilindro - - + + CmdPartSphere - - Create a sphere solid - Crea una sfera solida + + Create a sphere solid + Crea una sfera solida - Part - Parte + + Part + Parte - Sphere - Sfera + + Sphere + Sfera - - + + + CmdPartSweep + + + Part + Parte + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Crea un toro solido + + Create a torus solid + Crea un toro solido - Part - Parte + + Part + Parte - Torus - Toro + + Torus + Toro - - + + DlgExtrusion - Select a shape for extrusion, first. - Seleziona prima una forma da estrudere. + Select a shape for extrusion, first. + Seleziona prima una forma da estrudere. - The document '%1' doesn't exist. - Il documento '%1' non esiste. + The document '%1' doesn't exist. + Il documento '%1' non esiste. - - + + DlgRevolution - Select a shape for revolution, first. - Seleziona prima una forma per la rivoluzione. + Select a shape for revolution, first. + Seleziona prima una forma per la rivoluzione. - - + + DlgSettings3DViewPart - Deviation - Deviazione + Deviation + Deviazione - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - L'impostazione di una deviazione troppo piccola provoca la richiesta di più tempo per la tassellazione e quindi blocca o rallenta la GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + L'impostazione di una deviazione troppo piccola provoca la richiesta di più tempo per la tassellazione e quindi blocca o rallenta la GUI. - - + + PartGui::CrossSections - - Cross sections - Sezioni + + Cross sections + Sezioni - Guiding plane - Piano guida + + Guiding plane + Piano guida - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Posizione: + + Position: + Posizione: - Sections - Sezioni + + Sections + Sezioni - On both sides - Su entrambi i lati + + On both sides + Su entrambi i lati - Count - Conta + + Count + Conta - Distance: - Distanza: + + Distance: + Distanza: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Operazione booleana + + Boolean Operation + Operazione booleana - Second shape - Seconda forma + + Second shape + Seconda forma - First shape - Prima forma + + First shape + Prima forma - Boolean operation - Operazione booleana + + Boolean operation + Operazione booleana - Section - Sezione + + Section + Sezione - Difference - Differenza + + Difference + Differenza - Union - Unione + + Union + Unione - Intersection - Intersezione + + Intersection + Intersezione - - Cannot perform a boolean operation with the same shape - Non è possibile effettuare una operazione booleana con la stessa forma + + Cannot perform a boolean operation with the same shape + Non è possibile effettuare una operazione booleana con la stessa forma - - Solids - Solidi + + + Solids + Solidi - Shells - Gusci + + + Shells + Gusci - Compounds - Solidi composti + + + Compounds + Solidi composti - Faces - Facce + + + Faces + Facce - Swap selection - Inverti selezione + + Swap selection + Inverti selezione - - Select a shape on the left side, first - Seleziona prima una forma sul lato sinistro + + Select a shape on the left side, first + Seleziona prima una forma sul lato sinistro - Select a shape on the right side, first - Seleziona prima una forma sul lato destro + + Select a shape on the right side, first + Seleziona prima una forma sul lato destro - No active document available - Nessun documento attivo disponibile + + No active document available + Nessun documento attivo disponibile - One of the selected objects doesn't exist anymore - Uno degli oggetti selezionati non esiste più + + One of the selected objects doesn't exist anymore + Uno degli oggetti selezionati non esiste più - Performing union on non-solids is not possible - Non è possibile eseguire l'unione su oggetti non solidi + + Performing union on non-solids is not possible + Non è possibile eseguire l'unione su oggetti non solidi - Performing intersection on non-solids is not possible - Non è possibile eseguire l'intersezione su oggetti non solidi + + Performing intersection on non-solids is not possible + Non è possibile eseguire l'intersezione su oggetti non solidi - Performing difference on non-solids is not possible - Non è possibile eseguire la differenza su oggetti non solidi + + Performing difference on non-solids is not possible + Non è possibile eseguire la differenza su oggetti non solidi - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Estrudi + + Extrude + Estrudi - Direction - Direzione + + Direction + Direzione - Along normal - Lungo la normale + + Along normal + Lungo la normale - Length: - Lunghezza: + + Length: + Lunghezza: - 3D view - Vista 3D + + 3D view + Vista 3D - Note:This option works for planes only - Nota: questa opzione funziona solo per i piani + + Note:This option works for planes only + Nota: questa opzione funziona solo per i piani - Shape - Forma + + Create solid + Crea solido - - + + Taper outward angle + - X: - X: + + Shape + Forma - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Seleziona prima una forma da estrudere. + + Z: + Z: - The document '%1' doesn't exist. - Il documento '%1' non esiste. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Seleziona prima una forma da estrudere. + + + + The document '%1' doesn't exist. + Il documento '%1' non esiste. + + + PartGui::DlgFilletEdges - - Fillet Edges - Raccorda spigoli + + Fillet Edges + Raccorda spigoli - Fillet Parameter - Parametri raccordo + + Fillet Parameter + Parametri raccordo - Radius: - Raggio: + + Radius: + Raggio: - Fillet type: - Tipo di raccordo: + + Fillet type: + Tipo di raccordo: - Constant Radius - Raggio costante + + Constant Radius + Raggio costante - Variable Radius - Raggio variabile + + Variable Radius + Raggio variabile - Shape - Forma + + Shape + Forma - Selected shape: - Forma selezionata: + + Selected shape: + Forma selezionata: - No selection - Nessuna selezione + + No selection + Nessuna selezione - - Edges to fillet - Spigoli da raccordare + + Edges to fillet + Spigoli da raccordare - Start radius - Raggio iniziale + + + Start radius + Raggio iniziale - End radius - Raggio finale + + End radius + Raggio finale - Radius - Raggio + + Radius + Raggio - No edge selected - Nessuno spigolo selezionato + + No edge selected + Nessuno spigolo selezionato - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Nessuna entità spigolo è stata assegnata da raccordare. + Nessuna entità spigolo è stata assegnata da raccordare. Assegnare una o più entità raccordo prima. - - All - Tutto + + All + Tutto - None - Nessuno + + None + Nessuno - - Edge%1 - Spigoli %1 + + + Edge%1 + Spigoli %1 - No shape selected - Nessuna forma selezionata + + No shape selected + Nessuna forma selezionata - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nessuna forma valida è stat selezionata. + Nessuna forma valida è stat selezionata. Seleziona prima una forma valida dal menu a tendina. - - + + PartGui::DlgPartBox - - Box definition - Definizione prisma + + Box definition + Definizione prisma - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Annulla + + Cancel + Annulla - OK - OK + + OK + OK - Size: - Dimensione: + + Size: + Dimensione: - Height: - Altezza: + + Height: + Altezza: - Width: - Larghezza: + + Width: + Larghezza: - Length: - Lunghezza: + + Length: + Lunghezza: - Position: - Posizione: + + Position: + Posizione: - Direction: - Direzione: + + Direction: + Direzione: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Definizione cilindro + + Cylinder definition + Definizione cilindro - Parameter - Parametro + + Parameter + Parametro - Height: - Altezza: + + Height: + Altezza: - Radius: - Raggio: + + Radius: + Raggio: - Position: - Posizione: + + Position: + Posizione: - Direction: - Direzione: + + Direction: + Direzione: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Annulla + + Cancel + Annulla - - + + PartGui::DlgPartImportIges - - IGES input file - File input IGES + + IGES input file + File input IGES - ... - ... + + ... + ... - Cancel - Annulla + + Cancel + Annulla - OK - OK + + OK + OK - File Name - Nome file + + File Name + Nome file - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Tutti i File (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Tutti i File (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Annulla + + Cancel + Annulla - OK - OK + + OK + OK - Step input file - File input Step + + Step input file + File input Step - File Name - Nome file + + File Name + Nome file - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Tutti i File (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Tutti i File (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Primitive geometriche + + Geometric Primitives + Primitive geometriche - Primitive - Primitiva + Primitive + Primitiva - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angolo - 0 per cyl + Angle - 0 for cyl + Angolo - 0 per cyl - Angle0 - Angolo0 + Angle0 + Angolo0 - Angle1 - Angolo1 + Angle1 + Angolo1 - X Axis Value: - Valore asse X: + X Axis Value: + Valore asse X: - Y Axis Value: - Valore asse Y: + Y Axis Value: + Valore asse Y: - Z Axis Value: - Valore asse Z: + Z Axis Value: + Valore asse Z: - Wedge - Cuneo + + Wedge + Cuneo - Circle - Cerchio + + Circle + Cerchio - Vertex - Vertice + Vertex + Vertice - Position - Posizione + Position + Posizione - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Direzione: + Direction: + Direzione: - Y: - Y: + + + + Y: + Y: - Plane - Piano + + Plane + Piano - Box - Prisma + + Box + Prisma - Cylinder - Cilindro + + Cylinder + Cilindro - Cone - Cono + + Cone + Cono - Sphere - Sfera + + Sphere + Sfera - Ellipsoid - Ellissoide + + Ellipsoid + Ellissoide - Torus - Toro + + Torus + Toro - Parameter - Parametro + + Ellipse + - Width: - Larghezza: + + Point + - Length: - Lunghezza: + + Line + - Height: - Altezza: + + Parameter + Parametro - Angle: - Angolo: + + + Width: + Larghezza: - Radius: - Raggio: + + + Length: + Lunghezza: - Radius 1: - Raggio 1: + + + + + Height: + Altezza: - Radius 2: - Raggio 2: + + + + Angle: + Angolo: - U parametric: - Parametro U: + + + + + Radius: + Raggio: - V parametric: - Parametro V: + + + + Radius 1: + Raggio 1: - &Create - &Crea + + + + Radius 2: + Raggio 2: - Alt+C - Alt+C + + + + U parametric: + Parametro U: - Cl&ose - C&hiudi + + + + V parametric: + Parametro V: - Alt+O - Alt+H + + X min/max: + - - Create %1 - Crea %1 + + Y min/max: + - No active document - Nessun documento attivo + + Z min/max: + - - Pitch: - Passo: + + X2 min/max: + - Helix - Elica + + Z2 min/max: + - 3D View - Vista 3D + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Crea + + + Alt+C + Alt+C + + + Cl&ose + C&hiudi + + + Alt+O + Alt+H + + + + + + Create %1 + Crea %1 + + + + No active document + Nessun documento attivo + + + + Pitch: + Passo: + + + + Helix + Elica + + + 3D View + Vista 3D + + + PartGui::DlgRevolution - - Revolve - Rivoluziona + + Revolve + Rivoluziona - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Angolo: + + Angle: + Angolo: - Z: - Z: + + Z: + Z: - Axis: - Assi: + + Axis: + Assi: - Shape - Forma + + Shape + Forma - - Select a shape for revolution, first. - Seleziona prima una forma per la rivoluzione. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Seleziona prima una forma per la rivoluzione. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Vista Precisione / Performance + + View accuracy / Performance + Vista Precisione / Performance - View smoothing - Vista piatta + + View smoothing + Vista piatta - Using high-quality normals - Usare normali di alta qualità + + Using high-quality normals + Usare normali di alta qualità - This will slow down render speed but will lead to nicer results - Questo rallenterà la velocità di render ma si otterranno risultati migliori + + This will slow down render speed but will lead to nicer results + Questo rallenterà la velocità di render ma si otterranno risultati migliori - Defines the appearance of surfaces - Definisce l'estetica della superfici + + Defines the appearance of surfaces + Definisce l'estetica della superfici - Shape view - Visualizzazione della figura + + Shape view + Visualizzazione della figura - Tessellation - Tassellazione + + Tessellation + Tassellazione - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Ombreggiatura piatta/Ombreggiatura Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Con l'ombreggiatura piatta le superfici normali non sono definite con il vertice risultano con una estetica non reale per superfici curve mentre usando l'ombreggiatura Phong shading risulta un'estetica più liscia. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Se questa opzione non è selezionata, verrà usata l'ombreggiatura Phong. Se selezionata verrà usata l'ombreggiatura piatta.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Ombreggiatura piatta/Ombreggiatura Phong</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Con l'ombreggiatura piatta le superfici normali non sono definite con il vertice risultano con una estetica non reale per superfici curve mentre usando l'ombreggiatura Phong shading risulta un'estetica più liscia. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Se questa opzione non è selezionata, verrà usata l'ombreggiatura Phong. Se selezionata verrà usata l'ombreggiatura piatta.</p></body></html> - Do not define normal per vertex - Non definire le normali per i vertici + + Do not define normal per vertex + Non definire le normali per i vertici - Defines the deviation of tessellation to the actual surface - Definisce la deviazione della tassellazione della superficie attuale + + Defines the deviation of tessellation to the actual surface + Definisce la deviazione della tassellazione della superficie attuale - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tassellazione</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definisce la massima deviazione della mesh tassellata della superficie. Più piccolo è il valore più lenta sarà la velocità di render e migliore sarà l'estetica.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tassellazione</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definisce la massima deviazione della mesh tassellata della superficie. Più piccolo è il valore più lenta sarà la velocità di render e migliore sarà l'estetica.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definire le normali ai vertici è anche chiamato <span style=" font-style:italic;">Ombreggiatura Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mentre definire le normali alle facce è chiamato </span>Ombreggiatura piatta<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definire le normali ai vertici è anche chiamato <span style=" font-style:italic;">Ombreggiatura Phong</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mentre definire le normali alle facce è chiamato </span>Ombreggiatura piatta<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Normali di alta qualità</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Questo rallenterà la velocità di render ma si otterranno risultati migliori.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Normali di alta qualità</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Questo rallenterà la velocità di render ma si otterranno risultati migliori.</p></body></html> - Maximum deviation depending on the model bounding box - Massima deviazione dipendente dal riquadro di delimitazione del modello + + Maximum deviation depending on the model bounding box + Massima deviazione dipendente dal riquadro di delimitazione del modello - % - % + + % + % - - Deviation - Deviazione + + Deviation + Deviazione - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - L'impostazione di una deviazione troppo piccola provoca la richiesta di più tempo per la tassellazione e quindi blocca o rallenta la GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + L'impostazione di una deviazione troppo piccola provoca la richiesta di più tempo per la tassellazione e quindi blocca o rallenta la GUI. - - + + PartGui::DlgSettingsGeneral - - General - Generale + + General + Generale - Export - Esporta + + Export + Esporta - Millimeter - Millimetro + + Millimeter + Millimetro - Meter - Metro + + Meter + Metro - Inch - Pollice + + Inch + Pollice - Units for export of STEP/IGES - Unità per l'esportazione STEP/IGES + + Units for export of STEP/IGES + Unità per l'esportazione STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Posizione + + + + 3D View + Vista 3D + + + PartGui::LoftWidget - - Too few elements - Troppo pochi elementi + + + Vertex/Wire + Vertice/Wire - At least two vertices or wires are required. - Sono necessari almeno due vertici o wire. + + + Loft + Loft - - + + + Too few elements + Troppo pochi elementi + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Sono necessari almeno due vertici o wire. + + + PartGui::Mirroring - - Mirroring - Specchia + + Mirroring + Specchia - Shapes - Forme + + Shapes + Forme - Mirror plane: - Piano di specchiatura: + + Mirror plane: + Piano di specchiatura: - XY plane - Piano XY + + XY plane + Piano XY - XZ plane - Piano XZ + + XZ plane + Piano XZ - YZ plane - Piano YZ + + YZ plane + Piano YZ - Base point: - Punto base: + + Base point: + Punto base: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Seleziona prima una forma da specchiare. + + Select a shape for mirroring, first. + Seleziona prima una forma da specchiare. - No such document '%1'. - Non esiste nessun documento '%1'. + + No such document '%1'. + Non esiste nessun documento '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Selezione errata + + + + + + Wrong selection + Selezione errata - Select two vertices - Seleziona due vertici + + + Select two vertices + Seleziona due vertici - Select three or more edges - Seleziona tre o più spigoli + Select three or more edges + Seleziona tre o più spigoli - Select two or more faces - Seleziona due o più facce + + Select one or more edges + - Select only one part object - Seleziona un solo oggetto parte + + Select two or more faces + Seleziona due o più facce - Select two vertices to create an edge - Seleziona due vertici per creare uno spigolo + + Select only one part object + Seleziona un solo oggetto parte - Select a closed set of edges - Selezionare un insieme chiuso di spigoli + + Select two vertices to create an edge + Seleziona due vertici per creare uno spigolo - Select adjacent faces - Seleziona facce adiacenti + + Select a closed set of edges + Selezionare un insieme chiuso di spigoli - All shape types can be selected - Tutti i tipi di forma possono essere selezionati + + Select adjacent faces + Seleziona facce adiacenti - - + + + All shape types can be selected + Tutti i tipi di forma possono essere selezionati + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertice/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Troppo pochi elementi + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Valore + Value + Valore - Special - Special + Special + Special - Command - Comando + Command + Comando - Stretch - Stretch + Stretch + Stretch - Move - Sposta + Move + Sposta - Rotate - Ruota + Rotate + Ruota - Offset - Offset + Offset + Offset - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Imposta colore per faccia + + Set color per face + Imposta colore per faccia - Click on the faces in the 3d view to select them. - Clicca sulle facce nella vista 3D per selezionarle. + + Click on the faces in the 3d view to select them. + Clicca sulle facce nella vista 3D per selezionarle. - Faces: - Facce: + + Faces: + Facce: - Set to default - Imposta al valore predefinito + + Set to default + Imposta al valore predefinito - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertice/Wire + Vertex/Wire + Vertice/Wire - Move right - Sposta verso destra + Move right + Sposta verso destra - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Sposta l'elemento selezionato un livello in basso.</b><p>Questo cambierà anche il livello degli elementi padre.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Sposta l'elemento selezionato un livello in basso.</b><p>Questo cambierà anche il livello degli elementi padre.</p> - Move left - Sposta verso sinistra + Move left + Sposta verso sinistra - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Sposta l'elemento selezionato un livello in alto.</b><p>Questo cambierà anche il livello degli elementi padre.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Sposta l'elemento selezionato un livello in alto.</b><p>Questo cambierà anche il livello degli elementi padre.</p> - Move up - Spostare verso l'alto + Move up + Spostare verso l'alto - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> - Move down - Sposta verso il basso + Move down + Sposta verso il basso - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Sposta l'elemento selezionato in basso</b><p>L'elemento verrà spostato all'interno del livello di gerarchia.</p> - Create solid - Crea solido + + Create solid + Crea solido - Ruled surface - Superficie rigata + + Ruled surface + Superficie rigata - - + + PartGui::TaskShapeBuilder - - Create shape - Crea forma + + + Create shape + Crea forma - Edge from vertices - Spigolo da vertici + + Edge from vertices + Spigolo da vertici - Face from edges - Faccia da spigoli + + Face from edges + Faccia da spigoli - Planar - Planare + + Planar + Planare - Shell from faces - Shell da facce + + Shell from faces + Shell da facce - Solid from shell - Solido da shell + + Solid from shell + Solido da shell - Create - Crea + + Create + Crea - All faces - Tutte le facce + + All faces + Tutte le facce - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Crea solido + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Selezione errata + + + + + + Wrong selection + Selezione errata - Select two shapes please. - Selezionare due forme. + + + Select two shapes please. + Selezionare due forme. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Tutti i file CAD (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Tutti i file CAD (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Tutti i File (*.*) + + + + All Files (*.*) + Tutti i File (*.*) - - Sewing Tolerance - Tolleranza di cucitura + + Sewing Tolerance + Tolleranza di cucitura - Enter tolerance for sewing shape: - Inserisci la tolleranza per la forma di cucitura: + + Enter tolerance for sewing shape: + Inserisci la tolleranza per la forma di cucitura: - - Edit mirror plane - Modifica il piano di specchiatura + + Edit mirror plane + Modifica il piano di specchiatura - Transform - Trasforma + + Edit chamfer edges + - - Part design - Progettazione parte + Transform + Trasforma - - Select two shapes or more, please. - Selezionare due o più forme, per favore. + + + Part design + Progettazione parte - You have to select either two edges or two wires. - È necessario selezionare due spigoli o due wire. + + + Select two shapes or more, please. + Selezionare due o più forme, per favore. - - Edit fillet edges - Modifica gli spigoli raccordati + + You have to select either two edges or two wires. + È necessario selezionare due spigoli o due wire. - - Set colors... - Imposta colori... + + Edit fillet edges + Modifica gli spigoli raccordati - - + + + Set colors... + Imposta colori... + + + Workbench - - &Part - &Parte + + &Part + &Parte - &Simple - &Semplice + + &Simple + &Semplice - &Parametric - &Parametrico + + &Parametric + &Parametrico - Part tools - Strumenti Parte + + Part tools + Strumenti Parte - Solids - Solidi + + Solids + Solidi - Boolean - Operazione booleana + + Boolean + Operazione booleana - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_ja.ts b/src/Mod/Part/Gui/Resources/translations/Part_ja.ts index e23de27d3..753674db8 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_ja.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_ja.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Block definition + + Block definition + Block definition - First limit - First limit + + First limit + First limit - Type: - Type: + + + Type: + Type: - mm - mm + + + mm + mm - Length: - Length: + + + Length: + Length: - Dimension - 寸法 + + + Dimension + 寸法 - Up to next - Up to next + + + Up to next + Up to next - Up to last - Up to last + + + Up to last + Up to last - Up to plane - Up to plane + + + Up to plane + Up to plane - Up to face - Up to face + + + Up to face + Up to face - Limit: - Limit: + + + Limit: + Limit: - No selection - No selection + + + + + No selection + No selection - Profile - プロファイル + + Profile + プロファイル - Selection: - Selection: + + Selection: + Selection: - Reverse - Reverse + + Reverse + Reverse - Both sides - 両側 + + Both sides + 両側 - Second limit - Second limit + + Second limit + Second limit - Direction - 方向 + + Direction + 方向 - Perpendicular to sketch - スケッチに垂直 + + Perpendicular to sketch + スケッチに垂直 - Reference - Reference + + Reference + Reference - Apply - 適用する + + Apply + 適用する - Cancel - キャンセル + + Cancel + キャンセル - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - 部品 + + Part + 部品 - Boolean... - ブーリアン演算... + + Boolean... + ブーリアン演算... - Run a boolean operation with two shapes selected - 選択された二つの図形のブーリアン演算を実行します + + Run a boolean operation with two shapes selected + 選択された二つの図形のブーリアン演算を実行します - - + + CmdPartBox - - Part - 部品 + + Part + 部品 - Box - Box + + Box + Box - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - 部品 + + Part + 部品 - Box fix 1 - Box fix 1 + + Box fix 1 + Box fix 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - 部品 + + Part + 部品 - Box fix 2 - Box fix 2 + + Box fix 2 + Box fix 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - 部品 + + Part + 部品 - Shape builder... - 形状ビルダー... + + Shape builder... + 形状ビルダー... - Advanced utility to create shapes - 高度な図形作成ユーティリティ + + Advanced utility to create shapes + 高度な図形作成ユーティリティ - - + + + CmdPartChamfer + + + Part + 部品 + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - 部品 + + Part + 部品 - Intersection - Intersection + + Intersection + Intersection - Make an intersection of two shapes - 二つの図形の交点を作成 + + Make an intersection of two shapes + 二つの図形の交点を作成 - - + + CmdPartCone - - Part - 部品 + + Part + 部品 - Cone - Cone + + Cone + Cone - Create a cone solid - Create a cone solid + + Create a cone solid + Create a cone solid - - + + CmdPartCrossSections - - Part - 部品 + + Part + 部品 - Cross-sections... - 断面... + + Cross-sections... + 断面... - Cross-sections - 断面 + + Cross-sections + 断面 - - + + CmdPartCut - Part - 部品 + + Part + 部品 - Cut - 切り取り + + Cut + 切り取り - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - 部品 + + Part + 部品 - Create a Cylinder - 円柱を作成 + + Create a Cylinder + 円柱を作成 - Cylinder - Cylinder + + Cylinder + Cylinder - - + + CmdPartExport - - Part - 部品 + + Part + 部品 - Export CAD... - CAD をエクスポート... + + Export CAD... + CAD をエクスポート... - Exports to a CAD file - CADファイルにエクスポート + + Exports to a CAD file + CADファイルにエクスポート - - + + CmdPartExtrude - Part - 部品 + + Part + 部品 - Extrude... - 押し出し... + + Extrude... + 押し出し... - Extrude a selected sketch - Extrude a selected sketch + + Extrude a selected sketch + Extrude a selected sketch - - + + CmdPartFillet - Part - 部品 + + Part + 部品 - Fillet... - フィレット... + + Fillet... + フィレット... - Fillet the selected edges of a shape - Fillet the selected edges of a shape + + Fillet the selected edges of a shape + Fillet the selected edges of a shape - - + + CmdPartFuse - Part - 部品 + + Part + 部品 - Union - Union + + Union + Union - Make a union of several shapes - Make a union of several shapes + + Make a union of several shapes + Make a union of several shapes - - + + CmdPartImport - Part - 部品 + + Part + 部品 - Imports a CAD file - CADファイルをインポート + + Imports a CAD file + CADファイルをインポート - Import CAD... - Import CAD... + + Import CAD... + Import CAD... - - + + CmdPartImportCurveNet - Part - 部品 + + Part + 部品 - Import a curve network - Import a curve network + + Import a curve network + Import a curve network - Import curve network... - Import curve network... + + Import curve network... + Import curve network... - - + + CmdPartLoft - Part - 部品 + + Part + 部品 - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - 部品 + + Part + 部品 - Convert to solid - ソリッドに変換 + + Convert to solid + ソリッドに変換 - Create solid from a shell or compound - Create solid from a shell or compound + + Create solid from a shell or compound + Create solid from a shell or compound - - + + CmdPartMirror - Part - 部品 + + Part + 部品 - Mirroring... - ミラーリング... + + Mirroring... + ミラーリング... - Mirroring a selected shape - 選択した図形をミラーリング + + Mirroring a selected shape + 選択した図形をミラーリング - - + + CmdPartPickCurveNet - Part - 部品 + + Part + 部品 - Pick curve network - Pick curve network + + Pick curve network + Pick curve network - Pick a curve network - Pick a curve network + + Pick a curve network + Pick a curve network - - + + CmdPartPrimitives - Part - 部品 + + Part + 部品 - Create primitives... - プリミティブを作成... + + Create primitives... + プリミティブを作成... - Creation of parametrized geometric primitives - Creation of parametrized geometric primitives + + Creation of parametrized geometric primitives + Creation of parametrized geometric primitives - - + + + CmdPartRefineShape + + + Part + 部品 + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - 部品 + + Part + 部品 - Reverse shapes - 図形を反転 + + Reverse shapes + 図形を反転 - Reverse orientation of shapes - Reverse orientation of shapes + + Reverse orientation of shapes + Reverse orientation of shapes - - + + CmdPartRevolve - Part - 部品 + + Part + 部品 - Revolve... - 回転... + + Revolve... + 回転... - Revolve a selected shape - 選択した図形を回転 + + Revolve a selected shape + 選択した図形を回転 - - + + CmdPartRuledSurface - Part - 部品 + + Part + 部品 - Create ruled surface - Create ruled surface + + Create ruled surface + Create ruled surface - Create a ruled surface from two curves - Create a ruled surface from two curves + + Create a ruled surface from two curves + Create a ruled surface from two curves - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - 部品 + + Part + 部品 - Section - Section + + Section + Section - - + + CmdPartShapeFromMesh - - Part - 部品 + + Part + 部品 - Create shape from mesh... - メッシュから形状を作成... + + Create shape from mesh... + メッシュから形状を作成... - Create shape from selected mesh object - Create shape from selected mesh object + + Create shape from selected mesh object + Create shape from selected mesh object - - + + CmdPartSimpleCopy - Part - 部品 + + Part + 部品 - Create simple copy - Create simple copy + + Create simple copy + Create simple copy - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - 部品 + + Part + 部品 - Create Cylinder... - 円柱を作成... + + Create Cylinder... + 円柱を作成... - Create a Cylinder - 円柱を作成 + + Create a Cylinder + 円柱を作成 - - + + CmdPartSphere - - Create a sphere solid - Create a sphere solid + + Create a sphere solid + Create a sphere solid - Part - 部品 + + Part + 部品 - Sphere - Sphere + + Sphere + Sphere - - + + + CmdPartSweep + + + Part + 部品 + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Create a torus solid + + Create a torus solid + Create a torus solid - Part - 部品 + + Part + 部品 - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Select a shape for extrusion, first. + Select a shape for extrusion, first. + Select a shape for extrusion, first. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Select a shape for revolution, first. + Select a shape for revolution, first. + Select a shape for revolution, first. - - + + DlgSettings3DViewPart - Deviation - Deviation + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - 断面 + + Cross sections + 断面 - Guiding plane - Guiding plane + + Guiding plane + Guiding plane - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - 位置: + + Position: + 位置: - Sections - Sections + + Sections + Sections - On both sides - On both sides + + On both sides + On both sides - Count - Count + + Count + Count - Distance: - 距離: + + Distance: + 距離: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - ブール演算 + + Boolean Operation + ブール演算 - Second shape - 2番目の図形 + + Second shape + 2番目の図形 - First shape - 最初の図形 + + First shape + 最初の図形 - Boolean operation - ブール演算 + + Boolean operation + ブール演算 - Section - Section + + Section + Section - Difference - Difference + + Difference + Difference - Union - Union + + Union + Union - Intersection - Intersection + + Intersection + Intersection - - Cannot perform a boolean operation with the same shape - Cannot perform a boolean operation with the same shape + + Cannot perform a boolean operation with the same shape + Cannot perform a boolean operation with the same shape - - Solids - ソリッド + + + Solids + ソリッド - Shells - Shells + + + Shells + Shells - Compounds - Compounds + + + Compounds + Compounds - Faces - + + + Faces + - Swap selection - Swap selection + + Swap selection + Swap selection - - Select a shape on the left side, first - 最初に左側の図形を選択します + + Select a shape on the left side, first + 最初に左側の図形を選択します - Select a shape on the right side, first - 最初に右側の図形を選択します + + Select a shape on the right side, first + 最初に右側の図形を選択します - No active document available - 利用可能なアクティブドキュメントはありませんでした + + No active document available + 利用可能なアクティブドキュメントはありませんでした - One of the selected objects doesn't exist anymore - 選択したオブジェクトはもう存在しません + + One of the selected objects doesn't exist anymore + 選択したオブジェクトはもう存在しません - Performing union on non-solids is not possible - Performing union on non-solids is not possible + + Performing union on non-solids is not possible + Performing union on non-solids is not possible - Performing intersection on non-solids is not possible - Performing intersection on non-solids is not possible + + Performing intersection on non-solids is not possible + Performing intersection on non-solids is not possible - Performing difference on non-solids is not possible - Performing difference on non-solids is not possible + + Performing difference on non-solids is not possible + Performing difference on non-solids is not possible - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Extrude + + Extrude + Extrude - Direction - 方向 + + Direction + 方向 - Along normal - Along normal + + Along normal + Along normal - Length: - Length: + + Length: + Length: - 3D view - 3Dビュー + + 3D view + 3Dビュー - Note:This option works for planes only - Note:This option works for planes only + + Note:This option works for planes only + Note:This option works for planes only - Shape - 図形 + + Create solid + ソリッド作成 - - + + Taper outward angle + - X: - X: + + Shape + 図形 - Z: - z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Select a shape for extrusion, first. + + Z: + z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Select a shape for extrusion, first. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Fillet Edges + + Fillet Edges + Fillet Edges - Fillet Parameter - Fillet Parameter + + Fillet Parameter + Fillet Parameter - Radius: - 半径: + + Radius: + 半径: - Fillet type: - フィレットの種類: + + Fillet type: + フィレットの種類: - Constant Radius - Constant Radius + + Constant Radius + Constant Radius - Variable Radius - Variable Radius + + Variable Radius + Variable Radius - Shape - 図形 + + Shape + 図形 - Selected shape: - Selected shape: + + Selected shape: + Selected shape: - No selection - No selection + + No selection + No selection - - Edges to fillet - Edges to fillet + + Edges to fillet + Edges to fillet - Start radius - Start radius + + + Start radius + Start radius - End radius - End radius + + End radius + End radius - Radius - 半径 + + Radius + 半径 - No edge selected - エッジが選択されていません + + No edge selected + エッジが選択されていません - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - No edge entity is checked to fillet. + No edge entity is checked to fillet. Please check one or more edge entities first. - - All - すべて + + All + すべて - None - なし + + None + なし - - Edge%1 - Edge%1 + + + Edge%1 + Edge%1 - No shape selected - 図形が選択されていません + + No shape selected + 図形が選択されていません - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - - + + PartGui::DlgPartBox - - Box definition - Box definition + + Box definition + Box definition - X: - X: + + X: + X: - Z: - z: + + Z: + z: - Y: - Y: + + Y: + Y: - Cancel - キャンセル + + Cancel + キャンセル - OK - OK + + OK + OK - Size: - サイズ: + + Size: + サイズ: - Height: - Height: + + Height: + Height: - Width: - 幅: + + Width: + 幅: - Length: - Length: + + Length: + Length: - Position: - 位置: + + Position: + 位置: - Direction: - Direction: + + Direction: + Direction: - - + + PartGui::DlgPartCylinder - - Cylinder definition - 円柱の定義 + + Cylinder definition + 円柱の定義 - Parameter - パラメータ + + Parameter + パラメータ - Height: - Height: + + Height: + Height: - Radius: - 半径: + + Radius: + 半径: - Position: - 位置: + + Position: + 位置: - Direction: - Direction: + + Direction: + Direction: - X: - X: + + X: + X: - Z: - z: + + Z: + z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - キャンセル + + Cancel + キャンセル - - + + PartGui::DlgPartImportIges - - IGES input file - IGES input file + + IGES input file + IGES input file - ... - ... + + ... + ... - Cancel - キャンセル + + Cancel + キャンセル - OK - OK + + OK + OK - File Name - File Name + + File Name + File Name - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES(*.IGS *.IGES);;すべてのファイル(*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES(*.IGS *.IGES);;すべてのファイル(*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - キャンセル + + Cancel + キャンセル - OK - OK + + OK + OK - Step input file - Step input file + + Step input file + Step input file - File Name - File Name + + File Name + File Name - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;All Files (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;All Files (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometric Primitives + + Geometric Primitives + Geometric Primitives - Primitive - プリミティブ + Primitive + プリミティブ - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X軸の値: + X Axis Value: + X軸の値: - Y Axis Value: - Y軸の値: + Y Axis Value: + Y軸の値: - Z Axis Value: - Z軸の値: + Z Axis Value: + Z軸の値: - Wedge - Wedge + + Wedge + Wedge - Circle - + + Circle + - Vertex - 頂点 + Vertex + 頂点 - Position - Position + Position + Position - Z: - z: + + + + Z: + z: - X: - X: + + + + X: + X: - Direction: - Direction: + Direction: + Direction: - Y: - Y: + + + + Y: + Y: - Plane - Plane + + Plane + Plane - Box - Box + + Box + Box - Cylinder - Cylinder + + Cylinder + Cylinder - Cone - Cone + + Cone + Cone - Sphere - Sphere + + Sphere + Sphere - Ellipsoid - Ellipsoid + + Ellipsoid + Ellipsoid - Torus - Torus + + Torus + Torus - Parameter - パラメータ + + Ellipse + - Width: - 幅: + + Point + - Length: - Length: + + Line + - Height: - Height: + + Parameter + パラメータ - Angle: - 角度: + + + Width: + 幅: - Radius: - 半径: + + + Length: + Length: - Radius 1: - 半径 1: + + + + + Height: + Height: - Radius 2: - 半径 2: + + + + Angle: + 角度: - U parametric: - U parametric: + + + + + Radius: + 半径: - V parametric: - V parametric: + + + + Radius 1: + 半径 1: - &Create - &Create + + + + Radius 2: + 半径 2: - Alt+C - Alt+C + + + + U parametric: + U parametric: - Cl&ose - 閉じる(&O) + + + + V parametric: + V parametric: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Create %1 + + Y min/max: + - No active document - No active document + + Z min/max: + - - Pitch: - Pitch: + + X2 min/max: + - Helix - 螺旋 + + Z2 min/max: + - 3D View - 3D 表示 + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Create + + + Alt+C + Alt+C + + + Cl&ose + 閉じる(&O) + + + Alt+O + Alt+O + + + + + + Create %1 + Create %1 + + + + No active document + No active document + + + + Pitch: + Pitch: + + + + Helix + 螺旋 + + + 3D View + 3D 表示 + + + PartGui::DlgRevolution - - Revolve - 回転 + + Revolve + 回転 - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - 角度: + + Angle: + 角度: - Z: - z: + + Z: + z: - Axis: - 軸: + + Axis: + 軸: - Shape - 図形 + + Shape + 図形 - - Select a shape for revolution, first. - Select a shape for revolution, first. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Select a shape for revolution, first. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - View accuracy / Performance + + View accuracy / Performance + View accuracy / Performance - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Using high-quality normals + + Using high-quality normals + Using high-quality normals - This will slow down render speed but will lead to nicer results - This will slow down render speed but will lead to nicer results + + This will slow down render speed but will lead to nicer results + This will slow down render speed but will lead to nicer results - Defines the appearance of surfaces - Defines the appearance of surfaces + + Defines the appearance of surfaces + Defines the appearance of surfaces - Shape view - 図形ビュー + + Shape view + 図形ビュー - Tessellation - Tessellation + + Tessellation + Tessellation - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - Do not define normal per vertex - Do not define normal per vertex + + Do not define normal per vertex + Do not define normal per vertex - Defines the deviation of tessellation to the actual surface - Defines the deviation of tessellation to the actual surface + + Defines the deviation of tessellation to the actual surface + Defines the deviation of tessellation to the actual surface - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">ヒント</span> </p><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-style:italic;">フォンシェーディング</span>と呼ばれています</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">また、面ごとの法線を定義する方法は</span>フラットシェーディング<span style=" font-style:normal;">と呼ばれています。</span> </p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">ヒント</span> </p><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-style:italic;">フォンシェーディング</span>と呼ばれています</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">また、面ごとの法線を定義する方法は</span>フラットシェーディング<span style=" font-style:normal;">と呼ばれています。</span> </p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - Maximum deviation depending on the model bounding box - Maximum deviation depending on the model bounding box + + Maximum deviation depending on the model bounding box + Maximum deviation depending on the model bounding box - % - % + + % + % - - Deviation - Deviation + + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - 標準 + + General + 標準 - Export - エクスポート + + Export + エクスポート - Millimeter - ミリメートル + + Millimeter + ミリメートル - Meter - メートル + + Meter + メートル - Inch - インチ + + Inch + インチ - Units for export of STEP/IGES - Units for export of STEP/IGES + + Units for export of STEP/IGES + Units for export of STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Position + + + + 3D View + 3D 表示 + + + PartGui::LoftWidget - - Too few elements - Too few elements + + + Vertex/Wire + 頂点/連線 - At least two vertices or wires are required. - 少なくとも二つの頂点か連線が必要です。 + + + Loft + Loft - - + + + Too few elements + Too few elements + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + 少なくとも二つの頂点か連線が必要です。 + + + PartGui::Mirroring - - Mirroring - ミラーリング + + Mirroring + ミラーリング - Shapes - Shapes + + Shapes + Shapes - Mirror plane: - Mirror plane: + + Mirror plane: + Mirror plane: - XY plane - XY平面 + + XY plane + XY平面 - XZ plane - XZ平面 + + XZ plane + XZ平面 - YZ plane - YZ平面 + + YZ plane + YZ平面 - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - 最初にミラーリングのための図形を選択します + + Select a shape for mirroring, first. + 最初にミラーリングのための図形を選択します - No such document '%1'. - No such document '%1'. + + No such document '%1'. + No such document '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - 誤った選択 + + + + + + Wrong selection + 誤った選択 - Select two vertices - 二つの頂点を選択 + + + Select two vertices + 二つの頂点を選択 - Select three or more edges - 三つ以上のエッジを選択 + Select three or more edges + 三つ以上のエッジを選択 - Select two or more faces - 二つ以上の面を選択 + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + 二つ以上の面を選択 - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - 隣接する面を選択 + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - All shape types can be selected + + Select adjacent faces + 隣接する面を選択 - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + 頂点/連線 + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Too few elements + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - + Value + - Special - Special + Special + Special - Command - コマンド + Command + コマンド - Stretch - Stretch + Stretch + Stretch - Move - 移動 + Move + 移動 - Rotate - 回転 + Rotate + 回転 - Offset - オフセット + Offset + オフセット - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - 面ごとの色の設定 + + Set color per face + 面ごとの色の設定 - Click on the faces in the 3d view to select them. - それらを選択するには、3Dビューで面をクリックしてください。 + + Click on the faces in the 3d view to select them. + それらを選択するには、3Dビューで面をクリックしてください。 - Faces: - 面: + + Faces: + 面: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - 頂点/連線 + Vertex/Wire + 頂点/連線 - Move right - 右へ移動 + Move right + 右へ移動 - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>選択した項目1つ下のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>選択した項目1つ下のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> - Move left - 左へ移動 + Move left + 左へ移動 - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>選択した項目を1つ上のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>選択した項目を1つ上のレベルに移動します。</b> <p>これは、親項目のレベルも変更します。 </p> - Move up - 上へ移動 + Move up + 上へ移動 - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>選択された項目を上へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>選択された項目を上へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> - Move down - 下へ移動 + Move down + 下へ移動 - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>選択された項目を下へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>選択された項目を下へ移動します。</b> <p>項目は階層レベル内で移動されます。 </p> - Create solid - ソリッド作成 + + Create solid + ソリッド作成 - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - 作成 + + Create + 作成 - All faces - すべての面 + + All faces + すべての面 - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + ソリッド作成 + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - 誤った選択 + + + + + + Wrong selection + 誤った選択 - Select two shapes please. - Select two shapes please. + + + Select two shapes please. + Select two shapes please. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - すべてのファイル (*.*) + + + + All Files (*.*) + すべてのファイル (*.*) - - Sewing Tolerance - Sewing Tolerance + + Sewing Tolerance + Sewing Tolerance - Enter tolerance for sewing shape: - Enter tolerance for sewing shape: + + Enter tolerance for sewing shape: + Enter tolerance for sewing shape: - - Edit mirror plane - Edit mirror plane + + Edit mirror plane + Edit mirror plane - Transform - 変換 + + Edit chamfer edges + - - Part design - Part design + Transform + 変換 - - Select two shapes or more, please. - 二つ以上の図形を選択してください. + + + Part design + Part design - You have to select either two edges or two wires. - You have to select either two edges or two wires. + + + Select two shapes or more, please. + 二つ以上の図形を選択してください. - - Edit fillet edges - フィレットエッジを編集 + + You have to select either two edges or two wires. + You have to select either two edges or two wires. - - Set colors... - 色を設定... + + Edit fillet edges + フィレットエッジを編集 - - + + + Set colors... + 色を設定... + + + Workbench - - &Part - 部品(&p) + + &Part + 部品(&p) - &Simple - &Simple + + &Simple + &Simple - &Parametric - &Parametric + + &Parametric + &Parametric - Part tools - 部品ツール + + Part tools + 部品ツール - Solids - ソリッド + + Solids + ソリッド - Boolean - Boolean + + Boolean + Boolean - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_nl.ts b/src/Mod/Part/Gui/Resources/translations/Part_nl.ts index 99e22b40e..7ec5699f0 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_nl.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_nl.ts @@ -1,1873 +1,2521 @@ - - + + BlockDefinition - - Block definition - Blok-definitie + + Block definition + Blok-definitie - First limit - Eerste limiet + + First limit + Eerste limiet - Type: - Type: + + + Type: + Type: - mm - mm + + + mm + mm - Length: - Lengte: + + + Length: + Lengte: - Dimension - Afmeting + + + Dimension + Afmeting - Up to next - Naar de volgende + + + Up to next + Naar de volgende - Up to last - Naar de laatste + + + Up to last + Naar de laatste - Up to plane - Naar vlak + + + Up to plane + Naar vlak - Up to face - Naar oppervlak + + + Up to face + Naar oppervlak - Limit: - Limiet: + + + Limit: + Limiet: - No selection - Geen selectie + + + + + No selection + Geen selectie - Profile - Profiel + + Profile + Profiel - Selection: - Selectie: + + Selection: + Selectie: - Reverse - Omdraaien + + Reverse + Omdraaien - Both sides - Beide kanten + + Both sides + Beide kanten - Second limit - Tweede limiet + + Second limit + Tweede limiet - Direction - Richting + + Direction + Richting - Perpendicular to sketch - Perpendicular to sketch + + Perpendicular to sketch + Perpendicular to sketch - Reference - Referentie + + Reference + Referentie - Apply - Toepassen + + Apply + Toepassen - Cancel - Annuleren + + Cancel + Annuleren - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Component + + Part + Component - Boolean... - Boolean... + + Boolean... + Boolean... - Run a boolean operation with two shapes selected - Een Booleaanse bewerking uitvoeren met twee geselecteerde vormen + + Run a boolean operation with two shapes selected + Een Booleaanse bewerking uitvoeren met twee geselecteerde vormen - - + + CmdPartBox - - Part - Component + + Part + Component - Box - Blok + + Box + Blok - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - Component + + Part + Component - Box fix 1 - Blok positie 1 + + Box fix 1 + Blok positie 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - Component + + Part + Component - Box fix 2 - Blok positie 2 + + Box fix 2 + Blok positie 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - Component + + Part + Component - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + Component + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Component + + Part + Component - Intersection - Snijpunt + + Intersection + Snijpunt - Make an intersection of two shapes - Make an intersection of two shapes + + Make an intersection of two shapes + Make an intersection of two shapes - - + + CmdPartCone - - Part - Component + + Part + Component - Cone - Kegel + + Cone + Kegel - Create a cone solid - Create a cone solid + + Create a cone solid + Create a cone solid - - + + CmdPartCrossSections - - Part - Component + + Part + Component - Cross-sections... - Dwarsdoorsneden... + + Cross-sections... + Dwarsdoorsneden... - Cross-sections - Dwarsdoorsneden + + Cross-sections + Dwarsdoorsneden - - + + CmdPartCut - Part - Component + + Part + Component - Cut - Snijden + + Cut + Snijden - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - Component + + Part + Component - Create a Cylinder - Maak een cilinder + + Create a Cylinder + Maak een cilinder - Cylinder - Cilinder + + Cylinder + Cilinder - - + + CmdPartExport - - Part - Component + + Part + Component - Export CAD... - Exporteer CAD... + + Export CAD... + Exporteer CAD... - Exports to a CAD file - Exports to a CAD file + + Exports to a CAD file + Exports to a CAD file - - + + CmdPartExtrude - Part - Component + + Part + Component - Extrude... - Uitrekken... + + Extrude... + Uitrekken... - Extrude a selected sketch - Een geselecteerde schets extruderen + + Extrude a selected sketch + Een geselecteerde schets extruderen - - + + CmdPartFillet - Part - Component + + Part + Component - Fillet... - Afronden... + + Fillet... + Afronden... - Fillet the selected edges of a shape - Rond de geselecteerde randen van een vorm af + + Fillet the selected edges of a shape + Rond de geselecteerde randen van een vorm af - - + + CmdPartFuse - Part - Component + + Part + Component - Union - Verbinden + + Union + Verbinden - Make a union of several shapes - Make a union of several shapes + + Make a union of several shapes + Make a union of several shapes - - + + CmdPartImport - Part - Component + + Part + Component - Imports a CAD file - Importeert een CAD-bestand + + Imports a CAD file + Importeert een CAD-bestand - Import CAD... - Import CAD... + + Import CAD... + Import CAD... - - + + CmdPartImportCurveNet - Part - Component + + Part + Component - Import a curve network - Importeer een gekromd raster + + Import a curve network + Importeer een gekromd raster - Import curve network... - Importeer een gekromd raster... + + Import curve network... + Importeer een gekromd raster... - - + + CmdPartLoft - Part - Component + + Part + Component - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Component + + Part + Component - Convert to solid - Converteren naar volumemodel + + Convert to solid + Converteren naar volumemodel - Create solid from a shell or compound - Create solid from a shell or compound + + Create solid from a shell or compound + Create solid from a shell or compound - - + + CmdPartMirror - Part - Component + + Part + Component - Mirroring... - Spiegelen... + + Mirroring... + Spiegelen... - Mirroring a selected shape - Spiegelen van een geselecteerde vorm + + Mirroring a selected shape + Spiegelen van een geselecteerde vorm - - + + CmdPartPickCurveNet - Part - Component + + Part + Component - Pick curve network - Kies een gekromd raster + + Pick curve network + Kies een gekromd raster - Pick a curve network - Kies een gekromd raster + + Pick a curve network + Kies een gekromd raster - - + + CmdPartPrimitives - Part - Component + + Part + Component - Create primitives... - Maak primitieven... + + Create primitives... + Maak primitieven... - Creation of parametrized geometric primitives - Het maken van geparametriseerde geometrische primitieven + + Creation of parametrized geometric primitives + Het maken van geparametriseerde geometrische primitieven - - + + + CmdPartRefineShape + + + Part + Component + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Component + + Part + Component - Reverse shapes - Omkeren van vormen + + Reverse shapes + Omkeren van vormen - Reverse orientation of shapes - Omgekeerde oriëntatie van vormen + + Reverse orientation of shapes + Omgekeerde oriëntatie van vormen - - + + CmdPartRevolve - Part - Component + + Part + Component - Revolve... - Revolve... + + Revolve... + Revolve... - Revolve a selected shape - Revolve a selected shape + + Revolve a selected shape + Revolve a selected shape - - + + CmdPartRuledSurface - Part - Component + + Part + Component - Create ruled surface - Create ruled surface + + Create ruled surface + Create ruled surface - Create a ruled surface from two curves - Create a ruled surface from two curves + + Create a ruled surface from two curves + Create a ruled surface from two curves - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - Component + + Part + Component - Section - Deel + + Section + Deel - - + + CmdPartShapeFromMesh - - Part - Component + + Part + Component - Create shape from mesh... - Create shape from mesh... + + Create shape from mesh... + Create shape from mesh... - Create shape from selected mesh object - Create shape from selected mesh object + + Create shape from selected mesh object + Create shape from selected mesh object - - + + CmdPartSimpleCopy - Part - Component + + Part + Component - Create simple copy - Create simple copy + + Create simple copy + Create simple copy - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Component + + Part + Component - Create Cylinder... - Maak Cilinder... + + Create Cylinder... + Maak Cilinder... - Create a Cylinder - Maak een cilinder + + Create a Cylinder + Maak een cilinder - - + + CmdPartSphere - - Create a sphere solid - Create a sphere solid + + Create a sphere solid + Create a sphere solid - Part - Component + + Part + Component - Sphere - Bol + + Sphere + Bol - - + + + CmdPartSweep + + + Part + Component + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Create a torus solid + + Create a torus solid + Create a torus solid - Part - Component + + Part + Component - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Selecteer eerst een vorm voor extrusie. + Select a shape for extrusion, first. + Selecteer eerst een vorm voor extrusie. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Selecteer eerst een vorm om te roteren. + Select a shape for revolution, first. + Selecteer eerst een vorm om te roteren. - - + + DlgSettings3DViewPart - Deviation - Deviation + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Cross sections + + Cross sections + Cross sections - Guiding plane - Guiding plane + + Guiding plane + Guiding plane - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Positie: + + Position: + Positie: - Sections - Sections + + Sections + Sections - On both sides - Aan beide zijden + + On both sides + Aan beide zijden - Count - Tellen + + Count + Tellen - Distance: - Afstand: + + Distance: + Afstand: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Boleaanse bewerkingen + + Boolean Operation + Boleaanse bewerkingen - Second shape - Tweede vorm + + Second shape + Tweede vorm - First shape - Eerste vorm + + First shape + Eerste vorm - Boolean operation - Boleaanse operatie + + Boolean operation + Boleaanse operatie - Section - Deel + + Section + Deel - Difference - verschil + + Difference + verschil - Union - Verbinden + + Union + Verbinden - Intersection - Snijpunt + + Intersection + Snijpunt - - Cannot perform a boolean operation with the same shape - Kan een booleaanse bewerking niet uit te voeren met dezelfde vorm + + Cannot perform a boolean operation with the same shape + Kan een booleaanse bewerking niet uit te voeren met dezelfde vorm - - Solids - Volumemodel + + + Solids + Volumemodel - Shells - Shells + + + Shells + Shells - Compounds - Compounds + + + Compounds + Compounds - Faces - Vlakken + + + Faces + Vlakken - Swap selection - Wissel selectie + + Swap selection + Wissel selectie - - Select a shape on the left side, first - Selecteer eerst een vorm aan de linkerkant + + Select a shape on the left side, first + Selecteer eerst een vorm aan de linkerkant - Select a shape on the right side, first - Selecteer eerst een vorm aan de rechterkant + + Select a shape on the right side, first + Selecteer eerst een vorm aan de rechterkant - No active document available - Geen actief document beschikbaar + + No active document available + Geen actief document beschikbaar - One of the selected objects doesn't exist anymore - Eén van de geselecteerde objecten bestaat niet meer + + One of the selected objects doesn't exist anymore + Eén van de geselecteerde objecten bestaat niet meer - Performing union on non-solids is not possible - Performing union on non-solids is not possible + + Performing union on non-solids is not possible + Performing union on non-solids is not possible - Performing intersection on non-solids is not possible - Performing intersection on non-solids is not possible + + Performing intersection on non-solids is not possible + Performing intersection on non-solids is not possible - Performing difference on non-solids is not possible - Performing difference on non-solids is not possible + + Performing difference on non-solids is not possible + Performing difference on non-solids is not possible - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Uitrekken + + Extrude + Uitrekken - Direction - Richting + + Direction + Richting - Along normal - Langs de normaal + + Along normal + Langs de normaal - Length: - Lengte: + + Length: + Lengte: - 3D view - 3D view + + 3D view + 3D view - Note:This option works for planes only - Note:This option works for planes only + + Note:This option works for planes only + Note:This option works for planes only - Shape - Vorm + + Create solid + Maak een volumemodel - - '' + + Taper outward angle + - X: - X: + + Shape + Vorm - Z: - Z: + + '' - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Selecteer eerst een vorm voor extrusie. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Selecteer eerst een vorm voor extrusie. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Kanten afronden + + Fillet Edges + Kanten afronden - Fillet Parameter - Afrond-parameter + + Fillet Parameter + Afrond-parameter - Radius: - Straal: + + Radius: + Straal: - Fillet type: - Afrond-type: + + Fillet type: + Afrond-type: - Constant Radius - Constante radius + + Constant Radius + Constante radius - Variable Radius - Variabele radius + + Variable Radius + Variabele radius - Shape - Vorm + + Shape + Vorm - Selected shape: - Geselecteerde vorm: + + Selected shape: + Geselecteerde vorm: - No selection - Geen selectie + + No selection + Geen selectie - - Edges to fillet - Af te ronden kanten + + Edges to fillet + Af te ronden kanten - Start radius - Start-radius + + + Start radius + Start-radius - End radius - Eind-radius + + End radius + Eind-radius - Radius - Radius + + Radius + Radius - No edge selected - Geen kant geselecteerd + + No edge selected + Geen kant geselecteerd - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Geen rand is geselecteerd om af te ronden. + Geen rand is geselecteerd om af te ronden. Gelieve eerst één of meerdere randen te selecteren. - - All - Alles + + All + Alles - None - Geen + + None + Geen - - Edge%1 - Rand %1 + + + Edge%1 + Rand %1 - No shape selected - Geen vorm geselecteerd + + No shape selected + Geen vorm geselecteerd - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Geen geldige vorm geselecteerd. Selecteer eerst een geldige vorm in het uitklap-scherm. + Geen geldige vorm geselecteerd. Selecteer eerst een geldige vorm in het uitklap-scherm. - - + + PartGui::DlgPartBox - - Box definition - Blok-definitie + + Box definition + Blok-definitie - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Annuleren + + Cancel + Annuleren - OK - OK + + OK + OK - Size: - Grootte: + + Size: + Grootte: - Height: - Hoogte: + + Height: + Hoogte: - Width: - Breedte: + + Width: + Breedte: - Length: - Lengte: + + Length: + Lengte: - Position: - Positie: + + Position: + Positie: - Direction: - Richting: + + Direction: + Richting: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Cilinder-definitie + + Cylinder definition + Cilinder-definitie - Parameter - Parameter + + Parameter + Parameter - Height: - Hoogte: + + Height: + Hoogte: - Radius: - Straal: + + Radius: + Straal: - Position: - Positie: + + Position: + Positie: - Direction: - Richting: + + Direction: + Richting: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Annuleren + + Cancel + Annuleren - - + + PartGui::DlgPartImportIges - - IGES input file - IGES-invoer bestand + + IGES input file + IGES-invoer bestand - ... - ... + + ... + ... - Cancel - Annuleren + + Cancel + Annuleren - OK - OK + + OK + OK - File Name - Bestandsnaam + + File Name + Bestandsnaam - - '' + + '' - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES(*.igs *.iges);;Alle bestanden(*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES(*.igs *.iges);;Alle bestanden(*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Annuleren + + Cancel + Annuleren - OK - OK + + OK + OK - Step input file - Step input-bestand + + Step input file + Step input-bestand - File Name - Bestandsnaam + + File Name + Bestandsnaam - - '' + + '' - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP(*.stp *.step);;Alle bestanden(*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP(*.stp *.step);;Alle bestanden(*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometrische primitieven + + Geometric Primitives + Geometrische primitieven - Primitive - Primitieve + Primitive + Primitieve - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Hoek - 0 voor cil + Angle - 0 for cyl + Hoek - 0 voor cil - Angle0 - Hoek0 + Angle0 + Hoek0 - Angle1 - Hoek1 + Angle1 + Hoek1 - X Axis Value: - X-as Waarde: + X Axis Value: + X-as Waarde: - Y Axis Value: - Y-as Waarde: + Y Axis Value: + Y-as Waarde: - Z Axis Value: - Z-as Waarde: + Z Axis Value: + Z-as Waarde: - Wedge - Wig + + Wedge + Wig - Circle - Cirkel + + Circle + Cirkel - Vertex - Vertex + Vertex + Vertex - Position - Positie + Position + Positie - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Richting: + Direction: + Richting: - Y: - Y: + + + + Y: + Y: - Plane - Vlak + + Plane + Vlak - Box - Blok + + Box + Blok - Cylinder - Cilinder + + Cylinder + Cilinder - Cone - Kegel + + Cone + Kegel - Sphere - Bol + + Sphere + Bol - Ellipsoid - Ellipsoïde + + Ellipsoid + Ellipsoïde - Torus - Torus + + Torus + Torus - Parameter - Parameter + + Ellipse + - Width: - Breedte: + + Point + - Length: - Lengte: + + Line + - Height: - Hoogte: + + Parameter + Parameter - Angle: - Hoek: + + + Width: + Breedte: - Radius: - Straal: + + + Length: + Lengte: - Radius 1: - Straal 1: + + + + + Height: + Hoogte: - Radius 2: - Straal 2: + + + + Angle: + Hoek: - U parametric: - U-parameter: + + + + + Radius: + Straal: - V parametric: - V-parameter: + + + + Radius 1: + Straal 1: - &Create - &Maken + + + + Radius 2: + Straal 2: - Alt+C - Alt+C + + + + U parametric: + U-parameter: - Cl&ose - &Sluiten + + + + V parametric: + V-parameter: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Maak %1 + + Y min/max: + - No active document - Geen actief document + + Z min/max: + - - Pitch: - Steiging: + + X2 min/max: + - Helix - Helix + + Z2 min/max: + - 3D View - 3D-aanzicht + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Maken + + + Alt+C + Alt+C + + + Cl&ose + &Sluiten + + + Alt+O + Alt+O + + + + + + Create %1 + Maak %1 + + + + No active document + Geen actief document + + + + Pitch: + Steiging: + + + + Helix + Helix + + + 3D View + 3D-aanzicht + + + PartGui::DlgRevolution - - Revolve - Draaien + + Revolve + Draaien - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Hoek: + + Angle: + Hoek: - Z: - Z: + + Z: + Z: - Axis: - Assen: + + Axis: + Assen: - Shape - Vorm + + Shape + Vorm - - Select a shape for revolution, first. - Selecteer eerst een vorm om te roteren. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Selecteer eerst een vorm om te roteren. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Bekijk nauwkeurigheid/prestatie + + View accuracy / Performance + Bekijk nauwkeurigheid/prestatie - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Met behulp van hoge-kwaliteit normalen + + Using high-quality normals + Met behulp van hoge-kwaliteit normalen - This will slow down render speed but will lead to nicer results - Dit zal de render-snelheid verlagen maar leiden tot mooiere resultaten + + This will slow down render speed but will lead to nicer results + Dit zal de render-snelheid verlagen maar leiden tot mooiere resultaten - Defines the appearance of surfaces - Bepaalt het uiterlijk van oppervlakken + + Defines the appearance of surfaces + Bepaalt het uiterlijk van oppervlakken - Shape view - Vorm-aanzicht + + Shape view + Vorm-aanzicht - Tessellation - Mozaïekwerk + + Tessellation + Mozaïekwerk - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Bij flat shading worden de oppervlaktenormalen niet bepaald per vertex wat leidt tot onrealistische weergave bij gebogen oppervlakten terwijl Phong shading leidt tot een gladder voorkomen. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Indien deze optie uitgezet wordt Phong shading gebruikt, anders wordt flat shading gebruikt.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Bij flat shading worden de oppervlaktenormalen niet bepaald per vertex wat leidt tot onrealistische weergave bij gebogen oppervlakten terwijl Phong shading leidt tot een gladder voorkomen. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Indien deze optie uitgezet wordt Phong shading gebruikt, anders wordt flat shading gebruikt.</p></body></html> - Do not define normal per vertex - Definieer geen normaal per vertex + + Do not define normal per vertex + Definieer geen normaal per vertex - Defines the deviation of tessellation to the actual surface - Defines the deviation of tessellation to the actual surface + + Defines the deviation of tessellation to the actual surface + Defines the deviation of tessellation to the actual surface - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Het definiëren van normalen per vertex heet ook wel<span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">terwijl het definieren van normalen per vlak wordt genoemd</span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Het definiëren van normalen per vertex heet ook wel<span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">terwijl het definieren van normalen per vlak wordt genoemd</span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - Maximum deviation depending on the model bounding box - Maximum deviation depending on the model bounding box + + Maximum deviation depending on the model bounding box + Maximum deviation depending on the model bounding box - % - % + + % + % - - Deviation - Deviation + + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Algemeen + + General + Algemeen - Export - Exporteren + + Export + Exporteren - Millimeter - Millimeter + + Millimeter + Millimeter - Meter - Meter + + Meter + Meter - Inch - Inch + + Inch + Inch - Units for export of STEP/IGES - Eenheden voor de export naar STEP/IGES + + Units for export of STEP/IGES + Eenheden voor de export naar STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Positie + + + + 3D View + 3D-aanzicht + + + PartGui::LoftWidget - - Too few elements - Te weinig elementen + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - Ten minste twee hoekpunten of draden zijn vereist. + + + Loft + Loft - - + + + Too few elements + Te weinig elementen + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Ten minste twee hoekpunten of draden zijn vereist. + + + PartGui::Mirroring - - Mirroring - Spiegelen + + Mirroring + Spiegelen - Shapes - Vormen + + Shapes + Vormen - Mirror plane: - Spiegelvlak: + + Mirror plane: + Spiegelvlak: - XY plane - XY-vlak + + XY plane + XY-vlak - XZ plane - XZ-vlak + + XZ plane + XZ-vlak - YZ plane - YZ-vlak + + YZ plane + YZ-vlak - Base point: - Basispunt: + + Base point: + Basispunt: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Selecteer eerst een vorm om te spiegelen. + + Select a shape for mirroring, first. + Selecteer eerst een vorm om te spiegelen. - No such document '%1'. - Geen dergelijk document '%1'. + + No such document '%1'. + Geen dergelijk document '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Verkeerde selectie + + + + + + Wrong selection + Verkeerde selectie - Select two vertices - Selecteer twee hoekpunten + + + Select two vertices + Selecteer twee hoekpunten - Select three or more edges - Selecteer drie of meer randen + Select three or more edges + Selecteer drie of meer randen - Select two or more faces - Selecteer twee of meer vlakken + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Selecteer twee of meer vlakken - Select two vertices to create an edge - Selecteer twee hoekpunten om een ​​rand te creëren + + Select only one part object + Select only one part object - Select a closed set of edges - Selecteer een gesloten set van randen + + Select two vertices to create an edge + Selecteer twee hoekpunten om een ​​rand te creëren - Select adjacent faces - Selecteer aangrenzende vlakken + + Select a closed set of edges + Selecteer een gesloten set van randen - All shape types can be selected - Alle vorm types kunnen geselecteerd worden + + Select adjacent faces + Selecteer aangrenzende vlakken - - + + + All shape types can be selected + Alle vorm types kunnen geselecteerd worden + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Te weinig elementen + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Waarde + Value + Waarde - Special - Special + Special + Special - Command - Commando + Command + Commando - Stretch - Stretch + Stretch + Stretch - Move - Verplaatsen + Move + Verplaatsen - Rotate - Draaien + Rotate + Draaien - Offset - Verplaatsing + Offset + Verplaatsing - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Stel kleur per vlak in + + Set color per face + Stel kleur per vlak in - Click on the faces in the 3d view to select them. - Klik op de vlakken in de 3D-weergave om ze te selecteren. + + Click on the faces in the 3d view to select them. + Klik op de vlakken in de 3D-weergave om ze te selecteren. - Faces: - Vlakken: + + Faces: + Vlakken: - Set to default - Ingesteld als standaard + + Set to default + Ingesteld als standaard - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Naar rechts verplaatsen + Move right + Naar rechts verplaatsen - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Verplaats het geselecteerde item één niveau naar beneden.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Verplaats het geselecteerde item één niveau naar beneden.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> - Move left - Naar links verplaatsen + Move left + Naar links verplaatsen - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Verplaats het geselecteerde item één niveau omhoog.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Verplaats het geselecteerde item één niveau omhoog.</b> <p>Dit verandert ook het niveau van het bovenliggende item.</p> - Move up - Naar boven verplaatsen + Move up + Naar boven verplaatsen - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Verplaats het geselecteerde item omlaag.</b><p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Verplaats het geselecteerde item omlaag.</b><p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> - Move down - Naar beneden verplaatsen + Move down + Naar beneden verplaatsen - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Verplaats het geselecteerde item omlaag.</b> <p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Verplaats het geselecteerde item omlaag.</b> <p>Het item wordt verplaatst binnen het hiërarchie niveau.</p> - Create solid - Maak een volumemodel + + Create solid + Maak een volumemodel - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Aanmaken + + Create + Aanmaken - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Maak een volumemodel + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Verkeerde selectie + + + + + + Wrong selection + Verkeerde selectie - Select two shapes please. - Selecteer twee vormen alstublieft. + + + Select two shapes please. + Selecteer twee vormen alstublieft. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Alle CAD-bestanden (*.stp *.step *.igs *.iges *.brep *.brp) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Alle CAD-bestanden (*.stp *.step *.igs *.iges *.brep *.brp) - STEP (*.stp *.step) - STEP(*.stp *.step) + + + + STEP (*.stp *.step) + STEP(*.stp *.step) - IGES (*.igs *.iges) - IGES(*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES(*.igs *.iges) - BREP (*.brp *.brep) - BREP(*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP(*.brp *.brep) - All Files (*.*) - Alle bestanden (*.*) + + + + All Files (*.*) + Alle bestanden (*.*) - - Sewing Tolerance - Sewing Tolerance + + Sewing Tolerance + Sewing Tolerance - Enter tolerance for sewing shape: - Enter tolerance for sewing shape: + + Enter tolerance for sewing shape: + Enter tolerance for sewing shape: - - Edit mirror plane - Bewerk spiegelvlak + + Edit mirror plane + Bewerk spiegelvlak - Transform - Transformeren + + Edit chamfer edges + - - Part design - Onderdeel-ontwerp + Transform + Transformeren - - Select two shapes or more, please. - Selecteer twee of meer vormen, alstublieft. + + + Part design + Onderdeel-ontwerp - You have to select either two edges or two wires. - Je moet of twee randen of twee draden selecteren. + + + Select two shapes or more, please. + Selecteer twee of meer vormen, alstublieft. - - Edit fillet edges - Afgeronde randen bewerken + + You have to select either two edges or two wires. + Je moet of twee randen of twee draden selecteren. - - Set colors... - Set colors... + + Edit fillet edges + Afgeronde randen bewerken - - + + + Set colors... + Set colors... + + + Workbench - - &Part - &Component + + &Part + &Component - &Simple - &Eenvoudig + + &Simple + &Eenvoudig - &Parametric - &Parametrisch + + &Parametric + &Parametrisch - Part tools - Component-gereedschap + + Part tools + Component-gereedschap - Solids - Volumemodel + + Solids + Volumemodel - Boolean - Boolean + + Boolean + Boolean - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_no.ts b/src/Mod/Part/Gui/Resources/translations/Part_no.ts index 18ec893b2..cbe1bc6a6 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_no.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_no.ts @@ -1,1872 +1,2520 @@ - - + + BlockDefinition - - Block definition - Blokkdefinisjon + + Block definition + Blokkdefinisjon - First limit - Første grense + + First limit + Første grense - Type: - Type: + + + Type: + Type: - mm - mm + + + mm + mm - Length: - Lengde: + + + Length: + Lengde: - Dimension - Dimensjon + + + Dimension + Dimensjon - Up to next - Opp til neste + + + Up to next + Opp til neste - Up to last - Opp til siste + + + Up to last + Opp til siste - Up to plane - Opp til plan + + + Up to plane + Opp til plan - Up to face - Opp til flate + + + Up to face + Opp til flate - Limit: - Grense: + + + Limit: + Grense: - No selection - Ingen valg + + + + + No selection + Ingen valg - Profile - Profil + + Profile + Profil - Selection: - Utvalg: + + Selection: + Utvalg: - Reverse - Omvendt + + Reverse + Omvendt - Both sides - Begge sider + + Both sides + Begge sider - Second limit - Andre grense + + Second limit + Andre grense - Direction - Retning + + Direction + Retning - Perpendicular to sketch - Vinkelrett på skisse + + Perpendicular to sketch + Vinkelrett på skisse - Reference - Referanse + + Reference + Referanse - Apply - Bruk + + Apply + Bruk - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Komponent + + Part + Komponent - Boolean... - Boolsk... + + Boolean... + Boolsk... - Run a boolean operation with two shapes selected - Kjør en boolsk operasjon med to valgte komponenter + + Run a boolean operation with two shapes selected + Kjør en boolsk operasjon med to valgte komponenter - - + + CmdPartBox - - Part - Komponent + + Part + Komponent - Box - Boks + + Box + Boks - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - Komponent + + Part + Komponent - Box fix 1 - Boks fiks 1 + + Box fix 1 + Boks fiks 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - Komponent + + Part + Komponent - Box fix 2 - Boks fiks 2 + + Box fix 2 + Boks fiks 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - Komponent + + Part + Komponent - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + Komponent + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Komponent + + Part + Komponent - Intersection - Krysningspunkt + + Intersection + Krysningspunkt - Make an intersection of two shapes - Make an intersection of two shapes + + Make an intersection of two shapes + Make an intersection of two shapes - - + + CmdPartCone - - Part - Komponent + + Part + Komponent - Cone - Kjegle + + Cone + Kjegle - Create a cone solid - Create a cone solid + + Create a cone solid + Create a cone solid - - + + CmdPartCrossSections - - Part - Komponent + + Part + Komponent - Cross-sections... - Tverrsnitt... + + Cross-sections... + Tverrsnitt... - Cross-sections - Tverrsnitt + + Cross-sections + Tverrsnitt - - + + CmdPartCut - Part - Komponent + + Part + Komponent - Cut - Klipp ut + + Cut + Klipp ut - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - Komponent + + Part + Komponent - Create a Cylinder - Lag en sylinder + + Create a Cylinder + Lag en sylinder - Cylinder - Sylinder + + Cylinder + Sylinder - - + + CmdPartExport - - Part - Komponent + + Part + Komponent - Export CAD... - Export CAD... + + Export CAD... + Export CAD... - Exports to a CAD file - Exports to a CAD file + + Exports to a CAD file + Exports to a CAD file - - + + CmdPartExtrude - Part - Komponent + + Part + Komponent - Extrude... - Ekstruder... + + Extrude... + Ekstruder... - Extrude a selected sketch - Ekstruder valgt skisse + + Extrude a selected sketch + Ekstruder valgt skisse - - + + CmdPartFillet - Part - Komponent + + Part + Komponent - Fillet... - Avrunding... + + Fillet... + Avrunding... - Fillet the selected edges of a shape - Avrund valgte kanter på en figur + + Fillet the selected edges of a shape + Avrund valgte kanter på en figur - - + + CmdPartFuse - Part - Komponent + + Part + Komponent - Union - Sammenføy + + Union + Sammenføy - Make a union of several shapes - Make a union of several shapes + + Make a union of several shapes + Make a union of several shapes - - + + CmdPartImport - Part - Komponent + + Part + Komponent - Imports a CAD file - Importerer en CAD-fil + + Imports a CAD file + Importerer en CAD-fil - Import CAD... - Importer CAD... + + Import CAD... + Importer CAD... - - + + CmdPartImportCurveNet - Part - Komponent + + Part + Komponent - Import a curve network - Importer et kurvenettverk + + Import a curve network + Importer et kurvenettverk - Import curve network... - Importer kurvenettverk... + + Import curve network... + Importer kurvenettverk... - - + + CmdPartLoft - Part - Komponent + + Part + Komponent - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Komponent + + Part + Komponent - Convert to solid - Konverter til solid + + Convert to solid + Konverter til solid - Create solid from a shell or compound - Lag solid fra et skall eller sammensatt + + Create solid from a shell or compound + Lag solid fra et skall eller sammensatt - - + + CmdPartMirror - Part - Komponent + + Part + Komponent - Mirroring... - Speiling... + + Mirroring... + Speiling... - Mirroring a selected shape - Speiler en valgt figur + + Mirroring a selected shape + Speiler en valgt figur - - + + CmdPartPickCurveNet - Part - Komponent + + Part + Komponent - Pick curve network - Velg kurvenettverk + + Pick curve network + Velg kurvenettverk - Pick a curve network - Velg kurvenettverk + + Pick a curve network + Velg kurvenettverk - - + + CmdPartPrimitives - Part - Komponent + + Part + Komponent - Create primitives... - Lag primitiver... + + Create primitives... + Lag primitiver... - Creation of parametrized geometric primitives - Opprettelse av parametrisert geometriske primitiver + + Creation of parametrized geometric primitives + Opprettelse av parametrisert geometriske primitiver - - + + + CmdPartRefineShape + + + Part + Komponent + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Komponent + + Part + Komponent - Reverse shapes - Reverser figurer + + Reverse shapes + Reverser figurer - Reverse orientation of shapes - Reverser orientering på figurer + + Reverse orientation of shapes + Reverser orientering på figurer - - + + CmdPartRevolve - Part - Komponent + + Part + Komponent - Revolve... - Dreining... + + Revolve... + Dreining... - Revolve a selected shape - Drei en valgt figur + + Revolve a selected shape + Drei en valgt figur - - + + CmdPartRuledSurface - Part - Komponent + + Part + Komponent - Create ruled surface - Lag en linjert overflate + + Create ruled surface + Lag en linjert overflate - Create a ruled surface from two curves - Lag en linjert overflate av to kurver + + Create a ruled surface from two curves + Lag en linjert overflate av to kurver - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - Komponent + + Part + Komponent - Section - Seksjon + + Section + Seksjon - - + + CmdPartShapeFromMesh - - Part - Komponent + + Part + Komponent - Create shape from mesh... - Lag figur av nett... + + Create shape from mesh... + Lag figur av nett... - Create shape from selected mesh object - Lag figur av valgte nett + + Create shape from selected mesh object + Lag figur av valgte nett - - + + CmdPartSimpleCopy - Part - Komponent + + Part + Komponent - Create simple copy - Create simple copy + + Create simple copy + Create simple copy - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Komponent + + Part + Komponent - Create Cylinder... - Lag sylinder... + + Create Cylinder... + Lag sylinder... - Create a Cylinder - Lag en sylinder + + Create a Cylinder + Lag en sylinder - - + + CmdPartSphere - - Create a sphere solid - Create a sphere solid + + Create a sphere solid + Create a sphere solid - Part - Komponent + + Part + Komponent - Sphere - Sfære + + Sphere + Sfære - - + + + CmdPartSweep + + + Part + Komponent + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Create a torus solid + + Create a torus solid + Create a torus solid - Part - Komponent + + Part + Komponent - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Velg en figur for ekstrudering først. + Select a shape for extrusion, first. + Velg en figur for ekstrudering først. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Merke en figur for revolusjon først. + Select a shape for revolution, first. + Merke en figur for revolusjon først. - - + + DlgSettings3DViewPart - Deviation - Avvik + Deviation + Avvik - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Innstillinger med for lite avvik gjør tessellasjon tidkrevende. Derav fryser eller bremses GUI ned. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Innstillinger med for lite avvik gjør tessellasjon tidkrevende. Derav fryser eller bremses GUI ned. - - + + PartGui::CrossSections - - Cross sections - Tverrsnitt + + Cross sections + Tverrsnitt - Guiding plane - Veiledende plan + + Guiding plane + Veiledende plan - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Posisjon: + + Position: + Posisjon: - Sections - Seksjoner + + Sections + Seksjoner - On both sides - På begge sider + + On both sides + På begge sider - Count - Antall + + Count + Antall - Distance: - Avstand: + + Distance: + Avstand: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Boolsk Operasjon + + Boolean Operation + Boolsk Operasjon - Second shape - Andre figur + + Second shape + Andre figur - First shape - Første figur + + First shape + Første figur - Boolean operation - Boolsk operasjon + + Boolean operation + Boolsk operasjon - Section - Seksjon + + Section + Seksjon - Difference - Differanse + + Difference + Differanse - Union - Sammenføy + + Union + Sammenføy - Intersection - Krysningspunkt + + Intersection + Krysningspunkt - - Cannot perform a boolean operation with the same shape - Kan ikke utføre en boolsk operasjon med samme figur + + Cannot perform a boolean operation with the same shape + Kan ikke utføre en boolsk operasjon med samme figur - - Solids - Solide + + + Solids + Solide - Shells - Skall + + + Shells + Skall - Compounds - Sammensatte + + + Compounds + Sammensatte - Faces - Flater + + + Faces + Flater - Swap selection - Vend om utvalg + + Swap selection + Vend om utvalg - - Select a shape on the left side, first - Velg en figur på venstre side først + + Select a shape on the left side, first + Velg en figur på venstre side først - Select a shape on the right side, first - Velg en figur på høyre side først + + Select a shape on the right side, first + Velg en figur på høyre side først - No active document available - Ingen aktive dokumenter tilgjengelig + + No active document available + Ingen aktive dokumenter tilgjengelig - One of the selected objects doesn't exist anymore - Et av de valgte objektene eksisterer ikke lenger + + One of the selected objects doesn't exist anymore + Et av de valgte objektene eksisterer ikke lenger - Performing union on non-solids is not possible - Å utføre sammenføyning på objekter som ikke er solide er umulig + + Performing union on non-solids is not possible + Å utføre sammenføyning på objekter som ikke er solide er umulig - Performing intersection on non-solids is not possible - Å utføre fellesseksjon på objekter som ikke er solide er umulig + + Performing intersection on non-solids is not possible + Å utføre fellesseksjon på objekter som ikke er solide er umulig - Performing difference on non-solids is not possible - Utføre differanse på objekter som ikke er solide er umulig + + Performing difference on non-solids is not possible + Utføre differanse på objekter som ikke er solide er umulig - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Ekstruder + + Extrude + Ekstruder - Direction - Retning + + Direction + Retning - Along normal - Langs med normal + + Along normal + Langs med normal - Length: - Lengde: + + Length: + Lengde: - 3D view - 3D view + + 3D view + 3D view - Note:This option works for planes only - Note:This option works for planes only + + Note:This option works for planes only + Note:This option works for planes only - Shape - Figur + + Create solid + Create solid - - + + Taper outward angle + - X: - X: + + Shape + Figur - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Velg en figur for ekstrudering først. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Velg en figur for ekstrudering først. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Avrund kanter + + Fillet Edges + Avrund kanter - Fillet Parameter - Avrundingsparameter + + Fillet Parameter + Avrundingsparameter - Radius: - Radius: + + Radius: + Radius: - Fillet type: - Avrundingstype: + + Fillet type: + Avrundingstype: - Constant Radius - Fast radius + + Constant Radius + Fast radius - Variable Radius - Variabel radius + + Variable Radius + Variabel radius - Shape - Figur + + Shape + Figur - Selected shape: - Valgt figur: + + Selected shape: + Valgt figur: - No selection - Ingen valg + + No selection + Ingen valg - - Edges to fillet - Kanter å avrunde + + Edges to fillet + Kanter å avrunde - Start radius - Startradius + + + Start radius + Startradius - End radius - Sluttradius + + End radius + Sluttradius - Radius - Radius + + Radius + Radius - No edge selected - Ingen kant er valgt + + No edge selected + Ingen kant er valgt - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Ingen kanter merket for avrunding. Merk én eller fler kanter først. + Ingen kanter merket for avrunding. Merk én eller fler kanter først. - - All - Alle + + All + Alle - None - Ingen + + None + Ingen - - Edge%1 - Kant%1 + + + Edge%1 + Kant%1 - No shape selected - Ingen valgt figur + + No shape selected + Ingen valgt figur - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Ingen gyldig figur er valgt. Vennligst velg en gyldig figur i rullgardina først. + Ingen gyldig figur er valgt. Vennligst velg en gyldig figur i rullgardina først. - - + + PartGui::DlgPartBox - - Box definition - Boksdefinisjon + + Box definition + Boksdefinisjon - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - Size: - Størrelse: + + Size: + Størrelse: - Height: - Høyde: + + Height: + Høyde: - Width: - Bredde: + + Width: + Bredde: - Length: - Lengde: + + Length: + Lengde: - Position: - Posisjon: + + Position: + Posisjon: - Direction: - Retning: + + Direction: + Retning: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Sylinderdefinisjon + + Cylinder definition + Sylinderdefinisjon - Parameter - Parameter + + Parameter + Parameter - Height: - Høyde: + + Height: + Høyde: - Radius: - Radius: + + Radius: + Radius: - Position: - Posisjon: + + Position: + Posisjon: - Direction: - Retning: + + Direction: + Retning: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Avbryt + + Cancel + Avbryt - - + + PartGui::DlgPartImportIges - - IGES input file - IGES inndatafil + + IGES input file + IGES inndatafil - ... - ... + + ... + ... - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - File Name - Filnavn + + File Name + Filnavn - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Alle filer (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Alle filer (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - Step input file - STEP-inndatafil + + Step input file + STEP-inndatafil - File Name - Filnavn + + File Name + Filnavn - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Alle filer (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Alle filer (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometriske primitiver + + Geometric Primitives + Geometriske primitiver - Primitive - Primitiv + Primitive + Primitiv - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X Axis Value: + X Axis Value: + X Axis Value: - Y Axis Value: - Y Axis Value: + Y Axis Value: + Y Axis Value: - Z Axis Value: - Z Axis Value: + Z Axis Value: + Z Axis Value: - Wedge - Wedge + + Wedge + Wedge - Circle - Sirkel + + Circle + Sirkel - Vertex - Vertex + Vertex + Vertex - Position - Posisjon + Position + Posisjon - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Retning: + Direction: + Retning: - Y: - Y: + + + + Y: + Y: - Plane - Plan + + Plane + Plan - Box - Boks + + Box + Boks - Cylinder - Sylinder + + Cylinder + Sylinder - Cone - Kjegle + + Cone + Kjegle - Sphere - Sfære + + Sphere + Sfære - Ellipsoid - Ellipsoide + + Ellipsoid + Ellipsoide - Torus - Torus + + Torus + Torus - Parameter - Parameter + + Ellipse + - Width: - Bredde: + + Point + - Length: - Lengde: + + Line + - Height: - Høyde: + + Parameter + Parameter - Angle: - Vinkel: + + + Width: + Bredde: - Radius: - Radius: + + + Length: + Lengde: - Radius 1: - Radius 1: + + + + + Height: + Høyde: - Radius 2: - Radius 2: + + + + Angle: + Vinkel: - U parametric: - U parametrisk: + + + + + Radius: + Radius: - V parametric: - V parametrisk: + + + + Radius 1: + Radius 1: - &Create - &Lag + + + + Radius 2: + Radius 2: - Alt+C - Alt+C + + + + U parametric: + U parametrisk: - Cl&ose - L&ukk + + + + V parametric: + V parametrisk: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Lag %1 + + Y min/max: + - No active document - Ingen aktive dokumenter + + Z min/max: + - - Pitch: - Pitch: + + X2 min/max: + - Helix - Heliks + + Z2 min/max: + - 3D View - 3D-visning + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Lag + + + Alt+C + Alt+C + + + Cl&ose + L&ukk + + + Alt+O + Alt+O + + + + + + Create %1 + Lag %1 + + + + No active document + Ingen aktive dokumenter + + + + Pitch: + Pitch: + + + + Helix + Heliks + + + 3D View + 3D-visning + + + PartGui::DlgRevolution - - Revolve - Dreining + + Revolve + Dreining - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Vinkel: + + Angle: + Vinkel: - Z: - Z: + + Z: + Z: - Axis: - Akse: + + Axis: + Akse: - Shape - Figur + + Shape + Figur - - Select a shape for revolution, first. - Merke en figur for revolusjon først. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Merke en figur for revolusjon først. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Vis nøyaktighet / ytelse + + View accuracy / Performance + Vis nøyaktighet / ytelse - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Bruker høykvalitets normaler + + Using high-quality normals + Bruker høykvalitets normaler - This will slow down render speed but will lead to nicer results - Dette vil sinke hastighet på presentasjongjengivelse men vil føre til bedre resultater + + This will slow down render speed but will lead to nicer results + Dette vil sinke hastighet på presentasjongjengivelse men vil føre til bedre resultater - Defines the appearance of surfaces - Definerer utseendet på overflater + + Defines the appearance of surfaces + Definerer utseendet på overflater - Shape view - Figur visning + + Shape view + Figur visning - Tessellation - Tessellasjon + + Tessellation + Tessellasjon - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Enkel/ kompleks skyggelegging</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ved enkel skyggelegging blir ikke oveflatenormalene definert per node. Dette fører til et midre realistisk utseende for kurvede overflater enn ved kompleks skyggelegging. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Merk for kompleks skyggelegging. Hvis ikke blir enkel skyggelegging brukt.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Enkel/ kompleks skyggelegging</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ved enkel skyggelegging blir ikke oveflatenormalene definert per node. Dette fører til et midre realistisk utseende for kurvede overflater enn ved kompleks skyggelegging. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Merk for kompleks skyggelegging. Hvis ikke blir enkel skyggelegging brukt.</p></body></html> - Do not define normal per vertex - Ikke definerer normal per node + + Do not define normal per vertex + Ikke definerer normal per node - Defines the deviation of tessellation to the actual surface - Definerer avvik for tessellasjon på selve overflaten + + Defines the deviation of tessellation to the actual surface + Definerer avvik for tessellasjon på selve overflaten - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellasjon</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definerer maksimum avik fra tessellert nett til overflate. Desto mindre verdi desto tregere fart på presentasjongjengivelse men penere utseende.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellasjon</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definerer maksimum avik fra tessellert nett til overflate. Desto mindre verdi desto tregere fart på presentasjongjengivelse men penere utseende.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Å definere normaler per node blir og kalt <span style=" font-style:italic;">Phongskyggelegging (kompleks) </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mens å definere normalene per flate blir kalt </span>Flateskyggelegging (enkel)<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Å definere normaler per node blir og kalt <span style=" font-style:italic;">Phongskyggelegging (kompleks) </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">mens å definere normalene per flate blir kalt </span>Flateskyggelegging (enkel)<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Høykvalitets normaler</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dette vil sinke hastighet på presentasjongjengivelse men vil føre til bedre resultater.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Høykvalitets normaler</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dette vil sinke hastighet på presentasjongjengivelse men vil føre til bedre resultater.</p></body></html> - Maximum deviation depending on the model bounding box - Maksimalt avvik avhenger av modellrammeboksen + + Maximum deviation depending on the model bounding box + Maksimalt avvik avhenger av modellrammeboksen - % - % + + % + % - - Deviation - Avvik + + Deviation + Avvik - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Innstillinger med for lite avvik gjør tessellasjon tidkrevende. Derav fryser eller bremses GUI ned. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Innstillinger med for lite avvik gjør tessellasjon tidkrevende. Derav fryser eller bremses GUI ned. - - + + PartGui::DlgSettingsGeneral - - General - Generelle + + General + Generelle - Export - Eksporter + + Export + Eksporter - Millimeter - Millimeter + + Millimeter + Millimeter - Meter - Meter + + Meter + Meter - Inch - Tommer + + Inch + Tommer - Units for export of STEP/IGES - Enheter for eksport av STEP/ IGES + + Units for export of STEP/IGES + Enheter for eksport av STEP/ IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Posisjon + + + + 3D View + 3D-visning + + + PartGui::LoftWidget - - Too few elements - Too few elements + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Too few elements + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Speiling + + Mirroring + Speiling - Shapes - Figurer + + Shapes + Figurer - Mirror plane: - Speilplan: + + Mirror plane: + Speilplan: - XY plane - XY plan + + XY plane + XY plan - XZ plane - XZ plan + + XZ plane + XZ plan - YZ plane - YZ plan + + YZ plane + YZ plan - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Velg en figur for speiling først. + + Select a shape for mirroring, first. + Velg en figur for speiling først. - No such document '%1'. - Ingen slike dokument '%1'. + + No such document '%1'. + Ingen slike dokument '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Feil valg + + + + + + Wrong selection + Feil valg - Select two vertices - Select two vertices + + + Select two vertices + Select two vertices - Select three or more edges - Select three or more edges + Select three or more edges + Select three or more edges - Select two or more faces - Select two or more faces + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Select two or more faces - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - Select adjacent faces + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - All shape types can be selected + + Select adjacent faces + Select adjacent faces - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Too few elements + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Verdi + Value + Verdi - Special - Special + Special + Special - Command - Kommando + Command + Kommando - Stretch - Stretch + Stretch + Stretch - Move - Flytt + Move + Flytt - Rotate - Roter + Rotate + Roter - Offset - Avsetting + Offset + Avsetting - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Set color per face + + Set color per face + Set color per face - Click on the faces in the 3d view to select them. - Click on the faces in the 3d view to select them. + + Click on the faces in the 3d view to select them. + Click on the faces in the 3d view to select them. - Faces: - Faces: + + Faces: + Faces: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Flytt til høyre + Move right + Flytt til høyre - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Flytt det valgte elementet ett nivå ned.</b> <p> Dette vil også endre nivået på overordnet element. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Flytt det valgte elementet ett nivå ned.</b> <p> Dette vil også endre nivået på overordnet element. </p> - Move left - Flytt til venstre + Move left + Flytt til venstre - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Flytt det valgte elementet ett nivå opp.</b> <p> Dette vil også endre nivået på overordnet element. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Flytt det valgte elementet ett nivå opp.</b> <p> Dette vil også endre nivået på overordnet element. </p> - Move up - Flytt opp + Move up + Flytt opp - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytt det valgte elementet opp.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytt det valgte elementet opp.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> - Move down - Flytt ned + Move down + Flytt ned - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytt det valgte elementet ned.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytt det valgte elementet ned.</b> <p> Elementet vil bli flyttet innenfor hierarkinivået. </p> - Create solid - Create solid + + Create solid + Create solid - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Lag + + Create + Lag - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Create solid + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Feil valg + + + + + + Wrong selection + Feil valg - Select two shapes please. - Velg to figurer takk. + + + Select two shapes please. + Velg to figurer takk. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Alle CAD-filer (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Alle CAD-filer (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Alle filer (*.*) + + + + All Files (*.*) + Alle filer (*.*) - - Sewing Tolerance - Sømtoleranse + + Sewing Tolerance + Sømtoleranse - Enter tolerance for sewing shape: - Angi toleranse for sømform: + + Enter tolerance for sewing shape: + Angi toleranse for sømform: - - Edit mirror plane - Rediger speilplan + + Edit mirror plane + Rediger speilplan - Transform - Transformer + + Edit chamfer edges + - - Part design - Komponentdesign + Transform + Transformer - - Select two shapes or more, please. - Velg to figurer eller mer, takk. + + + Part design + Komponentdesign - You have to select either two edges or two wires. - Du må velge to kanter eller to tråder. + + + Select two shapes or more, please. + Velg to figurer eller mer, takk. - - Edit fillet edges - Rediger avrundingskanter + + You have to select either two edges or two wires. + Du må velge to kanter eller to tråder. - - Set colors... - Set colors... + + Edit fillet edges + Rediger avrundingskanter - - + + + Set colors... + Set colors... + + + Workbench - - &Part - &Komponent + + &Part + &Komponent - &Simple - &Enkel + + &Simple + &Enkel - &Parametric - &Parametrisk + + &Parametric + &Parametrisk - Part tools - Komponentverktøy + + Part tools + Komponentverktøy - Solids - Solide + + Solids + Solide - Boolean - Boolsk + + Boolean + Boolsk - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_pl.ts b/src/Mod/Part/Gui/Resources/translations/Part_pl.ts index bb7e6c366..acc0932b7 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_pl.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_pl.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Definicja bloku + + Block definition + Definicja bloku - First limit - Pierwsze ograniczenie + + First limit + Pierwsze ograniczenie - Type: - Typ: + + + Type: + Typ: - mm - mm + + + mm + mm - Length: - Długość: + + + Length: + Długość: - Dimension - Wymiar + + + Dimension + Wymiar - Up to next - Do następnego + + + Up to next + Do następnego - Up to last - Do ostatniego + + + Up to last + Do ostatniego - Up to plane - Do płaszczyzny + + + Up to plane + Do płaszczyzny - Up to face - Do fasetki + + + Up to face + Do fasetki - Limit: - Limit: + + + Limit: + Limit: - No selection - Brak wyboru + + + + + No selection + Brak wyboru - Profile - Profil + + Profile + Profil - Selection: - Selection: + + Selection: + Selection: - Reverse - Odwróć + + Reverse + Odwróć - Both sides - Obie strony + + Both sides + Obie strony - Second limit - Drugie ograniczenie + + Second limit + Drugie ograniczenie - Direction - Kierunek + + Direction + Kierunek - Perpendicular to sketch - Perpendicular to sketch + + Perpendicular to sketch + Perpendicular to sketch - Reference - Reference + + Reference + Reference - Apply - Zastosuj + + Apply + Zastosuj - Cancel - Anuluj + + Cancel + Anuluj - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Część + + Part + Część - Boolean... - Boolean ... + + Boolean... + Boolean ... - Run a boolean operation with two shapes selected - Wykonaj operację boolean na 2 zaznaczonych obwiedniach + + Run a boolean operation with two shapes selected + Wykonaj operację boolean na 2 zaznaczonych obwiedniach - - + + CmdPartBox - - Part - Część + + Part + Część - Box - Box + + Box + Box - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - Część + + Part + Część - Box fix 1 - Box fix 1 + + Box fix 1 + Box fix 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - Część + + Part + Część - Box fix 2 - Box fix 2 + + Box fix 2 + Box fix 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - Część + + Part + Część - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + Część + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Część + + Part + Część - Intersection - Przecięcie + + Intersection + Przecięcie - Make an intersection of two shapes - Utwórz przecięcie 2 obwiedni + + Make an intersection of two shapes + Utwórz przecięcie 2 obwiedni - - + + CmdPartCone - - Part - Część + + Part + Część - Cone - Stożek + + Cone + Stożek - Create a cone solid - Utwórz stożek + + Create a cone solid + Utwórz stożek - - + + CmdPartCrossSections - - Part - Część + + Part + Część - Cross-sections... - Cross-sections... + + Cross-sections... + Cross-sections... - Cross-sections - Cross-sections + + Cross-sections + Cross-sections - - + + CmdPartCut - Part - Część + + Part + Część - Cut - Wytnij + + Cut + Wytnij - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - Część + + Part + Część - Create a Cylinder - Utwórz Cylinder + + Create a Cylinder + Utwórz Cylinder - Cylinder - Cylinder + + Cylinder + Cylinder - - + + CmdPartExport - - Part - Część + + Part + Część - Export CAD... - Export CAD... + + Export CAD... + Export CAD... - Exports to a CAD file - Eksport do pliku CAD + + Exports to a CAD file + Eksport do pliku CAD - - + + CmdPartExtrude - Part - Część + + Part + Część - Extrude... - Wyciągnięcie ... + + Extrude... + Wyciągnięcie ... - Extrude a selected sketch - Wyciągnij wybrany szkic + + Extrude a selected sketch + Wyciągnij wybrany szkic - - + + CmdPartFillet - Part - Część + + Part + Część - Fillet... - Fillet... + + Fillet... + Fillet... - Fillet the selected edges of a shape - Fillet the selected edges of a shape + + Fillet the selected edges of a shape + Fillet the selected edges of a shape - - + + CmdPartFuse - Part - Część + + Part + Część - Union - Połączenie + + Union + Połączenie - Make a union of several shapes - Utwórz sumę kilku obwiedni + + Make a union of several shapes + Utwórz sumę kilku obwiedni - - + + CmdPartImport - Part - Część + + Part + Część - Imports a CAD file - Importuje plik CAD + + Imports a CAD file + Importuje plik CAD - Import CAD... - Import CAD ... + + Import CAD... + Import CAD ... - - + + CmdPartImportCurveNet - Part - Część + + Part + Część - Import a curve network - Import a curve network + + Import a curve network + Import a curve network - Import curve network... - Import curve network... + + Import curve network... + Import curve network... - - + + CmdPartLoft - Part - Część + + Part + Część - Loft... - Wyciągnij... + + Loft... + Wyciągnij... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Część + + Part + Część - Convert to solid - Convert to solid + + Convert to solid + Convert to solid - Create solid from a shell or compound - Create solid from a shell or compound + + Create solid from a shell or compound + Create solid from a shell or compound - - + + CmdPartMirror - Part - Część + + Part + Część - Mirroring... - Mirroring... + + Mirroring... + Mirroring... - Mirroring a selected shape - Mirroring a selected shape + + Mirroring a selected shape + Mirroring a selected shape - - + + CmdPartPickCurveNet - Part - Część + + Part + Część - Pick curve network - Pick curve network + + Pick curve network + Pick curve network - Pick a curve network - Pick a curve network + + Pick a curve network + Pick a curve network - - + + CmdPartPrimitives - Part - Część + + Part + Część - Create primitives... - Create primitives... + + Create primitives... + Create primitives... - Creation of parametrized geometric primitives - Creation of parametrized geometric primitives + + Creation of parametrized geometric primitives + Creation of parametrized geometric primitives - - + + + CmdPartRefineShape + + + Part + Część + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Część + + Part + Część - Reverse shapes - Reverse shapes + + Reverse shapes + Reverse shapes - Reverse orientation of shapes - Reverse orientation of shapes + + Reverse orientation of shapes + Reverse orientation of shapes - - + + CmdPartRevolve - Part - Część + + Part + Część - Revolve... - Revolve... + + Revolve... + Revolve... - Revolve a selected shape - Revolve a selected shape + + Revolve a selected shape + Revolve a selected shape - - + + CmdPartRuledSurface - Part - Część + + Part + Część - Create ruled surface - Create ruled surface + + Create ruled surface + Create ruled surface - Create a ruled surface from two curves - Create a ruled surface from two curves + + Create a ruled surface from two curves + Create a ruled surface from two curves - - + + CmdPartSection - Make a section of two shapes - Utwórz przekrój 2 obwiedni + + Make a section of two shapes + Utwórz przekrój 2 obwiedni - Part - Część + + Part + Część - Section - Sekcja + + Section + Sekcja - - + + CmdPartShapeFromMesh - - Part - Część + + Part + Część - Create shape from mesh... - Create shape from mesh... + + Create shape from mesh... + Create shape from mesh... - Create shape from selected mesh object - Create shape from selected mesh object + + Create shape from selected mesh object + Create shape from selected mesh object - - + + CmdPartSimpleCopy - Part - Część + + Part + Część - Create simple copy - Utwórz kopię + + Create simple copy + Utwórz kopię - Create a simple non-parametric copy - Utwórz nieparametryczną kopię + + Create a simple non-parametric copy + Utwórz nieparametryczną kopię - - + + CmdPartSimpleCylinder - Part - Część + + Part + Część - Create Cylinder... - Utwórz Cylinder ... + + Create Cylinder... + Utwórz Cylinder ... - Create a Cylinder - Utwórz Cylinder + + Create a Cylinder + Utwórz Cylinder - - + + CmdPartSphere - - Create a sphere solid - Utwórz sferę + + Create a sphere solid + Utwórz sferę - Part - Część + + Part + Część - Sphere - Kula + + Sphere + Kula - - + + + CmdPartSweep + + + Part + Część + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Utwórz torus + + Create a torus solid + Utwórz torus - Part - Część + + Part + Część - Torus - torus + + Torus + torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Select a shape for extrusion, first. + Select a shape for extrusion, first. + Select a shape for extrusion, first. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Select a shape for revolution, first. + Select a shape for revolution, first. + Select a shape for revolution, first. - - + + DlgSettings3DViewPart - Deviation - Deviation + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Cross sections + + Cross sections + Cross sections - Guiding plane - Guiding plane + + Guiding plane + Guiding plane - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Pozycja: + + Position: + Pozycja: - Sections - Sections + + Sections + Sections - On both sides - On both sides + + On both sides + On both sides - Count - Count + + Count + Count - Distance: - Distance: + + Distance: + Distance: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Operacja Logiczna + + Boolean Operation + Operacja Logiczna - Second shape - Drugi kształt + + Second shape + Drugi kształt - First shape - Pierwszy kształt + + First shape + Pierwszy kształt - Boolean operation - Operacja logiczna + + Boolean operation + Operacja logiczna - Section - Sekcja + + Section + Sekcja - Difference - Różnica + + Difference + Różnica - Union - Połączenie + + Union + Połączenie - Intersection - Przecięcie + + Intersection + Przecięcie - - Cannot perform a boolean operation with the same shape - Nie można wykonać operacji boolean na tym samym kształcie + + Cannot perform a boolean operation with the same shape + Nie można wykonać operacji boolean na tym samym kształcie - - Solids - Solids + + + Solids + Solids - Shells - Shells + + + Shells + Shells - Compounds - Compounds + + + Compounds + Compounds - Faces - Faces + + + Faces + Faces - Swap selection - Swap selection + + Swap selection + Swap selection - - Select a shape on the left side, first - Select a shape on the left side, first + + Select a shape on the left side, first + Select a shape on the left side, first - Select a shape on the right side, first - Select a shape on the right side, first + + Select a shape on the right side, first + Select a shape on the right side, first - No active document available - No active document available + + No active document available + No active document available - One of the selected objects doesn't exist anymore - One of the selected objects doesn't exist anymore + + One of the selected objects doesn't exist anymore + One of the selected objects doesn't exist anymore - Performing union on non-solids is not possible - Performing union on non-solids is not possible + + Performing union on non-solids is not possible + Performing union on non-solids is not possible - Performing intersection on non-solids is not possible - Performing intersection on non-solids is not possible + + Performing intersection on non-solids is not possible + Performing intersection on non-solids is not possible - Performing difference on non-solids is not possible - Performing difference on non-solids is not possible + + Performing difference on non-solids is not possible + Performing difference on non-solids is not possible - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Wyciągnięcie + + Extrude + Wyciągnięcie - Direction - Kierunek + + Direction + Kierunek - Along normal - Wzdłuż normalnej + + Along normal + Wzdłuż normalnej - Length: - Długość: + + Length: + Długość: - 3D view - Widok 3D + + 3D view + Widok 3D - Note:This option works for planes only - Uwaga: opcja działa wyłącznie dla płaszczyzn + + Note:This option works for planes only + Uwaga: opcja działa wyłącznie dla płaszczyzn - Shape - Kształt + + Create solid + Utwórz bryłę - - + + Taper outward angle + - X: - X: + + Shape + Kształt - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Select a shape for extrusion, first. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Select a shape for extrusion, first. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Fillet Edges + + Fillet Edges + Fillet Edges - Fillet Parameter - Fillet Parameter + + Fillet Parameter + Fillet Parameter - Radius: - Promień: + + Radius: + Promień: - Fillet type: - Fillet type: + + Fillet type: + Fillet type: - Constant Radius - Stały promień + + Constant Radius + Stały promień - Variable Radius - Zmienny promień + + Variable Radius + Zmienny promień - Shape - Kształt + + Shape + Kształt - Selected shape: - Zaznaczono kształt: + + Selected shape: + Zaznaczono kształt: - No selection - Brak wyboru + + No selection + Brak wyboru - - Edges to fillet - Edges to fillet + + Edges to fillet + Edges to fillet - Start radius - Początek promienia + + + Start radius + Początek promienia - End radius - Koniec promienia + + End radius + Koniec promienia - Radius - Promień + + Radius + Promień - No edge selected - Nie zaznaczono krawędzi + + No edge selected + Nie zaznaczono krawędzi - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - No edge entity is checked to fillet. + No edge entity is checked to fillet. Please check one or more edge entities first. - - All - Wszystkie + + All + Wszystkie - None - Brak + + None + Brak - - Edge%1 - Edge%1 + + + Edge%1 + Edge%1 - No shape selected - Brak wybranych kształtów + + No shape selected + Brak wybranych kształtów - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - - + + PartGui::DlgPartBox - - Box definition - Box definition + + Box definition + Box definition - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Anuluj + + Cancel + Anuluj - OK - OK + + OK + OK - Size: - Rozmiar: + + Size: + Rozmiar: - Height: - Wysokość: + + Height: + Wysokość: - Width: - Szerokość: + + Width: + Szerokość: - Length: - Długość: + + Length: + Długość: - Position: - Pozycja: + + Position: + Pozycja: - Direction: - Kierunek: + + Direction: + Kierunek: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Cylinder definition + + Cylinder definition + Cylinder definition - Parameter - Parametr + + Parameter + Parametr - Height: - Wysokość: + + Height: + Wysokość: - Radius: - Promień: + + Radius: + Promień: - Position: - Pozycja: + + Position: + Pozycja: - Direction: - Kierunek: + + Direction: + Kierunek: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Anuluj + + Cancel + Anuluj - - + + PartGui::DlgPartImportIges - - IGES input file - IGES input file + + IGES input file + IGES input file - ... - ... + + ... + ... - Cancel - Anuluj + + Cancel + Anuluj - OK - OK + + OK + OK - File Name - Nazwa pliku + + File Name + Nazwa pliku - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;All Files (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;All Files (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Anuluj + + Cancel + Anuluj - OK - OK + + OK + OK - Step input file - Step input file + + Step input file + Step input file - File Name - Nazwa pliku + + File Name + Nazwa pliku - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;All Files (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;All Files (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometric Primitives + + Geometric Primitives + Geometric Primitives - Primitive - Primitive + Primitive + Primitive - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X Axis Value: + X Axis Value: + X Axis Value: - Y Axis Value: - Y Axis Value: + Y Axis Value: + Y Axis Value: - Z Axis Value: - Z Axis Value: + Z Axis Value: + Z Axis Value: - Wedge - Wedge + + Wedge + Wedge - Circle - Okrąg + + Circle + Okrąg - Vertex - Wierzchołek + Vertex + Wierzchołek - Position - Position + Position + Position - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Kierunek: + Direction: + Kierunek: - Y: - Y: + + + + Y: + Y: - Plane - Plan + + Plane + Plan - Box - Box + + Box + Box - Cylinder - Cylinder + + Cylinder + Cylinder - Cone - Stożek + + Cone + Stożek - Sphere - Kula + + Sphere + Kula - Ellipsoid - Elipsoida + + Ellipsoid + Elipsoida - Torus - torus + + Torus + torus - Parameter - Parametr + + Ellipse + - Width: - Szerokość: + + Point + - Length: - Długość: + + Line + - Height: - Wysokość: + + Parameter + Parametr - Angle: - Kąt: + + + Width: + Szerokość: - Radius: - Promień: + + + Length: + Długość: - Radius 1: - Promień 1: + + + + + Height: + Wysokość: - Radius 2: - Promień 2: + + + + Angle: + Kąt: - U parametric: - U parametric: + + + + + Radius: + Promień: - V parametric: - V parametric: + + + + Radius 1: + Promień 1: - &Create - &Utwórz + + + + Radius 2: + Promień 2: - Alt+C - Alt + C + + + + U parametric: + U parametric: - Cl&ose - ZAMKNIJ + + + + V parametric: + V parametric: - Alt+O - Alt + O + + X min/max: + - - Create %1 - Utwórz %1 + + Y min/max: + - No active document - Brak aktywnego dokumentu + + Z min/max: + - - Pitch: - Pitch: + + X2 min/max: + - Helix - Helix + + Z2 min/max: + - 3D View - Widok 3D + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Utwórz + + + Alt+C + Alt + C + + + Cl&ose + ZAMKNIJ + + + Alt+O + Alt + O + + + + + + Create %1 + Utwórz %1 + + + + No active document + Brak aktywnego dokumentu + + + + Pitch: + Pitch: + + + + Helix + Helix + + + 3D View + Widok 3D + + + PartGui::DlgRevolution - - Revolve - Revolve + + Revolve + Revolve - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Kąt: + + Angle: + Kąt: - Z: - Z: + + Z: + Z: - Axis: - Oś: + + Axis: + Oś: - Shape - Kształt + + Shape + Kształt - - Select a shape for revolution, first. - Select a shape for revolution, first. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Select a shape for revolution, first. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - View accuracy / Performance + + View accuracy / Performance + View accuracy / Performance - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Using high-quality normals + + Using high-quality normals + Using high-quality normals - This will slow down render speed but will lead to nicer results - This will slow down render speed but will lead to nicer results + + This will slow down render speed but will lead to nicer results + This will slow down render speed but will lead to nicer results - Defines the appearance of surfaces - Defines the appearance of surfaces + + Defines the appearance of surfaces + Defines the appearance of surfaces - Shape view - Shape view + + Shape view + Shape view - Tessellation - Tesselacja + + Tessellation + Tesselacja - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - Do not define normal per vertex - Do not define normal per vertex + + Do not define normal per vertex + Do not define normal per vertex - Defines the deviation of tessellation to the actual surface - Defines the deviation of tessellation to the actual surface + + Defines the deviation of tessellation to the actual surface + Defines the deviation of tessellation to the actual surface - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - Maximum deviation depending on the model bounding box - Maximum deviation depending on the model bounding box + + Maximum deviation depending on the model bounding box + Maximum deviation depending on the model bounding box - % - % + + % + % - - Deviation - Deviation + + Deviation + Deviation - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Ogólne + + General + Ogólne - Export - Export + + Export + Export - Millimeter - Milimetr + + Millimeter + Milimetr - Meter - Metr + + Meter + Metr - Inch - Cal + + Inch + Cal - Units for export of STEP/IGES - Units for export of STEP/IGES + + Units for export of STEP/IGES + Units for export of STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Position + + + + 3D View + Widok 3D + + + PartGui::LoftWidget - - Too few elements - Zbyt mało elementów + + + Vertex/Wire + Utwórz obwiednię - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Zbyt mało elementów + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Mirroring + + Mirroring + Mirroring - Shapes - Kształty + + Shapes + Kształty - Mirror plane: - Mirror plane: + + Mirror plane: + Mirror plane: - XY plane - Płaszczyzna XY + + XY plane + Płaszczyzna XY - XZ plane - Płaszczyzna XZ + + XZ plane + Płaszczyzna XZ - YZ plane - Płaszczyzna YZ + + YZ plane + Płaszczyzna YZ - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Select a shape for mirroring, first. + + Select a shape for mirroring, first. + Select a shape for mirroring, first. - No such document '%1'. - Brak dokumentu '%1'. + + No such document '%1'. + Brak dokumentu '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Niewłaściwy wybór + + + + + + Wrong selection + Niewłaściwy wybór - Select two vertices - Zaznacz 2 wierzchołki + + + Select two vertices + Zaznacz 2 wierzchołki - Select three or more edges - Zaznacz 3 lub więcej Krawędzi + Select three or more edges + Zaznacz 3 lub więcej Krawędzi - Select two or more faces - Zaznacz 2 lub więcej fasetek + + Select one or more edges + - Select only one part object - Zaznacz tylko część obiektu + + Select two or more faces + Zaznacz 2 lub więcej fasetek - Select two vertices to create an edge - Aby utworzyć Krawędź zaznacz 2 wierzchołki + + Select only one part object + Zaznacz tylko część obiektu - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Aby utworzyć Krawędź zaznacz 2 wierzchołki - Select adjacent faces - Zaznacz sąsiednie fasetki + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - Można zaznaczyć wszystkie rodzaje obwiedni + + Select adjacent faces + Zaznacz sąsiednie fasetki - - + + + All shape types can be selected + Można zaznaczyć wszystkie rodzaje obwiedni + + + + PartGui::SweepWidget + + + + Vertex/Wire + Utwórz obwiednię + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Zbyt mało elementów + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Wartość + Value + Wartość - Special - Special + Special + Special - Command - Polecenie + Command + Polecenie - Stretch - Stretch + Stretch + Stretch - Move - Przesuń + Move + Przesuń - Rotate - Obróć + Rotate + Obróć - Offset - Offset + Offset + Offset - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Ustaw kolor wg. fasetki + + Set color per face + Ustaw kolor wg. fasetki - Click on the faces in the 3d view to select them. - Aby wybrać fasetki zaznacz je w Widoku 3D + + Click on the faces in the 3d view to select them. + Aby wybrać fasetki zaznacz je w Widoku 3D - Faces: - Fasetki: + + Faces: + Fasetki: - Set to default - Ustaw domyślne + + Set to default + Ustaw domyślne - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Utwórz obwiednię + Vertex/Wire + Utwórz obwiednię - Move right - Przesuń w prawo + Move right + Przesuń w prawo - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> - Move left - Przesuń w lewo + Move left + Przesuń w lewo - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Przenosi zaznaczony element o jeden poziom w dół.</b> <p> Zmieniony zostanie także poziom pozycji nadrzędnej. </p> - Move up - Przesuń w górę + Move up + Przesuń w górę - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> - Move down - Przenieś w dół + Move down + Przenieś w dół - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Przenosi zaznaczony element w dół.</b> <p> Element zostanie przesunięty w poziomie hierarchii. </p> - Create solid - Utwórz bryłę + + Create solid + Utwórz bryłę - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Utwórz obwiednię + + + Create shape + Utwórz obwiednię - Edge from vertices - Krawędź z wierzchołków + + Edge from vertices + Krawędź z wierzchołków - Face from edges - Fasetka z wierzchołków + + Face from edges + Fasetka z wierzchołków - Planar - Planar + + Planar + Planar - Shell from faces - Powłoka z fasetek + + Shell from faces + Powłoka z fasetek - Solid from shell - Bryła z powłoki + + Solid from shell + Bryła z powłoki - Create - Utwórz + + Create + Utwórz - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Utwórz bryłę + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Niewłaściwy wybór + + + + + + Wrong selection + Niewłaściwy wybór - Select two shapes please. - Select two shapes please. + + + Select two shapes please. + Select two shapes please. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Wszystkie pliki (*.*) + + + + All Files (*.*) + Wszystkie pliki (*.*) - - Sewing Tolerance - Sewing Tolerance + + Sewing Tolerance + Sewing Tolerance - Enter tolerance for sewing shape: - Enter tolerance for sewing shape: + + Enter tolerance for sewing shape: + Enter tolerance for sewing shape: - - Edit mirror plane - Edit mirror plane + + Edit mirror plane + Edit mirror plane - Transform - Przekształć + + Edit chamfer edges + - - Part design - Projektowanie części + Transform + Przekształć - - Select two shapes or more, please. - Wybierz dwa lub więcej kszałtów, proszę. + + + Part design + Projektowanie części - You have to select either two edges or two wires. - You have to select either two edges or two wires. + + + Select two shapes or more, please. + Wybierz dwa lub więcej kszałtów, proszę. - - Edit fillet edges - Edit fillet edges + + You have to select either two edges or two wires. + You have to select either two edges or two wires. - - Set colors... - Ustaw kolory... + + Edit fillet edges + Edit fillet edges - - + + + Set colors... + Ustaw kolory... + + + Workbench - - &Part - &Part + + &Part + &Part - &Simple - &Simple + + &Simple + &Simple - &Parametric - &Parametric + + &Parametric + &Parametric - Part tools - Part tools + + Part tools + Part tools - Solids - Solids + + Solids + Solids - Boolean - Boolean + + Boolean + Boolean - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_pt.ts b/src/Mod/Part/Gui/Resources/translations/Part_pt.ts index 471d0973f..0fbb7f43c 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_pt.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_pt.ts @@ -1,1873 +1,2521 @@ - - + + BlockDefinition - - Block definition - Definição de bloco + + Block definition + Definição de bloco - First limit - Primeiro limite + + First limit + Primeiro limite - Type: - Tipo: + + + Type: + Tipo: - mm - mm + + + mm + mm - Length: - Comprimento: + + + Length: + Comprimento: - Dimension - Dimensão + + + Dimension + Dimensão - Up to next - Até o próximo + + + Up to next + Até o próximo - Up to last - Até o último + + + Up to last + Até o último - Up to plane - Até ao plano + + + Up to plane + Até ao plano - Up to face - Até a face + + + Up to face + Até a face - Limit: - Limite: + + + Limit: + Limite: - No selection - Sem seleção + + + + + No selection + Sem seleção - Profile - Perfil + + Profile + Perfil - Selection: - Seleção: + + Selection: + Seleção: - Reverse - Inverter + + Reverse + Inverter - Both sides - Ambos os lados + + Both sides + Ambos os lados - Second limit - Segundo limite + + Second limit + Segundo limite - Direction - Direção + + Direction + Direção - Perpendicular to sketch - Perpendicular ao esboço + + Perpendicular to sketch + Perpendicular ao esboço - Reference - Referência + + Reference + Referência - Apply - Aplicar + + Apply + Aplicar - Cancel - Cancelar + + Cancel + Cancelar - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Part + + Part + Part - Boolean... - Booleanas... + + Boolean... + Booleanas... - Run a boolean operation with two shapes selected - Executar uma operação booleana com duas formas selecionadas + + Run a boolean operation with two shapes selected + Executar uma operação booleana com duas formas selecionadas - - + + CmdPartBox - - Part - Part + + Part + Part - Box - Caixa + + Box + Caixa - Create a box solid - Criar uma caixa sólida + + Create a box solid + Criar uma caixa sólida - - + + CmdPartBox2 - - Part - Part + + Part + Part - Box fix 1 - Correção de caixa 1 + + Box fix 1 + Correção de caixa 1 - Create a box solid without dialog - Criar uma caixa sólida sem diálogo + + Create a box solid without dialog + Criar uma caixa sólida sem diálogo - - + + CmdPartBox3 - Part - Part + + Part + Part - Box fix 2 - Correção de caixa 2 + + Box fix 2 + Correção de caixa 2 - Create a box solid without dialog - Criar uma caixa sólida sem diálogo + + Create a box solid without dialog + Criar uma caixa sólida sem diálogo - - + + CmdPartBuilder - Part - Part + + Part + Part - Shape builder... - Construtor de forma... + + Shape builder... + Construtor de forma... - Advanced utility to create shapes - Utilitário avançado para criar formas + + Advanced utility to create shapes + Utilitário avançado para criar formas - - + + + CmdPartChamfer + + + Part + Part + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Part + + Part + Part - Intersection - Intersecção + + Intersection + Intersecção - Make an intersection of two shapes - Fazer uma interseção entre duas formas + + Make an intersection of two shapes + Fazer uma interseção entre duas formas - - + + CmdPartCone - - Part - Part + + Part + Part - Cone - Cone + + Cone + Cone - Create a cone solid - Criar um cone sólido + + Create a cone solid + Criar um cone sólido - - + + CmdPartCrossSections - - Part - Part + + Part + Part - Cross-sections... - Secções transversais... + + Cross-sections... + Secções transversais... - Cross-sections - Secções transversais + + Cross-sections + Secções transversais - - + + CmdPartCut - Part - Part + + Part + Part - Cut - Recortar + + Cut + Recortar - Make a cut of two shapes - Fazer um recorte entre duas formas + + Make a cut of two shapes + Fazer um recorte entre duas formas - - + + CmdPartCylinder - - Part - Part + + Part + Part - Create a Cylinder - Criar um cilindro + + Create a Cylinder + Criar um cilindro - Cylinder - Cilindro + + Cylinder + Cilindro - - + + CmdPartExport - - Part - Part + + Part + Part - Export CAD... - Exportar CAD ... + + Export CAD... + Exportar CAD ... - Exports to a CAD file - Exporta para um arquivo CAD + + Exports to a CAD file + Exporta para um arquivo CAD - - + + CmdPartExtrude - Part - Part + + Part + Part - Extrude... - Extrusão... + + Extrude... + Extrusão... - Extrude a selected sketch - Extrusão de um esboço selecionado + + Extrude a selected sketch + Extrusão de um esboço selecionado - - + + CmdPartFillet - Part - Part + + Part + Part - Fillet... - Filete... + + Fillet... + Filete... - Fillet the selected edges of a shape - Cria um filete nas arestas selecionadas de uma forma + + Fillet the selected edges of a shape + Cria um filete nas arestas selecionadas de uma forma - - + + CmdPartFuse - Part - Part + + Part + Part - Union - União + + Union + União - Make a union of several shapes - Fazer uma união com várias formas + + Make a union of several shapes + Fazer uma união com várias formas - - + + CmdPartImport - Part - Part + + Part + Part - Imports a CAD file - Importar um arquivo CAD + + Imports a CAD file + Importar um arquivo CAD - Import CAD... - Importar CAD... + + Import CAD... + Importar CAD... - - + + CmdPartImportCurveNet - Part - Part + + Part + Part - Import a curve network - Importar uma rede de curvas + + Import a curve network + Importar uma rede de curvas - Import curve network... - Importar uma rede de curvas... + + Import curve network... + Importar uma rede de curvas... - - + + CmdPartLoft - Part - Part + + Part + Part - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Utilitário avançado para lofts + + Utility to loft + - - + + Advanced utility to lofts + Utilitário avançado para lofts + + + CmdPartMakeSolid - Part - Part + + Part + Part - Convert to solid - Converter em sólido + + Convert to solid + Converter em sólido - Create solid from a shell or compound - Criar sólidos a partir de uma casca ou composto + + Create solid from a shell or compound + Criar sólidos a partir de uma casca ou composto - - + + CmdPartMirror - Part - Part + + Part + Part - Mirroring... - Espelho... + + Mirroring... + Espelho... - Mirroring a selected shape - Espelhar uma forma selecionada + + Mirroring a selected shape + Espelhar uma forma selecionada - - + + CmdPartPickCurveNet - Part - Part + + Part + Part - Pick curve network - Selecione uma rede de curvas + + Pick curve network + Selecione uma rede de curvas - Pick a curve network - Selecione uma rede de curvas + + Pick a curve network + Selecione uma rede de curvas - - + + CmdPartPrimitives - Part - Part + + Part + Part - Create primitives... - Criar primitivas... + + Create primitives... + Criar primitivas... - Creation of parametrized geometric primitives - Criação de primitivas geométricas paramétricas + + Creation of parametrized geometric primitives + Criação de primitivas geométricas paramétricas - - + + + CmdPartRefineShape + + + Part + Part + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Part + + Part + Part - Reverse shapes - Inverter formas + + Reverse shapes + Inverter formas - Reverse orientation of shapes - Inverter a orientação de formas + + Reverse orientation of shapes + Inverter a orientação de formas - - + + CmdPartRevolve - Part - Part + + Part + Part - Revolve... - Revolver... + + Revolve... + Revolver... - Revolve a selected shape - Revolve uma forma selecionada + + Revolve a selected shape + Revolve uma forma selecionada - - + + CmdPartRuledSurface - Part - Part + + Part + Part - Create ruled surface - Criar superfície regrada + + Create ruled surface + Criar superfície regrada - Create a ruled surface from two curves - Criar uma superfície regrada a partir de duas curvas + + Create a ruled surface from two curves + Criar uma superfície regrada a partir de duas curvas - - + + CmdPartSection - Make a section of two shapes - Fazer uma seção com duas formas + + Make a section of two shapes + Fazer uma seção com duas formas - Part - Part + + Part + Part - Section - Seção + + Section + Seção - - + + CmdPartShapeFromMesh - - Part - Part + + Part + Part - Create shape from mesh... - Criar uma forma a partir de uma malha... + + Create shape from mesh... + Criar uma forma a partir de uma malha... - Create shape from selected mesh object - Cria uma forma a partir de uma malha selecionada + + Create shape from selected mesh object + Cria uma forma a partir de uma malha selecionada - - + + CmdPartSimpleCopy - Part - Part + + Part + Part - Create simple copy - Criar uma cópia simple + + Create simple copy + Criar uma cópia simple - Create a simple non-parametric copy - Criar uma cópia simples não-paramétrica + + Create a simple non-parametric copy + Criar uma cópia simples não-paramétrica - - + + CmdPartSimpleCylinder - Part - Part + + Part + Part - Create Cylinder... - Criar cilindro ... + + Create Cylinder... + Criar cilindro ... - Create a Cylinder - Criar um cilindro + + Create a Cylinder + Criar um cilindro - - + + CmdPartSphere - - Create a sphere solid - Criar uma esfera sólida + + Create a sphere solid + Criar uma esfera sólida - Part - Part + + Part + Part - Sphere - Esfera + + Sphere + Esfera - - + + + CmdPartSweep + + + Part + Part + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Criar um toro sólido + + Create a torus solid + Criar um toro sólido - Part - Part + + Part + Part - Torus - Toro + + Torus + Toro - - + + DlgExtrusion - Select a shape for extrusion, first. - Selecione uma forma de extrusão primeiro. + Select a shape for extrusion, first. + Selecione uma forma de extrusão primeiro. - The document '%1' doesn't exist. - O documento '%1' não existe. + The document '%1' doesn't exist. + O documento '%1' não existe. - - + + DlgRevolution - Select a shape for revolution, first. - Selecione uma forma de revolução primeiro. + Select a shape for revolution, first. + Selecione uma forma de revolução primeiro. - - + + DlgSettings3DViewPart - Deviation - Desvio + Deviation + Desvio - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Definir um desvio muito pequeno faz a paginação tomar muito tempo e a interface ficar mais lento ou até congelar. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Definir um desvio muito pequeno faz a paginação tomar muito tempo e a interface ficar mais lento ou até congelar. - - + + PartGui::CrossSections - - Cross sections - Secções transversais + + Cross sections + Secções transversais - Guiding plane - Plano guia + + Guiding plane + Plano guia - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Posição: + + Position: + Posição: - Sections - Seções + + Sections + Seções - On both sides - Em ambos os lados + + On both sides + Em ambos os lados - Count - Quantidade + + Count + Quantidade - Distance: - Distância: + + Distance: + Distância: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Operação Booleana + + Boolean Operation + Operação Booleana - Second shape - Segunda forma + + Second shape + Segunda forma - First shape - Primeira forma + + First shape + Primeira forma - Boolean operation - Operação Booleana + + Boolean operation + Operação Booleana - Section - Seção + + Section + Seção - Difference - Diferença + + Difference + Diferença - Union - União + + Union + União - Intersection - Intersecção + + Intersection + Intersecção - - Cannot perform a boolean operation with the same shape - Não é possível executar uma operação booleana com a mesma forma + + Cannot perform a boolean operation with the same shape + Não é possível executar uma operação booleana com a mesma forma - - Solids - Sólidos + + + Solids + Sólidos - Shells - Cascas + + + Shells + Cascas - Compounds - Compostos + + + Compounds + Compostos - Faces - Faces + + + Faces + Faces - Swap selection - Trocar seleção + + Swap selection + Trocar seleção - - Select a shape on the left side, first - Selecione uma forma do lado esquerdo, primeiro + + Select a shape on the left side, first + Selecione uma forma do lado esquerdo, primeiro - Select a shape on the right side, first - Selecione uma forma no lado direito, primeiro + + Select a shape on the right side, first + Selecione uma forma no lado direito, primeiro - No active document available - Nenhum documento ativo disponível + + No active document available + Nenhum documento ativo disponível - One of the selected objects doesn't exist anymore - Um dos objetos selecionados não existe mais + + One of the selected objects doesn't exist anymore + Um dos objetos selecionados não existe mais - Performing union on non-solids is not possible - Não é possível executar união em objetos não solidos + + Performing union on non-solids is not possible + Não é possível executar união em objetos não solidos - Performing intersection on non-solids is not possible - Não é possível executar interseção em não sólidos + + Performing intersection on non-solids is not possible + Não é possível executar interseção em não sólidos - Performing difference on non-solids is not possible - Não é possível executar diferença em não-sólidos + + Performing difference on non-solids is not possible + Não é possível executar diferença em não-sólidos - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Extrusão + + Extrude + Extrusão - Direction - Direção + + Direction + Direção - Along normal - Ao longo da normal + + Along normal + Ao longo da normal - Length: - Comprimento: + + Length: + Comprimento: - 3D view - Vista 3D + + 3D view + Vista 3D - Note:This option works for planes only - Nota: Esta opção funciona somente com planos + + Note:This option works for planes only + Nota: Esta opção funciona somente com planos - Shape - Forma + + Create solid + Criar um sólido - - + + Taper outward angle + - X: - X: + + Shape + Forma - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Selecione uma forma de extrusão primeiro. + + Z: + Z: - The document '%1' doesn't exist. - O documento '%1' não existe. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Selecione uma forma de extrusão primeiro. + + + + The document '%1' doesn't exist. + O documento '%1' não existe. + + + PartGui::DlgFilletEdges - - Fillet Edges - Filete em arestas + + Fillet Edges + Filete em arestas - Fillet Parameter - Parâmetro do filete + + Fillet Parameter + Parâmetro do filete - Radius: - Raio: + + Radius: + Raio: - Fillet type: - Tipo de filete: + + Fillet type: + Tipo de filete: - Constant Radius - Raio constante + + Constant Radius + Raio constante - Variable Radius - Raio variável + + Variable Radius + Raio variável - Shape - Forma + + Shape + Forma - Selected shape: - Forma selecionada: + + Selected shape: + Forma selecionada: - No selection - Sem seleção + + No selection + Sem seleção - - Edges to fillet - Arestas a filetar + + Edges to fillet + Arestas a filetar - Start radius - Raio inicial + + + Start radius + Raio inicial - End radius - Raio final + + End radius + Raio final - Radius - Raio + + Radius + Raio - No edge selected - Nenhuma aresta selecionada + + No edge selected + Nenhuma aresta selecionada - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Nenhuma aresta está marcada para fazer um filete. + Nenhuma aresta está marcada para fazer um filete. Selecione uma ou mais arestas primeiro. - - All - Todos + + All + Todos - None - Nenhum + + None + Nenhum - - Edge%1 - Aresta %1 + + + Edge%1 + Aresta %1 - No shape selected - Nenhuma forma selecionada + + No shape selected + Nenhuma forma selecionada - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nenhuma forma válida é selecionada. Selecione primeiro uma forma válida na caixa drop-down. + Nenhuma forma válida é selecionada. Selecione primeiro uma forma válida na caixa drop-down. - - + + PartGui::DlgPartBox - - Box definition - Definição de caixa + + Box definition + Definição de caixa - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Cancelar + + Cancel + Cancelar - OK - OK + + OK + OK - Size: - Tamanho: + + Size: + Tamanho: - Height: - Altura: + + Height: + Altura: - Width: - Largura: + + Width: + Largura: - Length: - Comprimento: + + Length: + Comprimento: - Position: - Posição: + + Position: + Posição: - Direction: - Direção: + + Direction: + Direção: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Definição de cilindro + + Cylinder definition + Definição de cilindro - Parameter - Parâmetro + + Parameter + Parâmetro - Height: - Altura: + + Height: + Altura: - Radius: - Raio: + + Radius: + Raio: - Position: - Posição: + + Position: + Posição: - Direction: - Direção: + + Direction: + Direção: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Cancelar + + Cancel + Cancelar - - + + PartGui::DlgPartImportIges - - IGES input file - Arquivo de entrada IGES + + IGES input file + Arquivo de entrada IGES - ... - ... + + ... + ... - Cancel - Cancelar + + Cancel + Cancelar - OK - OK + + OK + OK - File Name - Nome do arquivo + + File Name + Nome do arquivo - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);; Todos os arquivos (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);; Todos os arquivos (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Cancelar + + Cancel + Cancelar - OK - OK + + OK + OK - Step input file - Arquivo de entrada STEP + + Step input file + Arquivo de entrada STEP - File Name - Nome do arquivo + + File Name + Nome do arquivo - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);; Todos os arquivos (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);; Todos os arquivos (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Primitivas geométricas + + Geometric Primitives + Primitivas geométricas - Primitive - Primitiva + Primitive + Primitiva - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Ângulo - 0 para cyl + Angle - 0 for cyl + Ângulo - 0 para cyl - Angle0 - Ângulo0 + Angle0 + Ângulo0 - Angle1 - Ângulo1 + Angle1 + Ângulo1 - X Axis Value: - Valor do eixo X: + X Axis Value: + Valor do eixo X: - Y Axis Value: - Valor do eixo Y: + Y Axis Value: + Valor do eixo Y: - Z Axis Value: - Valor do eixo Z: + Z Axis Value: + Valor do eixo Z: - Wedge - Cunha + + Wedge + Cunha - Circle - Círculo + + Circle + Círculo - Vertex - Vértice + Vertex + Vértice - Position - Posição + Position + Posição - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Direção: + Direction: + Direção: - Y: - Y: + + + + Y: + Y: - Plane - Plano + + Plane + Plano - Box - Caixa + + Box + Caixa - Cylinder - Cilindro + + Cylinder + Cilindro - Cone - Cone + + Cone + Cone - Sphere - Esfera + + Sphere + Esfera - Ellipsoid - Elipsóide + + Ellipsoid + Elipsóide - Torus - Toro + + Torus + Toro - Parameter - Parâmetro + + Ellipse + - Width: - Largura: + + Point + - Length: - Comprimento: + + Line + - Height: - Altura: + + Parameter + Parâmetro - Angle: - Ângulo: + + + Width: + Largura: - Radius: - Raio: + + + Length: + Comprimento: - Radius 1: - Raio 1: + + + + + Height: + Altura: - Radius 2: - Raio 2: + + + + Angle: + Ângulo: - U parametric: - U paramétrico: + + + + + Radius: + Raio: - V parametric: - V paramétrico: + + + + Radius 1: + Raio 1: - &Create - &Criar + + + + Radius 2: + Raio 2: - Alt+C - Alt + C + + + + U parametric: + U paramétrico: - Cl&ose - &Fechar + + + + V parametric: + V paramétrico: - Alt+O - Alt + F + + X min/max: + - - Create %1 - Criar %1 + + Y min/max: + - No active document - Nenhum documento ativo + + Z min/max: + - - Pitch: - Inclinação: + + X2 min/max: + - Helix - Hélice + + Z2 min/max: + - 3D View - Vista 3D + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Criar + + + Alt+C + Alt + C + + + Cl&ose + &Fechar + + + Alt+O + Alt + F + + + + + + Create %1 + Criar %1 + + + + No active document + Nenhum documento ativo + + + + Pitch: + Inclinação: + + + + Helix + Hélice + + + 3D View + Vista 3D + + + PartGui::DlgRevolution - - Revolve - Revolver + + Revolve + Revolver - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Ângulo: + + Angle: + Ângulo: - Z: - Z: + + Z: + Z: - Axis: - Eixo: + + Axis: + Eixo: - Shape - Forma + + Shape + Forma - - Select a shape for revolution, first. - Selecione uma forma de revolução primeiro. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Selecione uma forma de revolução primeiro. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Precisão da vista / Desempenho + + View accuracy / Performance + Precisão da vista / Desempenho - View smoothing - Alisamento de vista + + View smoothing + Alisamento de vista - Using high-quality normals - Usar normais de alta qualidade + + Using high-quality normals + Usar normais de alta qualidade - This will slow down render speed but will lead to nicer results - Isto irá reduzir a velocidade da renderização, mas vai levar a resultados melhores + + This will slow down render speed but will lead to nicer results + Isto irá reduzir a velocidade da renderização, mas vai levar a resultados melhores - Defines the appearance of surfaces - Define a aparência das superfícies + + Defines the appearance of surfaces + Define a aparência das superfícies - Shape view - Modo de exibição de formas + + Shape view + Modo de exibição de formas - Tessellation - Mosaico + + Tessellation + Mosaico - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Flat shading usa normais definidas por vertex, dando uma aparência não realística das curvas, enquanto phong shading da uma aparência melhor </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Se esta opção estiver marcada, o flat shading será usado, senão será usado o phong shading.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Flat shading usa normais definidas por vertex, dando uma aparência não realística das curvas, enquanto phong shading da uma aparência melhor </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Se esta opção estiver marcada, o flat shading será usado, senão será usado o phong shading.</p></body></html> - Do not define normal per vertex - Não definir normais por vertex + + Do not define normal per vertex + Não definir normais por vertex - Defines the deviation of tessellation to the actual surface - Define o desvio de mosaico em relação a superfície real + + Defines the deviation of tessellation to the actual surface + Define o desvio de mosaico em relação a superfície real - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"> <span style=" font-weight:600;">Mosaico</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style=" font-weight:400;">Define o desvio máximo da malha mosaico em relação a superfície. O menor o valor, menor será a velocidade e melhor a aparência.</span> </p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"> <span style=" font-weight:600;">Mosaico</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style=" font-weight:400;">Define o desvio máximo da malha mosaico em relação a superfície. O menor o valor, menor será a velocidade e melhor a aparência.</span> </p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"> Dica</span></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> definir os normals por vértice é também chamado de <span style="font-style:italic;"> sombreamento de Phong (phong shading)</span></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> sombreamento simples <span style="font-style:normal;"> enquanto definir os normals por face é chamado</span> sombreamento plano (flat shading)<span style="font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;"> Dica</span></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt;"> definir os normals por vértice é também chamado de <span style="font-style:italic;"> sombreamento de Phong (phong shading)</span></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> sombreamento simples <span style="font-style:normal;"> enquanto definir os normals por face é chamado</span> sombreamento plano (flat shading)<span style="font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"> <span style=" font-weight:600;">Alta qualidade normais</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Isto irá reduzir a velocidade da renderização, mas vai levar a resultados melhores. </p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"> <span style=" font-weight:600;">Alta qualidade normais</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Isto irá reduzir a velocidade da renderização, mas vai levar a resultados melhores. </p></body></html> - Maximum deviation depending on the model bounding box - Desvio máximo dependendo da caixa de volume + + Maximum deviation depending on the model bounding box + Desvio máximo dependendo da caixa de volume - % - % + + % + % - - Deviation - Desvio + + Deviation + Desvio - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Definir um desvio muito pequeno faz a paginação tomar muito tempo e a interface ficar mais lento ou até congelar. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Definir um desvio muito pequeno faz a paginação tomar muito tempo e a interface ficar mais lento ou até congelar. - - + + PartGui::DlgSettingsGeneral - - General - Geral + + General + Geral - Export - Exportação + + Export + Exportação - Millimeter - Milímetro + + Millimeter + Milímetro - Meter - Metro + + Meter + Metro - Inch - Polegada + + Inch + Polegada - Units for export of STEP/IGES - Unidades para a exportação no formato STEP / IGES + + Units for export of STEP/IGES + Unidades para a exportação no formato STEP / IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Posição + + + + 3D View + Vista 3D + + + PartGui::LoftWidget - - Too few elements - Muito poucos elementos + + + Vertex/Wire + Vértice/arame - At least two vertices or wires are required. - Pelo menos dois vértices ou arames são necessários. + + + Loft + Loft - - + + + Too few elements + Muito poucos elementos + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Pelo menos dois vértices ou arames são necessários. + + + PartGui::Mirroring - - Mirroring - Espelho + + Mirroring + Espelho - Shapes - Formas + + Shapes + Formas - Mirror plane: - Plano de espelho: + + Mirror plane: + Plano de espelho: - XY plane - Plano XY + + XY plane + Plano XY - XZ plane - Plano XZ + + XZ plane + Plano XZ - YZ plane - Plano YZ + + YZ plane + Plano YZ - Base point: - Ponto de base: + + Base point: + Ponto de base: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Selecione uma forma para espelhar primeiro. + + Select a shape for mirroring, first. + Selecione uma forma para espelhar primeiro. - No such document '%1'. - Não há tal documento '%1'. + + No such document '%1'. + Não há tal documento '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Seleção errada + + + + + + Wrong selection + Seleção errada - Select two vertices - Selecione dois vértices + + + Select two vertices + Selecione dois vértices - Select three or more edges - Selecione três ou mais arestas + Select three or more edges + Selecione três ou mais arestas - Select two or more faces - Selecione duas ou mais faces + + Select one or more edges + - Select only one part object - Selecione apenas um objeto parte + + Select two or more faces + Selecione duas ou mais faces - Select two vertices to create an edge - Selecione dois vértices para criar uma aresta + + Select only one part object + Selecione apenas um objeto parte - Select a closed set of edges - Selecionar um conjunto fechado de arestas + + Select two vertices to create an edge + Selecione dois vértices para criar uma aresta - Select adjacent faces - Selecione faces adjacentes + + Select a closed set of edges + Selecionar um conjunto fechado de arestas - All shape types can be selected - Todos os tipos de formas podem ser selecionados + + Select adjacent faces + Selecione faces adjacentes - - + + + All shape types can be selected + Todos os tipos de formas podem ser selecionados + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vértice/arame + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Muito poucos elementos + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Dica + Hint + Dica - Select Control. - Selecione o controle. + Select Control. + Selecione o controle. - Control - Controle + Control + Controle - Dynamic - Dinâmico + Dynamic + Dinâmico - Align - Alinhar + Align + Alinhar - Value - Valor + Value + Valor - Special - Especial + Special + Especial - Command - Comando + Command + Comando - Stretch - Extender + Stretch + Extender - Move - Mover + Move + Mover - Rotate - Rotacionar + Rotate + Rotacionar - Offset - Offset + Offset + Offset - Orient - Orientar + Orient + Orientar - Match - Combinar + Match + Combinar - Surround - Cercar + Surround + Cercar - dummy - dummy + dummy + dummy - X Axis - Eixo X + X Axis + Eixo X - Y Axis - Eixo Y + Y Axis + Eixo Y - Z Axis - Eixo Z + Z Axis + Eixo Z - Increment - Incremento + Increment + Incremento - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Arraste as setas para esticar a caixa por incremento + Drag arrows to stretch box by increment + Arraste as setas para esticar a caixa por incremento - Drag arrows to move box by increment - Arraste as setas para deslocar a caixa por incremento + Drag arrows to move box by increment + Arraste as setas para deslocar a caixa por incremento - Not implemented yet - Ainda não foi implementado + Not implemented yet + Ainda não foi implementado - Drag arrows to offset checked axes by increment - Arraste as setas para deslocar os eixos marcados por incremento + Drag arrows to offset checked axes by increment + Arraste as setas para deslocar os eixos marcados por incremento - Select dragger for stretch by align - Selecione o arrastador para esticar por alinhamento + Select dragger for stretch by align + Selecione o arrastador para esticar por alinhamento - Select dragger for move by align - Selecione o arrastador para deslocar por alinhamento + Select dragger for move by align + Selecione o arrastador para deslocar por alinhamento - Select dragger for stretch by value - Selecione o arrastador para esticar por valor + Select dragger for stretch by value + Selecione o arrastador para esticar por valor - Select dragger for move by value - Selecione o arrastador para deslocar por valor + Select dragger for move by value + Selecione o arrastador para deslocar por valor - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Inserir um valor + Enter Value + Inserir um valor - Select box to match - Selecione uma caixa para combinar + Select box to match + Selecione uma caixa para combinar - Select a point - Selecione um ponto + Select a point + Selecione um ponto - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Selecione o arrastador para alinhar + Select dragger to align + Selecione o arrastador para alinhar - Select dragger to modify - Selecione o arrastador para modificar + Select dragger to modify + Selecione o arrastador para modificar - - + + PartGui::TaskFaceColors - - Set color per face - Definir cores por face + + Set color per face + Definir cores por face - Click on the faces in the 3d view to select them. - Clique nas faces desejadas na vista 3D para selecioná-las. + + Click on the faces in the 3d view to select them. + Clique nas faces desejadas na vista 3D para selecioná-las. - Faces: - Faces: + + Faces: + Faces: - Set to default - Definir como padrão + + Set to default + Definir como padrão - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vértice/arame + Vertex/Wire + Vértice/arame - Move right - Mover para a direita + Move right + Mover para a direita - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Move o item selecionado um nível abaixo.</b> <p> Isso também irá alterar o nível do item pai. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Move o item selecionado um nível abaixo.</b> <p> Isso também irá alterar o nível do item pai. </p> - Move left - Mover para a esquerda + Move left + Mover para a esquerda - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Mover o item selecionado um nível acima.</b> <p> Isso também irá alterar o nível do item pai. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Mover o item selecionado um nível acima.</b> <p> Isso também irá alterar o nível do item pai. </p> - Move up - Mover para cima + Move up + Mover para cima - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move o item selecionado para cima.</b> <p> O item será movido dentro do nível de hierarquia. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move o item selecionado para cima.</b> <p> O item será movido dentro do nível de hierarquia. </p> - Move down - Move para baixo + Move down + Move para baixo - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move o item selecionado para baixo.</b> <p> O item será movido dentro do nível de hierarquia. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move o item selecionado para baixo.</b> <p> O item será movido dentro do nível de hierarquia. </p> - Create solid - Criar um sólido + + Create solid + Criar um sólido - Ruled surface - Superfície regrada + + Ruled surface + Superfície regrada - - + + PartGui::TaskShapeBuilder - - Create shape - Criar uma forma + + + Create shape + Criar uma forma - Edge from vertices - Uma aresta a partir de vértices + + Edge from vertices + Uma aresta a partir de vértices - Face from edges - Uma face a partir de arestas + + Face from edges + Uma face a partir de arestas - Planar - Planar + + Planar + Planar - Shell from faces - Uma casca a partir de faces + + Shell from faces + Uma casca a partir de faces - Solid from shell - Um sólido a partir de uma casca + + Solid from shell + Um sólido a partir de uma casca - Create - Criar + + Create + Criar - All faces - Todas as faces + + All faces + Todas as faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Criar um sólido + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Seleção errada + + + + + + Wrong selection + Seleção errada - Select two shapes please. - Selecione duas formas, por favor. + + + Select two shapes please. + Selecione duas formas, por favor. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Todos os arquivos CAD (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Todos os arquivos CAD (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Todos os arquivos (*.*) + + + + All Files (*.*) + Todos os arquivos (*.*) - - Sewing Tolerance - Tolerância de costura + + Sewing Tolerance + Tolerância de costura - Enter tolerance for sewing shape: - Digite a tolerância para costura de forma: + + Enter tolerance for sewing shape: + Digite a tolerância para costura de forma: - - Edit mirror plane - Editar o plano de espelho + + Edit mirror plane + Editar o plano de espelho - Transform - Transformar + + Edit chamfer edges + - - Part design - Design de partes + Transform + Transformar - - Select two shapes or more, please. - Selecione dois ou mais formas, por favor. + + + Part design + Design de partes - You have to select either two edges or two wires. - Você deve selecionar duas arestas ou dois cabos. + + + Select two shapes or more, please. + Selecione dois ou mais formas, por favor. - - Edit fillet edges - Modificar arestas filetadas + + You have to select either two edges or two wires. + Você deve selecionar duas arestas ou dois cabos. - - Set colors... - Definir cores... + + Edit fillet edges + Modificar arestas filetadas - - + + + Set colors... + Definir cores... + + + Workbench - - &Part - &Part + + &Part + &Part - &Simple - &Simples + + &Simple + &Simples - &Parametric - &Paramétrico + + &Parametric + &Paramétrico - Part tools - Ferramentas de parte + + Part tools + Ferramentas de parte - Solids - Sólidos + + Solids + Sólidos - Boolean - Booleanas + + Boolean + Booleanas - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_ru.ts b/src/Mod/Part/Gui/Resources/translations/Part_ru.ts index a7b9e6103..5f632972b 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_ru.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_ru.ts @@ -1,1873 +1,2521 @@ - - + + BlockDefinition - - Block definition - Определение блока + + Block definition + Определение блока - First limit - Первое ограничение + + First limit + Первое ограничение - Type: - Тип: + + + Type: + Тип: - mm - мм + + + mm + мм - Length: - Длина: + + + Length: + Длина: - Dimension - Размер + + + Dimension + Размер - Up to next - До следующего + + + Up to next + До следующего - Up to last - До последнего + + + Up to last + До последнего - Up to plane - До плоскости + + + Up to plane + До плоскости - Up to face - До грани + + + Up to face + До грани - Limit: - Ограничение: + + + Limit: + Ограничение: - No selection - Ничего не выбрано + + + + + No selection + Ничего не выбрано - Profile - Профиль + + Profile + Профиль - Selection: - Выделение: + + Selection: + Выделение: - Reverse - Развернуть + + Reverse + Развернуть - Both sides - В обе стороны + + Both sides + В обе стороны - Second limit - Второе ограничение + + Second limit + Второе ограничение - Direction - Направление + + Direction + Направление - Perpendicular to sketch - Перпендикулярно эскизу + + Perpendicular to sketch + Перпендикулярно эскизу - Reference - Ссылка + + Reference + Ссылка - Apply - Применить + + Apply + Применить - Cancel - Отмена + + Cancel + Отмена - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Деталь + + Part + Деталь - Boolean... - Булев... + + Boolean... + Булев... - Run a boolean operation with two shapes selected - Выполнить булеву операцию с двумя выбранными формами + + Run a boolean operation with two shapes selected + Выполнить булеву операцию с двумя выбранными формами - - + + CmdPartBox - - Part - Деталь + + Part + Деталь - Box - Куб + + Box + Куб - Create a box solid - Создать твердотельный параллелепипед + + Create a box solid + Создать твердотельный параллелепипед - - + + CmdPartBox2 - - Part - Деталь + + Part + Деталь - Box fix 1 - Поле исправление 1 + + Box fix 1 + Поле исправление 1 - Create a box solid without dialog - Создать твердотельный параллелепипед без диалога + + Create a box solid without dialog + Создать твердотельный параллелепипед без диалога - - + + CmdPartBox3 - Part - Деталь + + Part + Деталь - Box fix 2 - Поле исправление 2 + + Box fix 2 + Поле исправление 2 - Create a box solid without dialog - Создать твердотельный параллелепипед без диалога + + Create a box solid without dialog + Создать твердотельный параллелепипед без диалога - - + + CmdPartBuilder - Part - Деталь + + Part + Деталь - Shape builder... - Построитель форм ... + + Shape builder... + Построитель форм ... - Advanced utility to create shapes - Расширенный утилита для создания форм + + Advanced utility to create shapes + Расширенный утилита для создания форм - - + + + CmdPartChamfer + + + Part + Деталь + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Деталь + + Part + Деталь - Intersection - Пересечение + + Intersection + Пересечение - Make an intersection of two shapes - Создать пересечение двух форм + + Make an intersection of two shapes + Создать пересечение двух форм - - + + CmdPartCone - - Part - Деталь + + Part + Деталь - Cone - Конус + + Cone + Конус - Create a cone solid - Создать твердотельный конус + + Create a cone solid + Создать твердотельный конус - - + + CmdPartCrossSections - - Part - Деталь + + Part + Деталь - Cross-sections... - Поперечные сечения... + + Cross-sections... + Поперечные сечения... - Cross-sections - Поперечные сечения + + Cross-sections + Поперечные сечения - - + + CmdPartCut - Part - Деталь + + Part + Деталь - Cut - Обрезать + + Cut + Обрезать - Make a cut of two shapes - Выполнить обрезку двух фигур + + Make a cut of two shapes + Выполнить обрезку двух фигур - - + + CmdPartCylinder - - Part - Деталь + + Part + Деталь - Create a Cylinder - Создайте цилиндр + + Create a Cylinder + Создайте цилиндр - Cylinder - Цилиндр + + Cylinder + Цилиндр - - + + CmdPartExport - - Part - Деталь + + Part + Деталь - Export CAD... - Экспорт в CAD ... + + Export CAD... + Экспорт в CAD ... - Exports to a CAD file - Экспорт в файл CAD + + Exports to a CAD file + Экспорт в файл CAD - - + + CmdPartExtrude - Part - Деталь + + Part + Деталь - Extrude... - Выдавить ... + + Extrude... + Выдавить ... - Extrude a selected sketch - Выдавить выбранный эскиз + + Extrude a selected sketch + Выдавить выбранный эскиз - - + + CmdPartFillet - Part - Деталь + + Part + Деталь - Fillet... - Скругление... + + Fillet... + Скругление... - Fillet the selected edges of a shape - Cкругление выбранного края формы + + Fillet the selected edges of a shape + Cкругление выбранного края формы - - + + CmdPartFuse - Part - Деталь + + Part + Деталь - Union - Объединение + + Union + Объединение - Make a union of several shapes - Создать объединение нескольких фигур + + Make a union of several shapes + Создать объединение нескольких фигур - - + + CmdPartImport - Part - Деталь + + Part + Деталь - Imports a CAD file - Импортировать CAD-файл + + Imports a CAD file + Импортировать CAD-файл - Import CAD... - Импорт CAD... + + Import CAD... + Импорт CAD... - - + + CmdPartImportCurveNet - Part - Деталь + + Part + Деталь - Import a curve network - Импортировать кривую сети + + Import a curve network + Импортировать кривую сети - Import curve network... - Импортировать кривую сети... + + Import curve network... + Импортировать кривую сети... - - + + CmdPartLoft - Part - Деталь + + Part + Деталь - Loft... - Лофт... + + Loft... + Лофт... - Advanced utility to lofts - Расширенная утилита для лофта + + Utility to loft + - - + + Advanced utility to lofts + Расширенная утилита для лофта + + + CmdPartMakeSolid - Part - Деталь + + Part + Деталь - Convert to solid - Преобразовать в твердые + + Convert to solid + Преобразовать в твердые - Create solid from a shell or compound - Создание формы из оболочки или составных + + Create solid from a shell or compound + Создание формы из оболочки или составных - - + + CmdPartMirror - Part - Деталь + + Part + Деталь - Mirroring... - Зеркальное отображение... + + Mirroring... + Зеркальное отображение... - Mirroring a selected shape - Зеркальное отображение выбранной фигуры + + Mirroring a selected shape + Зеркальное отображение выбранной фигуры - - + + CmdPartPickCurveNet - Part - Деталь + + Part + Деталь - Pick curve network - Выберите кривую сети + + Pick curve network + Выберите кривую сети - Pick a curve network - Выберите кривую сети + + Pick a curve network + Выберите кривую сети - - + + CmdPartPrimitives - Part - Деталь + + Part + Деталь - Create primitives... - Создать примитивы... + + Create primitives... + Создать примитивы... - Creation of parametrized geometric primitives - Создание параметризованных геометрических примитивов + + Creation of parametrized geometric primitives + Создание параметризованных геометрических примитивов - - + + + CmdPartRefineShape + + + Part + Деталь + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Деталь + + Part + Деталь - Reverse shapes - Обратная фигура + + Reverse shapes + Обратная фигура - Reverse orientation of shapes - Обратная ориентация фигуры + + Reverse orientation of shapes + Обратная ориентация фигуры - - + + CmdPartRevolve - Part - Деталь + + Part + Деталь - Revolve... - Вращать... + + Revolve... + Вращать... - Revolve a selected shape - Вращать выбранную фигуру + + Revolve a selected shape + Вращать выбранную фигуру - - + + CmdPartRuledSurface - Part - Деталь + + Part + Деталь - Create ruled surface - Создать линейчатую ​​поверхность + + Create ruled surface + Создать линейчатую ​​поверхность - Create a ruled surface from two curves - Создать линейчатую ​​поверхность из двух кривых + + Create a ruled surface from two curves + Создать линейчатую ​​поверхность из двух кривых - - + + CmdPartSection - Make a section of two shapes - Сделать сечение из двух форм + + Make a section of two shapes + Сделать сечение из двух форм - Part - Деталь + + Part + Деталь - Section - Раздел + + Section + Раздел - - + + CmdPartShapeFromMesh - - Part - Деталь + + Part + Деталь - Create shape from mesh... - Создание формы из сетки ... + + Create shape from mesh... + Создание формы из сетки ... - Create shape from selected mesh object - Создание формы из выбранного объекта сетки + + Create shape from selected mesh object + Создание формы из выбранного объекта сетки - - + + CmdPartSimpleCopy - Part - Деталь + + Part + Деталь - Create simple copy - Создать простую копию + + Create simple copy + Создать простую копию - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Деталь + + Part + Деталь - Create Cylinder... - Создайте цилиндр ... + + Create Cylinder... + Создайте цилиндр ... - Create a Cylinder - Создайте цилиндр + + Create a Cylinder + Создайте цилиндр - - + + CmdPartSphere - - Create a sphere solid - Создать твердотельную сферу + + Create a sphere solid + Создать твердотельную сферу - Part - Деталь + + Part + Деталь - Sphere - Сфера + + Sphere + Сфера - - + + + CmdPartSweep + + + Part + Деталь + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Создать твердотельный тор + + Create a torus solid + Создать твердотельный тор - Part - Деталь + + Part + Деталь - Torus - Тор + + Torus + Тор - - + + DlgExtrusion - Select a shape for extrusion, first. - Сначала выберите фигуру для экструзии. + Select a shape for extrusion, first. + Сначала выберите фигуру для экструзии. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Сначала выберите фигуру для революции. + Select a shape for revolution, first. + Сначала выберите фигуру для революции. - - + + DlgSettings3DViewPart - Deviation - Отклонение + Deviation + Отклонение - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Поперечные сечения + + Cross sections + Поперечные сечения - Guiding plane - Ведущая проекция + + Guiding plane + Ведущая проекция - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Расположение: + + Position: + Расположение: - Sections - Разделы + + Sections + Разделы - On both sides - С обеих сторон + + On both sides + С обеих сторон - Count - Итог + + Count + Итог - Distance: - Расстояние: + + Distance: + Расстояние: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Булева операция + + Boolean Operation + Булева операция - Second shape - Вторая форма + + Second shape + Вторая форма - First shape - Первая форма + + First shape + Первая форма - Boolean operation - Булева операция + + Boolean operation + Булева операция - Section - Раздел + + Section + Раздел - Difference - Разность + + Difference + Разность - Union - Объединение + + Union + Объединение - Intersection - Пересечение + + Intersection + Пересечение - - Cannot perform a boolean operation with the same shape - Невозможно выполнить булеву операцию с той же формой + + Cannot perform a boolean operation with the same shape + Невозможно выполнить булеву операцию с той же формой - - Solids - Массивы + + + Solids + Массивы - Shells - Оболочки + + + Shells + Оболочки - Compounds - Соединения + + + Compounds + Соединения - Faces - Изображения + + + Faces + Изображения - Swap selection - Выбор свопа + + Swap selection + Выбор свопа - - Select a shape on the left side, first - Сначала выберите фигуру на левой стороне + + Select a shape on the left side, first + Сначала выберите фигуру на левой стороне - Select a shape on the right side, first - Сначала выберите фигуру справа + + Select a shape on the right side, first + Сначала выберите фигуру справа - No active document available - Нет доступного активного документа + + No active document available + Нет доступного активного документа - One of the selected objects doesn't exist anymore - Один из выбранных объектов больше не существует + + One of the selected objects doesn't exist anymore + Один из выбранных объектов больше не существует - Performing union on non-solids is not possible - Выполнение объединения без твердых тел не представляется возможным + + Performing union on non-solids is not possible + Выполнение объединения без твердых тел не представляется возможным - Performing intersection on non-solids is not possible - Выполнение пересечения без твердых тел не представляется возможным + + Performing intersection on non-solids is not possible + Выполнение пересечения без твердых тел не представляется возможным - Performing difference on non-solids is not possible - Выполнение вычитания без твердых тел не представляется возможным + + Performing difference on non-solids is not possible + Выполнение вычитания без твердых тел не представляется возможным - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Выдавить + + Extrude + Выдавить - Direction - Направление + + Direction + Направление - Along normal - Вдоль нормали + + Along normal + Вдоль нормали - Length: - Длина: + + Length: + Длина: - 3D view - 3D вид + + 3D view + 3D вид - Note:This option works for planes only - Примечание: Эта опция работает только для плоскостей + + Note:This option works for planes only + Примечание: Эта опция работает только для плоскостей - Shape - Форма + + Create solid + Создать твердое тело - - * + + Taper outward angle + - X: - X: + + Shape + Форма - Z: - Z: + + * - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Сначала выберите фигуру для экструзии. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Сначала выберите фигуру для экструзии. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Скруглить ребра + + Fillet Edges + Скруглить ребра - Fillet Parameter - Параветр скругления + + Fillet Parameter + Параветр скругления - Radius: - Радиус: + + Radius: + Радиус: - Fillet type: - Тип ленты: + + Fillet type: + Тип ленты: - Constant Radius - Постоянный радиус + + Constant Radius + Постоянный радиус - Variable Radius - Переменный радиус + + Variable Radius + Переменный радиус - Shape - Форма + + Shape + Форма - Selected shape: - Выделенная фигура: + + Selected shape: + Выделенная фигура: - No selection - Ничего не выбрано + + No selection + Ничего не выбрано - - Edges to fillet - Ребера для скругления + + Edges to fillet + Ребера для скругления - Start radius - Начальный радиус + + + Start radius + Начальный радиус - End radius - Конечный радиус + + End radius + Конечный радиус - Radius - Радиус + + Radius + Радиус - No edge selected - Нет выбранных ребер + + No edge selected + Нет выбранных ребер - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Нельзя сгладить края. + Нельзя сгладить края. Пожалуйста, выберите обьект для сглаживания. - - All - Все + + All + Все - None - Ничего + + None + Ничего - - Edge%1 - Грань%1 + + + Edge%1 + Грань%1 - No shape selected - Профиль не выбран + + No shape selected + Профиль не выбран - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Допустимый профиль не выбран. Пожалуйста сначала выберите допустимый профиль в выпадающем списке. + Допустимый профиль не выбран. Пожалуйста сначала выберите допустимый профиль в выпадающем списке. - - + + PartGui::DlgPartBox - - Box definition - Определение параллелепипеда + + Box definition + Определение параллелепипеда - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Отмена + + Cancel + Отмена - OK - OK + + OK + OK - Size: - Размер: + + Size: + Размер: - Height: - Высота: + + Height: + Высота: - Width: - Ширина: + + Width: + Ширина: - Length: - Длина: + + Length: + Длина: - Position: - Расположение: + + Position: + Расположение: - Direction: - Направление: + + Direction: + Направление: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Определение цилиндра + + Cylinder definition + Определение цилиндра - Parameter - Параметр + + Parameter + Параметр - Height: - Высота: + + Height: + Высота: - Radius: - Радиус: + + Radius: + Радиус: - Position: - Расположение: + + Position: + Расположение: - Direction: - Направление: + + Direction: + Направление: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Отмена + + Cancel + Отмена - - + + PartGui::DlgPartImportIges - - IGES input file - Входной файл IGES + + IGES input file + Входной файл IGES - ... - ... + + ... + ... - Cancel - Отмена + + Cancel + Отмена - OK - OK + + OK + OK - File Name - Имя файла + + File Name + Имя файла - - * + + * - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Все файлы (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Все файлы (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Отмена + + Cancel + Отмена - OK - OK + + OK + OK - Step input file - Шаг входного файла + + Step input file + Шаг входного файла - File Name - Имя файла + + File Name + Имя файла - - * + + * - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Все файлы (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Все файлы (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Геометрические примитивы + + Geometric Primitives + Геометрические примитивы - Primitive - Примитив + Primitive + Примитив - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Угол0 + Angle0 + Угол0 - Angle1 - Угол1 + Angle1 + Угол1 - X Axis Value: - Значение на оси X: + X Axis Value: + Значение на оси X: - Y Axis Value: - Значение на оси Y: + Y Axis Value: + Значение на оси Y: - Z Axis Value: - Значение на оси Z: + Z Axis Value: + Значение на оси Z: - Wedge - Wedge + + Wedge + Wedge - Circle - Окружность + + Circle + Окружность - Vertex - Вершина + Vertex + Вершина - Position - Позиция + Position + Позиция - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Направление: + Direction: + Направление: - Y: - Y: + + + + Y: + Y: - Plane - Плоскость + + Plane + Плоскость - Box - Куб + + Box + Куб - Cylinder - Цилиндр + + Cylinder + Цилиндр - Cone - Конус + + Cone + Конус - Sphere - Сфера + + Sphere + Сфера - Ellipsoid - Эллипсоид + + Ellipsoid + Эллипсоид - Torus - Тор + + Torus + Тор - Parameter - Параметр + + Ellipse + - Width: - Ширина: + + Point + - Length: - Длина: + + Line + - Height: - Высота: + + Parameter + Параметр - Angle: - Угол: + + + Width: + Ширина: - Radius: - Радиус: + + + Length: + Длина: - Radius 1: - Радиус 1: + + + + + Height: + Высота: - Radius 2: - Радиус 2: + + + + Angle: + Угол: - U parametric: - Параметрический U: + + + + + Radius: + Радиус: - V parametric: - Параметрический V: + + + + Radius 1: + Радиус 1: - &Create - &Создать + + + + Radius 2: + Радиус 2: - Alt+C - Alt + C + + + + U parametric: + Параметрический U: - Cl&ose - Зак&рыть + + + + V parametric: + Параметрический V: - Alt+O - Alt + O + + X min/max: + - - Create %1 - Создать %1 + + Y min/max: + - No active document - Нет активного документа + + Z min/max: + - - Pitch: - Шаг: + + X2 min/max: + - Helix - Спираль + + Z2 min/max: + - 3D View - 3D Вид + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Создать + + + Alt+C + Alt + C + + + Cl&ose + Зак&рыть + + + Alt+O + Alt + O + + + + + + Create %1 + Создать %1 + + + + No active document + Нет активного документа + + + + Pitch: + Шаг: + + + + Helix + Спираль + + + 3D View + 3D Вид + + + PartGui::DlgRevolution - - Revolve - Вращаться + + Revolve + Вращаться - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Угол: + + Angle: + Угол: - Z: - Z: + + Z: + Z: - Axis: - Ось: + + Axis: + Ось: - Shape - Форма + + Shape + Форма - - Select a shape for revolution, first. - Сначала выберите фигуру для революции. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Сначала выберите фигуру для революции. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Оценить точность / характеристики + + View accuracy / Performance + Оценить точность / характеристики - View smoothing - Посмотреть сглаживания + + View smoothing + Посмотреть сглаживания - Using high-quality normals - Использование высококачественных нормалей + + Using high-quality normals + Использование высококачественных нормалей - This will slow down render speed but will lead to nicer results - Это будет замедлять скорость визуализации, но приведет к лучшему результату + + This will slow down render speed but will lead to nicer results + Это будет замедлять скорость визуализации, но приведет к лучшему результату - Defines the appearance of surfaces - Определить внешний вид поверхностей + + Defines the appearance of surfaces + Определить внешний вид поверхностей - Shape view - Форма представления + + Shape view + Форма представления - Tessellation - Мозаика + + Tessellation + Мозаика - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - Do not define normal per vertex - Не определяйте нормалей каждой вершины + + Do not define normal per vertex + Не определяйте нормалей каждой вершины - Defines the deviation of tessellation to the actual surface - Определяет отклонение тесселяции к самой поверхности + + Defines the deviation of tessellation to the actual surface + Определяет отклонение тесселяции к самой поверхности - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - Maximum deviation depending on the model bounding box - Максимальное отклонение в зависимости от ограничительной рамки модели + + Maximum deviation depending on the model bounding box + Максимальное отклонение в зависимости от ограничительной рамки модели - % - % + + % + % - - Deviation - Отклонение + + Deviation + Отклонение - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Главный + + General + Главный - Export - Экспорт + + Export + Экспорт - Millimeter - Миллиметр + + Millimeter + Миллиметр - Meter - Метр + + Meter + Метр - Inch - Дюйм + + Inch + Дюйм - Units for export of STEP/IGES - Единиц для экспорта STEP/IGES + + Units for export of STEP/IGES + Единиц для экспорта STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Позиция + + + + 3D View + 3D Вид + + + PartGui::LoftWidget - - Too few elements - Слишком мало элементов + + + Vertex/Wire + Вершина/проволока - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Лофт - - + + + Too few elements + Слишком мало элементов + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Зеркальное отображение + + Mirroring + Зеркальное отображение - Shapes - Формы + + Shapes + Формы - Mirror plane: - Зеркальная плоскость: + + Mirror plane: + Зеркальная плоскость: - XY plane - Плоскость XY + + XY plane + Плоскость XY - XZ plane - Плоскость XZ + + XZ plane + Плоскость XZ - YZ plane - Плоскость YZ + + YZ plane + Плоскость YZ - Base point: - Базовая точка: + + Base point: + Базовая точка: - x - x + + x + x - y - у + + y + у - z - z + + z + z - - Select a shape for mirroring, first. - Сначала выберите фигуру для зеркального отображения. + + Select a shape for mirroring, first. + Сначала выберите фигуру для зеркального отображения. - No such document '%1'. - Нет такого документа'%1'. + + No such document '%1'. + Нет такого документа'%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Неправильный выбор + + + + + + Wrong selection + Неправильный выбор - Select two vertices - Выберите две вершины + + + Select two vertices + Выберите две вершины - Select three or more edges - Выберите три или более ребра + Select three or more edges + Выберите три или более ребра - Select two or more faces - Выберите две или более грани + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Выберите две или более грани - Select two vertices to create an edge - Выберите две вершины для создания ребра + + Select only one part object + Select only one part object - Select a closed set of edges - Выберите ребра, образующие замкнутый контур + + Select two vertices to create an edge + Выберите две вершины для создания ребра - Select adjacent faces - Выберите смежные грани + + Select a closed set of edges + Выберите ребра, образующие замкнутый контур - All shape types can be selected - All shape types can be selected + + Select adjacent faces + Выберите смежные грани - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + Вершина/проволока + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Слишком мало элементов + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Значение + Value + Значение - Special - Special + Special + Special - Command - Команда + Command + Команда - Stretch - Stretch + Stretch + Stretch - Move - Перемещение + Move + Перемещение - Rotate - Повернуть + Rotate + Повернуть - Offset - Смещение + Offset + Смещение - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Установить цвет для грани + + Set color per face + Установить цвет для грани - Click on the faces in the 3d view to select them. - Click on the faces in the 3d view to select them. + + Click on the faces in the 3d view to select them. + Click on the faces in the 3d view to select them. - Faces: - Грани: + + Faces: + Грани: - Set to default - Установить по умолчанию + + Set to default + Установить по умолчанию - - + + PartGui::TaskLoft - - Loft - Лофт + + Loft + Лофт - Vertex/Wire - Вершина/проволока + Vertex/Wire + Вершина/проволока - Move right - Перейти вправо + Move right + Перейти вправо - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> - Move left - Перейти влево + Move left + Перейти влево - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Перемещение выбранного элемента на один уровень вниз.</b> <p> Это повлечет за собой изменение уровня родительского элемента. </p> - Move up - Переместить вверх + Move up + Переместить вверх - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - Move down - Переместить вниз + Move down + Переместить вниз - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - Create solid - Создать твердое тело + + Create solid + Создать твердое тело - Ruled surface - Поверхность по закону + + Ruled surface + Поверхность по закону - - + + PartGui::TaskShapeBuilder - - Create shape - Создать форму + + + Create shape + Создать форму - Edge from vertices - Ребро по вершинам + + Edge from vertices + Ребро по вершинам - Face from edges - Грань из ребер + + Face from edges + Грань из ребер - Planar - Плоский + + Planar + Плоский - Shell from faces - Оболочка из граней + + Shell from faces + Оболочка из граней - Solid from shell - Твердое тело из оболочки + + Solid from shell + Твердое тело из оболочки - Create - Создать + + Create + Создать - All faces - Все грани + + All faces + Все грани - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Создать твердое тело + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Неправильный выбор + + + + + + Wrong selection + Неправильный выбор - Select two shapes please. - Выберите две формы пожалуйста. + + + Select two shapes please. + Выберите две формы пожалуйста. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Все CAD-файлы (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Все CAD-файлы (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Все файлы (*.*) + + + + All Files (*.*) + Все файлы (*.*) - - Sewing Tolerance - Допуск на сшивку + + Sewing Tolerance + Допуск на сшивку - Enter tolerance for sewing shape: - Введите допустимость для шитья формы: + + Enter tolerance for sewing shape: + Введите допустимость для шитья формы: - - Edit mirror plane - Редактировать плоскость зеркала + + Edit mirror plane + Редактировать плоскость зеркала - Transform - Преобразовать + + Edit chamfer edges + - - Part design - Дизайн детали + Transform + Преобразовать - - Select two shapes or more, please. - Пожалуйста выберите несколько форм. + + + Part design + Дизайн детали - You have to select either two edges or two wires. - Вы должны выбрать два ребра или две линии. + + + Select two shapes or more, please. + Пожалуйста выберите несколько форм. - - Edit fillet edges - Изменение краев ленты + + You have to select either two edges or two wires. + Вы должны выбрать два ребра или две линии. - - Set colors... - Установите цвета ... + + Edit fillet edges + Изменение краев ленты - - + + + Set colors... + Установите цвета ... + + + Workbench - - &Part - Деталь + + &Part + Деталь - &Simple - Простой + + &Simple + Простой - &Parametric - Параметрический + + &Parametric + Параметрический - Part tools - Часть средств + + Part tools + Часть средств - Solids - Массивы + + Solids + Массивы - Boolean - Булевый + + Boolean + Булевый - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_se.ts b/src/Mod/Part/Gui/Resources/translations/Part_se.ts index 7387fb468..e79bf4546 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_se.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_se.ts @@ -1,1873 +1,2521 @@ - - + + BlockDefinition - - Block definition - Block definition + + Block definition + Block definition - First limit - Första begränsningen + + First limit + Första begränsningen - Type: - Typ: + + + Type: + Typ: - mm - mm + + + mm + mm - Length: - Längd: + + + Length: + Längd: - Dimension - Dimension + + + Dimension + Dimension - Up to next - Upp till nästa + + + Up to next + Upp till nästa - Up to last - Upp till sista + + + Up to last + Upp till sista - Up to plane - Upp till plan + + + Up to plane + Upp till plan - Up to face - Upp till yta + + + Up to face + Upp till yta - Limit: - Begränsning: + + + Limit: + Begränsning: - No selection - Inget val + + + + + No selection + Inget val - Profile - Profil + + Profile + Profil - Selection: - markering: + + Selection: + markering: - Reverse - Omvänd + + Reverse + Omvänd - Both sides - Båda sidor + + Both sides + Båda sidor - Second limit - Andra begränsningen + + Second limit + Andra begränsningen - Direction - Riktning + + Direction + Riktning - Perpendicular to sketch - Vinkelrätt mot skiss + + Perpendicular to sketch + Vinkelrätt mot skiss - Reference - Referens + + Reference + Referens - Apply - Verkställ + + Apply + Verkställ - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - - + + CmdPartBoolean - - Part - Detalj + + Part + Detalj - Boolean... - Boolesk... + + Boolean... + Boolesk... - Run a boolean operation with two shapes selected - Kör en boolesk operation med två valda former + + Run a boolean operation with two shapes selected + Kör en boolesk operation med två valda former - - + + CmdPartBox - - Part - Detalj + + Part + Detalj - Box - Låda + + Box + Låda - Create a box solid - Skapa en lådsolid + + Create a box solid + Skapa en lådsolid - - + + CmdPartBox2 - - Part - Detalj + + Part + Detalj - Box fix 1 - Kub fix 1 + + Box fix 1 + Kub fix 1 - Create a box solid without dialog - Skapa en lådsolid utan dialogruta + + Create a box solid without dialog + Skapa en lådsolid utan dialogruta - - + + CmdPartBox3 - Part - Detalj + + Part + Detalj - Box fix 2 - Kub fix 2 + + Box fix 2 + Kub fix 2 - Create a box solid without dialog - Skapa en lådsolid utan dialogruta + + Create a box solid without dialog + Skapa en lådsolid utan dialogruta - - + + CmdPartBuilder - Part - Detalj + + Part + Detalj - Shape builder... - form byggare ... + + Shape builder... + form byggare ... - Advanced utility to create shapes - Avancerade verktyg för att skapa former + + Advanced utility to create shapes + Avancerade verktyg för att skapa former - - + + + CmdPartChamfer + + + Part + Detalj + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Detalj + + Part + Detalj - Intersection - Skärning + + Intersection + Skärning - Make an intersection of two shapes - Gör en skärning mellan två former + + Make an intersection of two shapes + Gör en skärning mellan två former - - + + CmdPartCone - - Part - Detalj + + Part + Detalj - Cone - Kon + + Cone + Kon - Create a cone solid - Skapa en kon solid + + Create a cone solid + Skapa en kon solid - - + + CmdPartCrossSections - - Part - Detalj + + Part + Detalj - Cross-sections... - Tvärsnitt... + + Cross-sections... + Tvärsnitt... - Cross-sections - Tvärsnitt + + Cross-sections + Tvärsnitt - - + + CmdPartCut - Part - Detalj + + Part + Detalj - Cut - Klipp + + Cut + Klipp - Make a cut of two shapes - Gör ett klipp med två former + + Make a cut of two shapes + Gör ett klipp med två former - - + + CmdPartCylinder - - Part - Detalj + + Part + Detalj - Create a Cylinder - Skapa en Cylinder + + Create a Cylinder + Skapa en Cylinder - Cylinder - Cylinder + + Cylinder + Cylinder - - + + CmdPartExport - - Part - Detalj + + Part + Detalj - Export CAD... - Exportera CAD ... + + Export CAD... + Exportera CAD ... - Exports to a CAD file - Exporterar till en CAD-fil + + Exports to a CAD file + Exporterar till en CAD-fil - - + + CmdPartExtrude - Part - Detalj + + Part + Detalj - Extrude... - Extrudera... + + Extrude... + Extrudera... - Extrude a selected sketch - Extrudera en vald skiss + + Extrude a selected sketch + Extrudera en vald skiss - - + + CmdPartFillet - Part - Detalj + + Part + Detalj - Fillet... - Fasning... + + Fillet... + Fasning... - Fillet the selected edges of a shape - Fasa av de valda kanterna på en form + + Fillet the selected edges of a shape + Fasa av de valda kanterna på en form - - + + CmdPartFuse - Part - Detalj + + Part + Detalj - Union - Förening + + Union + Förening - Make a union of several shapes - Gör en förening av flera former + + Make a union of several shapes + Gör en förening av flera former - - + + CmdPartImport - Part - Detalj + + Part + Detalj - Imports a CAD file - Importerar en CAD-fil + + Imports a CAD file + Importerar en CAD-fil - Import CAD... - Importera CAD... + + Import CAD... + Importera CAD... - - + + CmdPartImportCurveNet - Part - Detalj + + Part + Detalj - Import a curve network - Importera ett kurvnät + + Import a curve network + Importera ett kurvnät - Import curve network... - Importera kurvnät... + + Import curve network... + Importera kurvnät... - - + + CmdPartLoft - Part - Detalj + + Part + Detalj - Loft... - Loft ... + + Loft... + Loft ... - Advanced utility to lofts - Avancerade verktyg för loft + + Utility to loft + - - + + Advanced utility to lofts + Avancerade verktyg för loft + + + CmdPartMakeSolid - Part - Detalj + + Part + Detalj - Convert to solid - Konvertera till solid + + Convert to solid + Konvertera till solid - Create solid from a shell or compound - Skapa en solid från ett skal eller en sammansättning + + Create solid from a shell or compound + Skapa en solid från ett skal eller en sammansättning - - + + CmdPartMirror - Part - Detalj + + Part + Detalj - Mirroring... - Spegling... + + Mirroring... + Spegling... - Mirroring a selected shape - Spegling av en markerad form + + Mirroring a selected shape + Spegling av en markerad form - - + + CmdPartPickCurveNet - Part - Detalj + + Part + Detalj - Pick curve network - Välj kurvnät + + Pick curve network + Välj kurvnät - Pick a curve network - Välj ett kurvnät + + Pick a curve network + Välj ett kurvnät - - + + CmdPartPrimitives - Part - Detalj + + Part + Detalj - Create primitives... - Skapa primitiver... + + Create primitives... + Skapa primitiver... - Creation of parametrized geometric primitives - Skapa parametriserade geometriska primitiver + + Creation of parametrized geometric primitives + Skapa parametriserade geometriska primitiver - - + + + CmdPartRefineShape + + + Part + Detalj + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Detalj + + Part + Detalj - Reverse shapes - Omvända former + + Reverse shapes + Omvända former - Reverse orientation of shapes - Omvänd orientering av former + + Reverse orientation of shapes + Omvänd orientering av former - - + + CmdPartRevolve - Part - Detalj + + Part + Detalj - Revolve... - Rotera... + + Revolve... + Rotera... - Revolve a selected shape - Rotera en vald form + + Revolve a selected shape + Rotera en vald form - - + + CmdPartRuledSurface - Part - Detalj + + Part + Detalj - Create ruled surface - Skapa styrd yta + + Create ruled surface + Skapa styrd yta - Create a ruled surface from two curves - Skapa en styrd yta från två kurvor + + Create a ruled surface from two curves + Skapa en styrd yta från två kurvor - - + + CmdPartSection - Make a section of two shapes - Gör ett tvärsnitt av två former + + Make a section of two shapes + Gör ett tvärsnitt av två former - Part - Detalj + + Part + Detalj - Section - Sektionering + + Section + Sektionering - - + + CmdPartShapeFromMesh - - Part - Detalj + + Part + Detalj - Create shape from mesh... - Skapa form från nät ... + + Create shape from mesh... + Skapa form från nät ... - Create shape from selected mesh object - Skapa form från valt nätobjekt + + Create shape from selected mesh object + Skapa form från valt nätobjekt - - + + CmdPartSimpleCopy - Part - Detalj + + Part + Detalj - Create simple copy - Skapa en enkel kopia + + Create simple copy + Skapa en enkel kopia - Create a simple non-parametric copy - Skapa en enkel icke-parametrisk kopia + + Create a simple non-parametric copy + Skapa en enkel icke-parametrisk kopia - - + + CmdPartSimpleCylinder - Part - Detalj + + Part + Detalj - Create Cylinder... - Skapa Cylinder... + + Create Cylinder... + Skapa Cylinder... - Create a Cylinder - Skapa en Cylinder + + Create a Cylinder + Skapa en Cylinder - - + + CmdPartSphere - - Create a sphere solid - Skapa en sfär solid + + Create a sphere solid + Skapa en sfär solid - Part - Detalj + + Part + Detalj - Sphere - Sfär + + Sphere + Sfär - - + + + CmdPartSweep + + + Part + Detalj + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Skapa en torus solid + + Create a torus solid + Skapa en torus solid - Part - Detalj + + Part + Detalj - Torus - Torus + + Torus + Torus - - + + DlgExtrusion - Select a shape for extrusion, first. - Välj en form för extrudering först. + Select a shape for extrusion, first. + Välj en form för extrudering först. - The document '%1' doesn't exist. - Dokumentet "%1" finns inte. + The document '%1' doesn't exist. + Dokumentet "%1" finns inte. - - + + DlgRevolution - Select a shape for revolution, first. - Välj en form för rotering först. + Select a shape for revolution, first. + Välj en form för rotering först. - - + + DlgSettings3DViewPart - Deviation - Avvikelse + Deviation + Avvikelse - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Att ställa in en för liten avvikelse orsakar tesselleringen att ta längre tid och därmed fryser eller saktar ner det grafiska gränssnittet. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Att ställa in en för liten avvikelse orsakar tesselleringen att ta längre tid och därmed fryser eller saktar ner det grafiska gränssnittet. - - + + PartGui::CrossSections - - Cross sections - Tvärsnitt + + Cross sections + Tvärsnitt - Guiding plane - Vägledande plan + + Guiding plane + Vägledande plan - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Position: + + Position: + Position: - Sections - Sektionering + + Sections + Sektionering - On both sides - På båda sidor + + On both sides + På båda sidor - Count - Antal + + Count + Antal - Distance: - Avstånd: + + Distance: + Avstånd: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Boolesk operation + + Boolean Operation + Boolesk operation - Second shape - Andra formen + + Second shape + Andra formen - First shape - Första formen + + First shape + Första formen - Boolean operation - Boolesk operation + + Boolean operation + Boolesk operation - Section - Sektionering + + Section + Sektionering - Difference - Skillnad + + Difference + Skillnad - Union - Förening + + Union + Förening - Intersection - Skärning + + Intersection + Skärning - - Cannot perform a boolean operation with the same shape - Kan inte utföra en boolesk operation med samma form + + Cannot perform a boolean operation with the same shape + Kan inte utföra en boolesk operation med samma form - - Solids - Solider + + + Solids + Solider - Shells - Skal + + + Shells + Skal - Compounds - Sammansättningar + + + Compounds + Sammansättningar - Faces - Ytor + + + Faces + Ytor - Swap selection - Växla urval + + Swap selection + Växla urval - - Select a shape on the left side, first - Välj en form på vänster sida först + + Select a shape on the left side, first + Välj en form på vänster sida först - Select a shape on the right side, first - Välj en form till höger först + + Select a shape on the right side, first + Välj en form till höger först - No active document available - Inget tillgängligt aktivt dokument + + No active document available + Inget tillgängligt aktivt dokument - One of the selected objects doesn't exist anymore - Ett av de markerade objekten finns inte längre + + One of the selected objects doesn't exist anymore + Ett av de markerade objekten finns inte längre - Performing union on non-solids is not possible - Att utföra förening på icke-solider är inte möjligt + + Performing union on non-solids is not possible + Att utföra förening på icke-solider är inte möjligt - Performing intersection on non-solids is not possible - Att utföra skärning på icke-solider är inte möjligt + + Performing intersection on non-solids is not possible + Att utföra skärning på icke-solider är inte möjligt - Performing difference on non-solids is not possible - Att utföra skillnad på icke-solider är inte möjligt + + Performing difference on non-solids is not possible + Att utföra skillnad på icke-solider är inte möjligt - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Extrudera + + Extrude + Extrudera - Direction - Riktning + + Direction + Riktning - Along normal - Längs normal + + Along normal + Längs normal - Length: - Längd: + + Length: + Längd: - 3D view - 3D vy + + 3D view + 3D vy - Note:This option works for planes only - OBS: Detta alternativ fungerar endast för plan + + Note:This option works for planes only + OBS: Detta alternativ fungerar endast för plan - Shape - Form + + Create solid + Skapa solid - - + + Taper outward angle + - X: - X: + + Shape + Form - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Välj en form för extrudering först. + + Z: + Z: - The document '%1' doesn't exist. - Dokumentet "%1" finns inte. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Välj en form för extrudering först. + + + + The document '%1' doesn't exist. + Dokumentet "%1" finns inte. + + + PartGui::DlgFilletEdges - - Fillet Edges - Runda av kanter + + Fillet Edges + Runda av kanter - Fillet Parameter - Avrundningsparameter + + Fillet Parameter + Avrundningsparameter - Radius: - Radie: + + Radius: + Radie: - Fillet type: - Avrundningstyp: + + Fillet type: + Avrundningstyp: - Constant Radius - Konstant radie + + Constant Radius + Konstant radie - Variable Radius - Variabel radie + + Variable Radius + Variabel radie - Shape - Form + + Shape + Form - Selected shape: - Vald form: + + Selected shape: + Vald form: - No selection - Inget val + + No selection + Inget val - - Edges to fillet - Kanter att avrunda + + Edges to fillet + Kanter att avrunda - Start radius - Start radie + + + Start radius + Start radie - End radius - Slut radie + + End radius + Slut radie - Radius - Radie + + Radius + Radie - No edge selected - Ingen kant vald + + No edge selected + Ingen kant vald - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Ingen kant är vald för avrundning. + Ingen kant är vald för avrundning. Välj en eller fler kanter först. - - All - Alla + + All + Alla - None - inget + + None + inget - - Edge%1 - Kant%1 + + + Edge%1 + Kant%1 - No shape selected - Ingen form har valts + + No shape selected + Ingen form har valts - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Ingen giltig form är markerad. Välj en giltig form i listrutan först. + Ingen giltig form är markerad. Välj en giltig form i listrutan först. - - + + PartGui::DlgPartBox - - Box definition - Låddefinition + + Box definition + Låddefinition - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - Size: - Storlek: + + Size: + Storlek: - Height: - Höjd: + + Height: + Höjd: - Width: - Bredd: + + Width: + Bredd: - Length: - Längd: + + Length: + Längd: - Position: - Position: + + Position: + Position: - Direction: - Riktning: + + Direction: + Riktning: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Cylinder definition + + Cylinder definition + Cylinder definition - Parameter - Parameter + + Parameter + Parameter - Height: - Höjd: + + Height: + Höjd: - Radius: - Radie: + + Radius: + Radie: - Position: - Position: + + Position: + Position: - Direction: - Riktning: + + Direction: + Riktning: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - OK + + OK + OK - Cancel - Avbryt + + Cancel + Avbryt - - + + PartGui::DlgPartImportIges - - IGES input file - IGES-Inmatningsfil + + IGES input file + IGES-Inmatningsfil - ... - ... + + ... + ... - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - File Name - Filnamn + + File Name + Filnamn - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Alla filer (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Alla filer (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Avbryt + + Cancel + Avbryt - OK - OK + + OK + OK - Step input file - Step inmatningsfil + + Step input file + Step inmatningsfil - File Name - Filnamn + + File Name + Filnamn - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Alla filer (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Alla filer (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Geometriska primitiver + + Geometric Primitives + Geometriska primitiver - Primitive - Primitiv + Primitive + Primitiv - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Vinkel - 0 för cyl + Angle - 0 for cyl + Vinkel - 0 för cyl - Angle0 - Vinkel0 + Angle0 + Vinkel0 - Angle1 - Vinkel1 + Angle1 + Vinkel1 - X Axis Value: - X-Axel Värde: + X Axis Value: + X-Axel Värde: - Y Axis Value: - Y-Axel Värde: + Y Axis Value: + Y-Axel Värde: - Z Axis Value: - Z-Axel Värde: + Z Axis Value: + Z-Axel Värde: - Wedge - Kil + + Wedge + Kil - Circle - Cirkel + + Circle + Cirkel - Vertex - Hörn + Vertex + Hörn - Position - Position + Position + Position - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Riktning: + Direction: + Riktning: - Y: - Y: + + + + Y: + Y: - Plane - Plan + + Plane + Plan - Box - Låda + + Box + Låda - Cylinder - Cylinder + + Cylinder + Cylinder - Cone - Kon + + Cone + Kon - Sphere - Sfär + + Sphere + Sfär - Ellipsoid - Ellipsoid + + Ellipsoid + Ellipsoid - Torus - Torus + + Torus + Torus - Parameter - Parameter + + Ellipse + - Width: - Bredd: + + Point + - Length: - Längd: + + Line + - Height: - Höjd: + + Parameter + Parameter - Angle: - Vinkel: + + + Width: + Bredd: - Radius: - Radie: + + + Length: + Längd: - Radius 1: - Radie 1: + + + + + Height: + Höjd: - Radius 2: - Radie 2: + + + + Angle: + Vinkel: - U parametric: - U parametrisk: + + + + + Radius: + Radie: - V parametric: - V parametrisk: + + + + Radius 1: + Radie 1: - &Create - &Skapa + + + + Radius 2: + Radie 2: - Alt+C - Alt+S + + + + U parametric: + U parametrisk: - Cl&ose - &Stäng + + + + V parametric: + V parametrisk: - Alt+O - Alt+S + + X min/max: + - - Create %1 - Skapa %1 + + Y min/max: + - No active document - Inget aktivt dokument + + Z min/max: + - - Pitch: - Lutning: + + X2 min/max: + - Helix - Helix + + Z2 min/max: + - 3D View - 3D-vy + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + &Skapa + + + Alt+C + Alt+S + + + Cl&ose + &Stäng + + + Alt+O + Alt+S + + + + + + Create %1 + Skapa %1 + + + + No active document + Inget aktivt dokument + + + + Pitch: + Lutning: + + + + Helix + Helix + + + 3D View + 3D-vy + + + PartGui::DlgRevolution - - Revolve - Rotera + + Revolve + Rotera - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Vinkel: + + Angle: + Vinkel: - Z: - Z: + + Z: + Z: - Axis: - Axel: + + Axis: + Axel: - Shape - Form + + Shape + Form - - Select a shape for revolution, first. - Välj en form för rotering först. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Välj en form för rotering först. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Vynoggrannhet/Prestanda + + View accuracy / Performance + Vynoggrannhet/Prestanda - View smoothing - Visa utjämning + + View smoothing + Visa utjämning - Using high-quality normals - Använda högkvalitetsnormaler + + Using high-quality normals + Använda högkvalitetsnormaler - This will slow down render speed but will lead to nicer results - Detta kommer att sakta ned hastigheten, men kommer att leda till bättre resultat + + This will slow down render speed but will lead to nicer results + Detta kommer att sakta ned hastigheten, men kommer att leda till bättre resultat - Defines the appearance of surfaces - Definierar ytornas utseende + + Defines the appearance of surfaces + Definierar ytornas utseende - Shape view - Formvy + + Shape view + Formvy - Tessellation - Tessellering + + Tessellation + Tessellering - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - 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;"><span style=" font-weight:600;">plattskuggning/Phong skuggning</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Med plattskuggning så är ytnormalerna inte definierade för hörn vilket leder till ett orealistiskt utseende för kurvade ytor emedan om Phong skuggning ger ett jämnare utseende. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Om detta laternativ inte är valt så används Phong skuggning, om det är valt så används plattskuggning.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + 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;"><span style=" font-weight:600;">plattskuggning/Phong skuggning</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Med plattskuggning så är ytnormalerna inte definierade för hörn vilket leder till ett orealistiskt utseende för kurvade ytor emedan om Phong skuggning ger ett jämnare utseende. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Om detta laternativ inte är valt så används Phong skuggning, om det är valt så används plattskuggning.</p></body></html> - Do not define normal per vertex - Definiera inte normal för hörn + + Do not define normal per vertex + Definiera inte normal för hörn - Defines the deviation of tessellation to the actual surface - Definierar tesseleringens avvikelse till det egentliga ytan + + Defines the deviation of tessellation to the actual surface + Definierar tesseleringens avvikelse till det egentliga ytan - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Mosaik</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definierar den maximala avvikelsen mellan mosaiknätet och ytan. Ju mindre värde, desto långsammare beräkningshastighet men bättre utseende.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Mosaik</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Definierar den maximala avvikelsen mellan mosaiknätet och ytan. Ju mindre värde, desto långsammare beräkningshastighet men bättre utseende.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Tips</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definition av normaler för hörn kallas även<span style=" font-style:italic;">Phong skuggning</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">medan definition av normaler för yta kallas </span>Plattskuggning<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Tips</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Definition av normaler för hörn kallas även<span style=" font-style:italic;">Phong skuggning</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">medan definition av normaler för yta kallas </span>Plattskuggning<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">Högkvalitetsnormaler</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Detta kommer att bromsa beräkningshastigheten men kommer att ge ett snyggare resultat.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">Högkvalitetsnormaler</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Detta kommer att bromsa beräkningshastigheten men kommer att ge ett snyggare resultat.</p></body></html> - Maximum deviation depending on the model bounding box - Maximal avvikelse beroende på modellens markeringsram + + Maximum deviation depending on the model bounding box + Maximal avvikelse beroende på modellens markeringsram - % - % + + % + % - - Deviation - Avvikelse + + Deviation + Avvikelse - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Att ställa in en för liten avvikelse orsakar tesselleringen att ta längre tid och därmed fryser eller saktar ner det grafiska gränssnittet. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Att ställa in en för liten avvikelse orsakar tesselleringen att ta längre tid och därmed fryser eller saktar ner det grafiska gränssnittet. - - + + PartGui::DlgSettingsGeneral - - General - Allmänt + + General + Allmänt - Export - Exportera + + Export + Exportera - Millimeter - Millimeter + + Millimeter + Millimeter - Meter - Meter + + Meter + Meter - Inch - Tum + + Inch + Tum - Units for export of STEP/IGES - Enheter för export av STEP / IGES + + Units for export of STEP/IGES + Enheter för export av STEP / IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Position + + + + 3D View + 3D-vy + + + PartGui::LoftWidget - - Too few elements - För få element + + + Vertex/Wire + Hörn/Tråd - At least two vertices or wires are required. - Minst två hörn eller trådar krävs. + + + Loft + Loft - - + + + Too few elements + För få element + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + Minst två hörn eller trådar krävs. + + + PartGui::Mirroring - - Mirroring - Spegling + + Mirroring + Spegling - Shapes - Former + + Shapes + Former - Mirror plane: - Speglingsplan: + + Mirror plane: + Speglingsplan: - XY plane - XY plan + + XY plane + XY plan - XZ plane - XZ plan + + XZ plane + XZ plan - YZ plane - YZ plan + + YZ plane + YZ plan - Base point: - Baspunkt: + + Base point: + Baspunkt: - x - x + + x + x - y - Y + + y + Y - z - z + + z + z - - Select a shape for mirroring, first. - Välj en form för spegling först. + + Select a shape for mirroring, first. + Välj en form för spegling först. - No such document '%1'. - Inget sådant dokument '%1'. + + No such document '%1'. + Inget sådant dokument '%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Fel val + + + + + + Wrong selection + Fel val - Select two vertices - Välj två hörn + + + Select two vertices + Välj två hörn - Select three or more edges - Välj tre eller flera kanter + Select three or more edges + Välj tre eller flera kanter - Select two or more faces - Markera två eller flera ytor + + Select one or more edges + - Select only one part object - Välj bara ett del objekt + + Select two or more faces + Markera två eller flera ytor - Select two vertices to create an edge - Välj två hörn för att skapa en kant + + Select only one part object + Välj bara ett del objekt - Select a closed set of edges - Välj en sluten uppsättning av kanter + + Select two vertices to create an edge + Välj två hörn för att skapa en kant - Select adjacent faces - Välj intilliggande ytor + + Select a closed set of edges + Välj en sluten uppsättning av kanter - All shape types can be selected - Alla formtyper kan väljas + + Select adjacent faces + Välj intilliggande ytor - - + + + All shape types can be selected + Alla formtyper kan väljas + + + + PartGui::SweepWidget + + + + Vertex/Wire + Hörn/Tråd + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + För få element + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Värde + Value + Värde - Special - Special + Special + Special - Command - Kommando + Command + Kommando - Stretch - Stretch + Stretch + Stretch - Move - Flytta + Move + Flytta - Rotate - Rotera + Rotate + Rotera - Offset - Offset + Offset + Offset - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Sätt färg per yta + + Set color per face + Sätt färg per yta - Click on the faces in the 3d view to select them. - Klicka på ytor i 3d-vyn för att välja dem. + + Click on the faces in the 3d view to select them. + Klicka på ytor i 3d-vyn för att välja dem. - Faces: - Ytor: + + Faces: + Ytor: - Set to default - Ange som standard + + Set to default + Ange som standard - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Hörn/Tråd + Vertex/Wire + Hörn/Tråd - Move right - Flytta åt höger + Move right + Flytta åt höger - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Flytta det markerade objektet en nivå nedåt.</b> <p> Detta kommer också att ändra nivån för föräldraobjektet. </p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Flytta det markerade objektet en nivå nedåt.</b> <p> Detta kommer också att ändra nivån för föräldraobjektet. </p> - Move left - Flytta åt vänster + Move left + Flytta åt vänster - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Flytta det markerade objektet en nivå upp.</b> <p> Detta kommer också att ändra nivån för föräldraobjektet. </p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Flytta det markerade objektet en nivå upp.</b> <p> Detta kommer också att ändra nivån för föräldraobjektet. </p> - Move up - Flytta upp + Move up + Flytta upp - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytta det markerade objektet uppåt.</b> <p> Objektet kommer att flyttas inom hierarkinivån. </p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytta det markerade objektet uppåt.</b> <p> Objektet kommer att flyttas inom hierarkinivån. </p> - Move down - Flytta ned + Move down + Flytta ned - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Flytta det markerade objektet nedåt.</b> <p> Objektet kommer att flyttas inom hierarkinivån. </p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Flytta det markerade objektet nedåt.</b> <p> Objektet kommer att flyttas inom hierarkinivån. </p> - Create solid - Skapa solid + + Create solid + Skapa solid - Ruled surface - Enkelkrökt yta + + Ruled surface + Enkelkrökt yta - - + + PartGui::TaskShapeBuilder - - Create shape - Skapa form + + + Create shape + Skapa form - Edge from vertices - Kanter från hörn + + Edge from vertices + Kanter från hörn - Face from edges - Ytor från kanter + + Face from edges + Ytor från kanter - Planar - Planär + + Planar + Planär - Shell from faces - Skal från ytor + + Shell from faces + Skal från ytor - Solid from shell - Solid från skal + + Solid from shell + Solid från skal - Create - Skapa + + Create + Skapa - All faces - Alla ytor + + All faces + Alla ytor - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Skapa solid + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Fel val + + + + + + Wrong selection + Fel val - Select two shapes please. - Välj två former. + + + Select two shapes please. + Välj två former. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Alla CAD filer (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Alla CAD filer (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.STP *.step) + + + + STEP (*.stp *.step) + STEP (*.STP *.step) - IGES (*.igs *.iges) - IGES (*.IGS *.IGES) + + + + IGES (*.igs *.iges) + IGES (*.IGS *.IGES) - BREP (*.brp *.brep) - BREP (*.BRP *.brep) + + + + BREP (*.brp *.brep) + BREP (*.BRP *.brep) - All Files (*.*) - Alla filer (*.*) + + + + All Files (*.*) + Alla filer (*.*) - - Sewing Tolerance - Sömntolerans + + Sewing Tolerance + Sömntolerans - Enter tolerance for sewing shape: - Ange tolerans för för att sömma ihop formen: + + Enter tolerance for sewing shape: + Ange tolerans för för att sömma ihop formen: - - Edit mirror plane - Redigera speglingsplan + + Edit mirror plane + Redigera speglingsplan - Transform - Omvandla + + Edit chamfer edges + - - Part design - Del design + Transform + Omvandla - - Select two shapes or more, please. - Välj två figurer eller mer, tack. + + + Part design + Del design - You have to select either two edges or two wires. - Du måste antingen välja två kanter eller två trådar. + + + Select two shapes or more, please. + Välj två figurer eller mer, tack. - - Edit fillet edges - Redigera avrundade kanter + + You have to select either two edges or two wires. + Du måste antingen välja två kanter eller två trådar. - - Set colors... - Ställ in färgerna ... + + Edit fillet edges + Redigera avrundade kanter - - + + + Set colors... + Ställ in färgerna ... + + + Workbench - - &Part - &Del + + &Part + &Del - &Simple - &Enkel + + &Simple + &Enkel - &Parametric - &Parametrisk + + &Parametric + &Parametrisk - Part tools - Del verktyg + + Part tools + Del verktyg - Solids - Solider + + Solids + Solider - Boolean - Boolesk + + Boolean + Boolesk - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_uk.ts b/src/Mod/Part/Gui/Resources/translations/Part_uk.ts index 0fdb44d31..2585773cb 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_uk.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_uk.ts @@ -1,1874 +1,2522 @@ - - + + BlockDefinition - - Block definition - Визначення блоку + + Block definition + Визначення блоку - First limit - Перше обмеження + + First limit + Перше обмеження - Type: - Тип: + + + Type: + Тип: - mm - мм + + + mm + мм - Length: - Довжина: + + + Length: + Довжина: - Dimension - Розмір + + + Dimension + Розмір - Up to next - До наступного + + + Up to next + До наступного - Up to last - До останнього + + + Up to last + До останнього - Up to plane - До площини + + + Up to plane + До площини - Up to face - До лиця + + + Up to face + До лиця - Limit: - Обмеження: + + + Limit: + Обмеження: - No selection - Нічого не вибрано + + + + + No selection + Нічого не вибрано - Profile - Профіль + + Profile + Профіль - Selection: - Вибір: + + Selection: + Вибір: - Reverse - Навпаки + + Reverse + Навпаки - Both sides - Обидві сторони + + Both sides + Обидві сторони - Second limit - Друге обмеження + + Second limit + Друге обмеження - Direction - Напрямок + + Direction + Напрямок - Perpendicular to sketch - Перпендикулярно до ескізу + + Perpendicular to sketch + Перпендикулярно до ескізу - Reference - Посилання + + Reference + Посилання - Apply - Застосувати + + Apply + Застосувати - Cancel - Скасувати + + Cancel + Скасувати - OK - Гаразд + + OK + Гаразд - - + + CmdPartBoolean - - Part - Частина + + Part + Частина - Boolean... - Логічне... + + Boolean... + Логічне... - Run a boolean operation with two shapes selected - Виконати логічну операцію з двома обраними формами + + Run a boolean operation with two shapes selected + Виконати логічну операцію з двома обраними формами - - + + CmdPartBox - - Part - Частина + + Part + Частина - Box - Коробка + + Box + Коробка - Create a box solid - Create a box solid + + Create a box solid + Create a box solid - - + + CmdPartBox2 - - Part - Частина + + Part + Частина - Box fix 1 - Box fix 1 + + Box fix 1 + Box fix 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - Частина + + Part + Частина - Box fix 2 - Box fix 2 + + Box fix 2 + Box fix 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - Частина + + Part + Частина - Shape builder... - Shape builder... + + Shape builder... + Shape builder... - Advanced utility to create shapes - Advanced utility to create shapes + + Advanced utility to create shapes + Advanced utility to create shapes - - + + + CmdPartChamfer + + + Part + Частина + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - Частина + + Part + Частина - Intersection - Перетин + + Intersection + Перетин - Make an intersection of two shapes - Make an intersection of two shapes + + Make an intersection of two shapes + Make an intersection of two shapes - - + + CmdPartCone - - Part - Частина + + Part + Частина - Cone - Конус + + Cone + Конус - Create a cone solid - Create a cone solid + + Create a cone solid + Create a cone solid - - + + CmdPartCrossSections - - Part - Частина + + Part + Частина - Cross-sections... - Поперечні перерізи... + + Cross-sections... + Поперечні перерізи... - Cross-sections - Поперечні перерізи + + Cross-sections + Поперечні перерізи - - + + CmdPartCut - Part - Частина + + Part + Частина - Cut - Вирізати + + Cut + Вирізати - Make a cut of two shapes - Make a cut of two shapes + + Make a cut of two shapes + Make a cut of two shapes - - + + CmdPartCylinder - - Part - Частина + + Part + Частина - Create a Cylinder - Створення циліндру + + Create a Cylinder + Створення циліндру - Cylinder - Циліндр + + Cylinder + Циліндр - - + + CmdPartExport - - Part - Частина + + Part + Частина - Export CAD... - Export CAD... + + Export CAD... + Export CAD... - Exports to a CAD file - Exports to a CAD file + + Exports to a CAD file + Exports to a CAD file - - + + CmdPartExtrude - Part - Частина + + Part + Частина - Extrude... - Видавлювання... + + Extrude... + Видавлювання... - Extrude a selected sketch - Видавлювання вибраного ескізу + + Extrude a selected sketch + Видавлювання вибраного ескізу - - + + CmdPartFillet - Part - Частина + + Part + Частина - Fillet... - Округлення... + + Fillet... + Округлення... - Fillet the selected edges of a shape - Округлення вибраного краю форми + + Fillet the selected edges of a shape + Округлення вибраного краю форми - - + + CmdPartFuse - Part - Частина + + Part + Частина - Union - Об'єднання + + Union + Об'єднання - Make a union of several shapes - Make a union of several shapes + + Make a union of several shapes + Make a union of several shapes - - + + CmdPartImport - Part - Частина + + Part + Частина - Imports a CAD file - Імпорт файлу CAD + + Imports a CAD file + Імпорт файлу CAD - Import CAD... - Імпорт CAD ... + + Import CAD... + Імпорт CAD ... - - + + CmdPartImportCurveNet - Part - Частина + + Part + Частина - Import a curve network - Import a curve network + + Import a curve network + Import a curve network - Import curve network... - Import curve network... + + Import curve network... + Import curve network... - - + + CmdPartLoft - Part - Частина + + Part + Частина - Loft... - Loft... + + Loft... + Loft... - Advanced utility to lofts - Advanced utility to lofts + + Utility to loft + - - + + Advanced utility to lofts + Advanced utility to lofts + + + CmdPartMakeSolid - Part - Частина + + Part + Частина - Convert to solid - Перетворити в суцільну + + Convert to solid + Перетворити в суцільну - Create solid from a shell or compound - Створити суцільну форму із оболонки чи складових + + Create solid from a shell or compound + Створити суцільну форму із оболонки чи складових - - + + CmdPartMirror - Part - Частина + + Part + Частина - Mirroring... - Віддзеркалення... + + Mirroring... + Віддзеркалення... - Mirroring a selected shape - Віддзеркалення обраної форми + + Mirroring a selected shape + Віддзеркалення обраної форми - - + + CmdPartPickCurveNet - Part - Частина + + Part + Частина - Pick curve network - Pick curve network + + Pick curve network + Pick curve network - Pick a curve network - Pick a curve network + + Pick a curve network + Pick a curve network - - + + CmdPartPrimitives - Part - Частина + + Part + Частина - Create primitives... - Створення примітивів ... + + Create primitives... + Створення примітивів ... - Creation of parametrized geometric primitives - Створення параметризованих геометричних примітивів + + Creation of parametrized geometric primitives + Створення параметризованих геометричних примітивів - - + + + CmdPartRefineShape + + + Part + Частина + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - Частина + + Part + Частина - Reverse shapes - Обернути форми + + Reverse shapes + Обернути форми - Reverse orientation of shapes - Зворотня орієнтація форм + + Reverse orientation of shapes + Зворотня орієнтація форм - - + + CmdPartRevolve - Part - Частина + + Part + Частина - Revolve... - Обертати... + + Revolve... + Обертати... - Revolve a selected shape - Обертати обрану форму + + Revolve a selected shape + Обертати обрану форму - - + + CmdPartRuledSurface - Part - Частина + + Part + Частина - Create ruled surface - Create ruled surface + + Create ruled surface + Create ruled surface - Create a ruled surface from two curves - Create a ruled surface from two curves + + Create a ruled surface from two curves + Create a ruled surface from two curves - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - Частина + + Part + Частина - Section - Секція + + Section + Секція - - + + CmdPartShapeFromMesh - - Part - Частина + + Part + Частина - Create shape from mesh... - Створити форму з сітки... + + Create shape from mesh... + Створити форму з сітки... - Create shape from selected mesh object - Створити форми з обраної сітки (мешу) + + Create shape from selected mesh object + Створити форми з обраної сітки (мешу) - - + + CmdPartSimpleCopy - Part - Частина + + Part + Частина - Create simple copy - Create simple copy + + Create simple copy + Create simple copy - Create a simple non-parametric copy - Create a simple non-parametric copy + + Create a simple non-parametric copy + Create a simple non-parametric copy - - + + CmdPartSimpleCylinder - Part - Частина + + Part + Частина - Create Cylinder... - Створити циліндр ... + + Create Cylinder... + Створити циліндр ... - Create a Cylinder - Створення циліндру + + Create a Cylinder + Створення циліндру - - + + CmdPartSphere - - Create a sphere solid - Create a sphere solid + + Create a sphere solid + Create a sphere solid - Part - Частина + + Part + Частина - Sphere - Сфера + + Sphere + Сфера - - + + + CmdPartSweep + + + Part + Частина + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - Create a torus solid + + Create a torus solid + Create a torus solid - Part - Частина + + Part + Частина - Torus - Тор + + Torus + Тор - - + + DlgExtrusion - Select a shape for extrusion, first. - Select a shape for extrusion, first. + Select a shape for extrusion, first. + Select a shape for extrusion, first. - The document '%1' doesn't exist. - The document '%1' doesn't exist. + The document '%1' doesn't exist. + The document '%1' doesn't exist. - - + + DlgRevolution - Select a shape for revolution, first. - Select a shape for revolution, first. + Select a shape for revolution, first. + Select a shape for revolution, first. - - + + DlgSettings3DViewPart - Deviation - Відхилення + Deviation + Відхилення - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::CrossSections - - Cross sections - Поперечні перерізи + + Cross sections + Поперечні перерізи - Guiding plane - Керівна площина + + Guiding plane + Керівна площина - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - Позиція: + + Position: + Позиція: - Sections - Секції + + Sections + Секції - On both sides - З обох сторін + + On both sides + З обох сторін - Count - Кількість + + Count + Кількість - Distance: - Відстань: + + Distance: + Відстань: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - Логічна операція + + Boolean Operation + Логічна операція - Second shape - Друга форма + + Second shape + Друга форма - First shape - Перша форма + + First shape + Перша форма - Boolean operation - Логічна операція + + Boolean operation + Логічна операція - Section - Секція + + Section + Секція - Difference - Різниця + + Difference + Різниця - Union - Об'єднання + + Union + Об'єднання - Intersection - Перетин + + Intersection + Перетин - - Cannot perform a boolean operation with the same shape - Неможливо виконати логічну операцію з тією ж формою + + Cannot perform a boolean operation with the same shape + Неможливо виконати логічну операцію з тією ж формою - - Solids - Суцільні + + + Solids + Суцільні - Shells - Оболонки + + + Shells + Оболонки - Compounds - Складові + + + Compounds + Складові - Faces - Faces + + + Faces + Faces - Swap selection - Swap selection + + Swap selection + Swap selection - - Select a shape on the left side, first - Select a shape on the left side, first + + Select a shape on the left side, first + Select a shape on the left side, first - Select a shape on the right side, first - Select a shape on the right side, first + + Select a shape on the right side, first + Select a shape on the right side, first - No active document available - No active document available + + No active document available + No active document available - One of the selected objects doesn't exist anymore - One of the selected objects doesn't exist anymore + + One of the selected objects doesn't exist anymore + One of the selected objects doesn't exist anymore - Performing union on non-solids is not possible - Performing union on non-solids is not possible + + Performing union on non-solids is not possible + Performing union on non-solids is not possible - Performing intersection on non-solids is not possible - Performing intersection on non-solids is not possible + + Performing intersection on non-solids is not possible + Performing intersection on non-solids is not possible - Performing difference on non-solids is not possible - Performing difference on non-solids is not possible + + Performing difference on non-solids is not possible + Performing difference on non-solids is not possible - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - Видавлювання + + Extrude + Видавлювання - Direction - Напрямок + + Direction + Напрямок - Along normal - Вздовж нормалі + + Along normal + Вздовж нормалі - Length: - Довжина: + + Length: + Довжина: - 3D view - 3D view + + 3D view + 3D view - Note:This option works for planes only - Note:This option works for planes only + + Note:This option works for planes only + Note:This option works for planes only - Shape - Форма + + Create solid + Create solid - - Про програму + + Taper outward angle + - X: - X: + + Shape + Форма - Z: - Z: + + Про програму - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - Select a shape for extrusion, first. + + Z: + Z: - The document '%1' doesn't exist. - The document '%1' doesn't exist. + + Y: + Y: - - + + + Select a shape for extrusion, first. + Select a shape for extrusion, first. + + + + The document '%1' doesn't exist. + The document '%1' doesn't exist. + + + PartGui::DlgFilletEdges - - Fillet Edges - Закруглити краї + + Fillet Edges + Закруглити краї - Fillet Parameter - Параметри закруглення + + Fillet Parameter + Параметри закруглення - Radius: - Радіус: + + Radius: + Радіус: - Fillet type: - Тип закруглення: + + Fillet type: + Тип закруглення: - Constant Radius - Постійний радіус + + Constant Radius + Постійний радіус - Variable Radius - Змінний радіус + + Variable Radius + Змінний радіус - Shape - Форма + + Shape + Форма - Selected shape: - Обрана форма: + + Selected shape: + Обрана форма: - No selection - Нічого не вибрано + + No selection + Нічого не вибрано - - Edges to fillet - Краї для закруглення + + Edges to fillet + Краї для закруглення - Start radius - Початковий радіус + + + Start radius + Початковий радіус - End radius - Кінцевий радіус + + End radius + Кінцевий радіус - Radius - Радіус + + Radius + Радіус - No edge selected - Край не обрано + + No edge selected + Край не обрано - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - Не обрано край для згладжування + Не обрано край для згладжування Будь ласка, спочатку оберіть один, або більше країв. - - All - Все + + All + Все - None - Немає + + None + Немає - - Edge%1 - Край%1 + + + Edge%1 + Край%1 - No shape selected - Немає обраної форми + + No shape selected + Немає обраної форми - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - Не обрано вірної форми + Не обрано вірної форми Будь ласка, оберіть вірну форму у виринаючому списку. - - + + PartGui::DlgPartBox - - Box definition - Box definition + + Box definition + Box definition - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - Скасувати + + Cancel + Скасувати - OK - Гаразд + + OK + Гаразд - Size: - Розмір: + + Size: + Розмір: - Height: - Висота: + + Height: + Висота: - Width: - Ширина: + + Width: + Ширина: - Length: - Довжина: + + Length: + Довжина: - Position: - Позиція: + + Position: + Позиція: - Direction: - Напрям: + + Direction: + Напрям: - - + + PartGui::DlgPartCylinder - - Cylinder definition - Визначення циліндра + + Cylinder definition + Визначення циліндра - Parameter - Параметр + + Parameter + Параметр - Height: - Висота: + + Height: + Висота: - Radius: - Радіус: + + Radius: + Радіус: - Position: - Позиція: + + Position: + Позиція: - Direction: - Напрям: + + Direction: + Напрям: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - Гаразд + + OK + Гаразд - Cancel - Скасувати + + Cancel + Скасувати - - + + PartGui::DlgPartImportIges - - IGES input file - Вхідний файл IGES + + IGES input file + Вхідний файл IGES - ... - ... + + ... + ... - Cancel - Скасувати + + Cancel + Скасувати - OK - Гаразд + + OK + Гаразд - File Name - Ім'я файлу + + File Name + Ім'я файлу - - Про програму + + Про програму - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;Всі файли (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;Всі файли (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - Скасувати + + Cancel + Скасувати - OK - Гаразд + + OK + Гаразд - Step input file - Крок вхідного файлу + + Step input file + Крок вхідного файлу - File Name - Ім'я файлу + + File Name + Ім'я файлу - - Про програму + + Про програму - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;Всі файли (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;Всі файли (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - Геометричні примітиви + + Geometric Primitives + Геометричні примітиви - Primitive - Примітив + Primitive + Примітив - X min - X min + X min + X min - x max - x max + x max + x max - Y min - Y min + Y min + Y min - Y max - Y max + Y max + Y max - Z min - Z min + Z min + Z min - Z max - Z max + Z max + Z max - X2 min - X2 min + X2 min + X2 min - X2 max - X2 max + X2 max + X2 max - Z2 min - Z2 min + Z2 min + Z2 min - Z2 max - Z2 max + Z2 max + Z2 max - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - Angle0 + Angle0 + Angle0 - Angle1 - Angle1 + Angle1 + Angle1 - X Axis Value: - X Axis Value: + X Axis Value: + X Axis Value: - Y Axis Value: - Y Axis Value: + Y Axis Value: + Y Axis Value: - Z Axis Value: - Z Axis Value: + Z Axis Value: + Z Axis Value: - Wedge - Wedge + + Wedge + Wedge - Circle - Коло + + Circle + Коло - Vertex - Vertex + Vertex + Vertex - Position - Позиція + Position + Позиція - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - Напрям: + Direction: + Напрям: - Y: - Y: + + + + Y: + Y: - Plane - Площини + + Plane + Площини - Box - Коробка + + Box + Коробка - Cylinder - Циліндр + + Cylinder + Циліндр - Cone - Конус + + Cone + Конус - Sphere - Сфера + + Sphere + Сфера - Ellipsoid - Еліпсоїд + + Ellipsoid + Еліпсоїд - Torus - Тор + + Torus + Тор - Parameter - Параметр + + Ellipse + - Width: - Ширина: + + Point + - Length: - Довжина: + + Line + - Height: - Висота: + + Parameter + Параметр - Angle: - Кут: + + + Width: + Ширина: - Radius: - Радіус: + + + Length: + Довжина: - Radius 1: - Радіус 1: + + + + + Height: + Висота: - Radius 2: - Радіус 2: + + + + Angle: + Кут: - U parametric: - U параметричне: + + + + + Radius: + Радіус: - V parametric: - V параметричне: + + + + Radius 1: + Радіус 1: - &Create - Створити + + + + Radius 2: + Радіус 2: - Alt+C - Alt+C + + + + U parametric: + U параметричне: - Cl&ose - Закрити + + + + V parametric: + V параметричне: - Alt+O - Alt+O + + X min/max: + - - Create %1 - Створити %1 + + Y min/max: + - No active document - Немає активного документу + + Z min/max: + - - Pitch: - Крок: + + X2 min/max: + - Helix - Спіраль + + Z2 min/max: + - 3D View - 3D Вигляд + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + Створити + + + Alt+C + Alt+C + + + Cl&ose + Закрити + + + Alt+O + Alt+O + + + + + + Create %1 + Створити %1 + + + + No active document + Немає активного документу + + + + Pitch: + Крок: + + + + Helix + Спіраль + + + 3D View + 3D Вигляд + + + PartGui::DlgRevolution - - Revolve - Обертатися + + Revolve + Обертатися - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - Кут: + + Angle: + Кут: - Z: - Z: + + Z: + Z: - Axis: - Осі: + + Axis: + Осі: - Shape - Форма + + Shape + Форма - - Select a shape for revolution, first. - Select a shape for revolution, first. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + Select a shape for revolution, first. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - Переглянути точність/характеристики + + View accuracy / Performance + Переглянути точність/характеристики - View smoothing - View smoothing + + View smoothing + View smoothing - Using high-quality normals - Використання високоякісних нормалей + + Using high-quality normals + Використання високоякісних нормалей - This will slow down render speed but will lead to nicer results - Це буде сповільняти швидкість візуалізації, але приведе до кращих результатів + + This will slow down render speed but will lead to nicer results + Це буде сповільняти швидкість візуалізації, але приведе до кращих результатів - Defines the appearance of surfaces - Визначає зовнішній вигляд поверхонь + + Defines the appearance of surfaces + Визначає зовнішній вигляд поверхонь - Shape view - Перегляд форми + + Shape view + Перегляд форми - Tessellation - Мозаїка + + Tessellation + Мозаїка - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - Do not define normal per vertex - Не визначайте нормалей для кожної вершини + + Do not define normal per vertex + Не визначайте нормалей для кожної вершини - Defines the deviation of tessellation to the actual surface - Визначає відхилення тесселяції до активної поверхні + + Defines the deviation of tessellation to the actual surface + Визначає відхилення тесселяції до активної поверхні - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - Maximum deviation depending on the model bounding box - Maximum deviation depending on the model bounding box + + Maximum deviation depending on the model bounding box + Maximum deviation depending on the model bounding box - % - % + + % + % - - Deviation - Відхилення + + Deviation + Відхилення - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - - + + PartGui::DlgSettingsGeneral - - General - Загальне + + General + Загальне - Export - Експорт + + Export + Експорт - Millimeter - Міліметри + + Millimeter + Міліметри - Meter - Метри + + Meter + Метри - Inch - Дюйми + + Inch + Дюйми - Units for export of STEP/IGES - Одиниці для експорту STEP/IGES + + Units for export of STEP/IGES + Одиниці для експорту STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + Позиція + + + + 3D View + 3D Вигляд + + + PartGui::LoftWidget - - Too few elements - Too few elements + + + Vertex/Wire + Vertex/Wire - At least two vertices or wires are required. - At least two vertices or wires are required. + + + Loft + Loft - - + + + Too few elements + Too few elements + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + At least two vertices or wires are required. + + + PartGui::Mirroring - - Mirroring - Віддзеркалення + + Mirroring + Віддзеркалення - Shapes - Форми + + Shapes + Форми - Mirror plane: - Дзеркальна площина: + + Mirror plane: + Дзеркальна площина: - XY plane - Площина XY + + XY plane + Площина XY - XZ plane - Площина XZ + + XZ plane + Площина XZ - YZ plane - Площина YZ + + YZ plane + Площина YZ - Base point: - Base point: + + Base point: + Base point: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - Спочатку виберіть форму для дзеркального відображення. + + Select a shape for mirroring, first. + Спочатку виберіть форму для дзеркального відображення. - No such document '%1'. - Документ '%1' не знайдено. + + No such document '%1'. + Документ '%1' не знайдено. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - Невірний вибір + + + + + + Wrong selection + Невірний вибір - Select two vertices - Select two vertices + + + Select two vertices + Select two vertices - Select three or more edges - Select three or more edges + Select three or more edges + Select three or more edges - Select two or more faces - Select two or more faces + + Select one or more edges + - Select only one part object - Select only one part object + + Select two or more faces + Select two or more faces - Select two vertices to create an edge - Select two vertices to create an edge + + Select only one part object + Select only one part object - Select a closed set of edges - Select a closed set of edges + + Select two vertices to create an edge + Select two vertices to create an edge - Select adjacent faces - Select adjacent faces + + Select a closed set of edges + Select a closed set of edges - All shape types can be selected - All shape types can be selected + + Select adjacent faces + Select adjacent faces - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + Vertex/Wire + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + Too few elements + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - Значення + Value + Значення - Special - Special + Special + Special - Command - Команда + Command + Команда - Stretch - Stretch + Stretch + Stretch - Move - Переміщення + Move + Переміщення - Rotate - Обертання + Rotate + Обертання - Offset - Зміщення + Offset + Зміщення - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - Set color per face + + Set color per face + Set color per face - Click on the faces in the 3d view to select them. - Click on the faces in the 3d view to select them. + + Click on the faces in the 3d view to select them. + Click on the faces in the 3d view to select them. - Faces: - Faces: + + Faces: + Faces: - Set to default - Set to default + + Set to default + Set to default - - + + PartGui::TaskLoft - - Loft - Loft + + Loft + Loft - Vertex/Wire - Vertex/Wire + Vertex/Wire + Vertex/Wire - Move right - Перемістити праворуч + Move right + Перемістити праворуч - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>Переміщення обраного елемента на один рівень вниз.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>Переміщення обраного елемента на один рівень вниз.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> - Move left - Перемістити ліворуч + Move left + Перемістити ліворуч - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>Переміщення обраного елемента на один рівень вгору.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>Переміщення обраного елемента на один рівень вгору.</b><p>Це також призведе до зміни рівня батьківського елемента.</p> - Move up - Перемістити вгору + Move up + Перемістити вгору - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>Перемістити обраний елемент вгору.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>Перемістити обраний елемент вгору.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> - Move down - Перемістити вниз + Move down + Перемістити вниз - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>Перемістити обраний елемент вниз.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>Перемістити обраний елемент вниз.</b><p>Елемент буде переміщено в межах ієрархії рівня.</p> - Create solid - Create solid + + Create solid + Create solid - Ruled surface - Ruled surface + + Ruled surface + Ruled surface - - + + PartGui::TaskShapeBuilder - - Create shape - Create shape + + + Create shape + Create shape - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - Planar + + Planar + Planar - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - Створити + + Create + Створити - All faces - All faces + + All faces + All faces - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + Create solid + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - Невірний вибір + + + + + + Wrong selection + Невірний вибір - Select two shapes please. - Виберіть дві форми, будь ласка. + + + Select two shapes please. + Виберіть дві форми, будь ласка. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - Усі файли CAD (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + Усі файли CAD (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - Всі файли (*.*) + + + + All Files (*.*) + Всі файли (*.*) - - Sewing Tolerance - Sewing Tolerance + + Sewing Tolerance + Sewing Tolerance - Enter tolerance for sewing shape: - Enter tolerance for sewing shape: + + Enter tolerance for sewing shape: + Enter tolerance for sewing shape: - - Edit mirror plane - Редагувати площину відзеркалення + + Edit mirror plane + Редагувати площину відзеркалення - Transform - Перетворення + + Edit chamfer edges + - - Part design - Дизайн частини + Transform + Перетворення - - Select two shapes or more, please. - Select two shapes or more, please. + + + Part design + Дизайн частини - You have to select either two edges or two wires. - You have to select either two edges or two wires. + + + Select two shapes or more, please. + Select two shapes or more, please. - - Edit fillet edges - Редагувати кромку граней + + You have to select either two edges or two wires. + You have to select either two edges or two wires. - - Set colors... - Set colors... + + Edit fillet edges + Редагувати кромку граней - - + + + Set colors... + Set colors... + + + Workbench - - &Part - Частина + + &Part + Частина - &Simple - &Просте + + &Simple + &Просте - &Parametric - &Параметричне + + &Parametric + &Параметричне - Part tools - Інструменти деталі + + Part tools + Інструменти деталі - Solids - Суцільні + + Solids + Суцільні - Boolean - Логічне + + Boolean + Логічне - + diff --git a/src/Mod/Part/Gui/Resources/translations/Part_zh.ts b/src/Mod/Part/Gui/Resources/translations/Part_zh.ts index 57cd7a6d4..a93c94b7e 100644 --- a/src/Mod/Part/Gui/Resources/translations/Part_zh.ts +++ b/src/Mod/Part/Gui/Resources/translations/Part_zh.ts @@ -1,1873 +1,2521 @@ - - + + BlockDefinition - - Block definition - 块定义 + + Block definition + 块定义 - First limit - 第一个限制 + + First limit + 第一个限制 - Type: - 类型: + + + Type: + 类型: - mm - mm + + + mm + mm - Length: - 长度: + + + Length: + 长度: - Dimension - 尺寸标注 + + + Dimension + 尺寸标注 - Up to next - 直到下一个 + + + Up to next + 直到下一个 - Up to last - 直到最后 + + + Up to last + 直到最后 - Up to plane - 直到平面 + + + Up to plane + 直到平面 - Up to face - 直到表面 + + + Up to face + 直到表面 - Limit: - 限制: + + + Limit: + 限制: - No selection - 未选择 + + + + + No selection + 未选择 - Profile - 配置文件 + + Profile + 配置文件 - Selection: - 选择: + + Selection: + 选择: - Reverse - 反转 + + Reverse + 反转 - Both sides - 双向 + + Both sides + 双向 - Second limit - 第二个限制 + + Second limit + 第二个限制 - Direction - 方向 + + Direction + 方向 - Perpendicular to sketch - 垂直于草图 + + Perpendicular to sketch + 垂直于草图 - Reference - 参考 + + Reference + 参考 - Apply - 应用 + + Apply + 应用 - Cancel - 取消 + + Cancel + 取消 - OK - 确定 + + OK + 确定 - - + + CmdPartBoolean - - Part - 零件 + + Part + 零件 - Boolean... - 布尔运算... + + Boolean... + 布尔运算... - Run a boolean operation with two shapes selected - 对所选的两个形状进行布尔运算 + + Run a boolean operation with two shapes selected + 对所选的两个形状进行布尔运算 - - + + CmdPartBox - - Part - 零件 + + Part + 零件 - Box - 立方体 + + Box + 立方体 - Create a box solid - 创建长方体 + + Create a box solid + 创建长方体 - - + + CmdPartBox2 - - Part - 零件 + + Part + 零件 - Box fix 1 - 立方体固定 1 + + Box fix 1 + 立方体固定 1 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBox3 - Part - 零件 + + Part + 零件 - Box fix 2 - 立方体固定 2 + + Box fix 2 + 立方体固定 2 - Create a box solid without dialog - Create a box solid without dialog + + Create a box solid without dialog + Create a box solid without dialog - - + + CmdPartBuilder - Part - 零件 + + Part + 零件 - Shape builder... - 形体构建器... + + Shape builder... + 形体构建器... - Advanced utility to create shapes - 创建形体高级工具 + + Advanced utility to create shapes + 创建形体高级工具 - - + + + CmdPartChamfer + + + Part + 零件 + + + + Chamfer... + + + + + Chamfer the selected edges of a shape + + + + CmdPartCommon - Part - 零件 + + Part + 零件 - Intersection - 交集 + + Intersection + 交集 - Make an intersection of two shapes - 两形体求交集 + + Make an intersection of two shapes + 两形体求交集 - - + + CmdPartCone - - Part - 零件 + + Part + 零件 - Cone - 圆锥体 + + Cone + 圆锥体 - Create a cone solid - 创建圆锥体 + + Create a cone solid + 创建圆锥体 - - + + CmdPartCrossSections - - Part - 零件 + + Part + 零件 - Cross-sections... - 横截面... + + Cross-sections... + 横截面... - Cross-sections - 横截面 + + Cross-sections + 横截面 - - + + CmdPartCut - Part - 零件 + + Part + 零件 - Cut - 剪切 + + Cut + 剪切 - Make a cut of two shapes - 两形体求差集 + + Make a cut of two shapes + 两形体求差集 - - + + CmdPartCylinder - - Part - 零件 + + Part + 零件 - Create a Cylinder - 创建一个圆柱体 + + Create a Cylinder + 创建一个圆柱体 - Cylinder - 圆柱体 + + Cylinder + 圆柱体 - - + + CmdPartExport - - Part - 零件 + + Part + 零件 - Export CAD... - 导出CAD... + + Export CAD... + 导出CAD... - Exports to a CAD file - 导出至CAD文件 + + Exports to a CAD file + 导出至CAD文件 - - + + CmdPartExtrude - Part - 零件 + + Part + 零件 - Extrude... - 拉伸... + + Extrude... + 拉伸... - Extrude a selected sketch - 挤压选定的草绘 + + Extrude a selected sketch + 挤压选定的草绘 - - + + CmdPartFillet - Part - 零件 + + Part + 零件 - Fillet... - 圆角... + + Fillet... + 圆角... - Fillet the selected edges of a shape - 给选定形体的边倒圆角 + + Fillet the selected edges of a shape + 给选定形体的边倒圆角 - - + + CmdPartFuse - Part - 零件 + + Part + 零件 - Union - 并集 + + Union + 并集 - Make a union of several shapes - 多形体求合集 + + Make a union of several shapes + 多形体求合集 - - + + CmdPartImport - Part - 零件 + + Part + 零件 - Imports a CAD file - 导入CAD文件 + + Imports a CAD file + 导入CAD文件 - Import CAD... - 导入CAD文件 ... + + Import CAD... + 导入CAD文件 ... - - + + CmdPartImportCurveNet - Part - 零件 + + Part + 零件 - Import a curve network - 导入曲线网络 + + Import a curve network + 导入曲线网络 - Import curve network... - 导入曲线网络... + + Import curve network... + 导入曲线网络... - - + + CmdPartLoft - Part - 零件 + + Part + 零件 - Loft... - 放样... + + Loft... + 放样... - Advanced utility to lofts - 放样高级工具 + + Utility to loft + - - + + Advanced utility to lofts + 放样高级工具 + + + CmdPartMakeSolid - Part - 零件 + + Part + 零件 - Convert to solid - 转化成实体 + + Convert to solid + 转化成实体 - Create solid from a shell or compound - 从命令行或程序集创建实体 + + Create solid from a shell or compound + 从命令行或程序集创建实体 - - + + CmdPartMirror - Part - 零件 + + Part + 零件 - Mirroring... - 镜像... + + Mirroring... + 镜像... - Mirroring a selected shape - 镜像选定的形状 + + Mirroring a selected shape + 镜像选定的形状 - - + + CmdPartPickCurveNet - Part - 零件 + + Part + 零件 - Pick curve network - 选择曲线网络 + + Pick curve network + 选择曲线网络 - Pick a curve network - 选择曲线网络 + + Pick a curve network + 选择曲线网络 - - + + CmdPartPrimitives - Part - 零件 + + Part + 零件 - Create primitives... - 创建图元... + + Create primitives... + 创建图元... - Creation of parametrized geometric primitives - 创建参数化的几何图元 + + Creation of parametrized geometric primitives + 创建参数化的几何图元 - - + + + CmdPartRefineShape + + + Part + 零件 + + + + Refine shape + + + + + Refine the copy of a shape + + + + CmdPartReverseShape - Part - 零件 + + Part + 零件 - Reverse shapes - 形状翻转 + + Reverse shapes + 形状翻转 - Reverse orientation of shapes - 翻转形状 + + Reverse orientation of shapes + 翻转形状 - - + + CmdPartRevolve - Part - 零件 + + Part + 零件 - Revolve... - 旋转... + + Revolve... + 旋转... - Revolve a selected shape - 旋转所选的形状 + + Revolve a selected shape + 旋转所选的形状 - - + + CmdPartRuledSurface - Part - 零件 + + Part + 零件 - Create ruled surface - 创建直纹曲面 + + Create ruled surface + 创建直纹曲面 - Create a ruled surface from two curves - 由两条曲线创建直纹曲面 + + Create a ruled surface from two curves + 由两条曲线创建直纹曲面 - - + + CmdPartSection - Make a section of two shapes - Make a section of two shapes + + Make a section of two shapes + Make a section of two shapes - Part - 零件 + + Part + 零件 - Section - 截面 + + Section + 截面 - - + + CmdPartShapeFromMesh - - Part - 零件 + + Part + 零件 - Create shape from mesh... - 从网格中创建形状... + + Create shape from mesh... + 从网格中创建形状... - Create shape from selected mesh object - 从选定的网格对象创建形状 + + Create shape from selected mesh object + 从选定的网格对象创建形状 - - + + CmdPartSimpleCopy - Part - 零件 + + Part + 零件 - Create simple copy - 创建简单副本 + + Create simple copy + 创建简单副本 - Create a simple non-parametric copy - 创建简单的非参数化副本 + + Create a simple non-parametric copy + 创建简单的非参数化副本 - - + + CmdPartSimpleCylinder - Part - 零件 + + Part + 零件 - Create Cylinder... - 创建圆柱体... + + Create Cylinder... + 创建圆柱体... - Create a Cylinder - 创建一个圆柱体 + + Create a Cylinder + 创建一个圆柱体 - - + + CmdPartSphere - - Create a sphere solid - 创建球体 + + Create a sphere solid + 创建球体 - Part - 零件 + + Part + 零件 - Sphere - 球体 + + Sphere + 球体 - - + + + CmdPartSweep + + + Part + 零件 + + + + Sweep... + + + + + Utility to sweep + + + + CmdPartTorus - Create a torus solid - 创建圆环体 + + Create a torus solid + 创建圆环体 - Part - 零件 + + Part + 零件 - Torus - 圆环面 + + Torus + 圆环面 - - + + DlgExtrusion - Select a shape for extrusion, first. - 请先选择一个形状执行挤压操作. + Select a shape for extrusion, first. + 请先选择一个形状执行挤压操作. - The document '%1' doesn't exist. - 文件 '%1' 不存在. + The document '%1' doesn't exist. + 文件 '%1' 不存在. - - + + DlgRevolution - Select a shape for revolution, first. - 先选择一个形状来修改. + Select a shape for revolution, first. + 先选择一个形状来修改. - - + + DlgSettings3DViewPart - Deviation - 偏差 + Deviation + 偏差 - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - 设置得太小会导致贴图耗时过长,切会使GUI界面冻结或速度减慢. + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + 设置得太小会导致贴图耗时过长,切会使GUI界面冻结或速度减慢. - - + + PartGui::CrossSections - - Cross sections - 横截面 + + Cross sections + 横截面 - Guiding plane - 导引面 + + Guiding plane + 导引面 - XY - XY + + XY + XY - XZ - XZ + + XZ + XZ - YZ - YZ + + YZ + YZ - Position: - 位置: + + Position: + 位置: - Sections - 截面 + + Sections + 截面 - On both sides - 双边 + + On both sides + 双边 - Count - 计数 + + Count + 计数 - Distance: - 距离: + + Distance: + 距离: - - + + PartGui::DlgBooleanOperation - - Boolean Operation - 布尔运算 + + Boolean Operation + 布尔运算 - Second shape - 第二个形状 + + Second shape + 第二个形状 - First shape - 第一个形状 + + First shape + 第一个形状 - Boolean operation - 布尔运算 + + Boolean operation + 布尔运算 - Section - 截面 + + Section + 截面 - Difference - 差集 + + Difference + 差集 - Union - 并集 + + Union + 并集 - Intersection - 交集 + + Intersection + 交集 - - Cannot perform a boolean operation with the same shape - 不能对同一形状作布尔操作 + + Cannot perform a boolean operation with the same shape + 不能对同一形状作布尔操作 - - Solids - 实体 + + + Solids + 实体 - Shells - + + + Shells + - Compounds - 组合体 + + + Compounds + 组合体 - Faces - + + + Faces + - Swap selection - 切换选择 + + Swap selection + 切换选择 - - Select a shape on the left side, first - 线选择左侧形状 + + Select a shape on the left side, first + 线选择左侧形状 - Select a shape on the right side, first - 先选择右侧形状 + + Select a shape on the right side, first + 先选择右侧形状 - No active document available - 无可用活动文档 + + No active document available + 无可用活动文档 - One of the selected objects doesn't exist anymore - 所选对象之一已不存在 + + One of the selected objects doesn't exist anymore + 所选对象之一已不存在 - Performing union on non-solids is not possible - 无法对非实体执行并集操作 + + Performing union on non-solids is not possible + 无法对非实体执行并集操作 - Performing intersection on non-solids is not possible - 无法对非实体进行交集操作 + + Performing intersection on non-solids is not possible + 无法对非实体进行交集操作 - Performing difference on non-solids is not possible - 无法对非实体进行差集操作 + + Performing difference on non-solids is not possible + 无法对非实体进行差集操作 - - + + + PartGui::DlgChamferEdges + + + Chamfer Edges + + + + PartGui::DlgExtrusion - - Extrude - 拉伸 + + Extrude + 拉伸 - Direction - 方向 + + Direction + 方向 - Along normal - 沿法向 + + Along normal + 沿法向 - Length: - 长度: + + Length: + 长度: - 3D view - 3D视图 + + 3D view + 3D视图 - Note:This option works for planes only - 注:此选项仅适用于平面 + + Note:This option works for planes only + 注:此选项仅适用于平面 - Shape - 形状 + + Create solid + 创建实体 - - + + Taper outward angle + - X: - X: + + Shape + 形状 - Z: - Z: + + - Y: - Y: + + X: + X: - - Select a shape for extrusion, first. - 请先选择一个形状执行挤压操作. + + Z: + Z: - The document '%1' doesn't exist. - 文件 '%1' 不存在. + + Y: + Y: - - + + + Select a shape for extrusion, first. + 请先选择一个形状执行挤压操作. + + + + The document '%1' doesn't exist. + 文件 '%1' 不存在. + + + PartGui::DlgFilletEdges - - Fillet Edges - 圆角边 + + Fillet Edges + 圆角边 - Fillet Parameter - 圆角参数 + + Fillet Parameter + 圆角参数 - Radius: - 半径: + + Radius: + 半径: - Fillet type: - 圆角类型: + + Fillet type: + 圆角类型: - Constant Radius - 常数半径 + + Constant Radius + 常数半径 - Variable Radius - 可变半径 + + Variable Radius + 可变半径 - Shape - 形状 + + Shape + 形状 - Selected shape: - 所选的形状: + + Selected shape: + 所选的形状: - No selection - 未选择 + + No selection + 未选择 - - Edges to fillet - 倒圆角边 + + Edges to fillet + 倒圆角边 - Start radius - 开始半径 + + + Start radius + 开始半径 - End radius - 结束半径 + + End radius + 结束半径 - Radius - 半径 + + Radius + 半径 - No edge selected - 未选定边 + + No edge selected + 未选定边 - No edge entity is checked to fillet. + + No edge entity is checked to fillet. Please check one or more edge entities first. - 为选择倒圆角的实体边. + 为选择倒圆角的实体边. 请先检查一个或多个实体边. - - All - 全部 + + All + 全部 - None - + + None + - - Edge%1 - 边 %1 + + + Edge%1 + 边 %1 - No shape selected - 无选定的形状 + + No shape selected + 无选定的形状 - No valid shape is selected. + + No valid shape is selected. Please select a valid shape in the drop-down box first. - 未选中有效形状.请先在下拉框中选择一个有效形状. + 未选中有效形状.请先在下拉框中选择一个有效形状. - - + + PartGui::DlgPartBox - - Box definition - 立方体定义 + + Box definition + 立方体定义 - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - Cancel - 取消 + + Cancel + 取消 - OK - 确定 + + OK + 确定 - Size: - 大小: + + Size: + 大小: - Height: - 高度: + + Height: + 高度: - Width: - 宽度: + + Width: + 宽度: - Length: - 长度: + + Length: + 长度: - Position: - 位置: + + Position: + 位置: - Direction: - 方向: + + Direction: + 方向: - - + + PartGui::DlgPartCylinder - - Cylinder definition - 定义圆柱体 + + Cylinder definition + 定义圆柱体 - Parameter - 参数 + + Parameter + 参数 - Height: - 高度: + + Height: + 高度: - Radius: - 半径: + + Radius: + 半径: - Position: - 位置: + + Position: + 位置: - Direction: - 方向: + + Direction: + 方向: - X: - X: + + X: + X: - Z: - Z: + + Z: + Z: - Y: - Y: + + Y: + Y: - OK - 确定 + + OK + 确定 - Cancel - 取消 + + Cancel + 取消 - - + + PartGui::DlgPartImportIges - - IGES input file - IGES 输入文件 + + IGES input file + IGES 输入文件 - ... - ... + + ... + ... - Cancel - 取消 + + Cancel + 取消 - OK - 确定 + + OK + 确定 - File Name - 文件名 + + File Name + 文件名 - - + + - - + + PartGui::DlgPartImportIgesImp - - IGES (*.igs *.iges);;All Files (*.*) - IGES (*.igs *.iges);;All Files (*.*) + + IGES (*.igs *.iges);;All Files (*.*) + IGES (*.igs *.iges);;All Files (*.*) - - + + PartGui::DlgPartImportStep - - ... - ... + + ... + ... - Cancel - 取消 + + Cancel + 取消 - OK - 确定 + + OK + 确定 - Step input file - 输入文件步骤 + + Step input file + 输入文件步骤 - File Name - 文件名 + + File Name + 文件名 - - + + - - + + PartGui::DlgPartImportStepImp - - STEP (*.stp *.step);;All Files (*.*) - STEP (*.stp *.step);;All Files (*.*) + + STEP (*.stp *.step);;All Files (*.*) + STEP (*.stp *.step);;All Files (*.*) - - + + PartGui::DlgPrimitives - - Geometric Primitives - 几何图元 + + Geometric Primitives + 几何图元 - Primitive - 图元 + Primitive + 图元 - X min - X 最小 + X min + X 最小 - x max - X 最大 + x max + X 最大 - Y min - Y 最小 + Y min + Y 最小 - Y max - Y 最大 + Y max + Y 最大 - Z min - Z 最小 + Z min + Z 最小 - Z max - Z 最大 + Z max + Z 最大 - X2 min - X2 最小 + X2 min + X2 最小 - X2 max - X2 最大 + X2 max + X2 最大 - Z2 min - Z2 最小 + Z2 min + Z2 最小 - Z2 max - Z2 最大 + Z2 max + Z2 最大 - Angle - 0 for cyl - Angle - 0 for cyl + Angle - 0 for cyl + Angle - 0 for cyl - Angle0 - 角度0 + Angle0 + 角度0 - Angle1 - 角度1 + Angle1 + 角度1 - X Axis Value: - X轴数值: + X Axis Value: + X轴数值: - Y Axis Value: - Y轴数值: + Y Axis Value: + Y轴数值: - Z Axis Value: - Z轴数值: + Z Axis Value: + Z轴数值: - Wedge - Wedge + + Wedge + Wedge - Circle - + + Circle + - Vertex - 顶点 + Vertex + 顶点 - Position - 位置 + Position + 位置 - Z: - Z: + + + + Z: + Z: - X: - X: + + + + X: + X: - Direction: - 方向: + Direction: + 方向: - Y: - Y: + + + + Y: + Y: - Plane - 平面 + + Plane + 平面 - Box - 立方体 + + Box + 立方体 - Cylinder - 圆柱体 + + Cylinder + 圆柱体 - Cone - 圆锥体 + + Cone + 圆锥体 - Sphere - 球体 + + Sphere + 球体 - Ellipsoid - 椭圆体 + + Ellipsoid + 椭圆体 - Torus - 圆环面 + + Torus + 圆环面 - Parameter - 参数 + + Ellipse + - Width: - 宽度: + + Point + - Length: - 长度: + + Line + - Height: - 高度: + + Parameter + 参数 - Angle: - 角度: + + + Width: + 宽度: - Radius: - 半径: + + + Length: + 长度: - Radius 1: - 半径 1: + + + + + Height: + 高度: - Radius 2: - 半径 2: + + + + Angle: + 角度: - U parametric: - U 参数: + + + + + Radius: + 半径: - V parametric: - V 参数: + + + + Radius 1: + 半径 1: - &Create - 创建(&C) + + + + Radius 2: + 半径 2: - Alt+C - Alt+C + + + + U parametric: + U 参数: - Cl&ose - 关闭(&O) + + + + V parametric: + V 参数: - Alt+O - Alt+O + + X min/max: + - - Create %1 - 创建 %1 + + Y min/max: + - No active document - 无活动文档 + + Z min/max: + - - Pitch: - 间距: + + X2 min/max: + - Helix - 螺旋体 + + Z2 min/max: + - 3D View - 3D 视图 + + Coordinate system: + - - + + + Right-handed + + + + + Left-handed + + + + + + Angle 1: + + + + + + Angle 2: + + + + + From three points + + + + + Major radius: + + + + + Minor radius: + + + + + End point + + + + + Start point + + + + + &Create + 创建(&C) + + + Alt+C + Alt+C + + + Cl&ose + 关闭(&O) + + + Alt+O + Alt+O + + + + + + Create %1 + 创建 %1 + + + + No active document + 无活动文档 + + + + Pitch: + 间距: + + + + Helix + 螺旋体 + + + 3D View + 3D 视图 + + + PartGui::DlgRevolution - - Revolve - 旋转 + + Revolve + 旋转 - Y: - Y: + + Y: + Y: - X: - X: + + X: + X: - Angle: - 角度: + + Angle: + 角度: - Z: - Z: + + Z: + Z: - Axis: - 轴: + + Axis: + 轴: - Shape - 形状 + + Shape + 形状 - - Select a shape for revolution, first. - 先选择一个形状来修改. + + Select line in 3D view + - - + + + Select a shape for revolution, first. + 先选择一个形状来修改. + + + PartGui::DlgSettings3DViewPart - - View accuracy / Performance - 查看精度/性能 + + View accuracy / Performance + 查看精度/性能 - View smoothing - 平滑视图 + + View smoothing + 平滑视图 - Using high-quality normals - 默认使用高质量 + + Using high-quality normals + 默认使用高质量 - This will slow down render speed but will lead to nicer results - 这会降低渲染速度,但效果会更好 + + This will slow down render speed but will lead to nicer results + 这会降低渲染速度,但效果会更好 - Defines the appearance of surfaces - 定义表面外观 + + Defines the appearance of surfaces + 定义表面外观 - Shape view - 查看形状 + + Shape view + 查看形状 - Tessellation - 镶嵌 + + Tessellation + 镶嵌 - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> - <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果此选项不设置则启用多面遮罩效果,如果设置启用单面遮罩效果.</p></body></html> + + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If this option is unset Phong shading is used, if it is set flat shading is used.</p></body></html> + <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;"><span style=" font-weight:600;">Flat shading/Phong shading</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With flat shading the surface normals are not defined per vertex that leads to a unreal appearance for curved surfaces while using Phong shading leads to a smoother appearance. </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果此选项不设置则启用多面遮罩效果,如果设置启用单面遮罩效果.</p></body></html> - Do not define normal per vertex - 不需要定义每一个常规顶点 + + Do not define normal per vertex + 不需要定义每一个常规顶点 - Defines the deviation of tessellation to the actual surface - 定义实际表面镶嵌的偏差 + + Defines the deviation of tessellation to the actual surface + 定义实际表面镶嵌的偏差 - <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> - <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;"> 镶嵌</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-weight:600;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style="font-weight:400;"> 定义的表面镶嵌网的最大偏差.值越小速度越慢,外观也越柔和</span></p></body></html> + + <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;"><span style=" font-weight:600;">Tessellation</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400;">Defines the maximum deviation of the tessellated mesh to the surface. The smaller the value is the slower the render speed and the nicer the appearance are.</span></p></body></html> + <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;"> 镶嵌</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-weight:600;"></p> <p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;-qt-block-indent:0; text-indent:0px; font-weight:600;"> <span style="font-weight:400;"> 定义的表面镶嵌网的最大偏差.值越小速度越慢,外观也越柔和</span></p></body></html> - <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> - <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;">暗示</span> </p><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-style:italic;">Phong光照</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">同时确定每个面的法线称为</span>平阴影<span style=" font-style:normal;">。</span> </p></body></html> + + <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;">Hint</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Defining the normals per vertex is also called <span style=" font-style:italic;">Phong shading</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"><span style=" font-style:normal;">while defining the normals per face is called </span>Flat shading<span style=" font-style:normal;">.</span></p></body></html> + <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;">暗示</span> </p><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-style:italic;">Phong光照</span> </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-style:italic;"> <span style=" font-style:normal;">同时确定每个面的法线称为</span>平阴影<span style=" font-style:normal;">。</span> </p></body></html> - <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> - <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;"> <span style=" font-weight:600;">高品质的法线</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">这将减缓渲染速度,但会导致更好的结果。 </p></body></html> + + <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;"><span style=" font-weight:600;">High-quality normals</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This will slow down render speed but will lead to nicer results.</p></body></html> + <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;"> <span style=" font-weight:600;">高品质的法线</span> </p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">这将减缓渲染速度,但会导致更好的结果。 </p></body></html> - Maximum deviation depending on the model bounding box - 最大偏差取决于模型边界 + + Maximum deviation depending on the model bounding box + 最大偏差取决于模型边界 - % - % + + % + % - - Deviation - 偏差 + + Deviation + 偏差 - Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. - 设置得太小会导致贴图耗时过长,切会使GUI界面冻结或速度减慢. + + Setting a too small deviation causes the tessellation to take longerand thus freezes or slows down the GUI. + 设置得太小会导致贴图耗时过长,切会使GUI界面冻结或速度减慢. - - + + PartGui::DlgSettingsGeneral - - General - 常规 + + General + 常规 - Export - 导出 + + Export + 导出 - Millimeter - 毫米 + + Millimeter + 毫米 - Meter - + + Meter + - Inch - 英寸 + + Inch + 英寸 - Units for export of STEP/IGES - 单元输出为 STEP/IGES + + Units for export of STEP/IGES + 单元输出为 STEP/IGES - - + + + Model settings + + + + + Automatically refine model after boolean operation + + + + + Automatically check model after boolean operation + + + + + PartGui::FaceColors + + + Face colors + + + + + Do you really want to cancel? + + + + + PartGui::Location + + + Location + + + + + Position + 位置 + + + + 3D View + 3D 视图 + + + PartGui::LoftWidget - - Too few elements - 元素太少 + + + Vertex/Wire + 顶点/线 - At least two vertices or wires are required. - 至少需要两个顶点或线. + + + Loft + 放样 - - + + + Too few elements + 元素太少 + + + + At least two vertices, edges or wires are required. + + + + At least two vertices or wires are required. + 至少需要两个顶点或线. + + + PartGui::Mirroring - - Mirroring - 镜像 + + Mirroring + 镜像 - Shapes - 形状 + + Shapes + 形状 - Mirror plane: - 镜像平面: + + Mirror plane: + 镜像平面: - XY plane - XY 平面 + + XY plane + XY 平面 - XZ plane - XZ 平面 + + XZ plane + XZ 平面 - YZ plane - YZ 平面 + + YZ plane + YZ 平面 - Base point: - 基准点: + + Base point: + 基准点: - x - x + + x + x - y - y + + y + y - z - z + + z + z - - Select a shape for mirroring, first. - 请先选择一个形状执行镜像操作. + + Select a shape for mirroring, first. + 请先选择一个形状执行镜像操作. - No such document '%1'. - 找不到文档'%1'. + + No such document '%1'. + 找不到文档'%1'. - - + + PartGui::ShapeBuilderWidget - - Wrong selection - 选择错误 + + + + + + Wrong selection + 选择错误 - Select two vertices - 选择两个顶点 + + + Select two vertices + 选择两个顶点 - Select three or more edges - 选择三条或更多边 + Select three or more edges + 选择三条或更多边 - Select two or more faces - 选择两个或更多面 + + Select one or more edges + - Select only one part object - 仅选择一个零件对象 + + Select two or more faces + 选择两个或更多面 - Select two vertices to create an edge - 选择两个顶点创建边 + + Select only one part object + 仅选择一个零件对象 - Select a closed set of edges - 选择一组闭合的边 + + Select two vertices to create an edge + 选择两个顶点创建边 - Select adjacent faces - 选择相邻面 + + Select a closed set of edges + 选择一组闭合的边 - All shape types can be selected - All shape types can be selected + + Select adjacent faces + 选择相邻面 - - + + + All shape types can be selected + All shape types can be selected + + + + PartGui::SweepWidget + + + + Vertex/Wire + 顶点/线 + + + + + Sweep + + + + + Sweep path + + + + + Select an edge or wire you want to sweep along. + + + + + Too few elements + 元素太少 + + + + At least one edge or wire is required. + + + + PartGui::TaskDialogEditDynamic - - Hint - Hint + Hint + Hint - Select Control. - Select Control. + Select Control. + Select Control. - Control - Control + Control + Control - Dynamic - Dynamic + Dynamic + Dynamic - Align - Align + Align + Align - Value - + Value + - Special - Special + Special + Special - Command - 命令 + Command + 命令 - Stretch - Stretch + Stretch + Stretch - Move - 移动 + Move + 移动 - Rotate - 旋转 + Rotate + 旋转 - Offset - 偏移 + Offset + 偏移 - Orient - Orient + Orient + Orient - Match - Match + Match + Match - Surround - Surround + Surround + Surround - dummy - dummy + dummy + dummy - X Axis - X Axis + X Axis + X Axis - Y Axis - Y Axis + Y Axis + Y Axis - Z Axis - Z Axis + Z Axis + Z Axis - Increment - Increment + Increment + Increment - .125 - .125 + .125 + .125 - .500 - .500 + .500 + .500 - 1.000 - 1.000 + 1.000 + 1.000 - 5.000 - 5.000 + 5.000 + 5.000 - 10.000 - 10.000 + 10.000 + 10.000 - Drag arrows to stretch box by increment - Drag arrows to stretch box by increment + Drag arrows to stretch box by increment + Drag arrows to stretch box by increment - Drag arrows to move box by increment - Drag arrows to move box by increment + Drag arrows to move box by increment + Drag arrows to move box by increment - Not implemented yet - Not implemented yet + Not implemented yet + Not implemented yet - Drag arrows to offset checked axes by increment - Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment + Drag arrows to offset checked axes by increment - Select dragger for stretch by align - Select dragger for stretch by align + Select dragger for stretch by align + Select dragger for stretch by align - Select dragger for move by align - Select dragger for move by align + Select dragger for move by align + Select dragger for move by align - Select dragger for stretch by value - Select dragger for stretch by value + Select dragger for stretch by value + Select dragger for stretch by value - Select dragger for move by value - Select dragger for move by value + Select dragger for move by value + Select dragger for move by value - 1.0 - 1.0 + 1.0 + 1.0 - Enter Value - Enter Value + Enter Value + Enter Value - Select box to match - Select box to match + Select box to match + Select box to match - Select a point - Select a point + Select a point + Select a point - 0.0 - 0.0 + 0.0 + 0.0 - Select dragger to align - Select dragger to align + Select dragger to align + Select dragger to align - Select dragger to modify - Select dragger to modify + Select dragger to modify + Select dragger to modify - - + + PartGui::TaskFaceColors - - Set color per face - 单独设置每个面的颜色 + + Set color per face + 单独设置每个面的颜色 - Click on the faces in the 3d view to select them. - 在3D视图中点击表面选择它们. + + Click on the faces in the 3d view to select them. + 在3D视图中点击表面选择它们. - Faces: - 面: + + Faces: + 面: - Set to default - 设置为默认 + + Set to default + 设置为默认 - - + + PartGui::TaskLoft - - Loft - 放样 + + Loft + 放样 - Vertex/Wire - 顶点/线 + Vertex/Wire + 顶点/线 - Move right - 右移 + Move right + 右移 - <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> - <b>移动选中对象到下一层级.</b><p>这将同时改变父级对象.</p> + <b>Move the selected item one level down.</b><p>This will also change the level of the parent item.</p> + <b>移动选中对象到下一层级.</b><p>这将同时改变父级对象.</p> - Move left - 左移 + Move left + 左移 - <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> - <b>移动选中对象到上一层级.</b><p>这将同时改变父级对象.</p> + <b>Move the selected item one level up.</b><p>This will also change the level of the parent item.</p> + <b>移动选中对象到上一层级.</b><p>这将同时改变父级对象.</p> - Move up - 上移 + Move up + 上移 - <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> - <b>上移选中对象.</b><p>仅在层级中移动.</p> + <b>Move the selected item up.</b><p>The item will be moved within the hierarchy level.</p> + <b>上移选中对象.</b><p>仅在层级中移动.</p> - Move down - 下移 + Move down + 下移 - <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> - <b>下移选中对象.</b><p>仅在层级中移动.</p> + <b>Move the selected item down.</b><p>The item will be moved within the hierarchy level.</p> + <b>下移选中对象.</b><p>仅在层级中移动.</p> - Create solid - 创建实体 + + Create solid + 创建实体 - Ruled surface - 直纹曲面 + + Ruled surface + 直纹曲面 - - + + PartGui::TaskShapeBuilder - - Create shape - 创建形体 + + + Create shape + 创建形体 - Edge from vertices - Edge from vertices + + Edge from vertices + Edge from vertices - Face from edges - Face from edges + + Face from edges + Face from edges - Planar - 平面 + + Planar + 平面 - Shell from faces - Shell from faces + + Shell from faces + Shell from faces - Solid from shell - Solid from shell + + Solid from shell + Solid from shell - Create - 创建 + + Create + 创建 - All faces - 所有面 + + All faces + 所有面 - - + + + PartGui::TaskSweep + + + Sweep + + + + + Create solid + 创建实体 + + + + Frenet + + + + + Select one or more profiles and select an edge or wire +in the 3D view for the sweep path. + + + + QObject - - Wrong selection - 选择错误 + + + + + + Wrong selection + 选择错误 - Select two shapes please. - 请选择两个形状. + + + Select two shapes please. + 请选择两个形状. - All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) - 所有 CAD 文件 (*.stp *.step *.igs *.iges *.brp *.brep) + + + + All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep) + 所有 CAD 文件 (*.stp *.step *.igs *.iges *.brp *.brep) - STEP (*.stp *.step) - STEP (*.stp *.step) + + + + STEP (*.stp *.step) + STEP (*.stp *.step) - IGES (*.igs *.iges) - IGES (*.igs *.iges) + + + + IGES (*.igs *.iges) + IGES (*.igs *.iges) - BREP (*.brp *.brep) - BREP (*.brp *.brep) + + + + BREP (*.brp *.brep) + BREP (*.brp *.brep) - All Files (*.*) - 所有文件(*.*) + + + + All Files (*.*) + 所有文件(*.*) - - Sewing Tolerance - 缝接公差 + + Sewing Tolerance + 缝接公差 - Enter tolerance for sewing shape: - 输入形状缝接的公差: + + Enter tolerance for sewing shape: + 输入形状缝接的公差: - - Edit mirror plane - 编辑镜像平面 + + Edit mirror plane + 编辑镜像平面 - Transform - 变形 + + Edit chamfer edges + - - Part design - 零件设计 + Transform + 变形 - - Select two shapes or more, please. - 请选择以上两个形状. + + + Part design + 零件设计 - You have to select either two edges or two wires. - 你必须选择二条边或者二个线框. + + + Select two shapes or more, please. + 请选择以上两个形状. - - Edit fillet edges - 编辑圆角边 + + You have to select either two edges or two wires. + 你必须选择二条边或者二个线框. - - Set colors... - 设置颜色... + + Edit fillet edges + 编辑圆角边 - - + + + Set colors... + 设置颜色... + + + Workbench - - &Part - 零件(&P) + + &Part + 零件(&P) - &Simple - 简单(&S) + + &Simple + 简单(&S) - &Parametric - 参数化(&P) + + &Parametric + 参数化(&P) - Part tools - 零件工具 + + Part tools + 零件工具 - Solids - 实体 + + Solids + 实体 - Boolean - 布尔值 + + Boolean + 布尔值 - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_af.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_af.ts index a739b6466..604e5f177 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_af.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_af.ts @@ -1,462 +1,769 @@ - - + + CmdPartDesignChamfer - - Part - Onderdeel + Part + Onderdeel - Chamfer... - Groef ... + Chamfer... + Groef ... - Chamfer the selected edges of a shape - Groef die gekose kante van 'n vorm + + PartDesign + OnderdeelOntwerp - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Groef die gekose kante van 'n vorm + + + CmdPartDesignFillet - PartDesign - OnderdeelOntwerp + + PartDesign + OnderdeelOntwerp - Fillet - Ronding + + Fillet + Ronding - Make a fillet on an edge, face or body - Skep 'n ronding op 'n rand, vlak of liggaam + + Make a fillet on an edge, face or body + Skep 'n ronding op 'n rand, vlak of liggaam - - + + + CmdPartDesignGroove + + + PartDesign + OnderdeelOntwerp + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - OnderdeelOntwerp + + PartDesign + OnderdeelOntwerp - Pad - Vul + + Pad + Vul - Pad a selected sketch - Vul 'n gekose skets + + Pad a selected sketch + Vul 'n gekose skets - - + + CmdPartDesignPocket - PartDesign - OnderdeelOntwerp + + PartDesign + OnderdeelOntwerp - Pocket - Holte + + Pocket + Holte - create a pocket with the selected sketch - maak 'n holte met die gekose skets + + create a pocket with the selected sketch + maak 'n holte met die gekose skets - - + + CmdPartDesignRevolution - PartDesign - OnderdeelOntwerp + + PartDesign + OnderdeelOntwerp - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Kante om te groef + Edges to chamfer + Kante om te groef - Start distance - Beginafstand + Start distance + Beginafstand - End distance - Eindpuntafstand + End distance + Eindpuntafstand - Edge%1 - Kant%1 + Edge%1 + Kant%1 - Distance - Afstand + Distance + Afstand - No shape selected - Geen vorm gekies nie + No shape selected + Geen vorm gekies nie - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Geen geldige vorm is gekies nie. -Kies eers 'n geldige vorm in die vallys. + Geen geldige vorm is gekies nie. +Kies eers 'n geldige vorm in die vallys. - No edge selected - Geen kant gekies nie + No edge selected + Geen kant gekies nie - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Geen kant is gekies om te groef nie + Geen kant is gekies om te groef nie Kies ten minste een kant. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Groef kante + Chamfer Edges + Groef kante - Shape - Vorm + Shape + Vorm - Selected shape: - Gekose vorm: + Selected shape: + Gekose vorm: - No selection - Geen keuse + No selection + Geen keuse - Chamfer Parameter - Groefparameter + Chamfer Parameter + Groefparameter - All - Almal + All + Almal - None - Geen + None + Geen - Chamfer type: - Groeftipe: + Chamfer type: + Groeftipe: - Constant Distance - Konstante afstand + Constant Distance + Konstante afstand - Variable Distance - Veranderlike Afstand + Variable Distance + Veranderlike Afstand - Distance: - Afstand: + Distance: + Afstand: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Vorm + + + + Size: + Grootte: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Vorm + + Form + Vorm - Radius: - Radius: + + Radius: + Radius: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Vorm + + + + Axis: + As: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Hoek: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Vorm + + Form + Vorm - Type: - Soort: + + Type: + Soort: - Dimension - Dimensioneer + + Dimension + Dimensioneer - Up to last - Op na die laaste + + Up to last + Op na die laaste - Up to first - Up to first + + Up to first + Up to first - Size: - Grootte: + + Size: + Grootte: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Vorm + + Form + Vorm - Type: - Soort: + + Type + - Dimension - Dimensioneer + + Length + Length - Length: - Lengte: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Vertoningsmodus: + Type: + Soort: - Plot mode: - Plotmodus: + + + Dimension + Dimensioneer - Point size: - Puntgrootte: + Length: + Lengte: - Line width: - Lynwydte: + Mirrored extent + Mirrored extent - Transparency: - Deursigtigheid: + + Reversed + Reversed - TaskPadParameters - TaakBlokParameters + Display mode: + Vertoningsmodus: - - Pad parameters - Pad parameters + Plot mode: + Plotmodus: - - + + Point size: + Puntgrootte: + + + Line width: + Lynwydte: + + + Transparency: + Deursigtigheid: + + + TaskPadParameters + TaakBlokParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Vorm + + Form + Vorm - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Vorm + + Form + Vorm - Type: - Soort: + Type: + Soort: - Dimension - Dimensioneer + + Type + - Length - Length + + + Dimension + Dimensioneer - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Vorm + + Form + Vorm - Axis: - As: + + Axis: + As: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Hoek: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Hoek: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Verkeerde keuse + + + + + + + + + + + + + + + + + + + Wrong selection + Verkeerde keuse - Select a sketch or 2D object. - Kies 'n skets of 2D-voorwerp. + + + + + Select a sketch or 2D object. + Kies 'n skets of 2D-voorwerp. - The shape of the selected object is empty. - Die vorm van die gekose item is leeg. + + + + + The shape of the selected object is empty. + Die vorm van die gekose item is leeg. - The shape of the selected object is not a wire. - Die vorm van die gekose item is nie 'n draad nie. + + + + + The shape of the selected object is not a wire. + Die vorm van die gekose item is nie 'n draad nie. - Select an edge, face or body. Only one body is allowed. - Kies 'n rand, vlak of liggaam. Slegs een liggaam word toegelaat. + + + Select an edge, face or body. Only one body is allowed. + Kies 'n rand, vlak of liggaam. Slegs een liggaam word toegelaat. - Wrong object type - Verkeerde voorwerpsoort + + + Wrong object type + Verkeerde voorwerpsoort - Fillet works only on parts - Ronding werk slegs op onderdele + + Fillet works only on parts + Ronding werk slegs op onderdele - No Support - Geen stut + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Geen stut + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Die skets moet 'n stut hê vir die holteëienskap. Doen die skets op 'n vlak. + Die skets moet 'n stut hê vir die holteëienskap. Doen die skets op 'n vlak. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Onderdeelontwerp + + Part Design + Onderdeelontwerp - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_de.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_de.ts index 2f3c616b8..959d8aa54 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_de.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_de.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - Part + Part + Part - Chamfer... - Abschrägung ... + Chamfer... + Abschrägung ... - Chamfer the selected edges of a shape - Die gewählten Kanten einer Form abschrägen + + PartDesign + Teile-Konstruktion - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Die gewählten Kanten einer Form abschrägen + + + CmdPartDesignFillet - PartDesign - Teile-Konstruktion + + PartDesign + Teile-Konstruktion - Fillet - Verrundung + + Fillet + Verrundung - Make a fillet on an edge, face or body - Kante, Fläche oder Körper verrunden + + Make a fillet on an edge, face or body + Kante, Fläche oder Körper verrunden - - + + + CmdPartDesignGroove + + + PartDesign + Teile-Konstruktion + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Teile-Konstruktion + + PartDesign + Teile-Konstruktion - Pad - Block + + Pad + Block - Pad a selected sketch - Selektierte Skizze aufpolstern + + Pad a selected sketch + Selektierte Skizze aufpolstern - - + + CmdPartDesignPocket - PartDesign - Teile-Konstruktion + + PartDesign + Teile-Konstruktion - Pocket - Tasche + + Pocket + Tasche - create a pocket with the selected sketch - Eine Tasche mit der selektierten Skizze erzeugen + + create a pocket with the selected sketch + Eine Tasche mit der selektierten Skizze erzeugen - - + + CmdPartDesignRevolution - PartDesign - Teile-Konstruktion + + PartDesign + Teile-Konstruktion - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Kanten zum Abschrägen + Edges to chamfer + Kanten zum Abschrägen - Start distance - Anfangsabstand + Start distance + Anfangsabstand - End distance - Endabstand + End distance + Endabstand - Edge%1 - Kante%1 + Edge%1 + Kante%1 - Distance - Abstand + Distance + Abstand - No shape selected - Keine Form ausgewählt + No shape selected + Keine Form ausgewählt - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Keine gültige Form gewählt. + Keine gültige Form gewählt. Bitte wählen Sie zuerst eine gültige Form im Dropdown-Feld. - No edge selected - Keine Kante ausgewählt + No edge selected + Keine Kante ausgewählt - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Keine Kanten zum Abschrägen markiert. + Keine Kanten zum Abschrägen markiert. Bitte markieren Sie zuerst ein oder mehrere Kanten. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Kanten abschrägen + Chamfer Edges + Kanten abschrägen - Shape - Form + Shape + Form - Selected shape: - Ausgewählte Form: + Selected shape: + Ausgewählte Form: - No selection - Keine Auswahl + No selection + Keine Auswahl - Chamfer Parameter - Abschräg-Parameter + Chamfer Parameter + Abschräg-Parameter - All - Alles + All + Alles - None - Nichts + None + Nichts - Chamfer type: - Abschrägngsart: + Chamfer type: + Abschrägngsart: - Constant Distance - Konstanter Abstand + Constant Distance + Konstanter Abstand - Variable Distance - Variabler Abstand + Variable Distance + Variabler Abstand - Distance: - Abstand: + Distance: + Abstand: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Form + + + + Size: + Größe: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Form + + Form + Form - Radius: - Radius: + + Radius: + Radius: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Form + + + + Axis: + Achse: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Winkel: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Form + + Form + Form - Type: - Typ: + + Type: + Typ: - Dimension - Abmessung + + Dimension + Abmessung - Up to last - Weiter zum Letzten + + Up to last + Weiter zum Letzten - Up to first - Bis zum ersten + + Up to first + Bis zum ersten - Size: - Größe: + + Size: + Größe: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Form + + Form + Form - Type: - Typ: + + Type + - Dimension - Abmessung + + Length + Length - Length: - Länge: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Anzeigemodus: + Type: + Typ: - Plot mode: - Plot mode: + + + Dimension + Abmessung - Point size: - Punktgröße: + Length: + Länge: - Line width: - Linienbreite: + Mirrored extent + Mirrored extent - Transparency: - Transparenz: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Anzeigemodus: - - Pad parameters - Pad parameters + Plot mode: + Plot mode: - - + + Point size: + Punktgröße: + + + Line width: + Linienbreite: + + + Transparency: + Transparenz: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Form + + Form + Form - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Nummer1: + + Number1: + Nummer1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Nummer2: + + Number2: + Nummer2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Form + + Form + Form - Type: - Typ: + Type: + Typ: - Dimension - Abmessung + + Type + - Length - Length + + + Dimension + Abmessung - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Form + + Form + Form - Axis: - Achse: + + Axis: + Achse: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Winkel: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Winkel: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Falsche Auswahl + + + + + + + + + + + + + + + + + + + Wrong selection + Falsche Auswahl - Select a sketch or 2D object. - Wählen Sie eine Skizze oder ein 2D-Objekt. + + + + + Select a sketch or 2D object. + Wählen Sie eine Skizze oder ein 2D-Objekt. - The shape of the selected object is empty. - Die Form des gewählten Objektes ist leer. + + + + + The shape of the selected object is empty. + Die Form des gewählten Objektes ist leer. - The shape of the selected object is not a wire. - Wählen Sie eine Kante, eine Fläche oder einen Körper. Nur ein Körper ist erlaubt. + + + + + The shape of the selected object is not a wire. + Wählen Sie eine Kante, eine Fläche oder einen Körper. Nur ein Körper ist erlaubt. - Select an edge, face or body. Only one body is allowed. - Wählen Sie eine Kante, eine Fläche oder einen Körper. Nur ein Körper ist erlaubt. + + + Select an edge, face or body. Only one body is allowed. + Wählen Sie eine Kante, eine Fläche oder einen Körper. Nur ein Körper ist erlaubt. - Wrong object type - Falscher Objekt-Typ + + + Wrong object type + Falscher Objekt-Typ - Fillet works only on parts - Rundung funktioniert nur bei Teilen + + Fillet works only on parts + Rundung funktioniert nur bei Teilen - No Support - Keine Auflage + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Keine Auflage + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Die Skizze erfordert eine Auflage für die Tasche. + Die Skizze erfordert eine Auflage für die Tasche. Erstelle die Skizze auf der Fläche. - - Edit pad - Block bearbeiten + + Edit pad + Block bearbeiten - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Möchten Sie diesen Dialog zu schließen? + + + + + + + Do you want to close this dialog? + Möchten Sie diesen Dialog zu schließen? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Teile-Konstruktion + + Part Design + Teile-Konstruktion - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_es.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_es.ts index 4f2656025..33a9a08b9 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_es.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_es.ts @@ -1,460 +1,767 @@ - - + + CmdPartDesignChamfer - - Part - Pieza + Part + Pieza - Chamfer... - Chaflán... + Chamfer... + Chaflán... - Chamfer the selected edges of a shape - Chaflane las aristas seleccionadas de una forma + + PartDesign + Diseño de piezas - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Chaflane las aristas seleccionadas de una forma + + + CmdPartDesignFillet - PartDesign - Diseño de piezas + + PartDesign + Diseño de piezas - Fillet - Redondear + + Fillet + Redondear - Make a fillet on an edge, face or body - Crear un redondeado en una arista, cara o cuerpo + + Make a fillet on an edge, face or body + Crear un redondeado en una arista, cara o cuerpo - - + + + CmdPartDesignGroove + + + PartDesign + Diseño de piezas + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Diseño de piezas + + PartDesign + Diseño de piezas - Pad - Extruir + + Pad + Extruir - Pad a selected sketch - Extruir un dibujo seleccionado + + Pad a selected sketch + Extruir un dibujo seleccionado - - + + CmdPartDesignPocket - PartDesign - Diseño de piezas + + PartDesign + Diseño de piezas - Pocket - Vaciado + + Pocket + Vaciado - create a pocket with the selected sketch - crear un vaciado con el croquis seleccionado + + create a pocket with the selected sketch + crear un vaciado con el croquis seleccionado - - + + CmdPartDesignRevolution - PartDesign - Diseño de piezas + + PartDesign + Diseño de piezas - Revolution - Revolución + + Revolution + Revolución - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Aristas para chaflán + Edges to chamfer + Aristas para chaflán - Start distance - Distancia inicial + Start distance + Distancia inicial - End distance - Distancia final + End distance + Distancia final - Edge%1 - Arista%1 + Edge%1 + Arista%1 - Distance - Distancia + Distance + Distancia - No shape selected - Ninguna forma seleccionada + No shape selected + Ninguna forma seleccionada - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - La forma seleccionada no es válida. Por favor, seleccione primero una forma válida en el cuadro despegar. + La forma seleccionada no es válida. Por favor, seleccione primero una forma válida en el cuadro despegar. - No edge selected - Ninguna arista seleccionada + No edge selected + Ninguna arista seleccionada - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Ninguna entidad de arista se ha comprobado para chaflán. Compruebe primero una o más entidades de arista. + Ninguna entidad de arista se ha comprobado para chaflán. Compruebe primero una o más entidades de arista. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Aristas del chaflán + Chamfer Edges + Aristas del chaflán - Shape - Forma + Shape + Forma - Selected shape: - Forma seleccionada: + Selected shape: + Forma seleccionada: - No selection - Sin selección + No selection + Sin selección - Chamfer Parameter - Parámetro de chaflán + Chamfer Parameter + Parámetro de chaflán - All - Todo + All + Todo - None - Nada + None + Nada - Chamfer type: - Tipo de chaflán: + Chamfer type: + Tipo de chaflán: - Constant Distance - Distancia constante + Constant Distance + Distancia constante - Variable Distance - Distancia variable + Variable Distance + Distancia variable - Distance: - Distancia: + Distance: + Distancia: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Formulario + + + + Size: + Tamaño: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Formulario + + Form + Formulario - Radius: - Radio: + + Radius: + Radio: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Formulario + + + + Axis: + Ejes: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Ángulo: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Formulario + + Form + Formulario - Type: - Tipo: + + Type: + Tipo: - Dimension - Cota + + Dimension + Cota - Up to last - Cerca del último + + Up to last + Cerca del último - Up to first - Up to first + + Up to first + Up to first - Size: - Tamaño: + + Size: + Tamaño: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Formulario + + Form + Formulario - Type: - Tipo: + + Type + - Dimension - Cota + + Length + Length - Length: - Longitud: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Modo de visualización: + Type: + Tipo: - Plot mode: - Modo de impresión: + + + Dimension + Cota - Point size: - Tamaño de punto: + Length: + Longitud: - Line width: - Grosor de línea: + Mirrored extent + Mirrored extent - Transparency: - Transparencia: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Modo de visualización: - - Pad parameters - Pad parameters + Plot mode: + Modo de impresión: - - + + Point size: + Tamaño de punto: + + + Line width: + Grosor de línea: + + + Transparency: + Transparencia: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Formulario + + Form + Formulario - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Formulario + + Form + Formulario - Type: - Tipo: + Type: + Tipo: - Dimension - Cota + + Type + - Length - Length + + + Dimension + Cota - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Formulario + + Form + Formulario - Axis: - Ejes: + + Axis: + Ejes: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Ángulo: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Ángulo: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Selección incorrecta + + + + + + + + + + + + + + + + + + + Wrong selection + Selección incorrecta - Select a sketch or 2D object. - Seleccione un croquis o un objeto 2D. + + + + + Select a sketch or 2D object. + Seleccione un croquis o un objeto 2D. - The shape of the selected object is empty. - La forma del objeto seleccionado está vacía. + + + + + The shape of the selected object is empty. + La forma del objeto seleccionado está vacía. - The shape of the selected object is not a wire. - La forma del objeto seleccionado no es alambrica. + + + + + The shape of the selected object is not a wire. + La forma del objeto seleccionado no es alambrica. - Select an edge, face or body. Only one body is allowed. - Seleccione una arista, cara o cuerpo. Sólo se permite un solo cuerpo. + + + Select an edge, face or body. Only one body is allowed. + Seleccione una arista, cara o cuerpo. Sólo se permite un solo cuerpo. - Wrong object type - Tipo de objeto incorrecto + + + Wrong object type + Tipo de objeto incorrecto - Fillet works only on parts - Redondeado sólo funciona con piezas + + Fillet works only on parts + Redondeado sólo funciona con piezas - No Support - Sin soporte + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Sin soporte + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - El croquis tiene que tener un soporte para la función vaciado. Cree el croquis en una cara. + El croquis tiene que tener un soporte para la función vaciado. Cree el croquis en una cara. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Diseño de pieza + + Part Design + Diseño de pieza - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fi.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fi.ts index d885517b3..484968ef3 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fi.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fi.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - osa + Part + osa - Chamfer... - Chamfer... + Chamfer... + Chamfer... - Chamfer the selected edges of a shape - Chamfer the selected edges of a shape + + PartDesign + PartDesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Chamfer the selected edges of a shape + + + CmdPartDesignFillet - PartDesign - PartDesign + + PartDesign + PartDesign - Fillet - Fillet + + Fillet + Fillet - Make a fillet on an edge, face or body - Make a fillet on an edge, face or body + + Make a fillet on an edge, face or body + Make a fillet on an edge, face or body - - + + + CmdPartDesignGroove + + + PartDesign + PartDesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - PartDesign + + PartDesign + PartDesign - Pad - Pad + + Pad + Pad - Pad a selected sketch - Pad a selected sketch + + Pad a selected sketch + Pad a selected sketch - - + + CmdPartDesignPocket - PartDesign - PartDesign + + PartDesign + PartDesign - Pocket - Pocket + + Pocket + Pocket - create a pocket with the selected sketch - create a pocket with the selected sketch + + create a pocket with the selected sketch + create a pocket with the selected sketch - - + + CmdPartDesignRevolution - PartDesign - PartDesign + + PartDesign + PartDesign - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Edges to chamfer + Edges to chamfer + Edges to chamfer - Start distance - Start distance + Start distance + Start distance - End distance - End distance + End distance + End distance - Edge%1 - Reuna %1 + Edge%1 + Reuna %1 - Distance - Distance + Distance + Distance - No shape selected - Ei valittua muotoa + No shape selected + Ei valittua muotoa - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Kelvollista muotoa ei ole valittu. + Kelvollista muotoa ei ole valittu. Ole hyvä ja valitse kelvollinen muoto alas veto laatikosta. - No edge selected - Ei valittua reunaa + No edge selected + Ei valittua reunaa - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Chamfer Edges + Chamfer Edges + Chamfer Edges - Shape - Muoto + Shape + Muoto - Selected shape: - Valittu muoto: + Selected shape: + Valittu muoto: - No selection - No selection + No selection + No selection - Chamfer Parameter - Chamfer Parameter + Chamfer Parameter + Chamfer Parameter - All - All + All + All - None - Ei mitään + None + Ei mitään - Chamfer type: - Chamfer type: + Chamfer type: + Chamfer type: - Constant Distance - Constant Distance + Constant Distance + Constant Distance - Variable Distance - Variable Distance + Variable Distance + Variable Distance - Distance: - Etäisyys: + Distance: + Etäisyys: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Lomake + + + + Size: + Koko: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Lomake + + Form + Lomake - Radius: - Radius: + + Radius: + Radius: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Lomake + + + + Axis: + Axis: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Kulma: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Lomake + + Form + Lomake - Type: - Tyyppi: + + Type: + Tyyppi: - Dimension - Mitta + + Dimension + Mitta - Up to last - Ylös viimeiseen + + Up to last + Ylös viimeiseen - Up to first - Up to first + + Up to first + Up to first - Size: - Koko: + + Size: + Koko: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Lomake + + Form + Lomake - Type: - Tyyppi: + + Type + - Dimension - Mitta + + Length + Length - Length: - Length: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Display mode: + Type: + Tyyppi: - Plot mode: - Plot mode: + + + Dimension + Mitta - Point size: - Pistekoko: + Length: + Length: - Line width: - Viivan leveys: + Mirrored extent + Mirrored extent - Transparency: - Läpinäkyvyys: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Display mode: - - Pad parameters - Pad parameters + Plot mode: + Plot mode: - - + + Point size: + Pistekoko: + + + Line width: + Viivan leveys: + + + Transparency: + Läpinäkyvyys: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Lomake + + Form + Lomake - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Lomake + + Form + Lomake - Type: - Tyyppi: + Type: + Tyyppi: - Dimension - Mitta + + Type + - Length - Length + + + Dimension + Mitta - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Lomake + + Form + Lomake - Axis: - Axis: + + Axis: + Axis: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Kulma: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Kulma: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Väärä valinta + + + + + + + + + + + + + + + + + + + Wrong selection + Väärä valinta - Select a sketch or 2D object. - Select a sketch or 2D object. + + + + + Select a sketch or 2D object. + Select a sketch or 2D object. - The shape of the selected object is empty. - The shape of the selected object is empty. + + + + + The shape of the selected object is empty. + The shape of the selected object is empty. - The shape of the selected object is not a wire. - The shape of the selected object is not a wire. + + + + + The shape of the selected object is not a wire. + The shape of the selected object is not a wire. - Select an edge, face or body. Only one body is allowed. - Select an edge, face or body. Only one body is allowed. + + + Select an edge, face or body. Only one body is allowed. + Select an edge, face or body. Only one body is allowed. - Wrong object type - Wrong object type + + + Wrong object type + Wrong object type - Fillet works only on parts - Fillet works only on parts + + Fillet works only on parts + Fillet works only on parts - No Support - No Support + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + No Support + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - The sketch has to have a support for the pocket feature. + The sketch has to have a support for the pocket feature. Create the sketch on a face. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Part Design + + Part Design + Part Design - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fr.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fr.ts index 52cd0cfe4..75a11f3c0 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fr.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_fr.ts @@ -1,460 +1,767 @@ - - + + CmdPartDesignChamfer - - Part - Pièce + Part + Pièce - Chamfer... - Chanfrein... + Chamfer... + Chanfrein... - Chamfer the selected edges of a shape - Chanfreiner les arêtes sélectionnées d'une forme + + PartDesign + ConceptionPièce - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Chanfreiner les arêtes sélectionnées d'une forme + + + CmdPartDesignFillet - PartDesign - ConceptionPièce + + PartDesign + ConceptionPièce - Fillet - Congé + + Fillet + Congé - Make a fillet on an edge, face or body - Faire un congé sur une arête, une face ou un corps + + Make a fillet on an edge, face or body + Faire un congé sur une arête, une face ou un corps - - + + + CmdPartDesignGroove + + + PartDesign + ConceptionPièce + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - ConceptionPièce + + PartDesign + ConceptionPièce - Pad - Protrusion + + Pad + Protrusion - Pad a selected sketch - Faire une protrusion à partir de l'esquisse sélectionnée + + Pad a selected sketch + Faire une protrusion à partir de l'esquisse sélectionnée - - + + CmdPartDesignPocket - PartDesign - ConceptionPièce + + PartDesign + ConceptionPièce - Pocket - Cavité + + Pocket + Cavité - create a pocket with the selected sketch - Créer une cavité avec l'esquisse sélectionnée + + create a pocket with the selected sketch + Créer une cavité avec l'esquisse sélectionnée - - + + CmdPartDesignRevolution - PartDesign - ConceptionPièce + + PartDesign + ConceptionPièce - Revolution - Révolution + + Revolution + Révolution - Revolve a selected sketch - Révolution d'une esquisse sélectionnée + + Revolve a selected sketch + Révolution d'une esquisse sélectionnée - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Outils de face + + Face tools + Outils de face - Sketch tools - Outils d'esquisse + + Sketch tools + Outils d'esquisse - Create Geometry - Créer géométrie + + Create Geometry + Créer géométrie - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Arêtes à chanfreiner + Edges to chamfer + Arêtes à chanfreiner - Start distance - Distance initiale + Start distance + Distance initiale - End distance - Distance finale + End distance + Distance finale - Edge%1 - Arête %1 + Edge%1 + Arête %1 - Distance - Distance + Distance + Distance - No shape selected - Aucune forme sélectionnée + No shape selected + Aucune forme sélectionnée - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Aucune forme valide n'est sélectionnée. Veuillez d'abord sélectionner une forme valide depuis le menu déroulant. + Aucune forme valide n'est sélectionnée. Veuillez d'abord sélectionner une forme valide depuis le menu déroulant. - No edge selected - Aucune arête sélectionnée + No edge selected + Aucune arête sélectionnée - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Aucune arête n'est sélectionné pour le filetage. Cochez d'abord une ou plusieurs arêtes. + Aucune arête n'est sélectionné pour le filetage. Cochez d'abord une ou plusieurs arêtes. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Chanfreiner des arêtes + Chamfer Edges + Chanfreiner des arêtes - Shape - Forme + Shape + Forme - Selected shape: - Forme sélectionnée : + Selected shape: + Forme sélectionnée : - No selection - Aucune sélection + No selection + Aucune sélection - Chamfer Parameter - Paramètre de chanfrein + Chamfer Parameter + Paramètre de chanfrein - All - Tout + All + Tout - None - Aucun + None + Aucun - Chamfer type: - Type de chanfrein : + Chamfer type: + Type de chanfrein : - Constant Distance - Distance constante + Constant Distance + Distance constante - Variable Distance - Distance variable + Variable Distance + Distance variable - Distance: - Distance : + Distance: + Distance : - - + + + PartDesignGui::TaskChamferParameters + + + Form + Forme + + + + Size: + Taille : + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Erreur de saisie + + Input error + Erreur de saisie - - + + PartDesignGui::TaskFilletParameters - - Form - Forme + + Form + Forme - Radius: - Rayon : + + Radius: + Rayon : - - Fillet parameters - Paramètres de l'arrondi + + Fillet parameters + Paramètres de l'arrondi - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Forme + + + + Axis: + Axe : + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Angle : + + + + Symmetric to plane + + + + + Reversed + Inversé + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Forme + + Form + Forme - Type: - Type : + + Type: + Type : - Dimension - Dimension + + Dimension + Dimension - Up to last - Jusqu'à la dernière face + + Up to last + Jusqu'à la dernière face - Up to first - Jusqu'à la première face + + Up to first + Jusqu'à la première face - Size: - Taille : + + Size: + Taille : - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Forme + + Form + Forme - Type: - Type : + + Type + - Dimension - Dimension + + Length + Longueur - Length: - Longueur : + + Symmetric to plane + - Mirrored extent - Étendue en miroir + + 2nd length + - Reversed - Inversé + + + Face + - Display mode: - Mode d'affichage : + Type: + Type : - Plot mode: - Mode tracé : + + + Dimension + Dimension - Point size: - Taille de point : + Length: + Longueur : - Line width: - Épaisseur de ligne: + Mirrored extent + Étendue en miroir - Transparency: - Transparence : + + Reversed + Inversé - TaskPadParameters - TaskPadParameters + Display mode: + Mode d'affichage : - - Pad parameters - Paramètres de protrusion + Plot mode: + Mode tracé : - - + + Point size: + Taille de point : + + + Line width: + Épaisseur de ligne: + + + Transparency: + Transparence : + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Paramètres de protrusion + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Forme + + Form + Forme - Spacing1: - Espacement1 : + + Spacing1: + Espacement1 : - Number1: - Nombre1 : + + Number1: + Nombre1 : - Second extend - Seconde extension + + Second extend + Seconde extension - Spacing2: - Espacement2 : + + Spacing2: + Espacement2 : - Number2: - Nombre2 : + + Number2: + Nombre2 : - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Forme + + Form + Forme - Type: - Type : + Type: + Type : - Dimension - Dimension + + Type + - Length - Longueur + + + Dimension + Dimension - - Pocket parameters - Paramètres de la poche + + + Face + - - + + + Length + Longueur + + + + Pocket parameters + Paramètres de la poche + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Forme + + Form + Forme - Axis: - Axe : + + Axis: + Axe : - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Angle : + + Symmetric to plane + - - Revolution parameters - Paramètres de la révolution + + Reversed + Inversé - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Angle : + + + + Revolution parameters + Paramètres de la révolution + + + QObject - - Wrong selection - Sélection invalide + + + + + + + + + + + + + + + + + + + Wrong selection + Sélection invalide - Select a sketch or 2D object. - Sélectionnez une esquisse ou un objet 2D. + + + + + Select a sketch or 2D object. + Sélectionnez une esquisse ou un objet 2D. - The shape of the selected object is empty. - La forme de l'objet sélectionné est vide. + + + + + The shape of the selected object is empty. + La forme de l'objet sélectionné est vide. - The shape of the selected object is not a wire. - La forme de l'objet sélectionné n'est pas filaire. + + + + + The shape of the selected object is not a wire. + La forme de l'objet sélectionné n'est pas filaire. - Select an edge, face or body. Only one body is allowed. - Sélectionnez une arête, une face ou un corps. Un seul corps est autorisé. + + + Select an edge, face or body. Only one body is allowed. + Sélectionnez une arête, une face ou un corps. Un seul corps est autorisé. - Wrong object type - Type d'objet incorrect + + + Wrong object type + Type d'objet incorrect - Fillet works only on parts - Le congé s'applique uniquement sur les pièces + + Fillet works only on parts + Le congé s'applique uniquement sur les pièces - No Support - Aucune prise en charge + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Aucune prise en charge + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - L'esquisse doit être supportée pour la fonctionnalité de cavité. Créez l'esquisse sur une face. + L'esquisse doit être supportée pour la fonctionnalité de cavité. Créez l'esquisse sur une face. - - Edit pad - Modifier la protrusion + + Edit pad + Modifier la protrusion - - Edit pocket - Modifier la poche + + + + Edit pocket + Modifier la poche - A dialog is already open in the task panel - Une boîte de dialogue est déjà ouverte dans le panneau des tâches + + + + + + + A dialog is already open in the task panel + Une boîte de dialogue est déjà ouverte dans le panneau des tâches - Do you want to close this dialog? - Voulez-vous fermer cette boîte de dialogue? + + + + + + + Do you want to close this dialog? + Voulez-vous fermer cette boîte de dialogue? - - Edit revolution - Modifier la révolution + + Edit revolution + Modifier la révolution - - + + + Edit Groove + + + + Workbench - - Part Design - Conception de pièces + + Part Design + Conception de pièces - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hr.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hr.ts index 151e794b8..19074f789 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hr.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hr.ts @@ -1,460 +1,767 @@ - - + + CmdPartDesignChamfer - - Part - Tijelo + Part + Tijelo - Chamfer... - Zarubi... + Chamfer... + Zarubi... - Chamfer the selected edges of a shape - Zarubi odabrane rubove, površine ili tijela + + PartDesign + Oblikovanje tijela - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Zarubi odabrane rubove, površine ili tijela + + + CmdPartDesignFillet - PartDesign - Oblikovanje tijela + + PartDesign + Oblikovanje tijela - Fillet - Utisni + + Fillet + Utisni - Make a fillet on an edge, face or body - Zaobli rub, površinu ili tijelo + + Make a fillet on an edge, face or body + Zaobli rub, površinu ili tijelo - - + + + CmdPartDesignGroove + + + PartDesign + Oblikovanje tijela + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Oblikovanje tijela + + PartDesign + Oblikovanje tijela - Pad - Izvučeni oblik + + Pad + Izvučeni oblik - Pad a selected sketch - Izvuci odabranu skicu + + Pad a selected sketch + Izvuci odabranu skicu - - + + CmdPartDesignPocket - PartDesign - Oblikovanje tijela + + PartDesign + Oblikovanje tijela - Pocket - Džep + + Pocket + Džep - create a pocket with the selected sketch - stvoriti džep s odabranom skicom + + create a pocket with the selected sketch + stvoriti džep s odabranom skicom - - + + CmdPartDesignRevolution - PartDesign - Oblikovanje tijela + + PartDesign + Oblikovanje tijela - Revolution - Obrtaj + + Revolution + Obrtaj - Revolve a selected sketch - Kreiraj tijelo obrtanjem skice + + Revolve a selected sketch + Kreiraj tijelo obrtanjem skice - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Alati plohe + + Face tools + Alati plohe - Sketch tools - Alati skice + + Sketch tools + Alati skice - Create Geometry - Napravi geometriju + + Create Geometry + Napravi geometriju - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Rubove za zarubljivanje + Edges to chamfer + Rubove za zarubljivanje - Start distance - Početna udaljenost + Start distance + Početna udaljenost - End distance - Krajnja udaljenosti + End distance + Krajnja udaljenosti - Edge%1 - Rub%1 + Edge%1 + Rub%1 - Distance - Udaljenost + Distance + Udaljenost - No shape selected - Nema odabranog oblika + No shape selected + Nema odabranog oblika - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nije odabran vanljan oblik. Molimo odaberite valjan oblik u padajućem okviru. + Nije odabran vanljan oblik. Molimo odaberite valjan oblik u padajućem okviru. - No edge selected - Nema odabranih rubova + No edge selected + Nema odabranih rubova - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Nije odabran ni jedan rub. Molimo prvo odaberite jedan ili više rubova. + Nije odabran ni jedan rub. Molimo prvo odaberite jedan ili više rubova. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Zarubi stranice + Chamfer Edges + Zarubi stranice - Shape - Oblik + Shape + Oblik - Selected shape: - Odabrani oblik: + Selected shape: + Odabrani oblik: - No selection - Nema odabira + No selection + Nema odabira - Chamfer Parameter - Parametar zarubljenja + Chamfer Parameter + Parametar zarubljenja - All - Sve + All + Sve - None - Nijedan + None + Nijedan - Chamfer type: - Oluk tip: + Chamfer type: + Oluk tip: - Constant Distance - Konstantna Udaljenost + Constant Distance + Konstantna Udaljenost - Variable Distance - Promjenjiva udaljenost + Variable Distance + Promjenjiva udaljenost - Distance: - Udaljenost: + Distance: + Udaljenost: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Obrazac + + + + Size: + Veličina: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Obrazac + + Form + Obrazac - Radius: - Polumjer: + + Radius: + Polumjer: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Obrazac + + + + Axis: + Os: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Kut: + + + + Symmetric to plane + + + + + Reversed + Obrnuti + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Obrazac + + Form + Obrazac - Type: - Vrsta: + + Type: + Vrsta: - Dimension - Dimenzija + + Dimension + Dimenzija - Up to last - Do posljednjeg + + Up to last + Do posljednjeg - Up to first - Do prve + + Up to first + Do prve - Size: - Veličina: + + Size: + Veličina: - - TaskHoleParameters - TaskHoleParametri + + TaskHoleParameters + TaskHoleParametri - - + + PartDesignGui::TaskPadParameters - - Form - Obrazac + + Form + Obrazac - Type: - Vrsta: + + Type + - Dimension - Dimenzija + + Length + Length - Length: - Duljina: + + Symmetric to plane + - Mirrored extent - Mjera zrcaljenja + + 2nd length + - Reversed - Obrnuti + + + Face + - Display mode: - Prikaz: + Type: + Vrsta: - Plot mode: - Način crtanja: + + + Dimension + Dimenzija - Point size: - Veličina točke: + Length: + Duljina: - Line width: - Širina linije: + Mirrored extent + Mjera zrcaljenja - Transparency: - Prozirnost: + + Reversed + Obrnuti - TaskPadParameters - TaskPadParameters + Display mode: + Prikaz: - - Pad parameters - Parametri izvučenog oblika + Plot mode: + Način crtanja: - - + + Point size: + Veličina točke: + + + Line width: + Širina linije: + + + Transparency: + Prozirnost: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Parametri izvučenog oblika + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Obrazac + + Form + Obrazac - Spacing1: - Razmak1: + + Spacing1: + Razmak1: - Number1: - Broj1: + + Number1: + Broj1: - Second extend - Drugi kraj + + Second extend + Drugi kraj - Spacing2: - Razmak2: + + Spacing2: + Razmak2: - Number2: - Broj2: + + Number2: + Broj2: - - TaskPatternRectangularParameters - TaskPatternRectangularParametri + + TaskPatternRectangularParameters + TaskPatternRectangularParametri - - + + PartDesignGui::TaskPocketParameters - - Form - Obrazac + + Form + Obrazac - Type: - Vrsta: + Type: + Vrsta: - Dimension - Dimenzija + + Type + - Length - Length + + + Dimension + Dimenzija - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Obrazac + + Form + Obrazac - Axis: - Os: + + Axis: + Os: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Kut: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Obrnuti - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Kut: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Pogrešan odabir + + + + + + + + + + + + + + + + + + + Wrong selection + Pogrešan odabir - Select a sketch or 2D object. - Odaberite skicu ili 2D objekt. + + + + + Select a sketch or 2D object. + Odaberite skicu ili 2D objekt. - The shape of the selected object is empty. - Oblik odabranog objekta je prazan. + + + + + The shape of the selected object is empty. + Oblik odabranog objekta je prazan. - The shape of the selected object is not a wire. - Oblik odabranog objekta nije žica. + + + + + The shape of the selected object is not a wire. + Oblik odabranog objekta nije žica. - Select an edge, face or body. Only one body is allowed. - Odaberite rub, plohu ili tijelo. Samo jedno tijelo je dozvoljeno. + + + Select an edge, face or body. Only one body is allowed. + Odaberite rub, plohu ili tijelo. Samo jedno tijelo je dozvoljeno. - Wrong object type - Pogrešan tip objekta + + + Wrong object type + Pogrešan tip objekta - Fillet works only on parts - Rubove možete zaobliti samo na tijelima + + Fillet works only on parts + Rubove možete zaobliti samo na tijelima - No Support - Bez podrške + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Bez podrške + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Skica mora imati podršku za udubljenje. Napravite skicu na površini. + Skica mora imati podršku za udubljenje. Napravite skicu na površini. - - Edit pad - Uredi izvučeni oblik + + Edit pad + Uredi izvučeni oblik - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - Dijalog je već otvoren u ploči zadataka + + + + + + + A dialog is already open in the task panel + Dijalog je već otvoren u ploči zadataka - Do you want to close this dialog? - Želite li zatvoriti ovaj dijalog? + + + + + + + Do you want to close this dialog? + Želite li zatvoriti ovaj dijalog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Oblikovanje tijela + + Part Design + Oblikovanje tijela - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hu.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hu.ts index c4a31ee34..334d7f02f 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hu.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_hu.ts @@ -1,461 +1,768 @@ - - + + CmdPartDesignChamfer - - Part - Rész + Part + Rész - Chamfer... - Letörés ... + Chamfer... + Letörés ... - Chamfer the selected edges of a shape - Az alakzat kijelölt éleinek letörése + + PartDesign + Alkatrész tervezés - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Az alakzat kijelölt éleinek letörése + + + CmdPartDesignFillet - PartDesign - Alkatrész tervezés + + PartDesign + Alkatrész tervezés - Fillet - Lekerekítés + + Fillet + Lekerekítés - Make a fillet on an edge, face or body - Létrehoz egy lekerekítést az élen, felületen vagy testen + + Make a fillet on an edge, face or body + Létrehoz egy lekerekítést az élen, felületen vagy testen - - + + + CmdPartDesignGroove + + + PartDesign + Alkatrész tervezés + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Alkatrész tervezés + + PartDesign + Alkatrész tervezés - Pad - Blokk + + Pad + Blokk - Pad a selected sketch - Blokkba a kiválasztott vázlatot + + Pad a selected sketch + Blokkba a kiválasztott vázlatot - - + + CmdPartDesignPocket - PartDesign - Alkatrész tervezés + + PartDesign + Alkatrész tervezés - Pocket - Zseb + + Pocket + Zseb - create a pocket with the selected sketch - Hozzon létre egy zsebet a kiválasztott vázlattal + + create a pocket with the selected sketch + Hozzon létre egy zsebet a kiválasztott vázlattal - - + + CmdPartDesignRevolution - PartDesign - Alkatrész tervezés + + PartDesign + Alkatrész tervezés - Revolution - Forradalom + + Revolution + Forradalom - Revolve a selected sketch - Esztergáld a kiválasztott vázlatot + + Revolve a selected sketch + Esztergáld a kiválasztott vázlatot - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Felület eszközök + + Face tools + Felület eszközök - Sketch tools - Vázlat eszközök + + Sketch tools + Vázlat eszközök - Create Geometry - Geometria létrehozása + + Create Geometry + Geometria létrehozása - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Élek letörése + Edges to chamfer + Élek letörése - Start distance - Eleje távolság + Start distance + Eleje távolság - End distance - Vége távolsága + End distance + Vége távolsága - Edge%1 - Él %1 + Edge%1 + Él %1 - Distance - Távolság + Distance + Távolság - No shape selected - Nincs alakzat kijelölve + No shape selected + Nincs alakzat kijelölve - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nem érvényes alakzat van kiválasztva. + Nem érvényes alakzat van kiválasztva. Kérjük, először a legördülő listából válasszon egy érvényes alakzatot. - No edge selected - Nincs kijelölve él + No edge selected + Nincs kijelölve él - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - A letöréshez nem lett él létezés ellenőrzés végezve. Ellenőrizze először egy vagy több él meglétét. + A letöréshez nem lett él létezés ellenőrzés végezve. Ellenőrizze először egy vagy több él meglétét. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Élek letörése + Chamfer Edges + Élek letörése - Shape - Alakzat + Shape + Alakzat - Selected shape: - Kijelölt alakzat: + Selected shape: + Kijelölt alakzat: - No selection - Nincs kijelölés + No selection + Nincs kijelölés - Chamfer Parameter - Letörési Paraméter + Chamfer Parameter + Letörési Paraméter - All - Mind + All + Mind - None - Egyik sem + None + Egyik sem - Chamfer type: - Letörés típusa: + Chamfer type: + Letörés típusa: - Constant Distance - Állandó távolság + Constant Distance + Állandó távolság - Variable Distance - Változó távolság + Variable Distance + Változó távolság - Distance: - Távolság: + Distance: + Távolság: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Űrlap + + + + Size: + Méret: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Űrlap + + Form + Űrlap - Radius: - Sugár: + + Radius: + Sugár: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Űrlap + + + + Axis: + Tengely: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Dőlésszög: + + + + Symmetric to plane + + + + + Reversed + Fordított + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Űrlap + + Form + Űrlap - Type: - Típus: + + Type: + Típus: - Dimension - Dimenzió + + Dimension + Dimenzió - Up to last - Előzőig + + Up to last + Előzőig - Up to first - Fel a tetejére + + Up to first + Fel a tetejére - Size: - Méret: + + Size: + Méret: - - TaskHoleParameters - TaskHoleParaméterek + + TaskHoleParameters + TaskHoleParaméterek - - + + PartDesignGui::TaskPadParameters - - Form - Űrlap + + Form + Űrlap - Type: - Típus: + + Type + - Dimension - Dimenzió + + Length + Length - Length: - Hossz: + + Symmetric to plane + - Mirrored extent - Tükrözött mértékek + + 2nd length + - Reversed - Fordított + + + Face + - Display mode: - Megjelenítési mód: + Type: + Típus: - Plot mode: - Ábrázolási mód: + + + Dimension + Dimenzió - Point size: - Pontméret: + Length: + Hossz: - Line width: - Vonalvastagság: + Mirrored extent + Tükrözött mértékek - Transparency: - Átlátszóság: + + Reversed + Fordított - TaskPadParameters - FeladatBlokkParaméter + Display mode: + Megjelenítési mód: - - Pad parameters - Pad paraméterek + Plot mode: + Ábrázolási mód: - - + + Point size: + Pontméret: + + + Line width: + Vonalvastagság: + + + Transparency: + Átlátszóság: + + + TaskPadParameters + FeladatBlokkParaméter + + + + Pad parameters + Pad paraméterek + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Űrlap + + Form + Űrlap - Spacing1: - Hehyköz1: + + Spacing1: + Hehyköz1: - Number1: - Szám1: + + Number1: + Szám1: - Second extend - Második értékek + + Second extend + Második értékek - Spacing2: - Szóköz2: + + Spacing2: + Szóköz2: - Number2: - Szám2: + + Number2: + Szám2: - - TaskPatternRectangularParameters - TaskPatternRectangularParaméterek + + TaskPatternRectangularParameters + TaskPatternRectangularParaméterek - - + + PartDesignGui::TaskPocketParameters - - Form - Űrlap + + Form + Űrlap - Type: - Típus: + Type: + Típus: - Dimension - Dimenzió + + Type + - Length - Length + + + Dimension + Dimenzió - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Űrlap + + Form + Űrlap - Axis: - Tengely: + + Axis: + Tengely: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Dőlésszög: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Fordított - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Dőlésszög: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Rossz kiválasztás + + + + + + + + + + + + + + + + + + + Wrong selection + Rossz kiválasztás - Select a sketch or 2D object. - Vázlat vagy 2D kijelölése. + + + + + Select a sketch or 2D object. + Vázlat vagy 2D kijelölése. - The shape of the selected object is empty. - Az alakzat, a kijelölt objektumon üres. + + + + + The shape of the selected object is empty. + Az alakzat, a kijelölt objektumon üres. - The shape of the selected object is not a wire. - Az alakzat, a kijelölt objektumon nem vonal. + + + + + The shape of the selected object is not a wire. + Az alakzat, a kijelölt objektumon nem vonal. - Select an edge, face or body. Only one body is allowed. - Egy él, felület vagy test kiválasztása. Csak egy test megengedett. + + + Select an edge, face or body. Only one body is allowed. + Egy él, felület vagy test kiválasztása. Csak egy test megengedett. - Wrong object type - Hibás objektumtípus + + + Wrong object type + Hibás objektumtípus - Fillet works only on parts - Lekerekítés csak az alkatrészeken működik + + Fillet works only on parts + Lekerekítés csak az alkatrészeken működik - No Support - Nem támogatott + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Nem támogatott + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - A vázlatnak támogatnia kell a zseb funkciót. Hozza létre a vázlatot a felületen. + A vázlatnak támogatnia kell a zseb funkciót. Hozza létre a vázlatot a felületen. - - Edit pad - Szerkesztés pad + + Edit pad + Szerkesztés pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - Egy párbeszédablak már nyitva van a feladat panelen + + + + + + + A dialog is already open in the task panel + Egy párbeszédablak már nyitva van a feladat panelen - Do you want to close this dialog? - Biztos be szeretné zárni a párbeszédpanelt? + + + + + + + Do you want to close this dialog? + Biztos be szeretné zárni a párbeszédpanelt? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Alkatrész tervezés + + Part Design + Alkatrész tervezés - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_it.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_it.ts index 63f9959a0..b35e3d0d6 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_it.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_it.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - Parte + Part + Parte - Chamfer... - Smusso... + Chamfer... + Smusso... - Chamfer the selected edges of a shape - Smussa gli spigoli selezionati di una forma + + PartDesign + PartDesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Smussa gli spigoli selezionati di una forma + + + CmdPartDesignFillet - PartDesign - PartDesign + + PartDesign + PartDesign - Fillet - Raccordo + + Fillet + Raccordo - Make a fillet on an edge, face or body - Crea un raccordo su uno spigolo, una faccia o un corpo + + Make a fillet on an edge, face or body + Crea un raccordo su uno spigolo, una faccia o un corpo - - + + + CmdPartDesignGroove + + + PartDesign + PartDesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - PartDesign + + PartDesign + PartDesign - Pad - Estrusione + + Pad + Estrusione - Pad a selected sketch - Estrude uno schizzo selezionato + + Pad a selected sketch + Estrude uno schizzo selezionato - - + + CmdPartDesignPocket - PartDesign - PartDesign + + PartDesign + PartDesign - Pocket - Tasca + + Pocket + Tasca - create a pocket with the selected sketch - Crea una tasca usando lo sketch selezionato + + create a pocket with the selected sketch + Crea una tasca usando lo sketch selezionato - - + + CmdPartDesignRevolution - PartDesign - PartDesign + + PartDesign + PartDesign - Revolution - Rivoluzione + + Revolution + Rivoluzione - Revolve a selected sketch - Crea un solido di rivoluzione da uno sketch selezionato + + Revolve a selected sketch + Crea un solido di rivoluzione da uno sketch selezionato - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Strumenti Faccia + + Face tools + Strumenti Faccia - Sketch tools - Strumenti Sketch + + Sketch tools + Strumenti Sketch - Create Geometry - Crea Geometria + + Create Geometry + Crea Geometria - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Spigoli da smussare + Edges to chamfer + Spigoli da smussare - Start distance - Distanza iniziale + Start distance + Distanza iniziale - End distance - Distanza finale + End distance + Distanza finale - Edge%1 - Spigolo %1 + Edge%1 + Spigolo %1 - Distance - Distanza + Distance + Distanza - No shape selected - Nessuna forma selezionata + No shape selected + Nessuna forma selezionata - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nessuna forma valida è stata selezionata. + Nessuna forma valida è stata selezionata. Seleziona prima una forma valida dal menù a tendina. - No edge selected - Nessuno spigolo selezionato + No edge selected + Nessuno spigolo selezionato - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Nessuna entità spigolo da smussare è stata selezionata + Nessuna entità spigolo da smussare è stata selezionata Selezionare prima una o più entità spigolo. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Smussa spigoli + Chamfer Edges + Smussa spigoli - Shape - Forma + Shape + Forma - Selected shape: - Forma selezionata: + Selected shape: + Forma selezionata: - No selection - Nessuna selezione + No selection + Nessuna selezione - Chamfer Parameter - Parametri di smusso + Chamfer Parameter + Parametri di smusso - All - Tutti + All + Tutti - None - Nessuno + None + Nessuno - Chamfer type: - Tipo di smusso: + Chamfer type: + Tipo di smusso: - Constant Distance - Distanza costante + Constant Distance + Distanza costante - Variable Distance - Distanza variabile + Variable Distance + Distanza variabile - Distance: - Distanza: + Distance: + Distanza: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Modulo + + + + Size: + Dimensione: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Modulo + + Form + Modulo - Radius: - Raggio: + + Radius: + Raggio: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Modulo + + + + Axis: + Asse: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Angolo: + + + + Symmetric to plane + + + + + Reversed + Invertito + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Modulo + + Form + Modulo - Type: - Tipo: + + Type: + Tipo: - Dimension - Quota + + Dimension + Quota - Up to last - Fino all'ultimo + + Up to last + Fino all'ultimo - Up to first - Fino al primo + + Up to first + Fino al primo - Size: - Dimensione: + + Size: + Dimensione: - - TaskHoleParameters - Parametri tasca + + TaskHoleParameters + Parametri tasca - - + + PartDesignGui::TaskPadParameters - - Form - Modulo + + Form + Modulo - Type: - Tipo: + + Type + - Dimension - Quota + + Length + Length - Length: - Lunghezza: + + Symmetric to plane + - Mirrored extent - Estensione specchiata + + 2nd length + - Reversed - Invertito + + + Face + - Display mode: - Modalità di visualizzazione: + Type: + Tipo: - Plot mode: - Modalità di stampa: + + + Dimension + Quota - Point size: - Dimensione punto: + Length: + Lunghezza: - Line width: - Spessore linea: + Mirrored extent + Estensione specchiata - Transparency: - Trasparenza: + + Reversed + Invertito - TaskPadParameters - Parametri Estrusione + Display mode: + Modalità di visualizzazione: - - Pad parameters - Parametri estrusione + Plot mode: + Modalità di stampa: - - + + Point size: + Dimensione punto: + + + Line width: + Spessore linea: + + + Transparency: + Trasparenza: + + + TaskPadParameters + Parametri Estrusione + + + + Pad parameters + Parametri estrusione + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Modulo + + Form + Modulo - Spacing1: - Spaziatura1: + + Spacing1: + Spaziatura1: - Number1: - Numero1: + + Number1: + Numero1: - Second extend - Seconda estensione + + Second extend + Seconda estensione - Spacing2: - Spaziatura2: + + Spacing2: + Spaziatura2: - Number2: - Numero2: + + Number2: + Numero2: - - TaskPatternRectangularParameters - Parametri Serie Rettangolare + + TaskPatternRectangularParameters + Parametri Serie Rettangolare - - + + PartDesignGui::TaskPocketParameters - - Form - Modulo + + Form + Modulo - Type: - Tipo: + Type: + Tipo: - Dimension - Quota + + Type + - Length - Length + + + Dimension + Quota - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Modulo + + Form + Modulo - Axis: - Asse: + + Axis: + Asse: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Angolo: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Invertito - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Angolo: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Selezione errata + + + + + + + + + + + + + + + + + + + Wrong selection + Selezione errata - Select a sketch or 2D object. - Selezionare uno sketch o un oggetto 2D. + + + + + Select a sketch or 2D object. + Selezionare uno sketch o un oggetto 2D. - The shape of the selected object is empty. - La forma dell'oggetto selezionato è vuota. + + + + + The shape of the selected object is empty. + La forma dell'oggetto selezionato è vuota. - The shape of the selected object is not a wire. - La forma dell'oggetto selezionato non è un filo. + + + + + The shape of the selected object is not a wire. + La forma dell'oggetto selezionato non è un filo. - Select an edge, face or body. Only one body is allowed. - Selezionare uno spigolo, una faccia o un corpo. È consentito un solo corpo. + + + Select an edge, face or body. Only one body is allowed. + Selezionare uno spigolo, una faccia o un corpo. È consentito un solo corpo. - Wrong object type - Tipo di oggetto errato + + + Wrong object type + Tipo di oggetto errato - Fillet works only on parts - Il raccordo funziona solo sulle parti + + Fillet works only on parts + Il raccordo funziona solo sulle parti - No Support - Nessun supporto + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Nessun supporto + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Lo sketch deve avere un supporto per la feature di tasca. + Lo sketch deve avere un supporto per la feature di tasca. Creare lo sketch su una faccia. - - Edit pad - Modifica estrusione + + Edit pad + Modifica estrusione - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - Una finestra di dialogo è già aperto nel pannello attività + + + + + + + A dialog is already open in the task panel + Una finestra di dialogo è già aperto nel pannello attività - Do you want to close this dialog? - Vuoi per chiudere questa finestra? + + + + + + + Do you want to close this dialog? + Vuoi per chiudere questa finestra? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Part Design + + Part Design + Part Design - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ja.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ja.ts index 6fa3ca8aa..c0b3869d4 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ja.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ja.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - 部品 + Part + 部品 - Chamfer... - 面取り... + Chamfer... + 面取り... - Chamfer the selected edges of a shape - Chamfer the selected edges of a shape + + PartDesign + PartDesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Chamfer the selected edges of a shape + + + CmdPartDesignFillet - PartDesign - PartDesign + + PartDesign + PartDesign - Fillet - フィレット + + Fillet + フィレット - Make a fillet on an edge, face or body - Make a fillet on an edge, face or body + + Make a fillet on an edge, face or body + Make a fillet on an edge, face or body - - + + + CmdPartDesignGroove + + + PartDesign + PartDesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - PartDesign + + PartDesign + PartDesign - Pad - Pad + + Pad + Pad - Pad a selected sketch - Pad a selected sketch + + Pad a selected sketch + Pad a selected sketch - - + + CmdPartDesignPocket - PartDesign - PartDesign + + PartDesign + PartDesign - Pocket - Pocket + + Pocket + Pocket - create a pocket with the selected sketch - create a pocket with the selected sketch + + create a pocket with the selected sketch + create a pocket with the selected sketch - - + + CmdPartDesignRevolution - PartDesign - PartDesign + + PartDesign + PartDesign - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Edges to chamfer + Edges to chamfer + Edges to chamfer - Start distance - Start distance + Start distance + Start distance - End distance - End distance + End distance + End distance - Edge%1 - Edge%1 + Edge%1 + Edge%1 - Distance - 距離 + Distance + 距離 - No shape selected - 図形が選択されていません + No shape selected + 図形が選択されていません - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - No edge selected - エッジが選択されていません + No edge selected + エッジが選択されていません - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Chamfer Edges + Chamfer Edges + Chamfer Edges - Shape - 図形 + Shape + 図形 - Selected shape: - Selected shape: + Selected shape: + Selected shape: - No selection - No selection + No selection + No selection - Chamfer Parameter - 面取りパラメータ + Chamfer Parameter + 面取りパラメータ - All - すべて + All + すべて - None - なし + None + なし - Chamfer type: - 面取りの種類: + Chamfer type: + 面取りの種類: - Constant Distance - Constant Distance + Constant Distance + Constant Distance - Variable Distance - 可変距離 + Variable Distance + 可変距離 - Distance: - 距離: + Distance: + 距離: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Form + + + + Size: + サイズ: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Form + + Form + Form - Radius: - 半径: + + Radius: + 半径: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Form + + + + Axis: + 軸: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + 角度: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Form + + Form + Form - Type: - Type: + + Type: + Type: - Dimension - 寸法 + + Dimension + 寸法 - Up to last - Up to last + + Up to last + Up to last - Up to first - Up to first + + Up to first + Up to first - Size: - サイズ: + + Size: + サイズ: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Form + + Form + Form - Type: - Type: + + Type + - Dimension - 寸法 + + Length + Length - Length: - Length: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - ディスプレイモード: + Type: + Type: - Plot mode: - プロットモード: + + + Dimension + 寸法 - Point size: - 点の大きさ: + Length: + Length: - Line width: - 線幅: + Mirrored extent + Mirrored extent - Transparency: - 透明度: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + ディスプレイモード: - - Pad parameters - Pad parameters + Plot mode: + プロットモード: - - + + Point size: + 点の大きさ: + + + Line width: + 線幅: + + + Transparency: + 透明度: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Form + + Form + Form - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Form + + Form + Form - Type: - Type: + Type: + Type: - Dimension - 寸法 + + Type + - Length - Length + + + Dimension + 寸法 - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Form + + Form + Form - Axis: - 軸: + + Axis: + 軸: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - 角度: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + 角度: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - 誤った選択 + + + + + + + + + + + + + + + + + + + Wrong selection + 誤った選択 - Select a sketch or 2D object. - スケッチ・2Dオブジェクトを選択. + + + + + Select a sketch or 2D object. + スケッチ・2Dオブジェクトを選択. - The shape of the selected object is empty. - The shape of the selected object is empty. + + + + + The shape of the selected object is empty. + The shape of the selected object is empty. - The shape of the selected object is not a wire. - The shape of the selected object is not a wire. + + + + + The shape of the selected object is not a wire. + The shape of the selected object is not a wire. - Select an edge, face or body. Only one body is allowed. - Select an edge, face or body. Only one body is allowed. + + + Select an edge, face or body. Only one body is allowed. + Select an edge, face or body. Only one body is allowed. - Wrong object type - Wrong object type + + + Wrong object type + Wrong object type - Fillet works only on parts - Fillet works only on parts + + Fillet works only on parts + Fillet works only on parts - No Support - No Support + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + No Support + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - The sketch has to have a support for the pocket feature. + The sketch has to have a support for the pocket feature. Create the sketch on a face. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Part Design + + Part Design + Part Design - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_nl.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_nl.ts index 9623175da..8776ea015 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_nl.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_nl.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - Onderdeel + Part + Onderdeel - Chamfer... - Afschuining ... + Chamfer... + Afschuining ... - Chamfer the selected edges of a shape - Afschuining van de geselecteerde randen van een vorm + + PartDesign + Onderdeel-ontwerp - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Afschuining van de geselecteerde randen van een vorm + + + CmdPartDesignFillet - PartDesign - Onderdeel-ontwerp + + PartDesign + Onderdeel-ontwerp - Fillet - Afronding + + Fillet + Afronding - Make a fillet on an edge, face or body - Maak een filet op een rand, vlak of lichaam + + Make a fillet on an edge, face or body + Maak een filet op een rand, vlak of lichaam - - + + + CmdPartDesignGroove + + + PartDesign + Onderdeel-ontwerp + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Onderdeel-ontwerp + + PartDesign + Onderdeel-ontwerp - Pad - Pad + + Pad + Pad - Pad a selected sketch - Pad a selected sketch + + Pad a selected sketch + Pad a selected sketch - - + + CmdPartDesignPocket - PartDesign - Onderdeel-ontwerp + + PartDesign + Onderdeel-ontwerp - Pocket - Uitsparing + + Pocket + Uitsparing - create a pocket with the selected sketch - Creëer een uitspring met de geselecteerde schets + + create a pocket with the selected sketch + Creëer een uitspring met de geselecteerde schets - - + + CmdPartDesignRevolution - PartDesign - Onderdeel-ontwerp + + PartDesign + Onderdeel-ontwerp - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Randen om af te schuinen + Edges to chamfer + Randen om af te schuinen - Start distance - Start op afstand + Start distance + Start op afstand - End distance - Eindafstand + End distance + Eindafstand - Edge%1 - Rand%1 + Edge%1 + Rand%1 - Distance - Afstand + Distance + Afstand - No shape selected - Geen vorm geselecteerd + No shape selected + Geen vorm geselecteerd - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Geen geldige vorm geselecteerd. + Geen geldige vorm geselecteerd. Selecteer eerst een geldige vorm in het uitklap-scherm. - No edge selected - Geen rand geselecteerd + No edge selected + Geen rand geselecteerd - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Geen rand is geselecteerd om af te ronden. + Geen rand is geselecteerd om af te ronden. Gelieve eerst één of meerdere randen te selecteren. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Afschuinen Randen + Chamfer Edges + Afschuinen Randen - Shape - Vorm + Shape + Vorm - Selected shape: - Geselecteerde vorm: + Selected shape: + Geselecteerde vorm: - No selection - Geen selectie + No selection + Geen selectie - Chamfer Parameter - Afschuin-parameter + Chamfer Parameter + Afschuin-parameter - All - Alle + All + Alle - None - Geen + None + Geen - Chamfer type: - Afschuin type: + Chamfer type: + Afschuin type: - Constant Distance - Constante afstand + Constant Distance + Constante afstand - Variable Distance - Variabele afstand + Variable Distance + Variabele afstand - Distance: - Afstand: + Distance: + Afstand: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Vorm + + + + Size: + Grootte: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Vorm + + Form + Vorm - Radius: - Straal: + + Radius: + Straal: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Vorm + + + + Axis: + Assen: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Hoek: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Vorm + + Form + Vorm - Type: - Type: + + Type: + Type: - Dimension - Afmeting + + Dimension + Afmeting - Up to last - Naar de laatste + + Up to last + Naar de laatste - Up to first - Up to first + + Up to first + Up to first - Size: - Grootte: + + Size: + Grootte: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Vorm + + Form + Vorm - Type: - Type: + + Type + - Dimension - Afmeting + + Length + Length - Length: - Lengte: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Weergavemodus: + Type: + Type: - Plot mode: - Plot modus: + + + Dimension + Afmeting - Point size: - Puntgrootte: + Length: + Lengte: - Line width: - Lijndikte: + Mirrored extent + Mirrored extent - Transparency: - Transparantie: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Weergavemodus: - - Pad parameters - Pad parameters + Plot mode: + Plot modus: - - + + Point size: + Puntgrootte: + + + Line width: + Lijndikte: + + + Transparency: + Transparantie: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Vorm + + Form + Vorm - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Vorm + + Form + Vorm - Type: - Type: + Type: + Type: - Dimension - Afmeting + + Type + - Length - Length + + + Dimension + Afmeting - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Vorm + + Form + Vorm - Axis: - Assen: + + Axis: + Assen: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Hoek: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Hoek: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Verkeerde selectie + + + + + + + + + + + + + + + + + + + Wrong selection + Verkeerde selectie - Select a sketch or 2D object. - Selecteer een schets of 2D-object. + + + + + Select a sketch or 2D object. + Selecteer een schets of 2D-object. - The shape of the selected object is empty. - De vorm van het geselecteerde object is leeg. + + + + + The shape of the selected object is empty. + De vorm van het geselecteerde object is leeg. - The shape of the selected object is not a wire. - De vorm van het geselecteerde object is geen draad. + + + + + The shape of the selected object is not a wire. + De vorm van het geselecteerde object is geen draad. - Select an edge, face or body. Only one body is allowed. - Selecteer een rand, vlak of lichaam. Slechts één lichaam is toegestaan. + + + Select an edge, face or body. Only one body is allowed. + Selecteer een rand, vlak of lichaam. Slechts één lichaam is toegestaan. - Wrong object type - Verkeerde objecttype + + + Wrong object type + Verkeerde objecttype - Fillet works only on parts - Afrondingen werken alleen op onderdelen + + Fillet works only on parts + Afrondingen werken alleen op onderdelen - No Support - Geen ondersteuning + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Geen ondersteuning + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - De schets heeft een ondersteuning voor de uitsparingsfunctie nodig. + De schets heeft een ondersteuning voor de uitsparingsfunctie nodig. Creëer de schets op een vlak. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Onderdelen ontwerp + + Part Design + Onderdelen ontwerp - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_no.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_no.ts index 64c8f7b0d..165088f41 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_no.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_no.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - Komponent + Part + Komponent - Chamfer... - Fas... + Chamfer... + Fas... - Chamfer the selected edges of a shape - Faser valgte kanter på en figur + + PartDesign + Komponentdesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Faser valgte kanter på en figur + + + CmdPartDesignFillet - PartDesign - Komponentdesign + + PartDesign + Komponentdesign - Fillet - Avrunding + + Fillet + Avrunding - Make a fillet on an edge, face or body - Lag avrunding på en kant, flate eller komponent + + Make a fillet on an edge, face or body + Lag avrunding på en kant, flate eller komponent - - + + + CmdPartDesignGroove + + + PartDesign + Komponentdesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Komponentdesign + + PartDesign + Komponentdesign - Pad - Legg ut + + Pad + Legg ut - Pad a selected sketch - Legg ut en valgt skisse + + Pad a selected sketch + Legg ut en valgt skisse - - + + CmdPartDesignPocket - PartDesign - Komponentdesign + + PartDesign + Komponentdesign - Pocket - Lomme + + Pocket + Lomme - create a pocket with the selected sketch - lag en lomme med valgte skisse + + create a pocket with the selected sketch + lag en lomme med valgte skisse - - + + CmdPartDesignRevolution - PartDesign - Komponentdesign + + PartDesign + Komponentdesign - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Kanter som skal fases + Edges to chamfer + Kanter som skal fases - Start distance - Startavstand + Start distance + Startavstand - End distance - Sluttavstand + End distance + Sluttavstand - Edge%1 - Kant%1 + Edge%1 + Kant%1 - Distance - Avstand + Distance + Avstand - No shape selected - Ingen figur er merket + No shape selected + Ingen figur er merket - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Ingen gyldig figur er valgt. + Ingen gyldig figur er valgt. Vennligst velg en gyldig figur i rullgardina først. - No edge selected - Ingen kant er valgt + No edge selected + Ingen kant er valgt - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Ingen kanter merket for fasing. + Ingen kanter merket for fasing. Merk en eller flere kanter først. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Fas kanter + Chamfer Edges + Fas kanter - Shape - Figur + Shape + Figur - Selected shape: - Valgt figur: + Selected shape: + Valgt figur: - No selection - Ingen valg + No selection + Ingen valg - Chamfer Parameter - Fasningsparameter + Chamfer Parameter + Fasningsparameter - All - Alle + All + Alle - None - Ingen + None + Ingen - Chamfer type: - Fastype: + Chamfer type: + Fastype: - Constant Distance - Konstant avstand + Constant Distance + Konstant avstand - Variable Distance - Variabel avstand + Variable Distance + Variabel avstand - Distance: - Avstand: + Distance: + Avstand: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Skjema + + + + Size: + Størrelse: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Skjema + + Form + Skjema - Radius: - Radius: + + Radius: + Radius: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Skjema + + + + Axis: + Akse: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Vinkel: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Skjema + + Form + Skjema - Type: - Type: + + Type: + Type: - Dimension - Dimensjon + + Dimension + Dimensjon - Up to last - Opp til siste + + Up to last + Opp til siste - Up to first - Up to first + + Up to first + Up to first - Size: - Størrelse: + + Size: + Størrelse: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Skjema + + Form + Skjema - Type: - Type: + + Type + - Dimension - Dimensjon + + Length + Length - Length: - Lengde: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Visningsmodus: + Type: + Type: - Plot mode: - Plottmodus: + + + Dimension + Dimensjon - Point size: - Punktstørrelse: + Length: + Lengde: - Line width: - Linjebredde: + Mirrored extent + Mirrored extent - Transparency: - Gjennomsiktighet: + + Reversed + Reversed - TaskPadParameters - Oppgavepadparametere + Display mode: + Visningsmodus: - - Pad parameters - Pad parameters + Plot mode: + Plottmodus: - - + + Point size: + Punktstørrelse: + + + Line width: + Linjebredde: + + + Transparency: + Gjennomsiktighet: + + + TaskPadParameters + Oppgavepadparametere + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Skjema + + Form + Skjema - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Skjema + + Form + Skjema - Type: - Type: + Type: + Type: - Dimension - Dimensjon + + Type + - Length - Length + + + Dimension + Dimensjon - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Skjema + + Form + Skjema - Axis: - Akse: + + Axis: + Akse: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Vinkel: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Vinkel: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Feil valg + + + + + + + + + + + + + + + + + + + Wrong selection + Feil valg - Select a sketch or 2D object. - Velg en skisse eller 2D-objekt. + + + + + Select a sketch or 2D object. + Velg en skisse eller 2D-objekt. - The shape of the selected object is empty. - Formen på det valgte objektet er tom. + + + + + The shape of the selected object is empty. + Formen på det valgte objektet er tom. - The shape of the selected object is not a wire. - Formen på det valgte objektet er ikke en tråd. + + + + + The shape of the selected object is not a wire. + Formen på det valgte objektet er ikke en tråd. - Select an edge, face or body. Only one body is allowed. - Velg en kant, flate eller komponent. Kun en komponent er tillatt. + + + Select an edge, face or body. Only one body is allowed. + Velg en kant, flate eller komponent. Kun en komponent er tillatt. - Wrong object type - Feil objekttype + + + Wrong object type + Feil objekttype - Fillet works only on parts - Avrunding fungerer bare på komponenter + + Fillet works only on parts + Avrunding fungerer bare på komponenter - No Support - Ingen støtte + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Ingen støtte + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Skisse må ha støtte for lommefunksjonen. + Skisse må ha støtte for lommefunksjonen. Opprett skisse på en flate. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Komponentdesign + + Part Design + Komponentdesign - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pl.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pl.ts index 9d7536c1a..eb19fde67 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pl.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pl.ts @@ -1,460 +1,767 @@ - - + + CmdPartDesignChamfer - - Part - Część + Part + Część - Chamfer... - Fazowanie ... + Chamfer... + Fazowanie ... - Chamfer the selected edges of a shape - Fazowanie zaznaczonych krawędzi kształtu + + PartDesign + PartDesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Fazowanie zaznaczonych krawędzi kształtu + + + CmdPartDesignFillet - PartDesign - PartDesign + + PartDesign + PartDesign - Fillet - Zaokrąglenie + + Fillet + Zaokrąglenie - Make a fillet on an edge, face or body - Utwórz zaokrąglenia na krawędzi, powierzchni lub bryle + + Make a fillet on an edge, face or body + Utwórz zaokrąglenia na krawędzi, powierzchni lub bryle - - + + + CmdPartDesignGroove + + + PartDesign + PartDesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - PartDesign + + PartDesign + PartDesign - Pad - Wyciągnięcie + + Pad + Wyciągnięcie - Pad a selected sketch - Wyciągnij wybrany szkic + + Pad a selected sketch + Wyciągnij wybrany szkic - - + + CmdPartDesignPocket - PartDesign - PartDesign + + PartDesign + PartDesign - Pocket - Kieszeń + + Pocket + Kieszeń - create a pocket with the selected sketch - Utwórz kieszeń z wybranego szkicu + + create a pocket with the selected sketch + Utwórz kieszeń z wybranego szkicu - - + + CmdPartDesignRevolution - PartDesign - PartDesign + + PartDesign + PartDesign - Revolution - Obrót + + Revolution + Obrót - Revolve a selected sketch - Obróć zaznaczony szkic + + Revolve a selected sketch + Obróć zaznaczony szkic - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Krawędzie do fazowania + Edges to chamfer + Krawędzie do fazowania - Start distance - Odległość początkowa + Start distance + Odległość początkowa - End distance - Odległość końcowa + End distance + Odległość końcowa - Edge%1 - Krawędź%1 + Edge%1 + Krawędź%1 - Distance - Odległość + Distance + Odległość - No shape selected - Brak wybranego kształtu + No shape selected + Brak wybranego kształtu - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Wybrany kształt nie jest prawidłowy. Wybierz prawidłowy kształt + Wybrany kształt nie jest prawidłowy. Wybierz prawidłowy kształt - No edge selected - Nie wybrano krawędzi + No edge selected + Nie wybrano krawędzi - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Nie zaznaczono krawędzi do sfazowania. Zaznacz wcześniej jedną lub więcej krawędzi. + Nie zaznaczono krawędzi do sfazowania. Zaznacz wcześniej jedną lub więcej krawędzi. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Fazowanie krawędzi + Chamfer Edges + Fazowanie krawędzi - Shape - Kształt + Shape + Kształt - Selected shape: - Wybrany kształt: + Selected shape: + Wybrany kształt: - No selection - Brak zaznaczenia + No selection + Brak zaznaczenia - Chamfer Parameter - Parametr fazy + Chamfer Parameter + Parametr fazy - All - Wszystkie + All + Wszystkie - None - Brak + None + Brak - Chamfer type: - Typ fazowania: + Chamfer type: + Typ fazowania: - Constant Distance - Stała odległość + Constant Distance + Stała odległość - Variable Distance - Zmienna odległość + Variable Distance + Zmienna odległość - Distance: - Odległość: + Distance: + Odległość: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Formularz + + + + Size: + Rozmiar: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Formularz + + Form + Formularz - Radius: - Promień: + + Radius: + Promień: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Formularz + + + + Axis: + Oś: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Kąt: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Formularz + + Form + Formularz - Type: - Typ: + + Type: + Typ: - Dimension - Wymiar + + Dimension + Wymiar - Up to last - Do ostatniego + + Up to last + Do ostatniego - Up to first - Up to first + + Up to first + Up to first - Size: - Rozmiar: + + Size: + Rozmiar: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Formularz + + Form + Formularz - Type: - Typ: + + Type + - Dimension - Wymiar + + Length + Length - Length: - Długość: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Tryb wyświetlania: + Type: + Typ: - Plot mode: - Tryb rysowania: + + + Dimension + Wymiar - Point size: - Rozmiar punktu: + Length: + Długość: - Line width: - Szerokość linii: + Mirrored extent + Mirrored extent - Transparency: - Przezroczystość: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Tryb wyświetlania: - - Pad parameters - Pad parameters + Plot mode: + Tryb rysowania: - - + + Point size: + Rozmiar punktu: + + + Line width: + Szerokość linii: + + + Transparency: + Przezroczystość: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Formularz + + Form + Formularz - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Numer1: + + Number1: + Numer1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Formularz + + Form + Formularz - Type: - Typ: + Type: + Typ: - Dimension - Wymiar + + Type + - Length - Length + + + Dimension + Wymiar - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Formularz + + Form + Formularz - Axis: - Oś: + + Axis: + Oś: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Kąt: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Kąt: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Niewłaściwy wybór + + + + + + + + + + + + + + + + + + + Wrong selection + Niewłaściwy wybór - Select a sketch or 2D object. - Wybierz szkic lub obiekt 2D. + + + + + Select a sketch or 2D object. + Wybierz szkic lub obiekt 2D. - The shape of the selected object is empty. - The shape of the selected object is empty. + + + + + The shape of the selected object is empty. + The shape of the selected object is empty. - The shape of the selected object is not a wire. - The shape of the selected object is not a wire. + + + + + The shape of the selected object is not a wire. + The shape of the selected object is not a wire. - Select an edge, face or body. Only one body is allowed. - Wybierz krawędź, powierzchnię lub bryłę. Tylko jedna bryłą jest dozwolona. + + + Select an edge, face or body. Only one body is allowed. + Wybierz krawędź, powierzchnię lub bryłę. Tylko jedna bryłą jest dozwolona. - Wrong object type - Niewłaściwy typ obiektu + + + Wrong object type + Niewłaściwy typ obiektu - Fillet works only on parts - Zaokrąglenie działa tylko na częściach + + Fillet works only on parts + Zaokrąglenie działa tylko na częściach - No Support - Brak obsługi + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Brak obsługi + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Szkic musi mieć bazę dla kieszeni, Utwórz szkic na powierzchni. + Szkic musi mieć bazę dla kieszeni, Utwórz szkic na powierzchni. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Part Design + + Part Design + Part Design - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pt.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pt.ts index 2fc716be3..3de7d866c 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pt.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_pt.ts @@ -1,461 +1,768 @@ - - + + CmdPartDesignChamfer - - Part - Parte + Part + Parte - Chamfer... - Chanfro... + Chamfer... + Chanfro... - Chamfer the selected edges of a shape - Chanfra as arestas selecionadas de uma forma + + PartDesign + PartDesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Chanfra as arestas selecionadas de uma forma + + + CmdPartDesignFillet - PartDesign - PartDesign + + PartDesign + PartDesign - Fillet - Filete + + Fillet + Filete - Make a fillet on an edge, face or body - Fazer um filete em uma aresta, face ou sólido + + Make a fillet on an edge, face or body + Fazer um filete em uma aresta, face ou sólido - - + + + CmdPartDesignGroove + + + PartDesign + PartDesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - PartDesign + + PartDesign + PartDesign - Pad - Pad + + Pad + Pad - Pad a selected sketch - Preencher um esboço selecionado + + Pad a selected sketch + Preencher um esboço selecionado - - + + CmdPartDesignPocket - PartDesign - PartDesign + + PartDesign + PartDesign - Pocket - Pocket + + Pocket + Pocket - create a pocket with the selected sketch - Cria um pocket (bolso) a partir do esboço selecionado + + create a pocket with the selected sketch + Cria um pocket (bolso) a partir do esboço selecionado - - + + CmdPartDesignRevolution - PartDesign - PartDesign + + PartDesign + PartDesign - Revolution - Revolução + + Revolution + Revolução - Revolve a selected sketch - Revolver um esboço selecionado + + Revolve a selected sketch + Revolver um esboço selecionado - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Ferramentas de faces + + Face tools + Ferramentas de faces - Sketch tools - Ferramentas de esboço + + Sketch tools + Ferramentas de esboço - Create Geometry - Criar geometria + + Create Geometry + Criar geometria - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Arestas para chanfrar + Edges to chamfer + Arestas para chanfrar - Start distance - Distância inicial + Start distance + Distância inicial - End distance - Distância final + End distance + Distância final - Edge%1 - Aresta %1 + Edge%1 + Aresta %1 - Distance - Distância + Distance + Distância - No shape selected - Nenhuma forma foi selecionada + No shape selected + Nenhuma forma foi selecionada - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Nenhuma forma válida é selecionada Selecione primeiro uma forma válida na caixa drop-down. + Nenhuma forma válida é selecionada Selecione primeiro uma forma válida na caixa drop-down. - No edge selected - Nenhuma aresta selecionada + No edge selected + Nenhuma aresta selecionada - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Nenhuma aresta está marcada para fazer um chanfro. + Nenhuma aresta está marcada para fazer um chanfro. Selecione primeiro uma ou mais arestas. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Chanfrar arestas + Chamfer Edges + Chanfrar arestas - Shape - Forma + Shape + Forma - Selected shape: - Forma selecionada: + Selected shape: + Forma selecionada: - No selection - Nenhuma seleção + No selection + Nenhuma seleção - Chamfer Parameter - Parâmetro de chanfro + Chamfer Parameter + Parâmetro de chanfro - All - Todos + All + Todos - None - Nenhum + None + Nenhum - Chamfer type: - Tipo do chanfro: + Chamfer type: + Tipo do chanfro: - Constant Distance - Distância constante + Constant Distance + Distância constante - Variable Distance - Distância variável + Variable Distance + Distância variável - Distance: - Distância: + Distance: + Distância: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Forma + + + + Size: + Tamanho: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Erro de entrada + + Input error + Erro de entrada - - + + PartDesignGui::TaskFilletParameters - - Form - Forma + + Form + Forma - Radius: - Raio: + + Radius: + Raio: - - Fillet parameters - Parâmetros de fileto + + Fillet parameters + Parâmetros de fileto - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Forma + + + + Axis: + Eixo: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Ângulo: + + + + Symmetric to plane + + + + + Reversed + Invertido + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Forma + + Form + Forma - Type: - Tipo: + + Type: + Tipo: - Dimension - Dimensão + + Dimension + Dimensão - Up to last - Até o último + + Up to last + Até o último - Up to first - Até o primeiro + + Up to first + Até o primeiro - Size: - Tamanho: + + Size: + Tamanho: - - TaskHoleParameters - Parâmetros do TaskHole + + TaskHoleParameters + Parâmetros do TaskHole - - + + PartDesignGui::TaskPadParameters - - Form - Forma + + Form + Forma - Type: - Tipo: + + Type + - Dimension - Dimensão + + Length + Comprimento - Length: - Comprimento: + + Symmetric to plane + - Mirrored extent - Extensão espelhada + + 2nd length + - Reversed - Invertido + + + Face + - Display mode: - Modo de exibição: + Type: + Tipo: - Plot mode: - Modo de plotagem: + + + Dimension + Dimensão - Point size: - Tamanho de ponto: + Length: + Comprimento: - Line width: - Largura da linha: + Mirrored extent + Extensão espelhada - Transparency: - Transparência: + + Reversed + Invertido - TaskPadParameters - Parametros do TaskPad + Display mode: + Modo de exibição: - - Pad parameters - Parâmetros do Pad + Plot mode: + Modo de plotagem: - - + + Point size: + Tamanho de ponto: + + + Line width: + Largura da linha: + + + Transparency: + Transparência: + + + TaskPadParameters + Parametros do TaskPad + + + + Pad parameters + Parâmetros do Pad + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Forma + + Form + Forma - Spacing1: - Espaço1: + + Spacing1: + Espaço1: - Number1: - Número1: + + Number1: + Número1: - Second extend - Segunda extensão + + Second extend + Segunda extensão - Spacing2: - Espaço2: + + Spacing2: + Espaço2: - Number2: - Numero2: + + Number2: + Numero2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Forma + + Form + Forma - Type: - Tipo: + Type: + Tipo: - Dimension - Dimensão + + Type + - Length - Comprimento + + + Dimension + Dimensão - - Pocket parameters - Parâmetros do bolso + + + Face + - - + + + Length + Comprimento + + + + Pocket parameters + Parâmetros do bolso + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Forma + + Form + Forma - Axis: - Eixo: + + Axis: + Eixo: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Ângulo: + + Symmetric to plane + - - Revolution parameters - Parâmetros de revolução + + Reversed + Invertido - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Ângulo: + + + + Revolution parameters + Parâmetros de revolução + + + QObject - - Wrong selection - Seleção errada + + + + + + + + + + + + + + + + + + + Wrong selection + Seleção errada - Select a sketch or 2D object. - Selecione um desenho ou objeto 2D. + + + + + Select a sketch or 2D object. + Selecione um desenho ou objeto 2D. - The shape of the selected object is empty. - A forma do objeto selecionado está vazia. + + + + + The shape of the selected object is empty. + A forma do objeto selecionado está vazia. - The shape of the selected object is not a wire. - A forma do objeto selecionado não é um fio. + + + + + The shape of the selected object is not a wire. + A forma do objeto selecionado não é um fio. - Select an edge, face or body. Only one body is allowed. - Selecione uma aresta, face ou corpo. Apenas um corpo é permitido. + + + Select an edge, face or body. Only one body is allowed. + Selecione uma aresta, face ou corpo. Apenas um corpo é permitido. - Wrong object type - Tipo de objeto errado + + + Wrong object type + Tipo de objeto errado - Fillet works only on parts - Filete só funciona em partes + + Fillet works only on parts + Filete só funciona em partes - No Support - Sem suporte + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Sem suporte + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - O esboço tem que ter um suporte para fazer um Pocket. Crie o esboço em cima de uma face. + O esboço tem que ter um suporte para fazer um Pocket. Crie o esboço em cima de uma face. - - Edit pad - Editar pad + + Edit pad + Editar pad - - Edit pocket - Editar o bolso + + + + Edit pocket + Editar o bolso - A dialog is already open in the task panel - Uma caixa de diálogo já está aberta no painel de tarefas + + + + + + + A dialog is already open in the task panel + Uma caixa de diálogo já está aberta no painel de tarefas - Do you want to close this dialog? - Deseja fechar este diálogo? + + + + + + + Do you want to close this dialog? + Deseja fechar este diálogo? - - Edit revolution - Editar revolução + + Edit revolution + Editar revolução - - + + + Edit Groove + + + + Workbench - - Part Design - Part Design + + Part Design + Part Design - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ru.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ru.ts index 1557d71b2..99629b12d 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ru.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_ru.ts @@ -1,462 +1,769 @@ - - + + CmdPartDesignChamfer - - Part - Деталь + Part + Деталь - Chamfer... - Фаска... + Chamfer... + Фаска... - Chamfer the selected edges of a shape - Притупитьт фаской выбранные края фигуры + + PartDesign + PartDesign - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Притупитьт фаской выбранные края фигуры + + + CmdPartDesignFillet - PartDesign - PartDesign + + PartDesign + PartDesign - Fillet - Скругление + + Fillet + Скругление - Make a fillet on an edge, face or body - Сделать скругление кромки, поверхности или тела + + Make a fillet on an edge, face or body + Сделать скругление кромки, поверхности или тела - - + + + CmdPartDesignGroove + + + PartDesign + PartDesign + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - PartDesign + + PartDesign + PartDesign - Pad - Заполнитель + + Pad + Заполнитель - Pad a selected sketch - Заполнитель выбранного эскиза + + Pad a selected sketch + Заполнитель выбранного эскиза - - + + CmdPartDesignPocket - PartDesign - PartDesign + + PartDesign + PartDesign - Pocket - Документ + + Pocket + Документ - create a pocket with the selected sketch - создать документ с выбранным эскизом + + create a pocket with the selected sketch + создать документ с выбранным эскизом - - + + CmdPartDesignRevolution - PartDesign - PartDesign + + PartDesign + PartDesign - Revolution - Вращение + + Revolution + Вращение - Revolve a selected sketch - Вращать, выбранный эскиз + + Revolve a selected sketch + Вращать, выбранный эскиз - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Инструменты редактирования граней + + Face tools + Инструменты редактирования граней - Sketch tools - Инструменты эскиза + + Sketch tools + Инструменты эскиза - Create Geometry - Создайте геометрию + + Create Geometry + Создайте геометрию - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Края среза + Edges to chamfer + Края среза - Start distance - Начало расстояния + Start distance + Начало расстояния - End distance - Конец расстояния + End distance + Конец расстояния - Edge%1 - Край %1 + Edge%1 + Край %1 - Distance - Расстояние + Distance + Расстояние - No shape selected - Форма не выбрана + No shape selected + Форма не выбрана - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Допустимая форма не выбрана. + Допустимая форма не выбрана. Пожалуйста сначала выберите допустимую форму в выпадающем списке. - No edge selected - Ребра не выбраны + No edge selected + Ребра не выбраны - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Нельзя сгладить край обьекта. Пожалуйста, выберите края обьекта, один или более. + Нельзя сгладить край обьекта. Пожалуйста, выберите края обьекта, один или более. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Притупить ребра фаской + Chamfer Edges + Притупить ребра фаской - Shape - Форма + Shape + Форма - Selected shape: - Выбранные формы: + Selected shape: + Выбранные формы: - No selection - Нет выбора + No selection + Нет выбора - Chamfer Parameter - Параметры фаски + Chamfer Parameter + Параметры фаски - All - Все + All + Все - None - Ничего + None + Ничего - Chamfer type: - Тип фаски: + Chamfer type: + Тип фаски: - Constant Distance - Постоянное расстояние + Constant Distance + Постоянное расстояние - Variable Distance - Переменное расстояние + Variable Distance + Переменное расстояние - Distance: - Расстояние: + Distance: + Расстояние: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Форма + + + + Size: + Размер: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Форма + + Form + Форма - Radius: - Радиус: + + Radius: + Радиус: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Форма + + + + Axis: + Оси: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Угол: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Форма + + Form + Форма - Type: - Тип: + + Type: + Тип: - Dimension - Размер + + Dimension + Размер - Up to last - До последнего + + Up to last + До последнего - Up to first - До первого + + Up to first + До первого - Size: - Размер: + + Size: + Размер: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Форма + + Form + Форма - Type: - Тип: + + Type + - Dimension - Размер + + Length + Length - Length: - Длина: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Режим отображения: + Type: + Тип: - Plot mode: - Режим вывода на печать: + + + Dimension + Размер - Point size: - Размер точки: + Length: + Длина: - Line width: - Толщина линии: + Mirrored extent + Mirrored extent - Transparency: - Прозрачность: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Режим отображения: - - Pad parameters - Параметры панели + Plot mode: + Режим вывода на печать: - - + + Point size: + Размер точки: + + + Line width: + Толщина линии: + + + Transparency: + Прозрачность: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Параметры панели + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Форма + + Form + Форма - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Форма + + Form + Форма - Type: - Тип: + Type: + Тип: - Dimension - Размер + + Type + - Length - Length + + + Dimension + Размер - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Форма + + Form + Форма - Axis: - Оси: + + Axis: + Оси: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Угол: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Угол: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Неправильный выбор + + + + + + + + + + + + + + + + + + + Wrong selection + Неправильный выбор - Select a sketch or 2D object. - Выберите эскиз или 2D объект. + + + + + Select a sketch or 2D object. + Выберите эскиз или 2D объект. - The shape of the selected object is empty. - Форма выбранного объекта пуста. + + + + + The shape of the selected object is empty. + Форма выбранного объекта пуста. - The shape of the selected object is not a wire. - Форма выбранного объекта не проволока. + + + + + The shape of the selected object is not a wire. + Форма выбранного объекта не проволока. - Select an edge, face or body. Only one body is allowed. - Выберите ребро, поверхность или тело. Допускается выбирать только одно тело. + + + Select an edge, face or body. Only one body is allowed. + Выберите ребро, поверхность или тело. Допускается выбирать только одно тело. - Wrong object type - Неверный тип объекта + + + Wrong object type + Неверный тип объекта - Fillet works only on parts - Скругление работает только для деталей + + Fillet works only on parts + Скругление работает только для деталей - No Support - Не поддерживается + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Не поддерживается + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Эскиз должен иметь основу для создания кармана. + Эскиз должен иметь основу для создания кармана. Создайте эскиз на лицевой стороне тела. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - Диалог уже открыт в панели задач + + + + + + + A dialog is already open in the task panel + Диалог уже открыт в панели задач - Do you want to close this dialog? - Вы хотите закрыть этот диалог? + + + + + + + Do you want to close this dialog? + Вы хотите закрыть этот диалог? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Дизайн части + + Part Design + Дизайн части - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_se.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_se.ts index b6470b38b..3e1244c5f 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_se.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_se.ts @@ -1,462 +1,769 @@ - - + + CmdPartDesignChamfer - - Part - Del + Part + Del - Chamfer... - Avfasning... + Chamfer... + Avfasning... - Chamfer the selected edges of a shape - Fasa de markerade kanterna av en form + + PartDesign + Del design - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Fasa de markerade kanterna av en form + + + CmdPartDesignFillet - PartDesign - Del design + + PartDesign + Del design - Fillet - Avrundning + + Fillet + Avrundning - Make a fillet on an edge, face or body - Gör en avrundning på en kant, yta eller kropp + + Make a fillet on an edge, face or body + Gör en avrundning på en kant, yta eller kropp - - + + + CmdPartDesignGroove + + + PartDesign + Del design + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - Del design + + PartDesign + Del design - Pad - Solidifiera + + Pad + Solidifiera - Pad a selected sketch - Solidifiera en vald skiss + + Pad a selected sketch + Solidifiera en vald skiss - - + + CmdPartDesignPocket - PartDesign - Del design + + PartDesign + Del design - Pocket - Ficka + + Pocket + Ficka - create a pocket with the selected sketch - skapa en ficka med den valda skissen + + create a pocket with the selected sketch + skapa en ficka med den valda skissen - - + + CmdPartDesignRevolution - PartDesign - Del design + + PartDesign + Del design - Revolution - Varv + + Revolution + Varv - Revolve a selected sketch - Rotera en vald skiss + + Revolve a selected sketch + Rotera en vald skiss - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Ytverktyg + + Face tools + Ytverktyg - Sketch tools - Skissverktyg + + Sketch tools + Skissverktyg - Create Geometry - Skapa Geometri + + Create Geometry + Skapa Geometri - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Kanter att fasa + Edges to chamfer + Kanter att fasa - Start distance - Startavstånd + Start distance + Startavstånd - End distance - Slutavstånd + End distance + Slutavstånd - Edge%1 - Kant%1 + Edge%1 + Kant%1 - Distance - Distans + Distance + Distans - No shape selected - Ingen form som har valts + No shape selected + Ingen form som har valts - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Ingen giltig form är markerad. + Ingen giltig form är markerad. Välj en giltig form i listrutan först. - No edge selected - Ingen kant vald + No edge selected + Ingen kant vald - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Ingen kant är vald för fasning + Ingen kant är vald för fasning Välj en eller fler kanter först. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Fasa Kanter + Chamfer Edges + Fasa Kanter - Shape - Form + Shape + Form - Selected shape: - Vald form: + Selected shape: + Vald form: - No selection - Inget val + No selection + Inget val - Chamfer Parameter - Fasnings Parameter + Chamfer Parameter + Fasnings Parameter - All - Alla + All + Alla - None - Ingen + None + Ingen - Chamfer type: - Fasningstyp: + Chamfer type: + Fasningstyp: - Constant Distance - Konstant avstånd + Constant Distance + Konstant avstånd - Variable Distance - Variabelt avstånd + Variable Distance + Variabelt avstånd - Distance: - Distans: + Distance: + Distans: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Form + + + + Size: + Storlek: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Form + + Form + Form - Radius: - Radie: + + Radius: + Radie: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Form + + + + Axis: + Axel: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Vinkel: + + + + Symmetric to plane + + + + + Reversed + Omvänd + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Form + + Form + Form - Type: - Typ: + + Type: + Typ: - Dimension - Dimension + + Dimension + Dimension - Up to last - Upp till sista + + Up to last + Upp till sista - Up to first - Fram till första + + Up to first + Fram till första - Size: - Storlek: + + Size: + Storlek: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Form + + Form + Form - Type: - Typ: + + Type + - Dimension - Dimension + + Length + Length - Length: - Längd: + + Symmetric to plane + - Mirrored extent - Speglad utsträckning + + 2nd length + - Reversed - Omvänd + + + Face + - Display mode: - Visningsläge: + Type: + Typ: - Plot mode: - Plottningsläge: + + + Dimension + Dimension - Point size: - Punktstorlek: + Length: + Längd: - Line width: - Linjebredd: + Mirrored extent + Speglad utsträckning - Transparency: - Transparens: + + Reversed + Omvänd - TaskPadParameters - Parametrar för uppgiften Solidifiera + Display mode: + Visningsläge: - - Pad parameters - Pad parametrar + Plot mode: + Plottningsläge: - - + + Point size: + Punktstorlek: + + + Line width: + Linjebredd: + + + Transparency: + Transparens: + + + TaskPadParameters + Parametrar för uppgiften Solidifiera + + + + Pad parameters + Pad parametrar + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Form + + Form + Form - Spacing1: - Mellanrum1: + + Spacing1: + Mellanrum1: - Number1: - Tal1: + + Number1: + Tal1: - Second extend - Andra förlängning + + Second extend + Andra förlängning - Spacing2: - Mellanrum2: + + Spacing2: + Mellanrum2: - Number2: - Nummer2: + + Number2: + Nummer2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Form + + Form + Form - Type: - Typ: + Type: + Typ: - Dimension - Dimension + + Type + - Length - Length + + + Dimension + Dimension - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Form + + Form + Form - Axis: - Axel: + + Axis: + Axel: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Vinkel: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Omvänd - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Vinkel: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Fel val + + + + + + + + + + + + + + + + + + + Wrong selection + Fel val - Select a sketch or 2D object. - Välj en skiss eller 2D-objekt. + + + + + Select a sketch or 2D object. + Välj en skiss eller 2D-objekt. - The shape of the selected object is empty. - Formen på det markerade objektet är tom. + + + + + The shape of the selected object is empty. + Formen på det markerade objektet är tom. - The shape of the selected object is not a wire. - Formen på det markerade objektet är inte en tråd. + + + + + The shape of the selected object is not a wire. + Formen på det markerade objektet är inte en tråd. - Select an edge, face or body. Only one body is allowed. - Välj en kant, yta eller kropp. Endast en kropp är tillåten. + + + Select an edge, face or body. Only one body is allowed. + Välj en kant, yta eller kropp. Endast en kropp är tillåten. - Wrong object type - Fel objekttyp + + + Wrong object type + Fel objekttyp - Fillet works only on parts - Avrundning fungerar endast på Delar + + Fillet works only on parts + Avrundning fungerar endast på Delar - No Support - Inget stöd + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Inget stöd + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - Skissen måste ha ett stöd för fickfunktionen. Skapa en skiss på en yta. + Skissen måste ha ett stöd för fickfunktionen. Skapa en skiss på en yta. - - Edit pad - Redigera pad + + Edit pad + Redigera pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - En dialogruta är redan öppen i uppgiftspanelen + + + + + + + A dialog is already open in the task panel + En dialogruta är redan öppen i uppgiftspanelen - Do you want to close this dialog? - Vill du stänga denna dialogruta? + + + + + + + Do you want to close this dialog? + Vill du stänga denna dialogruta? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Del Design + + Part Design + Del Design - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_uk.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_uk.ts index cc6c0b105..34045a0e6 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_uk.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_uk.ts @@ -1,463 +1,770 @@ - - + + CmdPartDesignChamfer - - Part - Частина + Part + Частина - Chamfer... - Згладити... + Chamfer... + Згладити... - Chamfer the selected edges of a shape - Згладити обрані краї фігури + + PartDesign + ДизайнДеталі - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + Згладити обрані краї фігури + + + CmdPartDesignFillet - PartDesign - ДизайнДеталі + + PartDesign + ДизайнДеталі - Fillet - Округлення + + Fillet + Округлення - Make a fillet on an edge, face or body - Зробити округлення краю, поверхні чи тіла + + Make a fillet on an edge, face or body + Зробити округлення краю, поверхні чи тіла - - + + + CmdPartDesignGroove + + + PartDesign + ДизайнДеталі + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - ДизайнДеталі + + PartDesign + ДизайнДеталі - Pad - Pad + + Pad + Pad - Pad a selected sketch - Pad a selected sketch + + Pad a selected sketch + Pad a selected sketch - - + + CmdPartDesignPocket - PartDesign - ДизайнДеталі + + PartDesign + ДизайнДеталі - Pocket - Pocket + + Pocket + Pocket - create a pocket with the selected sketch - create a pocket with the selected sketch + + create a pocket with the selected sketch + create a pocket with the selected sketch - - + + CmdPartDesignRevolution - PartDesign - ДизайнДеталі + + PartDesign + ДизайнДеталі - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - Revolve a selected sketch + + Revolve a selected sketch + Revolve a selected sketch - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - Sketch tools + + Sketch tools + Sketch tools - Create Geometry - Create Geometry + + Create Geometry + Create Geometry - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - Краї фаски + Edges to chamfer + Краї фаски - Start distance - Початок відстані + Start distance + Початок відстані - End distance - Кінець відстані + End distance + Кінець відстані - Edge%1 - Край%1 + Edge%1 + Край%1 - Distance - Відстань + Distance + Відстань - No shape selected - Форму не обрано + No shape selected + Форму не обрано - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - Не обрано вірної форми. + Не обрано вірної форми. Будь ласка, оберіть вірну форму у виринаючому списку. - No edge selected - Край не обрано + No edge selected + Край не обрано - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - Не обрано край для згладжування. + Не обрано край для згладжування. Будь ласка, спочатку оберіть один, або більше країв. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - Згладити краї + Chamfer Edges + Згладити краї - Shape - Форма + Shape + Форма - Selected shape: - Обрана форма: + Selected shape: + Обрана форма: - No selection - Нічого не вибрано + No selection + Нічого не вибрано - Chamfer Parameter - Параметри згладжування + Chamfer Parameter + Параметри згладжування - All - Все + All + Все - None - Нічого + None + Нічого - Chamfer type: - Тип згладжування: + Chamfer type: + Тип згладжування: - Constant Distance - Постійна відстань + Constant Distance + Постійна відстань - Variable Distance - Змінна відстань + Variable Distance + Змінна відстань - Distance: - Відстань: + Distance: + Відстань: - - + + + PartDesignGui::TaskChamferParameters + + + Form + Форма + + + + Size: + Розмір: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - Форма + + Form + Форма - Radius: - Радіус: + + Radius: + Радіус: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + Форма + + + + Axis: + Вісь: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + Кут: + + + + Symmetric to plane + + + + + Reversed + Reversed + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - Форма + + Form + Форма - Type: - Тип: + + Type: + Тип: - Dimension - Розмірність + + Dimension + Розмірність - Up to last - До останнього + + Up to last + До останнього - Up to first - Up to first + + Up to first + Up to first - Size: - Розмір: + + Size: + Розмір: - - TaskHoleParameters - TaskHoleParameters + + TaskHoleParameters + TaskHoleParameters - - + + PartDesignGui::TaskPadParameters - - Form - Форма + + Form + Форма - Type: - Тип: + + Type + - Dimension - Розмірність + + Length + Length - Length: - Довжина: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - Reversed + + + Face + - Display mode: - Режим показу: + Type: + Тип: - Plot mode: - Plot mode: + + + Dimension + Розмірність - Point size: - Розмір точки: + Length: + Довжина: - Line width: - Товщина лінії: + Mirrored extent + Mirrored extent - Transparency: - Прозорість: + + Reversed + Reversed - TaskPadParameters - TaskPadParameters + Display mode: + Режим показу: - - Pad parameters - Pad parameters + Plot mode: + Plot mode: - - + + Point size: + Розмір точки: + + + Line width: + Товщина лінії: + + + Transparency: + Прозорість: + + + TaskPadParameters + TaskPadParameters + + + + Pad parameters + Pad parameters + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - Форма + + Form + Форма - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - Number1: + + Number1: + Number1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - Number2: + + Number2: + Number2: - - TaskPatternRectangularParameters - TaskPatternRectangularParameters + + TaskPatternRectangularParameters + TaskPatternRectangularParameters - - + + PartDesignGui::TaskPocketParameters - - Form - Форма + + Form + Форма - Type: - Тип: + Type: + Тип: - Dimension - Розмірність + + Type + - Length - Length + + + Dimension + Розмірність - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - Форма + + Form + Форма - Axis: - Вісь: + + Axis: + Вісь: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - Кут: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + Reversed - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + Кут: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - Невірний вибір + + + + + + + + + + + + + + + + + + + Wrong selection + Невірний вибір - Select a sketch or 2D object. - Оберіть ескіз чи 2D об'єкт. + + + + + Select a sketch or 2D object. + Оберіть ескіз чи 2D об'єкт. - The shape of the selected object is empty. - Форма виділеного об'єкта пуста. + + + + + The shape of the selected object is empty. + Форма виділеного об'єкта пуста. - The shape of the selected object is not a wire. - Форма вибраного об'єкта не дріт. + + + + + The shape of the selected object is not a wire. + Форма вибраного об'єкта не дріт. - Select an edge, face or body. Only one body is allowed. - Виберіть край, поверхню чи тіло. Допускається вибір лише одного тіла. + + + Select an edge, face or body. Only one body is allowed. + Виберіть край, поверхню чи тіло. Допускається вибір лише одного тіла. - Wrong object type - Невірний тип об'єкта + + + Wrong object type + Невірний тип об'єкта - Fillet works only on parts - Округлення працює лише для деталей + + Fillet works only on parts + Округлення працює лише для деталей - No Support - Не підтримується + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + Не підтримується + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - The sketch has to have a support for the pocket feature. + The sketch has to have a support for the pocket feature. Create the sketch on a face. - - Edit pad - Edit pad + + Edit pad + Edit pad - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - Do you want to close this dialog? + + + + + + + Do you want to close this dialog? + Do you want to close this dialog? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - Дизайн частини + + Part Design + Дизайн частини - + diff --git a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_zh.ts b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_zh.ts index 17b53b020..24b691420 100644 --- a/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_zh.ts +++ b/src/Mod/PartDesign/Gui/Resources/translations/PartDesign_zh.ts @@ -1,461 +1,768 @@ - - + + CmdPartDesignChamfer - - Part - 零件 + Part + 零件 - Chamfer... - 倒角... + Chamfer... + 倒角... - Chamfer the selected edges of a shape - 给选的形的边缘倒角 + + PartDesign + 零件设计 - - + + + Chamfer + + + + + Chamfer the selected edges of a shape + 给选的形的边缘倒角 + + + CmdPartDesignFillet - PartDesign - 零件设计 + + PartDesign + 零件设计 - Fillet - 圆角 + + Fillet + 圆角 - Make a fillet on an edge, face or body - 给边、面或实体倒圆角 + + Make a fillet on an edge, face or body + 给边、面或实体倒圆角 - - + + + CmdPartDesignGroove + + + PartDesign + 零件设计 + + + + Groove + + + + + Groove a selected sketch + + + + CmdPartDesignPad - PartDesign - 零件设计 + + PartDesign + 零件设计 - Pad - 凸台 + + Pad + 凸台 - Pad a selected sketch - 基于选定草图创建凸台 + + Pad a selected sketch + 基于选定草图创建凸台 - - + + CmdPartDesignPocket - PartDesign - 零件设计 + + PartDesign + 零件设计 - Pocket - 凹槽 + + Pocket + 凹槽 - create a pocket with the selected sketch - 基于选中的草图创建凹槽 + + create a pocket with the selected sketch + 基于选中的草图创建凹槽 - - + + CmdPartDesignRevolution - PartDesign - 零件设计 + + PartDesign + 零件设计 - Revolution - Revolution + + Revolution + Revolution - Revolve a selected sketch - 旋转选定的草绘 + + Revolve a selected sketch + 旋转选定的草绘 - - + + Gui::TaskView::TaskWatcherCommands - - Face tools - Face tools + + Face tools + Face tools - Sketch tools - 草图工具 + + Sketch tools + 草图工具 - Create Geometry - 创建几何元素 + + Create Geometry + 创建几何元素 - - + + PartDesignGui::ChamferWidget - - Edges to chamfer - 倒角边 + Edges to chamfer + 倒角边 - Start distance - 起端距离 + Start distance + 起端距离 - End distance - 末端距离 + End distance + 末端距离 - Edge%1 - 边缘 %1 + Edge%1 + 边缘 %1 - Distance - 距离 + Distance + 距离 - No shape selected - 未选定形状 + No shape selected + 未选定形状 - No valid shape is selected. + No valid shape is selected. Please select a valid shape in the drop-down box first. - 无有效形状被选中.请先在下拉框中选择一个有效的形状. + 无有效形状被选中.请先在下拉框中选择一个有效的形状. - No edge selected - 未选定边缘 + No edge selected + 未选定边缘 - No edge entity is checked to chamfer. + No edge entity is checked to chamfer. Please check one or more edge entities first. - 未选择倒角边.请先选择一个或更多边缘. + 未选择倒角边.请先选择一个或更多边缘. - - + + PartDesignGui::TaskChamfer - - Chamfer Edges - 倒角边缘 + Chamfer Edges + 倒角边缘 - Shape - 形状 + Shape + 形状 - Selected shape: - 所选的形状: + Selected shape: + 所选的形状: - No selection - 未选择 + No selection + 未选择 - Chamfer Parameter - 倒角参数 + Chamfer Parameter + 倒角参数 - All - 全部 + All + 全部 - None - + None + - Chamfer type: - 倒角类型: + Chamfer type: + 倒角类型: - Constant Distance - 恒定距离 + Constant Distance + 恒定距离 - Variable Distance - 可变距离 + Variable Distance + 可变距离 - Distance: - 距离: + Distance: + 距离: - - + + + PartDesignGui::TaskChamferParameters + + + Form + 窗体 + + + + Size: + 大小: + + + + Chamfer parameters + + + + PartDesignGui::TaskDlgPadParameters - - Input error - Input error + + Input error + Input error - - + + PartDesignGui::TaskFilletParameters - - Form - 窗体 + + Form + 窗体 - Radius: - 半径: + + Radius: + 半径: - - Fillet parameters - Fillet parameters + + Fillet parameters + Fillet parameters - - + + + PartDesignGui::TaskGrooveParameters + + + Form + 窗体 + + + + Axis: + 轴: + + + + Vertical sketch axis + + + + + Horizontal sketch axis + + + + + Angle: + 角度: + + + + Symmetric to plane + + + + + Reversed + 反转 + + + + Groove parameters + + + + PartDesignGui::TaskHoleParameters - - Form - 窗体 + + Form + 窗体 - Type: - 类型: + + Type: + 类型: - Dimension - 尺寸标注 + + Dimension + 尺寸标注 - Up to last - 直到最后 + + Up to last + 直到最后 - Up to first - 直到第一个 + + Up to first + 直到第一个 - Size: - 大小: + + Size: + 大小: - - TaskHoleParameters - 开孔参数 + + TaskHoleParameters + 开孔参数 - - + + PartDesignGui::TaskPadParameters - - Form - 窗体 + + Form + 窗体 - Type: - 类型: + + Type + - Dimension - 尺寸标注 + + Length + Length - Length: - 长度: + + Symmetric to plane + - Mirrored extent - Mirrored extent + + 2nd length + - Reversed - 反转 + + + Face + - Display mode: - 显示方式: + Type: + 类型: - Plot mode: - 绘制模式: + + + Dimension + 尺寸标注 - Point size: - 点大小: + Length: + 长度: - Line width: - 线宽: + Mirrored extent + Mirrored extent - Transparency: - 透明度: + + Reversed + 反转 - TaskPadParameters - 凸台操作参数 + Display mode: + 显示方式: - - Pad parameters - 凸台参数 + Plot mode: + 绘制模式: - - + + Point size: + 点大小: + + + Line width: + 线宽: + + + Transparency: + 透明度: + + + TaskPadParameters + 凸台操作参数 + + + + Pad parameters + 凸台参数 + + + + No face selected + + + + + To last + + + + + To first + + + + + Up to face + + + + + Two dimensions + + + + PartDesignGui::TaskPatternRectangularParameters - - Form - 窗体 + + Form + 窗体 - Spacing1: - Spacing1: + + Spacing1: + Spacing1: - Number1: - 数值1: + + Number1: + 数值1: - Second extend - Second extend + + Second extend + Second extend - Spacing2: - Spacing2: + + Spacing2: + Spacing2: - Number2: - 数值2: + + Number2: + 数值2: - - TaskPatternRectangularParameters - 矩形阵列参数 + + TaskPatternRectangularParameters + 矩形阵列参数 - - + + PartDesignGui::TaskPocketParameters - - Form - 窗体 + + Form + 窗体 - Type: - 类型: + Type: + 类型: - Dimension - 尺寸标注 + + Type + - Length - Length + + + Dimension + 尺寸标注 - - Pocket parameters - Pocket parameters + + + Face + - - + + + Length + Length + + + + Pocket parameters + Pocket parameters + + + + To last + + + + + To first + + + + + Through all + + + + + Up to face + + + + + No face selected + + + + PartDesignGui::TaskRevolutionParameters - - Form - 窗体 + + Form + 窗体 - Axis: - 轴: + + Axis: + 轴: - Vertical - Vertical + + Vertical sketch axis + - Horizontal - Horizontal + + Horizontal sketch axis + - Angle: - 角度: + + Symmetric to plane + - - Revolution parameters - Revolution parameters + + Reversed + 反转 - - + + Vertical + Vertical + + + Horizontal + Horizontal + + + + Angle: + 角度: + + + + Revolution parameters + Revolution parameters + + + QObject - - Wrong selection - 选择错误 + + + + + + + + + + + + + + + + + + + Wrong selection + 选择错误 - Select a sketch or 2D object. - 选择一个草图或2D对象. + + + + + Select a sketch or 2D object. + 选择一个草图或2D对象. - The shape of the selected object is empty. - 所选形状为空. + + + + + The shape of the selected object is empty. + 所选形状为空. - The shape of the selected object is not a wire. - 所选形状不是线框. + + + + + The shape of the selected object is not a wire. + 所选形状不是线框. - Select an edge, face or body. Only one body is allowed. - 选择边缘、面或者实体。只允许选择一个实体. + + + Select an edge, face or body. Only one body is allowed. + 选择边缘、面或者实体。只允许选择一个实体. - Wrong object type - 错误的对象类型 + + + Wrong object type + 错误的对象类型 - Fillet works only on parts - 圆角只对零件有效 + + Fillet works only on parts + 圆角只对零件有效 - No Support - 不支持 + + Shape of selected Part is empty + - The sketch has to have a support for the pocket feature. + + No fillet possible on selected faces/edges + + + + + Chamfer works only on parts + + + + + Shape of selected part is empty + + + + + No chamfer possible on selected faces/edges + + + + + No Support + 不支持 + + + + The sketch has to have a support for the pocket feature. Create the sketch on a face. - 凹槽特性要求草图必须存在一个支持面. + 凹槽特性要求草图必须存在一个支持面. 请在面上创建草图. - - Edit pad - 编辑凸台 + + Edit pad + 编辑凸台 - - Edit pocket - Edit pocket + + + + Edit pocket + Edit pocket - A dialog is already open in the task panel - A dialog is already open in the task panel + + + + + + + A dialog is already open in the task panel + A dialog is already open in the task panel - Do you want to close this dialog? - 您要关闭此对话框吗? + + + + + + + Do you want to close this dialog? + 您要关闭此对话框吗? - - Edit revolution - Edit revolution + + Edit revolution + Edit revolution - - + + + Edit Groove + + + + Workbench - - Part Design - 零件设计 + + Part Design + 零件设计 - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_af.ts b/src/Mod/Points/Gui/Resources/translations/Points_af.ts index 5532515aa..f2c5ec3be 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_af.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_af.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punte + + Points + Punte - Export points... - Voer punte uit... + + Export points... + Voer punte uit... - Exports a point cloud - Voer 'n puntwolk uit + + + + Exports a point cloud + Voer 'n puntwolk uit - - + + CmdPointsImport - Points - Punte + + Points + Punte - Import points... - Voer punte in... + + Import points... + Voer punte in... - Imports a point cloud - Voer 'n puntwolk in + + + + Imports a point cloud + Voer 'n puntwolk in - - + + CmdPointsPolyCut - Points - Punte + + Points + Punte - Cut point cloud - Sny 'n puntwolk + + Cut point cloud + Sny 'n puntwolk - Cuts a point cloud with a picked polygon - Sny 'n puntwolk met 'n gekose veelhoek + + + + Cuts a point cloud with a picked polygon + Sny 'n puntwolk met 'n gekose veelhoek - - + + CmdPointsTransform - Points - Punte + + Points + Punte - Transform Points - Transformeer Punte + + Transform Points + Transformeer Punte - Test to transform a point cloud - Toets om 'n puntwolk te transformeer + + + + Test to transform a point cloud + Toets om 'n puntwolk te transformeer - - + + PointsGui::DlgPointsRead - - ASCII points import - Voer ASCII-punte in + + ASCII points import + Voer ASCII-punte in - Template: - Standaardvorm: + + Template: + Standaardvorm: - Special lines - Spesiale lyne + + Special lines + Spesiale lyne - First line: - Eerste lyn: + + First line: + Eerste lyn: - Ignore - Ignoreer + + Ignore + Ignoreer - Cluster by lines starting with: - Groepeer lyne wat begin met: + + Cluster by lines starting with: + Groepeer lyne wat begin met: - Ignore lines starting with: - Ignoreer lyne wat begin met: + + Ignore lines starting with: + Ignoreer lyne wat begin met: - Point format - Puntformaat + + Point format + Puntformaat - Number separator: - Number separator: + + Number separator: + Number separator: - Points format: - Puntformaat: + + Points format: + Puntformaat: - Next block: - Volgende blok: + + + + Next block: + Volgende blok: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - geen + + + + none + geen - I,J,K (normal vector) - I,J,K (normale vektor) + + + + I,J,K (normal vector) + I,J,K (normale vektor) - I,K (normal vector 2D) - I,K (gewone vektor 2D) + + + + I,K (normal vector 2D) + I,K (gewone vektor 2D) - R,G,B (color) - R,G,B (kleur) + + + + R,G,B (color) + R,G,B (kleur) - I (Gray value) - I (Gryswaarde) + + + + I (Gray value) + I (Gryswaarde) - Preview - Voorskou + + Preview + Voorskou - 100 - 100 + + 100 + 100 - Number of points - Aantal punte + + Number of points + Aantal punte - Number of previewed lines: - Aantal voorskoulyne: + + Number of previewed lines: + Aantal voorskoulyne: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii Punte (*.asc);;Alle Lêers (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii Punte (*.asc);;Alle Lêers (*.*) - - + + Workbench - - Points tools - Punte-gereedskap + + Points tools + Punte-gereedskap - &Points - &Punte + + &Points + &Punte - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_de.ts b/src/Mod/Points/Gui/Resources/translations/Points_de.ts index 41c2e2c8f..1cc1bb3e5 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_de.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_de.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punkte + + Points + Punkte - Export points... - Punkte exportieren... + + Export points... + Punkte exportieren... - Exports a point cloud - Exportiert eine Punktwolke + + + + Exports a point cloud + Exportiert eine Punktwolke - - + + CmdPointsImport - Points - Punkte + + Points + Punkte - Import points... - Punkte importieren... + + Import points... + Punkte importieren... - Imports a point cloud - Importiert eine Punktwolke + + + + Imports a point cloud + Importiert eine Punktwolke - - + + CmdPointsPolyCut - Points - Punkte + + Points + Punkte - Cut point cloud - Schneidet Punktwolke + + Cut point cloud + Schneidet Punktwolke - Cuts a point cloud with a picked polygon - Ausschneiden einer Punktwolke aus dem gewählten Polygon + + + + Cuts a point cloud with a picked polygon + Ausschneiden einer Punktwolke aus dem gewählten Polygon - - + + CmdPointsTransform - Points - Punkte + + Points + Punkte - Transform Points - Transformiere Punkte + + Transform Points + Transformiere Punkte - Test to transform a point cloud - Test zur Transformation einer Punktwolke + + + + Test to transform a point cloud + Test zur Transformation einer Punktwolke - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII-Punkte-Import + + ASCII points import + ASCII-Punkte-Import - Template: - Vorlage: + + Template: + Vorlage: - Special lines - Spezielle Zeilen + + Special lines + Spezielle Zeilen - First line: - Erste Zeile: + + First line: + Erste Zeile: - Ignore - Ignorieren + + Ignore + Ignorieren - Cluster by lines starting with: - Cluster von Zeilen beginnend mit: + + Cluster by lines starting with: + Cluster von Zeilen beginnend mit: - Ignore lines starting with: - Ignoriere Zeilen beginnend mit: + + Ignore lines starting with: + Ignoriere Zeilen beginnend mit: - Point format - Punkte-Format + + Point format + Punkte-Format - Number separator: - Zahlentrenner: + + Number separator: + Zahlentrenner: - Points format: - Punkte-Format: + + Points format: + Punkte-Format: - Next block: - Nächster Block: + + + + Next block: + Nächster Block: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X, Y, Z + + X,Y,Z + X, Y, Z - X,Y - X, Y + + X,Y + X, Y - none - keiner + + + + none + keiner - I,J,K (normal vector) - I, J, K (Normalenvektor) + + + + I,J,K (normal vector) + I, J, K (Normalenvektor) - I,K (normal vector 2D) - I, K (Normalenvektor 2D) + + + + I,K (normal vector 2D) + I, K (Normalenvektor 2D) - R,G,B (color) - R,G,B (Farbe) + + + + R,G,B (color) + R,G,B (Farbe) - I (Gray value) - I (Grauwert) + + + + I (Gray value) + I (Grauwert) - Preview - Vorschau + + Preview + Vorschau - 100 - 100 + + 100 + 100 - Number of points - Anzahl der Punkte + + Number of points + Anzahl der Punkte - Number of previewed lines: - Anzahl der angezeigten Zeilen: + + Number of previewed lines: + Anzahl der angezeigten Zeilen: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - ASCII-Punkte (.asc);;Alle Dateien (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + ASCII-Punkte (.asc);;Alle Dateien (*.*) - - + + Workbench - - Points tools - Punktwerkzeuge + + Points tools + Punktwerkzeuge - &Points - &Punkte + + &Points + &Punkte - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_es.ts b/src/Mod/Points/Gui/Resources/translations/Points_es.ts index 52043c7a0..9fa1737dd 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_es.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_es.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Puntos + + Points + Puntos - Export points... - Exportar puntos... + + Export points... + Exportar puntos... - Exports a point cloud - exporta una nube de puntos + + + + Exports a point cloud + exporta una nube de puntos - - + + CmdPointsImport - Points - Puntos + + Points + Puntos - Import points... - Importar puntos... + + Import points... + Importar puntos... - Imports a point cloud - Importa una nube de puntos + + + + Imports a point cloud + Importa una nube de puntos - - + + CmdPointsPolyCut - Points - Puntos + + Points + Puntos - Cut point cloud - Cortar una nube de puntos + + Cut point cloud + Cortar una nube de puntos - Cuts a point cloud with a picked polygon - Corta una nube de puntos con un poligono seleccionado + + + + Cuts a point cloud with a picked polygon + Corta una nube de puntos con un poligono seleccionado - - + + CmdPointsTransform - Points - Puntos + + Points + Puntos - Transform Points - Trasformar puntos + + Transform Points + Trasformar puntos - Test to transform a point cloud - Test para transformar una nube de puntos + + + + Test to transform a point cloud + Test para transformar una nube de puntos - - + + PointsGui::DlgPointsRead - - ASCII points import - Importar puntos ASCII + + ASCII points import + Importar puntos ASCII - Template: - Plantilla: + + Template: + Plantilla: - Special lines - Líneas especiales + + Special lines + Líneas especiales - First line: - Primera línea: + + First line: + Primera línea: - Ignore - Ignorar + + Ignore + Ignorar - Cluster by lines starting with: - Agrupar por líneas que empiezan con: + + Cluster by lines starting with: + Agrupar por líneas que empiezan con: - Ignore lines starting with: - Ignorar líneas que empiezan con: + + Ignore lines starting with: + Ignorar líneas que empiezan con: - Point format - Formato de punto + + Point format + Formato de punto - Number separator: - Number separator: + + Number separator: + Number separator: - Points format: - Formato de punto: + + Points format: + Formato de punto: - Next block: - Próximo bloque: + + + + Next block: + Próximo bloque: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - ninguno + + + + none + ninguno - I,J,K (normal vector) - I,J,K (vector normal) + + + + I,J,K (normal vector) + I,J,K (vector normal) - I,K (normal vector 2D) - I,K (vector normal 2D) + + + + I,K (normal vector 2D) + I,K (vector normal 2D) - R,G,B (color) - R,G,B (color) + + + + R,G,B (color) + R,G,B (color) - I (Gray value) - I (valor de gris) + + + + I (Gray value) + I (valor de gris) - Preview - Previsualizar + + Preview + Previsualizar - 100 - 100 + + 100 + 100 - Number of points - Número de puntos + + Number of points + Número de puntos - Number of previewed lines: - Número de líneas previsualizadas: + + Number of previewed lines: + Número de líneas previsualizadas: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Puntos Ascii (*.asc);;Todos los archivos (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Puntos Ascii (*.asc);;Todos los archivos (*.*) - - + + Workbench - - Points tools - Herramientas de puntos + + Points tools + Herramientas de puntos - &Points - &Puntos + + &Points + &Puntos - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_fi.ts b/src/Mod/Points/Gui/Resources/translations/Points_fi.ts index 6edee8c0c..02e8e010c 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_fi.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_fi.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Pisteet + + Points + Pisteet - Export points... - Vie pisteet... + + Export points... + Vie pisteet... - Exports a point cloud - Exports a point cloud + + + + Exports a point cloud + Exports a point cloud - - + + CmdPointsImport - Points - Pisteet + + Points + Pisteet - Import points... - Tuo pisteet... + + Import points... + Tuo pisteet... - Imports a point cloud - Imports a point cloud + + + + Imports a point cloud + Imports a point cloud - - + + CmdPointsPolyCut - Points - Pisteet + + Points + Pisteet - Cut point cloud - Cut point cloud + + Cut point cloud + Cut point cloud - Cuts a point cloud with a picked polygon - Cuts a point cloud with a picked polygon + + + + Cuts a point cloud with a picked polygon + Cuts a point cloud with a picked polygon - - + + CmdPointsTransform - Points - Pisteet + + Points + Pisteet - Transform Points - Muunna pisteet + + Transform Points + Muunna pisteet - Test to transform a point cloud - Testaa muuttaa pistepilvi + + + + Test to transform a point cloud + Testaa muuttaa pistepilvi - - + + PointsGui::DlgPointsRead - - ASCII points import - Tuo ASCII pisteet + + ASCII points import + Tuo ASCII pisteet - Template: - Malli: + + Template: + Malli: - Special lines - Erityisiä viivoja + + Special lines + Erityisiä viivoja - First line: - Ensimmäinen rivi: + + First line: + Ensimmäinen rivi: - Ignore - Ohita + + Ignore + Ohita - Cluster by lines starting with: - Cluster by lines starting with: + + Cluster by lines starting with: + Cluster by lines starting with: - Ignore lines starting with: - Ignore lines starting with: + + Ignore lines starting with: + Ignore lines starting with: - Point format - Point format + + Point format + Point format - Number separator: - Number separator: + + Number separator: + Number separator: - Points format: - Points format: + + Points format: + Points format: - Next block: - Seuraava lohko: + + + + Next block: + Seuraava lohko: - , - , + + , + , - ; - ; + + ; + ; - \t - \T + + \t + \T - \w - /w + + \w + /w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - ei mitään + + + + none + ei mitään - I,J,K (normal vector) - I,J,K (normaali vektori) + + + + I,J,K (normal vector) + I,J,K (normaali vektori) - I,K (normal vector 2D) - I,K (normaali vektori 2D) + + + + I,K (normal vector 2D) + I,K (normaali vektori 2D) - R,G,B (color) - R,G,B (väri) + + + + R,G,B (color) + R,G,B (väri) - I (Gray value) - I (Gray arvo) + + + + I (Gray value) + I (Gray arvo) - Preview - Esikatselu + + Preview + Esikatselu - 100 - 100 + + 100 + 100 - Number of points - Pisteiden määrä + + Number of points + Pisteiden määrä - Number of previewed lines: - Esikatseltavien rivien määrä: + + Number of previewed lines: + Esikatseltavien rivien määrä: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii Points (*.asc);;All Files (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii Points (*.asc);;All Files (*.*) - - + + Workbench - - Points tools - Points tools + + Points tools + Points tools - &Points - &Pisteet + + &Points + &Pisteet - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_fr.ts b/src/Mod/Points/Gui/Resources/translations/Points_fr.ts index 3808d6937..9978c3cac 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_fr.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_fr.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Points + + Points + Points - Export points... - Exporter les points... + + Export points... + Exporter les points... - Exports a point cloud - Exporte un nuage de points + + + + Exports a point cloud + Exporte un nuage de points - - + + CmdPointsImport - Points - Points + + Points + Points - Import points... - Importer des points... + + Import points... + Importer des points... - Imports a point cloud - Importe un nuage de points + + + + Imports a point cloud + Importe un nuage de points - - + + CmdPointsPolyCut - Points - Points + + Points + Points - Cut point cloud - Couper un nuage de points + + Cut point cloud + Couper un nuage de points - Cuts a point cloud with a picked polygon - Coupe un nuage de points à l'aide d'un polygone sélectionné + + + + Cuts a point cloud with a picked polygon + Coupe un nuage de points à l'aide d'un polygone sélectionné - - + + CmdPointsTransform - Points - Points + + Points + Points - Transform Points - Transformer les points + + Transform Points + Transformer les points - Test to transform a point cloud - Test de transformation d'un nuage de points + + + + Test to transform a point cloud + Test de transformation d'un nuage de points - - + + PointsGui::DlgPointsRead - - ASCII points import - Importation de points ASCII + + ASCII points import + Importation de points ASCII - Template: - Modèle : + + Template: + Modèle : - Special lines - Ligne spéciales + + Special lines + Ligne spéciales - First line: - Première ligne : + + First line: + Première ligne : - Ignore - Ignorer + + Ignore + Ignorer - Cluster by lines starting with: - Ensemble de lignes commençant par : + + Cluster by lines starting with: + Ensemble de lignes commençant par : - Ignore lines starting with: - Ignorer les lignes commençant par : + + Ignore lines starting with: + Ignorer les lignes commençant par : - Point format - Format de point + + Point format + Format de point - Number separator: - Séparateur de nombre : + + Number separator: + Séparateur de nombre : - Points format: - Format de points : + + Points format: + Format de points : - Next block: - Bloc suivant : + + + + Next block: + Bloc suivant : - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X, Y, Z + + X,Y,Z + X, Y, Z - X,Y - X, Y + + X,Y + X, Y - none - aucun + + + + none + aucun - I,J,K (normal vector) - I,J,K (vecteur normal) + + + + I,J,K (normal vector) + I,J,K (vecteur normal) - I,K (normal vector 2D) - I,K (vecteur normal 2D) + + + + I,K (normal vector 2D) + I,K (vecteur normal 2D) - R,G,B (color) - R,V,B (couleur) + + + + R,G,B (color) + R,V,B (couleur) - I (Gray value) - I (valeur de gris) + + + + I (Gray value) + I (valeur de gris) - Preview - Aperçu + + Preview + Aperçu - 100 - 100 + + 100 + 100 - Number of points - Nombre de points + + Number of points + Nombre de points - Number of previewed lines: - Nombre de lignes prévisualisés : + + Number of previewed lines: + Nombre de lignes prévisualisés : - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Points Ascii (*.asc);;Tous les fichiers (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Points Ascii (*.asc);;Tous les fichiers (*.*) - - + + Workbench - - Points tools - Outils points + + Points tools + Outils points - &Points - &Points + + &Points + &Points - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_hr.ts b/src/Mod/Points/Gui/Resources/translations/Points_hr.ts index eb33674ce..ada1899f2 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_hr.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_hr.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Točke + + Points + Točke - Export points... - Izvezi točke... + + Export points... + Izvezi točke... - Exports a point cloud - prenesi pokazni oblak + + + + Exports a point cloud + prenesi pokazni oblak - - + + CmdPointsImport - Points - Točke + + Points + Točke - Import points... - Uvezi točke... + + Import points... + Uvezi točke... - Imports a point cloud - prenesi pokazni oblak + + + + Imports a point cloud + prenesi pokazni oblak - - + + CmdPointsPolyCut - Points - Točke + + Points + Točke - Cut point cloud - odreži pokazni oblak + + Cut point cloud + odreži pokazni oblak - Cuts a point cloud with a picked polygon - Izreže pokazni oblak s bere poligona + + + + Cuts a point cloud with a picked polygon + Izreže pokazni oblak s bere poligona - - + + CmdPointsTransform - Points - Točke + + Points + Točke - Transform Points - Promijeni točke + + Transform Points + Promijeni točke - Test to transform a point cloud - Test za pretvaranje pokaznog oblaka + + + + Test to transform a point cloud + Test za pretvaranje pokaznog oblaka - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII uvoz bodova + + ASCII points import + ASCII uvoz bodova - Template: - Predložak: + + Template: + Predložak: - Special lines - Posebne linije + + Special lines + Posebne linije - First line: - Prva linija: + + First line: + Prva linija: - Ignore - Zanemari + + Ignore + Zanemari - Cluster by lines starting with: - Klaster linijama koje počinju sa: + + Cluster by lines starting with: + Klaster linijama koje počinju sa: - Ignore lines starting with: - Zanemari linije koje počinju sa: + + Ignore lines starting with: + Zanemari linije koje počinju sa: - Point format - Point format + + Point format + Point format - Number separator: - Broj separatora: + + Number separator: + Broj separatora: - Points format: - Bodovi formata: + + Points format: + Bodovi formata: - Next block: - Sljedeći blok: + + + + Next block: + Sljedeći blok: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - nijedan + + + + none + nijedan - I,J,K (normal vector) - I,J,K (vektor normale) + + + + I,J,K (normal vector) + I,J,K (vektor normale) - I,K (normal vector 2D) - I,K (vektor normale 2D) + + + + I,K (normal vector 2D) + I,K (vektor normale 2D) - R,G,B (color) - R,G,B (u boji) + + + + R,G,B (color) + R,G,B (u boji) - I (Gray value) - I (vrijednosti u sivim tonovima) + + + + I (Gray value) + I (vrijednosti u sivim tonovima) - Preview - Pregled + + Preview + Pregled - 100 - 100 + + 100 + 100 - Number of points - Broj točaka + + Number of points + Broj točaka - Number of previewed lines: - Broj pregledanih linija: + + Number of previewed lines: + Broj pregledanih linija: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii točke (*.asc);;Sve datoteke (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii točke (*.asc);;Sve datoteke (*.*) - - + + Workbench - - Points tools - Alati točaka + + Points tools + Alati točaka - &Points - &Točke + + &Points + &Točke - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_hu.ts b/src/Mod/Points/Gui/Resources/translations/Points_hu.ts index 510b2ded6..d4dcb72bd 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_hu.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_hu.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Pontok + + Points + Pontok - Export points... - Pontok exportálása... + + Export points... + Pontok exportálása... - Exports a point cloud - Pontfelhő exportálása + + + + Exports a point cloud + Pontfelhő exportálása - - + + CmdPointsImport - Points - Pontok + + Points + Pontok - Import points... - Pontok importálása... + + Import points... + Pontok importálása... - Imports a point cloud - Pontfelhő importálása + + + + Imports a point cloud + Pontfelhő importálása - - + + CmdPointsPolyCut - Points - Pontok + + Points + Pontok - Cut point cloud - Pontfelhő kivágása + + Cut point cloud + Pontfelhő kivágása - Cuts a point cloud with a picked polygon - Pontfelhő kivágása egy kiválaszott polygonnal + + + + Cuts a point cloud with a picked polygon + Pontfelhő kivágása egy kiválaszott polygonnal - - + + CmdPointsTransform - Points - Pontok + + Points + Pontok - Transform Points - Pontok átalakítása + + Transform Points + Pontok átalakítása - Test to transform a point cloud - Pontfelhő átalakításának tesztje + + + + Test to transform a point cloud + Pontfelhő átalakításának tesztje - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII pontok importálása + + ASCII points import + ASCII pontok importálása - Template: - Sablon: + + Template: + Sablon: - Special lines - Speciális vonalak + + Special lines + Speciális vonalak - First line: - Első vonal: + + First line: + Első vonal: - Ignore - Kihagy + + Ignore + Kihagy - Cluster by lines starting with: - Vonallal kezdődő fürt: + + Cluster by lines starting with: + Vonallal kezdődő fürt: - Ignore lines starting with: - Kezdő vonalak kihagyása: + + Ignore lines starting with: + Kezdő vonalak kihagyása: - Point format - Pont formátum + + Point format + Pont formátum - Number separator: - Szám elválasztó jel: + + Number separator: + Szám elválasztó jel: - Points format: - Pont formátum: + + Points format: + Pont formátum: - Next block: - Következő blokk: + + + + Next block: + Következő blokk: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - egyik sem + + + + none + egyik sem - I,J,K (normal vector) - I, J, K (normál vektor) + + + + I,J,K (normal vector) + I, J, K (normál vektor) - I,K (normal vector 2D) - I, K (normál vektor 2D) + + + + I,K (normal vector 2D) + I, K (normál vektor 2D) - R,G,B (color) - R,G,B (szín) + + + + R,G,B (color) + R,G,B (szín) - I (Gray value) - I (szürkeárnyalat-érték) + + + + I (Gray value) + I (szürkeárnyalat-érték) - Preview - Előnézet + + Preview + Előnézet - 100 - 100 + + 100 + 100 - Number of points - Pontok száma + + Number of points + Pontok száma - Number of previewed lines: - Előnézeti sorok száma: + + Number of previewed lines: + Előnézeti sorok száma: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii pontok (*.asc);;Minden fájl (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii pontok (*.asc);;Minden fájl (*.*) - - + + Workbench - - Points tools - Pont eszközök + + Points tools + Pont eszközök - &Points - &Pontok + + &Points + &Pontok - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_it.ts b/src/Mod/Points/Gui/Resources/translations/Points_it.ts index 27b4e32f4..3bbba10ba 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_it.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_it.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punti + + Points + Punti - Export points... - Esporta punti... + + Export points... + Esporta punti... - Exports a point cloud - Esporta una nuvola di punti + + + + Exports a point cloud + Esporta una nuvola di punti - - + + CmdPointsImport - Points - Punti + + Points + Punti - Import points... - Importa punti... + + Import points... + Importa punti... - Imports a point cloud - Importa una nuvola di punti + + + + Imports a point cloud + Importa una nuvola di punti - - + + CmdPointsPolyCut - Points - Punti + + Points + Punti - Cut point cloud - Taglia nuvola di punti + + Cut point cloud + Taglia nuvola di punti - Cuts a point cloud with a picked polygon - Taglia una nuvola di punti con un poligono specificato + + + + Cuts a point cloud with a picked polygon + Taglia una nuvola di punti con un poligono specificato - - + + CmdPointsTransform - Points - Punti + + Points + Punti - Transform Points - Trasforma punti + + Transform Points + Trasforma punti - Test to transform a point cloud - Test della trasformazione di una nuvola di punti + + + + Test to transform a point cloud + Test della trasformazione di una nuvola di punti - - + + PointsGui::DlgPointsRead - - ASCII points import - Importa punti ASCII + + ASCII points import + Importa punti ASCII - Template: - Modello: + + Template: + Modello: - Special lines - Linee speciali + + Special lines + Linee speciali - First line: - Prima linea: + + First line: + Prima linea: - Ignore - Ignora + + Ignore + Ignora - Cluster by lines starting with: - Raggruppamento per linee che iniziano con: + + Cluster by lines starting with: + Raggruppamento per linee che iniziano con: - Ignore lines starting with: - Ignora le linee che iniziano con: + + Ignore lines starting with: + Ignora le linee che iniziano con: - Point format - Formato punto + + Point format + Formato punto - Number separator: - Separatore numeri: + + Number separator: + Separatore numeri: - Points format: - Formato punti: + + Points format: + Formato punti: - Next block: - Prossimo blocco: + + + + Next block: + Prossimo blocco: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - nessuno + + + + none + nessuno - I,J,K (normal vector) - I,J,K (vettore normale) + + + + I,J,K (normal vector) + I,J,K (vettore normale) - I,K (normal vector 2D) - I,K (vettore normale 2D) + + + + I,K (normal vector 2D) + I,K (vettore normale 2D) - R,G,B (color) - R,G,B (colore) + + + + R,G,B (color) + R,G,B (colore) - I (Gray value) - I (valore di grigio) + + + + I (Gray value) + I (valore di grigio) - Preview - Anteprima + + Preview + Anteprima - 100 - 100 + + 100 + 100 - Number of points - Numero di punti + + Number of points + Numero di punti - Number of previewed lines: - Numero di linee visualizzate nell'anteprima: + + Number of previewed lines: + Numero di linee visualizzate nell'anteprima: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Punti Ascii (*.asc);;Tutti i file (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Punti Ascii (*.asc);;Tutti i file (*.*) - - + + Workbench - - Points tools - Strumenti Punti + + Points tools + Strumenti Punti - &Points - &Punti + + &Points + &Punti - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_ja.ts b/src/Mod/Points/Gui/Resources/translations/Points_ja.ts index 2c6f51381..6ebf678e0 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_ja.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_ja.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - + + Points + - Export points... - 点をエクスポート... + + Export points... + 点をエクスポート... - Exports a point cloud - 点群をエクスポート + + + + Exports a point cloud + 点群をエクスポート - - + + CmdPointsImport - Points - + + Points + - Import points... - 点をインポート... + + Import points... + 点をインポート... - Imports a point cloud - 点群をインポート + + + + Imports a point cloud + 点群をインポート - - + + CmdPointsPolyCut - Points - + + Points + - Cut point cloud - Cut point cloud + + Cut point cloud + Cut point cloud - Cuts a point cloud with a picked polygon - Cuts a point cloud with a picked polygon + + + + Cuts a point cloud with a picked polygon + Cuts a point cloud with a picked polygon - - + + CmdPointsTransform - Points - + + Points + - Transform Points - 点を変換 + + Transform Points + 点を変換 - Test to transform a point cloud - Test to transform a point cloud + + + + Test to transform a point cloud + Test to transform a point cloud - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII points import + + ASCII points import + ASCII points import - Template: - テンプレート: + + Template: + テンプレート: - Special lines - Special lines + + Special lines + Special lines - First line: - First line: + + First line: + First line: - Ignore - 無視 + + Ignore + 無視 - Cluster by lines starting with: - Cluster by lines starting with: + + Cluster by lines starting with: + Cluster by lines starting with: - Ignore lines starting with: - ~で始まる行を無視する: + + Ignore lines starting with: + ~で始まる行を無視する: - Point format - 点の形式 + + Point format + 点の形式 - Number separator: - 区切り文字: + + Number separator: + 区切り文字: - Points format: - 点の形式: + + Points format: + 点の形式: - Next block: - 次のブロック: + + + + Next block: + 次のブロック: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - なし + + + + none + なし - I,J,K (normal vector) - I、J、K(法線ベクトル) + + + + I,J,K (normal vector) + I、J、K(法線ベクトル) - I,K (normal vector 2D) - I,K (2D法線ベクトル) + + + + I,K (normal vector 2D) + I,K (2D法線ベクトル) - R,G,B (color) - R,G,B (カラー) + + + + R,G,B (color) + R,G,B (カラー) - I (Gray value) - I (グレーレベル) + + + + I (Gray value) + I (グレーレベル) - Preview - プレビュー + + Preview + プレビュー - 100 - 100 + + 100 + 100 - Number of points - 点の数 + + Number of points + 点の数 - Number of previewed lines: - Number of previewed lines: + + Number of previewed lines: + Number of previewed lines: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii点ファイル (*.asc);すべてのファイル (*. *) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii点ファイル (*.asc);すべてのファイル (*. *) - - + + Workbench - - Points tools - 点ツール + + Points tools + 点ツール - &Points - 点(&P) + + &Points + 点(&P) - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_nl.ts b/src/Mod/Points/Gui/Resources/translations/Points_nl.ts index 1b0d95c98..1e01385d4 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_nl.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_nl.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punten + + Points + Punten - Export points... - Exporteer punten... + + Export points... + Exporteer punten... - Exports a point cloud - Exporteert een puntenwolk + + + + Exports a point cloud + Exporteert een puntenwolk - - + + CmdPointsImport - Points - Punten + + Points + Punten - Import points... - Importeer punten... + + Import points... + Importeer punten... - Imports a point cloud - Importeert een puntenwolk + + + + Imports a point cloud + Importeert een puntenwolk - - + + CmdPointsPolyCut - Points - Punten + + Points + Punten - Cut point cloud - Snij puntenwolk + + Cut point cloud + Snij puntenwolk - Cuts a point cloud with a picked polygon - Knipt een puntwolk met een geselecteerde veelhoek + + + + Cuts a point cloud with a picked polygon + Knipt een puntwolk met een geselecteerde veelhoek - - + + CmdPointsTransform - Points - Punten + + Points + Punten - Transform Points - Transformeer Punten + + Transform Points + Transformeer Punten - Test to transform a point cloud - Test om een puntwolk te transformeren + + + + Test to transform a point cloud + Test om een puntwolk te transformeren - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII-punten import + + ASCII points import + ASCII-punten import - Template: - Sjabloon: + + Template: + Sjabloon: - Special lines - Speciale lijnen + + Special lines + Speciale lijnen - First line: - Eerste regel: + + First line: + Eerste regel: - Ignore - Negeren + + Ignore + Negeren - Cluster by lines starting with: - Clusteren van regels die beginnen met: + + Cluster by lines starting with: + Clusteren van regels die beginnen met: - Ignore lines starting with: - Negeer regels die beginnen met: + + Ignore lines starting with: + Negeer regels die beginnen met: - Point format - Punt-formaat + + Point format + Punt-formaat - Number separator: - Getal-scheidingsteken: + + Number separator: + Getal-scheidingsteken: - Points format: - Punten-formaat: + + Points format: + Punten-formaat: - Next block: - Volgend blok: + + + + Next block: + Volgend blok: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - (leeg) + + + + none + (leeg) - I,J,K (normal vector) - I,J,K (normaalvector) + + + + I,J,K (normal vector) + I,J,K (normaalvector) - I,K (normal vector 2D) - I,K (normaalvector 2D) + + + + I,K (normal vector 2D) + I,K (normaalvector 2D) - R,G,B (color) - R,G,B (kleur) + + + + R,G,B (color) + R,G,B (kleur) - I (Gray value) - I (Grijstint) + + + + I (Gray value) + I (Grijstint) - Preview - Voorbeeldweergave + + Preview + Voorbeeldweergave - 100 - 100 + + 100 + 100 - Number of points - Aantal punten + + Number of points + Aantal punten - Number of previewed lines: - Aantal regels bekeken: + + Number of previewed lines: + Aantal regels bekeken: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - ASCII-punten (*.asc);;alle bestanden (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + ASCII-punten (*.asc);;alle bestanden (*.*) - - + + Workbench - - Points tools - Punten-gereedschap + + Points tools + Punten-gereedschap - &Points - &Punten + + &Points + &Punten - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_no.ts b/src/Mod/Points/Gui/Resources/translations/Points_no.ts index 933b9d583..ebdc274fd 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_no.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_no.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punkter + + Points + Punkter - Export points... - Eksporter punkter... + + Export points... + Eksporter punkter... - Exports a point cloud - Eksporterer en punktsky + + + + Exports a point cloud + Eksporterer en punktsky - - + + CmdPointsImport - Points - Punkter + + Points + Punkter - Import points... - Importer punkt... + + Import points... + Importer punkt... - Imports a point cloud - Importerer en punktsky + + + + Imports a point cloud + Importerer en punktsky - - + + CmdPointsPolyCut - Points - Punkter + + Points + Punkter - Cut point cloud - Klipp ut punktsky + + Cut point cloud + Klipp ut punktsky - Cuts a point cloud with a picked polygon - Klipper ut en punktsky med valgt polygon + + + + Cuts a point cloud with a picked polygon + Klipper ut en punktsky med valgt polygon - - + + CmdPointsTransform - Points - Punkter + + Points + Punkter - Transform Points - Transformer punkter + + Transform Points + Transformer punkter - Test to transform a point cloud - Test for å transformere en punktsky + + + + Test to transform a point cloud + Test for å transformere en punktsky - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII punkt import + + ASCII points import + ASCII punkt import - Template: - Mal: + + Template: + Mal: - Special lines - Spesielle linjer + + Special lines + Spesielle linjer - First line: - Første linje: + + First line: + Første linje: - Ignore - Ignorer + + Ignore + Ignorer - Cluster by lines starting with: - Klynge av linjer som starter med: + + Cluster by lines starting with: + Klynge av linjer som starter med: - Ignore lines starting with: - Ignorer linjer som starter med: + + Ignore lines starting with: + Ignorer linjer som starter med: - Point format - Punktformat + + Point format + Punktformat - Number separator: - Number separator: + + Number separator: + Number separator: - Points format: - Punktformat: + + Points format: + Punktformat: - Next block: - Neste blokk: + + + + Next block: + Neste blokk: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - ingen + + + + none + ingen - I,J,K (normal vector) - I,J,K (normal vektor) + + + + I,J,K (normal vector) + I,J,K (normal vektor) - I,K (normal vector 2D) - I,K (normal vektor 2D) + + + + I,K (normal vector 2D) + I,K (normal vektor 2D) - R,G,B (color) - R,G,B (farge) + + + + R,G,B (color) + R,G,B (farge) - I (Gray value) - I (Grå verdi) + + + + I (Gray value) + I (Grå verdi) - Preview - Forhåndsvisning + + Preview + Forhåndsvisning - 100 - 100 + + 100 + 100 - Number of points - Antall punkter + + Number of points + Antall punkter - Number of previewed lines: - Antall forhåndsviste linjer: + + Number of previewed lines: + Antall forhåndsviste linjer: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii-punkter (*.asc);;Alle filer (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii-punkter (*.asc);;Alle filer (*.*) - - + + Workbench - - Points tools - Punktverktøy + + Points tools + Punktverktøy - &Points - &Punkter + + &Points + &Punkter - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_pl.ts b/src/Mod/Points/Gui/Resources/translations/Points_pl.ts index 93c315705..ebeb79d68 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_pl.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_pl.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punkty + + Points + Punkty - Export points... - Eksport punktów... + + Export points... + Eksport punktów... - Exports a point cloud - Exports a point cloud + + + + Exports a point cloud + Exports a point cloud - - + + CmdPointsImport - Points - Punkty + + Points + Punkty - Import points... - Import punktów ... + + Import points... + Import punktów ... - Imports a point cloud - Imports a point cloud + + + + Imports a point cloud + Imports a point cloud - - + + CmdPointsPolyCut - Points - Punkty + + Points + Punkty - Cut point cloud - Cut point cloud + + Cut point cloud + Cut point cloud - Cuts a point cloud with a picked polygon - Cuts a point cloud with a picked polygon + + + + Cuts a point cloud with a picked polygon + Cuts a point cloud with a picked polygon - - + + CmdPointsTransform - Points - Punkty + + Points + Punkty - Transform Points - Przekształcenie punktów + + Transform Points + Przekształcenie punktów - Test to transform a point cloud - Test to transform a point cloud + + + + Test to transform a point cloud + Test to transform a point cloud - - + + PointsGui::DlgPointsRead - - ASCII points import - Import punktów ASCII + + ASCII points import + Import punktów ASCII - Template: - Szablon: + + Template: + Szablon: - Special lines - Linie specjalne + + Special lines + Linie specjalne - First line: - First line: + + First line: + First line: - Ignore - Ignoruj + + Ignore + Ignoruj - Cluster by lines starting with: - Cluster by lines starting with: + + Cluster by lines starting with: + Cluster by lines starting with: - Ignore lines starting with: - Ignoruj ​​linie zaczynające się od: + + Ignore lines starting with: + Ignoruj ​​linie zaczynające się od: - Point format - Format punktu + + Point format + Format punktu - Number separator: - Separator dziesiętny: + + Number separator: + Separator dziesiętny: - Points format: - Styl Punktów: + + Points format: + Styl Punktów: - Next block: - Następny blok: + + + + Next block: + Następny blok: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X, Y, Z + + X,Y,Z + X, Y, Z - X,Y - X, Y + + X,Y + X, Y - none - żaden + + + + none + żaden - I,J,K (normal vector) - I,J,K (normal vector) + + + + I,J,K (normal vector) + I,J,K (normal vector) - I,K (normal vector 2D) - I,K (normal vector 2D) + + + + I,K (normal vector 2D) + I,K (normal vector 2D) - R,G,B (color) - R, G, B (kolor) + + + + R,G,B (color) + R, G, B (kolor) - I (Gray value) - I (Gray value) + + + + I (Gray value) + I (Gray value) - Preview - Podgląd + + Preview + Podgląd - 100 - 100 + + 100 + 100 - Number of points - Liczba punktów + + Number of points + Liczba punktów - Number of previewed lines: - Number of previewed lines: + + Number of previewed lines: + Number of previewed lines: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii Points (*.asc);;All Files (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii Points (*.asc);;All Files (*.*) - - + + Workbench - - Points tools - Narzędzia Punktów + + Points tools + Narzędzia Punktów - &Points - &Punkty + + &Points + &Punkty - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_pt.ts b/src/Mod/Points/Gui/Resources/translations/Points_pt.ts index 6f60c153b..ad97a7515 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_pt.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_pt.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Pontos + + Points + Pontos - Export points... - Exportar pontos... + + Export points... + Exportar pontos... - Exports a point cloud - Exporta uma nuvem de pontos + + + + Exports a point cloud + Exporta uma nuvem de pontos - - + + CmdPointsImport - Points - Pontos + + Points + Pontos - Import points... - Importar pontos... + + Import points... + Importar pontos... - Imports a point cloud - Importar uma nuvem de pontos + + + + Imports a point cloud + Importar uma nuvem de pontos - - + + CmdPointsPolyCut - Points - Pontos + + Points + Pontos - Cut point cloud - Cortar nuvem de pontos + + Cut point cloud + Cortar nuvem de pontos - Cuts a point cloud with a picked polygon - Corta uma nuvem de pontos com um polígono traçado + + + + Cuts a point cloud with a picked polygon + Corta uma nuvem de pontos com um polígono traçado - - + + CmdPointsTransform - Points - Pontos + + Points + Pontos - Transform Points - Transformar pontos + + Transform Points + Transformar pontos - Test to transform a point cloud - Teste para transformar uma nuvem de pontos + + + + Test to transform a point cloud + Teste para transformar uma nuvem de pontos - - + + PointsGui::DlgPointsRead - - ASCII points import - Importar pontos ASCII + + ASCII points import + Importar pontos ASCII - Template: - Modelo: + + Template: + Modelo: - Special lines - Linhas especiais + + Special lines + Linhas especiais - First line: - Primeira linha: + + First line: + Primeira linha: - Ignore - Ignorar + + Ignore + Ignorar - Cluster by lines starting with: - Agrupar por linhas começando com: + + Cluster by lines starting with: + Agrupar por linhas começando com: - Ignore lines starting with: - Ignore linhas que comecem com: + + Ignore lines starting with: + Ignore linhas que comecem com: - Point format - Formato de ponto + + Point format + Formato de ponto - Number separator: - Separador de número: + + Number separator: + Separador de número: - Points format: - Formato de pontos: + + Points format: + Formato de pontos: - Next block: - Próximo bloco: + + + + Next block: + Próximo bloco: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - nenhum + + + + none + nenhum - I,J,K (normal vector) - I,J,K (vetor normal) + + + + I,J,K (normal vector) + I,J,K (vetor normal) - I,K (normal vector 2D) - I,K (vetor normal 2D) + + + + I,K (normal vector 2D) + I,K (vetor normal 2D) - R,G,B (color) - R,G,B (cor) + + + + R,G,B (color) + R,G,B (cor) - I (Gray value) - I (valor de cinza) + + + + I (Gray value) + I (valor de cinza) - Preview - Pré-visualização + + Preview + Pré-visualização - 100 - 100 + + 100 + 100 - Number of points - Número de pontos + + Number of points + Número de pontos - Number of previewed lines: - Número de linhas visualizadas: + + Number of previewed lines: + Número de linhas visualizadas: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Pontos Ascii (*.asc);; Todos os Arquivos (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Pontos Ascii (*.asc);; Todos os Arquivos (*.*) - - + + Workbench - - Points tools - Ferramentas de pontos + + Points tools + Ferramentas de pontos - &Points - &Pontos + + &Points + &Pontos - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_ru.ts b/src/Mod/Points/Gui/Resources/translations/Points_ru.ts index 9a5080dd2..e6ee99514 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_ru.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_ru.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Точки + + Points + Точки - Export points... - Экспорт точек... + + Export points... + Экспорт точек... - Exports a point cloud - Экспорт облака точек + + + + Exports a point cloud + Экспорт облака точек - - + + CmdPointsImport - Points - Точки + + Points + Точки - Import points... - Импорт точек... + + Import points... + Импорт точек... - Imports a point cloud - Импорт облака точек + + + + Imports a point cloud + Импорт облака точек - - + + CmdPointsPolyCut - Points - Точки + + Points + Точки - Cut point cloud - Вырезать облако точек + + Cut point cloud + Вырезать облако точек - Cuts a point cloud with a picked polygon - Вырезать облако точек ограниченное отмеченным полигоном + + + + Cuts a point cloud with a picked polygon + Вырезать облако точек ограниченное отмеченным полигоном - - + + CmdPointsTransform - Points - Точки + + Points + Точки - Transform Points - Преобразование точек + + Transform Points + Преобразование точек - Test to transform a point cloud - Тест для преобразования облака точек + + + + Test to transform a point cloud + Тест для преобразования облака точек - - + + PointsGui::DlgPointsRead - - ASCII points import - Импорт точек ASCII + + ASCII points import + Импорт точек ASCII - Template: - Шаблон: + + Template: + Шаблон: - Special lines - Специальные линии + + Special lines + Специальные линии - First line: - Первая линия: + + First line: + Первая линия: - Ignore - Игнорировать + + Ignore + Игнорировать - Cluster by lines starting with: - Кластер по линии, начиная с: + + Cluster by lines starting with: + Кластер по линии, начиная с: - Ignore lines starting with: - Игнорировать строки, начинающиеся с: + + Ignore lines starting with: + Игнорировать строки, начинающиеся с: - Point format - Формат точек + + Point format + Формат точек - Number separator: - Числовой разделитель: + + Number separator: + Числовой разделитель: - Points format: - Формат точек: + + Points format: + Формат точек: - Next block: - Следующий блок: + + + + Next block: + Следующий блок: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X, Y, Z + + X,Y,Z + X, Y, Z - X,Y - X, Y + + X,Y + X, Y - none - Отсутствует + + + + none + Отсутствует - I,J,K (normal vector) - I,J,K(нормальный вектор) + + + + I,J,K (normal vector) + I,J,K(нормальный вектор) - I,K (normal vector 2D) - I,K(нормальный вектор 2D) + + + + I,K (normal vector 2D) + I,K(нормальный вектор 2D) - R,G,B (color) - R, G, B (цвет) + + + + R,G,B (color) + R, G, B (цвет) - I (Gray value) - I (значение серого) + + + + I (Gray value) + I (значение серого) - Preview - Предварительный просмотр + + Preview + Предварительный просмотр - 100 - 100 + + 100 + 100 - Number of points - Количество точек + + Number of points + Количество точек - Number of previewed lines: - Количество предварительно просматриваемых строк: + + Number of previewed lines: + Количество предварительно просматриваемых строк: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Точки Ascii (*.asc);;Все файлы (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Точки Ascii (*.asc);;Все файлы (*.*) - - + + Workbench - - Points tools - Инструменты для точек + + Points tools + Инструменты для точек - &Points - &Точки + + &Points + &Точки - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_se.ts b/src/Mod/Points/Gui/Resources/translations/Points_se.ts index 84184e780..75e3b387e 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_se.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_se.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Punkter + + Points + Punkter - Export points... - Exportera punkter... + + Export points... + Exportera punkter... - Exports a point cloud - Exporterar ett punktmoln + + + + Exports a point cloud + Exporterar ett punktmoln - - + + CmdPointsImport - Points - Punkter + + Points + Punkter - Import points... - Importera punkter... + + Import points... + Importera punkter... - Imports a point cloud - Importera ett punktmoln + + + + Imports a point cloud + Importera ett punktmoln - - + + CmdPointsPolyCut - Points - Punkter + + Points + Punkter - Cut point cloud - Klipp ut punktmoln + + Cut point cloud + Klipp ut punktmoln - Cuts a point cloud with a picked polygon - Klipper ut ett punktmoln med en vald polygon + + + + Cuts a point cloud with a picked polygon + Klipper ut ett punktmoln med en vald polygon - - + + CmdPointsTransform - Points - Punkter + + Points + Punkter - Transform Points - Omvandla punkter + + Transform Points + Omvandla punkter - Test to transform a point cloud - Testa att omforma ett punktmoln + + + + Test to transform a point cloud + Testa att omforma ett punktmoln - - + + PointsGui::DlgPointsRead - - ASCII points import - Importera ASCII punkter + + ASCII points import + Importera ASCII punkter - Template: - mall: + + Template: + mall: - Special lines - Special linjer + + Special lines + Special linjer - First line: - Första linjen: + + First line: + Första linjen: - Ignore - Ignorera + + Ignore + Ignorera - Cluster by lines starting with: - Linjekluster startar med: + + Cluster by lines starting with: + Linjekluster startar med: - Ignore lines starting with: - Ignorera linjer som startar med: + + Ignore lines starting with: + Ignorera linjer som startar med: - Point format - Punktformat + + Point format + Punktformat - Number separator: - Nummerseparator: + + Number separator: + Nummerseparator: - Points format: - Punktformat: + + Points format: + Punktformat: - Next block: - Nästa block: + + + + Next block: + Nästa block: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X, Y, Z + + X,Y,Z + X, Y, Z - X,Y - X, Y + + X,Y + X, Y - none - inget + + + + none + inget - I,J,K (normal vector) - I,J,K (normalvektor) + + + + I,J,K (normal vector) + I,J,K (normalvektor) - I,K (normal vector 2D) - I,K (2D nomalvektor) + + + + I,K (normal vector 2D) + I,K (2D nomalvektor) - R,G,B (color) - R,G,B (färg) + + + + R,G,B (color) + R,G,B (färg) - I (Gray value) - I (Gråton) + + + + I (Gray value) + I (Gråton) - Preview - Förhandsvisning + + Preview + Förhandsvisning - 100 - 100 + + 100 + 100 - Number of points - Antal punkter + + Number of points + Antal punkter - Number of previewed lines: - Antal förhandsgranskade rader: + + Number of previewed lines: + Antal förhandsgranskade rader: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii Punkter (*.asc);;Alla Filer (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii Punkter (*.asc);;Alla Filer (*.*) - - + + Workbench - - Points tools - Punktverktyg + + Points tools + Punktverktyg - &Points - &Punkter + + &Points + &Punkter - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_uk.ts b/src/Mod/Points/Gui/Resources/translations/Points_uk.ts index 66a28c6c6..25aefdbad 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_uk.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_uk.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - Точки + + Points + Точки - Export points... - Експорт точок... + + Export points... + Експорт точок... - Exports a point cloud - Експорт хмари точок + + + + Exports a point cloud + Експорт хмари точок - - + + CmdPointsImport - Points - Точки + + Points + Точки - Import points... - Імпорт точок... + + Import points... + Імпорт точок... - Imports a point cloud - Імпорт хмари точок + + + + Imports a point cloud + Імпорт хмари точок - - + + CmdPointsPolyCut - Points - Точки + + Points + Точки - Cut point cloud - Вирізати хмару точок + + Cut point cloud + Вирізати хмару точок - Cuts a point cloud with a picked polygon - Вирізати точки у виділеній області + + + + Cuts a point cloud with a picked polygon + Вирізати точки у виділеній області - - + + CmdPointsTransform - Points - Точки + + Points + Точки - Transform Points - Перетворення точок + + Transform Points + Перетворення точок - Test to transform a point cloud - Випробування для перетворення хмари точок + + + + Test to transform a point cloud + Випробування для перетворення хмари точок - - + + PointsGui::DlgPointsRead - - ASCII points import - Імпорт точок ASCII + + ASCII points import + Імпорт точок ASCII - Template: - Шаблон: + + Template: + Шаблон: - Special lines - Спеціальні лінії + + Special lines + Спеціальні лінії - First line: - Перший рядок: + + First line: + Перший рядок: - Ignore - Ігнорувати + + Ignore + Ігнорувати - Cluster by lines starting with: - Скупчення по лінії, починаючи з: + + Cluster by lines starting with: + Скупчення по лінії, починаючи з: - Ignore lines starting with: - Ігнорувати рядки, що починаються з: + + Ignore lines starting with: + Ігнорувати рядки, що починаються з: - Point format - Формат точки + + Point format + Формат точки - Number separator: - Number separator: + + Number separator: + Number separator: - Points format: - Формат точок: + + Points format: + Формат точок: - Next block: - Наступний блок: + + + + Next block: + Наступний блок: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - немає + + + + none + немає - I,J,K (normal vector) - I,J,K (нормальний вектор) + + + + I,J,K (normal vector) + I,J,K (нормальний вектор) - I,K (normal vector 2D) - I,K (нормальний вектор 2D) + + + + I,K (normal vector 2D) + I,K (нормальний вектор 2D) - R,G,B (color) - R,G,B (колір) + + + + R,G,B (color) + R,G,B (колір) - I (Gray value) - I (Значення сірого) + + + + I (Gray value) + I (Значення сірого) - Preview - Попередній перегляд + + Preview + Попередній перегляд - 100 - 100 + + 100 + 100 - Number of points - Кількість точок + + Number of points + Кількість точок - Number of previewed lines: - Кількість ліній в попередньому перегляді: + + Number of previewed lines: + Кількість ліній в попередньому перегляді: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii точки (*.asc);;Всі файли (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii точки (*.asc);;Всі файли (*.*) - - + + Workbench - - Points tools - Інструменти точок + + Points tools + Інструменти точок - &Points - &Точки + + &Points + &Точки - + diff --git a/src/Mod/Points/Gui/Resources/translations/Points_zh.ts b/src/Mod/Points/Gui/Resources/translations/Points_zh.ts index 5a47f88a8..c68b9f2c0 100644 --- a/src/Mod/Points/Gui/Resources/translations/Points_zh.ts +++ b/src/Mod/Points/Gui/Resources/translations/Points_zh.ts @@ -1,193 +1,251 @@ - - + + CmdPointsExport - - Points - + + Points + - Export points... - 导出点... + + Export points... + 导出点... - Exports a point cloud - 导出点云 + + + + Exports a point cloud + 导出点云 - - + + CmdPointsImport - Points - + + Points + - Import points... - 输入点... + + Import points... + 输入点... - Imports a point cloud - 导入点云 + + + + Imports a point cloud + 导入点云 - - + + CmdPointsPolyCut - Points - + + Points + - Cut point cloud - 剪切点云 + + Cut point cloud + 剪切点云 - Cuts a point cloud with a picked polygon - 剪切多边形选择框中的点云 + + + + Cuts a point cloud with a picked polygon + 剪切多边形选择框中的点云 - - + + CmdPointsTransform - Points - + + Points + - Transform Points - 变换点 + + Transform Points + 变换点 - Test to transform a point cloud - 变换点云测试 + + + + Test to transform a point cloud + 变换点云测试 - - + + PointsGui::DlgPointsRead - - ASCII points import - ASCII点导入 + + ASCII points import + ASCII点导入 - Template: - 模板: + + Template: + 模板: - Special lines - 特殊行 + + Special lines + 特殊行 - First line: - 首行: + + First line: + 首行: - Ignore - 忽略 + + Ignore + 忽略 - Cluster by lines starting with: - 按行开始集群: + + Cluster by lines starting with: + 按行开始集群: - Ignore lines starting with: - 忽略以此开头的行: + + Ignore lines starting with: + 忽略以此开头的行: - Point format - 点格式 + + Point format + 点格式 - Number separator: - 数分隔符: + + Number separator: + 数分隔符: - Points format: - 点的格式: + + Points format: + 点的格式: - Next block: - 下一区块: + + + + Next block: + 下一区块: - , - , + + , + , - ; - ; + + ; + ; - \t - \t + + \t + \t - \w - \w + + \w + \w - X,Y,Z - X,Y,Z + + X,Y,Z + X,Y,Z - X,Y - X,Y + + X,Y + X,Y - none - + + + + none + - I,J,K (normal vector) - I,J,K(法向量) + + + + I,J,K (normal vector) + I,J,K(法向量) - I,K (normal vector 2D) - I,K(2D法向量) + + + + I,K (normal vector 2D) + I,K(2D法向量) - R,G,B (color) - RGB颜色 + + + + R,G,B (color) + RGB颜色 - I (Gray value) - I(灰度值) + + + + I (Gray value) + I(灰度值) - Preview - 预览 + + Preview + 预览 - 100 - 100 + + 100 + 100 - Number of points - 点的数量 + + Number of points + 点的数量 - Number of previewed lines: - 预览行数: + + Number of previewed lines: + 预览行数: - - + + QObject - - Ascii Points (*.asc);;All Files (*.*) - Ascii 点(*.asc),所有文件 (*.*) + + + Ascii Points (*.asc);;All Files (*.*) + Ascii 点(*.asc),所有文件 (*.*) - - + + Workbench - - Points tools - 点工具 + + Points tools + 点工具 - &Points - 点(&P) + + &Points + 点(&P) - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_af.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_af.ts index e84a75847..56b675e7b 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_af.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_af.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Lêer + + File + Lêer - &Export project... - &Voer projek uit... + + &Export project... + &Voer projek uit... - Export the Povray project file - Voer die Povray projeklêer uit + + Export the Povray project file + Voer die Povray projeklêer uit - - + + CmdRaytracingNewPartSegment - Raytracing - Straalsporing + + Raytracing + Straalsporing - Insert part - Voeg onderdeel in + + Insert part + Voeg onderdeel in - Insert a new part object into a Povray project - Voeg 'n nuwe onderdeelvoorwerp in na 'n Povray-projek + + Insert a new part object into a Povray project + Voeg 'n nuwe onderdeelvoorwerp in na 'n Povray-projek - - + + CmdRaytracingNewPovrayProject - Raytracing - Straalsporing + + Raytracing + Straalsporing - New Povray project - Nuwe Povray-projek + + New Povray project + Nuwe Povray-projek - Insert new Povray project into the document - Voeg nuwe Povray-projek in na die dokument + + Insert new Povray project into the document + Voeg nuwe Povray-projek in na die dokument - - + + CmdRaytracingWriteCamera - Raytracing - Straalsporing + + Raytracing + Straalsporing - Export camera to povray... - Export camera to povray... + + Export camera to povray... + Export camera to povray... - Export the camera positon of the active 3D view in PovRay format to a file - Voer die kameraposisie van die aktiewe 3D-aansig uit na 'n Povray-lêer + + Export the camera positon of the active 3D view in PovRay format to a file + Voer die kameraposisie van die aktiewe 3D-aansig uit na 'n Povray-lêer - - + + CmdRaytracingWritePart - Raytracing - Straalsporing + + Raytracing + Straalsporing - Export part to povray... - Voer onderdeel uit na Povray... + + Export part to povray... + Voer onderdeel uit na Povray... - Write the selected Part (object) as a povray file - Skryf die gekose onderdeel (voorwerp) na 'n Povray-lêer + + Write the selected Part (object) as a povray file + Skryf die gekose onderdeel (voorwerp) na 'n Povray-lêer - - + + CmdRaytracingWriteView - Raytracing - Straalsporing + + + + No perspective camera + - Export view to povray... - Voer uit na Povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Skryf die aktiewe 3D-vertoning met kamera en al sy inhoud na 'n Povray-lêer + + Raytracing + Straalsporing - - + + + Export view to povray... + Voer uit na Povray... + + + + Write the active 3D view with camera and all its content to a povray file + Skryf die aktiewe 3D-vertoning met kamera en al sy inhoud na 'n Povray-lêer + + + QObject - Povray(*.pov) - Povray (*.pov) + + + + + Povray(*.pov) + Povray (*.pov) - All Files (*.*) - Alle lêers (*.*) + + + + + All Files (*.*) + Alle lêers (*.*) - Export page - Voer bladsy uit + + + + + Export page + Voer bladsy uit - Wrong selection - Verkeerde keuse + + + Wrong selection + Verkeerde keuse - Select a Part object. - Kies 'n onderdeel. + + Select a Part object. + Kies 'n onderdeel. - No Povray project to insert - Geen Povrayprojek om in te voeg nie + + + No Povray project to insert + Geen Povrayprojek om in te voeg nie - Create a Povray project to insert a view. - Skep 'n Povrayprojek om 'n aansig in te voeg. + + Create a Povray project to insert a view. + Skep 'n Povrayprojek om 'n aansig in te voeg. - Select one Povray project object. - Kies een Povray projekvoorwerp. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Kies een Povray projekvoorwerp. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Straalsporing + + Raytracing + Straalsporing - Directories - Gidse + + Directories + Gidse - Default Project dir: - Standaard Projekgids: + + Default Project dir: + Standaard Projekgids: - Camera file name: - Kameralêernaam: + + Camera file name: + Kameralêernaam: - Part file name: - Onderdeellêernaam: + + Part file name: + Onderdeellêernaam: - TempCamera.inc - TempKamera.inc + + TempCamera.inc + TempKamera.inc - TempPart.inc - TempOnderdeel.inc + + TempPart.inc + TempOnderdeel.inc - Mesh export settings - Maas uitvoerinstellings + + Mesh export settings + Maas uitvoerinstellings - max mesh deviation: - Maksimum maasafwyking: + + max mesh deviation: + Maksimum maasafwyking: - Do not calculate vertex normals - Bereken nie die hoekpuntnormaallyne nie + + Do not calculate vertex normals + Bereken nie die hoekpuntnormaallyne nie - Write u,v coordinates - Skryf u,v koördinate + + Write u,v coordinates + Skryf u,v koördinate - - + + Workbench - - &Raytracing - &Straalsporing + + &Raytracing + &Straalsporing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_de.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_de.ts index 2c93383be..5da114aa0 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_de.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_de.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Datei + + File + Datei - &Export project... - Projekt &exportieren... + + &Export project... + Projekt &exportieren... - Export the Povray project file - Povray-Projektdatei exportieren + + Export the Povray project file + Povray-Projektdatei exportieren - - + + CmdRaytracingNewPartSegment - Raytracing - Raytracing + + Raytracing + Raytracing - Insert part - Teil einfügen + + Insert part + Teil einfügen - Insert a new part object into a Povray project - Ein neues Formteil in ein Povray-Projekt einfügen + + Insert a new part object into a Povray project + Ein neues Formteil in ein Povray-Projekt einfügen - - + + CmdRaytracingNewPovrayProject - Raytracing - Raytracing + + Raytracing + Raytracing - New Povray project - Neues Povray-Projekt + + New Povray project + Neues Povray-Projekt - Insert new Povray project into the document - Neues Povray-Projekt in Dokument einfügen + + Insert new Povray project into the document + Neues Povray-Projekt in Dokument einfügen - - + + CmdRaytracingWriteCamera - Raytracing - Raytracing + + Raytracing + Raytracing - Export camera to povray... - Kamera nach Povray exportieren... + + Export camera to povray... + Kamera nach Povray exportieren... - Export the camera positon of the active 3D view in PovRay format to a file - Kameraposition der aktiven 3D-Ansicht im Povray-Format in eine Datei exportieren + + Export the camera positon of the active 3D view in PovRay format to a file + Kameraposition der aktiven 3D-Ansicht im Povray-Format in eine Datei exportieren - - + + CmdRaytracingWritePart - Raytracing - Raytracing + + Raytracing + Raytracing - Export part to povray... - Formteil nach Povray exportieren... + + Export part to povray... + Formteil nach Povray exportieren... - Write the selected Part (object) as a povray file - Selektiertes Formteil in Povray-Datei schreiben + + Write the selected Part (object) as a povray file + Selektiertes Formteil in Povray-Datei schreiben - - + + CmdRaytracingWriteView - Raytracing - Raytracing + + + + No perspective camera + - Export view to povray... - Ansicht nach Povray exportieren... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Aktive 3D-Ansicht mit Kamera und ganzem Inhalt in eine Povray-Datei schreiben + + Raytracing + Raytracing - - + + + Export view to povray... + Ansicht nach Povray exportieren... + + + + Write the active 3D view with camera and all its content to a povray file + Aktive 3D-Ansicht mit Kamera und ganzem Inhalt in eine Povray-Datei schreiben + + + QObject - Povray(*.pov) - Povray(*.pov) + + + + + Povray(*.pov) + Povray(*.pov) - All Files (*.*) - Alle Dateien (*.*) + + + + + All Files (*.*) + Alle Dateien (*.*) - Export page - Seite exportieren + + + + + Export page + Seite exportieren - Wrong selection - Falsche Auswahl + + + Wrong selection + Falsche Auswahl - Select a Part object. - Formteil auswählen. + + Select a Part object. + Formteil auswählen. - No Povray project to insert - Kein Povray-Projekt zum Einfügen + + + No Povray project to insert + Kein Povray-Projekt zum Einfügen - Create a Povray project to insert a view. - Povray-Projekt erstellen, um eine Ansicht einzufügen. + + Create a Povray project to insert a view. + Povray-Projekt erstellen, um eine Ansicht einzufügen. - Select one Povray project object. - Wählen Sie ein Povray-Projekt aus. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Wählen Sie ein Povray-Projekt aus. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Raytracing + + Raytracing + Raytracing - Directories - Verzeichnisse + + Directories + Verzeichnisse - Default Project dir: - Standard-Projektverzeichnis: + + Default Project dir: + Standard-Projektverzeichnis: - Camera file name: - Kamera-Dateiname: + + Camera file name: + Kamera-Dateiname: - Part file name: - Formteil-Dateiname: + + Part file name: + Formteil-Dateiname: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Mesh-Exporteinstellungen + + Mesh export settings + Mesh-Exporteinstellungen - max mesh deviation: - max. Mesh-Abweichung: + + max mesh deviation: + max. Mesh-Abweichung: - Do not calculate vertex normals - Vertexnormalen nicht berechnen + + Do not calculate vertex normals + Vertexnormalen nicht berechnen - Write u,v coordinates - U, V-Koordinaten schreiben + + Write u,v coordinates + U, V-Koordinaten schreiben - - + + Workbench - - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_es.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_es.ts index ca80c6fbe..04eaa62ed 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_es.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_es.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Archivo + + File + Archivo - &Export project... - &Exportar proyecto... + + &Export project... + &Exportar proyecto... - Export the Povray project file - Exportar el archivo de proyecto Povray + + Export the Povray project file + Exportar el archivo de proyecto Povray - - + + CmdRaytracingNewPartSegment - Raytracing - Trazado de rayos + + Raytracing + Trazado de rayos - Insert part - Insertar pieza + + Insert part + Insertar pieza - Insert a new part object into a Povray project - Insertar objeto 'Parte' nuevo en un proyecto de Povray + + Insert a new part object into a Povray project + Insertar objeto 'Parte' nuevo en un proyecto de Povray - - + + CmdRaytracingNewPovrayProject - Raytracing - Trazado de rayos + + Raytracing + Trazado de rayos - New Povray project - Proyecto Povray nuevo + + New Povray project + Proyecto Povray nuevo - Insert new Povray project into the document - Insertar proyecto Povray nuevo en el documento + + Insert new Povray project into the document + Insertar proyecto Povray nuevo en el documento - - + + CmdRaytracingWriteCamera - Raytracing - Trazado de rayos + + Raytracing + Trazado de rayos - Export camera to povray... - Export camera to povray... + + Export camera to povray... + Export camera to povray... - Export the camera positon of the active 3D view in PovRay format to a file - Exportar la posición de la cámara de la vista 3D activa en formato PovRay a un archivo + + Export the camera positon of the active 3D view in PovRay format to a file + Exportar la posición de la cámara de la vista 3D activa en formato PovRay a un archivo - - + + CmdRaytracingWritePart - Raytracing - Trazado de rayos + + Raytracing + Trazado de rayos - Export part to povray... - Exportar pieza a povray... + + Export part to povray... + Exportar pieza a povray... - Write the selected Part (object) as a povray file - Escribir la Parte (objecto) seleccionada a un archivo povray + + Write the selected Part (object) as a povray file + Escribir la Parte (objecto) seleccionada a un archivo povray - - + + CmdRaytracingWriteView - Raytracing - Trazado de rayos + + + + No perspective camera + - Export view to povray... - Exportar vista a povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Escribir la vista 3D activa con cámara y todo su contenido a un archivo povray + + Raytracing + Trazado de rayos - - + + + Export view to povray... + Exportar vista a povray... + + + + Write the active 3D view with camera and all its content to a povray file + Escribir la vista 3D activa con cámara y todo su contenido a un archivo povray + + + QObject - Povray(*.pov) - Povray(*.pov) + + + + + Povray(*.pov) + Povray(*.pov) - All Files (*.*) - Todos los archivos (*.*) + + + + + All Files (*.*) + Todos los archivos (*.*) - Export page - Exportar página + + + + + Export page + Exportar página - Wrong selection - Selección errónea + + + Wrong selection + Selección errónea - Select a Part object. - Seleccione un objecto tipo Parte. + + Select a Part object. + Seleccione un objecto tipo Parte. - No Povray project to insert - Ningún proyecto Povray para insertar + + + No Povray project to insert + Ningún proyecto Povray para insertar - Create a Povray project to insert a view. - Crear un proyecto Povray para insertar una vista. + + Create a Povray project to insert a view. + Crear un proyecto Povray para insertar una vista. - Select one Povray project object. - Seleccione un objeto tipo Proyecto Povray. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Seleccione un objeto tipo Proyecto Povray. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Trazado de rayos + + Raytracing + Trazado de rayos - Directories - Directorios + + Directories + Directorios - Default Project dir: - Directorio por defecto del proyecto: + + Default Project dir: + Directorio por defecto del proyecto: - Camera file name: - Nombre del archivo de la cámara: + + Camera file name: + Nombre del archivo de la cámara: - Part file name: - Nombre del archivo de la pieza: + + Part file name: + Nombre del archivo de la pieza: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Configuración de la exportación de mallas + + Mesh export settings + Configuración de la exportación de mallas - max mesh deviation: - Desviación máxima de la malla: + + max mesh deviation: + Desviación máxima de la malla: - Do not calculate vertex normals - No calcular vértices normales + + Do not calculate vertex normals + No calcular vértices normales - Write u,v coordinates - Escribir las coordenadas u,v + + Write u,v coordinates + Escribir las coordenadas u,v - - + + Workbench - - &Raytracing - &Trazado de rayos + + &Raytracing + &Trazado de rayos - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fi.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fi.ts index c37aed27e..0ef434a17 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fi.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fi.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Tiedosto + + File + Tiedosto - &Export project... - Projektin &vienti... + + &Export project... + Projektin &vienti... - Export the Povray project file - Vie Povray-projektitiedosto + + Export the Povray project file + Vie Povray-projektitiedosto - - + + CmdRaytracingNewPartSegment - Raytracing - Raytracing + + Raytracing + Raytracing - Insert part - Lisää osa + + Insert part + Lisää osa - Insert a new part object into a Povray project - Insert a new part object into a Povray project + + Insert a new part object into a Povray project + Insert a new part object into a Povray project - - + + CmdRaytracingNewPovrayProject - Raytracing - Raytracing + + Raytracing + Raytracing - New Povray project - Uusi Povray-projekti + + New Povray project + Uusi Povray-projekti - Insert new Povray project into the document - Insert new Povray project into the document + + Insert new Povray project into the document + Insert new Povray project into the document - - + + CmdRaytracingWriteCamera - Raytracing - Raytracing + + Raytracing + Raytracing - Export camera to povray... - Export camera to povray... + + Export camera to povray... + Export camera to povray... - Export the camera positon of the active 3D view in PovRay format to a file - Export the camera positon of the active 3D view in PovRay format to a file + + Export the camera positon of the active 3D view in PovRay format to a file + Export the camera positon of the active 3D view in PovRay format to a file - - + + CmdRaytracingWritePart - Raytracing - Raytracing + + Raytracing + Raytracing - Export part to povray... - Vie osa povray-malliin ... + + Export part to povray... + Vie osa povray-malliin ... - Write the selected Part (object) as a povray file - Write the selected Part (object) as a povray file + + Write the selected Part (object) as a povray file + Write the selected Part (object) as a povray file - - + + CmdRaytracingWriteView - Raytracing - Raytracing + + + + No perspective camera + - Export view to povray... - Vie näkymä povray-muotoon ... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Write the active 3D view with camera and all its content to a povray file + + Raytracing + Raytracing - - + + + Export view to povray... + Vie näkymä povray-muotoon ... + + + + Write the active 3D view with camera and all its content to a povray file + Write the active 3D view with camera and all its content to a povray file + + + QObject - Povray(*.pov) - Povray(*.POV) + + + + + Povray(*.pov) + Povray(*.POV) - All Files (*.*) - Kaikki tiedostot (*.*) + + + + + All Files (*.*) + Kaikki tiedostot (*.*) - Export page - Vie sivu + + + + + Export page + Vie sivu - Wrong selection - Väärä valinta + + + Wrong selection + Väärä valinta - Select a Part object. - Valitse osa-objekti. + + Select a Part object. + Valitse osa-objekti. - No Povray project to insert - No Povray project to insert + + + No Povray project to insert + No Povray project to insert - Create a Povray project to insert a view. - Create a Povray project to insert a view. + + Create a Povray project to insert a view. + Create a Povray project to insert a view. - Select one Povray project object. - Valitse yksi Povray-projektin objekti. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Valitse yksi Povray-projektin objekti. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Raytracing + + Raytracing + Raytracing - Directories - Hakemistot + + Directories + Hakemistot - Default Project dir: - Oletus projektihakemisto: + + Default Project dir: + Oletus projektihakemisto: - Camera file name: - Camera file name: + + Camera file name: + Camera file name: - Part file name: - Part file name: + + Part file name: + Part file name: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Mesh export settings + + Mesh export settings + Mesh export settings - max mesh deviation: - max mesh deviation: + + max mesh deviation: + max mesh deviation: - Do not calculate vertex normals - Älä laskea normaaleita kärkipisteitä + + Do not calculate vertex normals + Älä laskea normaaleita kärkipisteitä - Write u,v coordinates - Kirjoita u,v koordinaatit + + Write u,v coordinates + Kirjoita u,v koordinaatit - - + + Workbench - - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fr.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fr.ts index faf5f5821..330b3ebe5 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fr.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_fr.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Fichier + + File + Fichier - &Export project... - &Exporter le projet... + + &Export project... + &Exporter le projet... - Export the Povray project file - Exporter le fichier de projet PovRay + + Export the Povray project file + Exporter le fichier de projet PovRay - - + + CmdRaytracingNewPartSegment - Raytracing - Lancer de rayon + + Raytracing + Lancer de rayon - Insert part - Insérer une pièce + + Insert part + Insérer une pièce - Insert a new part object into a Povray project - Insérer un nouvel objet pièce dans un projet PovRay + + Insert a new part object into a Povray project + Insérer un nouvel objet pièce dans un projet PovRay - - + + CmdRaytracingNewPovrayProject - Raytracing - Lancer de rayon + + Raytracing + Lancer de rayon - New Povray project - Nouveau projet PovRay + + New Povray project + Nouveau projet PovRay - Insert new Povray project into the document - Insérer un nouveau projet PovRay dans le document + + Insert new Povray project into the document + Insérer un nouveau projet PovRay dans le document - - + + CmdRaytracingWriteCamera - Raytracing - Lancer de rayon + + Raytracing + Lancer de rayon - Export camera to povray... - Exporter la caméra vers PovRay... + + Export camera to povray... + Exporter la caméra vers PovRay... - Export the camera positon of the active 3D view in PovRay format to a file - Exporter la position de la caméra de la vue 3D active vers un fichier au format PovRay + + Export the camera positon of the active 3D view in PovRay format to a file + Exporter la position de la caméra de la vue 3D active vers un fichier au format PovRay - - + + CmdRaytracingWritePart - Raytracing - Lancer de rayon + + Raytracing + Lancer de rayon - Export part to povray... - Exporter la pièce vers povray... + + Export part to povray... + Exporter la pièce vers povray... - Write the selected Part (object) as a povray file - Enregistrer la pièce sélectionnée (objet) sous forme de fichier povray + + Write the selected Part (object) as a povray file + Enregistrer la pièce sélectionnée (objet) sous forme de fichier povray - - + + CmdRaytracingWriteView - Raytracing - Lancer de rayon + + + + No perspective camera + - Export view to povray... - Exporter la vue vers povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Enregistrer la vue 3D active avec la caméra et tout son contenu dans un fichier povray + + Raytracing + Lancer de rayon - - + + + Export view to povray... + Exporter la vue vers povray... + + + + Write the active 3D view with camera and all its content to a povray file + Enregistrer la vue 3D active avec la caméra et tout son contenu dans un fichier povray + + + QObject - Povray(*.pov) - Povray (*.pov) + + + + + Povray(*.pov) + Povray (*.pov) - All Files (*.*) - Tous les fichiers (*.*) + + + + + All Files (*.*) + Tous les fichiers (*.*) - Export page - Exporter la page + + + + + Export page + Exporter la page - Wrong selection - Sélection invalide + + + Wrong selection + Sélection invalide - Select a Part object. - Sélectionnez un objet pièce. + + Select a Part object. + Sélectionnez un objet pièce. - No Povray project to insert - Aucun projet PovRay à insérer + + + No Povray project to insert + Aucun projet PovRay à insérer - Create a Povray project to insert a view. - Créez un projet Povray pour insérer une vue. + + Create a Povray project to insert a view. + Créez un projet Povray pour insérer une vue. - Select one Povray project object. - Sélectionnez un objet de projet Povray. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Sélectionnez un objet de projet Povray. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Lancer de rayon + + Raytracing + Lancer de rayon - Directories - Répertoires + + Directories + Répertoires - Default Project dir: - Répertoire par défaut du projet : + + Default Project dir: + Répertoire par défaut du projet : - Camera file name: - Nom du fichier caméra : + + Camera file name: + Nom du fichier caméra : - Part file name: - Nom du fichier pièce : + + Part file name: + Nom du fichier pièce : - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Paramètres d'exportation de maillage + + Mesh export settings + Paramètres d'exportation de maillage - max mesh deviation: - écart maximum des maillages : + + max mesh deviation: + écart maximum des maillages : - Do not calculate vertex normals - Ne pas calculer les normales des sommets + + Do not calculate vertex normals + Ne pas calculer les normales des sommets - Write u,v coordinates - Écrire les coordonnées (u,v) + + Write u,v coordinates + Écrire les coordonnées (u,v) - - + + Workbench - - &Raytracing - Lancer de &Rayon + + &Raytracing + Lancer de &Rayon - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hr.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hr.ts index ccf867101..615bed673 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hr.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hr.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Datoteka + + File + Datoteka - &Export project... - &Izvezi projekt... + + &Export project... + &Izvezi projekt... - Export the Povray project file - Izvoz datoteka Povray projekt + + Export the Povray project file + Izvoz datoteka Povray projekt - - + + CmdRaytracingNewPartSegment - Raytracing - Metode trasiranja putem zrake + + Raytracing + Metode trasiranja putem zrake - Insert part - Umetni dio + + Insert part + Umetni dio - Insert a new part object into a Povray project - Umetnite novi dio objekta u Povray-projekta + + Insert a new part object into a Povray project + Umetnite novi dio objekta u Povray-projekta - - + + CmdRaytracingNewPovrayProject - Raytracing - Metode trasiranja putem zrake + + Raytracing + Metode trasiranja putem zrake - New Povray project - Novi projekt Povray + + New Povray project + Novi projekt Povray - Insert new Povray project into the document - Umetanje novog Povray projekta u dokument + + Insert new Povray project into the document + Umetanje novog Povray projekta u dokument - - + + CmdRaytracingWriteCamera - Raytracing - Metode trasiranja putem zrake + + Raytracing + Metode trasiranja putem zrake - Export camera to povray... - Izvoz kamere u povray ... + + Export camera to povray... + Izvoz kamere u povray ... - Export the camera positon of the active 3D view in PovRay format to a file - Prenesi položaj kamere iz 3D aktivnog prikaza u povray format, u datoteku + + Export the camera positon of the active 3D view in PovRay format to a file + Prenesi položaj kamere iz 3D aktivnog prikaza u povray format, u datoteku - - + + CmdRaytracingWritePart - Raytracing - Metode trasiranja putem zrake + + Raytracing + Metode trasiranja putem zrake - Export part to povray... - Izvoz dijela u povray ... + + Export part to povray... + Izvoz dijela u povray ... - Write the selected Part (object) as a povray file - Napišite odabrani dio (objekta) kao povray datoteke + + Write the selected Part (object) as a povray file + Napišite odabrani dio (objekta) kao povray datoteke - - + + CmdRaytracingWriteView - Raytracing - Metode trasiranja putem zrake + + + + No perspective camera + - Export view to povray... - Pogled u povray ... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Napišite aktivni 3D prikaz s kamerom i sve njezine sadržaje u povray datoteke + + Raytracing + Metode trasiranja putem zrake - - + + + Export view to povray... + Pogled u povray ... + + + + Write the active 3D view with camera and all its content to a povray file + Napišite aktivni 3D prikaz s kamerom i sve njezine sadržaje u povray datoteke + + + QObject - Povray(*.pov) - Povray (*. pov) + + + + + Povray(*.pov) + Povray (*. pov) - All Files (*.*) - Sve datoteke (*.*) + + + + + All Files (*.*) + Sve datoteke (*.*) - Export page - Izvezi stranicu + + + + + Export page + Izvezi stranicu - Wrong selection - Pogrešan odabir + + + Wrong selection + Pogrešan odabir - Select a Part object. - Odaberite dio objekta. + + Select a Part object. + Odaberite dio objekta. - No Povray project to insert - Nema Povray projekta za umetanje + + + No Povray project to insert + Nema Povray projekta za umetanje - Create a Povray project to insert a view. - Napravite Povray projekt za umetanje pogleda. + + Create a Povray project to insert a view. + Napravite Povray projekt za umetanje pogleda. - Select one Povray project object. - Odaberite jedan objekt Povray projekta. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Odaberite jedan objekt Povray projekta. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Metode trasiranja putem zrake + + Raytracing + Metode trasiranja putem zrake - Directories - Mape + + Directories + Mape - Default Project dir: - Osnovni Projekt dir: + + Default Project dir: + Osnovni Projekt dir: - Camera file name: - Kamera, ime datoteke: + + Camera file name: + Kamera, ime datoteke: - Part file name: - Dio naziva datoteke: + + Part file name: + Dio naziva datoteke: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Izvoz postavki mreže + + Mesh export settings + Izvoz postavki mreže - max mesh deviation: - max devijacija mreže: + + max mesh deviation: + max devijacija mreže: - Do not calculate vertex normals - Ne izračunati vrh normale + + Do not calculate vertex normals + Ne izračunati vrh normale - Write u,v coordinates - Napišite u,v koordinate + + Write u,v coordinates + Napišite u,v koordinate - - + + Workbench - - &Raytracing - Metode trasiranja putem zrake + + &Raytracing + Metode trasiranja putem zrake - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hu.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hu.ts index fa57799af..705a34ee4 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hu.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_hu.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Fájl + + File + Fájl - &Export project... - &Export projekt ... + + &Export project... + &Export projekt ... - Export the Povray project file - Povray-project fájl exportálása + + Export the Povray project file + Povray-project fájl exportálása - - + + CmdRaytracingNewPartSegment - Raytracing - Sugárkövetés + + Raytracing + Sugárkövetés - Insert part - Alkatrész beillesztése + + Insert part + Alkatrész beillesztése - Insert a new part object into a Povray project - Új alkatrész objektum beillesztése egy Povray pojekt-be + + Insert a new part object into a Povray project + Új alkatrész objektum beillesztése egy Povray pojekt-be - - + + CmdRaytracingNewPovrayProject - Raytracing - Sugárkövetés + + Raytracing + Sugárkövetés - New Povray project - Új Povray projekt + + New Povray project + Új Povray projekt - Insert new Povray project into the document - Új Povray projekt beszúrása a dokumentumba + + Insert new Povray project into the document + Új Povray projekt beszúrása a dokumentumba - - + + CmdRaytracingWriteCamera - Raytracing - Sugárkövetés + + Raytracing + Sugárkövetés - Export camera to povray... - Kamera exportálása Povray-be... + + Export camera to povray... + Kamera exportálása Povray-be... - Export the camera positon of the active 3D view in PovRay format to a file - Az aktuális 3D-s nézet kamera pozícióját exportálja Povray formában egy fájlba + + Export the camera positon of the active 3D view in PovRay format to a file + Az aktuális 3D-s nézet kamera pozícióját exportálja Povray formában egy fájlba - - + + CmdRaytracingWritePart - Raytracing - Sugárkövetés + + Raytracing + Sugárkövetés - Export part to povray... - Alkatrész exportálása Povray-be ... + + Export part to povray... + Alkatrész exportálása Povray-be ... - Write the selected Part (object) as a povray file - A kijelölt alkatrész (objektum) kiírása egy povray-fájlként + + Write the selected Part (object) as a povray file + A kijelölt alkatrész (objektum) kiírása egy povray-fájlként - - + + CmdRaytracingWriteView - Raytracing - Sugárkövetés + + + + No perspective camera + - Export view to povray... - Nézet exportálása povray-be... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Az aktuális 3D nézet minden tartalmának írása egy Povray fájlba + + Raytracing + Sugárkövetés - - + + + Export view to povray... + Nézet exportálása povray-be... + + + + Write the active 3D view with camera and all its content to a povray file + Az aktuális 3D nézet minden tartalmának írása egy Povray fájlba + + + QObject - Povray(*.pov) - Povray(*.pov) + + + + + Povray(*.pov) + Povray(*.pov) - All Files (*.*) - Minden fájl (*.*) + + + + + All Files (*.*) + Minden fájl (*.*) - Export page - Oldal exportálása + + + + + Export page + Oldal exportálása - Wrong selection - Rossz választás + + + Wrong selection + Rossz választás - Select a Part object. - Válasszon ki egy alkatrész objektumot. + + Select a Part object. + Válasszon ki egy alkatrész objektumot. - No Povray project to insert - Nem Povray projekt beszúrása + + + No Povray project to insert + Nem Povray projekt beszúrása - Create a Povray project to insert a view. - Hozzon létre egy Povray kivetítést a nézet beszúrás érdekében. + + Create a Povray project to insert a view. + Hozzon létre egy Povray kivetítést a nézet beszúrás érdekében. - Select one Povray project object. - Válasszon ki egy Povray terv objektumot. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Válasszon ki egy Povray terv objektumot. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Sugárkövetés + + Raytracing + Sugárkövetés - Directories - Könyvtárak + + Directories + Könyvtárak - Default Project dir: - Alapértelmezett projekt könyvtár: + + Default Project dir: + Alapértelmezett projekt könyvtár: - Camera file name: - Kamera fájl neve: + + Camera file name: + Kamera fájl neve: - Part file name: - Alkatrész fájlnév: + + Part file name: + Alkatrész fájlnév: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Háló objektum beállítások + + Mesh export settings + Háló objektum beállítások - max mesh deviation: - Max. háló eltérés: + + max mesh deviation: + Max. háló eltérés: - Do not calculate vertex normals - Nem számítson vertex helyzetet + + Do not calculate vertex normals + Nem számítson vertex helyzetet - Write u,v coordinates - u,v-koordináták írása + + Write u,v coordinates + u,v-koordináták írása - - + + Workbench - - &Raytracing - Sugáriánynyomvonal + + &Raytracing + Sugáriánynyomvonal - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_it.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_it.ts index 9989f8ee6..1d8dfa07c 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_it.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_it.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - File + + File + File - &Export project... - &Esporta progetto... + + &Export project... + &Esporta progetto... - Export the Povray project file - Esporta il file di progetto Povray + + Export the Povray project file + Esporta il file di progetto Povray - - + + CmdRaytracingNewPartSegment - Raytracing - Raytracing + + Raytracing + Raytracing - Insert part - Inserisci parte + + Insert part + Inserisci parte - Insert a new part object into a Povray project - Inserisci un nuovo oggetto parte in un progetto Povray + + Insert a new part object into a Povray project + Inserisci un nuovo oggetto parte in un progetto Povray - - + + CmdRaytracingNewPovrayProject - Raytracing - Raytracing + + Raytracing + Raytracing - New Povray project - Nuovo progetto Povray + + New Povray project + Nuovo progetto Povray - Insert new Povray project into the document - Inserisce un nuovo progetto Povray nel documento + + Insert new Povray project into the document + Inserisce un nuovo progetto Povray nel documento - - + + CmdRaytracingWriteCamera - Raytracing - Raytracing + + Raytracing + Raytracing - Export camera to povray... - Esporta la camera a povray... + + Export camera to povray... + Esporta la camera a povray... - Export the camera positon of the active 3D view in PovRay format to a file - Esporta la posizione della telecamera della vista 3D attiva in un file in formato PovRay + + Export the camera positon of the active 3D view in PovRay format to a file + Esporta la posizione della telecamera della vista 3D attiva in un file in formato PovRay - - + + CmdRaytracingWritePart - Raytracing - Raytracing + + Raytracing + Raytracing - Export part to povray... - Esporta la parte in povray... + + Export part to povray... + Esporta la parte in povray... - Write the selected Part (object) as a povray file - Scrive la parte selezionata (oggetto) come un file povray + + Write the selected Part (object) as a povray file + Scrive la parte selezionata (oggetto) come un file povray - - + + CmdRaytracingWriteView - Raytracing - Raytracing + + + + No perspective camera + - Export view to povray... - Esporta la vista in povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Salva la vista 3D attiva con la camera e tutto il suo contenuto in un file povray + + Raytracing + Raytracing - - + + + Export view to povray... + Esporta la vista in povray... + + + + Write the active 3D view with camera and all its content to a povray file + Salva la vista 3D attiva con la camera e tutto il suo contenuto in un file povray + + + QObject - Povray(*.pov) - Povray (*.pov) + + + + + Povray(*.pov) + Povray (*.pov) - All Files (*.*) - Tutti i file (*.*) + + + + + All Files (*.*) + Tutti i file (*.*) - Export page - Esporta pagina + + + + + Export page + Esporta pagina - Wrong selection - Selezione errata + + + Wrong selection + Selezione errata - Select a Part object. - Seleziona un oggetto Part. + + Select a Part object. + Seleziona un oggetto Part. - No Povray project to insert - Nessun progetto Povray da inserire + + + No Povray project to insert + Nessun progetto Povray da inserire - Create a Povray project to insert a view. - Crea un progetto Povray per inserire una vista. + + Create a Povray project to insert a view. + Crea un progetto Povray per inserire una vista. - Select one Povray project object. - Seleziona un progetto Povray. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Seleziona un progetto Povray. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Raytracing + + Raytracing + Raytracing - Directories - Cartelle + + Directories + Cartelle - Default Project dir: - Cartella di default del progetto: + + Default Project dir: + Cartella di default del progetto: - Camera file name: - Nome del file della telecamera: + + Camera file name: + Nome del file della telecamera: - Part file name: - Nome del file della parte: + + Part file name: + Nome del file della parte: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Impostazioni di esportazione mesh + + Mesh export settings + Impostazioni di esportazione mesh - max mesh deviation: - Massima deviazione della mesh: + + max mesh deviation: + Massima deviazione della mesh: - Do not calculate vertex normals - Non calcolare le normali ai vertici + + Do not calculate vertex normals + Non calcolare le normali ai vertici - Write u,v coordinates - Salva le coordinate u,v + + Write u,v coordinates + Salva le coordinate u,v - - + + Workbench - - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ja.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ja.ts index aad6e5474..0f3549d9e 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ja.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ja.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - ファイル + + File + ファイル - &Export project... - プロジェクトをエクスポート (&e)... + + &Export project... + プロジェクトをエクスポート (&e)... - Export the Povray project file - Export the Povray project file + + Export the Povray project file + Export the Povray project file - - + + CmdRaytracingNewPartSegment - Raytracing - レイトレーシング + + Raytracing + レイトレーシング - Insert part - 部品を挿入 + + Insert part + 部品を挿入 - Insert a new part object into a Povray project - Insert a new part object into a Povray project + + Insert a new part object into a Povray project + Insert a new part object into a Povray project - - + + CmdRaytracingNewPovrayProject - Raytracing - レイトレーシング + + Raytracing + レイトレーシング - New Povray project - New Povray project + + New Povray project + New Povray project - Insert new Povray project into the document - Insert new Povray project into the document + + Insert new Povray project into the document + Insert new Povray project into the document - - + + CmdRaytracingWriteCamera - Raytracing - レイトレーシング + + Raytracing + レイトレーシング - Export camera to povray... - カメラをpovrayにエクスポート... + + Export camera to povray... + カメラをpovrayにエクスポート... - Export the camera positon of the active 3D view in PovRay format to a file - Export the camera positon of the active 3D view in PovRay format to a file + + Export the camera positon of the active 3D view in PovRay format to a file + Export the camera positon of the active 3D view in PovRay format to a file - - + + CmdRaytracingWritePart - Raytracing - レイトレーシング + + Raytracing + レイトレーシング - Export part to povray... - 部品をpovray形式でエクスポート... + + Export part to povray... + 部品をpovray形式でエクスポート... - Write the selected Part (object) as a povray file - Write the selected Part (object) as a povray file + + Write the selected Part (object) as a povray file + Write the selected Part (object) as a povray file - - + + CmdRaytracingWriteView - Raytracing - レイトレーシング + + + + No perspective camera + - Export view to povray... - ビューをpovrayにエクスポート... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Write the active 3D view with camera and all its content to a povray file + + Raytracing + レイトレーシング - - + + + Export view to povray... + ビューをpovrayにエクスポート... + + + + Write the active 3D view with camera and all its content to a povray file + Write the active 3D view with camera and all its content to a povray file + + + QObject - Povray(*.pov) - Povray(*.pov) + + + + + Povray(*.pov) + Povray(*.pov) - All Files (*.*) - すべてのファイル (*.*) + + + + + All Files (*.*) + すべてのファイル (*.*) - Export page - Export page + + + + + Export page + Export page - Wrong selection - 誤った選択 + + + Wrong selection + 誤った選択 - Select a Part object. - Select a Part object. + + Select a Part object. + Select a Part object. - No Povray project to insert - No Povray project to insert + + + No Povray project to insert + No Povray project to insert - Create a Povray project to insert a view. - Create a Povray project to insert a view. + + Create a Povray project to insert a view. + Create a Povray project to insert a view. - Select one Povray project object. - Povrayプロジェクトオブジェクトを1つ選択. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Povrayプロジェクトオブジェクトを1つ選択. + + + RaytracingGui::DlgSettingsRay - - Raytracing - レイトレーシング + + Raytracing + レイトレーシング - Directories - ディレクトリ + + Directories + ディレクトリ - Default Project dir: - Default Project dir: + + Default Project dir: + Default Project dir: - Camera file name: - カメラファイル名: + + Camera file name: + カメラファイル名: - Part file name: - 部品のファイル名: + + Part file name: + 部品のファイル名: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - メッシュエクスポート設定 + + Mesh export settings + メッシュエクスポート設定 - max mesh deviation: - メッシュ最大分割数: + + max mesh deviation: + メッシュ最大分割数: - Do not calculate vertex normals - Do not calculate vertex normals + + Do not calculate vertex normals + Do not calculate vertex normals - Write u,v coordinates - Write u,v coordinates + + Write u,v coordinates + Write u,v coordinates - - + + Workbench - - &Raytracing - レイトレーシング (&R) + + &Raytracing + レイトレーシング (&R) - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_nl.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_nl.ts index 3bc8ebc72..8af781741 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_nl.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_nl.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Bestand + + File + Bestand - &Export project... - &Project exporteren... + + &Export project... + &Project exporteren... - Export the Povray project file - Exporteer het Povray project bestand + + Export the Povray project file + Exporteer het Povray project bestand - - + + CmdRaytracingNewPartSegment - Raytracing - Raytracing + + Raytracing + Raytracing - Insert part - Onderdeel invoegen + + Insert part + Onderdeel invoegen - Insert a new part object into a Povray project - Voeg een nieuw object toe aan een Povray project + + Insert a new part object into a Povray project + Voeg een nieuw object toe aan een Povray project - - + + CmdRaytracingNewPovrayProject - Raytracing - Raytracing + + Raytracing + Raytracing - New Povray project - Nieuw Povray project + + New Povray project + Nieuw Povray project - Insert new Povray project into the document - Nieuw Povray project in het document invoegen + + Insert new Povray project into the document + Nieuw Povray project in het document invoegen - - + + CmdRaytracingWriteCamera - Raytracing - Raytracing + + Raytracing + Raytracing - Export camera to povray... - Exporteer camera naar Povray... + + Export camera to povray... + Exporteer camera naar Povray... - Export the camera positon of the active 3D view in PovRay format to a file - Exporteer de camera positie van het actieve 3D-aanzicht in PovRay-formaat naar een bestand + + Export the camera positon of the active 3D view in PovRay format to a file + Exporteer de camera positie van het actieve 3D-aanzicht in PovRay-formaat naar een bestand - - + + CmdRaytracingWritePart - Raytracing - Raytracing + + Raytracing + Raytracing - Export part to povray... - Export object naar povray ... + + Export part to povray... + Export object naar povray ... - Write the selected Part (object) as a povray file - Schrijf het geselecteerde object weg als een Povray bestand + + Write the selected Part (object) as a povray file + Schrijf het geselecteerde object weg als een Povray bestand - - + + CmdRaytracingWriteView - Raytracing - Raytracing + + + + No perspective camera + - Export view to povray... - Aanzicht exporteren naar Povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Schrijf het actieve 3D-aanzicht met camera en al haar inhoud naar een Povray bestand + + Raytracing + Raytracing - - + + + Export view to povray... + Aanzicht exporteren naar Povray... + + + + Write the active 3D view with camera and all its content to a povray file + Schrijf het actieve 3D-aanzicht met camera en al haar inhoud naar een Povray bestand + + + QObject - Povray(*.pov) - Povray (*.pov) + + + + + Povray(*.pov) + Povray (*.pov) - All Files (*.*) - Alle bestanden (*.*) + + + + + All Files (*.*) + Alle bestanden (*.*) - Export page - Exporteer pagina + + + + + Export page + Exporteer pagina - Wrong selection - Verkeerde selectie + + + Wrong selection + Verkeerde selectie - Select a Part object. - Selecteer een object. + + Select a Part object. + Selecteer een object. - No Povray project to insert - Geen Povray project om in te voegen + + + No Povray project to insert + Geen Povray project om in te voegen - Create a Povray project to insert a view. - Maak een Povray-project om aan aanzicht toe te voegen. + + Create a Povray project to insert a view. + Maak een Povray-project om aan aanzicht toe te voegen. - Select one Povray project object. - Selecteer een Povray projectobject. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Selecteer een Povray projectobject. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Raytracing + + Raytracing + Raytracing - Directories - Mappen + + Directories + Mappen - Default Project dir: - Standaard Projectmap: + + Default Project dir: + Standaard Projectmap: - Camera file name: - Camera-bestand naam: + + Camera file name: + Camera-bestand naam: - Part file name: - Onderdeel bestandsnaam: + + Part file name: + Onderdeel bestandsnaam: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Maas exportinstellingen + + Mesh export settings + Maas exportinstellingen - max mesh deviation: - Max. maas-afwijking: + + max mesh deviation: + Max. maas-afwijking: - Do not calculate vertex normals - Bereken niet de vertex-normalen + + Do not calculate vertex normals + Bereken niet de vertex-normalen - Write u,v coordinates - Schrijf u,v-coördinaten + + Write u,v coordinates + Schrijf u,v-coördinaten - - + + Workbench - - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_no.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_no.ts index 2f33fdefa..04a1d3b0d 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_no.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_no.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Fil + + File + Fil - &Export project... - &Eksporter prosjekt... + + &Export project... + &Eksporter prosjekt... - Export the Povray project file - Eksporter Povray-prosjektfilen + + Export the Povray project file + Eksporter Povray-prosjektfilen - - + + CmdRaytracingNewPartSegment - Raytracing - Strålesporing + + Raytracing + Strålesporing - Insert part - Sett inn et komponent + + Insert part + Sett inn et komponent - Insert a new part object into a Povray project - Sett inn et nytt komponent (objekt) i et Povray-prosjekt + + Insert a new part object into a Povray project + Sett inn et nytt komponent (objekt) i et Povray-prosjekt - - + + CmdRaytracingNewPovrayProject - Raytracing - Strålesporing + + Raytracing + Strålesporing - New Povray project - Nytt Povray-prosjekt + + New Povray project + Nytt Povray-prosjekt - Insert new Povray project into the document - Sett inn nytt Povray-prosjekt i dokumentet + + Insert new Povray project into the document + Sett inn nytt Povray-prosjekt i dokumentet - - + + CmdRaytracingWriteCamera - Raytracing - Strålesporing + + Raytracing + Strålesporing - Export camera to povray... - Export camera to povray... + + Export camera to povray... + Export camera to povray... - Export the camera positon of the active 3D view in PovRay format to a file - Eksporter kameraposisjon for aktiv 3D-visning til Povray-format i en fil + + Export the camera positon of the active 3D view in PovRay format to a file + Eksporter kameraposisjon for aktiv 3D-visning til Povray-format i en fil - - + + CmdRaytracingWritePart - Raytracing - Strålesporing + + Raytracing + Strålesporing - Export part to povray... - Eksporter komponent til povray... + + Export part to povray... + Eksporter komponent til povray... - Write the selected Part (object) as a povray file - Skrive det merkede komponentet (objekt) som en povray-fil + + Write the selected Part (object) as a povray file + Skrive det merkede komponentet (objekt) som en povray-fil - - + + CmdRaytracingWriteView - Raytracing - Strålesporing + + + + No perspective camera + - Export view to povray... - Eksporter visning til povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Skriv aktiv 3D-visning med kameraet og alt dets innhold til en Povray fil + + Raytracing + Strålesporing - - + + + Export view to povray... + Eksporter visning til povray... + + + + Write the active 3D view with camera and all its content to a povray file + Skriv aktiv 3D-visning med kameraet og alt dets innhold til en Povray fil + + + QObject - Povray(*.pov) - Povray (*. pov) + + + + + Povray(*.pov) + Povray (*. pov) - All Files (*.*) - Alle filer (*.*) + + + + + All Files (*.*) + Alle filer (*.*) - Export page - Eksporter side + + + + + Export page + Eksporter side - Wrong selection - Feil valg + + + Wrong selection + Feil valg - Select a Part object. - Velg et komponentobjekt. + + Select a Part object. + Velg et komponentobjekt. - No Povray project to insert - Ingen Povray-prosjekt å sette inn + + + No Povray project to insert + Ingen Povray-prosjekt å sette inn - Create a Povray project to insert a view. - Lag et Povray-prosjekt for å sette inn i en visning. + + Create a Povray project to insert a view. + Lag et Povray-prosjekt for å sette inn i en visning. - Select one Povray project object. - Velg et Povray-prosjektobjekt. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Velg et Povray-prosjektobjekt. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Strålesporing + + Raytracing + Strålesporing - Directories - Kataloger + + Directories + Kataloger - Default Project dir: - Standard prosjektkatalog: + + Default Project dir: + Standard prosjektkatalog: - Camera file name: - Kamerafilnavn: + + Camera file name: + Kamerafilnavn: - Part file name: - Komponentfilnavn: + + Part file name: + Komponentfilnavn: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Maskeeksportinnstillinger + + Mesh export settings + Maskeeksportinnstillinger - max mesh deviation: - Maks maske avvik: + + max mesh deviation: + Maks maske avvik: - Do not calculate vertex normals - Ikke beregn toppunkt normaler + + Do not calculate vertex normals + Ikke beregn toppunkt normaler - Write u,v coordinates - Skriv u, v-koordinater + + Write u,v coordinates + Skriv u, v-koordinater - - + + Workbench - - &Raytracing - &Strålesporing + + &Raytracing + &Strålesporing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pl.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pl.ts index f4256a0ec..b1fbecd7b 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pl.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pl.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Plik + + File + Plik - &Export project... - &Export project... + + &Export project... + &Export project... - Export the Povray project file - Eksport pliku projektu Povray + + Export the Povray project file + Eksport pliku projektu Povray - - + + CmdRaytracingNewPartSegment - Raytracing - Raytracing + + Raytracing + Raytracing - Insert part - Wstaw część + + Insert part + Wstaw część - Insert a new part object into a Povray project - Wstaw nowy obiekt do projektu Povray + + Insert a new part object into a Povray project + Wstaw nowy obiekt do projektu Povray - - + + CmdRaytracingNewPovrayProject - Raytracing - Raytracing + + Raytracing + Raytracing - New Povray project - Nowy projekt Povray + + New Povray project + Nowy projekt Povray - Insert new Povray project into the document - Wstaw nowy projekt Povray do dokumentu + + Insert new Povray project into the document + Wstaw nowy projekt Povray do dokumentu - - + + CmdRaytracingWriteCamera - Raytracing - Raytracing + + Raytracing + Raytracing - Export camera to povray... - Eksport kamery do Povray... + + Export camera to povray... + Eksport kamery do Povray... - Export the camera positon of the active 3D view in PovRay format to a file - Eksport kamery aktywnego widoku Povray do pliku + + Export the camera positon of the active 3D view in PovRay format to a file + Eksport kamery aktywnego widoku Povray do pliku - - + + CmdRaytracingWritePart - Raytracing - Raytracing + + Raytracing + Raytracing - Export part to povray... - Eksport obiektu do Povray... + + Export part to povray... + Eksport obiektu do Povray... - Write the selected Part (object) as a povray file - Zapisz wybrany obiekt jako plik Povray + + Write the selected Part (object) as a povray file + Zapisz wybrany obiekt jako plik Povray - - + + CmdRaytracingWriteView - Raytracing - Raytracing + + + + No perspective camera + - Export view to povray... - Eksport widoku do Povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Zapisz aktywny widok 3D wraz z zawartością do pliku Povray + + Raytracing + Raytracing - - + + + Export view to povray... + Eksport widoku do Povray... + + + + Write the active 3D view with camera and all its content to a povray file + Zapisz aktywny widok 3D wraz z zawartością do pliku Povray + + + QObject - Povray(*.pov) - Povray (*. pov) + + + + + Povray(*.pov) + Povray (*. pov) - All Files (*.*) - Wszystkie pliki (*.*) + + + + + All Files (*.*) + Wszystkie pliki (*.*) - Export page - Wyślij stronę + + + + + Export page + Wyślij stronę - Wrong selection - Niewłaściwy wybór + + + Wrong selection + Niewłaściwy wybór - Select a Part object. - Wybierz stronę. + + Select a Part object. + Wybierz stronę. - No Povray project to insert - Brak obiektu Povray do wstawienia + + + No Povray project to insert + Brak obiektu Povray do wstawienia - Create a Povray project to insert a view. - Utwórz projekt Povray aby wstawić widok + + Create a Povray project to insert a view. + Utwórz projekt Povray aby wstawić widok - Select one Povray project object. - Wybierz jeden obiekt projektu Povray + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Wybierz jeden obiekt projektu Povray + + + RaytracingGui::DlgSettingsRay - - Raytracing - Raytracing + + Raytracing + Raytracing - Directories - Foldery: + + Directories + Foldery: - Default Project dir: - Domyślny folder Projektu: + + Default Project dir: + Domyślny folder Projektu: - Camera file name: - Nazwa pliku Kamery: + + Camera file name: + Nazwa pliku Kamery: - Part file name: - Nazwa pliku Obiektu: + + Part file name: + Nazwa pliku Obiektu: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Ustawienia eksportu siatki + + Mesh export settings + Ustawienia eksportu siatki - max mesh deviation: - Max. odchylenie siatki: + + max mesh deviation: + Max. odchylenie siatki: - Do not calculate vertex normals - Nie przeliczaj 'normalnych' wierzchołków + + Do not calculate vertex normals + Nie przeliczaj 'normalnych' wierzchołków - Write u,v coordinates - Zapisz współrzędne U,V + + Write u,v coordinates + Zapisz współrzędne U,V - - + + Workbench - - &Raytracing - Raytracing + + &Raytracing + Raytracing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pt.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pt.ts index db735c2bc..72f62e9a3 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pt.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_pt.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Arquivo + + File + Arquivo - &Export project... - &Exportar projeto... + + &Export project... + &Exportar projeto... - Export the Povray project file - Exportar o arquivo de projeto Povray + + Export the Povray project file + Exportar o arquivo de projeto Povray - - + + CmdRaytracingNewPartSegment - Raytracing - Raytracing + + Raytracing + Raytracing - Insert part - Inserir Part + + Insert part + Inserir Part - Insert a new part object into a Povray project - Inserir um novo objeto Part em um projeto Povray + + Insert a new part object into a Povray project + Inserir um novo objeto Part em um projeto Povray - - + + CmdRaytracingNewPovrayProject - Raytracing - Raytracing + + Raytracing + Raytracing - New Povray project - Novo projeto Povray + + New Povray project + Novo projeto Povray - Insert new Povray project into the document - Inserir novo projeto Povray no documento + + Insert new Povray project into the document + Inserir novo projeto Povray no documento - - + + CmdRaytracingWriteCamera - Raytracing - Raytracing + + Raytracing + Raytracing - Export camera to povray... - Exportar a câmera para povray... + + Export camera to povray... + Exportar a câmera para povray... - Export the camera positon of the active 3D view in PovRay format to a file - Exportar a posição da câmera da vista 3D ativa no formato PovRay para um arquivo + + Export the camera positon of the active 3D view in PovRay format to a file + Exportar a posição da câmera da vista 3D ativa no formato PovRay para um arquivo - - + + CmdRaytracingWritePart - Raytracing - Raytracing + + Raytracing + Raytracing - Export part to povray... - Exporte parte para povray... + + Export part to povray... + Exporte parte para povray... - Write the selected Part (object) as a povray file - Gravar a parte selecionada (objeto) como um arquivo povray + + Write the selected Part (object) as a povray file + Gravar a parte selecionada (objeto) como um arquivo povray - - + + CmdRaytracingWriteView - Raytracing - Raytracing + + + + No perspective camera + - Export view to povray... - Exportar vista para povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Gravar a vista 3D ativa com câmera e todo o seu conteúdo em um arquivo povray + + Raytracing + Raytracing - - + + + Export view to povray... + Exportar vista para povray... + + + + Write the active 3D view with camera and all its content to a povray file + Gravar a vista 3D ativa com câmera e todo o seu conteúdo em um arquivo povray + + + QObject - Povray(*.pov) - Povray (*.pov) + + + + + Povray(*.pov) + Povray (*.pov) - All Files (*.*) - Todos os arquivos (*.*) + + + + + All Files (*.*) + Todos os arquivos (*.*) - Export page - Exportar página + + + + + Export page + Exportar página - Wrong selection - Seleção errada + + + Wrong selection + Seleção errada - Select a Part object. - Selecione um objeto Part. + + Select a Part object. + Selecione um objeto Part. - No Povray project to insert - Nenhum projeto Povray para inserir + + + No Povray project to insert + Nenhum projeto Povray para inserir - Create a Povray project to insert a view. - Criar um projeto Povray para inserir uma vista. + + Create a Povray project to insert a view. + Criar um projeto Povray para inserir uma vista. - Select one Povray project object. - Selecione um objeto de projeto Povray. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Selecione um objeto de projeto Povray. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Raytracing + + Raytracing + Raytracing - Directories - Diretórios + + Directories + Diretórios - Default Project dir: - Pasta de projeto padrão: + + Default Project dir: + Pasta de projeto padrão: - Camera file name: - Nome de arquivo de câmera: + + Camera file name: + Nome de arquivo de câmera: - Part file name: - Nome do arquivo de Part: + + Part file name: + Nome do arquivo de Part: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Configurações de exportação de malha + + Mesh export settings + Configurações de exportação de malha - max mesh deviation: - desvio máximo de malha: + + max mesh deviation: + desvio máximo de malha: - Do not calculate vertex normals - Não calcular normais de vértices + + Do not calculate vertex normals + Não calcular normais de vértices - Write u,v coordinates - Gravar coordenadas u,v + + Write u,v coordinates + Gravar coordenadas u,v - - + + Workbench - - &Raytracing - &Raytracing + + &Raytracing + &Raytracing - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ru.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ru.ts index dbce80f47..386ffa277 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ru.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_ru.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Файл + + File + Файл - &Export project... - & Экспортировать проект... + + &Export project... + & Экспортировать проект... - Export the Povray project file - Экспорт файлов Povray проекта + + Export the Povray project file + Экспорт файлов Povray проекта - - + + CmdRaytracingNewPartSegment - Raytracing - Трасcировщик лучей + + Raytracing + Трасcировщик лучей - Insert part - Вставить часть + + Insert part + Вставить часть - Insert a new part object into a Povray project - Вставить новый объект в проекте Povray + + Insert a new part object into a Povray project + Вставить новый объект в проекте Povray - - + + CmdRaytracingNewPovrayProject - Raytracing - Трасcировщик лучей + + Raytracing + Трасcировщик лучей - New Povray project - Новый проект Povray + + New Povray project + Новый проект Povray - Insert new Povray project into the document - Вставка нового проекта Povray в документ + + Insert new Povray project into the document + Вставка нового проекта Povray в документ - - + + CmdRaytracingWriteCamera - Raytracing - Трасcировщик лучей + + Raytracing + Трасcировщик лучей - Export camera to povray... - Экспорт камеры в Povray ... + + Export camera to povray... + Экспорт камеры в Povray ... - Export the camera positon of the active 3D view in PovRay format to a file - Экспорт положения камеры текущего 3D-вида в файл формата PovRay + + Export the camera positon of the active 3D view in PovRay format to a file + Экспорт положения камеры текущего 3D-вида в файл формата PovRay - - + + CmdRaytracingWritePart - Raytracing - Трасcировщик лучей + + Raytracing + Трасcировщик лучей - Export part to povray... - Экспортировать деталь в Povray ... + + Export part to povray... + Экспортировать деталь в Povray ... - Write the selected Part (object) as a povray file - Записать выбранную деталь (объект) в Povray файл + + Write the selected Part (object) as a povray file + Записать выбранную деталь (объект) в Povray файл - - + + CmdRaytracingWriteView - Raytracing - Трасcировщик лучей + + + + No perspective camera + - Export view to povray... - Экспортировать вид в Povray ... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Записать текущий 3D-вид камеры и ее содержимого в Povray-файл + + Raytracing + Трасcировщик лучей - - + + + Export view to povray... + Экспортировать вид в Povray ... + + + + Write the active 3D view with camera and all its content to a povray file + Записать текущий 3D-вид камеры и ее содержимого в Povray-файл + + + QObject - Povray(*.pov) - Povray (*. pov) + + + + + Povray(*.pov) + Povray (*. pov) - All Files (*.*) - Все файлы (*.*) + + + + + All Files (*.*) + Все файлы (*.*) - Export page - Экспорт страницы + + + + + Export page + Экспорт страницы - Wrong selection - Неправильное выделение + + + Wrong selection + Неправильное выделение - Select a Part object. - Выберите часть. + + Select a Part object. + Выберите часть. - No Povray project to insert - Нет проекта Povray для вставки + + + No Povray project to insert + Нет проекта Povray для вставки - Create a Povray project to insert a view. - Создайте проект Povray, чтобы вставить вид. + + Create a Povray project to insert a view. + Создайте проект Povray, чтобы вставить вид. - Select one Povray project object. - Выберите один объект Povray проекта. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Выберите один объект Povray проекта. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Трасcировщик лучей + + Raytracing + Трасcировщик лучей - Directories - Каталоги + + Directories + Каталоги - Default Project dir: - По умолчанию каталог проекта: + + Default Project dir: + По умолчанию каталог проекта: - Camera file name: - Название фото-файла: + + Camera file name: + Название фото-файла: - Part file name: - Часть имени файла: + + Part file name: + Часть имени файла: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Экспорт настроек сетки + + Mesh export settings + Экспорт настроек сетки - max mesh deviation: - максимальное отклонение сетки: + + max mesh deviation: + максимальное отклонение сетки: - Do not calculate vertex normals - Не вычислять нормалей вершины + + Do not calculate vertex normals + Не вычислять нормалей вершины - Write u,v coordinates - Написать u, v координаты + + Write u,v coordinates + Написать u, v координаты - - + + Workbench - - &Raytracing - &Трасировщик лучей + + &Raytracing + &Трасировщик лучей - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_se.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_se.ts index a52dbf755..b060e0550 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_se.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_se.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Fil + + File + Fil - &Export project... - &Exportera projekt... + + &Export project... + &Exportera projekt... - Export the Povray project file - Exportera Povray projektfilen + + Export the Povray project file + Exportera Povray projektfilen - - + + CmdRaytracingNewPartSegment - Raytracing - Rendering + + Raytracing + Rendering - Insert part - Infoga del + + Insert part + Infoga del - Insert a new part object into a Povray project - Sätt i ett nytt Del objekt i ett Povray projekt + + Insert a new part object into a Povray project + Sätt i ett nytt Del objekt i ett Povray projekt - - + + CmdRaytracingNewPovrayProject - Raytracing - Rendering + + Raytracing + Rendering - New Povray project - Nytt Povray projekt + + New Povray project + Nytt Povray projekt - Insert new Povray project into the document - Infoga nytt Povray projekt i dokumentet + + Insert new Povray project into the document + Infoga nytt Povray projekt i dokumentet - - + + CmdRaytracingWriteCamera - Raytracing - Rendering + + Raytracing + Rendering - Export camera to povray... - Exportera kameran till povray ... + + Export camera to povray... + Exportera kameran till povray ... - Export the camera positon of the active 3D view in PovRay format to a file - Exportera kamerans position i den aktiva 3D-vyn i povray format till en fil + + Export the camera positon of the active 3D view in PovRay format to a file + Exportera kamerans position i den aktiva 3D-vyn i povray format till en fil - - + + CmdRaytracingWritePart - Raytracing - Rendering + + Raytracing + Rendering - Export part to povray... - Exportera Del till povray ... + + Export part to povray... + Exportera Del till povray ... - Write the selected Part (object) as a povray file - Skriv den markerade Delen (objekt) som en povray fil + + Write the selected Part (object) as a povray file + Skriv den markerade Delen (objekt) som en povray fil - - + + CmdRaytracingWriteView - Raytracing - Rendering + + + + No perspective camera + - Export view to povray... - Exportera vy till povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Skriv den aktiva 3D vyn med kameraposition och allt dess innehåll till en povray fil + + Raytracing + Rendering - - + + + Export view to povray... + Exportera vy till povray... + + + + Write the active 3D view with camera and all its content to a povray file + Skriv den aktiva 3D vyn med kameraposition och allt dess innehåll till en povray fil + + + QObject - Povray(*.pov) - Povray (*.POV) + + + + + Povray(*.pov) + Povray (*.POV) - All Files (*.*) - Alla filer (*.*) + + + + + All Files (*.*) + Alla filer (*.*) - Export page - Exportera sida + + + + + Export page + Exportera sida - Wrong selection - Fel val + + + Wrong selection + Fel val - Select a Part object. - Välj ett Del objekt. + + Select a Part object. + Välj ett Del objekt. - No Povray project to insert - Inget Povray projekt att infoga + + + No Povray project to insert + Inget Povray projekt att infoga - Create a Povray project to insert a view. - Skapa ett Povray projekt för att infoga en vy. + + Create a Povray project to insert a view. + Skapa ett Povray projekt för att infoga en vy. - Select one Povray project object. - Välj ett Povray projekt objekt. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Välj ett Povray projekt objekt. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Rendering + + Raytracing + Rendering - Directories - Kataloger + + Directories + Kataloger - Default Project dir: - Standard-projektkatalog: + + Default Project dir: + Standard-projektkatalog: - Camera file name: - Kamera-filnamn: + + Camera file name: + Kamera-filnamn: - Part file name: - Del filnamn: + + Part file name: + Del filnamn: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Nät exportinställningar + + Mesh export settings + Nät exportinställningar - max mesh deviation: - Max nätdeviation: + + max mesh deviation: + Max nätdeviation: - Do not calculate vertex normals - Beräkna inte hörn normaler + + Do not calculate vertex normals + Beräkna inte hörn normaler - Write u,v coordinates - Skriv u,v koordinater + + Write u,v coordinates + Skriv u,v koordinater - - + + Workbench - - &Raytracing - &Rendering + + &Raytracing + &Rendering - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_uk.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_uk.ts index a32e57967..6813b6f4e 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_uk.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_uk.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - Файл + + File + Файл - &Export project... - &Експорт проекту... + + &Export project... + &Експорт проекту... - Export the Povray project file - Експорт файлу Povray проекту + + Export the Povray project file + Експорт файлу Povray проекту - - + + CmdRaytracingNewPartSegment - Raytracing - Трасування променів + + Raytracing + Трасування променів - Insert part - Вставити частину + + Insert part + Вставити частину - Insert a new part object into a Povray project - Вставити нову частину об'єкта у Povray проект + + Insert a new part object into a Povray project + Вставити нову частину об'єкта у Povray проект - - + + CmdRaytracingNewPovrayProject - Raytracing - Трасування променів + + Raytracing + Трасування променів - New Povray project - Новий проект Povray + + New Povray project + Новий проект Povray - Insert new Povray project into the document - Вставити новий проект Povray в документ + + Insert new Povray project into the document + Вставити новий проект Povray в документ - - + + CmdRaytracingWriteCamera - Raytracing - Трасування променів + + Raytracing + Трасування променів - Export camera to povray... - Export camera to povray... + + Export camera to povray... + Export camera to povray... - Export the camera positon of the active 3D view in PovRay format to a file - Експортувати положення камери активного 3D вигляду до файлу у PovRay форматі + + Export the camera positon of the active 3D view in PovRay format to a file + Експортувати положення камери активного 3D вигляду до файлу у PovRay форматі - - + + CmdRaytracingWritePart - Raytracing - Трасування променів + + Raytracing + Трасування променів - Export part to povray... - Експортування частини до povray... + + Export part to povray... + Експортування частини до povray... - Write the selected Part (object) as a povray file - Записати виділену частину (об'єкт) як Povray файл + + Write the selected Part (object) as a povray file + Записати виділену частину (об'єкт) як Povray файл - - + + CmdRaytracingWriteView - Raytracing - Трасування променів + + + + No perspective camera + - Export view to povray... - Експорт вигляду в Povray ... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - Записати активний 3D-вид з камери, і весь її вміст в Povray файл + + Raytracing + Трасування променів - - + + + Export view to povray... + Експорт вигляду в Povray ... + + + + Write the active 3D view with camera and all its content to a povray file + Записати активний 3D-вид з камери, і весь її вміст в Povray файл + + + QObject - Povray(*.pov) - Povray(*.pov) + + + + + Povray(*.pov) + Povray(*.pov) - All Files (*.*) - Всі файли (*.*) + + + + + All Files (*.*) + Всі файли (*.*) - Export page - Експорт сторінки + + + + + Export page + Експорт сторінки - Wrong selection - Невірний вибір + + + Wrong selection + Невірний вибір - Select a Part object. - Виберіть частину об'єкта. + + Select a Part object. + Виберіть частину об'єкта. - No Povray project to insert - Немає Povray проекту для вставки + + + No Povray project to insert + Немає Povray проекту для вставки - Create a Povray project to insert a view. - Створення Povray проекту для вставки у вигляд. + + Create a Povray project to insert a view. + Створення Povray проекту для вставки у вигляд. - Select one Povray project object. - Виберіть один Povray проект для об'єкта. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + Виберіть один Povray проект для об'єкта. + + + RaytracingGui::DlgSettingsRay - - Raytracing - Трасування променів + + Raytracing + Трасування променів - Directories - Каталоги + + Directories + Каталоги - Default Project dir: - Каталог проекту за замовчуванням: + + Default Project dir: + Каталог проекту за замовчуванням: - Camera file name: - Ім'я файлу камери: + + Camera file name: + Ім'я файлу камери: - Part file name: - Ім'я файлу деталі(частини): + + Part file name: + Ім'я файлу деталі(частини): - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - Налаштування експорту сітки(Mesh) + + Mesh export settings + Налаштування експорту сітки(Mesh) - max mesh deviation: - Максимальне відхилення сітки: + + max mesh deviation: + Максимальне відхилення сітки: - Do not calculate vertex normals - Не розраховувати нормалі вершин + + Do not calculate vertex normals + Не розраховувати нормалі вершин - Write u,v coordinates - Записувати u,v координати + + Write u,v coordinates + Записувати u,v координати - - + + Workbench - - &Raytracing - &Трасування променів + + &Raytracing + &Трасування променів - + diff --git a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_zh.ts b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_zh.ts index ffe1df6b0..e84e14afe 100644 --- a/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_zh.ts +++ b/src/Mod/Raytracing/Gui/Resources/translations/Raytracing_zh.ts @@ -1,186 +1,252 @@ - - + + CmdRaytracingExportProject - - File - 文件 + + File + 文件 - &Export project... - 导出项目(&E)... + + &Export project... + 导出项目(&E)... - Export the Povray project file - 导出 Povray 项目文件 + + Export the Povray project file + 导出 Povray 项目文件 - - + + CmdRaytracingNewPartSegment - Raytracing - 光线追踪 + + Raytracing + 光线追踪 - Insert part - 插入零件 + + Insert part + 插入零件 - Insert a new part object into a Povray project - 插入一个新的零件对象到PovRay项目 + + Insert a new part object into a Povray project + 插入一个新的零件对象到PovRay项目 - - + + CmdRaytracingNewPovrayProject - Raytracing - 光线追踪 + + Raytracing + 光线追踪 - New Povray project - 新建 Povray 项目 + + New Povray project + 新建 Povray 项目 - Insert new Povray project into the document - 在文档中插入新PovRay项目 + + Insert new Povray project into the document + 在文档中插入新PovRay项目 - - + + CmdRaytracingWriteCamera - Raytracing - 光线追踪 + + Raytracing + 光线追踪 - Export camera to povray... - 导出相机到povray... + + Export camera to povray... + 导出相机到povray... - Export the camera positon of the active 3D view in PovRay format to a file - 将PovRay格式中当前3d视图的相机位置输出到文件 + + Export the camera positon of the active 3D view in PovRay format to a file + 将PovRay格式中当前3d视图的相机位置输出到文件 - - + + CmdRaytracingWritePart - Raytracing - 光线追踪 + + Raytracing + 光线追踪 - Export part to povray... - 输出零件到Povray... + + Export part to povray... + 输出零件到Povray... - Write the selected Part (object) as a povray file - 将选中零件(对象)写入Povray文件 + + Write the selected Part (object) as a povray file + 将选中零件(对象)写入Povray文件 - - + + CmdRaytracingWriteView - Raytracing - 光线追踪 + + + + No perspective camera + - Export view to povray... - 视图输出为Povray... + + + + The current view camera is not perspective and thus the result of the povray image later might look different to what you expect. +Do you want to continue? + - Write the active 3D view with camera and all its content to a povray file - 将当前相机3D视图以及所有内容写入到Povray文件 + + Raytracing + 光线追踪 - - + + + Export view to povray... + 视图输出为Povray... + + + + Write the active 3D view with camera and all its content to a povray file + 将当前相机3D视图以及所有内容写入到Povray文件 + + + QObject - Povray(*.pov) - Povray(*.pov) + + + + + Povray(*.pov) + Povray(*.pov) - All Files (*.*) - 所有文件(*.*) + + + + + All Files (*.*) + 所有文件(*.*) - Export page - 导出页面 + + + + + Export page + 导出页面 - Wrong selection - 选择错误 + + + Wrong selection + 选择错误 - Select a Part object. - 选择零件对象. + + Select a Part object. + 选择零件对象. - No Povray project to insert - 无Povray项目可插入 + + + No Povray project to insert + 无Povray项目可插入 - Create a Povray project to insert a view. - 创建一个Povray项目以插入视图. + + Create a Povray project to insert a view. + 创建一个Povray项目以插入视图. - Select one Povray project object. - 选择一个Povray项目. + + Select a Povray project to insert the view. + - - + + + Select one Povray project object. + 选择一个Povray项目. + + + RaytracingGui::DlgSettingsRay - - Raytracing - 光线追踪 + + Raytracing + 光线追踪 - Directories - 目录 + + Directories + 目录 - Default Project dir: - 默认项目路径: + + Default Project dir: + 默认项目路径: - Camera file name: - 相机文件的名称: + + Camera file name: + 相机文件的名称: - Part file name: - 零件文件名称: + + Part file name: + 零件文件名称: - TempCamera.inc - TempCamera.inc + + TempCamera.inc + TempCamera.inc - TempPart.inc - TempPart.inc + + TempPart.inc + TempPart.inc - Mesh export settings - 网格导出设置 + + Mesh export settings + 网格导出设置 - max mesh deviation: - 最大网格偏差: + + max mesh deviation: + 最大网格偏差: - Do not calculate vertex normals - 不计算顶点法线 + + Do not calculate vertex normals + 不计算顶点法线 - Write u,v coordinates - 写入U,V坐标 + + Write u,v coordinates + 写入U,V坐标 - - + + Workbench - - &Raytracing - 光线追踪(&R) + + &Raytracing + 光线追踪(&R) - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_af.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_af.ts index a7f1dfddd..0312aeebd 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_af.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_af.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Terugwaartse Ingenieurswese + + Reverse Engineering + Terugwaartse Ingenieurswese - Approximate plane... - Approximate plane... + + Approximate plane... + Approximate plane... - Approximate a plane - Approximate a plane + + Approximate a plane + Approximate a plane - - + + CmdApproxSurface - Reverse Engineering - Terugwaartse Ingenieurswese + + Reverse Engineering + Terugwaartse Ingenieurswese - Approximate surface... - Benaderde oppervlakte ... + + Approximate surface... + Benaderde oppervlakte ... - Approximate a B-Spline surface - Benader 'n B-kurwe oppervlak + + Approximate a B-Spline surface + Benader 'n B-kurwe oppervlak - - + + Workbench - - Reverse Engineering - Terugwaartse Ingenieurswese + + Reverse Engineering + Terugwaartse Ingenieurswese - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_de.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_de.ts index e542edf06..3511df971 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_de.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_de.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Rückführung + + Reverse Engineering + Rückführung - Approximate plane... - Ebene approximieren... + + Approximate plane... + Ebene approximieren... - Approximate a plane - Approximieren einer Ebene + + Approximate a plane + Approximieren einer Ebene - - + + CmdApproxSurface - Reverse Engineering - Rückführung + + Reverse Engineering + Rückführung - Approximate surface... - Ungefähre Oberfläche ... + + Approximate surface... + Ungefähre Oberfläche ... - Approximate a B-Spline surface - Ungefähre B-Spline-Oberfläche + + Approximate a B-Spline surface + Ungefähre B-Spline-Oberfläche - - + + Workbench - - Reverse Engineering - Rückführung + + Reverse Engineering + Rückführung - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_es.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_es.ts index 1c6a672f3..c008737ec 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_es.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_es.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Ingeniería Inversa + + Reverse Engineering + Ingeniería Inversa - Approximate plane... - Approximate plane... + + Approximate plane... + Approximate plane... - Approximate a plane - Approximate a plane + + Approximate a plane + Approximate a plane - - + + CmdApproxSurface - Reverse Engineering - Ingeniería Inversa + + Reverse Engineering + Ingeniería Inversa - Approximate surface... - Superficie aproximada... + + Approximate surface... + Superficie aproximada... - Approximate a B-Spline surface - Superficie aproximada a B-Spline + + Approximate a B-Spline surface + Superficie aproximada a B-Spline - - + + Workbench - - Reverse Engineering - Ingeniería Inversa + + Reverse Engineering + Ingeniería Inversa - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fi.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fi.ts index 4810bc164..9659704c0 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fi.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fi.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Käänteis suunnittelu + + Reverse Engineering + Käänteis suunnittelu - Approximate plane... - Approximate plane... + + Approximate plane... + Approximate plane... - Approximate a plane - Approximate a plane + + Approximate a plane + Approximate a plane - - + + CmdApproxSurface - Reverse Engineering - Käänteis suunnittelu + + Reverse Engineering + Käänteis suunnittelu - Approximate surface... - Arvioi pinta... + + Approximate surface... + Arvioi pinta... - Approximate a B-Spline surface - Arvioi B-Spline pinta + + Approximate a B-Spline surface + Arvioi B-Spline pinta - - + + Workbench - - Reverse Engineering - Käänteis suunnittelu + + Reverse Engineering + Käänteis suunnittelu - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fr.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fr.ts index 80a655840..1b91848d2 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fr.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_fr.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Rétro-ingénierie + + Reverse Engineering + Rétro-ingénierie - Approximate plane... - Approximer un plan... + + Approximate plane... + Approximer un plan... - Approximate a plane - Approximer un plan + + Approximate a plane + Approximer un plan - - + + CmdApproxSurface - Reverse Engineering - Rétro-ingénierie + + Reverse Engineering + Rétro-ingénierie - Approximate surface... - Approximer une surface... + + Approximate surface... + Approximer une surface... - Approximate a B-Spline surface - Approximer une surface B-Spline + + Approximate a B-Spline surface + Approximer une surface B-Spline - - + + Workbench - - Reverse Engineering - Rétro-ingénierie + + Reverse Engineering + Rétro-ingénierie - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hr.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hr.ts index c520ac32d..5bf8b922f 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hr.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hr.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Inverzni inženjering + + Reverse Engineering + Inverzni inženjering - Approximate plane... - Aproksimiraj ravninu ... + + Approximate plane... + Aproksimiraj ravninu ... - Approximate a plane - Aproksimiraj ravninu + + Approximate a plane + Aproksimiraj ravninu - - + + CmdApproxSurface - Reverse Engineering - Inverzni inženjering + + Reverse Engineering + Inverzni inženjering - Approximate surface... - Aproksimiraj površinu ... + + Approximate surface... + Aproksimiraj površinu ... - Approximate a B-Spline surface - Aproksimiraj savijena površina + + Approximate a B-Spline surface + Aproksimiraj savijena površina - - + + Workbench - - Reverse Engineering - Inverzni inženjering + + Reverse Engineering + Inverzni inženjering - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hu.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hu.ts index a012499bf..a407f5f43 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hu.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_hu.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Visszatervezés + + Reverse Engineering + Visszatervezés - Approximate plane... - Hozzávetőleges sík ... + + Approximate plane... + Hozzávetőleges sík ... - Approximate a plane - Sík megbecsülése + + Approximate a plane + Sík megbecsülése - - + + CmdApproxSurface - Reverse Engineering - Visszatervezés + + Reverse Engineering + Visszatervezés - Approximate surface... - Felület közelítés... + + Approximate surface... + Felület közelítés... - Approximate a B-Spline surface - B-Spline felület közelítése + + Approximate a B-Spline surface + B-Spline felület közelítése - - + + Workbench - - Reverse Engineering - Visszatervezés + + Reverse Engineering + Visszatervezés - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_it.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_it.ts index 7607ec42a..ca5827bda 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_it.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_it.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate plane... - Approssima piano... + + Approximate plane... + Approssima piano... - Approximate a plane - Approssima un piano + + Approximate a plane + Approssima un piano - - + + CmdApproxSurface - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate surface... - Approssima superficie... + + Approximate surface... + Approssima superficie... - Approximate a B-Spline surface - Approssima una superficie B-Spline + + Approximate a B-Spline surface + Approssima una superficie B-Spline - - + + Workbench - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ja.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ja.ts index ebbc03cf3..33259f23b 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ja.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ja.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - リバースエンジニアリング + + Reverse Engineering + リバースエンジニアリング - Approximate plane... - Approximate plane... + + Approximate plane... + Approximate plane... - Approximate a plane - Approximate a plane + + Approximate a plane + Approximate a plane - - + + CmdApproxSurface - Reverse Engineering - リバースエンジニアリング + + Reverse Engineering + リバースエンジニアリング - Approximate surface... - おおよその表面... + + Approximate surface... + おおよその表面... - Approximate a B-Spline surface - B-スプライン曲面を近似 + + Approximate a B-Spline surface + B-スプライン曲面を近似 - - + + Workbench - - Reverse Engineering - リバースエンジニアリング + + Reverse Engineering + リバースエンジニアリング - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_nl.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_nl.ts index 1fa1be27c..17b60018a 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_nl.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_nl.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate plane... - Benaderde vlak + + Approximate plane... + Benaderde vlak - Approximate a plane - Benader een vlak + + Approximate a plane + Benader een vlak - - + + CmdApproxSurface - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate surface... - Benaderde oppervlak... + + Approximate surface... + Benaderde oppervlak... - Approximate a B-Spline surface - Benader een B-Spline oppervlak + + Approximate a B-Spline surface + Benader een B-Spline oppervlak - - + + Workbench - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_no.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_no.ts index 0fbfd2c3f..7f470b0f0 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_no.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_no.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Reversertkonstruksjon + + Reverse Engineering + Reversertkonstruksjon - Approximate plane... - Approximate plane... + + Approximate plane... + Approximate plane... - Approximate a plane - Approximate a plane + + Approximate a plane + Approximate a plane - - + + CmdApproxSurface - Reverse Engineering - Reversertkonstruksjon + + Reverse Engineering + Reversertkonstruksjon - Approximate surface... - Anslå overflate... + + Approximate surface... + Anslå overflate... - Approximate a B-Spline surface - Anslå en B-Splineoverflate + + Approximate a B-Spline surface + Anslå en B-Splineoverflate - - + + Workbench - - Reverse Engineering - Reversertkonstruksjon + + Reverse Engineering + Reversertkonstruksjon - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pl.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pl.ts index 924390367..39da660ef 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pl.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pl.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate plane... - Aproksymuj płaszczyznę... + + Approximate plane... + Aproksymuj płaszczyznę... - Approximate a plane - Aproksymuj płaszczyznę + + Approximate a plane + Aproksymuj płaszczyznę - - + + CmdApproxSurface - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate surface... - Aproksymacja powierzchni + + Approximate surface... + Aproksymacja powierzchni - Approximate a B-Spline surface - Aproksymuj płaszczyznę B-Splajn + + Approximate a B-Spline surface + Aproksymuj płaszczyznę B-Splajn - - + + Workbench - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pt.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pt.ts index 62cbfc7d1..6503f7cae 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pt.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_pt.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Engenharia Reversa + + Reverse Engineering + Engenharia Reversa - Approximate plane... - Aproximar um plano... + + Approximate plane... + Aproximar um plano... - Approximate a plane - Aproximar um plano + + Approximate a plane + Aproximar um plano - - + + CmdApproxSurface - Reverse Engineering - Engenharia Reversa + + Reverse Engineering + Engenharia Reversa - Approximate surface... - Superfície aproximada... + + Approximate surface... + Superfície aproximada... - Approximate a B-Spline surface - Aproximar uma superfície B-Spline + + Approximate a B-Spline surface + Aproximar uma superfície B-Spline - - + + Workbench - - Reverse Engineering - Engenharia Reversa + + Reverse Engineering + Engenharia Reversa - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ru.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ru.ts index d1535fc95..bb3643aba 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ru.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_ru.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Обратный инжиниринг + + Reverse Engineering + Обратный инжиниринг - Approximate plane... - Приблизительная плоскость... + + Approximate plane... + Приблизительная плоскость... - Approximate a plane - Аппроксимировать плоскость + + Approximate a plane + Аппроксимировать плоскость - - + + CmdApproxSurface - Reverse Engineering - Обратный инжиниринг + + Reverse Engineering + Обратный инжиниринг - Approximate surface... - Апроксимация поверхности... + + Approximate surface... + Апроксимация поверхности... - Approximate a B-Spline surface - Апроксимировать поверхность B-сплайна + + Approximate a B-Spline surface + Апроксимировать поверхность B-сплайна - - + + Workbench - - Reverse Engineering - Обратный инжиниринг + + Reverse Engineering + Обратный инжиниринг - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_se.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_se.ts index be74b4594..44c60d4b7 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_se.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_se.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate plane... - Approximerar ett plan... + + Approximate plane... + Approximerar ett plan... - Approximate a plane - Approximera ett plan + + Approximate a plane + Approximera ett plan - - + + CmdApproxSurface - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - Approximate surface... - Approximera yta... + + Approximate surface... + Approximera yta... - Approximate a B-Spline surface - Approximera en B-Spline yta + + Approximate a B-Spline surface + Approximera en B-Spline yta - - + + Workbench - - Reverse Engineering - Reverse Engineering + + Reverse Engineering + Reverse Engineering - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_uk.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_uk.ts index a3e3f44ec..3971f4e12 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_uk.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_uk.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - Зворотній інженеринг + + Reverse Engineering + Зворотній інженеринг - Approximate plane... - Approximate plane... + + Approximate plane... + Approximate plane... - Approximate a plane - Approximate a plane + + Approximate a plane + Approximate a plane - - + + CmdApproxSurface - Reverse Engineering - Зворотній інженеринг + + Reverse Engineering + Зворотній інженеринг - Approximate surface... - Орієнтація поверхні ... + + Approximate surface... + Орієнтація поверхні ... - Approximate a B-Spline surface - Орієнтувати поверхню B-Spline + + Approximate a B-Spline surface + Орієнтувати поверхню B-Spline - - + + Workbench - - Reverse Engineering - Зворотній інженеринг + + Reverse Engineering + Зворотній інженеринг - + diff --git a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_zh.ts b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_zh.ts index 2d68c0d01..852b1b5f3 100644 --- a/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_zh.ts +++ b/src/Mod/ReverseEngineering/Gui/Resources/translations/ReverseEngineering_zh.ts @@ -1,43 +1,48 @@ - - + + CmdApproxPlane - - Reverse Engineering - 逆向工程 + + Reverse Engineering + 逆向工程 - Approximate plane... - 近似​​平面... + + Approximate plane... + 近似​​平面... - Approximate a plane - 近似​​平面 + + Approximate a plane + 近似​​平面 - - + + CmdApproxSurface - Reverse Engineering - 逆向工程 + + Reverse Engineering + 逆向工程 - Approximate surface... - 近似曲面... + + Approximate surface... + 近似曲面... - Approximate a B-Spline surface - 近似B样条曲面 + + Approximate a B-Spline surface + 近似B样条曲面 - - + + Workbench - - Reverse Engineering - 逆向工程 + + Reverse Engineering + 逆向工程 - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_af.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_af.ts index 9fda679b0..8a5c153b4 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_af.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_af.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Voeg werktuig by + + Add tool + Voeg werktuig by - Add a tool shape to the robot - Voeg 'n werktuigvorm by tot die robot + + Add a tool shape to the robot + Voeg 'n werktuigvorm by tot die robot - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Plaseer robot... + + Place robot... + Plaseer robot... - Place a robot (experimental!) - Plaseer 'n robot (eksperimenteel!) + + Place a robot (experimental!) + Plaseer 'n robot (eksperimenteel!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Skep trajek + + Create trajectory + Skep trajek - Create a new empty trajectory - Skep 'n nuwe leë trajek + + Create a new empty trajectory + Skep 'n nuwe leë trajek - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Verander 'n kant in 'n trajek ... + + Edge to Trajectory... + Verander 'n kant in 'n trajek ... - Generate a Trajectory from a set of edges - Maak 'n trajek van 'n stel kante + + Generate a Trajectory from a set of edges + Maak 'n trajek van 'n stel kante - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Kuka kompakte subroetine ... + + Kuka compact subroutine... + Kuka kompakte subroetine ... - Export the trajectory as a compact KRL subroutine. - Voer die trajek uit as 'n kompakte KRL-subroetine. + + Export the trajectory as a compact KRL subroutine. + Voer die trajek uit as 'n kompakte KRL-subroetine. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Kuka volle subroetine ... + + Kuka full subroutine... + Kuka volle subroetine ... - Export the trajectory as a full KRL subroutine. - Voer die trajek uit as 'n volle KRL-subroetine. + + Export the trajectory as a full KRL subroutine. + Voer die trajek uit as 'n volle KRL-subroetine. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Voeg 'n Kuka IR125 in in die dokument. + + Insert a Kuka IR125 into the document. + Voeg 'n Kuka IR125 in in die dokument. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Voeg 'n Kuka IR16 in in die dokument. + + Insert a Kuka IR16 into the document. + Voeg 'n Kuka IR16 in in die dokument. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Voeg 'n Kuka IR210 in in die dokument. + + Insert a Kuka IR210 into the document. + Voeg 'n Kuka IR210 in in die dokument. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Voeg 'n Kuka IR500 in in die dokument. + + Insert a Kuka IR500 into the document. + Voeg 'n Kuka IR500 in in die dokument. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Voeg in trajek in + + Insert in trajectory + Voeg in trajek in - Insert robot Tool location into trajectory - Voeg robotwerktuigligging in 'n trajek + + Insert robot Tool location into trajectory + Voeg robotwerktuigligging in 'n trajek - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Voeg in trajek in + + Insert in trajectory + Voeg in trajek in - Insert preselection position into trajectory (W) - Voeg voorafkeuseligging in 'n trajek (W) + + Insert preselection position into trajectory (W) + Voeg voorafkeuseligging in 'n trajek (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Skuif na tuisposisie + + + Move to home + Skuif na tuisposisie - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Gee versuimoriëntasie + + Set default orientation + Gee versuimoriëntasie - set the default orientation for subsequent commands for waypoint creation - Gee die versuimoriëntasie vir opvolgende bevele om 'n bakenpunt te skep + + set the default orientation for subsequent commands for waypoint creation + Gee die versuimoriëntasie vir opvolgende bevele om 'n bakenpunt te skep - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Gee versuimwaardes + + Set default values + Gee versuimwaardes - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Gee die versuimwaardes vir spoed, versnelling en kontinuïteit vir die opvolgende bevele van bakenpuntskepping + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Gee die versuimwaardes vir spoed, versnelling en kontinuïteit vir die opvolgende bevele van bakenpuntskepping - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Stel die tuisposisie + + + Set the home position + Stel die tuisposisie - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simuleer 'n trajek + + Simulate a trajectory + Simuleer 'n trajek - Run a simulation on a trajectory - Loop 'n simulasie op 'n trajek + + Run a simulation on a trajectory + Loop 'n simulasie op 'n trajek - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Trajeksaamgestelde ... + + Trajectory compound... + Trajeksaamgestelde ... - Group and connect some trajectories to one - Groepeer en konnekteer 'n paar trajekte in een + + Group and connect some trajectories to one + Groepeer en konnekteer 'n paar trajekte in een - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Verfraai trajek ... + + Dress up trajectory... + Verfraai trajek ... - Create a dress up object which overide som aspects of a trajectory - Skep 'n verfraaiingsvoorwerp wat sommige aspekte van die trajek ignoreer + + Create a dress up object which overide som aspects of a trajectory + Skep 'n verfraaiingsvoorwerp wat sommige aspekte van die trajek ignoreer - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajectory tools + + Trajectory tools + Trajectory tools - Robot tools - Robot tools + + Robot tools + Robot tools - Insert Robot - Insert Robot + + Insert Robot + Insert Robot - - + + QObject - - Wrong selection - Verkeerde keuse + + + + + + + + + + + + Wrong selection + Verkeerde keuse - Select one Robot and one Trajectory object. - Kies een Robot en een Trajekvoorwerp. + + + + + + Select one Robot and one Trajectory object. + Kies een Robot en een Trajekvoorwerp. - Trajectory not valid - Trajek nie geldig nie + + Trajectory not valid + Trajek nie geldig nie - You need at least two way points in a trajectory to simulate. - Jy moet ten minste twee wegpunte in 'n trajek hê om te simuleer. + + You need at least two way points in a trajectory to simulate. + Jy moet ten minste twee wegpunte in 'n trajek hê om te simuleer. - - KRL file(*.src) - KRL-lêer (*.src) + + + KRL file(*.src) + KRL-lêer (*.src) - All Files (*.*) - Alle lêers (*.*) + + + All Files (*.*) + Alle lêers (*.*) - Export program - Voer program uit + + + Export program + Voer program uit - - Select one robot and one shape or VRML object. - Kies een robot en een vorm of VRML-voorwerp. + + Select one robot and one shape or VRML object. + Kies een robot en een vorm of VRML-voorwerp. - - No preselection - Geen voorafkeuse + + No preselection + Geen voorafkeuse - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Jy moet met die muis oor 'n vorm sweef om hierdie bevel te gebruik. Sien die dokumentasie vir meer inligting. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Jy moet met die muis oor 'n vorm sweef om hierdie bevel te gebruik. Sien die dokumentasie vir meer inligting. - - Select one Robot to set home postion - Kies een Robot om die tuisposisie te bepaal + + Select one Robot to set home postion + Kies een Robot om die tuisposisie te bepaal - Select one Robot - Kies een Robot + + Select one Robot + Kies een Robot - - Select one Trajectory object. - Kies een Trajekvoorwerp. + + + Select one Trajectory object. + Kies een Trajekvoorwerp. - set default speed - Gee versuimspoed + + set default speed + Gee versuimspoed - speed: (e.g. 1 m/s or 3 cm/s) - spoed: (bv. 1 m/s of 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + spoed: (bv. 1 m/s of 3 cm/s) - set default continuity - gee versuimkontinuïteit + + set default continuity + gee versuimkontinuïteit - continuous ? - kontinu? + + continuous ? + kontinu? - set default acceleration - gee versuimversnelling + + set default acceleration + gee versuimversnelling - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - versnelling: (bv. 1 m/s² of 3 cm/s²) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + versnelling: (bv. 1 m/s² of 3 cm/s²) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - Geen robotlêers geïnstalleer + + No robot files installed + Geen robotlêers geïnstalleer - Please visit %1 and copy the files to %2 - Besoek %1 en kopieer die lêers na %2 + + Please visit %1 and copy the files to %2 + Besoek %1 en kopieer die lêers na %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulasie + + Simulation + Simulasie - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Soort + + Type + Soort - Name - Naam + + Name + Naam - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaakKantNaPadParameter + + TaskEdge2TracParameter + TaakKantNaPadParameter - - + + RobotGui::TaskRobot6Axis - - Form - Vorm + + Form + Vorm - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Werktuig: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Werktuig: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaakRobot6As + + TaskRobot6Axis + TaakRobot6As - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaakRobotKontrole + + TaskRobotControl + TaakRobotKontrole - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaakRobotBoodskappe + + TaskRobotMessages + TaakRobotBoodskappe - - + + RobotGui::TaskTrajectory - - Form - Vorm + + Form + Vorm - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343, 343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343, 343) - Type - Soort + + Type + Soort - Name - Naam + + Name + Naam - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Trajek + + Trajectory + Trajek - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Parameter vir verfraaiing + + Dress Up Parameter + Parameter vir verfraaiing - - + + TaskEdge2TracParameter - - Form - Vorm + + Form + Vorm - Hide / Show - Wys/Verberg + + Hide / Show + Wys/Verberg - Edges: 0 - Kante: 0 + + Edges: 0 + Kante: 0 - Cluster: 0 - Tros: 0 + + Cluster: 0 + Tros: 0 - Sizing Value: - Groottewaarde: + + Sizing Value: + Groottewaarde: - Use orientation of edge - Use orientation of edge + + Use orientation of edge + Use orientation of edge - TaskEdge2TracParameter - TaakKantNaPadParameter + TaskEdge2TracParameter + TaakKantNaPadParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaakRobot6As + TaskRobot6Axis + TaakRobot6As - - + + TaskRobotControl - - Form - Vorm + + Form + Vorm - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Werktuig 0 + + Tool 0 + Werktuig 0 - Tool - Werktuig + + Tool + Werktuig - Base 0 - Basis 0 + + Base 0 + Basis 0 - Base - Basis + + Base + Basis - World - Wêreld + + World + Wêreld + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + TaakRobotKontrole - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - TaakRobotKontrole - - - + + TaskRobotMessages - - Form - Vorm + + Form + Vorm - clear - Maak skoon + + clear + Maak skoon - TaskRobotMessages - TaakRobotBoodskappe + TaskRobotMessages + TaakRobotBoodskappe - - + + TaskTrajectory - Trajectory - Trajek + Trajectory + Trajek - - + + TaskTrajectoryDressUpParameter - - Form - Vorm + + Form + Vorm - Speed & Acceleration: - Spoed en versnelling: + + Speed & Acceleration: + Spoed en versnelling: - Speed: - Spoed: + + Speed: + Spoed: - Use - Gebruik + + + Use + Gebruik - Accel: - Versnel: + + Accel: + Versnel: - Don't change Cont - Moenie die kontinuum verander nie + + Don't change Cont + Moenie die kontinuum verander nie - Continues - Gaan voort + + Continues + Gaan voort - Discontinues - Hou op + + Discontinues + Hou op - Position and Orientation: - Posisie en oriëntasie: + + Position and Orientation: + Posisie en oriëntasie: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Moenie die posisie en oriëntasie verander nie + + Don't change Position & Orientation + Moenie die posisie en oriëntasie verander nie - Use Orientation - Gebruik Oriëntasie + + Use Orientation + Gebruik Oriëntasie - Add Position - Voeg posisie by + + Add Position + Voeg posisie by - Add Orientation - Voeg oriëntasie by + + Add Orientation + Voeg oriëntasie by - Dress Up Parameter - Parameter vir verfraaiing + Dress Up Parameter + Parameter vir verfraaiing - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Voeg robotte in + + Insert Robots + Voeg robotte in - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Voer trajek uit + + Export trajectory + Voer trajek uit - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_de.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_de.ts index 564f0b2fd..bb3e9d6d2 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_de.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_de.ts @@ -1,878 +1,1045 @@ - - + + CmdRobotAddToolShape - - Robot - Roboter + + Robot + Roboter - Add tool - Werkzeug hinzufügen + + Add tool + Werkzeug hinzufügen - Add a tool shape to the robot - Hinzufügen einer Werkzeug-Form zum Roboter + + Add a tool shape to the robot + Hinzufügen einer Werkzeug-Form zum Roboter - - + + CmdRobotConstraintAxle - - Robot - Roboter + + Robot + Roboter - Place robot... - Plaziert einen Roboter... + + Place robot... + Plaziert einen Roboter... - Place a robot (experimental!) - Platziere einen Roboter (experimental!) + + Place a robot (experimental!) + Platziere einen Roboter (experimental!) - - + + CmdRobotCreateTrajectory - - Robot - Roboter + + Robot + Roboter - Create trajectory - Erstelle Arbeitsbewegung + + Create trajectory + Erstelle Arbeitsbewegung - Create a new empty trajectory - Erstellen Sie eine neue, leere Arbeitsbewegung + + Create a new empty trajectory + Erstellen Sie eine neue, leere Arbeitsbewegung - - + + CmdRobotEdge2Trac - Robot - Roboter + + Robot + Roboter - Edge to Trajectory... - Punkt zur Arbeitsbewegung hinzufügen... + + Edge to Trajectory... + Punkt zur Arbeitsbewegung hinzufügen... - Generate a Trajectory from a set of edges - Generieren Sie eine Arbeitsbewegung aus einer Reihe von Punkten + + Generate a Trajectory from a set of edges + Generieren Sie eine Arbeitsbewegung aus einer Reihe von Punkten - - + + CmdRobotExportKukaCompact - - Robot - Roboter + + Robot + Roboter - Kuka compact subroutine... - KUKA kompaktes Unterprogramm ... + + Kuka compact subroutine... + KUKA kompaktes Unterprogramm ... - Export the trajectory as a compact KRL subroutine. - Exportieren Sie die Arbeitsbewegung als kompaktes KRL Unterprogramm. + + Export the trajectory as a compact KRL subroutine. + Exportieren Sie die Arbeitsbewegung als kompaktes KRL Unterprogramm. - - + + CmdRobotExportKukaFull - Robot - Roboter + + Robot + Roboter - Kuka full subroutine... - KUKA vollständiges Unterprogramm ... + + Kuka full subroutine... + KUKA vollständiges Unterprogramm ... - Export the trajectory as a full KRL subroutine. - Exportieren Sie die Arbeitsbewegung als eine volle KRL-Unterroutine. + + Export the trajectory as a full KRL subroutine. + Exportieren Sie die Arbeitsbewegung als eine volle KRL-Unterroutine. - - + + CmdRobotInsertKukaIR125 - - Robot - Roboter + + Robot + Roboter - Kuka IR125 - KUKA IR125 + + Kuka IR125 + KUKA IR125 - Insert a Kuka IR125 into the document. - Einen Kuka-IR125 in das Dokument einfügen. + + Insert a Kuka IR125 into the document. + Einen Kuka-IR125 in das Dokument einfügen. - - + + CmdRobotInsertKukaIR16 - Robot - Roboter + + Robot + Roboter - Kuka IR16 - KUKA IR16 + + Kuka IR16 + KUKA IR16 - Insert a Kuka IR16 into the document. - Einen Kuka-IR16 in das Dokument einfügen. + + Insert a Kuka IR16 into the document. + Einen Kuka-IR16 in das Dokument einfügen. - - + + CmdRobotInsertKukaIR210 - Robot - Roboter + + Robot + Roboter - Kuka IR210 - KUKA IR210 + + Kuka IR210 + KUKA IR210 - Insert a Kuka IR210 into the document. - Einen Kuka-IR210 in das Dokument einfügen. + + Insert a Kuka IR210 into the document. + Einen Kuka-IR210 in das Dokument einfügen. - - + + CmdRobotInsertKukaIR500 - Robot - Roboter + + Robot + Roboter - Kuka IR500 - KUKA IR500 + + Kuka IR500 + KUKA IR500 - Insert a Kuka IR500 into the document. - Einen Kuka-IR500 in das Dokument einfügen. + + Insert a Kuka IR500 into the document. + Einen Kuka-IR500 in das Dokument einfügen. - - + + CmdRobotInsertWaypoint - - Robot - Roboter + + Robot + Roboter - Insert in trajectory - Fügen Sie eine Arbeitsbewegung ein + + Insert in trajectory + Fügen Sie eine Arbeitsbewegung ein - Insert robot Tool location into trajectory - Lage des Roboterwerkzeugs in Arbeitsbewegung einbringen + + Insert robot Tool location into trajectory + Lage des Roboterwerkzeugs in Arbeitsbewegung einbringen - - + + CmdRobotInsertWaypointPreselect - Robot - Roboter + + Robot + Roboter - Insert in trajectory - Fügen Sie eine Arbeitsbewegung ein + + Insert in trajectory + Fügen Sie eine Arbeitsbewegung ein - Insert preselection position into trajectory (W) - Vorausgewählte Position in Arbeitsbewegung einbringen (W) + + Insert preselection position into trajectory (W) + Vorausgewählte Position in Arbeitsbewegung einbringen (W) - - + + CmdRobotRestoreHomePos - - Robot - Roboter + + Robot + Roboter - Move to home - Zur Ausgansposition bewegen + + + Move to home + Zur Ausgansposition bewegen - - + + CmdRobotSetDefaultOrientation - - Robot - Roboter + + Robot + Roboter - Set default orientation - Setze Standardrichtung + + Set default orientation + Setze Standardrichtung - set the default orientation for subsequent commands for waypoint creation - Setzt die Standardausrichtung für nachfolgende Befehle zur Wegpunkterstellung + + set the default orientation for subsequent commands for waypoint creation + Setzt die Standardausrichtung für nachfolgende Befehle zur Wegpunkterstellung - - + + CmdRobotSetDefaultValues - Robot - Roboter + + Robot + Roboter - Set default values - Festlegen von Standardwerten + + Set default values + Festlegen von Standardwerten - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Setzt die Standard-Werte für Geschwindigkeit, Beschleunigung und Dauer für die nachfolgenden Befehle der Wegpunkterstellung + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Setzt die Standard-Werte für Geschwindigkeit, Beschleunigung und Dauer für die nachfolgenden Befehle der Wegpunkterstellung - - + + CmdRobotSetHomePos - - Robot - Roboter + + Robot + Roboter - Set the home position - Setzen Sie die Ausgansposition + + + Set the home position + Setzen Sie die Ausgansposition - - + + CmdRobotSimulate - Robot - Roboter + + Robot + Roboter - Simulate a trajectory - Simulieren einer Arbeitsbewegung + + Simulate a trajectory + Simulieren einer Arbeitsbewegung - Run a simulation on a trajectory - Simulation über die Bewegungsbahn starten + + Run a simulation on a trajectory + Simulation über die Bewegungsbahn starten - - + + CmdRobotTrajectoryCompound - - Robot - Roboter + + Robot + Roboter - Trajectory compound... - Verbinden der Arbeitsbewegungen ... + + Trajectory compound... + Verbinden der Arbeitsbewegungen ... - Group and connect some trajectories to one - Gruppieren und Verbinden zu einer Arbeitsbewegung + + Group and connect some trajectories to one + Gruppieren und Verbinden zu einer Arbeitsbewegung - - + + CmdRobotTrajectoryDressUp - Robot - Roboter + + Robot + Roboter - Dress up trajectory... - Arbeitsbewegung verfeinern ... + + Dress up trajectory... + Arbeitsbewegung verfeinern ... - Create a dress up object which overide som aspects of a trajectory - Erstelle Dress-Up-Objekt, das Teile der Trajektorie überschreibt + + Create a dress up object which overide som aspects of a trajectory + Erstelle Dress-Up-Objekt, das Teile der Trajektorie überschreibt - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Bwewgung Werkzeuge + + Trajectory tools + Bwewgung Werkzeuge - Robot tools - Roboter-Werkzeuge + + Robot tools + Roboter-Werkzeuge - Insert Robot - Roboter einfügen + + Insert Robot + Roboter einfügen - - + + QObject - - Wrong selection - Falsche Auswahl + + + + + + + + + + + + Wrong selection + Falsche Auswahl - Select one Robot and one Trajectory object. - Wählen Sie einen Roboter und eine Arbeitsbewegung. + + + + + + Select one Robot and one Trajectory object. + Wählen Sie einen Roboter und eine Arbeitsbewegung. - Trajectory not valid - Arbeitsbewegung nicht gültig + + Trajectory not valid + Arbeitsbewegung nicht gültig - You need at least two way points in a trajectory to simulate. - Sie benötigen mindestens zwei Wegpunkte, um eine Bewegungsbahn zu simulieren. + + You need at least two way points in a trajectory to simulate. + Sie benötigen mindestens zwei Wegpunkte, um eine Bewegungsbahn zu simulieren. - - KRL file(*.src) - KRL-Datei (*. src) + + + KRL file(*.src) + KRL-Datei (*. src) - All Files (*.*) - Alle Dateien (*.*) + + + All Files (*.*) + Alle Dateien (*.*) - Export program - Programm exportieren + + + Export program + Programm exportieren - - Select one robot and one shape or VRML object. - Wählen Sie einen Roboter und eine Form oder ein VRML-Objekt. + + Select one robot and one shape or VRML object. + Wählen Sie einen Roboter und eine Form oder ein VRML-Objekt. - - No preselection - Keine Vorauswahl + + No preselection + Keine Vorauswahl - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Sie müssen die Maus über eine Geometrie (Preselection) positionieren, um diesen Befehl zu verwenden. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Sie müssen die Maus über eine Geometrie (Preselection) positionieren, um diesen Befehl zu verwenden. Siehe Dokumentation für Details. - - Select one Robot to set home postion - Wählen Sie einen Roboter um die Ausgangsposition zu setzen + + Select one Robot to set home postion + Wählen Sie einen Roboter um die Ausgangsposition zu setzen - Select one Robot - Einen Roboter auswählen + + Select one Robot + Einen Roboter auswählen - - Select one Trajectory object. - Einen Bewegungsablauf wählen. + + + Select one Trajectory object. + Einen Bewegungsablauf wählen. - set default speed - Standardgeschwindigkeit setzen + + set default speed + Standardgeschwindigkeit setzen - speed: (e.g. 1 m/s or 3 cm/s) - Geschwindigkeit: (z.B. 1 m/s oder 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + Geschwindigkeit: (z.B. 1 m/s oder 3 cm/s) - set default continuity - Setze Vorgabe zur Dauer + + set default continuity + Setze Vorgabe zur Dauer - continuous ? - Fortlaufend ? + + continuous ? + Fortlaufend ? - set default acceleration - Standardbeschleunigung setzen + + set default acceleration + Standardbeschleunigung setzen - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - Beschleunigung: (zB 1 m / s ^ 2 oder 3 cm / s ^ 2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + Beschleunigung: (zB 1 m / s ^ 2 oder 3 cm / s ^ 2) - Select the Trajectory which you want to dress up. - Wählen Sie die Bewegung die Sie verwenden wollen. + + Select the Trajectory which you want to dress up. + Wählen Sie die Bewegung die Sie verwenden wollen. - - No robot files installed - Keine Roboter-Dateien installiert + + No robot files installed + Keine Roboter-Dateien installiert - Please visit %1 and copy the files to %2 - Bitte gehen Sie zu %1 und kopieren Sie die Dateien in %2 + + Please visit %1 and copy the files to %2 + Bitte gehen Sie zu %1 und kopieren Sie die Dateien in %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulation + + Simulation + Simulation - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Typ + + Type + Typ - Name - Name + + Name + Name - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Form + + Form + Form - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Werkzeug: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Werkzeug: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Form + + Form + Form - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Position: (200,23, 300,23, 400,23, 234, 343, 343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Position: (200,23, 300,23, 400,23, 234, 343, 343) - Type - Typ + + Type + Typ - Name - Name + + Name + Name - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Bahnverlauf + + Trajectory + Bahnverlauf - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Dress Up Parameter + + Dress Up Parameter + Dress Up Parameter - - + + TaskEdge2TracParameter - - Form - Form + + Form + Form - Hide / Show - Verbergen / Zeigen + + Hide / Show + Verbergen / Zeigen - Edges: 0 - Punkte: 0 + + Edges: 0 + Punkte: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Größenwert: + + Sizing Value: + Größenwert: - Use orientation of edge - Orientierung am Rand + + Use orientation of edge + Orientierung am Rand - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Form + + Form + Form - X+ - X + + + X+ + X + - Y+ - Y + + + Y+ + Y + - Z+ - Z + + + Z+ + Z + - A+ - A + + + A+ + A + - B+ - B + + + B+ + B + - C+ - C + + + C+ + C + - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Werkzeug 0 + + Tool 0 + Werkzeug 0 - Tool - Werkzeug + + Tool + Werkzeug - Base 0 - Basis 0 + + Base 0 + Basis 0 - Base - Basis + + Base + Basis - World - Welt + + World + Welt + + + + 50mm / 5° + 50mm / 5 ° + + + + 20mm / 2° + 20mm / 2 ° + + + + 10mm / 1° + 10mm / 1 ° + + + + 5mm / 0.5° + 5mm / 0,5 ° + + + + 1mm / 0.1° + 1mm / 0,1 ° - 50mm / 5° - 50mm / 5 ° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm / 2 ° - - - 10mm / 1° - 10mm / 1 ° - - - 5mm / 0.5° - 5mm / 0,5 ° - - - 1mm / 0.1° - 1mm / 0,1 ° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Form + + Form + Form - clear - Zurücksetzen + + clear + Zurücksetzen - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Bahnverlauf + Trajectory + Bahnverlauf - - + + TaskTrajectoryDressUpParameter - - Form - Form + + Form + Form - Speed & Acceleration: - Geschwindigkeit & Beschleunigung: + + Speed & Acceleration: + Geschwindigkeit & Beschleunigung: - Speed: - Geschwindigkeit: + + Speed: + Geschwindigkeit: - Use - Verwenden + + + Use + Verwenden - Accel: - Beschleunigung: + + Accel: + Beschleunigung: - Don't change Cont - Don't change Cont + + Don't change Cont + Don't change Cont - Continues - Continues + + Continues + Continues - Discontinues - Discontinues + + Discontinues + Discontinues - Position and Orientation: - Position und Orientierung: + + Position and Orientation: + Position und Orientierung: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Position und Richtung nicht verändern + + Don't change Position & Orientation + Position und Richtung nicht verändern - Use Orientation - Benutze Orientierung + + Use Orientation + Benutze Orientierung - Add Position - Position hinzufügen + + Add Position + Position hinzufügen - Add Orientation - Hinzufügen der Orientierung + + Add Orientation + Hinzufügen der Orientierung - Dress Up Parameter - Dress Up Parameter + Dress Up Parameter + Dress Up Parameter - - + + Workbench - - Robot - Roboter + + Robot + Roboter - Insert Robots - Roboter einfügen + + Insert Robots + Roboter einfügen - &Robot - &Roboter + + &Robot + &Roboter - Export trajectory - Exportiere Arbeitsbewegung + + Export trajectory + Exportiere Arbeitsbewegung - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_es.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_es.ts index ae10f908a..18ca53dd9 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_es.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_es.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Agregar herramienta + + Add tool + Agregar herramienta - Add a tool shape to the robot - Agregar una forma de herramienta para el robot + + Add a tool shape to the robot + Agregar una forma de herramienta para el robot - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Emplazar robot ... + + Place robot... + Emplazar robot ... - Place a robot (experimental!) - Colocar un robot (experimental!) + + Place a robot (experimental!) + Colocar un robot (experimental!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Crear trayectoria + + Create trajectory + Crear trayectoria - Create a new empty trajectory - Crear una nueva trayectoria vacía + + Create a new empty trajectory + Crear una nueva trayectoria vacía - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Borde de trayectoria... + + Edge to Trajectory... + Borde de trayectoria... - Generate a Trajectory from a set of edges - Generar una trayectoria de un conjunto de aristas + + Generate a Trajectory from a set of edges + Generar una trayectoria de un conjunto de aristas - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Subrutina de KUKA compacta ... + + Kuka compact subroutine... + Subrutina de KUKA compacta ... - Export the trajectory as a compact KRL subroutine. - Exportar la trayectoria como una subrutina KRL compacta. + + Export the trajectory as a compact KRL subroutine. + Exportar la trayectoria como una subrutina KRL compacta. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Subrutina Kuka completa ... + + Kuka full subroutine... + Subrutina Kuka completa ... - Export the trajectory as a full KRL subroutine. - Exportar la trayectoria como una subrutina KRL completa. + + Export the trajectory as a full KRL subroutine. + Exportar la trayectoria como una subrutina KRL completa. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka iR125 + + Kuka IR125 + Kuka iR125 - Insert a Kuka IR125 into the document. - Inserte un Kuka iR125 en el documento. + + Insert a Kuka IR125 into the document. + Inserte un Kuka iR125 en el documento. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Inserte un Kuka IR16 en el documento. + + Insert a Kuka IR16 into the document. + Inserte un Kuka IR16 en el documento. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Inserte un Kuka IR210 en el documento. + + Insert a Kuka IR210 into the document. + Inserte un Kuka IR210 en el documento. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - KUKA IR500 + + Kuka IR500 + KUKA IR500 - Insert a Kuka IR500 into the document. - Inserte una Kuka IR500 en el documento. + + Insert a Kuka IR500 into the document. + Inserte una Kuka IR500 en el documento. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Insertar en la trayectoria + + Insert in trajectory + Insertar en la trayectoria - Insert robot Tool location into trajectory - Inserte la herramienta lacalización del robot en la trayectoria + + Insert robot Tool location into trajectory + Inserte la herramienta lacalización del robot en la trayectoria - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Insertar en la trayectoria + + Insert in trajectory + Insertar en la trayectoria - Insert preselection position into trajectory (W) - Introduzca la posición de preselección en la trayectoria (W) + + Insert preselection position into trajectory (W) + Introduzca la posición de preselección en la trayectoria (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Mover al inicio + + + Move to home + Mover al inicio - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Establecer orientación por defecto + + Set default orientation + Establecer orientación por defecto - set the default orientation for subsequent commands for waypoint creation - Establecer la orientación por defecto para comandos posteriores la la creación de punto de referencia + + set the default orientation for subsequent commands for waypoint creation + Establecer la orientación por defecto para comandos posteriores la la creación de punto de referencia - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Establecer valores por defecto + + Set default values + Establecer valores por defecto - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Establecer los valores predeterminados de velocidad, aceleración y continuidad para los comandos posteriores a la creación del punto de referencia + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Establecer los valores predeterminados de velocidad, aceleración y continuidad para los comandos posteriores a la creación del punto de referencia - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Establezca la posición inicial + + + Set the home position + Establezca la posición inicial - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simular una trayectoria + + Simulate a trajectory + Simular una trayectoria - Run a simulation on a trajectory - Ejecutar una simulación en una trayectoria + + Run a simulation on a trajectory + Ejecutar una simulación en una trayectoria - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Componer trayectoria... + + Trajectory compound... + Componer trayectoria... - Group and connect some trajectories to one - Agrupar y conectar algunas trayectorias en una + + Group and connect some trajectories to one + Agrupar y conectar algunas trayectorias en una - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Revestir trayectoria... + + Dress up trajectory... + Revestir trayectoria... - Create a dress up object which overide som aspects of a trajectory - Crear un objeto revestido que anula algunos aspectos de una trayectoria + + Create a dress up object which overide som aspects of a trajectory + Crear un objeto revestido que anula algunos aspectos de una trayectoria - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajectory tools + + Trajectory tools + Trajectory tools - Robot tools - Robot tools + + Robot tools + Robot tools - Insert Robot - Insert Robot + + Insert Robot + Insert Robot - - + + QObject - - Wrong selection - Selección incorrecta + + + + + + + + + + + + Wrong selection + Selección incorrecta - Select one Robot and one Trajectory object. - Seleccione un robot y un objeto trayectoria. + + + + + + Select one Robot and one Trajectory object. + Seleccione un robot y un objeto trayectoria. - Trajectory not valid - La trayectoria no es válida + + Trajectory not valid + La trayectoria no es válida - You need at least two way points in a trajectory to simulate. - Usted necesita por lo menos dos puntos de paso en una trayectoria para poder simular. + + You need at least two way points in a trajectory to simulate. + Usted necesita por lo menos dos puntos de paso en una trayectoria para poder simular. - - KRL file(*.src) - Archivo KRL (*.src) + + + KRL file(*.src) + Archivo KRL (*.src) - All Files (*.*) - Todos los archivos (*.*) + + + All Files (*.*) + Todos los archivos (*.*) - Export program - Exportar programa + + + Export program + Exportar programa - - Select one robot and one shape or VRML object. - Seleccione un robot y una forma u objeto VRML. + + Select one robot and one shape or VRML object. + Seleccione un robot y una forma u objeto VRML. - - No preselection - Sin preselección + + No preselection + Sin preselección - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Usted tiene que pasar el ratón por encima de una geometría (preselección) para utilizar este comando. Consulte la documentación para obtener más detalles. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Usted tiene que pasar el ratón por encima de una geometría (preselección) para utilizar este comando. Consulte la documentación para obtener más detalles. - - Select one Robot to set home postion - Seleccione un Robot para establecer la posición de inicio + + Select one Robot to set home postion + Seleccione un Robot para establecer la posición de inicio - Select one Robot - Seleccione un Robot + + Select one Robot + Seleccione un Robot - - Select one Trajectory object. - Seleccione un objeto de trayectoria. + + + Select one Trajectory object. + Seleccione un objeto de trayectoria. - set default speed - Establecer velocidad por defecto + + set default speed + Establecer velocidad por defecto - speed: (e.g. 1 m/s or 3 cm/s) - velocidad: (p.e. 1 m/s o 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + velocidad: (p.e. 1 m/s o 3 cm/s) - set default continuity - Establecer la continuidad por defecto + + set default continuity + Establecer la continuidad por defecto - continuous ? - ¿continuo? + + continuous ? + ¿continuo? - set default acceleration - Establecer aceleración por defecto + + set default acceleration + Establecer aceleración por defecto - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - aceleración: (p.e., 1 m/s ^ 2 o 3 cm/s ^ 2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + aceleración: (p.e., 1 m/s ^ 2 o 3 cm/s ^ 2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - No hay archivos de robot instalados + + No robot files installed + No hay archivos de robot instalados - Please visit %1 and copy the files to %2 - Por favor, visite %1 y copie los archivos en %2 + + Please visit %1 and copy the files to %2 + Por favor, visite %1 y copie los archivos en %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulación + + Simulation + Simulación - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Tipo + + Type + Tipo - Name - Nombre + + Name + Nombre - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - Parámetro TaskEdge2Trac + + TaskEdge2TracParameter + Parámetro TaskEdge2Trac - - + + RobotGui::TaskRobot6Axis - - Form - Formulario + + Form + Formulario - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Herramienta: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Herramienta: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - Tarea de robot 6Axis + + TaskRobot6Axis + Tarea de robot 6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - Control de tareas de robot + + TaskRobotControl + Control de tareas de robot - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - Mensaje de tareas de robot + + TaskRobotMessages + Mensaje de tareas de robot - - + + RobotGui::TaskTrajectory - - Form - Formulario + + Form + Formulario - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Tipo + + Type + Tipo - Name - Nombre + + Name + Nombre - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Trayectoria + + Trajectory + Trayectoria - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Parámetro de revestido + + Dress Up Parameter + Parámetro de revestido - - + + TaskEdge2TracParameter - - Form - Formulario + + Form + Formulario - Hide / Show - Ocultar / Mostrar + + Hide / Show + Ocultar / Mostrar - Edges: 0 - Bordes: 0 + + Edges: 0 + Bordes: 0 - Cluster: 0 - Clúster: 0 + + Cluster: 0 + Clúster: 0 - Sizing Value: - Valor de tamaño: + + Sizing Value: + Valor de tamaño: - Use orientation of edge - Use orientation of edge + + Use orientation of edge + Use orientation of edge - TaskEdge2TracParameter - Parámetro TaskEdge2Trac + TaskEdge2TracParameter + Parámetro TaskEdge2Trac - - + + TaskRobot6Axis - TaskRobot6Axis - Tarea de robot 6Axis + TaskRobot6Axis + Tarea de robot 6Axis - - + + TaskRobotControl - - Form - Formulario + + Form + Formulario - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Herramienta 0 + + Tool 0 + Herramienta 0 - Tool - Herramienta + + Tool + Herramienta - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - Mundo + + World + Mundo + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + Control de tareas de robot - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - Control de tareas de robot - - - + + TaskRobotMessages - - Form - Formulario + + Form + Formulario - clear - limpiar + + clear + limpiar - TaskRobotMessages - Mensaje de tareas de robot + TaskRobotMessages + Mensaje de tareas de robot - - + + TaskTrajectory - Trajectory - Trayectoria + Trajectory + Trayectoria - - + + TaskTrajectoryDressUpParameter - - Form - Formulario + + Form + Formulario - Speed & Acceleration: - Velocidad y Aceleración: + + Speed & Acceleration: + Velocidad y Aceleración: - Speed: - Velocidad: + + Speed: + Velocidad: - Use - Uso + + + Use + Uso - Accel: - acel: + + Accel: + acel: - Don't change Cont - No cambiar cont + + Don't change Cont + No cambiar cont - Continues - Continúa + + Continues + Continúa - Discontinues - Interrumpe + + Discontinues + Interrumpe - Position and Orientation: - Posición y Orientación: + + Position and Orientation: + Posición y Orientación: - (0,0,0),(0,0,0) - (0,0,0), (0,0,0) + + (0,0,0),(0,0,0) + (0,0,0), (0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - No cambie de Posición y Orientación + + Don't change Position & Orientation + No cambie de Posición y Orientación - Use Orientation - Orientación de uso + + Use Orientation + Orientación de uso - Add Position - Añadir Posición + + Add Position + Añadir Posición - Add Orientation - Añadir Orientación + + Add Orientation + Añadir Orientación - Dress Up Parameter - Parámetro de revestido + Dress Up Parameter + Parámetro de revestido - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Insertar robots + + Insert Robots + Insertar robots - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Exportar trayectoria + + Export trajectory + Exportar trayectoria - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_fi.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_fi.ts index 00e947278..a80e9b400 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_fi.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_fi.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robotti + + Robot + Robotti - Add tool - Lisää työkalu + + Add tool + Lisää työkalu - Add a tool shape to the robot - Lisää työkalun muoto robotille + + Add a tool shape to the robot + Lisää työkalun muoto robotille - - + + CmdRobotConstraintAxle - - Robot - Robotti + + Robot + Robotti - Place robot... - Paikoita robotti ... + + Place robot... + Paikoita robotti ... - Place a robot (experimental!) - Paikoita robotti (kokeellinen!) + + Place a robot (experimental!) + Paikoita robotti (kokeellinen!) - - + + CmdRobotCreateTrajectory - - Robot - Robotti + + Robot + Robotti - Create trajectory - Luo liikerata + + Create trajectory + Luo liikerata - Create a new empty trajectory - Luo uusi tyhjä liikerata + + Create a new empty trajectory + Luo uusi tyhjä liikerata - - + + CmdRobotEdge2Trac - Robot - Robotti + + Robot + Robotti - Edge to Trajectory... - Edge to Trajectory... + + Edge to Trajectory... + Edge to Trajectory... - Generate a Trajectory from a set of edges - Generate a Trajectory from a set of edges + + Generate a Trajectory from a set of edges + Generate a Trajectory from a set of edges - - + + CmdRobotExportKukaCompact - - Robot - Robotti + + Robot + Robotti - Kuka compact subroutine... - Kuka kompakti alirutiini... + + Kuka compact subroutine... + Kuka kompakti alirutiini... - Export the trajectory as a compact KRL subroutine. - Vie liikerata kompaktina KRL-alirutiinina. + + Export the trajectory as a compact KRL subroutine. + Vie liikerata kompaktina KRL-alirutiinina. - - + + CmdRobotExportKukaFull - Robot - Robotti + + Robot + Robotti - Kuka full subroutine... - Kuka täydellinen alirutiini... + + Kuka full subroutine... + Kuka täydellinen alirutiini... - Export the trajectory as a full KRL subroutine. - Vie liikerata kuten täydellinen KRL-alirutiini. + + Export the trajectory as a full KRL subroutine. + Vie liikerata kuten täydellinen KRL-alirutiini. - - + + CmdRobotInsertKukaIR125 - - Robot - Robotti + + Robot + Robotti - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Lisää Kuka IR125 dokumenttiin. + + Insert a Kuka IR125 into the document. + Lisää Kuka IR125 dokumenttiin. - - + + CmdRobotInsertKukaIR16 - Robot - Robotti + + Robot + Robotti - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Lisää Kuka IR16 dokumenttiin. + + Insert a Kuka IR16 into the document. + Lisää Kuka IR16 dokumenttiin. - - + + CmdRobotInsertKukaIR210 - Robot - Robotti + + Robot + Robotti - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Lisää Kuka IR500 dokumenttiin. + + Insert a Kuka IR210 into the document. + Lisää Kuka IR500 dokumenttiin. - - + + CmdRobotInsertKukaIR500 - Robot - Robotti + + Robot + Robotti - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Lisää Kuka IR500 dokumenttiin. + + Insert a Kuka IR500 into the document. + Lisää Kuka IR500 dokumenttiin. - - + + CmdRobotInsertWaypoint - - Robot - Robotti + + Robot + Robotti - Insert in trajectory - Lisää liikeradalle + + Insert in trajectory + Lisää liikeradalle - Insert robot Tool location into trajectory - Insert robot Tool location into trajectory + + Insert robot Tool location into trajectory + Insert robot Tool location into trajectory - - + + CmdRobotInsertWaypointPreselect - Robot - Robotti + + Robot + Robotti - Insert in trajectory - Lisää liikeradalle + + Insert in trajectory + Lisää liikeradalle - Insert preselection position into trajectory (W) - Insert preselection position into trajectory (W) + + Insert preselection position into trajectory (W) + Insert preselection position into trajectory (W) - - + + CmdRobotRestoreHomePos - - Robot - Robotti + + Robot + Robotti - Move to home - Siirrä alkuasentoon + + + Move to home + Siirrä alkuasentoon - - + + CmdRobotSetDefaultOrientation - - Robot - Robotti + + Robot + Robotti - Set default orientation - Set default orientation + + Set default orientation + Set default orientation - set the default orientation for subsequent commands for waypoint creation - set the default orientation for subsequent commands for waypoint creation + + set the default orientation for subsequent commands for waypoint creation + set the default orientation for subsequent commands for waypoint creation - - + + CmdRobotSetDefaultValues - Robot - Robotti + + Robot + Robotti - Set default values - Set default values + + Set default values + Set default values - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - - + + CmdRobotSetHomePos - - Robot - Robotti + + Robot + Robotti - Set the home position - Aseta alkuasento + + + Set the home position + Aseta alkuasento - - + + CmdRobotSimulate - Robot - Robotti + + Robot + Robotti - Simulate a trajectory - Simuloi liikerata + + Simulate a trajectory + Simuloi liikerata - Run a simulation on a trajectory - Aja liikerata simulaatio + + Run a simulation on a trajectory + Aja liikerata simulaatio - - + + CmdRobotTrajectoryCompound - - Robot - Robotti + + Robot + Robotti - Trajectory compound... - Trajectory compound... + + Trajectory compound... + Trajectory compound... - Group and connect some trajectories to one - Group and connect some trajectories to one + + Group and connect some trajectories to one + Group and connect some trajectories to one - - + + CmdRobotTrajectoryDressUp - Robot - Robotti + + Robot + Robotti - Dress up trajectory... - Dress up trajectory... + + Dress up trajectory... + Dress up trajectory... - Create a dress up object which overide som aspects of a trajectory - Create a dress up object which overide som aspects of a trajectory + + Create a dress up object which overide som aspects of a trajectory + Create a dress up object which overide som aspects of a trajectory - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajectory tools + + Trajectory tools + Trajectory tools - Robot tools - Robot tools + + Robot tools + Robot tools - Insert Robot - Insert Robot + + Insert Robot + Insert Robot - - + + QObject - - Wrong selection - Väärä valinta + + + + + + + + + + + + Wrong selection + Väärä valinta - Select one Robot and one Trajectory object. - Select one Robot and one Trajectory object. + + + + + + Select one Robot and one Trajectory object. + Select one Robot and one Trajectory object. - Trajectory not valid - Liikerata ei kelpaa + + Trajectory not valid + Liikerata ei kelpaa - You need at least two way points in a trajectory to simulate. - You need at least two way points in a trajectory to simulate. + + You need at least two way points in a trajectory to simulate. + You need at least two way points in a trajectory to simulate. - - KRL file(*.src) - KRL-tiedosto(*.src) + + + KRL file(*.src) + KRL-tiedosto(*.src) - All Files (*.*) - Kaikki tiedostot (*.*) + + + All Files (*.*) + Kaikki tiedostot (*.*) - Export program - Vie ohjelma + + + Export program + Vie ohjelma - - Select one robot and one shape or VRML object. - Select one robot and one shape or VRML object. + + Select one robot and one shape or VRML object. + Select one robot and one shape or VRML object. - - No preselection - Ei esivalintaa + + No preselection + Ei esivalintaa - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - - Select one Robot to set home postion - Select one Robot to set home postion + + Select one Robot to set home postion + Select one Robot to set home postion - Select one Robot - Select one Robot + + Select one Robot + Select one Robot - - Select one Trajectory object. - Select one Trajectory object. + + + Select one Trajectory object. + Select one Trajectory object. - set default speed - set default speed + + set default speed + set default speed - speed: (e.g. 1 m/s or 3 cm/s) - speed: (e.g. 1 m/s or 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + speed: (e.g. 1 m/s or 3 cm/s) - set default continuity - set default continuity + + set default continuity + set default continuity - continuous ? - continuous ? + + continuous ? + continuous ? - set default acceleration - set default acceleration + + set default acceleration + set default acceleration - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - No robot files installed + + No robot files installed + No robot files installed - Please visit %1 and copy the files to %2 - Please visit %1 and copy the files to %2 + + Please visit %1 and copy the files to %2 + Please visit %1 and copy the files to %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulointi + + Simulation + Simulointi - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Tyyppi + + Type + Tyyppi - Name - Nimi + + Name + Nimi - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Lomake + + Form + Lomake - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Tool: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Tool: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - Tehtävä Robotti6 Akselit + + TaskRobot6Axis + Tehtävä Robotti6 Akselit - - + + RobotGui::TaskRobotControl - - TaskRobotControl - Robotin tehtävien hallinta + + TaskRobotControl + Robotin tehtävien hallinta - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - Robotin tehtävien viestit + + TaskRobotMessages + Robotin tehtävien viestit - - + + RobotGui::TaskTrajectory - - Form - Lomake + + Form + Lomake - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23,300.23,400.23,234,343,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23,300.23,400.23,234,343,343) - Type - Tyyppi + + Type + Tyyppi - Name - Nimi + + Name + Nimi - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Liikerata + + Trajectory + Liikerata - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Dress Up Parameter + + Dress Up Parameter + Dress Up Parameter - - + + TaskEdge2TracParameter - - Form - Lomake + + Form + Lomake - Hide / Show - Hide / Show + + Hide / Show + Hide / Show - Edges: 0 - Edges: 0 + + Edges: 0 + Edges: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Sizing Value: + + Sizing Value: + Sizing Value: - Use orientation of edge - Use orientation of edge + + Use orientation of edge + Use orientation of edge - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - Tehtävä Robotti6 Akselit + TaskRobot6Axis + Tehtävä Robotti6 Akselit - - + + TaskRobotControl - - Form - Lomake + + Form + Lomake - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Työkalu 0 + + Tool 0 + Työkalu 0 - Tool - Työkalu + + Tool + Työkalu - Base 0 - Perusta 0 + + Base 0 + Perusta 0 - Base - Perusta + + Base + Perusta - World - Maailma + + World + Maailma + + + + 50mm / 5° + 50mm / 5 ° + + + + 20mm / 2° + 20mm / 2 ° + + + + 10mm / 1° + 10mm / 1 ° + + + + 5mm / 0.5° + 5mm / 0,5 ° + + + + 1mm / 0.1° + 1 mm / 0,1 ° - 50mm / 5° - 50mm / 5 ° + TaskRobotControl + Robotin tehtävien hallinta - - 20mm / 2° - 20mm / 2 ° - - - 10mm / 1° - 10mm / 1 ° - - - 5mm / 0.5° - 5mm / 0,5 ° - - - 1mm / 0.1° - 1 mm / 0,1 ° - - - TaskRobotControl - Robotin tehtävien hallinta - - - + + TaskRobotMessages - - Form - Lomake + + Form + Lomake - clear - tyhjennä + + clear + tyhjennä - TaskRobotMessages - Robotin tehtävien viestit + TaskRobotMessages + Robotin tehtävien viestit - - + + TaskTrajectory - Trajectory - Liikerata + Trajectory + Liikerata - - + + TaskTrajectoryDressUpParameter - - Form - Lomake + + Form + Lomake - Speed & Acceleration: - Speed & Acceleration: + + Speed & Acceleration: + Speed & Acceleration: - Speed: - Speed: + + Speed: + Speed: - Use - Use + + + Use + Use - Accel: - Accel: + + Accel: + Accel: - Don't change Cont - Don't change Cont + + Don't change Cont + Don't change Cont - Continues - Continues + + Continues + Continues - Discontinues - Discontinues + + Discontinues + Discontinues - Position and Orientation: - Position and Orientation: + + Position and Orientation: + Position and Orientation: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Don't change Position & Orientation + + Don't change Position & Orientation + Don't change Position & Orientation - Use Orientation - Use Orientation + + Use Orientation + Use Orientation - Add Position - Add Position + + Add Position + Add Position - Add Orientation - Add Orientation + + Add Orientation + Add Orientation - Dress Up Parameter - Dress Up Parameter + Dress Up Parameter + Dress Up Parameter - - + + Workbench - - Robot - Robotti + + Robot + Robotti - Insert Robots - Lisää robotit + + Insert Robots + Lisää robotit - &Robot - &Robotti + + &Robot + &Robotti - Export trajectory - Liikeradan vienti + + Export trajectory + Liikeradan vienti - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_fr.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_fr.ts index 3e72fab2f..e7bef52a0 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_fr.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_fr.ts @@ -1,878 +1,1045 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Ajouter l'outil + + Add tool + Ajouter l'outil - Add a tool shape to the robot - Ajouter une forme d'outil pour le robot + + Add a tool shape to the robot + Ajouter une forme d'outil pour le robot - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Placer un robot... + + Place robot... + Placer un robot... - Place a robot (experimental!) - Placez un robot (expérimental !) + + Place a robot (experimental!) + Placez un robot (expérimental !) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Créer une trajectoire + + Create trajectory + Créer une trajectoire - Create a new empty trajectory - Créer une nouvelle trajectoire vide + + Create a new empty trajectory + Créer une nouvelle trajectoire vide - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Arête vers trajectoire ... + + Edge to Trajectory... + Arête vers trajectoire ... - Generate a Trajectory from a set of edges - Générer une trajectoire à partir d'un ensemble d'arêtes + + Generate a Trajectory from a set of edges + Générer une trajectoire à partir d'un ensemble d'arêtes - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - sous-programme compressé Kuka... + + Kuka compact subroutine... + sous-programme compressé Kuka... - Export the trajectory as a compact KRL subroutine. - Exporter la trajectoire comme un sous-programme compressé KRL. + + Export the trajectory as a compact KRL subroutine. + Exporter la trajectoire comme un sous-programme compressé KRL. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - sous-programme complet Kuka... + + Kuka full subroutine... + sous-programme complet Kuka... - Export the trajectory as a full KRL subroutine. - Exporter la trajectoire comme un sous-programme KRL intégral. + + Export the trajectory as a full KRL subroutine. + Exporter la trajectoire comme un sous-programme KRL intégral. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Insérer un IR125 Kuka dans le document. + + Insert a Kuka IR125 into the document. + Insérer un IR125 Kuka dans le document. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Insérer un IR500 Kuka dans le document. + + Insert a Kuka IR16 into the document. + Insérer un IR500 Kuka dans le document. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Insérer un IR210 Kuka dans le document. + + Insert a Kuka IR210 into the document. + Insérer un IR210 Kuka dans le document. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Insérer un IR500 Kuka dans le document. + + Insert a Kuka IR500 into the document. + Insérer un IR500 Kuka dans le document. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Insérer dans la trajectoire + + Insert in trajectory + Insérer dans la trajectoire - Insert robot Tool location into trajectory - Insérer la position de l'outil robot dans la trajectoire + + Insert robot Tool location into trajectory + Insérer la position de l'outil robot dans la trajectoire - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Insérer dans la trajectoire + + Insert in trajectory + Insérer dans la trajectoire - Insert preselection position into trajectory (W) - Insérer la position de la présélection dans la trajectoire (W) + + Insert preselection position into trajectory (W) + Insérer la position de la présélection dans la trajectoire (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Passer à la position de départ + + + Move to home + Passer à la position de départ - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Définir l'orientation par défaut + + Set default orientation + Définir l'orientation par défaut - set the default orientation for subsequent commands for waypoint creation - Définir l'orientation par défaut pour les commandes suivantes pour la création de points de passage + + set the default orientation for subsequent commands for waypoint creation + Définir l'orientation par défaut pour les commandes suivantes pour la création de points de passage - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Définir les valeurs par défaut + + Set default values + Définir les valeurs par défaut - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Définir les valeurs par défaut pour la vitesse, l'accélération et la continuité pour les commandes de création de points de passage suivants + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Définir les valeurs par défaut pour la vitesse, l'accélération et la continuité pour les commandes de création de points de passage suivants - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Définir la position de départ + + + Set the home position + Définir la position de départ - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simuler une trajectoire + + Simulate a trajectory + Simuler une trajectoire - Run a simulation on a trajectory - Lancer une simulation sur une trajectoire + + Run a simulation on a trajectory + Lancer une simulation sur une trajectoire - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Composé de trajectoire... + + Trajectory compound... + Composé de trajectoire... - Group and connect some trajectories to one - Grouper et connecter des trajectoires en une seule + + Group and connect some trajectories to one + Grouper et connecter des trajectoires en une seule - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Habiller une trajectoire... + + Dress up trajectory... + Habiller une trajectoire... - Create a dress up object which overide som aspects of a trajectory - Créer un habillage qui supplante certains aspects d'une trajectoire + + Create a dress up object which overide som aspects of a trajectory + Créer un habillage qui supplante certains aspects d'une trajectoire - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Outils de trajectoire + + Trajectory tools + Outils de trajectoire - Robot tools - Outils de robot + + Robot tools + Outils de robot - Insert Robot - Insérer un robot + + Insert Robot + Insérer un robot - - + + QObject - - Wrong selection - Mauvaise sélection + + + + + + + + + + + + Wrong selection + Mauvaise sélection - Select one Robot and one Trajectory object. - Sélectionnez un robot et une trajectoire. + + + + + + Select one Robot and one Trajectory object. + Sélectionnez un robot et une trajectoire. - Trajectory not valid - Trajectoire non valide + + Trajectory not valid + Trajectoire non valide - You need at least two way points in a trajectory to simulate. - Vous avez besoin d'au moins deux points sur une trajectoire pour la simulation. + + You need at least two way points in a trajectory to simulate. + Vous avez besoin d'au moins deux points sur une trajectoire pour la simulation. - - KRL file(*.src) - fichier KRL (*. src) + + + KRL file(*.src) + fichier KRL (*. src) - All Files (*.*) - Tous les fichiers (*.*) + + + All Files (*.*) + Tous les fichiers (*.*) - Export program - Exporter le programme + + + Export program + Exporter le programme - - Select one robot and one shape or VRML object. - Sélectionnez un robot et une forme ou un objet VRML. + + Select one robot and one shape or VRML object. + Sélectionnez un robot et une forme ou un objet VRML. - - No preselection - Aucune présélection + + No preselection + Aucune présélection - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Avec la souris, vous devez passer au-dessus d'une géométrie (présélection) + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Avec la souris, vous devez passer au-dessus d'une géométrie (présélection) pour utiliser cette commande. Consultez la documentation pour plus de détails. - - Select one Robot to set home postion - Sélectionnez un robot pour définir la position d'origine + + Select one Robot to set home postion + Sélectionnez un robot pour définir la position d'origine - Select one Robot - Sélectionnez un robot + + Select one Robot + Sélectionnez un robot - - Select one Trajectory object. - Sélectionnez un objet de trajectoire. + + + Select one Trajectory object. + Sélectionnez un objet de trajectoire. - set default speed - définir la vitesse par défaut + + set default speed + définir la vitesse par défaut - speed: (e.g. 1 m/s or 3 cm/s) - Vitesse : (par exemple 1 m/s ou 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + Vitesse : (par exemple 1 m/s ou 3 cm/s) - set default continuity - définir la continuité par défaut + + set default continuity + définir la continuité par défaut - continuous ? - en continu ? + + continuous ? + en continu ? - set default acceleration - définir l'accélération par défaut + + set default acceleration + définir l'accélération par défaut - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - accélération : (p.ex. 1 m/s^2 or 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + accélération : (p.ex. 1 m/s^2 or 3 cm/s^2) - Select the Trajectory which you want to dress up. - Sélectionnez la trajectoire que vous voulez habiller. + + Select the Trajectory which you want to dress up. + Sélectionnez la trajectoire que vous voulez habiller. - - No robot files installed - Aucun fichier de robot installé + + No robot files installed + Aucun fichier de robot installé - Please visit %1 and copy the files to %2 - Visitez %1 et copiez les fichiers vers %2 + + Please visit %1 and copy the files to %2 + Visitez %1 et copiez les fichiers vers %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulation + + Simulation + Simulation - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Type + + Type + Type - Name - Nom + + Name + Nom - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Formulaire + + Form + Formulaire - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP : (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP : (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Outil : (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Outil : (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Formulaire + + Form + Formulaire - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos : (200.23, 300.23, 400.23, 234, 343, 343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos : (200.23, 300.23, 400.23, 234, 343, 343) - Type - Type + + Type + Type - Name - Nom + + Name + Nom - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Trajectoire + + Trajectory + Trajectoire - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Paramètre d'habillage + + Dress Up Parameter + Paramètre d'habillage - - + + TaskEdge2TracParameter - - Form - Formulaire + + Form + Formulaire - Hide / Show - Afficher / Masquer + + Hide / Show + Afficher / Masquer - Edges: 0 - Arêtes : 0 + + Edges: 0 + Arêtes : 0 - Cluster: 0 - Groupe : 0 + + Cluster: 0 + Groupe : 0 - Sizing Value: - Valeur de dimensionnement : + + Sizing Value: + Valeur de dimensionnement : - Use orientation of edge - Utiliser l'orientation de l'arête + + Use orientation of edge + Utiliser l'orientation de l'arête - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Formulaire + + Form + Formulaire - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Outil 0 + + Tool 0 + Outil 0 - Tool - Outil + + Tool + Outil - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - Monde + + World + Monde + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0,5° + + + + 1mm / 0.1° + 1mm / 0,1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0,5° - - - 1mm / 0.1° - 1mm / 0,1° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Formulaire + + Form + Formulaire - clear - Effacer + + clear + Effacer - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Trajectoire + Trajectory + Trajectoire - - + + TaskTrajectoryDressUpParameter - - Form - Formulaire + + Form + Formulaire - Speed & Acceleration: - Vitesse et accélération : + + Speed & Acceleration: + Vitesse et accélération : - Speed: - Vitesse : + + Speed: + Vitesse : - Use - Utilisation + + + Use + Utilisation - Accel: - Accél : + + Accel: + Accél : - Don't change Cont - Ne pas changer Cont + + Don't change Cont + Ne pas changer Cont - Continues - Continu + + Continues + Continu - Discontinues - Interrompt + + Discontinues + Interrompt - Position and Orientation: - Position et orientation : + + Position and Orientation: + Position et orientation : - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Ne pas changer la position ni l'orientation + + Don't change Position & Orientation + Ne pas changer la position ni l'orientation - Use Orientation - Utiliser l'orientation + + Use Orientation + Utiliser l'orientation - Add Position - Ajouter la position + + Add Position + Ajouter la position - Add Orientation - Ajouter l'orientation + + Add Orientation + Ajouter l'orientation - Dress Up Parameter - Paramètre d'habillage + Dress Up Parameter + Paramètre d'habillage - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Insérer des robots + + Insert Robots + Insérer des robots - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Exporter la trajectoire + + Export trajectory + Exporter la trajectoire - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_hr.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_hr.ts index 4722cd343..f3cd35fa8 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_hr.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_hr.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Dodaj alat + + Add tool + Dodaj alat - Add a tool shape to the robot - Dodavanje alata za oblik za robota + + Add a tool shape to the robot + Dodavanje alata za oblik za robota - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Mjesto robota ... + + Place robot... + Mjesto robota ... - Place a robot (experimental!) - Postavite robota (experimental!) + + Place a robot (experimental!) + Postavite robota (experimental!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Napravi putanju + + Create trajectory + Napravi putanju - Create a new empty trajectory - Napravi novu prazanu putanju + + Create a new empty trajectory + Napravi novu prazanu putanju - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - rub na putanji ... + + Edge to Trajectory... + rub na putanji ... - Generate a Trajectory from a set of edges - Generirajte putanju za set rubova + + Generate a Trajectory from a set of edges + Generirajte putanju za set rubova - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Kuka kompaktni potprogram ... + + Kuka compact subroutine... + Kuka kompaktni potprogram ... - Export the trajectory as a compact KRL subroutine. - Izvoz putanje kao kompaktni KRL potprogram. + + Export the trajectory as a compact KRL subroutine. + Izvoz putanje kao kompaktni KRL potprogram. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Kuka puni potprogram ... + + Kuka full subroutine... + Kuka puni potprogram ... - Export the trajectory as a full KRL subroutine. - Izvoz putanje kao pun KRL potprogram. + + Export the trajectory as a full KRL subroutine. + Izvoz putanje kao pun KRL potprogram. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Umetnite Kuka IR500 u dokument. + + Insert a Kuka IR125 into the document. + Umetnite Kuka IR500 u dokument. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Umetnite Kuka IR500 u dokument. + + Insert a Kuka IR16 into the document. + Umetnite Kuka IR500 u dokument. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Umetnite Kuka IR500 u dokument. + + Insert a Kuka IR210 into the document. + Umetnite Kuka IR500 u dokument. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Umetnite Kuka IR500 u dokument. + + Insert a Kuka IR500 into the document. + Umetnite Kuka IR500 u dokument. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Umetni u putanju + + Insert in trajectory + Umetni u putanju - Insert robot Tool location into trajectory - Umetnite alata robota, mjesto u putanji + + Insert robot Tool location into trajectory + Umetnite alata robota, mjesto u putanji - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Umetni u putanju + + Insert in trajectory + Umetni u putanju - Insert preselection position into trajectory (W) - Umetnite "preselekcija položaj" u putanju (W) + + Insert preselection position into trajectory (W) + Umetnite "preselekcija položaj" u putanju (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Premjesti u kući + + + Move to home + Premjesti u kući - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Postavi zadanu orijentaciju + + Set default orientation + Postavi zadanu orijentaciju - set the default orientation for subsequent commands for waypoint creation - postavi zadanu orijentaciju za naknadne naredbe za stvaranje točke putanje + + set the default orientation for subsequent commands for waypoint creation + postavi zadanu orijentaciju za naknadne naredbe za stvaranje točke putanje - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Postavi zadane vrijednosti + + Set default values + Postavi zadane vrijednosti - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Postavi zadane vrijednosti za brzinu, ubrzanje i kontinuitet za naknadne naredbe stvaranja točki puta + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Postavi zadane vrijednosti za brzinu, ubrzanje i kontinuitet za naknadne naredbe stvaranja točki puta - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Postavite početni položaj + + + Set the home position + Postavite početni položaj - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simulirati putanju + + Simulate a trajectory + Simulirati putanju - Run a simulation on a trajectory - Pokrenite simulaciju na putanji + + Run a simulation on a trajectory + Pokrenite simulaciju na putanji - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Spoj Putanje ... + + Trajectory compound... + Spoj Putanje ... - Group and connect some trajectories to one - Grupiraj i poveži neke putanje kao jednu + + Group and connect some trajectories to one + Grupiraj i poveži neke putanje kao jednu - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - ravnati putanju ... + + Dress up trajectory... + ravnati putanju ... - Create a dress up object which overide som aspects of a trajectory - Stvoriti ravni objekt koji poništi neko stajalište putanje + + Create a dress up object which overide som aspects of a trajectory + Stvoriti ravni objekt koji poništi neko stajalište putanje - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Alati putanje + + Trajectory tools + Alati putanje - Robot tools - Alati Robota + + Robot tools + Alati Robota - Insert Robot - Umetni Robot + + Insert Robot + Umetni Robot - - + + QObject - - Wrong selection - Pogrešan odabir + + + + + + + + + + + + Wrong selection + Pogrešan odabir - Select one Robot and one Trajectory object. - Odaberite jedan robot i jedanu putanju objekta. + + + + + + Select one Robot and one Trajectory object. + Odaberite jedan robot i jedanu putanju objekta. - Trajectory not valid - Putanja ne vrijedi + + Trajectory not valid + Putanja ne vrijedi - You need at least two way points in a trajectory to simulate. - Trebate najmanje dvije točke u putanji za simuliranje. + + You need at least two way points in a trajectory to simulate. + Trebate najmanje dvije točke u putanji za simuliranje. - - KRL file(*.src) - KRL datoteka (*. src) + + + KRL file(*.src) + KRL datoteka (*. src) - All Files (*.*) - Sve datoteke (*.*) + + + All Files (*.*) + Sve datoteke (*.*) - Export program - Prijenos programa + + + Export program + Prijenos programa - - Select one robot and one shape or VRML object. - Odaberite jedan robot i jedan oblik ili objekt VRML. + + Select one robot and one shape or VRML object. + Odaberite jedan robot i jedan oblik ili objekt VRML. - - No preselection - Nema predselekcije + + No preselection + Nema predselekcije - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Morate lebjeti iznad geometrije (predselekcije) s mišem kako bi koristili ovu naredbu. Pogledajte dokumentaciju za detalje. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Morate lebjeti iznad geometrije (predselekcije) s mišem kako bi koristili ovu naredbu. Pogledajte dokumentaciju za detalje. - - Select one Robot to set home postion - Odaberite jedan Robot za postavljanje početnog položaja + + Select one Robot to set home postion + Odaberite jedan Robot za postavljanje početnog položaja - Select one Robot - Odaberite jedan Robot + + Select one Robot + Odaberite jedan Robot - - Select one Trajectory object. - Odaberite jednu putanju objekta. + + + Select one Trajectory object. + Odaberite jednu putanju objekta. - set default speed - postavi zadanu brzinu + + set default speed + postavi zadanu brzinu - speed: (e.g. 1 m/s or 3 cm/s) - brzina: (npr. 1 m/s ili 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + brzina: (npr. 1 m/s ili 3 cm/s) - set default continuity - postavi zadani kontinuitet + + set default continuity + postavi zadani kontinuitet - continuous ? - kontinuirano? + + continuous ? + kontinuirano? - set default acceleration - postavi zadano ubrzanje + + set default acceleration + postavi zadano ubrzanje - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - ubrzanje: (npr. 1 m/s^2 ili 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + ubrzanje: (npr. 1 m/s^2 ili 3 cm/s^2) - Select the Trajectory which you want to dress up. - Odaberite putanju koju želite doraditi. + + Select the Trajectory which you want to dress up. + Odaberite putanju koju želite doraditi. - - No robot files installed - Nema instaliranih robot datoteka + + No robot files installed + Nema instaliranih robot datoteka - Please visit %1 and copy the files to %2 - Molimo posjetite %1 i kopirajte datoteke u %2 + + Please visit %1 and copy the files to %2 + Molimo posjetite %1 i kopirajte datoteke u %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simuliranje + + Simulation + Simuliranje - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Vrsta + + Type + Vrsta - Name - Ime + + Name + Ime - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Obrazac + + Form + Obrazac - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Alat:(0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Alat:(0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Obrazac + + Form + Obrazac - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Poz: (200,23, 300,23, 400,23, 234, 343, 343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Poz: (200,23, 300,23, 400,23, 234, 343, 343) - Type - Vrsta + + Type + Vrsta - Name - Ime + + Name + Ime - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Putanja + + Trajectory + Putanja - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Ravni parametar + + Dress Up Parameter + Ravni parametar - - + + TaskEdge2TracParameter - - Form - Obrazac + + Form + Obrazac - Hide / Show - Sakrij / prikaži + + Hide / Show + Sakrij / prikaži - Edges: 0 - Rubovi: 0 + + Edges: 0 + Rubovi: 0 - Cluster: 0 - Grozd: 0 + + Cluster: 0 + Grozd: 0 - Sizing Value: - Dimenzioniranje vrijednosti: + + Sizing Value: + Dimenzioniranje vrijednosti: - Use orientation of edge - Koristi orijentaciju ruba + + Use orientation of edge + Koristi orijentaciju ruba - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Obrazac + + Form + Obrazac - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Alat 0 + + Tool 0 + Alat 0 - Tool - Alat + + Tool + Alat - Base 0 - Baza 0 + + Base 0 + Baza 0 - Base - Baza + + Base + Baza - World - Svijet + + World + Svijet + + + + 50mm / 5° + 50mm/5° + + + + 20mm / 2° + 20mm/2° + + + + 10mm / 1° + 10mm/1° + + + + 5mm / 0.5° + 5mm/0,5° + + + + 1mm / 0.1° + 1mm/0,1° - 50mm / 5° - 50mm/5° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm/2° - - - 10mm / 1° - 10mm/1° - - - 5mm / 0.5° - 5mm/0,5° - - - 1mm / 0.1° - 1mm/0,1° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Obrazac + + Form + Obrazac - clear - jasno + + clear + jasno - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Putanja + Trajectory + Putanja - - + + TaskTrajectoryDressUpParameter - - Form - Obrazac + + Form + Obrazac - Speed & Acceleration: - Brzina i ubrzanje: + + Speed & Acceleration: + Brzina i ubrzanje: - Speed: - Brzina: + + Speed: + Brzina: - Use - Koristite + + + Use + Koristite - Accel: - Accel: + + Accel: + Accel: - Don't change Cont - Nemojte mijenjati Cont + + Don't change Cont + Nemojte mijenjati Cont - Continues - Nastavlja + + Continues + Nastavlja - Discontinues - Prestaje + + Discontinues + Prestaje - Position and Orientation: - Položaj i orijentacija: + + Position and Orientation: + Položaj i orijentacija: - (0,0,0),(0,0,0) - (0,0,0), (0,0,0) + + (0,0,0),(0,0,0) + (0,0,0), (0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Ne mijenjaj položaj i orijentaciju + + Don't change Position & Orientation + Ne mijenjaj položaj i orijentaciju - Use Orientation - Koristi orijentaciju + + Use Orientation + Koristi orijentaciju - Add Position - Dodaj položaj + + Add Position + Dodaj položaj - Add Orientation - Dodaj orijentaciju + + Add Orientation + Dodaj orijentaciju - Dress Up Parameter - Ravni parametar + Dress Up Parameter + Ravni parametar - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Umetanje Robota + + Insert Robots + Umetanje Robota - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Izvoz putanje + + Export trajectory + Izvoz putanje - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_hu.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_hu.ts index 53b45c12b..681a29d9f 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_hu.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_hu.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Szerszám hozzáadása + + Add tool + Szerszám hozzáadása - Add a tool shape to the robot - Formázó szerszám hozzáadása a robothoz + + Add a tool shape to the robot + Formázó szerszám hozzáadása a robothoz - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Robot elhelyezése... + + Place robot... + Robot elhelyezése... - Place a robot (experimental!) - Robot helye (kísérleti!) + + Place a robot (experimental!) + Robot helye (kísérleti!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Útvonal létrehozása + + Create trajectory + Útvonal létrehozása - Create a new empty trajectory - Új üres útvonal létrehozása + + Create a new empty trajectory + Új üres útvonal létrehozása - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Él az útvonalhoz... + + Edge to Trajectory... + Él az útvonalhoz... - Generate a Trajectory from a set of edges - Útvonal létrehozása élek alapján + + Generate a Trajectory from a set of edges + Útvonal létrehozása élek alapján - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Kuka kompakt eljárás ... + + Kuka compact subroutine... + Kuka kompakt eljárás ... - Export the trajectory as a compact KRL subroutine. - Útvonal exportálása kompakt KRL eljárásként. + + Export the trajectory as a compact KRL subroutine. + Útvonal exportálása kompakt KRL eljárásként. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Kuka teljes eljárás ... + + Kuka full subroutine... + Kuka teljes eljárás ... - Export the trajectory as a full KRL subroutine. - Útvonal exportálása teljes KRL eljárásként. + + Export the trajectory as a full KRL subroutine. + Útvonal exportálása teljes KRL eljárásként. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Helyezzen be egy Kuka IR210-et a dokumentumba. + + Insert a Kuka IR125 into the document. + Helyezzen be egy Kuka IR210-et a dokumentumba. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Helyezzen be egy Kuka IR210-et a dokumentumba. + + Insert a Kuka IR16 into the document. + Helyezzen be egy Kuka IR210-et a dokumentumba. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Helyezzen be egy Kuka IR16-ot a dokumentumba. + + Insert a Kuka IR210 into the document. + Helyezzen be egy Kuka IR16-ot a dokumentumba. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Helyezzen be egy Kuka IR125-öt a dokumentumba. + + Insert a Kuka IR500 into the document. + Helyezzen be egy Kuka IR125-öt a dokumentumba. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Útvonal beszúrása + + Insert in trajectory + Útvonal beszúrása - Insert robot Tool location into trajectory - Robot szerszám elhelyezése az útvonalon + + Insert robot Tool location into trajectory + Robot szerszám elhelyezése az útvonalon - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Útvonal beszúrása + + Insert in trajectory + Útvonal beszúrása - Insert preselection position into trajectory (W) - Beállítási pozíció beszúrása az útvonalba (W) + + Insert preselection position into trajectory (W) + Beállítási pozíció beszúrása az útvonalba (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Alaphelyzetbe állít + + + Move to home + Alaphelyzetbe állít - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Alapértelmezett hely beállítása + + Set default orientation + Alapértelmezett hely beállítása - set the default orientation for subsequent commands for waypoint creation - Alapértelmezett hely beállítása a későbbi szakaszpont parancsokhoz a várópontok létrehozásoknál + + set the default orientation for subsequent commands for waypoint creation + Alapértelmezett hely beállítása a későbbi szakaszpont parancsokhoz a várópontok létrehozásoknál - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Alapértelmezett értékek + + Set default values + Alapértelmezett értékek - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Alapértelmezett sebesség, gyorsulás és folytonossági szakaszpont értékeinek beállítása + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Alapértelmezett sebesség, gyorsulás és folytonossági szakaszpont értékeinek beállítása - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Alaphelyzet beállítása + + + Set the home position + Alaphelyzet beállítása - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Útvonal szimuláció + + Simulate a trajectory + Útvonal szimuláció - Run a simulation on a trajectory - Szimuláció futtaása az útvonalon + + Run a simulation on a trajectory + Szimuláció futtaása az útvonalon - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Pálya összetétel... + + Trajectory compound... + Pálya összetétel... - Group and connect some trajectories to one - Csoportosít és közössé tesz bizonyos pályákat + + Group and connect some trajectories to one + Csoportosít és közössé tesz bizonyos pályákat - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Útvonal felruházása... + + Dress up trajectory... + Útvonal felruházása... - Create a dress up object which overide som aspects of a trajectory - Hozzon létre egy felöltöztetett objektumot mely felülírja a pálya szempontjait + + Create a dress up object which overide som aspects of a trajectory + Hozzon létre egy felöltöztetett objektumot mely felülírja a pálya szempontjait - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajektória eszközök + + Trajectory tools + Trajektória eszközök - Robot tools - Robot eszközök + + Robot tools + Robot eszközök - Insert Robot - Robotok beszúrása + + Insert Robot + Robotok beszúrása - - + + QObject - - Wrong selection - Rossz kiválasztás + + + + + + + + + + + + Wrong selection + Rossz kiválasztás - Select one Robot and one Trajectory object. - Egy Robot és egy útvonal objektum kijelölése. + + + + + + Select one Robot and one Trajectory object. + Egy Robot és egy útvonal objektum kijelölése. - Trajectory not valid - Érvénytelen útvonal + + Trajectory not valid + Érvénytelen útvonal - You need at least two way points in a trajectory to simulate. - A szimulációhoz legalább két útvonalpontra van szükség a pályán. + + You need at least two way points in a trajectory to simulate. + A szimulációhoz legalább két útvonalpontra van szükség a pályán. - - KRL file(*.src) - KRL fájl (*.src) + + + KRL file(*.src) + KRL fájl (*.src) - All Files (*.*) - Minden fájl (*.*) + + + All Files (*.*) + Minden fájl (*.*) - Export program - Program exportálása + + + Export program + Program exportálása - - Select one robot and one shape or VRML object. - Egy robot és egy alakzat vagy VRML objektum kijelölése. + + Select one robot and one shape or VRML object. + Egy robot és egy alakzat vagy VRML objektum kijelölése. - - No preselection - Nincs előzetes kijelölés + + No preselection + Nincs előzetes kijelölés - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - A geometria (előválasztás) fölé kell vinni az egérrel a kurzort, hogy használni tudja ezt a parancsot. Részleteket a dokumentációban talál. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + A geometria (előválasztás) fölé kell vinni az egérrel a kurzort, hogy használni tudja ezt a parancsot. Részleteket a dokumentációban talál. - - Select one Robot to set home postion - Robot kiválasztása és alaphelyzetbe állítása + + Select one Robot to set home postion + Robot kiválasztása és alaphelyzetbe állítása - Select one Robot - Válasszon ki egy robotot + + Select one Robot + Válasszon ki egy robotot - - Select one Trajectory object. - Válasszon ki egy pálya objektumot. + + + Select one Trajectory object. + Válasszon ki egy pálya objektumot. - set default speed - alapértelmezett sebesség beállítása + + set default speed + alapértelmezett sebesség beállítása - speed: (e.g. 1 m/s or 3 cm/s) - sebesség: (pl. 1 m/s vagy 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + sebesség: (pl. 1 m/s vagy 3 cm/s) - set default continuity - alapértelmezett folytonosság + + set default continuity + alapértelmezett folytonosság - continuous ? - folyamatos? + + continuous ? + folyamatos? - set default acceleration - alapértelmezett gyorsulás beállítás + + set default acceleration + alapértelmezett gyorsulás beállítás - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - gyorsulás: (pl. 1 m/s^2 vagy 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + gyorsulás: (pl. 1 m/s^2 vagy 3 cm/s^2) - Select the Trajectory which you want to dress up. - Válassza ki a Trayectory-t a felöltöztetéshez. + + Select the Trajectory which you want to dress up. + Válassza ki a Trayectory-t a felöltöztetéshez. - - No robot files installed - Nincs telepített robot-fájl + + No robot files installed + Nincs telepített robot-fájl - Please visit %1 and copy the files to %2 - Kérjük, látogasson el ide: %1 és másolja a fájlokat a következő helyre: %2 + + Please visit %1 and copy the files to %2 + Kérjük, látogasson el ide: %1 és másolja a fájlokat a következő helyre: %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Szimuláció + + Simulation + Szimuláció - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Típus + + Type + Típus - Name - Név + + Name + Név - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Űrlap + + Form + Űrlap - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4-es + + A4 + A4-es - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Eszköz:(0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Eszköz:(0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Űrlap + + Form + Űrlap - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Típus + + Type + Típus - Name - Név + + Name + Név - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Pálya + + Trajectory + Pálya - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Felruházási paraméter + + Dress Up Parameter + Felruházási paraméter - - + + TaskEdge2TracParameter - - Form - Űrlap + + Form + Űrlap - Hide / Show - Elrejt/megjelenít + + Hide / Show + Elrejt/megjelenít - Edges: 0 - Élek: 0 + + Edges: 0 + Élek: 0 - Cluster: 0 - Fürt: 0 + + Cluster: 0 + Fürt: 0 - Sizing Value: - Méret érték: + + Sizing Value: + Méret érték: - Use orientation of edge - Használja az él orientációját + + Use orientation of edge + Használja az él orientációját - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Űrlap + + Form + Űrlap - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Eszköz 0 + + Tool 0 + Eszköz 0 - Tool - Eszköz + + Tool + Eszköz - Base 0 - Alap 0 + + Base 0 + Alap 0 - Base - Alap + + Base + Alap - World - Világ + + World + Világ + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Űrlap + + Form + Űrlap - clear - ürít + + clear + ürít - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Pálya + Trajectory + Pálya - - + + TaskTrajectoryDressUpParameter - - Form - Űrlap + + Form + Űrlap - Speed & Acceleration: - Sebesség és gyorsulás: + + Speed & Acceleration: + Sebesség és gyorsulás: - Speed: - Sebesség: + + Speed: + Sebesség: - Use - Használ + + + Use + Használ - Accel: - Gyorsítás: + + Accel: + Gyorsítás: - Don't change Cont - Ne módosítsa a tartalmát + + Don't change Cont + Ne módosítsa a tartalmát - Continues - Tovább + + Continues + Tovább - Discontinues - Befejez + + Discontinues + Befejez - Position and Orientation: - Helyzete és iránya: + + Position and Orientation: + Helyzete és iránya: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Ne módosítsa a pozíciót és a tájolást + + Don't change Position & Orientation + Ne módosítsa a pozíciót és a tájolást - Use Orientation - Orientáció használata + + Use Orientation + Orientáció használata - Add Position - Pozíció hozzáadása + + Add Position + Pozíció hozzáadása - Add Orientation - Orientáció hozzáadása + + Add Orientation + Orientáció hozzáadása - Dress Up Parameter - Felruházási paraméter + Dress Up Parameter + Felruházási paraméter - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Robotok beszúrása + + Insert Robots + Robotok beszúrása - &Robot - Robot + + &Robot + Robot - Export trajectory - Pálya exportálása + + Export trajectory + Pálya exportálása - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_it.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_it.ts index 3f84f3548..ff097abf3 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_it.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_it.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Aggiungi strumento + + Add tool + Aggiungi strumento - Add a tool shape to the robot - Aggiunge uno strumento forma al robot + + Add a tool shape to the robot + Aggiunge uno strumento forma al robot - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Posiziona robot... + + Place robot... + Posiziona robot... - Place a robot (experimental!) - Posiziona un robot (sperimentale!) + + Place a robot (experimental!) + Posiziona un robot (sperimentale!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Crea traiettoria + + Create trajectory + Crea traiettoria - Create a new empty trajectory - Crea una nuova traiettoria vuota + + Create a new empty trajectory + Crea una nuova traiettoria vuota - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Da spigolo a traiettoria... + + Edge to Trajectory... + Da spigolo a traiettoria... - Generate a Trajectory from a set of edges - Genera una traiettoria da un insieme di spigoli + + Generate a Trajectory from a set of edges + Genera una traiettoria da un insieme di spigoli - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Subroutine Kuka compatta... + + Kuka compact subroutine... + Subroutine Kuka compatta... - Export the trajectory as a compact KRL subroutine. - Esporta la traiettoria come una subroutine KRL compatta. + + Export the trajectory as a compact KRL subroutine. + Esporta la traiettoria come una subroutine KRL compatta. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Subroutine Kuka completa... + + Kuka full subroutine... + Subroutine Kuka completa... - Export the trajectory as a full KRL subroutine. - Esporta la traiettoria come una subroutine KRL completa. + + Export the trajectory as a full KRL subroutine. + Esporta la traiettoria come una subroutine KRL completa. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Inserisce un Kuka IR125 nel documento. + + Insert a Kuka IR125 into the document. + Inserisce un Kuka IR125 nel documento. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Inserisce un Kuka IR16 nel documento. + + Insert a Kuka IR16 into the document. + Inserisce un Kuka IR16 nel documento. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Inserisce un Kuka IR210 nel documento. + + Insert a Kuka IR210 into the document. + Inserisce un Kuka IR210 nel documento. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Inserisce un Kuka IR500 nel documento. + + Insert a Kuka IR500 into the document. + Inserisce un Kuka IR500 nel documento. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Inserisci in traiettoria + + Insert in trajectory + Inserisci in traiettoria - Insert robot Tool location into trajectory - Inserire il percorso dell'utensile del robot in traiettoria + + Insert robot Tool location into trajectory + Inserire il percorso dell'utensile del robot in traiettoria - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Inserisci in traiettoria + + Insert in trajectory + Inserisci in traiettoria - Insert preselection position into trajectory (W) - Inserisci la posizione di preselezione in traiettoria (W) + + Insert preselection position into trajectory (W) + Inserisci la posizione di preselezione in traiettoria (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Sposta alla posizione di partenza + + + Move to home + Sposta alla posizione di partenza - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Imposta l'orientamento predefinito + + Set default orientation + Imposta l'orientamento predefinito - set the default orientation for subsequent commands for waypoint creation - Imposta l'orientamento predefinito per i comandi successivi della creazione di waypoint + + set the default orientation for subsequent commands for waypoint creation + Imposta l'orientamento predefinito per i comandi successivi della creazione di waypoint - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Imposta i valori predefiniti + + Set default values + Imposta i valori predefiniti - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Imposta i valori predefiniti per velocità, accelerazione e continuità per comandi successivi della creazione di waypoint + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Imposta i valori predefiniti per velocità, accelerazione e continuità per comandi successivi della creazione di waypoint - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Imposta la posizione di partenza + + + Set the home position + Imposta la posizione di partenza - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simula una traiettoria + + Simulate a trajectory + Simula una traiettoria - Run a simulation on a trajectory - Esegue una simulazione su una traiettoria + + Run a simulation on a trajectory + Esegue una simulazione su una traiettoria - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Traiettoria composta... + + Trajectory compound... + Traiettoria composta... - Group and connect some trajectories to one - Raggruppa e collega alcune traiettorie in una + + Group and connect some trajectories to one + Raggruppa e collega alcune traiettorie in una - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Dress up traiettoria ... + + Dress up trajectory... + Dress up traiettoria ... - Create a dress up object which overide som aspects of a trajectory - Crea un oggetto dress up che non tiene conti di alcuni aspetti di una traiettoria + + Create a dress up object which overide som aspects of a trajectory + Crea un oggetto dress up che non tiene conti di alcuni aspetti di una traiettoria - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Strumenti Traiettoria + + Trajectory tools + Strumenti Traiettoria - Robot tools - Strumenti Robot + + Robot tools + Strumenti Robot - Insert Robot - Inserisci Robot + + Insert Robot + Inserisci Robot - - + + QObject - - Wrong selection - Selezione errata + + + + + + + + + + + + Wrong selection + Selezione errata - Select one Robot and one Trajectory object. - Seleziona un Robot e un oggetto Traiettoria. + + + + + + Select one Robot and one Trajectory object. + Seleziona un Robot e un oggetto Traiettoria. - Trajectory not valid - Traiettoria non valida + + Trajectory not valid + Traiettoria non valida - You need at least two way points in a trajectory to simulate. - Sono necessari almeno due punti in una traiettoria per eseguire la simulazione. + + You need at least two way points in a trajectory to simulate. + Sono necessari almeno due punti in una traiettoria per eseguire la simulazione. - - KRL file(*.src) - File KRL(*.src) + + + KRL file(*.src) + File KRL(*.src) - All Files (*.*) - Tutti i File (*.*) + + + All Files (*.*) + Tutti i File (*.*) - Export program - Esporta programma + + + Export program + Esporta programma - - Select one robot and one shape or VRML object. - Seleziona un robot e una forma o un oggetto VRML. + + Select one robot and one shape or VRML object. + Seleziona un robot e una forma o un oggetto VRML. - - No preselection - Nessuna preselezione + + No preselection + Nessuna preselezione - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - È necessario passare col mouse sopra una geometria (preselezione) per utilizzare questo comando. Vedere la documentazione per i dettagli. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + È necessario passare col mouse sopra una geometria (preselezione) per utilizzare questo comando. Vedere la documentazione per i dettagli. - - Select one Robot to set home postion - Seleziona un robot per impostare la posizione di partenza + + Select one Robot to set home postion + Seleziona un robot per impostare la posizione di partenza - Select one Robot - Seleziona un Robot + + Select one Robot + Seleziona un Robot - - Select one Trajectory object. - Seleziona un oggetto traiettoria. + + + Select one Trajectory object. + Seleziona un oggetto traiettoria. - set default speed - Imposta la velocità predefinita + + set default speed + Imposta la velocità predefinita - speed: (e.g. 1 m/s or 3 cm/s) - velocità: (ad esempio 1 m/s o 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + velocità: (ad esempio 1 m/s o 3 cm/s) - set default continuity - Imposta la continuità predefinita + + set default continuity + Imposta la continuità predefinita - continuous ? - Continuo ? + + continuous ? + Continuo ? - set default acceleration - Imposta l'accelerazione predefinita + + set default acceleration + Imposta l'accelerazione predefinita - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - accelerazione: (ad es. 1 m/s^2 o 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + accelerazione: (ad es. 1 m/s^2 o 3 cm/s^2) - Select the Trajectory which you want to dress up. - Seleziona la traiettoria che si vuole vestire. + + Select the Trajectory which you want to dress up. + Seleziona la traiettoria che si vuole vestire. - - No robot files installed - Nessun file robot installato + + No robot files installed + Nessun file robot installato - Please visit %1 and copy the files to %2 - Si prega di visitare %1 e copiare i file in %2 + + Please visit %1 and copy the files to %2 + Si prega di visitare %1 e copiare i file in %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulazione + + Simulation + Simulazione - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Tipo + + Type + Tipo - Name - Nome + + Name + Nome - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Form + + Form + Form - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Strumento: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Strumento: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Form + + Form + Form - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Tipo + + Type + Tipo - Name - Nome + + Name + Nome - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Traiettoria + + Trajectory + Traiettoria - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Parametri Dress Up + + Dress Up Parameter + Parametri Dress Up - - + + TaskEdge2TracParameter - - Form - Form + + Form + Form - Hide / Show - Mostra/Nascondi + + Hide / Show + Mostra/Nascondi - Edges: 0 - Bordi: 0 + + Edges: 0 + Bordi: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Valore di ridimensionamento: + + Sizing Value: + Valore di ridimensionamento: - Use orientation of edge - Usa l'orientamento del bordo + + Use orientation of edge + Usa l'orientamento del bordo - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Form + + Form + Form - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Utensile 0 + + Tool 0 + Utensile 0 - Tool - Utensile + + Tool + Utensile - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - Globale + + World + Globale + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Form + + Form + Form - clear - cancella + + clear + cancella - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Traiettoria + Trajectory + Traiettoria - - + + TaskTrajectoryDressUpParameter - - Form - Form + + Form + Form - Speed & Acceleration: - Velocità e accelerazione: + + Speed & Acceleration: + Velocità e accelerazione: - Speed: - Velocità: + + Speed: + Velocità: - Use - Uso + + + Use + Uso - Accel: - Accelerazione: + + Accel: + Accelerazione: - Don't change Cont - Non cambiare Cont + + Don't change Cont + Non cambiare Cont - Continues - Continua + + Continues + Continua - Discontinues - Discontinua + + Discontinues + Discontinua - Position and Orientation: - Posizione e orientamento: + + Position and Orientation: + Posizione e orientamento: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Non modificare la posizione e l'orientamento + + Don't change Position & Orientation + Non modificare la posizione e l'orientamento - Use Orientation - Usa l'orientamento + + Use Orientation + Usa l'orientamento - Add Position - Aggiungi posizione + + Add Position + Aggiungi posizione - Add Orientation - Aggiungi Orientamento + + Add Orientation + Aggiungi Orientamento - Dress Up Parameter - Parametri Dress Up + Dress Up Parameter + Parametri Dress Up - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Inserisci Robot + + Insert Robots + Inserisci Robot - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Esporta traiettoria + + Export trajectory + Esporta traiettoria - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_ja.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_ja.ts index 46491ff51..0ab8641ff 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_ja.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_ja.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - ロボット + + Robot + ロボット - Add tool - Add tool + + Add tool + Add tool - Add a tool shape to the robot - Add a tool shape to the robot + + Add a tool shape to the robot + Add a tool shape to the robot - - + + CmdRobotConstraintAxle - - Robot - ロボット + + Robot + ロボット - Place robot... - ロボットを配置... + + Place robot... + ロボットを配置... - Place a robot (experimental!) - Place a robot (experimental!) + + Place a robot (experimental!) + Place a robot (experimental!) - - + + CmdRobotCreateTrajectory - - Robot - ロボット + + Robot + ロボット - Create trajectory - 軌跡を作成 + + Create trajectory + 軌跡を作成 - Create a new empty trajectory - 新しい空の軌跡を作成 + + Create a new empty trajectory + 新しい空の軌跡を作成 - - + + CmdRobotEdge2Trac - Robot - ロボット + + Robot + ロボット - Edge to Trajectory... - Edge to Trajectory... + + Edge to Trajectory... + Edge to Trajectory... - Generate a Trajectory from a set of edges - Generate a Trajectory from a set of edges + + Generate a Trajectory from a set of edges + Generate a Trajectory from a set of edges - - + + CmdRobotExportKukaCompact - - Robot - ロボット + + Robot + ロボット - Kuka compact subroutine... - Kuka compact subroutine... + + Kuka compact subroutine... + Kuka compact subroutine... - Export the trajectory as a compact KRL subroutine. - Export the trajectory as a compact KRL subroutine. + + Export the trajectory as a compact KRL subroutine. + Export the trajectory as a compact KRL subroutine. - - + + CmdRobotExportKukaFull - Robot - ロボット + + Robot + ロボット - Kuka full subroutine... - Kuka full subroutine... + + Kuka full subroutine... + Kuka full subroutine... - Export the trajectory as a full KRL subroutine. - Export the trajectory as a full KRL subroutine. + + Export the trajectory as a full KRL subroutine. + Export the trajectory as a full KRL subroutine. - - + + CmdRobotInsertKukaIR125 - - Robot - ロボット + + Robot + ロボット - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Kuka IR125 を挿入. + + Insert a Kuka IR125 into the document. + Kuka IR125 を挿入. - - + + CmdRobotInsertKukaIR16 - Robot - ロボット + + Robot + ロボット - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Kuka IR16 を挿入 + + Insert a Kuka IR16 into the document. + Kuka IR16 を挿入 - - + + CmdRobotInsertKukaIR210 - Robot - ロボット + + Robot + ロボット - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Kuka IR210 を挿入. + + Insert a Kuka IR210 into the document. + Kuka IR210 を挿入. - - + + CmdRobotInsertKukaIR500 - Robot - ロボット + + Robot + ロボット - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Kuka IR500 を挿入. + + Insert a Kuka IR500 into the document. + Kuka IR500 を挿入. - - + + CmdRobotInsertWaypoint - - Robot - ロボット + + Robot + ロボット - Insert in trajectory - Insert in trajectory + + Insert in trajectory + Insert in trajectory - Insert robot Tool location into trajectory - Insert robot Tool location into trajectory + + Insert robot Tool location into trajectory + Insert robot Tool location into trajectory - - + + CmdRobotInsertWaypointPreselect - Robot - ロボット + + Robot + ロボット - Insert in trajectory - Insert in trajectory + + Insert in trajectory + Insert in trajectory - Insert preselection position into trajectory (W) - Insert preselection position into trajectory (W) + + Insert preselection position into trajectory (W) + Insert preselection position into trajectory (W) - - + + CmdRobotRestoreHomePos - - Robot - ロボット + + Robot + ロボット - Move to home - ホームへ移動 + + + Move to home + ホームへ移動 - - + + CmdRobotSetDefaultOrientation - - Robot - ロボット + + Robot + ロボット - Set default orientation - デフォルトの向きを設定 + + Set default orientation + デフォルトの向きを設定 - set the default orientation for subsequent commands for waypoint creation - set the default orientation for subsequent commands for waypoint creation + + set the default orientation for subsequent commands for waypoint creation + set the default orientation for subsequent commands for waypoint creation - - + + CmdRobotSetDefaultValues - Robot - ロボット + + Robot + ロボット - Set default values - Set default values + + Set default values + Set default values - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - - + + CmdRobotSetHomePos - - Robot - ロボット + + Robot + ロボット - Set the home position - ホームポジションを設定 + + + Set the home position + ホームポジションを設定 - - + + CmdRobotSimulate - Robot - ロボット + + Robot + ロボット - Simulate a trajectory - 軌道をシミュレート + + Simulate a trajectory + 軌道をシミュレート - Run a simulation on a trajectory - 軌道のシミュレーションを実行 + + Run a simulation on a trajectory + 軌道のシミュレーションを実行 - - + + CmdRobotTrajectoryCompound - - Robot - ロボット + + Robot + ロボット - Trajectory compound... - Trajectory compound... + + Trajectory compound... + Trajectory compound... - Group and connect some trajectories to one - Group and connect some trajectories to one + + Group and connect some trajectories to one + Group and connect some trajectories to one - - + + CmdRobotTrajectoryDressUp - Robot - ロボット + + Robot + ロボット - Dress up trajectory... - Dress up trajectory... + + Dress up trajectory... + Dress up trajectory... - Create a dress up object which overide som aspects of a trajectory - Create a dress up object which overide som aspects of a trajectory + + Create a dress up object which overide som aspects of a trajectory + Create a dress up object which overide som aspects of a trajectory - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - 軌道ツール + + Trajectory tools + 軌道ツール - Robot tools - ロボットツール + + Robot tools + ロボットツール - Insert Robot - ロボットを挿入 + + Insert Robot + ロボットを挿入 - - + + QObject - - Wrong selection - 誤った選択 + + + + + + + + + + + + Wrong selection + 誤った選択 - Select one Robot and one Trajectory object. - Select one Robot and one Trajectory object. + + + + + + Select one Robot and one Trajectory object. + Select one Robot and one Trajectory object. - Trajectory not valid - 軌道が無効です。 + + Trajectory not valid + 軌道が無効です。 - You need at least two way points in a trajectory to simulate. - You need at least two way points in a trajectory to simulate. + + You need at least two way points in a trajectory to simulate. + You need at least two way points in a trajectory to simulate. - - KRL file(*.src) - KRLファイル(*.SRC) + + + KRL file(*.src) + KRLファイル(*.SRC) - All Files (*.*) - すべてのファイル (*.*) + + + All Files (*.*) + すべてのファイル (*.*) - Export program - プログラムをエクスポート + + + Export program + プログラムをエクスポート - - Select one robot and one shape or VRML object. - Select one robot and one shape or VRML object. + + Select one robot and one shape or VRML object. + Select one robot and one shape or VRML object. - - No preselection - No preselection + + No preselection + No preselection - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - このコマンドを使用するにはマウスを使ってジオメトリ(事前選択)の上にカーソルを移動する必要があります。詳細についてはマニュアルを参照してください。 + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + このコマンドを使用するにはマウスを使ってジオメトリ(事前選択)の上にカーソルを移動する必要があります。詳細についてはマニュアルを参照してください。 - - Select one Robot to set home postion - Select one Robot to set home postion + + Select one Robot to set home postion + Select one Robot to set home postion - Select one Robot - Select one Robot + + Select one Robot + Select one Robot - - Select one Trajectory object. - Select one Trajectory object. + + + Select one Trajectory object. + Select one Trajectory object. - set default speed - 既定の速度を設定します。 + + set default speed + 既定の速度を設定します。 - speed: (e.g. 1 m/s or 3 cm/s) - speed: (e.g. 1 m/s or 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + speed: (e.g. 1 m/s or 3 cm/s) - set default continuity - set default continuity + + set default continuity + set default continuity - continuous ? - continuous ? + + continuous ? + continuous ? - set default acceleration - set default acceleration + + set default acceleration + set default acceleration - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - ロボットファイルがインストールされていません + + No robot files installed + ロボットファイルがインストールされていません - Please visit %1 and copy the files to %2 - Please visit %1 and copy the files to %2 + + Please visit %1 and copy the files to %2 + Please visit %1 and copy the files to %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - シミュレーション + + Simulation + シミュレーション - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - タイプ + + Type + タイプ - Name - 名前 + + Name + 名前 - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Form + + Form + Form - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Tool: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Tool: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Form + + Form + Form - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - タイプ + + Type + タイプ - Name - 名前 + + Name + 名前 - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Trajectory + + Trajectory + Trajectory - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Dress Up Parameter + + Dress Up Parameter + Dress Up Parameter - - + + TaskEdge2TracParameter - - Form - Form + + Form + Form - Hide / Show - 表示/非表示 + + Hide / Show + 表示/非表示 - Edges: 0 - Edges: 0 + + Edges: 0 + Edges: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Sizing Value: + + Sizing Value: + Sizing Value: - Use orientation of edge - Use orientation of edge + + Use orientation of edge + Use orientation of edge - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Form + + Form + Form - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Tool 0 + + Tool 0 + Tool 0 - Tool - ツール + + Tool + ツール - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - World + + World + World + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Form + + Form + Form - clear - clear + + clear + clear - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Trajectory + Trajectory + Trajectory - - + + TaskTrajectoryDressUpParameter - - Form - Form + + Form + Form - Speed & Acceleration: - 速度 & 加速度: + + Speed & Acceleration: + 速度 & 加速度: - Speed: - 速度: + + Speed: + 速度: - Use - Use + + + Use + Use - Accel: - Accel: + + Accel: + Accel: - Don't change Cont - Don't change Cont + + Don't change Cont + Don't change Cont - Continues - Continues + + Continues + Continues - Discontinues - Discontinues + + Discontinues + Discontinues - Position and Orientation: - Position and Orientation: + + Position and Orientation: + Position and Orientation: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Don't change Position & Orientation + + Don't change Position & Orientation + Don't change Position & Orientation - Use Orientation - Use Orientation + + Use Orientation + Use Orientation - Add Position - Add Position + + Add Position + Add Position - Add Orientation - Add Orientation + + Add Orientation + Add Orientation - Dress Up Parameter - Dress Up Parameter + Dress Up Parameter + Dress Up Parameter - - + + Workbench - - Robot - ロボット + + Robot + ロボット - Insert Robots - Insert Robots + + Insert Robots + Insert Robots - &Robot - ロボット (&r) + + &Robot + ロボット (&r) - Export trajectory - Export trajectory + + Export trajectory + Export trajectory - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_nl.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_nl.ts index 596ac7500..f1d8b5296 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_nl.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_nl.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Gereedschap toevoegen + + Add tool + Gereedschap toevoegen - Add a tool shape to the robot - Voeg een gereedschapvorm toe aan de robot + + Add a tool shape to the robot + Voeg een gereedschapvorm toe aan de robot - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Plaats robot... + + Place robot... + Plaats robot... - Place a robot (experimental!) - Plaats een robot (experimenteel!) + + Place a robot (experimental!) + Plaats een robot (experimenteel!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Maak traject + + Create trajectory + Maak traject - Create a new empty trajectory - Maak een nieuw leeg traject + + Create a new empty trajectory + Maak een nieuw leeg traject - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Rand naar traject... + + Edge to Trajectory... + Rand naar traject... - Generate a Trajectory from a set of edges - Genereer een Traject uit een set van randen + + Generate a Trajectory from a set of edges + Genereer een Traject uit een set van randen - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Kuka compacte subroutine ... + + Kuka compact subroutine... + Kuka compacte subroutine ... - Export the trajectory as a compact KRL subroutine. - Exporteer het traject als een compacte KRL subroutine. + + Export the trajectory as a compact KRL subroutine. + Exporteer het traject als een compacte KRL subroutine. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Kuka volledige subroutine... + + Kuka full subroutine... + Kuka volledige subroutine... - Export the trajectory as a full KRL subroutine. - Exporteer het traject als een volledige KRL subroutine. + + Export the trajectory as a full KRL subroutine. + Exporteer het traject als een volledige KRL subroutine. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Voeg een Kuka IR125 toe aan het document. + + Insert a Kuka IR125 into the document. + Voeg een Kuka IR125 toe aan het document. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Voeg een Kuka IR16 toe aan het document. + + Insert a Kuka IR16 into the document. + Voeg een Kuka IR16 toe aan het document. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Voeg een Kuka IR210 toe aan het document. + + Insert a Kuka IR210 into the document. + Voeg een Kuka IR210 toe aan het document. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Voeg een Kuka IR500 toe aan het document. + + Insert a Kuka IR500 into the document. + Voeg een Kuka IR500 toe aan het document. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Toevoegen aan traject + + Insert in trajectory + Toevoegen aan traject - Insert robot Tool location into trajectory - Robot gereedschapslocatie invoegen in traject + + Insert robot Tool location into trajectory + Robot gereedschapslocatie invoegen in traject - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Toevoegen aan traject + + Insert in trajectory + Toevoegen aan traject - Insert preselection position into trajectory (W) - Plaats de voorselectie-positie in het traject (W) + + Insert preselection position into trajectory (W) + Plaats de voorselectie-positie in het traject (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Ga naar de beginpositie + + + Move to home + Ga naar de beginpositie - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Set standaard oriëntatie + + Set default orientation + Set standaard oriëntatie - set the default orientation for subsequent commands for waypoint creation - set the default orientation for subsequent commands for waypoint creation + + set the default orientation for subsequent commands for waypoint creation + set the default orientation for subsequent commands for waypoint creation - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Standaardwaarden instellen + + Set default values + Standaardwaarden instellen - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Stel de beginpositie in + + + Set the home position + Stel de beginpositie in - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simuleer een traject + + Simulate a trajectory + Simuleer een traject - Run a simulation on a trajectory - Voer een simulatie uit op een traject + + Run a simulation on a trajectory + Voer een simulatie uit op een traject - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Trajectory compound... + + Trajectory compound... + Trajectory compound... - Group and connect some trajectories to one - Group and connect some trajectories to one + + Group and connect some trajectories to one + Group and connect some trajectories to one - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Dress up trajectory... + + Dress up trajectory... + Dress up trajectory... - Create a dress up object which overide som aspects of a trajectory - Create a dress up object which overide som aspects of a trajectory + + Create a dress up object which overide som aspects of a trajectory + Create a dress up object which overide som aspects of a trajectory - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajectory tools + + Trajectory tools + Trajectory tools - Robot tools - Robotgereedschappen + + Robot tools + Robotgereedschappen - Insert Robot - Robot invoegen + + Insert Robot + Robot invoegen - - + + QObject - - Wrong selection - Verkeerde selectie + + + + + + + + + + + + Wrong selection + Verkeerde selectie - Select one Robot and one Trajectory object. - Selecteer één robot en één traject-object. + + + + + + Select one Robot and one Trajectory object. + Selecteer één robot en één traject-object. - Trajectory not valid - Traject ongeldig + + Trajectory not valid + Traject ongeldig - You need at least two way points in a trajectory to simulate. - Je moet ten minste twee punten in een traject hebben om te kunnen simuleren. + + You need at least two way points in a trajectory to simulate. + Je moet ten minste twee punten in een traject hebben om te kunnen simuleren. - - KRL file(*.src) - KRL-bestand (*.src) + + + KRL file(*.src) + KRL-bestand (*.src) - All Files (*.*) - Alle bestanden (*.*) + + + All Files (*.*) + Alle bestanden (*.*) - Export program - Exporteer programma + + + Export program + Exporteer programma - - Select one robot and one shape or VRML object. - Selecteer één robot en één shape of VRML-object. + + Select one robot and one shape or VRML object. + Selecteer één robot en één shape of VRML-object. - - No preselection - Geen voorselectie + + No preselection + Geen voorselectie - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Je moet zweven boven een geometrie (Voorselectie) met de muis om dit commando te gebruiken. Zie documentatie voor details. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Je moet zweven boven een geometrie (Voorselectie) met de muis om dit commando te gebruiken. Zie documentatie voor details. - - Select one Robot to set home postion - Selecteer een Robot om thuispositie te bepalen + + Select one Robot to set home postion + Selecteer een Robot om thuispositie te bepalen - Select one Robot - Selecteer een Robot + + Select one Robot + Selecteer een Robot - - Select one Trajectory object. - Één traject object selecteren. + + + Select one Trajectory object. + Één traject object selecteren. - set default speed - Standaard snelheid instellen + + set default speed + Standaard snelheid instellen - speed: (e.g. 1 m/s or 3 cm/s) - snelheid: (bijv. 1 m/s of 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + snelheid: (bijv. 1 m/s of 3 cm/s) - set default continuity - Set standaard continuïteit + + set default continuity + Set standaard continuïteit - continuous ? - continu? + + continuous ? + continu? - set default acceleration - standaard versnelling instellen + + set default acceleration + standaard versnelling instellen - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - versnelling: (bijv. 1 m/s^2 of 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + versnelling: (bijv. 1 m/s^2 of 3 cm/s^2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - Geen robot bestanden geïnstalleerd + + No robot files installed + Geen robot bestanden geïnstalleerd - Please visit %1 and copy the files to %2 - Bezoek %1 en kopieer de bestanden naar %2 + + Please visit %1 and copy the files to %2 + Bezoek %1 en kopieer de bestanden naar %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulatie + + Simulation + Simulatie - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Type + + Type + Type - Name - Naam + + Name + Naam - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Vorm + + Form + Vorm - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Tool: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Tool: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaakRobot6Assen + + TaskRobot6Axis + TaakRobot6Assen - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaakRobotBesturing + + TaskRobotControl + TaakRobotBesturing - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaakRobotBerichten + + TaskRobotMessages + TaakRobotBerichten - - + + RobotGui::TaskTrajectory - - Form - Vorm + + Form + Vorm - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Type + + Type + Type - Name - Naam + + Name + Naam - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Traject + + Trajectory + Traject - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Aankleed Parameter + + Dress Up Parameter + Aankleed Parameter - - + + TaskEdge2TracParameter - - Form - Vorm + + Form + Vorm - Hide / Show - Verbergen / weergeven + + Hide / Show + Verbergen / weergeven - Edges: 0 - Randen: 0 + + Edges: 0 + Randen: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Dimensionering Waarde: + + Sizing Value: + Dimensionering Waarde: - Use orientation of edge - Gebruik oriëntatie van de rand + + Use orientation of edge + Gebruik oriëntatie van de rand - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaakRobot6Assen + TaskRobot6Axis + TaakRobot6Assen - - + + TaskRobotControl - - Form - Vorm + + Form + Vorm - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Gereedschap 0 + + Tool 0 + Gereedschap 0 - Tool - Gereedschap + + Tool + Gereedschap - Base 0 - Basis 0 + + Base 0 + Basis 0 - Base - Basis + + Base + Basis - World - Wereld + + World + Wereld + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1 ° + + + + 5mm / 0.5° + 5mm / 0,5 ° + + + + 1mm / 0.1° + 1mm / 0,1 ° - 50mm / 5° - 50mm / 5° + TaskRobotControl + TaakRobotBesturing - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1 ° - - - 5mm / 0.5° - 5mm / 0,5 ° - - - 1mm / 0.1° - 1mm / 0,1 ° - - - TaskRobotControl - TaakRobotBesturing - - - + + TaskRobotMessages - - Form - Vorm + + Form + Vorm - clear - wissen + + clear + wissen - TaskRobotMessages - TaakRobotBerichten + TaskRobotMessages + TaakRobotBerichten - - + + TaskTrajectory - Trajectory - Traject + Trajectory + Traject - - + + TaskTrajectoryDressUpParameter - - Form - Vorm + + Form + Vorm - Speed & Acceleration: - Snelheid & versnelling: + + Speed & Acceleration: + Snelheid & versnelling: - Speed: - Snelheid: + + Speed: + Snelheid: - Use - Gebruik + + + Use + Gebruik - Accel: - Accel: + + Accel: + Accel: - Don't change Cont - Don't change Cont + + Don't change Cont + Don't change Cont - Continues - Doorgaan + + Continues + Doorgaan - Discontinues - Stoppen + + Discontinues + Stoppen - Position and Orientation: - Positie en oriëntatie: + + Position and Orientation: + Positie en oriëntatie: - (0,0,0),(0,0,0) - (0,0,0), (0,0,0) + + (0,0,0),(0,0,0) + (0,0,0), (0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Positie & oriëntatie niet wijzigen + + Don't change Position & Orientation + Positie & oriëntatie niet wijzigen - Use Orientation - Gebruik Oriëntatie + + Use Orientation + Gebruik Oriëntatie - Add Position - Positie toevoegen + + Add Position + Positie toevoegen - Add Orientation - Oriëntatie toevoegen + + Add Orientation + Oriëntatie toevoegen - Dress Up Parameter - Aankleed Parameter + Dress Up Parameter + Aankleed Parameter - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Invoegen Robots + + Insert Robots + Invoegen Robots - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Exporteer traject + + Export trajectory + Exporteer traject - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_no.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_no.ts index c07760e4e..0076e1b24 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_no.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_no.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Legg til verktøy + + Add tool + Legg til verktøy - Add a tool shape to the robot - Legg til en verktøyform til roboten + + Add a tool shape to the robot + Legg til en verktøyform til roboten - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Plasser robot... + + Place robot... + Plasser robot... - Place a robot (experimental!) - Plasser en robot (eksperimentell!) + + Place a robot (experimental!) + Plasser en robot (eksperimentell!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Lag bane + + Create trajectory + Lag bane - Create a new empty trajectory - Lag en ny tom bane + + Create a new empty trajectory + Lag en ny tom bane - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Kant til bane... + + Edge to Trajectory... + Kant til bane... - Generate a Trajectory from a set of edges - Generer en bane fra et sett med kanter + + Generate a Trajectory from a set of edges + Generer en bane fra et sett med kanter - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Kompakt KUKA delrutine... + + Kuka compact subroutine... + Kompakt KUKA delrutine... - Export the trajectory as a compact KRL subroutine. - Eksportere banen som en kompakt KRL delrutine. + + Export the trajectory as a compact KRL subroutine. + Eksportere banen som en kompakt KRL delrutine. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Fullstendig KUKA delrutine... + + Kuka full subroutine... + Fullstendig KUKA delrutine... - Export the trajectory as a full KRL subroutine. - Eksporter banen som en fullstendig KRL delrutine. + + Export the trajectory as a full KRL subroutine. + Eksporter banen som en fullstendig KRL delrutine. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Sett inn en Kuka IR125 i dokumentet. + + Insert a Kuka IR125 into the document. + Sett inn en Kuka IR125 i dokumentet. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Sett inn en Kuka IR16 i dokumentet. + + Insert a Kuka IR16 into the document. + Sett inn en Kuka IR16 i dokumentet. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Sett inn en Kuka IR210 i dokumentet. + + Insert a Kuka IR210 into the document. + Sett inn en Kuka IR210 i dokumentet. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Sett inn en Kuka IR500 i dokumentet. + + Insert a Kuka IR500 into the document. + Sett inn en Kuka IR500 i dokumentet. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Sett inn i bane + + Insert in trajectory + Sett inn i bane - Insert robot Tool location into trajectory - Sett inn robotverktøy i banen + + Insert robot Tool location into trajectory + Sett inn robotverktøy i banen - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Sett inn i bane + + Insert in trajectory + Sett inn i bane - Insert preselection position into trajectory (W) - Sett inn forvalgt posisjon i bane (W) + + Insert preselection position into trajectory (W) + Sett inn forvalgt posisjon i bane (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Flytt til utgangsposisjon + + + Move to home + Flytt til utgangsposisjon - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Angi standardorientering + + Set default orientation + Angi standardorientering - set the default orientation for subsequent commands for waypoint creation - sett standardorientering for etterfølgende kommandoer ved veipunktopprettelse + + set the default orientation for subsequent commands for waypoint creation + sett standardorientering for etterfølgende kommandoer ved veipunktopprettelse - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Angi standardverdier + + Set default values + Angi standardverdier - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - angi standardverdier for hastighet, akselerasjon og kontinuitet for etterfølgende kommandoer ved veipunktetablering + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + angi standardverdier for hastighet, akselerasjon og kontinuitet for etterfølgende kommandoer ved veipunktetablering - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Sett utgangsposisjon + + + Set the home position + Sett utgangsposisjon - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simuler en bane + + Simulate a trajectory + Simuler en bane - Run a simulation on a trajectory - Kjør simulering på en bane + + Run a simulation on a trajectory + Kjør simulering på en bane - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Banesammensetning... + + Trajectory compound... + Banesammensetning... - Group and connect some trajectories to one - Gruppér og koble flere baner til en + + Group and connect some trajectories to one + Gruppér og koble flere baner til en - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Bekledningsbane... + + Dress up trajectory... + Bekledningsbane... - Create a dress up object which overide som aspects of a trajectory - Lag et bekledningsobjekt som oversyrer deler av en bane + + Create a dress up object which overide som aspects of a trajectory + Lag et bekledningsobjekt som oversyrer deler av en bane - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajectory tools + + Trajectory tools + Trajectory tools - Robot tools - Robot tools + + Robot tools + Robot tools - Insert Robot - Insert Robot + + Insert Robot + Insert Robot - - + + QObject - - Wrong selection - Feil valg + + + + + + + + + + + + Wrong selection + Feil valg - Select one Robot and one Trajectory object. - Velg en Robot og ett baneobjekt. + + + + + + Select one Robot and one Trajectory object. + Velg en Robot og ett baneobjekt. - Trajectory not valid - Banen ikke gyldig + + Trajectory not valid + Banen ikke gyldig - You need at least two way points in a trajectory to simulate. - Du trenger minst to etappemål i en bane å simulere. + + You need at least two way points in a trajectory to simulate. + Du trenger minst to etappemål i en bane å simulere. - - KRL file(*.src) - KRL fil(*.src) + + + KRL file(*.src) + KRL fil(*.src) - All Files (*.*) - Alle filer (*.*) + + + All Files (*.*) + Alle filer (*.*) - Export program - Eksporter program + + + Export program + Eksporter program - - Select one robot and one shape or VRML object. - Velg en robot og en figur eller et VRML objekt. + + Select one robot and one shape or VRML object. + Velg en robot og en figur eller et VRML objekt. - - No preselection - Ingen forvalg + + No preselection + Ingen forvalg - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Du må holde mus over noe geometri (Forvalg) for å bruke denne kommandoen. Se dokumentasjonen for detaljer. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Du må holde mus over noe geometri (Forvalg) for å bruke denne kommandoen. Se dokumentasjonen for detaljer. - - Select one Robot to set home postion - Velg en robot å sette i utgangsposisjon + + Select one Robot to set home postion + Velg en robot å sette i utgangsposisjon - Select one Robot - Velg en robot + + Select one Robot + Velg en robot - - Select one Trajectory object. - Velg ett baneobjekt. + + + Select one Trajectory object. + Velg ett baneobjekt. - set default speed - angi standardhastighet + + set default speed + angi standardhastighet - speed: (e.g. 1 m/s or 3 cm/s) - hastighet: (f.eks 1m/s eller 3cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + hastighet: (f.eks 1m/s eller 3cm/s) - set default continuity - sett standardkontinuitet + + set default continuity + sett standardkontinuitet - continuous ? - kontinuerlig? + + continuous ? + kontinuerlig? - set default acceleration - sett standardakselerasjon + + set default acceleration + sett standardakselerasjon - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - akselerasjon: (f.eks 1m/s^2 eller 3cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + akselerasjon: (f.eks 1m/s^2 eller 3cm/s^2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - Ingen robot filer installert + + No robot files installed + Ingen robot filer installert - Please visit %1 and copy the files to %2 - Vennligst besøk %1 og kopier filer til %2 + + Please visit %1 and copy the files to %2 + Vennligst besøk %1 og kopier filer til %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulering + + Simulation + Simulering - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Type + + Type + Type - Name - Navn + + Name + Navn - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - OppgKantTBaneParameter + + TaskEdge2TracParameter + OppgKantTBaneParameter - - + + RobotGui::TaskRobot6Axis - - Form - Skjema + + Form + Skjema - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Verktøy: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Verktøy: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - OppgaveRobotAkse + + TaskRobot6Axis + OppgaveRobotAkse - - + + RobotGui::TaskRobotControl - - TaskRobotControl - OppgaveRobotKontroll + + TaskRobotControl + OppgaveRobotKontroll - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - OppgaveRobotBeskjeder + + TaskRobotMessages + OppgaveRobotBeskjeder - - + + RobotGui::TaskTrajectory - - Form - Skjema + + Form + Skjema - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Type + + Type + Type - Name - Navn + + Name + Navn - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Bane + + Trajectory + Bane - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Bekledningsparameter + + Dress Up Parameter + Bekledningsparameter - - + + TaskEdge2TracParameter - - Form - Skjema + + Form + Skjema - Hide / Show - Skjul/ Vis + + Hide / Show + Skjul/ Vis - Edges: 0 - Kanter: 0 + + Edges: 0 + Kanter: 0 - Cluster: 0 - Klynge: 0 + + Cluster: 0 + Klynge: 0 - Sizing Value: - Størrelseverdi: + + Sizing Value: + Størrelseverdi: - Use orientation of edge - Use orientation of edge + + Use orientation of edge + Use orientation of edge - TaskEdge2TracParameter - OppgKantTBaneParameter + TaskEdge2TracParameter + OppgKantTBaneParameter - - + + TaskRobot6Axis - TaskRobot6Axis - OppgaveRobotAkse + TaskRobot6Axis + OppgaveRobotAkse - - + + TaskRobotControl - - Form - Skjema + + Form + Skjema - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Verktøy 0 + + Tool 0 + Verktøy 0 - Tool - Verktøy + + Tool + Verktøy - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - Verden + + World + Verden + + + + 50mm / 5° + 50mm/ 5° + + + + 20mm / 2° + 20mm/ 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm/ 5° + TaskRobotControl + OppgaveRobotKontroll - - 20mm / 2° - 20mm/ 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - OppgaveRobotKontroll - - - + + TaskRobotMessages - - Form - Skjema + + Form + Skjema - clear - fjern + + clear + fjern - TaskRobotMessages - OppgaveRobotBeskjeder + TaskRobotMessages + OppgaveRobotBeskjeder - - + + TaskTrajectory - Trajectory - Bane + Trajectory + Bane - - + + TaskTrajectoryDressUpParameter - - Form - Skjema + + Form + Skjema - Speed & Acceleration: - Hastighet & akselerasjon: + + Speed & Acceleration: + Hastighet & akselerasjon: - Speed: - Hastighet: + + Speed: + Hastighet: - Use - Bruk + + + Use + Bruk - Accel: - Akselér: + + Accel: + Akselér: - Don't change Cont - Ikke endre forts + + Don't change Cont + Ikke endre forts - Continues - Fortsetter + + Continues + Fortsetter - Discontinues - Avbryter + + Discontinues + Avbryter - Position and Orientation: - Posisjon og orientering: + + Position and Orientation: + Posisjon og orientering: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Ikke endre posisjon og orientering + + Don't change Position & Orientation + Ikke endre posisjon og orientering - Use Orientation - Bruk Orientering + + Use Orientation + Bruk Orientering - Add Position - Legg til posisjon + + Add Position + Legg til posisjon - Add Orientation - Legg til orientering + + Add Orientation + Legg til orientering - Dress Up Parameter - Bekledningsparameter + Dress Up Parameter + Bekledningsparameter - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Sett inn Roboter + + Insert Robots + Sett inn Roboter - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Eksporter bane + + Export trajectory + Eksporter bane - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_pl.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_pl.ts index ba35e8ba7..279313d98 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_pl.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_pl.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Dodaj narzędzie + + Add tool + Dodaj narzędzie - Add a tool shape to the robot - Add a tool shape to the robot + + Add a tool shape to the robot + Add a tool shape to the robot - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Place robot... + + Place robot... + Place robot... - Place a robot (experimental!) - Place a robot (experimental!) + + Place a robot (experimental!) + Place a robot (experimental!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Utwórz trajektorię + + Create trajectory + Utwórz trajektorię - Create a new empty trajectory - Utwórz nową pustą trajektorię + + Create a new empty trajectory + Utwórz nową pustą trajektorię - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Krawędź na Trajektorię... + + Edge to Trajectory... + Krawędź na Trajektorię... - Generate a Trajectory from a set of edges - Generuj trajektorię z zestawu krawędzi + + Generate a Trajectory from a set of edges + Generuj trajektorię z zestawu krawędzi - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - Kuka compact subroutine... + + Kuka compact subroutine... + Kuka compact subroutine... - Export the trajectory as a compact KRL subroutine. - Export the trajectory as a compact KRL subroutine. + + Export the trajectory as a compact KRL subroutine. + Export the trajectory as a compact KRL subroutine. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - Kuka full subroutine... + + Kuka full subroutine... + Kuka full subroutine... - Export the trajectory as a full KRL subroutine. - Export the trajectory as a full KRL subroutine. + + Export the trajectory as a full KRL subroutine. + Export the trajectory as a full KRL subroutine. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Insert a Kuka IR125 into the document. + + Insert a Kuka IR125 into the document. + Insert a Kuka IR125 into the document. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Insert a Kuka IR16 into the document. + + Insert a Kuka IR16 into the document. + Insert a Kuka IR16 into the document. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Insert a Kuka IR210 into the document. + + Insert a Kuka IR210 into the document. + Insert a Kuka IR210 into the document. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Insert a Kuka IR500 into the document. + + Insert a Kuka IR500 into the document. + Insert a Kuka IR500 into the document. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Wstaw na Trajektorię + + Insert in trajectory + Wstaw na Trajektorię - Insert robot Tool location into trajectory - Insert robot Tool location into trajectory + + Insert robot Tool location into trajectory + Insert robot Tool location into trajectory - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Wstaw na Trajektorię + + Insert in trajectory + Wstaw na Trajektorię - Insert preselection position into trajectory (W) - Insert preselection position into trajectory (W) + + Insert preselection position into trajectory (W) + Insert preselection position into trajectory (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Move to home + + + Move to home + Move to home - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Ustaw domyślną orientację + + Set default orientation + Ustaw domyślną orientację - set the default orientation for subsequent commands for waypoint creation - set the default orientation for subsequent commands for waypoint creation + + set the default orientation for subsequent commands for waypoint creation + set the default orientation for subsequent commands for waypoint creation - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Set default values + + Set default values + Set default values - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Set the home position + + + Set the home position + Set the home position - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Symulacja Trajektorii + + Simulate a trajectory + Symulacja Trajektorii - Run a simulation on a trajectory - Run a simulation on a trajectory + + Run a simulation on a trajectory + Run a simulation on a trajectory - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Trajectory compound... + + Trajectory compound... + Trajectory compound... - Group and connect some trajectories to one - Group and connect some trajectories to one + + Group and connect some trajectories to one + Group and connect some trajectories to one - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Dress up trajectory... + + Dress up trajectory... + Dress up trajectory... - Create a dress up object which overide som aspects of a trajectory - Create a dress up object which overide som aspects of a trajectory + + Create a dress up object which overide som aspects of a trajectory + Create a dress up object which overide som aspects of a trajectory - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Narzędzia Trajektoria + + Trajectory tools + Narzędzia Trajektoria - Robot tools - Narzędzia Robot + + Robot tools + Narzędzia Robot - Insert Robot - Wstaw Robot + + Insert Robot + Wstaw Robot - - + + QObject - - Wrong selection - Niewłaściwy wybór + + + + + + + + + + + + Wrong selection + Niewłaściwy wybór - Select one Robot and one Trajectory object. - Select one Robot and one Trajectory object. + + + + + + Select one Robot and one Trajectory object. + Select one Robot and one Trajectory object. - Trajectory not valid - Niewłaściwa Trajektoria + + Trajectory not valid + Niewłaściwa Trajektoria - You need at least two way points in a trajectory to simulate. - You need at least two way points in a trajectory to simulate. + + You need at least two way points in a trajectory to simulate. + You need at least two way points in a trajectory to simulate. - - KRL file(*.src) - Plik KRL (*. src) + + + KRL file(*.src) + Plik KRL (*. src) - All Files (*.*) - Wszystkie pliki (*.*) + + + All Files (*.*) + Wszystkie pliki (*.*) - Export program - Eksport programu + + + Export program + Eksport programu - - Select one robot and one shape or VRML object. - Select one robot and one shape or VRML object. + + Select one robot and one shape or VRML object. + Select one robot and one shape or VRML object. - - No preselection - No preselection + + No preselection + No preselection - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - - Select one Robot to set home postion - Select one Robot to set home postion + + Select one Robot to set home postion + Select one Robot to set home postion - Select one Robot - Select one Robot + + Select one Robot + Select one Robot - - Select one Trajectory object. - Zaznacz jeden obiekt Trajektoria + + + Select one Trajectory object. + Zaznacz jeden obiekt Trajektoria - set default speed - set default speed + + set default speed + set default speed - speed: (e.g. 1 m/s or 3 cm/s) - speed: (e.g. 1 m/s or 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + speed: (e.g. 1 m/s or 3 cm/s) - set default continuity - set default continuity + + set default continuity + set default continuity - continuous ? - continuous ? + + continuous ? + continuous ? - set default acceleration - Ustaw domyślne przyśpieszenie + + set default acceleration + Ustaw domyślne przyśpieszenie - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - No robot files installed + + No robot files installed + No robot files installed - Please visit %1 and copy the files to %2 - Please visit %1 and copy the files to %2 + + Please visit %1 and copy the files to %2 + Please visit %1 and copy the files to %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Symulacja + + Simulation + Symulacja - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Typ + + Type + Typ - Name - Nazwa + + Name + Nazwa - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Form + + Form + Form - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Narzędzie: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Narzędzie: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Form + + Form + Form - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Typ + + Type + Typ - Name - Nazwa + + Name + Nazwa - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Trajectory + + Trajectory + Trajectory - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Dress Up Parameter + + Dress Up Parameter + Dress Up Parameter - - + + TaskEdge2TracParameter - - Form - Form + + Form + Form - Hide / Show - Ukryj / Pokaż + + Hide / Show + Ukryj / Pokaż - Edges: 0 - Edges: 0 + + Edges: 0 + Edges: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Sizing Value: + + Sizing Value: + Sizing Value: - Use orientation of edge - Użyj orientacji krawędzi + + Use orientation of edge + Użyj orientacji krawędzi - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Form + + Form + Form - X+ - X + + + X+ + X + - Y+ - Y + + + Y+ + Y + - Z+ - Z + + + Z+ + Z + - A+ - A + + + A+ + A + - B+ - B + + + B+ + B + - C+ - C + + + C+ + C + - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Tool 0 + + Tool 0 + Tool 0 - Tool - Narzędzie + + Tool + Narzędzie - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - World + + World + World + + + + 50mm / 5° + 50mm / 5 ° + + + + 20mm / 2° + 20mm / 2 ° + + + + 10mm / 1° + 10mm / 1 ° + + + + 5mm / 0.5° + 5mm / 0,5 ° + + + + 1mm / 0.1° + 1 mm / 0,1 ° - 50mm / 5° - 50mm / 5 ° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20mm / 2 ° - - - 10mm / 1° - 10mm / 1 ° - - - 5mm / 0.5° - 5mm / 0,5 ° - - - 1mm / 0.1° - 1 mm / 0,1 ° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Form + + Form + Form - clear - Wyczyść + + clear + Wyczyść - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Trajectory + Trajectory + Trajectory - - + + TaskTrajectoryDressUpParameter - - Form - Form + + Form + Form - Speed & Acceleration: - Prędkość & Przyśpieszenie: + + Speed & Acceleration: + Prędkość & Przyśpieszenie: - Speed: - Prędkość: + + Speed: + Prędkość: - Use - Użyj + + + Use + Użyj - Accel: - Przyśp.: + + Accel: + Przyśp.: - Don't change Cont - Don't change Cont + + Don't change Cont + Don't change Cont - Continues - Continues + + Continues + Continues - Discontinues - Discontinues + + Discontinues + Discontinues - Position and Orientation: - Pozycja & Orientacja: + + Position and Orientation: + Pozycja & Orientacja: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Nie zmieniaj Pozycji & Orientacji + + Don't change Position & Orientation + Nie zmieniaj Pozycji & Orientacji - Use Orientation - Użyj orientacji + + Use Orientation + Użyj orientacji - Add Position - Dodaj pozycję + + Add Position + Dodaj pozycję - Add Orientation - Dodaj orientację + + Add Orientation + Dodaj orientację - Dress Up Parameter - Dress Up Parameter + Dress Up Parameter + Dress Up Parameter - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Insert Robots + + Insert Robots + Insert Robots - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Eksport Trajektorii + + Export trajectory + Eksport Trajektorii - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_pt.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_pt.ts index 24beb9708..311a426e8 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_pt.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_pt.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robô + + Robot + Robô - Add tool - Adicionar a ferramenta + + Add tool + Adicionar a ferramenta - Add a tool shape to the robot - Adicionar uma ferramenta de forma ao robô + + Add a tool shape to the robot + Adicionar uma ferramenta de forma ao robô - - + + CmdRobotConstraintAxle - - Robot - Robô + + Robot + Robô - Place robot... - Colocar robô... + + Place robot... + Colocar robô... - Place a robot (experimental!) - Colocar um robô (experimental!) + + Place a robot (experimental!) + Colocar um robô (experimental!) - - + + CmdRobotCreateTrajectory - - Robot - Robô + + Robot + Robô - Create trajectory - Criar trajetória + + Create trajectory + Criar trajetória - Create a new empty trajectory - Criar uma nova trajetória vazia + + Create a new empty trajectory + Criar uma nova trajetória vazia - - + + CmdRobotEdge2Trac - Robot - Robô + + Robot + Robô - Edge to Trajectory... - Aresta para trajetória... + + Edge to Trajectory... + Aresta para trajetória... - Generate a Trajectory from a set of edges - Gerar uma trajetória a partir de um conjunto de arestas + + Generate a Trajectory from a set of edges + Gerar uma trajetória a partir de um conjunto de arestas - - + + CmdRobotExportKukaCompact - - Robot - Robô + + Robot + Robô - Kuka compact subroutine... - Kuka sub-rotina compacta ... + + Kuka compact subroutine... + Kuka sub-rotina compacta ... - Export the trajectory as a compact KRL subroutine. - Exporte a trajetória como uma sub-rotina KRL compacta. + + Export the trajectory as a compact KRL subroutine. + Exporte a trajetória como uma sub-rotina KRL compacta. - - + + CmdRobotExportKukaFull - Robot - Robô + + Robot + Robô - Kuka full subroutine... - KUKA sub-rotina completa... + + Kuka full subroutine... + KUKA sub-rotina completa... - Export the trajectory as a full KRL subroutine. - Exporte a trajetória como uma sub-rotina KRL completa. + + Export the trajectory as a full KRL subroutine. + Exporte a trajetória como uma sub-rotina KRL completa. - - + + CmdRobotInsertKukaIR125 - - Robot - Robô + + Robot + Robô - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Inserir um Kuka IR125 no documento. + + Insert a Kuka IR125 into the document. + Inserir um Kuka IR125 no documento. - - + + CmdRobotInsertKukaIR16 - Robot - Robô + + Robot + Robô - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Inserir um Kuka IR16 no documento. + + Insert a Kuka IR16 into the document. + Inserir um Kuka IR16 no documento. - - + + CmdRobotInsertKukaIR210 - Robot - Robô + + Robot + Robô - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Inserir um Kuka IR210 no documento. + + Insert a Kuka IR210 into the document. + Inserir um Kuka IR210 no documento. - - + + CmdRobotInsertKukaIR500 - Robot - Robô + + Robot + Robô - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Inserir um Kuka IR500 no documento. + + Insert a Kuka IR500 into the document. + Inserir um Kuka IR500 no documento. - - + + CmdRobotInsertWaypoint - - Robot - Robô + + Robot + Robô - Insert in trajectory - Inserir na trajetória + + Insert in trajectory + Inserir na trajetória - Insert robot Tool location into trajectory - Inserir localização de ferramenta de robô na trajetória + + Insert robot Tool location into trajectory + Inserir localização de ferramenta de robô na trajetória - - + + CmdRobotInsertWaypointPreselect - Robot - Robô + + Robot + Robô - Insert in trajectory - Inserir na trajetória + + Insert in trajectory + Inserir na trajetória - Insert preselection position into trajectory (W) - Inserir posição da pre-seleção na trajetória (W) + + Insert preselection position into trajectory (W) + Inserir posição da pre-seleção na trajetória (W) - - + + CmdRobotRestoreHomePos - - Robot - Robô + + Robot + Robô - Move to home - Mover para a posição inicial + + + Move to home + Mover para a posição inicial - - + + CmdRobotSetDefaultOrientation - - Robot - Robô + + Robot + Robô - Set default orientation - Definir a orientação padrão + + Set default orientation + Definir a orientação padrão - set the default orientation for subsequent commands for waypoint creation - definir a orientação padrão para os comandos subsequentes para a criação de waypoint + + set the default orientation for subsequent commands for waypoint creation + definir a orientação padrão para os comandos subsequentes para a criação de waypoint - - + + CmdRobotSetDefaultValues - Robot - Robô + + Robot + Robô - Set default values - Definir valores padrão + + Set default values + Definir valores padrão - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Defina os valores padrão para a velocidade, aceleração e continuidade para comandos subsequentes de criação de waypoint + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Defina os valores padrão para a velocidade, aceleração e continuidade para comandos subsequentes de criação de waypoint - - + + CmdRobotSetHomePos - - Robot - Robô + + Robot + Robô - Set the home position - Definir a posição inicial + + + Set the home position + Definir a posição inicial - - + + CmdRobotSimulate - Robot - Robô + + Robot + Robô - Simulate a trajectory - Simular uma trajetória + + Simulate a trajectory + Simular uma trajetória - Run a simulation on a trajectory - Executar uma simulação sobre uma trajetória + + Run a simulation on a trajectory + Executar uma simulação sobre uma trajetória - - + + CmdRobotTrajectoryCompound - - Robot - Robô + + Robot + Robô - Trajectory compound... - Composto de trajetória... + + Trajectory compound... + Composto de trajetória... - Group and connect some trajectories to one - Agrupar e conectar algumas trajetórias a uma + + Group and connect some trajectories to one + Agrupar e conectar algumas trajetórias a uma - - + + CmdRobotTrajectoryDressUp - Robot - Robô + + Robot + Robô - Dress up trajectory... - Vestir trajetória... + + Dress up trajectory... + Vestir trajetória... - Create a dress up object which overide som aspects of a trajectory - Criar um vestimento que substitui os aspectos de som de uma trajetória + + Create a dress up object which overide som aspects of a trajectory + Criar um vestimento que substitui os aspectos de som de uma trajetória - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Ferramentas de trajetória + + Trajectory tools + Ferramentas de trajetória - Robot tools - Ferramentas de robô + + Robot tools + Ferramentas de robô - Insert Robot - Inserir Robô + + Insert Robot + Inserir Robô - - + + QObject - - Wrong selection - Seleção errada + + + + + + + + + + + + Wrong selection + Seleção errada - Select one Robot and one Trajectory object. - Selecione um robô e uma trajetória. + + + + + + Select one Robot and one Trajectory object. + Selecione um robô e uma trajetória. - Trajectory not valid - A trajetória não é válida + + Trajectory not valid + A trajetória não é válida - You need at least two way points in a trajectory to simulate. - Você precisa de pelo menos dois pontos para simular uma trajetória. + + You need at least two way points in a trajectory to simulate. + Você precisa de pelo menos dois pontos para simular uma trajetória. - - KRL file(*.src) - Arquivo KRL (*.src) + + + KRL file(*.src) + Arquivo KRL (*.src) - All Files (*.*) - Todos os arquivos (*.*) + + + All Files (*.*) + Todos os arquivos (*.*) - Export program - Exportar programa + + + Export program + Exportar programa - - Select one robot and one shape or VRML object. - Selecione um robô e uma forma ou objeto VRML. + + Select one robot and one shape or VRML object. + Selecione um robô e uma forma ou objeto VRML. - - No preselection - Nenhuma preseleção + + No preselection + Nenhuma preseleção - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Coloque o mouse em cima de um objeto (preseleção) para usar este comando. Veja a documentação para mais detalhes. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Coloque o mouse em cima de um objeto (preseleção) para usar este comando. Veja a documentação para mais detalhes. - - Select one Robot to set home postion - Selecione um robô para definir a posição de origem + + Select one Robot to set home postion + Selecione um robô para definir a posição de origem - Select one Robot - Selecione um robô + + Select one Robot + Selecione um robô - - Select one Trajectory object. - Selecione um objeto de trajetória. + + + Select one Trajectory object. + Selecione um objeto de trajetória. - set default speed - Definir a velocidade padrão + + set default speed + Definir a velocidade padrão - speed: (e.g. 1 m/s or 3 cm/s) - Velocidade: (por exemplo, 1 m/s ou 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + Velocidade: (por exemplo, 1 m/s ou 3 cm/s) - set default continuity - Definir continuidade padrão + + set default continuity + Definir continuidade padrão - continuous ? - Contínuo ? + + continuous ? + Contínuo ? - set default acceleration - Definir aceleração padrão + + set default acceleration + Definir aceleração padrão - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - Aceleração: (por exemplo, 1 m/s^2 ou 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + Aceleração: (por exemplo, 1 m/s^2 ou 3 cm/s^2) - Select the Trajectory which you want to dress up. - Selecione a trajetória que você deseja vestir. + + Select the Trajectory which you want to dress up. + Selecione a trajetória que você deseja vestir. - - No robot files installed - Nenhum arquivo de robô instalado + + No robot files installed + Nenhum arquivo de robô instalado - Please visit %1 and copy the files to %2 - Por favor, visite %1 e copie os arquivos para %2 + + Please visit %1 and copy the files to %2 + Por favor, visite %1 e copie os arquivos para %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulação + + Simulation + Simulação - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Tipo + + Type + Tipo - Name - Nome + + Name + Nome - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Forma + + Form + Forma - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Ferramenta: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Ferramenta: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - 6EixosRobôTarefas + + TaskRobot6Axis + 6EixosRobôTarefas - - + + RobotGui::TaskRobotControl - - TaskRobotControl - ControleRobôTarefas + + TaskRobotControl + ControleRobôTarefas - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - MensagensRobôTarefas + + TaskRobotMessages + MensagensRobôTarefas - - + + RobotGui::TaskTrajectory - - Form - Forma + + Form + Forma - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Tipo + + Type + Tipo - Name - Nome + + Name + Nome - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Trajetória + + Trajectory + Trajetória - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Parâmetro de vestimento + + Dress Up Parameter + Parâmetro de vestimento - - + + TaskEdge2TracParameter - - Form - Forma + + Form + Forma - Hide / Show - Ocultar / Mostrar + + Hide / Show + Ocultar / Mostrar - Edges: 0 - Arestas: 0 + + Edges: 0 + Arestas: 0 - Cluster: 0 - Cluster: 0 + + Cluster: 0 + Cluster: 0 - Sizing Value: - Valor de dimensionamento: + + Sizing Value: + Valor de dimensionamento: - Use orientation of edge - Utiliza a orientação da aresta + + Use orientation of edge + Utiliza a orientação da aresta - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - 6EixosRobôTarefas + TaskRobot6Axis + 6EixosRobôTarefas - - + + TaskRobotControl - - Form - Forma + + Form + Forma - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Ferramenta 0 + + Tool 0 + Ferramenta 0 - Tool - Ferramenta + + Tool + Ferramenta - Base 0 - Base 0 + + Base 0 + Base 0 - Base - Base + + Base + Base - World - Mundo + + World + Mundo + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + ControleRobôTarefas - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - ControleRobôTarefas - - - + + TaskRobotMessages - - Form - Forma + + Form + Forma - clear - limpar + + clear + limpar - TaskRobotMessages - MensagensRobôTarefas + TaskRobotMessages + MensagensRobôTarefas - - + + TaskTrajectory - Trajectory - Trajetória + Trajectory + Trajetória - - + + TaskTrajectoryDressUpParameter - - Form - Forma + + Form + Forma - Speed & Acceleration: - Velocidade e aceleração: + + Speed & Acceleration: + Velocidade e aceleração: - Speed: - Velocidade: + + Speed: + Velocidade: - Use - Uso + + + Use + Uso - Accel: - Acel: + + Accel: + Acel: - Don't change Cont - Não altere Cont + + Don't change Cont + Não altere Cont - Continues - Continua + + Continues + Continua - Discontinues - Interrompe + + Discontinues + Interrompe - Position and Orientation: - Posição e orientação: + + Position and Orientation: + Posição e orientação: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Não alterar a posição & orientação + + Don't change Position & Orientation + Não alterar a posição & orientação - Use Orientation - Utilizar a orientação + + Use Orientation + Utilizar a orientação - Add Position - Adicionar posição + + Add Position + Adicionar posição - Add Orientation - Adicionar orientação + + Add Orientation + Adicionar orientação - Dress Up Parameter - Parâmetro de vestimento + Dress Up Parameter + Parâmetro de vestimento - - + + Workbench - - Robot - Robô + + Robot + Robô - Insert Robots - Inserir robôs + + Insert Robots + Inserir robôs - &Robot - &Robô + + &Robot + &Robô - Export trajectory - Exportar trajetória + + Export trajectory + Exportar trajetória - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_ru.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_ru.ts index 21e3acc0e..f7326548f 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_ru.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_ru.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Робот + + Robot + Робот - Add tool - Добавить инструмент + + Add tool + Добавить инструмент - Add a tool shape to the robot - Добавить правило для робота + + Add a tool shape to the robot + Добавить правило для робота - - + + CmdRobotConstraintAxle - - Robot - Робот + + Robot + Робот - Place robot... - Место робота ... + + Place robot... + Место робота ... - Place a robot (experimental!) - Место робота (временно!) + + Place a robot (experimental!) + Место робота (временно!) - - + + CmdRobotCreateTrajectory - - Robot - Робот + + Robot + Робот - Create trajectory - Создание траектории + + Create trajectory + Создание траектории - Create a new empty trajectory - Создайте новую траекторию + + Create a new empty trajectory + Создайте новую траекторию - - + + CmdRobotEdge2Trac - Robot - Робот + + Robot + Робот - Edge to Trajectory... - Край траектории... + + Edge to Trajectory... + Край траектории... - Generate a Trajectory from a set of edges - Создать траекторию из ребер + + Generate a Trajectory from a set of edges + Создать траекторию из ребер - - + + CmdRobotExportKukaCompact - - Robot - Робот + + Robot + Робот - Kuka compact subroutine... - Сжатая подпрограмма Kuka... + + Kuka compact subroutine... + Сжатая подпрограмма Kuka... - Export the trajectory as a compact KRL subroutine. - Экспорт траектории в сжатую KRL-подпрограмму. + + Export the trajectory as a compact KRL subroutine. + Экспорт траектории в сжатую KRL-подпрограмму. - - + + CmdRobotExportKukaFull - Robot - Робот + + Robot + Робот - Kuka full subroutine... - Полная подпрограмма Kuka... + + Kuka full subroutine... + Полная подпрограмма Kuka... - Export the trajectory as a full KRL subroutine. - Экспортировать траекторию как полноправную KRL-подпрограмму. + + Export the trajectory as a full KRL subroutine. + Экспортировать траекторию как полноправную KRL-подпрограмму. - - + + CmdRobotInsertKukaIR125 - - Robot - Робот + + Robot + Робот - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Внести IR125 Кuka в документ. + + Insert a Kuka IR125 into the document. + Внести IR125 Кuka в документ. - - + + CmdRobotInsertKukaIR16 - Robot - Робот + + Robot + Робот - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Внести IR16 Кuka в документ. + + Insert a Kuka IR16 into the document. + Внести IR16 Кuka в документ. - - + + CmdRobotInsertKukaIR210 - Robot - Робот + + Robot + Робот - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Внести IR500 Кuka в документ. + + Insert a Kuka IR210 into the document. + Внести IR500 Кuka в документ. - - + + CmdRobotInsertKukaIR500 - Robot - Робот + + Robot + Робот - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Внести IR500 Кuka в документ. + + Insert a Kuka IR500 into the document. + Внести IR500 Кuka в документ. - - + + CmdRobotInsertWaypoint - - Robot - Робот + + Robot + Робот - Insert in trajectory - Вставьте в траекторию + + Insert in trajectory + Вставьте в траекторию - Insert robot Tool location into trajectory - Вставьте местоположение робота на траектории + + Insert robot Tool location into trajectory + Вставьте местоположение робота на траектории - - + + CmdRobotInsertWaypointPreselect - Robot - Робот + + Robot + Робот - Insert in trajectory - Вставьте в траекторию + + Insert in trajectory + Вставьте в траекторию - Insert preselection position into trajectory (W) - Вставте предварительную позицию на траектории (W) + + Insert preselection position into trajectory (W) + Вставте предварительную позицию на траектории (W) - - + + CmdRobotRestoreHomePos - - Robot - Робот + + Robot + Робот - Move to home - Перейти на главную + + + Move to home + Перейти на главную - - + + CmdRobotSetDefaultOrientation - - Robot - Робот + + Robot + Робот - Set default orientation - Установить ориентацию по умолчанию + + Set default orientation + Установить ориентацию по умолчанию - set the default orientation for subsequent commands for waypoint creation - Задайте ориентацию по умолчанию для последующих команд для создания точки + + set the default orientation for subsequent commands for waypoint creation + Задайте ориентацию по умолчанию для последующих команд для создания точки - - + + CmdRobotSetDefaultValues - Robot - Робот + + Robot + Робот - Set default values - Установка значений по умолчанию + + Set default values + Установка значений по умолчанию - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Установка значения по умолчанию для скорости, ускорения и целостности для последующих команд создания точки + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Установка значения по умолчанию для скорости, ускорения и целостности для последующих команд создания точки - - + + CmdRobotSetHomePos - - Robot - Робот + + Robot + Робот - Set the home position - Установить в исходное положение + + + Set the home position + Установить в исходное положение - - + + CmdRobotSimulate - Robot - Робот + + Robot + Робот - Simulate a trajectory - Моделирование траектории + + Simulate a trajectory + Моделирование траектории - Run a simulation on a trajectory - Смоделировать на траектории + + Run a simulation on a trajectory + Смоделировать на траектории - - + + CmdRobotTrajectoryCompound - - Robot - Робот + + Robot + Робот - Trajectory compound... - Траектория соединения ... + + Trajectory compound... + Траектория соединения ... - Group and connect some trajectories to one - Группировать и подключить траекторий в одну + + Group and connect some trajectories to one + Группировать и подключить траекторий в одну - - + + CmdRobotTrajectoryDressUp - Robot - Робот + + Robot + Робот - Dress up trajectory... - Dress up траекторию... + + Dress up trajectory... + Dress up траекторию... - Create a dress up object which overide som aspects of a trajectory - Создать dress up объект, который overide som аспекты траектории + + Create a dress up object which overide som aspects of a trajectory + Создать dress up объект, который overide som аспекты траектории - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Инструменты для траектории + + Trajectory tools + Инструменты для траектории - Robot tools - Робот инструменты + + Robot tools + Робот инструменты - Insert Robot - Вставьте Робот + + Insert Robot + Вставьте Робот - - + + QObject - - Wrong selection - Неверный выбор + + + + + + + + + + + + Wrong selection + Неверный выбор - Select one Robot and one Trajectory object. - Выберите устройство и траекторию движения. + + + + + + Select one Robot and one Trajectory object. + Выберите устройство и траекторию движения. - Trajectory not valid - Траектория не действительна + + Trajectory not valid + Траектория не действительна - You need at least two way points in a trajectory to simulate. - Вам нужно хотя бы две точки, чтобы смоделировать траекторию. + + You need at least two way points in a trajectory to simulate. + Вам нужно хотя бы две точки, чтобы смоделировать траекторию. - - KRL file(*.src) - KRL файл (*. src) + + + KRL file(*.src) + KRL файл (*. src) - All Files (*.*) - Все файлы (*.*) + + + All Files (*.*) + Все файлы (*.*) - Export program - Экспортная программа + + + Export program + Экспортная программа - - Select one robot and one shape or VRML object. - Выберите один робот и одну фигуру или объект VRML. + + Select one robot and one shape or VRML object. + Выберите один робот и одну фигуру или объект VRML. - - No preselection - Не выбрано + + No preselection + Не выбрано - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Чтобы использовать данную команду, наведите курсор на выбранную фигуру. См. документацию. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Чтобы использовать данную команду, наведите курсор на выбранную фигуру. См. документацию. - - Select one Robot to set home postion - Выберите домашнюю позицию одного из роботов + + Select one Robot to set home postion + Выберите домашнюю позицию одного из роботов - Select one Robot - Выберите одного робота + + Select one Robot + Выберите одного робота - - Select one Trajectory object. - Выделите один объект с траекторией. + + + Select one Trajectory object. + Выделите один объект с траекторией. - set default speed - установить скорость по умолчанию + + set default speed + установить скорость по умолчанию - speed: (e.g. 1 m/s or 3 cm/s) - скорость: (3 см/с или 1 м/с) + + speed: (e.g. 1 m/s or 3 cm/s) + скорость: (3 см/с или 1 м/с) - set default continuity - установить целостность по умолчанию + + set default continuity + установить целостность по умолчанию - continuous ? - продолжительность ? + + continuous ? + продолжительность ? - set default acceleration - Установка ускорение по умолчанию + + set default acceleration + Установка ускорение по умолчанию - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - ускорение: (например, 1 м/с ^ 2 или 3 см/с ^ 2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + ускорение: (например, 1 м/с ^ 2 или 3 см/с ^ 2) - Select the Trajectory which you want to dress up. - Выберите траекторию, которую вы хотите оформить. + + Select the Trajectory which you want to dress up. + Выберите траекторию, которую вы хотите оформить. - - No robot files installed - Нет установленных файлов робота + + No robot files installed + Нет установленных файлов робота - Please visit %1 and copy the files to %2 - Пожалуйста, посетите %1 и скопируйте файлы в %2 + + Please visit %1 and copy the files to %2 + Пожалуйста, посетите %1 и скопируйте файлы в %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Симуляция + + Simulation + Симуляция - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Тип + + Type + Тип - Name - Название + + Name + Название - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Форма + + Form + Форма - A1 - А1 + + A1 + А1 - A2 - А2 + + A2 + А2 - A3 - А3 + + A3 + А3 - A4 - А4 + + A4 + А4 - A5 - А5 + + A5 + А5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Инструмент: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Инструмент: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - задание положения осей + + TaskRobot6Axis + задание положения осей - - + + RobotGui::TaskRobotControl - - TaskRobotControl - задание автоматического управления + + TaskRobotControl + задание автоматического управления - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - создание автоматического сообщения + + TaskRobotMessages + создание автоматического сообщения - - + + RobotGui::TaskTrajectory - - Form - Форма + + Form + Форма - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 мс + + 10 ms + 10 мс - 50 ms - 50 мс + + 50 ms + 50 мс - 100 ms - 100 мс + + 100 ms + 100 мс - 500 ms - 500 мс + + 500 ms + 500 мс - 1 s - 1 с + + 1 s + 1 с - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Поз: (200.23, 300.23, 400.23, 234, 343, 343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Поз: (200.23, 300.23, 400.23, 234, 343, 343) - Type - Тип + + Type + Тип - Name - Название + + Name + Название - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Траектории + + Trajectory + Траектории - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Dress Up Параметр + + Dress Up Parameter + Dress Up Параметр - - + + TaskEdge2TracParameter - - Form - Форма + + Form + Форма - Hide / Show - Скрыть / Показать + + Hide / Show + Скрыть / Показать - Edges: 0 - Краев: 0 + + Edges: 0 + Краев: 0 - Cluster: 0 - Кластеров: 0 + + Cluster: 0 + Кластеров: 0 - Sizing Value: - Калибровка значений: + + Sizing Value: + Калибровка значений: - Use orientation of edge - Используйте ориентацию края + + Use orientation of edge + Используйте ориентацию края - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - задание положения осей + TaskRobot6Axis + задание положения осей - - + + TaskRobotControl - - Form - Форма + + Form + Форма - X+ - X + + + X+ + X + - Y+ - Y + + + Y+ + Y + - Z+ - Z + + + Z+ + Z + - A+ - A + + + A+ + A + - B+ - B + + + B+ + B + - C+ - C + + + C+ + C + - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Инструмент 0 + + Tool 0 + Инструмент 0 - Tool - Инструмент + + Tool + Инструмент - Base 0 - База 0 + + Base 0 + База 0 - Base - Основание + + Base + Основание - World - окружение + + World + окружение + + + + 50mm / 5° + 50 мм/5 ° + + + + 20mm / 2° + 20mm / 2 ° + + + + 10mm / 1° + 10 мм / 1 ° + + + + 5mm / 0.5° + 5 мм / 0,5 ° + + + + 1mm / 0.1° + 1 мм / 0,1 ° - 50mm / 5° - 50 мм/5 ° + TaskRobotControl + задание автоматического управления - - 20mm / 2° - 20mm / 2 ° - - - 10mm / 1° - 10 мм / 1 ° - - - 5mm / 0.5° - 5 мм / 0,5 ° - - - 1mm / 0.1° - 1 мм / 0,1 ° - - - TaskRobotControl - задание автоматического управления - - - + + TaskRobotMessages - - Form - Форма + + Form + Форма - clear - очистить + + clear + очистить - TaskRobotMessages - создание автоматического сообщения + TaskRobotMessages + создание автоматического сообщения - - + + TaskTrajectory - Trajectory - Траектории + Trajectory + Траектории - - + + TaskTrajectoryDressUpParameter - - Form - Форма + + Form + Форма - Speed & Acceleration: - Скорость и ускорение: + + Speed & Acceleration: + Скорость и ускорение: - Speed: - Скорость: + + Speed: + Скорость: - Use - Используйте + + + Use + Используйте - Accel: - Accel: + + Accel: + Accel: - Don't change Cont - Не изменять продолжение + + Don't change Cont + Не изменять продолжение - Continues - Продолжается + + Continues + Продолжается - Discontinues - Прекращает + + Discontinues + Прекращает - Position and Orientation: - Позиция и ориентация: + + Position and Orientation: + Позиция и ориентация: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Не менять положение и ориентацию + + Don't change Position & Orientation + Не менять положение и ориентацию - Use Orientation - Использовать ориентацию + + Use Orientation + Использовать ориентацию - Add Position - Добавить позицию + + Add Position + Добавить позицию - Add Orientation - Добавить ориентацию + + Add Orientation + Добавить ориентацию - Dress Up Parameter - Dress Up Параметр + Dress Up Parameter + Dress Up Параметр - - + + Workbench - - Robot - Робот + + Robot + Робот - Insert Robots - Вставить роботов + + Insert Robots + Вставить роботов - &Robot - И робот + + &Robot + И робот - Export trajectory - Экспорт траектории + + Export trajectory + Экспорт траектории - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_se.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_se.ts index 21d0f5071..17e6de2bc 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_se.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_se.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Robot + + Robot + Robot - Add tool - Lägg till verktyg + + Add tool + Lägg till verktyg - Add a tool shape to the robot - Lägg till en verktygsform till roboten + + Add a tool shape to the robot + Lägg till en verktygsform till roboten - - + + CmdRobotConstraintAxle - - Robot - Robot + + Robot + Robot - Place robot... - Placera roboten ... + + Place robot... + Placera roboten ... - Place a robot (experimental!) - Placera en robot (experimentell!) + + Place a robot (experimental!) + Placera en robot (experimentell!) - - + + CmdRobotCreateTrajectory - - Robot - Robot + + Robot + Robot - Create trajectory - Skapa bana + + Create trajectory + Skapa bana - Create a new empty trajectory - Skapa en ny tom bana + + Create a new empty trajectory + Skapa en ny tom bana - - + + CmdRobotEdge2Trac - Robot - Robot + + Robot + Robot - Edge to Trajectory... - Kant till bana... + + Edge to Trajectory... + Kant till bana... - Generate a Trajectory from a set of edges - Generera en bana från en uppsättning med kanter + + Generate a Trajectory from a set of edges + Generera en bana från en uppsättning med kanter - - + + CmdRobotExportKukaCompact - - Robot - Robot + + Robot + Robot - Kuka compact subroutine... - KUKA kompakt subrutin ... + + Kuka compact subroutine... + KUKA kompakt subrutin ... - Export the trajectory as a compact KRL subroutine. - Exportera banan som en kompakt KRL subrutin. + + Export the trajectory as a compact KRL subroutine. + Exportera banan som en kompakt KRL subrutin. - - + + CmdRobotExportKukaFull - Robot - Robot + + Robot + Robot - Kuka full subroutine... - fullständig KUKA subrutin ... + + Kuka full subroutine... + fullständig KUKA subrutin ... - Export the trajectory as a full KRL subroutine. - Exportera banan som en fullständig KRL subrutin. + + Export the trajectory as a full KRL subroutine. + Exportera banan som en fullständig KRL subrutin. - - + + CmdRobotInsertKukaIR125 - - Robot - Robot + + Robot + Robot - Kuka IR125 - KUKA IR125 + + Kuka IR125 + KUKA IR125 - Insert a Kuka IR125 into the document. - Sätt in en Kuka IR125 i dokumentet. + + Insert a Kuka IR125 into the document. + Sätt in en Kuka IR125 i dokumentet. - - + + CmdRobotInsertKukaIR16 - Robot - Robot + + Robot + Robot - Kuka IR16 - KUKA IR16 + + Kuka IR16 + KUKA IR16 - Insert a Kuka IR16 into the document. - Sätt in en Kuka IR16 i dokumentet. + + Insert a Kuka IR16 into the document. + Sätt in en Kuka IR16 i dokumentet. - - + + CmdRobotInsertKukaIR210 - Robot - Robot + + Robot + Robot - Kuka IR210 - KUKA IR210 + + Kuka IR210 + KUKA IR210 - Insert a Kuka IR210 into the document. - Sätt in en Kuka IR210 i dokumentet. + + Insert a Kuka IR210 into the document. + Sätt in en Kuka IR210 i dokumentet. - - + + CmdRobotInsertKukaIR500 - Robot - Robot + + Robot + Robot - Kuka IR500 - KUKA IR500 + + Kuka IR500 + KUKA IR500 - Insert a Kuka IR500 into the document. - Sätt in en Kuka IR500 i dokumentet. + + Insert a Kuka IR500 into the document. + Sätt in en Kuka IR500 i dokumentet. - - + + CmdRobotInsertWaypoint - - Robot - Robot + + Robot + Robot - Insert in trajectory - Sätt in i bana + + Insert in trajectory + Sätt in i bana - Insert robot Tool location into trajectory - Infoga robotverktygets plats i banan + + Insert robot Tool location into trajectory + Infoga robotverktygets plats i banan - - + + CmdRobotInsertWaypointPreselect - Robot - Robot + + Robot + Robot - Insert in trajectory - Sätt in i bana + + Insert in trajectory + Sätt in i bana - Insert preselection position into trajectory (W) - Infoga förvalsposition till banan (W) + + Insert preselection position into trajectory (W) + Infoga förvalsposition till banan (W) - - + + CmdRobotRestoreHomePos - - Robot - Robot + + Robot + Robot - Move to home - Flytta till hemposition + + + Move to home + Flytta till hemposition - - + + CmdRobotSetDefaultOrientation - - Robot - Robot + + Robot + Robot - Set default orientation - Ange standard orientering + + Set default orientation + Ange standard orientering - set the default orientation for subsequent commands for waypoint creation - Ange standardorienteringen för efterföljande kommandon för skapande av banpunkter + + set the default orientation for subsequent commands for waypoint creation + Ange standardorienteringen för efterföljande kommandon för skapande av banpunkter - - + + CmdRobotSetDefaultValues - Robot - Robot + + Robot + Robot - Set default values - Ange standardvärden + + Set default values + Ange standardvärden - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Ange standardvärden för hastighet, acceleration och kontinuitet för efterföljande kommandon för banpunkter + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Ange standardvärden för hastighet, acceleration och kontinuitet för efterföljande kommandon för banpunkter - - + + CmdRobotSetHomePos - - Robot - Robot + + Robot + Robot - Set the home position - Ställ hemposition + + + Set the home position + Ställ hemposition - - + + CmdRobotSimulate - Robot - Robot + + Robot + Robot - Simulate a trajectory - Simulera en bana + + Simulate a trajectory + Simulera en bana - Run a simulation on a trajectory - Kör en simulering på en bana + + Run a simulation on a trajectory + Kör en simulering på en bana - - + + CmdRobotTrajectoryCompound - - Robot - Robot + + Robot + Robot - Trajectory compound... - Sammansatt bana... + + Trajectory compound... + Sammansatt bana... - Group and connect some trajectories to one - Gruppera och anslut vissa banor till en + + Group and connect some trajectories to one + Gruppera och anslut vissa banor till en - - + + CmdRobotTrajectoryDressUp - Robot - Robot + + Robot + Robot - Dress up trajectory... - Klä upp banan... + + Dress up trajectory... + Klä upp banan... - Create a dress up object which overide som aspects of a trajectory - Skapa ett klä upp objekt som åsidosätter vissa aspekter av en bana + + Create a dress up object which overide som aspects of a trajectory + Skapa ett klä upp objekt som åsidosätter vissa aspekter av en bana - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Banverktyg + + Trajectory tools + Banverktyg - Robot tools - Robot verktyg + + Robot tools + Robot verktyg - Insert Robot - Sätt in Robot + + Insert Robot + Sätt in Robot - - + + QObject - - Wrong selection - Fel val + + + + + + + + + + + + Wrong selection + Fel val - Select one Robot and one Trajectory object. - Välj en robot och ett banobjekt. + + + + + + Select one Robot and one Trajectory object. + Välj en robot och ett banobjekt. - Trajectory not valid - Banan inte giltig + + Trajectory not valid + Banan inte giltig - You need at least two way points in a trajectory to simulate. - Du behöver minst två vägpunkter i en bana för att simulera. + + You need at least two way points in a trajectory to simulate. + Du behöver minst två vägpunkter i en bana för att simulera. - - KRL file(*.src) - KRL-fil (*.src) + + + KRL file(*.src) + KRL-fil (*.src) - All Files (*.*) - Alla filer (*.*) + + + All Files (*.*) + Alla filer (*.*) - Export program - Exportera programmet + + + Export program + Exportera programmet - - Select one robot and one shape or VRML object. - Välj en robot och en form eller ett VRML objekt. + + Select one robot and one shape or VRML object. + Välj en robot och en form eller ett VRML objekt. - - No preselection - Inga förval + + No preselection + Inga förval - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - Du måste sväva ovanför en geometri (Förval) med musen för att använda detta kommando. Se dokumentationen för detaljer. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + Du måste sväva ovanför en geometri (Förval) med musen för att använda detta kommando. Se dokumentationen för detaljer. - - Select one Robot to set home postion - Välj en robot för att ställa in hempositionen + + Select one Robot to set home postion + Välj en robot för att ställa in hempositionen - Select one Robot - Välj en Robot + + Select one Robot + Välj en Robot - - Select one Trajectory object. - Välj ett banobjekt. + + + Select one Trajectory object. + Välj ett banobjekt. - set default speed - Ange standardhastighet + + set default speed + Ange standardhastighet - speed: (e.g. 1 m/s or 3 cm/s) - hastighet: (t.ex. 1 m/s eller 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + hastighet: (t.ex. 1 m/s eller 3 cm/s) - set default continuity - Ange standardkontinuitet + + set default continuity + Ange standardkontinuitet - continuous ? - Kontinuerlig? + + continuous ? + Kontinuerlig? - set default acceleration - Ange standardacceleration + + set default acceleration + Ange standardacceleration - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - acceleration: (t.ex. 1 m/s^2 eller 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + acceleration: (t.ex. 1 m/s^2 eller 3 cm/s^2) - Select the Trajectory which you want to dress up. - Markera banan som du vill klä upp. + + Select the Trajectory which you want to dress up. + Markera banan som du vill klä upp. - - No robot files installed - Inga robotfiler installerade + + No robot files installed + Inga robotfiler installerade - Please visit %1 and copy the files to %2 - Besök %1 och kopiera filerna till %2 + + Please visit %1 and copy the files to %2 + Besök %1 och kopiera filerna till %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Simulering + + Simulation + Simulering - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Typ + + Type + Typ - Name - Namn + + Name + Namn - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Form + + Form + Form - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Verktyg: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Verktyg: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - Uppgift 6-axlad robot + + TaskRobot6Axis + Uppgift 6-axlad robot - - + + RobotGui::TaskRobotControl - - TaskRobotControl - Uppgift Robotkontroll + + TaskRobotControl + Uppgift Robotkontroll - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - Uppgift Robot meddelanden + + TaskRobotMessages + Uppgift Robot meddelanden - - + + RobotGui::TaskTrajectory - - Form - Form + + Form + Form - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Typ + + Type + Typ - Name - Namn + + Name + Namn - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Rörelsebana + + Trajectory + Rörelsebana - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Klä upp Parameter + + Dress Up Parameter + Klä upp Parameter - - + + TaskEdge2TracParameter - - Form - Form + + Form + Form - Hide / Show - Dölj / Visa + + Hide / Show + Dölj / Visa - Edges: 0 - Kanter: 0 + + Edges: 0 + Kanter: 0 - Cluster: 0 - Kluster: 0 + + Cluster: 0 + Kluster: 0 - Sizing Value: - Storleksguide Värde: + + Sizing Value: + Storleksguide Värde: - Use orientation of edge - Använd orientering av kanten + + Use orientation of edge + Använd orientering av kanten - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - Uppgift 6-axlad robot + TaskRobot6Axis + Uppgift 6-axlad robot - - + + TaskRobotControl - - Form - Form + + Form + Form - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Verktyg 0 + + Tool 0 + Verktyg 0 - Tool - Verktyg + + Tool + Verktyg - Base 0 - Bas 0 + + Base 0 + Bas 0 - Base - Bas + + Base + Bas - World - Värld + + World + Värld + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0,5° + + + + 1mm / 0.1° + 1mm / 0,1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + Uppgift Robotkontroll - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0,5° - - - 1mm / 0.1° - 1mm / 0,1° - - - TaskRobotControl - Uppgift Robotkontroll - - - + + TaskRobotMessages - - Form - Form + + Form + Form - clear - Rensa + + clear + Rensa - TaskRobotMessages - Uppgift Robot meddelanden + TaskRobotMessages + Uppgift Robot meddelanden - - + + TaskTrajectory - Trajectory - Rörelsebana + Trajectory + Rörelsebana - - + + TaskTrajectoryDressUpParameter - - Form - Form + + Form + Form - Speed & Acceleration: - Hastighet & Acceleration: + + Speed & Acceleration: + Hastighet & Acceleration: - Speed: - Hastighet: + + Speed: + Hastighet: - Use - Använd + + + Use + Använd - Accel: - Acceleration: + + Accel: + Acceleration: - Don't change Cont - Ändra inte forts + + Don't change Cont + Ändra inte forts - Continues - Fortsätter + + Continues + Fortsätter - Discontinues - Upphör + + Discontinues + Upphör - Position and Orientation: - Position och orientering: + + Position and Orientation: + Position och orientering: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Ändra inte position och orientering + + Don't change Position & Orientation + Ändra inte position och orientering - Use Orientation - Använd Orientering + + Use Orientation + Använd Orientering - Add Position - Lägg till position + + Add Position + Lägg till position - Add Orientation - Lägg till Orientering + + Add Orientation + Lägg till Orientering - Dress Up Parameter - Klä upp Parameter + Dress Up Parameter + Klä upp Parameter - - + + Workbench - - Robot - Robot + + Robot + Robot - Insert Robots - Infoga robotar + + Insert Robots + Infoga robotar - &Robot - &Robot + + &Robot + &Robot - Export trajectory - Exportera bana + + Export trajectory + Exportera bana - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_uk.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_uk.ts index ab8d1848a..1c2eb3ab9 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_uk.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_uk.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - Робот + + Robot + Робот - Add tool - Додати інструмент + + Add tool + Додати інструмент - Add a tool shape to the robot - Додати інструмент форми до робота + + Add a tool shape to the robot + Додати інструмент форми до робота - - + + CmdRobotConstraintAxle - - Robot - Робот + + Robot + Робот - Place robot... - Розмістити робота ... + + Place robot... + Розмістити робота ... - Place a robot (experimental!) - Розмістити робота (експериментально!) + + Place a robot (experimental!) + Розмістити робота (експериментально!) - - + + CmdRobotCreateTrajectory - - Robot - Робот + + Robot + Робот - Create trajectory - Створити траєкторію + + Create trajectory + Створити траєкторію - Create a new empty trajectory - Створити нову порожню траєкторію + + Create a new empty trajectory + Створити нову порожню траєкторію - - + + CmdRobotEdge2Trac - Robot - Робот + + Robot + Робот - Edge to Trajectory... - Ребра в Траєкторію... + + Edge to Trajectory... + Ребра в Траєкторію... - Generate a Trajectory from a set of edges - Генерувати Траєкторію із встановлених ребер + + Generate a Trajectory from a set of edges + Генерувати Траєкторію із встановлених ребер - - + + CmdRobotExportKukaCompact - - Robot - Робот + + Robot + Робот - Kuka compact subroutine... - Компактна підпрограма Kuka... + + Kuka compact subroutine... + Компактна підпрограма Kuka... - Export the trajectory as a compact KRL subroutine. - Експортувати траєкторію як компактну KRL підпрограму. + + Export the trajectory as a compact KRL subroutine. + Експортувати траєкторію як компактну KRL підпрограму. - - + + CmdRobotExportKukaFull - Robot - Робот + + Robot + Робот - Kuka full subroutine... - Повна підпрограма Kuka... + + Kuka full subroutine... + Повна підпрограма Kuka... - Export the trajectory as a full KRL subroutine. - Експортувати траєкторію як повну KRL підпрограму. + + Export the trajectory as a full KRL subroutine. + Експортувати траєкторію як повну KRL підпрограму. - - + + CmdRobotInsertKukaIR125 - - Robot - Робот + + Robot + Робот - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - Вставити Kuka IR125 в документ. + + Insert a Kuka IR125 into the document. + Вставити Kuka IR125 в документ. - - + + CmdRobotInsertKukaIR16 - Robot - Робот + + Robot + Робот - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - Вставити Kuka IR16 в документ. + + Insert a Kuka IR16 into the document. + Вставити Kuka IR16 в документ. - - + + CmdRobotInsertKukaIR210 - Robot - Робот + + Robot + Робот - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - Вставити Kuka IR210 в документ. + + Insert a Kuka IR210 into the document. + Вставити Kuka IR210 в документ. - - + + CmdRobotInsertKukaIR500 - Robot - Робот + + Robot + Робот - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - Вставити Kuka IR500 в документ. + + Insert a Kuka IR500 into the document. + Вставити Kuka IR500 в документ. - - + + CmdRobotInsertWaypoint - - Robot - Робот + + Robot + Робот - Insert in trajectory - Вставити в траєкторію + + Insert in trajectory + Вставити в траєкторію - Insert robot Tool location into trajectory - Вставте інструмент розміщення робота на траєкторії + + Insert robot Tool location into trajectory + Вставте інструмент розміщення робота на траєкторії - - + + CmdRobotInsertWaypointPreselect - Robot - Робот + + Robot + Робот - Insert in trajectory - Вставити в траєкторію + + Insert in trajectory + Вставити в траєкторію - Insert preselection position into trajectory (W) - Вставити попередньо обрану позицію в траєкторію (W) + + Insert preselection position into trajectory (W) + Вставити попередньо обрану позицію в траєкторію (W) - - + + CmdRobotRestoreHomePos - - Robot - Робот + + Robot + Робот - Move to home - Рухатись до домівки + + + Move to home + Рухатись до домівки - - + + CmdRobotSetDefaultOrientation - - Robot - Робот + + Robot + Робот - Set default orientation - Встановити стандартну орієнтацію + + Set default orientation + Встановити стандартну орієнтацію - set the default orientation for subsequent commands for waypoint creation - Встановіть стандартну орієнтацію для наступних команд для створення точок маршруту + + set the default orientation for subsequent commands for waypoint creation + Встановіть стандартну орієнтацію для наступних команд для створення точок маршруту - - + + CmdRobotSetDefaultValues - Robot - Робот + + Robot + Робот - Set default values - Встановити стандартні значення + + Set default values + Встановити стандартні значення - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - Встановити стандартні значення швидкості, прискорення та послідовності для наступних команд для побудови точок маршруту + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + Встановити стандартні значення швидкості, прискорення та послідовності для наступних команд для побудови точок маршруту - - + + CmdRobotSetHomePos - - Robot - Робот + + Robot + Робот - Set the home position - Встановити у вихідне положення + + + Set the home position + Встановити у вихідне положення - - + + CmdRobotSimulate - Robot - Робот + + Robot + Робот - Simulate a trajectory - Моделювання траєкторії + + Simulate a trajectory + Моделювання траєкторії - Run a simulation on a trajectory - Виконати моделювання на траєкторії + + Run a simulation on a trajectory + Виконати моделювання на траєкторії - - + + CmdRobotTrajectoryCompound - - Robot - Робот + + Robot + Робот - Trajectory compound... - Об'єднання траєкторії... + + Trajectory compound... + Об'єднання траєкторії... - Group and connect some trajectories to one - Групування та підключення деякий траєкторій в одну + + Group and connect some trajectories to one + Групування та підключення деякий траєкторій в одну - - + + CmdRobotTrajectoryDressUp - Robot - Робот + + Robot + Робот - Dress up trajectory... - Одягнути траєкторію ... + + Dress up trajectory... + Одягнути траєкторію ... - Create a dress up object which overide som aspects of a trajectory - Create a dress up object which overide som aspects of a trajectory + + Create a dress up object which overide som aspects of a trajectory + Create a dress up object which overide som aspects of a trajectory - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - Trajectory tools + + Trajectory tools + Trajectory tools - Robot tools - Robot tools + + Robot tools + Robot tools - Insert Robot - Insert Robot + + Insert Robot + Insert Robot - - + + QObject - - Wrong selection - Невірний вибір + + + + + + + + + + + + Wrong selection + Невірний вибір - Select one Robot and one Trajectory object. - Виберіть один робот і одну траєкторію об'єкта. + + + + + + Select one Robot and one Trajectory object. + Виберіть один робот і одну траєкторію об'єкта. - Trajectory not valid - Траєкторія не дійсна + + Trajectory not valid + Траєкторія не дійсна - You need at least two way points in a trajectory to simulate. - Вам потрібно щонайменше дві точки на траєкторії для моделювання. + + You need at least two way points in a trajectory to simulate. + Вам потрібно щонайменше дві точки на траєкторії для моделювання. - - KRL file(*.src) - KRL файл(*.src) + + + KRL file(*.src) + KRL файл(*.src) - All Files (*.*) - Всі файли (*.*) + + + All Files (*.*) + Всі файли (*.*) - Export program - Експорт програми + + + Export program + Експорт програми - - Select one robot and one shape or VRML object. - Виберіть один робот і одну форму або VRML об'єкт. + + Select one robot and one shape or VRML object. + Виберіть один робот і одну форму або VRML об'єкт. - - No preselection - Нічого не вибрано + + No preselection + Нічого не вибрано - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - - Select one Robot to set home postion - Оберіть одного з роботів щоб встановити домашню позицію + + Select one Robot to set home postion + Оберіть одного з роботів щоб встановити домашню позицію - Select one Robot - Оберіть одного Робота + + Select one Robot + Оберіть одного Робота - - Select one Trajectory object. - Оберіть одну Траєкторію об’єкта. + + + Select one Trajectory object. + Оберіть одну Траєкторію об’єкта. - set default speed - Встановити стандартну швидкість + + set default speed + Встановити стандартну швидкість - speed: (e.g. 1 m/s or 3 cm/s) - швидкість: (напр. 1 м/с або 3 см/с) + + speed: (e.g. 1 m/s or 3 cm/s) + швидкість: (напр. 1 м/с або 3 см/с) - set default continuity - Встановити стандартну послідовність + + set default continuity + Встановити стандартну послідовність - continuous ? - послідовність ? + + continuous ? + послідовність ? - set default acceleration - Встановити стандартне прискорення + + set default acceleration + Встановити стандартне прискорення - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - прискорення: (напр. 1 м/с^2 або 3 см/с^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + прискорення: (напр. 1 м/с^2 або 3 см/с^2) - Select the Trajectory which you want to dress up. - Select the Trajectory which you want to dress up. + + Select the Trajectory which you want to dress up. + Select the Trajectory which you want to dress up. - - No robot files installed - Файли робота не встановлено + + No robot files installed + Файли робота не встановлено - Please visit %1 and copy the files to %2 - Будь ласка, відвідайте %1 та скопіюйте файли до %2 + + Please visit %1 and copy the files to %2 + Будь ласка, відвідайте %1 та скопіюйте файли до %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - Моделювання + + Simulation + Моделювання - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - Тип + + Type + Тип - Name - Назва + + Name + Назва - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - TaskEdge2TracParameter + + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + RobotGui::TaskRobot6Axis - - Form - Форма + + Form + Форма - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - Інструмент: (0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + Інструмент: (0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - TaskRobot6Axis + + TaskRobot6Axis + TaskRobot6Axis - - + + RobotGui::TaskRobotControl - - TaskRobotControl - TaskRobotControl + + TaskRobotControl + TaskRobotControl - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - TaskRobotMessages + + TaskRobotMessages + TaskRobotMessages - - + + RobotGui::TaskTrajectory - - Form - Форма + + Form + Форма - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 мс + + 10 ms + 10 мс - 50 ms - 50 мс + + 50 ms + 50 мс - 100 ms - 100 мс + + 100 ms + 100 мс - 500 ms - 500 мс + + 500 ms + 500 мс - 1 s - 1 с + + 1 s + 1 с - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - Поз: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + Поз: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - Тип + + Type + Тип - Name - Назва + + Name + Назва - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - Траєкторія + + Trajectory + Траєкторія - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - Параметри Одягання + + Dress Up Parameter + Параметри Одягання - - + + TaskEdge2TracParameter - - Form - Форма + + Form + Форма - Hide / Show - Сховати / Показати + + Hide / Show + Сховати / Показати - Edges: 0 - Краї: 0 + + Edges: 0 + Краї: 0 - Cluster: 0 - Кластер: 0 + + Cluster: 0 + Кластер: 0 - Sizing Value: - Значення калібрування: + + Sizing Value: + Значення калібрування: - Use orientation of edge - Use orientation of edge + + Use orientation of edge + Use orientation of edge - TaskEdge2TracParameter - TaskEdge2TracParameter + TaskEdge2TracParameter + TaskEdge2TracParameter - - + + TaskRobot6Axis - TaskRobot6Axis - TaskRobot6Axis + TaskRobot6Axis + TaskRobot6Axis - - + + TaskRobotControl - - Form - Форма + + Form + Форма - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - Інструмент 0 + + Tool 0 + Інструмент 0 - Tool - Інструмент + + Tool + Інструмент - Base 0 - Основа 0 + + Base 0 + Основа 0 - Base - Основа + + Base + Основа - World - Світ + + World + Світ + + + + 50mm / 5° + 50мм / 5° + + + + 20mm / 2° + 20мм / 2° + + + + 10mm / 1° + 10мм / 1° + + + + 5mm / 0.5° + 5мм / 0.5° + + + + 1mm / 0.1° + 1мм / 0.1° - 50mm / 5° - 50мм / 5° + TaskRobotControl + TaskRobotControl - - 20mm / 2° - 20мм / 2° - - - 10mm / 1° - 10мм / 1° - - - 5mm / 0.5° - 5мм / 0.5° - - - 1mm / 0.1° - 1мм / 0.1° - - - TaskRobotControl - TaskRobotControl - - - + + TaskRobotMessages - - Form - Форма + + Form + Форма - clear - очистити + + clear + очистити - TaskRobotMessages - TaskRobotMessages + TaskRobotMessages + TaskRobotMessages - - + + TaskTrajectory - Trajectory - Траєкторія + Trajectory + Траєкторія - - + + TaskTrajectoryDressUpParameter - - Form - Форма + + Form + Форма - Speed & Acceleration: - Швидкість та Прискорення: + + Speed & Acceleration: + Швидкість та Прискорення: - Speed: - Швидкість: + + Speed: + Швидкість: - Use - Вжити + + + Use + Вжити - Accel: - Accel: + + Accel: + Accel: - Don't change Cont - Don't change Cont + + Don't change Cont + Don't change Cont - Continues - Продовжується + + Continues + Продовжується - Discontinues - Припиняється + + Discontinues + Припиняється - Position and Orientation: - Позиція та Орієнтація: + + Position and Orientation: + Позиція та Орієнтація: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - Не змінювати Позицію та Орієнтацію + + Don't change Position & Orientation + Не змінювати Позицію та Орієнтацію - Use Orientation - Використовувати Орієнтацію + + Use Orientation + Використовувати Орієнтацію - Add Position - Додати Позицію + + Add Position + Додати Позицію - Add Orientation - Додати Орієнтацію + + Add Orientation + Додати Орієнтацію - Dress Up Parameter - Параметри Одягання + Dress Up Parameter + Параметри Одягання - - + + Workbench - - Robot - Робот + + Robot + Робот - Insert Robots - Вставити роботів + + Insert Robots + Вставити роботів - &Robot - &Робот + + &Robot + &Робот - Export trajectory - Експорт траєкторії + + Export trajectory + Експорт траєкторії - + diff --git a/src/Mod/Robot/Gui/Resources/translations/Robot_zh.ts b/src/Mod/Robot/Gui/Resources/translations/Robot_zh.ts index 706404e6d..265c6a5fd 100644 --- a/src/Mod/Robot/Gui/Resources/translations/Robot_zh.ts +++ b/src/Mod/Robot/Gui/Resources/translations/Robot_zh.ts @@ -1,877 +1,1044 @@ - - + + CmdRobotAddToolShape - - Robot - 机器人 + + Robot + 机器人 - Add tool - 新增工具 + + Add tool + 新增工具 - Add a tool shape to the robot - 将工具形状添加到机器人 + + Add a tool shape to the robot + 将工具形状添加到机器人 - - + + CmdRobotConstraintAxle - - Robot - 机器人 + + Robot + 机器人 - Place robot... - 机器人区域... + + Place robot... + 机器人区域... - Place a robot (experimental!) - 放置机器人(实验!) + + Place a robot (experimental!) + 放置机器人(实验!) - - + + CmdRobotCreateTrajectory - - Robot - 机器人 + + Robot + 机器人 - Create trajectory - 创建轨迹 + + Create trajectory + 创建轨迹 - Create a new empty trajectory - 创建新的空轨迹 + + Create a new empty trajectory + 创建新的空轨迹 - - + + CmdRobotEdge2Trac - Robot - 机器人 + + Robot + 机器人 - Edge to Trajectory... - 边缘到轨迹... + + Edge to Trajectory... + 边缘到轨迹... - Generate a Trajectory from a set of edges - 从一组边生成轨迹 + + Generate a Trajectory from a set of edges + 从一组边生成轨迹 - - + + CmdRobotExportKukaCompact - - Robot - 机器人 + + Robot + 机器人 - Kuka compact subroutine... - Kuka压缩子例程... + + Kuka compact subroutine... + Kuka压缩子例程... - Export the trajectory as a compact KRL subroutine. - 导出轨迹为压缩 KRL 子例程. + + Export the trajectory as a compact KRL subroutine. + 导出轨迹为压缩 KRL 子例程. - - + + CmdRobotExportKukaFull - Robot - 机器人 + + Robot + 机器人 - Kuka full subroutine... - Kuka完整子例程... + + Kuka full subroutine... + Kuka完整子例程... - Export the trajectory as a full KRL subroutine. - 导出轨迹为完整 KRL 子例程. + + Export the trajectory as a full KRL subroutine. + 导出轨迹为完整 KRL 子例程. - - + + CmdRobotInsertKukaIR125 - - Robot - 机器人 + + Robot + 机器人 - Kuka IR125 - Kuka IR125 + + Kuka IR125 + Kuka IR125 - Insert a Kuka IR125 into the document. - 将Kuka IR125导入文档. + + Insert a Kuka IR125 into the document. + 将Kuka IR125导入文档. - - + + CmdRobotInsertKukaIR16 - Robot - 机器人 + + Robot + 机器人 - Kuka IR16 - Kuka IR16 + + Kuka IR16 + Kuka IR16 - Insert a Kuka IR16 into the document. - 将Kuka IR16导入文档. + + Insert a Kuka IR16 into the document. + 将Kuka IR16导入文档. - - + + CmdRobotInsertKukaIR210 - Robot - 机器人 + + Robot + 机器人 - Kuka IR210 - Kuka IR210 + + Kuka IR210 + Kuka IR210 - Insert a Kuka IR210 into the document. - 将Kuka IR210导入文档. + + Insert a Kuka IR210 into the document. + 将Kuka IR210导入文档. - - + + CmdRobotInsertKukaIR500 - Robot - 机器人 + + Robot + 机器人 - Kuka IR500 - Kuka IR500 + + Kuka IR500 + Kuka IR500 - Insert a Kuka IR500 into the document. - 将Kuka IR500导入文档. + + Insert a Kuka IR500 into the document. + 将Kuka IR500导入文档. - - + + CmdRobotInsertWaypoint - - Robot - 机器人 + + Robot + 机器人 - Insert in trajectory - 在轨迹中插入 + + Insert in trajectory + 在轨迹中插入 - Insert robot Tool location into trajectory - 导入机器人工具位置到轨迹 + + Insert robot Tool location into trajectory + 导入机器人工具位置到轨迹 - - + + CmdRobotInsertWaypointPreselect - Robot - 机器人 + + Robot + 机器人 - Insert in trajectory - 在轨迹中插入 + + Insert in trajectory + 在轨迹中插入 - Insert preselection position into trajectory (W) - 预选位置插入轨迹(W) + + Insert preselection position into trajectory (W) + 预选位置插入轨迹(W) - - + + CmdRobotRestoreHomePos - - Robot - 机器人 + + Robot + 机器人 - Move to home - 移动到初始 + + + Move to home + 移动到初始 - - + + CmdRobotSetDefaultOrientation - - Robot - 机器人 + + Robot + 机器人 - Set default orientation - 设置默认方向 + + Set default orientation + 设置默认方向 - set the default orientation for subsequent commands for waypoint creation - 为后续创建路径点命令设置默认方向 + + set the default orientation for subsequent commands for waypoint creation + 为后续创建路径点命令设置默认方向 - - + + CmdRobotSetDefaultValues - Robot - 机器人 + + Robot + 机器人 - Set default values - 设置默认值 + + Set default values + 设置默认值 - set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation - 为后续创建路径点命令设置默认速度,加速度和连续性 + + set the default values for speed, acceleration and continuity for subsequent commands of waypoint creation + 为后续创建路径点命令设置默认速度,加速度和连续性 - - + + CmdRobotSetHomePos - - Robot - 机器人 + + Robot + 机器人 - Set the home position - 设置初始位置 + + + Set the home position + 设置初始位置 - - + + CmdRobotSimulate - Robot - 机器人 + + Robot + 机器人 - Simulate a trajectory - 模拟轨迹 + + Simulate a trajectory + 模拟轨迹 - Run a simulation on a trajectory - 在轨迹上模拟 + + Run a simulation on a trajectory + 在轨迹上模拟 - - + + CmdRobotTrajectoryCompound - - Robot - 机器人 + + Robot + 机器人 - Trajectory compound... - 复合轨迹... + + Trajectory compound... + 复合轨迹... - Group and connect some trajectories to one - 将轨迹组合并连接成一个 + + Group and connect some trajectories to one + 将轨迹组合并连接成一个 - - + + CmdRobotTrajectoryDressUp - Robot - 机器人 + + Robot + 机器人 - Dress up trajectory... - 修饰轨迹... + + Dress up trajectory... + 修饰轨迹... - Create a dress up object which overide som aspects of a trajectory - 为轨迹重载创建一个修饰对象 + + Create a dress up object which overide som aspects of a trajectory + 为轨迹重载创建一个修饰对象 - - + + Gui::TaskView::TaskWatcherCommands - - Trajectory tools - 轨迹工具 + + Trajectory tools + 轨迹工具 - Robot tools - 机器人工具 + + Robot tools + 机器人工具 - Insert Robot - 插入机器人 + + Insert Robot + 插入机器人 - - + + QObject - - Wrong selection - 选择错误 + + + + + + + + + + + + Wrong selection + 选择错误 - Select one Robot and one Trajectory object. - 选择一个机器人和一个轨迹对象. + + + + + + Select one Robot and one Trajectory object. + 选择一个机器人和一个轨迹对象. - Trajectory not valid - 无效轨迹 + + Trajectory not valid + 无效轨迹 - You need at least two way points in a trajectory to simulate. - 你至少需要两个路径点以进行轨迹模拟. + + You need at least two way points in a trajectory to simulate. + 你至少需要两个路径点以进行轨迹模拟. - - KRL file(*.src) - KRL文件(*.src) + + + KRL file(*.src) + KRL文件(*.src) - All Files (*.*) - 所有文件(*.*) + + + All Files (*.*) + 所有文件(*.*) - Export program - 导出程序 + + + Export program + 导出程序 - - Select one robot and one shape or VRML object. - 选择一个机器人和一个形状或VRML对象. + + Select one robot and one shape or VRML object. + 选择一个机器人和一个形状或VRML对象. - - No preselection - 无预选 + + No preselection + 无预选 - You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. - 您必须悬停鼠标于(预选)几何体以使用该命令.详情请参考文档. + + You have to hover above a geometry (Preselection) with the mouse to use this command. See documentation for details. + 您必须悬停鼠标于(预选)几何体以使用该命令.详情请参考文档. - - Select one Robot to set home postion - 选中一个机器人并设置初始位置 + + Select one Robot to set home postion + 选中一个机器人并设置初始位置 - Select one Robot - 选择一个机器人 + + Select one Robot + 选择一个机器人 - - Select one Trajectory object. - 选择一个轨迹对象. + + + Select one Trajectory object. + 选择一个轨迹对象. - set default speed - 设置默认速度 + + set default speed + 设置默认速度 - speed: (e.g. 1 m/s or 3 cm/s) - 速度: (如 1 m/s 或 3 cm/s) + + speed: (e.g. 1 m/s or 3 cm/s) + 速度: (如 1 m/s 或 3 cm/s) - set default continuity - 设置默认连续性 + + set default continuity + 设置默认连续性 - continuous ? - 连续的? + + continuous ? + 连续的? - set default acceleration - 设置默认加速度 + + set default acceleration + 设置默认加速度 - acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) - 加速度: (如 1 m/s^2 或 3 cm/s^2) + + acceleration: (e.g. 1 m/s^2 or 3 cm/s^2) + 加速度: (如 1 m/s^2 或 3 cm/s^2) - Select the Trajectory which you want to dress up. - 选择您要遵循的轨迹. + + Select the Trajectory which you want to dress up. + 选择您要遵循的轨迹. - - No robot files installed - 未安装机器人文件 + + No robot files installed + 未安装机器人文件 - Please visit %1 and copy the files to %2 - 请访问 %1 并复制文件到 %2 + + Please visit %1 and copy the files to %2 + 请访问 %1 并复制文件到 %2 - - + + RobotGui::DlgTrajectorySimulate - - Simulation - 模拟 + + Simulation + 模拟 - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - Type - 类型 + + Type + 类型 - Name - 名称 + + Name + 名称 - C - C + + C + C - V - V + + V + V - A - A + + A + A - - + + RobotGui::TaskEdge2TracParameter - - TaskEdge2TracParameter - 边转轨迹任务参数 + + TaskEdge2TracParameter + 边转轨迹任务参数 - - + + RobotGui::TaskRobot6Axis - - Form - 窗体 + + Form + 窗体 - A1 - A1 + + A1 + A1 - A2 - A2 + + A2 + A2 - A3 - A3 + + A3 + A3 - A4 - A4 + + A4 + A4 - A5 - A5 + + A5 + A5 - A6 - A6 + + A6 + A6 - TCP: (200.23,300.23,400.23,234,343,343) - TCP: (200.23,300.23,400.23,234,343,343) + + TCP: (200.23,300.23,400.23,234,343,343) + TCP: (200.23,300.23,400.23,234,343,343) - Tool: (0,0,400,0,0,0) - 工具:(0,0,400,0,0,0) + + Tool: (0,0,400,0,0,0) + 工具:(0,0,400,0,0,0) - ... - ... + + ... + ... - - TaskRobot6Axis - 机器人6轴任务 + + TaskRobot6Axis + 机器人6轴任务 - - + + RobotGui::TaskRobotControl - - TaskRobotControl - 任务机器人控制 + + TaskRobotControl + 任务机器人控制 - - + + RobotGui::TaskRobotMessages - - TaskRobotMessages - 机器人信息任务 + + TaskRobotMessages + 机器人信息任务 - - + + RobotGui::TaskTrajectory - - Form - 窗体 + + Form + 窗体 - |< - |< + + |< + |< - < - < + + < + < - || - || + + || + || - |> - |> + + |> + |> - > - > + + > + > - >| - >| + + >| + >| - % - % + + % + % - 10 ms - 10 ms + + 10 ms + 10 ms - 50 ms - 50 ms + + 50 ms + 50 ms - 100 ms - 100 ms + + 100 ms + 100 ms - 500 ms - 500 ms + + 500 ms + 500 ms - 1 s - 1 s + + 1 s + 1 s - Pos: (200.23, 300.23, 400.23, 234, 343 ,343) - 位置: (200.23, 300.23, 400.23, 234, 343 ,343) + + Pos: (200.23, 300.23, 400.23, 234, 343 ,343) + 位置: (200.23, 300.23, 400.23, 234, 343 ,343) - Type - 类型 + + Type + 类型 - Name - 名称 + + Name + 名称 - C - C + + C + C - V - V + + V + V - A - A + + A + A - - Trajectory - 轨迹 + + Trajectory + 轨迹 - - + + RobotGui::TaskTrajectoryDressUpParameter - - Dress Up Parameter - 修饰参数 + + Dress Up Parameter + 修饰参数 - - + + TaskEdge2TracParameter - - Form - 窗体 + + Form + 窗体 - Hide / Show - 隐藏/显示 + + Hide / Show + 隐藏/显示 - Edges: 0 - 边:0 + + Edges: 0 + 边:0 - Cluster: 0 - 集群:0 + + Cluster: 0 + 集群:0 - Sizing Value: - 调整大小的值: + + Sizing Value: + 调整大小的值: - Use orientation of edge - 使用边缘的方向 + + Use orientation of edge + 使用边缘的方向 - TaskEdge2TracParameter - 边转轨迹任务参数 + TaskEdge2TracParameter + 边转轨迹任务参数 - - + + TaskRobot6Axis - TaskRobot6Axis - 机器人6轴任务 + TaskRobot6Axis + 机器人6轴任务 - - + + TaskRobotControl - - Form - 窗体 + + Form + 窗体 - X+ - X+ + + X+ + X+ - Y+ - Y+ + + Y+ + Y+ - Z+ - Z+ + + Z+ + Z+ - A+ - A+ + + A+ + A+ - B+ - B+ + + B+ + B+ - C+ - C+ + + C+ + C+ - X- - X- + + X- + X- - Y- - Y- + + Y- + Y- - Z- - Z- + + Z- + Z- - A- - A- + + A- + A- - B- - B- + + B- + B- - C- - C- + + C- + C- - Tool 0 - 工具 0 + + Tool 0 + 工具 0 - Tool - 工具 + + Tool + 工具 - Base 0 - 基本 0 + + Base 0 + 基本 0 - Base - 基本 + + Base + 基本 - World - 世界 + + World + 世界 + + + + 50mm / 5° + 50mm / 5° + + + + 20mm / 2° + 20mm / 2° + + + + 10mm / 1° + 10mm / 1° + + + + 5mm / 0.5° + 5mm / 0.5° + + + + 1mm / 0.1° + 1mm / 0.1° - 50mm / 5° - 50mm / 5° + TaskRobotControl + 任务机器人控制 - - 20mm / 2° - 20mm / 2° - - - 10mm / 1° - 10mm / 1° - - - 5mm / 0.5° - 5mm / 0.5° - - - 1mm / 0.1° - 1mm / 0.1° - - - TaskRobotControl - 任务机器人控制 - - - + + TaskRobotMessages - - Form - 窗体 + + Form + 窗体 - clear - 清除 + + clear + 清除 - TaskRobotMessages - 机器人信息任务 + TaskRobotMessages + 机器人信息任务 - - + + TaskTrajectory - Trajectory - 轨迹 + Trajectory + 轨迹 - - + + TaskTrajectoryDressUpParameter - - Form - 窗体 + + Form + 窗体 - Speed & Acceleration: - 速度和加速度: + + Speed & Acceleration: + 速度和加速度: - Speed: - 速度: + + Speed: + 速度: - Use - 使用 + + + Use + 使用 - Accel: - 加速: + + Accel: + 加速: - Don't change Cont - 不要更改连续 + + Don't change Cont + 不要更改连续 - Continues - 连续 + + Continues + 连续 - Discontinues - 中止 + + Discontinues + 中止 - Position and Orientation: - 位置和方向: + + Position and Orientation: + 位置和方向: - (0,0,0),(0,0,0) - (0,0,0),(0,0,0) + + (0,0,0),(0,0,0) + (0,0,0),(0,0,0) - ... - ... + + ... + ... - Don't change Position & Orientation - 不要改变位置和方向 + + Don't change Position & Orientation + 不要改变位置和方向 - Use Orientation - 使用方向 + + Use Orientation + 使用方向 - Add Position - 添加位置 + + Add Position + 添加位置 - Add Orientation - 添加定位 + + Add Orientation + 添加定位 - Dress Up Parameter - 修饰参数 + Dress Up Parameter + 修饰参数 - - + + Workbench - - Robot - 机器人 + + Robot + 机器人 - Insert Robots - 导入机器人 + + Insert Robots + 导入机器人 - &Robot - 机器人(&R) + + &Robot + 机器人(&R) - Export trajectory - 导出轨迹 + + Export trajectory + 导出轨迹 - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_af.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_af.ts index 25b2ec95d..982b18ef5 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_af.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_af.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Sketser + + Sketcher + Sketser - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Sketser + + Sketcher + Sketser - Constrain coincident - Beperk samevalling + + Constrain coincident + Beperk samevalling - Create a coincident constraint on the selected item - Skep 'n samevallende beperking op die gekose item + + Create a coincident constraint on the selected item + Skep 'n samevallende beperking op die gekose item - - + + CmdSketcherConstrainDistance - Sketcher - Sketser + + Sketcher + Sketser - Constrain distance - Beperk afstand + + Constrain distance + Beperk afstand - Fix a length of a line or the distance between a line and a vertex - Herstel 'n lynlengte of afstand tussen 'n lyn en 'n hoekpunt + + Fix a length of a line or the distance between a line and a vertex + Herstel 'n lynlengte of afstand tussen 'n lyn en 'n hoekpunt - - + + CmdSketcherConstrainDistanceX - Sketcher - Sketser + + Sketcher + Sketser - Constrain vertical distance - Constrain vertical distance + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Constrain vertical distance - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Sketser + + Sketcher + Sketser - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Constrain vertical distance - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Sketser + + Sketcher + Sketser - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Sketser + + Sketcher + Sketser - Constrain horizontally - Beperk horisontaal + + Constrain horizontally + Beperk horisontaal - Create a horizontal constraint on the selected item - Skep 'n horisontale beperking op die gekose item + + Create a horizontal constraint on the selected item + Skep 'n horisontale beperking op die gekose item - - + + CmdSketcherConstrainLock - Sketcher - Sketser + + Sketcher + Sketser - Constrain lock - Beperk sluiting + + Constrain lock + Beperk sluiting - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Sketser + + Sketcher + Sketser - Constrain parallel - Beperk parallel + + Constrain parallel + Beperk parallel - Create a parallel constraint between two lines - Skep 'n parallelle beperking tussen twee lyne + + Create a parallel constraint between two lines + Skep 'n parallelle beperking tussen twee lyne - - + + CmdSketcherConstrainPerpendicular - Sketcher - Sketser + + Sketcher + Sketser - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Sketser + + Sketcher + Sketser - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Sketser + + Sketcher + Sketser - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Sketser + + Sketcher + Sketser - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Sketser + + Sketcher + Sketser - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Sketser + + Sketcher + Sketser - Constrain vertically - Beperk vertikaal + + Constrain vertically + Beperk vertikaal - Create a vertical constraint on the selected item - Skep 'n vertikale beperking op die gekose item + + Create a vertical constraint on the selected item + Skep 'n vertikale beperking op die gekose item - - + + CmdSketcherCreateArc - - Sketcher - Sketser + + Sketcher + Sketser - Create arc - Skep boog + + Create arc + Skep boog - Create an arc in the sketch - Skep 'n boog in die skets + + Create an arc in the sketch + Skep 'n boog in die skets - - + + CmdSketcherCreateCircle - Sketcher - Sketser + + Sketcher + Sketser - Create circle - Skep sirkel + + Create circle + Skep sirkel - Create a circle in the sketch - Skep 'n sirkel in die skets + + Create a circle in the sketch + Skep 'n sirkel in die skets - - + + CmdSketcherCreateDraftLine - Sketcher - Sketser + + Sketcher + Sketser - Create draft line - Skep ontwerplyn + + Create draft line + Skep ontwerplyn - Create a draft line in the sketch - Skep 'n ontwerplyn in die skets + + Create a draft line in the sketch + Skep 'n ontwerplyn in die skets - - + + CmdSketcherCreateFillet - Sketcher - Sketser + + Sketcher + Sketser - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Sketser + + Sketcher + Sketser - Create line - Skep lyn + + Create line + Skep lyn - Create a line in the sketch - Trek 'n lyn in die skets + + Create a line in the sketch + Trek 'n lyn in die skets - - + + CmdSketcherCreatePoint - Sketcher - Sketser + + Sketcher + Sketser - Create point - Skep punt + + Create point + Skep punt - Create a point in the sketch - Skep 'n punt in die skets + + Create a point in the sketch + Skep 'n punt in die skets - - + + CmdSketcherCreatePolyline - Sketcher - Sketser + + Sketcher + Sketser - Create polyline - Skep veelvuldige segment lyn + + Create polyline + Skep veelvuldige segment lyn - Create a polyline in the sketch - Skep 'n lyn met veelvuldige segmente in die skets + + Create a polyline in the sketch + Skep 'n lyn met veelvuldige segmente in die skets - - + + CmdSketcherCreateRectangle - Sketcher - Sketser + + Sketcher + Sketser - Create rectangle - Skep reghoek + + Create rectangle + Skep reghoek - Create a rectangle in the sketch - Skep 'n reghoek in die skets + + Create a rectangle in the sketch + Skep 'n reghoek in die skets - - + + CmdSketcherCreateText - Sketcher - Sketser + + Sketcher + Sketser - Create text - Skep teks + + Create text + Skep teks - Create text in the sketch - Skep teks in die skets + + Create text in the sketch + Skep teks in die skets - - + + + CmdSketcherExternal + + + Sketcher + Sketser + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Sketser + + Sketcher + Sketser - Leave sketch - Verlaat skets + + Leave sketch + Verlaat skets - Close the editing of the sketch - Sluit af sketswysiging + + Close the editing of the sketch + Sluit af sketswysiging - - + + CmdSketcherMapSketch - Sketcher - Sketser + + Sketcher + Sketser - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Sketser + + Sketcher + Sketser - Create sketch - Skep skets + + Create sketch + Skep skets - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Skep 'n nuwe skets + Create a new sketch + Skep 'n nuwe skets - - + + CmdSketcherNewSketchSF - Sketcher - Sketser + Sketcher + Sketser - Sketchflat sketch - Sketsplat skets + Sketchflat sketch + Sketsplat skets - Create a new sketchflat sketch by starting externel editor - Skep 'n nuwe sketsplat skets met 'n eksterne program + Create a new sketchflat sketch by starting externel editor + Skep 'n nuwe sketsplat skets met 'n eksterne program - - + + CmdSketcherToggleConstruction - - Sketcher - Sketser + + Sketcher + Sketser - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Sketser + + Sketcher + Sketser - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Sketser + + Sketcher + Sketser - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Voorkoms + + Appearance + Voorkoms - - + + QObject - - Wrong selection - Verkeerde keuse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Verkeerde keuse - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Kies 'n rand in die skets. + + + Select an edge from the sketch. + Kies 'n rand in die skets. - Double constraint - Dubbele beperking + + + Double constraint + Dubbele beperking - The selected edge has already a horizontal constraint! - Die gekose rand het reeds 'n horisontale beperking! + + + The selected edge has already a horizontal constraint! + Die gekose rand het reeds 'n horisontale beperking! - Impossible constraint - Onmoontlike beperking + + + + + + + Impossible constraint + Onmoontlike beperking - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - Die gekose rand het reeds 'n vertikale beperking! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + Die gekose rand het reeds 'n vertikale beperking! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Kies hoekpunte in die skets. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Kies presies twee hoekpunte uit die skets. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Kies hoekpunte in die skets. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Kies presies twee hoekpunte uit die skets. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Kies presies een lyn in die skets. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Kies twee lyne in die skets. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Kies presies twee lyne in die skets. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Wysig skets + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - 'n Dialoog is reeds oop in die taakpaneel + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Wil jy hierdie dialoog afsluit? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Verskeie onderelemente gekies + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Jy moet een vlak kies as 'n stut vir die skets! + + Sketch axes cannot be used in equality constraints + - No support face selected - Geen stutvlak gekies nie + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Jy moet 'n vlak kies om die skets mee te stut! + + Cannot add a constraint between external geometries! + - No planar support - Geen tekenvlak as stut + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - Jy benodig 'n tekenvlak as 'n stut vir die skets! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Kies presies een lyn in die skets. - - + + Select two lines from the sketch. + Kies twee lyne in die skets. + + + Select exactly two lines from the sketch. + Kies presies twee lyne in die skets. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + Wysig skets + + + + A dialog is already open in the task panel + 'n Dialoog is reeds oop in die taakpaneel + + + + Do you want to close this dialog? + Wil jy hierdie dialoog afsluit? + + + + Several sub-elements selected + Verskeie onderelemente gekies + + + + You have to select a single face as support for a sketch! + Jy moet een vlak kies as 'n stut vir die skets! + + + + No support face selected + Geen stutvlak gekies nie + + + + You have to select a face as support for a sketch! + Jy moet 'n vlak kies om die skets mee te stut! + + + + No planar support + Geen tekenvlak as stut + + + + You need a planar face as support for a sketch! + Jy benodig 'n tekenvlak as 'n stut vir die skets! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - XY-Plane + XY-Plane + XY-Plane - XZ-Plane - XZ-Plane + XZ-Plane + XZ-Plane - YZ-Plane - YZ-Plane + YZ-Plane + YZ-Plane - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Voeg datum in + + Insert datum + Voeg datum in - datum: - datum: + + datum: + datum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + XY-Plane + + + + XZ-Plane + XZ-Plane + + + + YZ-Plane + YZ-Plane + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Vorm + + Form + Vorm - Filter: - Filter: + + Filter: + Filter: - All - Almal + + All + Almal - Normal - Normaallyn + + Normal + Normaallyn - Datums - Datums + + Datums + Datums - Named - Benoem + + Named + Benoem - - Constraints - Beperkings + + Constraints + Beperkings - - + + SketcherGui::TaskSketcherGeneral - - Form - Vorm + + Form + Vorm - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Onopgelos + Unsolved + Onopgelos - Grid Snap - Roosternetaanhegting + Grid Snap + Roosternetaanhegting - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - automatiese beperkinge + auto constraints + automatiese beperkinge - - Edit controls - Wysigingskontrole + + Edit controls + Wysigingskontrole - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Beperkings + Constraints + Beperkings - - + + TaskSketcherCreateCommands - Appearance - Voorkoms + Appearance + Voorkoms - - + + TaskSketcherGeneral - Edit controls - Wysigingskontrole + Edit controls + Wysigingskontrole - - + + TaskSketcherMessages - - Form - Vorm + + Form + Vorm - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Sketser + + Sketcher + Sketser - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Sketsvorms + Sketcher geoms + Sketsvorms - Sketcher constraints - Sketser beperkings + + Sketcher constraints + Sketser beperkings - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_de.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_de.ts index 406f8292e..b3c47acda 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_de.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_de.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Skizze + + Sketcher + Skizze - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Skizze + + Sketcher + Skizze - Constrain coincident - Koinzidenz erzwingen + + Constrain coincident + Koinzidenz erzwingen - Create a coincident constraint on the selected item - Eine Koinzidenzbeschränkung für das gewählte Element setzen + + Create a coincident constraint on the selected item + Eine Koinzidenzbeschränkung für das gewählte Element setzen - - + + CmdSketcherConstrainDistance - Sketcher - Skizze + + Sketcher + Skizze - Constrain distance - Distanz einschränken + + Constrain distance + Distanz einschränken - Fix a length of a line or the distance between a line and a vertex - Die Länge einer Linie oder den Abstand einer Linie und eines Vertex festlegen + + Fix a length of a line or the distance between a line and a vertex + Die Länge einer Linie oder den Abstand einer Linie und eines Vertex festlegen - - + + CmdSketcherConstrainDistanceX - Sketcher - Skizze + + Sketcher + Skizze - Constrain vertical distance - Constrain vertical distance + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Constrain vertical distance - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Skizze + + Sketcher + Skizze - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Constrain vertical distance - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Skizze + + Sketcher + Skizze - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Skizze + + Sketcher + Skizze - Constrain horizontally - Horizontal einschränken + + Constrain horizontally + Horizontal einschränken - Create a horizontal constraint on the selected item - Eine horizontale Beschränkung für das gewählte Element setzen + + Create a horizontal constraint on the selected item + Eine horizontale Beschränkung für das gewählte Element setzen - - + + CmdSketcherConstrainLock - Sketcher - Skizze + + Sketcher + Skizze - Constrain lock - Sperren + + Constrain lock + Sperren - Create a lock constraint on the selected item - Eine Sperrung für das gewählte Element setzen + + Create a lock constraint on the selected item + Eine Sperrung für das gewählte Element setzen - - + + CmdSketcherConstrainParallel - Sketcher - Skizze + + Sketcher + Skizze - Constrain parallel - Parallelität erzwingen + + Constrain parallel + Parallelität erzwingen - Create a parallel constraint between two lines - Parallelität zwischen zwei Geraden erzwingen + + Create a parallel constraint between two lines + Parallelität zwischen zwei Geraden erzwingen - - + + CmdSketcherConstrainPerpendicular - Sketcher - Skizze + + Sketcher + Skizze - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Skizze + + Sketcher + Skizze - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Skizze + + Sketcher + Skizze - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Skizze + + Sketcher + Skizze - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Skizze + + Sketcher + Skizze - Constrain tangent - Tangente setzen + + Constrain tangent + Tangente setzen - Create a tangent constraint between two entities - Tangente zwischen zwei Elementen erzwingen + + Create a tangent constraint between two entities + Tangente zwischen zwei Elementen erzwingen - - + + CmdSketcherConstrainVertical - Sketcher - Skizze + + Sketcher + Skizze - Constrain vertically - Vertikal einschränken + + Constrain vertically + Vertikal einschränken - Create a vertical constraint on the selected item - Eine vertikale Beschränkung für das gewählte Element setzen + + Create a vertical constraint on the selected item + Eine vertikale Beschränkung für das gewählte Element setzen - - + + CmdSketcherCreateArc - - Sketcher - Skizze + + Sketcher + Skizze - Create arc - Bogen erstellen + + Create arc + Bogen erstellen - Create an arc in the sketch - Bogen in der Skizze erstellen + + Create an arc in the sketch + Bogen in der Skizze erstellen - - + + CmdSketcherCreateCircle - Sketcher - Skizze + + Sketcher + Skizze - Create circle - Kreis erstellen + + Create circle + Kreis erstellen - Create a circle in the sketch - Kreis in der Skizze erstellen + + Create a circle in the sketch + Kreis in der Skizze erstellen - - + + CmdSketcherCreateDraftLine - Sketcher - Skizze + + Sketcher + Skizze - Create draft line - Entwurfslinie erstellen + + Create draft line + Entwurfslinie erstellen - Create a draft line in the sketch - Eine Entwurfslinie in der Skizze erstellen + + Create a draft line in the sketch + Eine Entwurfslinie in der Skizze erstellen - - + + CmdSketcherCreateFillet - Sketcher - Skizze + + Sketcher + Skizze - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between to lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between to lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Skizze + + Sketcher + Skizze - Create line - Linie erstellen + + Create line + Linie erstellen - Create a line in the sketch - Linie in der Skizze erstellen + + Create a line in the sketch + Linie in der Skizze erstellen - - + + CmdSketcherCreatePoint - Sketcher - Skizze + + Sketcher + Skizze - Create point - Punkt erstellen + + Create point + Punkt erstellen - Create a point in the sketch - Punkt in der Skizze erstellen + + Create a point in the sketch + Punkt in der Skizze erstellen - - + + CmdSketcherCreatePolyline - Sketcher - Skizze + + Sketcher + Skizze - Create polyline - Linienzug erstellen + + Create polyline + Linienzug erstellen - Create a polyline in the sketch - Linienzug in der Skizze erstellen + + Create a polyline in the sketch + Linienzug in der Skizze erstellen - - + + CmdSketcherCreateRectangle - Sketcher - Skizze + + Sketcher + Skizze - Create rectangle - Rechteck erstellen + + Create rectangle + Rechteck erstellen - Create a rectangle in the sketch - Rechteck in der Skizze erstellen + + Create a rectangle in the sketch + Rechteck in der Skizze erstellen - - + + CmdSketcherCreateText - Sketcher - Skizze + + Sketcher + Skizze - Create text - Text erstellen + + Create text + Text erstellen - Create text in the sketch - Text in der Skizze erstellen + + Create text in the sketch + Text in der Skizze erstellen - - + + + CmdSketcherExternal + + + Sketcher + Skizze + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Skizze + + Sketcher + Skizze - Leave sketch - Skizze verlassen + + Leave sketch + Skizze verlassen - Close the editing of the sketch - Bearbeitung der Skizze beenden + + Close the editing of the sketch + Bearbeitung der Skizze beenden - - + + CmdSketcherMapSketch - Sketcher - Skizze + + Sketcher + Skizze - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Skizze + + Sketcher + Skizze - Create sketch - Skizze erstellen + + Create sketch + Skizze erstellen - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Neue Skizze erstellen + Create a new sketch + Neue Skizze erstellen - - + + CmdSketcherNewSketchSF - Sketcher - Skizze + Sketcher + Skizze - Sketchflat sketch - Sketchflat sketch + Sketchflat sketch + Sketchflat sketch - Create a new sketchflat sketch by starting externel editor - Neue Sketchflat-Skizze in externem Editor erstellen + Create a new sketchflat sketch by starting externel editor + Neue Sketchflat-Skizze in externem Editor erstellen - - + + CmdSketcherToggleConstruction - - Sketcher - Skizze + + Sketcher + Skizze - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Skizze + + Sketcher + Skizze - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Skizze + + Sketcher + Skizze - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Erscheinungsbild + + Appearance + Erscheinungsbild - - + + QObject - - Wrong selection - Falsche Auswahl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Falsche Auswahl - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Wählen Sie eine Kante aus der Skizze. + + + Select an edge from the sketch. + Wählen Sie eine Kante aus der Skizze. - Double constraint - Doppelbedingung + + + Double constraint + Doppelbedingung - The selected edge has already a horizontal constraint! - Die gewählte Kante hat bereits eine Horizontal-Beschränkung! + + + The selected edge has already a horizontal constraint! + Die gewählte Kante hat bereits eine Horizontal-Beschränkung! - Impossible constraint - Nicht erfüllbare Bedingung + + + + + + + Impossible constraint + Nicht erfüllbare Bedingung - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - Die gewählte Kante hat bereits eine Vertikal-Beschränkung! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Wählen Sie Elemente aus der Skizze aus. + + + The selected edge has already a vertical constraint! + Die gewählte Kante hat bereits eine Vertikal-Beschränkung! - Select exactly one entity from the sketch. - Wählen Sie genau ein Element aus der Skizze aus. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Wählen Sie Vertexe aus der Skizze aus. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Wählen Sie genau zwei Vertexe aus der Skizze aus. + + Select entities from the sketch. + Wählen Sie Elemente aus der Skizze aus. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Wählen Sie genau ein Element aus der Skizze aus. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Wählen Sie Vertexe aus der Skizze aus. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Wählen Sie genau zwei Vertexe aus der Skizze aus. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Wählen Sie genau einen Vertex aus der Skizze aus. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Wählen Sie zwei Linien aus der Skizze aus. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Wählen Sie genau zwei Linien aus der Skizze aus. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Wählen Sie zwei Elemente aus der Skizze aus. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Wählen Sie genau zwei Elemente aus der Skizze aus. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Skizze bearbeiten + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - Ein Dialog im Arbeitspanel ist bereits geöffnet + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Möchten Sie dieses Dialogfeld schließen? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Mehrere Unter-Elemente selektiert + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Sie müssen eine einzelne Fläche als Auflage für eine Skizze auswählen! + + Sketch axes cannot be used in equality constraints + - No support face selected - Keine Fläche als Auflage selektiert + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Sie müssen eine Fläche als Auflage für eine Skizze auswählen! + + Cannot add a constraint between external geometries! + - No planar support - Keine ebene Auflage + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - Sie benötigen eine ebene Fläche als Auflage für eine Skizze! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Wählen Sie genau einen Vertex aus der Skizze aus. - - + + Select two lines from the sketch. + Wählen Sie zwei Linien aus der Skizze aus. + + + Select exactly two lines from the sketch. + Wählen Sie genau zwei Linien aus der Skizze aus. + + + + + Select two entities from the sketch. + Wählen Sie zwei Elemente aus der Skizze aus. + + + + + + + Select exactly two entities from the sketch. + Wählen Sie genau zwei Elemente aus der Skizze aus. + + + + Edit sketch + Skizze bearbeiten + + + + A dialog is already open in the task panel + Ein Dialog im Arbeitspanel ist bereits geöffnet + + + + Do you want to close this dialog? + Möchten Sie dieses Dialogfeld schließen? + + + + Several sub-elements selected + Mehrere Unter-Elemente selektiert + + + + You have to select a single face as support for a sketch! + Sie müssen eine einzelne Fläche als Auflage für eine Skizze auswählen! + + + + No support face selected + Keine Fläche als Auflage selektiert + + + + You have to select a face as support for a sketch! + Sie müssen eine Fläche als Auflage für eine Skizze auswählen! + + + + No planar support + Keine ebene Auflage + + + + You need a planar face as support for a sketch! + Sie benötigen eine ebene Fläche als Auflage für eine Skizze! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - XY-Ebene + XY-Plane + XY-Ebene - XZ-Plane - XZ-Ebene + XZ-Plane + XZ-Ebene - YZ-Plane - YZ-Ebene + YZ-Plane + YZ-Ebene - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Bezug einfügen + + Insert datum + Bezug einfügen - datum: - Bezug: + + datum: + Bezug: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + XY-Ebene + + + + XZ-Plane + XZ-Ebene + + + + YZ-Plane + YZ-Ebene + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Formular + + Form + Formular - Filter: - Filter: + + Filter: + Filter: - All - Alle + + All + Alle - Normal - Normal + + Normal + Normal - Datums - Bezüge + + Datums + Bezüge - Named - Genannt + + Named + Genannt - - Constraints - Einschränkungen + + Constraints + Einschränkungen - - + + SketcherGui::TaskSketcherGeneral - - Form - Formular + + Form + Formular - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Ungelöst + Unsolved + Ungelöst - Grid Snap - Am Raster ausrichten + Grid Snap + Am Raster ausrichten - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.2 mm - 0,2 mm + 0.2 mm + 0,2 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - Automatische Beschränkungen + auto constraints + Automatische Beschränkungen - - Edit controls - Bedienelemente bearbeiten + + Edit controls + Bedienelemente bearbeiten - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Einschränkungen + Constraints + Einschränkungen - - + + TaskSketcherCreateCommands - Appearance - Erscheinungsbild + Appearance + Erscheinungsbild - - + + TaskSketcherGeneral - Edit controls - Bedienelemente bearbeiten + Edit controls + Bedienelemente bearbeiten - - + + TaskSketcherMessages - - Form - Formular + + Form + Formular - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Skizze + + Sketcher + Skizze - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Skizzen-Geometrien + Sketcher geoms + Skizzen-Geometrien - Sketcher constraints - Skizzen-Beschränkungen + + Sketcher constraints + Skizzen-Beschränkungen - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_es.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_es.ts index 08aca70c6..401671b23 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_es.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_es.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain coincident - Restringir coincidente + + Constrain coincident + Restringir coincidente - Create a coincident constraint on the selected item - Crear una restricción coincidente en el elemento seleccionado + + Create a coincident constraint on the selected item + Crear una restricción coincidente en el elemento seleccionado - - + + CmdSketcherConstrainDistance - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain distance - Restringir la distancia + + Constrain distance + Restringir la distancia - Fix a length of a line or the distance between a line and a vertex - Fijar una longitud de una línea o la distancia entre una línea y un vértice + + Fix a length of a line or the distance between a line and a vertex + Fijar una longitud de una línea o la distancia entre una línea y un vértice - - + + CmdSketcherConstrainDistanceX - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain vertical distance - Constrain vertical distance + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Constrain vertical distance - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Constrain vertical distance - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain horizontally - Restringir horizontalmente + + Constrain horizontally + Restringir horizontalmente - Create a horizontal constraint on the selected item - Crear una restricción horizontal en el elemento seleccionado + + Create a horizontal constraint on the selected item + Crear una restricción horizontal en el elemento seleccionado - - + + CmdSketcherConstrainLock - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain lock - Restricción de bloqueo + + Constrain lock + Restricción de bloqueo - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain parallel - Restringir paralelo + + Constrain parallel + Restringir paralelo - Create a parallel constraint between two lines - Crear una restricción entre dos líneas paralelas + + Create a parallel constraint between two lines + Crear una restricción entre dos líneas paralelas - - + + CmdSketcherConstrainPerpendicular - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Croquizador + + Sketcher + Croquizador - Constrain vertically - Restringir verticalmente + + Constrain vertically + Restringir verticalmente - Create a vertical constraint on the selected item - Crear una restricción vertical en el elemento seleccionado + + Create a vertical constraint on the selected item + Crear una restricción vertical en el elemento seleccionado - - + + CmdSketcherCreateArc - - Sketcher - Croquizador + + Sketcher + Croquizador - Create arc - Crear arco + + Create arc + Crear arco - Create an arc in the sketch - Crea un arco en el croquis + + Create an arc in the sketch + Crea un arco en el croquis - - + + CmdSketcherCreateCircle - Sketcher - Croquizador + + Sketcher + Croquizador - Create circle - Crear circunferencia + + Create circle + Crear circunferencia - Create a circle in the sketch - Crea una circunferencia en el croquis + + Create a circle in the sketch + Crea una circunferencia en el croquis - - + + CmdSketcherCreateDraftLine - Sketcher - Croquizador + + Sketcher + Croquizador - Create draft line - Crear línea auxiliar + + Create draft line + Crear línea auxiliar - Create a draft line in the sketch - Crea una línea auxiliar en el croquis + + Create a draft line in the sketch + Crea una línea auxiliar en el croquis - - + + CmdSketcherCreateFillet - Sketcher - Croquizador + + Sketcher + Croquizador - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Croquizador + + Sketcher + Croquizador - Create line - Crear línea + + Create line + Crear línea - Create a line in the sketch - Crea una línea en el croquis + + Create a line in the sketch + Crea una línea en el croquis - - + + CmdSketcherCreatePoint - Sketcher - Croquizador + + Sketcher + Croquizador - Create point - Crear punto + + Create point + Crear punto - Create a point in the sketch - Crea un punto en el croquis + + Create a point in the sketch + Crea un punto en el croquis - - + + CmdSketcherCreatePolyline - Sketcher - Croquizador + + Sketcher + Croquizador - Create polyline - Crear polilínea + + Create polyline + Crear polilínea - Create a polyline in the sketch - Crea una polilínea en el croquis + + Create a polyline in the sketch + Crea una polilínea en el croquis - - + + CmdSketcherCreateRectangle - Sketcher - Croquizador + + Sketcher + Croquizador - Create rectangle - Crear rectángulo + + Create rectangle + Crear rectángulo - Create a rectangle in the sketch - Crea un rectángulo en el croquis + + Create a rectangle in the sketch + Crea un rectángulo en el croquis - - + + CmdSketcherCreateText - Sketcher - Croquizador + + Sketcher + Croquizador - Create text - Crear texto + + Create text + Crear texto - Create text in the sketch - Crear texto en el croquis + + Create text in the sketch + Crear texto en el croquis - - + + + CmdSketcherExternal + + + Sketcher + Croquizador + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Croquizador + + Sketcher + Croquizador - Leave sketch - Salir del croquis + + Leave sketch + Salir del croquis - Close the editing of the sketch - Cierra la edición del croquis + + Close the editing of the sketch + Cierra la edición del croquis - - + + CmdSketcherMapSketch - Sketcher - Croquizador + + Sketcher + Croquizador - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Croquizador + + Sketcher + Croquizador - Create sketch - Crear croquis + + Create sketch + Crear croquis - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Crea un nuevo croquis + Create a new sketch + Crea un nuevo croquis - - + + CmdSketcherNewSketchSF - Sketcher - Croquizador + Sketcher + Croquizador - Sketchflat sketch - Bosquejo 'sketchflat' + Sketchflat sketch + Bosquejo 'sketchflat' - Create a new sketchflat sketch by starting externel editor - Crear un bosquejo sketchflat nuevo por medio de editor externo + Create a new sketchflat sketch by starting externel editor + Crear un bosquejo sketchflat nuevo por medio de editor externo - - + + CmdSketcherToggleConstruction - - Sketcher - Croquizador + + Sketcher + Croquizador - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Croquizador + + Sketcher + Croquizador - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Croquizador + + Sketcher + Croquizador - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Aspecto + + Appearance + Aspecto - - + + QObject - - Wrong selection - Selección incorrecta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Selección incorrecta - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Seleccione una arista del dibujo. + + + Select an edge from the sketch. + Seleccione una arista del dibujo. - Double constraint - Restricción doble + + + Double constraint + Restricción doble - The selected edge has already a horizontal constraint! - ¡La arista seleccionada ya tiene una restricción horizontal! + + + The selected edge has already a horizontal constraint! + ¡La arista seleccionada ya tiene una restricción horizontal! - Impossible constraint - Restricción imposible + + + + + + + Impossible constraint + Restricción imposible - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - El borde seleccionado ya tiene una restricción vertical! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + El borde seleccionado ya tiene una restricción vertical! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Seleccione vértices del dibujo. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Seleccione exactamente dos vértices del dibujo. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Seleccione vértices del dibujo. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Seleccione exactamente dos vértices del dibujo. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Seleccione exactamente una línea del dibujo. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Seleccione dos líneas del dibujo. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Seleccione exactamente dos líneas del dibujo. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Editar boceto + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - Un cuadro de diálogo ya está abierto en el panel de tareas + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - ¿Desea cerrar esta ventana? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Varios sub-elementos seleccionados + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - ¡Tiene que seleccionar una sola cara como soporte para un dibujo! + + Sketch axes cannot be used in equality constraints + - No support face selected - No se ha seleccionado una cara de apoyo + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - ¡Tiene que seleccionar una cara como apoyo para un esbozo! + + Cannot add a constraint between external geometries! + - No planar support - No hay soporte plano + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - ¡Necesita una cara plana como apoyo para un esbozo! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Seleccione exactamente una línea del dibujo. - - + + Select two lines from the sketch. + Seleccione dos líneas del dibujo. + + + Select exactly two lines from the sketch. + Seleccione exactamente dos líneas del dibujo. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + Editar boceto + + + + A dialog is already open in the task panel + Un cuadro de diálogo ya está abierto en el panel de tareas + + + + Do you want to close this dialog? + ¿Desea cerrar esta ventana? + + + + Several sub-elements selected + Varios sub-elementos seleccionados + + + + You have to select a single face as support for a sketch! + ¡Tiene que seleccionar una sola cara como soporte para un dibujo! + + + + No support face selected + No se ha seleccionado una cara de apoyo + + + + You have to select a face as support for a sketch! + ¡Tiene que seleccionar una cara como apoyo para un esbozo! + + + + No planar support + No hay soporte plano + + + + You need a planar face as support for a sketch! + ¡Necesita una cara plana como apoyo para un esbozo! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - Plano XY + XY-Plane + Plano XY - XZ-Plane - Plano XZ + XZ-Plane + Plano XZ - YZ-Plane - Plano YZ + YZ-Plane + Plano YZ - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Insertar datos de referencia + + Insert datum + Insertar datos de referencia - datum: - Dato de referencia: + + datum: + Dato de referencia: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + Plano XY + + + + XZ-Plane + Plano XZ + + + + YZ-Plane + Plano YZ + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Formulario + + Form + Formulario - Filter: - Filtro: + + Filter: + Filtro: - All - Todo + + All + Todo - Normal - Normal + + Normal + Normal - Datums - Datos de referencia + + Datums + Datos de referencia - Named - Nombrado + + Named + Nombrado - - Constraints - Restricciones + + Constraints + Restricciones - - + + SketcherGui::TaskSketcherGeneral - - Form - Formulario + + Form + Formulario - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - No resuelto + Unsolved + No resuelto - Grid Snap - Ajustar contra cuadrícula + Grid Snap + Ajustar contra cuadrícula - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - Auto-restricciones + auto constraints + Auto-restricciones - - Edit controls - Controles de edición + + Edit controls + Controles de edición - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Restricciones + Constraints + Restricciones - - + + TaskSketcherCreateCommands - Appearance - Aspecto + Appearance + Aspecto - - + + TaskSketcherGeneral - Edit controls - Controles de edición + Edit controls + Controles de edición - - + + TaskSketcherMessages - - Form - Formulario + + Form + Formulario - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Croquizador + + Sketcher + Croquizador - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Geometría del croquis + Sketcher geoms + Geometría del croquis - Sketcher constraints - Restricciones de croquis + + Sketcher constraints + Restricciones de croquis - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fi.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fi.ts index 1711218dd..782536929 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fi.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fi.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain coincident - Samanlaisuus rajoite + + Constrain coincident + Samanlaisuus rajoite - Create a coincident constraint on the selected item - Luo samanlainen rajoite valituille kohteille + + Create a coincident constraint on the selected item + Luo samanlainen rajoite valituille kohteille - - + + CmdSketcherConstrainDistance - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain distance - Etäisyys rajoitus + + Constrain distance + Etäisyys rajoitus - Fix a length of a line or the distance between a line and a vertex - Korjaa viivan pituutta tai etäisyyttä viivan ja pisteen välillä + + Fix a length of a line or the distance between a line and a vertex + Korjaa viivan pituutta tai etäisyyttä viivan ja pisteen välillä - - + + CmdSketcherConstrainDistanceX - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain vertical distance - Constrain vertical distance + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Constrain vertical distance - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Constrain vertical distance - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain horizontally - Vaakasuora rajoite + + Constrain horizontally + Vaakasuora rajoite - Create a horizontal constraint on the selected item - Luo vaakasuora rajoite valittujen osien välille + + Create a horizontal constraint on the selected item + Luo vaakasuora rajoite valittujen osien välille - - + + CmdSketcherConstrainLock - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain lock - Rajoite lukko + + Constrain lock + Rajoite lukko - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain parallel - Rajoita yhdensuuntaiseksi + + Constrain parallel + Rajoita yhdensuuntaiseksi - Create a parallel constraint between two lines - Luo rinnakkaisuus rajoite kahden viivan välille + + Create a parallel constraint between two lines + Luo rinnakkaisuus rajoite kahden viivan välille - - + + CmdSketcherConstrainPerpendicular - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Constrain vertically - Rajoita pystysuuntaisesti + + Constrain vertically + Rajoita pystysuuntaisesti - Create a vertical constraint on the selected item - Luo pystysuora rajoite valitulle kohteelle + + Create a vertical constraint on the selected item + Luo pystysuora rajoite valitulle kohteelle - - + + CmdSketcherCreateArc - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create arc - Luo kaari + + Create arc + Luo kaari - Create an arc in the sketch - Luo kaaren luonnoksessa + + Create an arc in the sketch + Luo kaaren luonnoksessa - - + + CmdSketcherCreateCircle - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create circle - Luo ympyrä + + Create circle + Luo ympyrä - Create a circle in the sketch - Luo ympyrän luonnoksessa + + Create a circle in the sketch + Luo ympyrän luonnoksessa - - + + CmdSketcherCreateDraftLine - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create draft line - Luo vedosviiva + + Create draft line + Luo vedosviiva - Create a draft line in the sketch - Luo vedosviiva luonnokseen + + Create a draft line in the sketch + Luo vedosviiva luonnokseen - - + + CmdSketcherCreateFillet - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create line - Luo viiva + + Create line + Luo viiva - Create a line in the sketch - Luo viivan luonnoksessa + + Create a line in the sketch + Luo viivan luonnoksessa - - + + CmdSketcherCreatePoint - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create point - Luo piste + + Create point + Luo piste - Create a point in the sketch - Luo pisteen luonnoksessa + + Create a point in the sketch + Luo pisteen luonnoksessa - - + + CmdSketcherCreatePolyline - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create polyline - Luo murtoviiva + + Create polyline + Luo murtoviiva - Create a polyline in the sketch - Luo murtoviiva luonnokseen + + Create a polyline in the sketch + Luo murtoviiva luonnokseen - - + + CmdSketcherCreateRectangle - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create rectangle - Luo suorakolmio + + Create rectangle + Luo suorakolmio - Create a rectangle in the sketch - Luo suorakulmion luonnoksessa + + Create a rectangle in the sketch + Luo suorakulmion luonnoksessa - - + + CmdSketcherCreateText - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create text - Luo tekstiä + + Create text + Luo tekstiä - Create text in the sketch - Luo teksti luonnokseen + + Create text in the sketch + Luo teksti luonnokseen - - + + + CmdSketcherExternal + + + Sketcher + Lunnostelija + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Leave sketch - Poistu luonnoksesta + + Leave sketch + Poistu luonnoksesta - Close the editing of the sketch - Sulje luonnoksen muokkaus + + Close the editing of the sketch + Sulje luonnoksen muokkaus - - + + CmdSketcherMapSketch - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Create sketch - Luo luonnos + + Create sketch + Luo luonnos - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Luo uusi luonnos + Create a new sketch + Luo uusi luonnos - - + + CmdSketcherNewSketchSF - Sketcher - Lunnostelija + Sketcher + Lunnostelija - Sketchflat sketch - Sketchflat luonnos + Sketchflat sketch + Sketchflat luonnos - Create a new sketchflat sketch by starting externel editor - Luo uusi sketchflat luonnos käynnistämällä ulkoinen editori + Create a new sketchflat sketch by starting externel editor + Luo uusi sketchflat luonnos käynnistämällä ulkoinen editori - - + + CmdSketcherToggleConstruction - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Ulkoasu + + Appearance + Ulkoasu - - + + QObject - - Wrong selection - Väärä valinta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Väärä valinta - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Valitse luonnoksen reuna. + + + Select an edge from the sketch. + Valitse luonnoksen reuna. - Double constraint - Kaksinkertainen rajoite + + + Double constraint + Kaksinkertainen rajoite - The selected edge has already a horizontal constraint! - Valitulla reunalla on jo vaakasuora rajoitus! + + + The selected edge has already a horizontal constraint! + Valitulla reunalla on jo vaakasuora rajoitus! - Impossible constraint - Mahdoton rajoite + + + + + + + Impossible constraint + Mahdoton rajoite - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - Valitulla reunalla on jo pystysuora rajoite! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + Valitulla reunalla on jo pystysuora rajoite! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Valitse pisteet luonnoksesta. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Valitse kaksi pistettä luonnoksesta. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Valitse pisteet luonnoksesta. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Valitse kaksi pistettä luonnoksesta. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Valitse yksi viiva luonnoksesta. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Valitse kaksi viivaa luonnoksesta. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Valitse kaksi viivaa luonnoksesta. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Muokkaa luonnosta + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - Dialogi on jo avoinna tehtäväpaneelissa + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Haluatko sulkea tämän ikkunan? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Several sub-elements selected + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - You have to select a single face as support for a sketch! + + Sketch axes cannot be used in equality constraints + - No support face selected - No support face selected + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - You have to select a face as support for a sketch! + + Cannot add a constraint between external geometries! + - No planar support - No planar support + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - You need a planar face as support for a sketch! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Valitse yksi viiva luonnoksesta. - - + + Select two lines from the sketch. + Valitse kaksi viivaa luonnoksesta. + + + Select exactly two lines from the sketch. + Valitse kaksi viivaa luonnoksesta. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + Muokkaa luonnosta + + + + A dialog is already open in the task panel + Dialogi on jo avoinna tehtäväpaneelissa + + + + Do you want to close this dialog? + Haluatko sulkea tämän ikkunan? + + + + Several sub-elements selected + Several sub-elements selected + + + + You have to select a single face as support for a sketch! + You have to select a single face as support for a sketch! + + + + No support face selected + No support face selected + + + + You have to select a face as support for a sketch! + You have to select a face as support for a sketch! + + + + No planar support + No planar support + + + + You need a planar face as support for a sketch! + You need a planar face as support for a sketch! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - XY-Plane + XY-Plane + XY-Plane - XZ-Plane - XZ-Plane + XZ-Plane + XZ-Plane - YZ-Plane - YZ-Plane + YZ-Plane + YZ-Plane - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Lisää päiväys + + Insert datum + Lisää päiväys - datum: - päiväys: + + datum: + päiväys: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + XY-Plane + + + + XZ-Plane + XZ-Plane + + + + YZ-Plane + YZ-Plane + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Lomake + + Form + Lomake - Filter: - Suodatin: + + Filter: + Suodatin: - All - Kaikki + + All + Kaikki - Normal - Normaali + + Normal + Normaali - Datums - Päiväykset + + Datums + Päiväykset - Named - Nimetty + + Named + Nimetty - - Constraints - Rajoitteet + + Constraints + Rajoitteet - - + + SketcherGui::TaskSketcherGeneral - - Form - Lomake + + Form + Lomake - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Ratkaisematta + Unsolved + Ratkaisematta - Grid Snap - Ruudukkoon kohdistus + Grid Snap + Ruudukkoon kohdistus - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - auto constraints + auto constraints + auto constraints - - Edit controls - Muokkaa säätöjä + + Edit controls + Muokkaa säätöjä - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Rajoitteet + Constraints + Rajoitteet - - + + TaskSketcherCreateCommands - Appearance - Ulkoasu + Appearance + Ulkoasu - - + + TaskSketcherGeneral - Edit controls - Muokkaa säätöjä + Edit controls + Muokkaa säätöjä - - + + TaskSketcherMessages - - Form - Lomake + + Form + Lomake - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Lunnostelija + + Sketcher + Lunnostelija - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Luonnostelijan geometriat + Sketcher geoms + Luonnostelijan geometriat - Sketcher constraints - Sketcher constraints + + Sketcher constraints + Sketcher constraints - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fr.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fr.ts index fd6df2110..8946bc152 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fr.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_fr.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain angle - Contrainte angulaire + + Constrain angle + Contrainte angulaire - Fix the angle of a line or the angle between two lines - Fixer l'angle d'une ligne ou l'angle entre deux lignes + + Fix the angle of a line or the angle between two lines + Fixer l'angle d'une ligne ou l'angle entre deux lignes - - + + CmdSketcherConstrainCoincident - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain coincident - Contrainte coïncidente + + Constrain coincident + Contrainte coïncidente - Create a coincident constraint on the selected item - Créer une contrainte coïncidente sur les éléments sélectionnés + + Create a coincident constraint on the selected item + Créer une contrainte coïncidente sur les éléments sélectionnés - - + + CmdSketcherConstrainDistance - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain distance - Contrainte dimensionnelle + + Constrain distance + Contrainte dimensionnelle - Fix a length of a line or the distance between a line and a vertex - Fixer la longueur d'une ligne ou la distance entre une ligne et un point + + Fix a length of a line or the distance between a line and a vertex + Fixer la longueur d'une ligne ou la distance entre une ligne et un point - - + + CmdSketcherConstrainDistanceX - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain vertical distance - Contrainte distance verticale + + Constrain horizontal distance + Contrainte distance horizontale - Fix the horizontal distance between two points or line ends - Fixer la distance horizontale entre deux points ou extrémités de ligne + Constrain vertical distance + Contrainte distance verticale - - + + + Fix the horizontal distance between two points or line ends + Fixer la distance horizontale entre deux points ou extrémités de ligne + + + CmdSketcherConstrainDistanceY - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain horizontal distance - Contrainte distance horizontale + + Constrain vertical distance + Contrainte distance verticale - Fix the vertical distance between two points or line ends - Fixer la distance verticale entre deux points ou extrémités de ligne + Constrain horizontal distance + Contrainte distance horizontale - - + + + Fix the vertical distance between two points or line ends + Fixer la distance verticale entre deux points ou extrémités de ligne + + + CmdSketcherConstrainEqual - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain equal - Contrainte d'égalité + + Constrain equal + Contrainte d'égalité - Create an equality constraint between two lines or between circles and arcs - Créer une contrainte d'égalité entre deux lignes ou entre des cercles et/ou des arcs + + Create an equality constraint between two lines or between circles and arcs + Créer une contrainte d'égalité entre deux lignes ou entre des cercles et/ou des arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain horizontally - Contrainte horizontale + + Constrain horizontally + Contrainte horizontale - Create a horizontal constraint on the selected item - Créer une contrainte horizontale sur l'élément sélectionné + + Create a horizontal constraint on the selected item + Créer une contrainte horizontale sur l'élément sélectionné - - + + CmdSketcherConstrainLock - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain lock - Contrainte fixe + + Constrain lock + Contrainte fixe - Create a lock constraint on the selected item - Créer une contrainte fixe sur l'élément sélectionné + + Create a lock constraint on the selected item + Créer une contrainte fixe sur l'élément sélectionné - - + + CmdSketcherConstrainParallel - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain parallel - Contrainte parallèle + + Constrain parallel + Contrainte parallèle - Create a parallel constraint between two lines - Créer une contrainte parallèle entre deux lignes + + Create a parallel constraint between two lines + Créer une contrainte parallèle entre deux lignes - - + + CmdSketcherConstrainPerpendicular - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain perpendicular - Contrainte perpendiculaire + + Constrain perpendicular + Contrainte perpendiculaire - Create a Perpendicular constraint between two lines - Créer une contrainte perpendiculaire entre deux lignes + + Create a Perpendicular constraint between two lines + Créer une contrainte perpendiculaire entre deux lignes - - + + CmdSketcherConstrainPointOnObject - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain point onto object - Contrainte point sur objet + + Constrain point onto object + Contrainte point sur objet - Fix a point onto an object - Fixer un point sur un objet + + Fix a point onto an object + Fixer un point sur un objet - - + + CmdSketcherConstrainRadius - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain radius - Contrainte radiale + + Constrain radius + Contrainte radiale - Fix the radius of a circle or an arc - Fixer le rayon d'un cercle ou d'un arc + + Fix the radius of a circle or an arc + Fixer le rayon d'un cercle ou d'un arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain symmetrical - Contrainte symétrique + + Constrain symmetrical + Contrainte symétrique - Create an symmetry constraint between two points with respect to a line - Créer une contrainte symétrique entre deux points par rapport à une ligne + + Create an symmetry constraint between two points with respect to a line + Créer une contrainte symétrique entre deux points par rapport à une ligne - - + + CmdSketcherConstrainTangent - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain tangent - Contrainte tangente + + Constrain tangent + Contrainte tangente - Create a tangent constraint between two entities - Créer une contrainte tangente entre deux entités + + Create a tangent constraint between two entities + Créer une contrainte tangente entre deux entités - - + + CmdSketcherConstrainVertical - Sketcher - Esquisseur + + Sketcher + Esquisseur - Constrain vertically - Contrainte verticale + + Constrain vertically + Contrainte verticale - Create a vertical constraint on the selected item - Créer une contrainte verticale sur l'élément sélectionné + + Create a vertical constraint on the selected item + Créer une contrainte verticale sur l'élément sélectionné - - + + CmdSketcherCreateArc - - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create arc - Créer un arc + + Create arc + Créer un arc - Create an arc in the sketch - Créer un arc dans l'esquisse + + Create an arc in the sketch + Créer un arc dans l'esquisse - - + + CmdSketcherCreateCircle - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create circle - Créer un cercle + + Create circle + Créer un cercle - Create a circle in the sketch - Créer un cercle dans l'esquisse + + Create a circle in the sketch + Créer un cercle dans l'esquisse - - + + CmdSketcherCreateDraftLine - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create draft line - Créer une ligne de construction + + Create draft line + Créer une ligne de construction - Create a draft line in the sketch - Créer une ligne de construction dans l'esquisse + + Create a draft line in the sketch + Créer une ligne de construction dans l'esquisse - - + + CmdSketcherCreateFillet - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create fillet - Créer un congé + + Create fillet + Créer un congé - Create a fillet between two lines or at a coincident point - Créer un congé entre deux lignes ou sur un point coïncident + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Créer un congé entre deux lignes ou sur un point coïncident + + + CmdSketcherCreateLine - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create line - Créer une ligne + + Create line + Créer une ligne - Create a line in the sketch - Créer une ligne dans l'esquisse + + Create a line in the sketch + Créer une ligne dans l'esquisse - - + + CmdSketcherCreatePoint - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create point - Créer un point + + Create point + Créer un point - Create a point in the sketch - Créer un point dans l'esquisse + + Create a point in the sketch + Créer un point dans l'esquisse - - + + CmdSketcherCreatePolyline - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create polyline - Créer une polyligne + + Create polyline + Créer une polyligne - Create a polyline in the sketch - Créer une polyligne dans l'esquisse + + Create a polyline in the sketch + Créer une polyligne dans l'esquisse - - + + CmdSketcherCreateRectangle - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create rectangle - Créer un rectangle + + Create rectangle + Créer un rectangle - Create a rectangle in the sketch - Créer un rectangle dans l'esquisse + + Create a rectangle in the sketch + Créer un rectangle dans l'esquisse - - + + CmdSketcherCreateText - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create text - Insérer du texte + + Create text + Insérer du texte - Create text in the sketch - Insérer un texte dans l'esquisse + + Create text in the sketch + Insérer un texte dans l'esquisse - - + + + CmdSketcherExternal + + + Sketcher + Esquisseur + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Esquisseur + + Sketcher + Esquisseur - Leave sketch - Quitter l'esquisse + + Leave sketch + Quitter l'esquisse - Close the editing of the sketch - Sortir de l'édition de l'esquisse + + Close the editing of the sketch + Sortir de l'édition de l'esquisse - - + + CmdSketcherMapSketch - Sketcher - Esquisseur + + Sketcher + Esquisseur - Map sketch to face... - Appliquer une esquisse sur une face... + + Map sketch to face... + Appliquer une esquisse sur une face... - Map a sketch to a face - Appliquer une esquisse sur une face + + Map a sketch to a face + Appliquer une esquisse sur une face - - + + CmdSketcherNewSketch - Sketcher - Esquisseur + + Sketcher + Esquisseur - Create sketch - Créer une esquisse + + Create sketch + Créer une esquisse - Create a new or edit the selected sketch - Créer une nouvelle esquisse ou modifier l'esquisse sélectionnée + + Create a new or edit the selected sketch + Créer une nouvelle esquisse ou modifier l'esquisse sélectionnée - Create a new sketch - Créer une nouvelle esquisse + Create a new sketch + Créer une nouvelle esquisse - - + + CmdSketcherNewSketchSF - Sketcher - Esquisseur + Sketcher + Esquisseur - Sketchflat sketch - Esquisse Sketchflat + Sketchflat sketch + Esquisse Sketchflat - Create a new sketchflat sketch by starting externel editor - Créer une nouvelle esquisse Sketchflat en lançant l'éditeur externe + Create a new sketchflat sketch by starting externel editor + Créer une nouvelle esquisse Sketchflat en lançant l'éditeur externe - - + + CmdSketcherToggleConstruction - - Sketcher - Esquisseur + + Sketcher + Esquisseur - Toggle construction line - Basculer ligne de construction + + Toggle construction line + Basculer ligne de construction - Toggles the currently selected lines to/from construction mode - Bascule les lignes sélectionnées vers le/du mode de construction + + Toggles the currently selected lines to/from construction mode + Bascule les lignes sélectionnées vers le/du mode de construction - - + + CmdSketcherTrimming - - Sketcher - Esquisseur + + Sketcher + Esquisseur - Trim edge - Ajuster l'arête + + Trim edge + Ajuster l'arête - Trims an edge with respect to the picked position - Ajuste une arête par rapport à la position sélectionnée + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Ajuste une arête par rapport à la position sélectionnée + + + CmdSketcherViewSketch - - Sketcher - Esquisseur + + Sketcher + Esquisseur - View sketch - Vue de l'esquisse + + View sketch + Vue de l'esquisse - View sketch perpendicular to sketch plane - Vue normale au plan d'esquisse + + View sketch perpendicular to sketch plane + Vue normale au plan d'esquisse - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Apparence + + Appearance + Apparence - - + + QObject - - Wrong selection - Mauvaise sélection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Mauvaise sélection - Select edge(s) from the sketch. - Sélectionnez une ou des arêtes de l'esquisse. + + Select edge(s) from the sketch. + Sélectionnez une ou des arêtes de l'esquisse. - - Select an edge from the sketch. - Sélectionnez une arête de l'esquisse. + + + Select an edge from the sketch. + Sélectionnez une arête de l'esquisse. - Double constraint - Double contrainte + + + Double constraint + Double contrainte - The selected edge has already a horizontal constraint! - L'arête sélectionnée a déjà une contrainte horizontale ! + + + The selected edge has already a horizontal constraint! + L'arête sélectionnée a déjà une contrainte horizontale ! - Impossible constraint - Contrainte impossible + + + + + + + Impossible constraint + Contrainte impossible - Only sketch and its support is allowed to select - Seule la sélection d'une esquisse et de sa face de support est permise + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Un des éléments sélectionnés doit être dans l'esquisse + + + + Only sketch and its support is allowed to select + Seule la sélection d'une esquisse et de sa face de support est permise - The selected edge is not a line segment - L'arête sélectionnée n'est pas un segment de ligne + + One of the selected has to be on the sketch + Un des éléments sélectionnés doit être dans l'esquisse - The selected edge has already a vertical constraint! - L'arête sélectionnée a déjà une contrainte verticale ! + + + The selected edge is not a line segment + L'arête sélectionnée n'est pas un segment de ligne - Select entities from the sketch. - Sélectionnez des entités de l'esquisse. + + + The selected edge has already a vertical constraint! + L'arête sélectionnée a déjà une contrainte verticale ! - Select exactly one entity from the sketch. - Sélectionnez seulement une entité de l'esquisse. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Sélectionnez les sommets de l'esquisse. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Sélectionnez exactement deux sommets de l'esquisse. + + Select entities from the sketch. + Sélectionnez des entités de l'esquisse. - Select exactly one line or one point and one line or two points from the sketch. - Sélectionnez soit une seule ligne, ou un point et une ligne, ou deux points de l'esquisse. + + + Select exactly one entity from the sketch. + Sélectionnez seulement une entité de l'esquisse. - Select exactly one point and one object from the sketch. - Sélectionnez exactement un point et un objet de l'esquisse. + + + + + + + Select vertexes from the sketch. + Sélectionnez les sommets de l'esquisse. - Select exactly one line or up to two points from the sketch. - Sélectionnez soit une seule ligne ou jusqu'à deux points de l'esquisse. + + + + Select exactly two vertexes from the sketch. + Sélectionnez exactement deux sommets de l'esquisse. - Select two or more lines from the sketch. - Sélectionnez au moins deux lignes de l'esquisse. + + + Select exactly one line or one point and one line or two points from the sketch. + Sélectionnez soit une seule ligne, ou un point et une ligne, ou deux points de l'esquisse. - Select at least two lines from the sketch. - Sélectionner au moins deux lignes de l'esquisse. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Sélectionnez une ligne valide + + + Select exactly one point and one object from the sketch. + Sélectionnez exactement un point et un objet de l'esquisse. - The selected edge is not a valid line - L'arête sélectionnée n'est pas une ligne valide + + + + + Select exactly one line or up to two points from the sketch. + Sélectionnez soit une seule ligne ou jusqu'à deux points de l'esquisse. - Select exactly one arc or circle from the sketch. - Sélectionnez soit un arc ou un cercle de l'esquisse. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Sélectionnez soit une ou deux lignes de l'esquisse. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Sélectionnez deux arêtes de l'esquisse. + + Select two or more lines from the sketch. + Sélectionnez au moins deux lignes de l'esquisse. - Select atleast two lines from the sketch. - Sélectionner au moins deux lignes de l'esquisse. + + Select at least two lines from the sketch. + Sélectionner au moins deux lignes de l'esquisse. - Select exactly two same geometries - Sélectionnez exactement deux géométries semblables + + Select a valid line + Sélectionnez une ligne valide - Select valid geometries - Sélectionnez des géométries valides + + The selected edge is not a valid line + L'arête sélectionnée n'est pas une ligne valide - Select geometry of similar type - Sélectionnez une géométrie similaire + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Sélectionnez deux points et une ligne de l'esquisse. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Sélectionnez seulement une ligne dans l'esquisse. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Sélectionnez deux lignes dans l'esquisse. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Sélectionnez exactement deux lignes dans l'esquisse. + + + + Select exactly one arc or circle from the sketch. + Sélectionnez soit un arc ou un cercle de l'esquisse. - Select two entities from the sketch. - Sélectionnez deux entités de l'esquisse. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Sélectionnez exactement deux entités de l'esquisse. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Modifier l'esquisse + + Select exactly one or two lines from the sketch. + Sélectionnez soit une ou deux lignes de l'esquisse. - A dialog is already open in the task panel - Une boîte de dialogue est déjà ouverte dans le panneau des tâches + + Select two edges from the sketch. + Sélectionnez deux arêtes de l'esquisse. - Do you want to close this dialog? - Voulez-vous fermer cette boîte de dialogue ? + + Select atleast two lines from the sketch. + Sélectionner au moins deux lignes de l'esquisse. - - Several sub-elements selected - Plusieurs sous-éléments sélectionnés + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Vous devez sélectionner une seule face comme support pour une esquisse ! + + Sketch axes cannot be used in equality constraints + - No support face selected - Aucune face de support sélectionnée + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Vous devez sélectionner un plan ou une face plane comme support de l'esquisse ! + + Cannot add a constraint between external geometries! + - No planar support - Aucun plan de support + Select exactly two same geometries + Sélectionnez exactement deux géométries semblables - You need a planar face as support for a sketch! - Vous avez besoin d'un plan ou d'une face plane comme support de l'esquisse ! + Select valid geometries + Sélectionnez des géométries valides - - Distance constraint - Contrainte de distance + Select geometry of similar type + Sélectionnez une géométrie similaire - Not allowed to edit the datum because the sketch contains conflicting constraints - L'édition de cette valeur n'est pas autorisée car l'esquisse contient des contraintes conflictuelles + + + + Select two points and one line from the sketch. + Sélectionnez deux points et une ligne de l'esquisse. - Dimensional constraint - Contrainte de dimension + Select exactly one line from the sketch. + Sélectionnez seulement une ligne dans l'esquisse. - - + + Select two lines from the sketch. + Sélectionnez deux lignes dans l'esquisse. + + + Select exactly two lines from the sketch. + Sélectionnez exactement deux lignes dans l'esquisse. + + + + + Select two entities from the sketch. + Sélectionnez deux entités de l'esquisse. + + + + + + + Select exactly two entities from the sketch. + Sélectionnez exactement deux entités de l'esquisse. + + + + Edit sketch + Modifier l'esquisse + + + + A dialog is already open in the task panel + Une boîte de dialogue est déjà ouverte dans le panneau des tâches + + + + Do you want to close this dialog? + Voulez-vous fermer cette boîte de dialogue ? + + + + Several sub-elements selected + Plusieurs sous-éléments sélectionnés + + + + You have to select a single face as support for a sketch! + Vous devez sélectionner une seule face comme support pour une esquisse ! + + + + No support face selected + Aucune face de support sélectionnée + + + + You have to select a face as support for a sketch! + Vous devez sélectionner un plan ou une face plane comme support de l'esquisse ! + + + + No planar support + Aucun plan de support + + + + You need a planar face as support for a sketch! + Vous avez besoin d'un plan ou d'une face plane comme support de l'esquisse ! + + + + Distance constraint + Contrainte de distance + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + L'édition de cette valeur n'est pas autorisée car l'esquisse contient des contraintes conflictuelles + + + + Dimensional constraint + Contrainte de dimension + + + SketchOrientationDialog - - Choose orientation - Sélectionner l'orientation + Choose orientation + Sélectionner l'orientation - Sketch orientation - Orientation de l'esquisse + Sketch orientation + Orientation de l'esquisse - XY-Plane - Plan XY + XY-Plane + Plan XY - XZ-Plane - Plan XZ + XZ-Plane + Plan XZ - YZ-Plane - Plan YZ + YZ-Plane + Plan YZ - Reverse direction - Inverser la direction + Reverse direction + Inverser la direction - Offset: - Décalage : + Offset: + Décalage : - - + + SketcherGui::InsertDatum - - Insert datum - Insérer référence + + Insert datum + Insérer référence - datum: - Référence : + + datum: + Référence : - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Sélectionner l'orientation + + + + Sketch orientation + Orientation de l'esquisse + + + + XY-Plane + Plan XY + + + + XZ-Plane + Plan XZ + + + + YZ-Plane + Plan YZ + + + + Reverse direction + Inverser la direction + + + + Offset: + Décalage : + + + SketcherGui::TaskSketcherConstrains - - Form - Formulaire + + Form + Formulaire - Filter: - Filtre : + + Filter: + Filtre : - All - Tous + + All + Tous - Normal - Normal + + Normal + Normal - Datums - Références + + Datums + Références - Named - Nommé + + Named + Nommé - - Constraints - Contraintes + + Constraints + Contraintes - - + + SketcherGui::TaskSketcherGeneral - - Form - Formulaire + + Form + Formulaire - Grid size: - Taille de la grille: + + Grid size: + Taille de la grille: - Grid snap - Ancrage à la grille + + Grid snap + Ancrage à la grille - Unsolved - Non résolu + Unsolved + Non résolu - Grid Snap - Alignement de grille + Grid Snap + Alignement de grille - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.2 mm - 0,2 mm + 0.2 mm + 0,2 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Contraintes auto + + Auto constraints + Contraintes auto - auto constraints - contraintes automatiques + auto constraints + contraintes automatiques - - Edit controls - Modifier les contrôles + + Edit controls + Modifier les contrôles - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Messages du solveur + + Solver messages + Messages du solveur - - + + TaskSketcherConstrains - Constraints - Contraintes + Constraints + Contraintes - - + + TaskSketcherCreateCommands - Appearance - Apparence + Appearance + Apparence - - + + TaskSketcherGeneral - Edit controls - Modifier les contrôles + Edit controls + Modifier les contrôles - - + + TaskSketcherMessages - - Form - Formulaire + + Form + Formulaire - Undefined degrees of freedom - Degrés de liberté non définis + + Undefined degrees of freedom + Degrés de liberté non définis - Not solved yet - Pas encore résolu + + Not solved yet + Pas encore résolu - - + + Workbench - - Sketcher - Esquisseur + + Sketcher + Esquisseur - Sketcher geometries - Géométries d'esquisse + + Sketcher geometries + Géométries d'esquisse - Sketcher geoms - Géométries + Sketcher geoms + Géométries - Sketcher constraints - Contraintes d'esquisse + + Sketcher constraints + Contraintes d'esquisse - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hr.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hr.ts index 003063f07..207c55932 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hr.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hr.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Skica + + Sketcher + Skica - Constrain angle - Ograniči kut + + Constrain angle + Ograniči kut - Fix the angle of a line or the angle between two lines - Fiksiraj kut linije ili kut između dvije linije + + Fix the angle of a line or the angle between two lines + Fiksiraj kut linije ili kut između dvije linije - - + + CmdSketcherConstrainCoincident - Sketcher - Skica + + Sketcher + Skica - Constrain coincident - Ograničiti zajedničko + + Constrain coincident + Ograničiti zajedničko - Create a coincident constraint on the selected item - Napravi zajedničko ograničenje na odabranim jedinicama + + Create a coincident constraint on the selected item + Napravi zajedničko ograničenje na odabranim jedinicama - - + + CmdSketcherConstrainDistance - Sketcher - Skica + + Sketcher + Skica - Constrain distance - Ograniči udaljenost + + Constrain distance + Ograniči udaljenost - Fix a length of a line or the distance between a line and a vertex - Ograniči duljinu linije ili udaljenost između linije i vrha + + Fix a length of a line or the distance between a line and a vertex + Ograniči duljinu linije ili udaljenost između linije i vrha - - + + CmdSketcherConstrainDistanceX - Sketcher - Skica + + Sketcher + Skica - Constrain vertical distance - Ograniči vertikalnu udaljenost + + Constrain horizontal distance + Ograniči horizontalnu udaljenost - Fix the horizontal distance between two points or line ends - Ograniči horizontalnu udaljenost između dvije točke ili krajeva linije + Constrain vertical distance + Ograniči vertikalnu udaljenost - - + + + Fix the horizontal distance between two points or line ends + Ograniči horizontalnu udaljenost između dvije točke ili krajeva linije + + + CmdSketcherConstrainDistanceY - Sketcher - Skica + + Sketcher + Skica - Constrain horizontal distance - Ograniči horizontalnu udaljenost + + Constrain vertical distance + Ograniči vertikalnu udaljenost - Fix the vertical distance between two points or line ends - Ograniči vertikalnu udaljenost između dvije točke ili krajeva linije + Constrain horizontal distance + Ograniči horizontalnu udaljenost - - + + + Fix the vertical distance between two points or line ends + Ograniči vertikalnu udaljenost između dvije točke ili krajeva linije + + + CmdSketcherConstrainEqual - Sketcher - Skica + + Sketcher + Skica - Constrain equal - Ograniči jednaku duljinu + + Constrain equal + Ograniči jednaku duljinu - Create an equality constraint between two lines or between circles and arcs - Napravite ograničenje jednakosti između dvije linije ili između kružnica i lukova + + Create an equality constraint between two lines or between circles and arcs + Napravite ograničenje jednakosti između dvije linije ili između kružnica i lukova - - + + CmdSketcherConstrainHorizontal - Sketcher - Skica + + Sketcher + Skica - Constrain horizontally - Ograniči vodoravno + + Constrain horizontally + Ograniči vodoravno - Create a horizontal constraint on the selected item - Napravi vodoravno ograničenje na odabranoj jedinici + + Create a horizontal constraint on the selected item + Napravi vodoravno ograničenje na odabranoj jedinici - - + + CmdSketcherConstrainLock - Sketcher - Skica + + Sketcher + Skica - Constrain lock - Ograniči pomicanje + + Constrain lock + Ograniči pomicanje - Create a lock constraint on the selected item - Napravi ograničenje fiksiranja na odabranim stavkama + + Create a lock constraint on the selected item + Napravi ograničenje fiksiranja na odabranim stavkama - - + + CmdSketcherConstrainParallel - Sketcher - Skica + + Sketcher + Skica - Constrain parallel - Ograniči paralelno + + Constrain parallel + Ograniči paralelno - Create a parallel constraint between two lines - Napravi paralelno ograničenje između dvije linije + + Create a parallel constraint between two lines + Napravi paralelno ograničenje između dvije linije - - + + CmdSketcherConstrainPerpendicular - Sketcher - Skica + + Sketcher + Skica - Constrain perpendicular - Ograniči okomito + + Constrain perpendicular + Ograniči okomito - Create a Perpendicular constraint between two lines - Napravi okomito ograničenje između dvije linije + + Create a Perpendicular constraint between two lines + Napravi okomito ograničenje između dvije linije - - + + CmdSketcherConstrainPointOnObject - Sketcher - Skica + + Sketcher + Skica - Constrain point onto object - Ograniči točku na objekt + + Constrain point onto object + Ograniči točku na objekt - Fix a point onto an object - Fiksiraj točku na objekt + + Fix a point onto an object + Fiksiraj točku na objekt - - + + CmdSketcherConstrainRadius - Sketcher - Skica + + Sketcher + Skica - Constrain radius - Ograniči radijus + + Constrain radius + Ograniči radijus - Fix the radius of a circle or an arc - Fiksiraj radijus kruga ili luka + + Fix the radius of a circle or an arc + Fiksiraj radijus kruga ili luka - - + + CmdSketcherConstrainSymmetric - Sketcher - Skica + + Sketcher + Skica - Constrain symmetrical - Ograniči simetrijski + + Constrain symmetrical + Ograniči simetrijski - Create an symmetry constraint between two points with respect to a line - Napravite simetrijsko ograničenje između dvije točke u odnosu na liniju + + Create an symmetry constraint between two points with respect to a line + Napravite simetrijsko ograničenje između dvije točke u odnosu na liniju - - + + CmdSketcherConstrainTangent - Sketcher - Skica + + Sketcher + Skica - Constrain tangent - Ograniči tangentno + + Constrain tangent + Ograniči tangentno - Create a tangent constraint between two entities - Napravi tangentno ograničenje između dva entiteta + + Create a tangent constraint between two entities + Napravi tangentno ograničenje između dva entiteta - - + + CmdSketcherConstrainVertical - Sketcher - Skica + + Sketcher + Skica - Constrain vertically - Ograniči okomito + + Constrain vertically + Ograniči okomito - Create a vertical constraint on the selected item - Napravi okomito ograničenje na odabranoj jedinici + + Create a vertical constraint on the selected item + Napravi okomito ograničenje na odabranoj jedinici - - + + CmdSketcherCreateArc - - Sketcher - Skica + + Sketcher + Skica - Create arc - Napravi luk + + Create arc + Napravi luk - Create an arc in the sketch - Napravite luk u skici + + Create an arc in the sketch + Napravite luk u skici - - + + CmdSketcherCreateCircle - Sketcher - Skica + + Sketcher + Skica - Create circle - Napravi krug + + Create circle + Napravi krug - Create a circle in the sketch - Napravi krug u skici + + Create a circle in the sketch + Napravi krug u skici - - + + CmdSketcherCreateDraftLine - Sketcher - Skica + + Sketcher + Skica - Create draft line - Napravi liniju + + Create draft line + Napravi liniju - Create a draft line in the sketch - Napravi liniju u skici + + Create a draft line in the sketch + Napravi liniju u skici - - + + CmdSketcherCreateFillet - Sketcher - Skica + + Sketcher + Skica - Create fillet - Napravi obrub + + Create fillet + Napravi obrub - Create a fillet between two lines or at a coincident point - Napravi obrub između linija ili u podudarnoj točki + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Napravi obrub između linija ili u podudarnoj točki + + + CmdSketcherCreateLine - Sketcher - Skica + + Sketcher + Skica - Create line - Napravi liniju + + Create line + Napravi liniju - Create a line in the sketch - Napravi liniju u skici + + Create a line in the sketch + Napravi liniju u skici - - + + CmdSketcherCreatePoint - Sketcher - Skica + + Sketcher + Skica - Create point - Napravi točku + + Create point + Napravi točku - Create a point in the sketch - Napravi točku u skici + + Create a point in the sketch + Napravi točku u skici - - + + CmdSketcherCreatePolyline - Sketcher - Skica + + Sketcher + Skica - Create polyline - Napravi poliliniju + + Create polyline + Napravi poliliniju - Create a polyline in the sketch - Napravite poliliniju u skici + + Create a polyline in the sketch + Napravite poliliniju u skici - - + + CmdSketcherCreateRectangle - Sketcher - Skica + + Sketcher + Skica - Create rectangle - Napravi pravokutnik + + Create rectangle + Napravi pravokutnik - Create a rectangle in the sketch - Napravi pravokutnik u skici + + Create a rectangle in the sketch + Napravi pravokutnik u skici - - + + CmdSketcherCreateText - Sketcher - Skica + + Sketcher + Skica - Create text - Napravi tekst + + Create text + Napravi tekst - Create text in the sketch - Napravi tekst u skici + + Create text in the sketch + Napravi tekst u skici - - + + + CmdSketcherExternal + + + Sketcher + Skica + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Skica + + Sketcher + Skica - Leave sketch - Zatvori skicu + + Leave sketch + Zatvori skicu - Close the editing of the sketch - Zatvori uređivanje skice + + Close the editing of the sketch + Zatvori uređivanje skice - - + + CmdSketcherMapSketch - Sketcher - Skica + + Sketcher + Skica - Map sketch to face... - Povezuje skicu sa površinom ... + + Map sketch to face... + Povezuje skicu sa površinom ... - Map a sketch to a face - Mapiraj skicu na površinu + + Map a sketch to a face + Mapiraj skicu na površinu - - + + CmdSketcherNewSketch - Sketcher - Skica + + Sketcher + Skica - Create sketch - Napravite skicu + + Create sketch + Napravite skicu - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Napravi novu skicu + Create a new sketch + Napravi novu skicu - - + + CmdSketcherNewSketchSF - Sketcher - Skica + Sketcher + Skica - Sketchflat sketch - Sketchflat skica + Sketchflat sketch + Sketchflat skica - Create a new sketchflat sketch by starting externel editor - Napravi novu sketchflat skicu pokretanjem vanjskog urednika + Create a new sketchflat sketch by starting externel editor + Napravi novu sketchflat skicu pokretanjem vanjskog urednika - - + + CmdSketcherToggleConstruction - - Sketcher - Skica + + Sketcher + Skica - Toggle construction line - Prebaci liniju u konstrukciju + + Toggle construction line + Prebaci liniju u konstrukciju - Toggles the currently selected lines to/from construction mode - Prebacuje trenutno odabrane linije u/iz konstrukcijske linije + + Toggles the currently selected lines to/from construction mode + Prebacuje trenutno odabrane linije u/iz konstrukcijske linije - - + + CmdSketcherTrimming - - Sketcher - Skica + + Sketcher + Skica - Trim edge - Skrati rub + + Trim edge + Skrati rub - Trims an edge with respect to the picked position - Presjeca rub s obzirom na odabranu poziciju + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Presjeca rub s obzirom na odabranu poziciju + + + CmdSketcherViewSketch - - Sketcher - Skica + + Sketcher + Skica - View sketch - Pregledaj skicu + + View sketch + Pregledaj skicu - View sketch perpendicular to sketch plane - Vidi skicu okomitu na ravninu skice + + View sketch perpendicular to sketch plane + Vidi skicu okomitu na ravninu skice - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Izgled + + Appearance + Izgled - - + + QObject - - Wrong selection - Pogrešan odabir + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Pogrešan odabir - Select edge(s) from the sketch. - Odaberite rub(ove) iz skice. + + Select edge(s) from the sketch. + Odaberite rub(ove) iz skice. - - Select an edge from the sketch. - Odaberite rub skice. + + + Select an edge from the sketch. + Odaberite rub skice. - Double constraint - Ograničenje dvaput + + + Double constraint + Ograničenje dvaput - The selected edge has already a horizontal constraint! - Odabrani rub već ima vodoravno ograničenje! + + + The selected edge has already a horizontal constraint! + Odabrani rub već ima vodoravno ograničenje! - Impossible constraint - Nemoguće ograničenje + + + + + + + Impossible constraint + Nemoguće ograničenje - Only sketch and its support is allowed to select - Dopušteno je odabrati samo skicu i njenu podršku + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Jedan od odabranih mora biti na skici + + + + Only sketch and its support is allowed to select + Dopušteno je odabrati samo skicu i njenu podršku - The selected edge is not a line segment - Odabrani rub nije linija + + One of the selected has to be on the sketch + Jedan od odabranih mora biti na skici - The selected edge has already a vertical constraint! - Odabrani rub već ima okomito ograničenje! + + + The selected edge is not a line segment + Odabrani rub nije linija - Select entities from the sketch. - Odaberite entitet iz skice. + + + The selected edge has already a vertical constraint! + Odabrani rub već ima okomito ograničenje! - Select exactly one entity from the sketch. - Odaberite točno jedan entitet iz skice. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Odaberite vrhove sa skice. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Odaberite točno dva vrha iz skice. + + Select entities from the sketch. + Odaberite entitet iz skice. - Select exactly one line or one point and one line or two points from the sketch. - Odaberite točno jednu liniju ili jednu točku i jednu liniju ili dvije točke iz skice. + + + Select exactly one entity from the sketch. + Odaberite točno jedan entitet iz skice. - Select exactly one point and one object from the sketch. - Odaberite točno jednu točku i jedan objekt iz skice. + + + + + + + Select vertexes from the sketch. + Odaberite vrhove sa skice. - Select exactly one line or up to two points from the sketch. - Odaberite točno jednu liniju ili do dvije točke iz skice. + + + + Select exactly two vertexes from the sketch. + Odaberite točno dva vrha iz skice. - Select two or more lines from the sketch. - Odaberite dvije ili više linija iz skice. + + + Select exactly one line or one point and one line or two points from the sketch. + Odaberite točno jednu liniju ili jednu točku i jednu liniju ili dvije točke iz skice. - Select at least two lines from the sketch. - Odaberite barem dvije linije iz skice. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Odaberite valjanu liniju + + + Select exactly one point and one object from the sketch. + Odaberite točno jednu točku i jedan objekt iz skice. - The selected edge is not a valid line - Odabrani rub nije valjana linija + + + + + Select exactly one line or up to two points from the sketch. + Odaberite točno jednu liniju ili do dvije točke iz skice. - Select exactly one arc or circle from the sketch. - Odaberite točno jedan luk ili krug iz skica. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Odaberite točno jednu ili dvije linije iz skice. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Odaberite dva ruba iz skice. + + Select two or more lines from the sketch. + Odaberite dvije ili više linija iz skice. - Select atleast two lines from the sketch. - Odaberite barem dvije linije iz skice. + + Select at least two lines from the sketch. + Odaberite barem dvije linije iz skice. - Select exactly two same geometries - Odaberite točno dvije iste geometrije + + Select a valid line + Odaberite valjanu liniju - Select valid geometries - Odaberite valjane geometrije + + The selected edge is not a valid line + Odabrani rub nije valjana linija - Select geometry of similar type - Odaberite geometriju sličnog tipa + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Odaberite dvije točke i jednu liniju iz skice. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Odaberite samo jednu liniju iz skice. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Odaberite dvije linije iz skice. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Odaberite točno dvije linije iz skice. + + + + Select exactly one arc or circle from the sketch. + Odaberite točno jedan luk ili krug iz skica. - Select two entities from the sketch. - Odaberite dva entiteta iz skice. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Odaberite točno dva entiteta iz skice. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Uredi skicu + + Select exactly one or two lines from the sketch. + Odaberite točno jednu ili dvije linije iz skice. - A dialog is already open in the task panel - Dijalog je već otvoren u ploči zadataka + + Select two edges from the sketch. + Odaberite dva ruba iz skice. - Do you want to close this dialog? - Želite li zatvoriti ovaj dijalog? + + Select atleast two lines from the sketch. + Odaberite barem dvije linije iz skice. - - Several sub-elements selected - Nekoliko pod-elemenata odabrano + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Morate odabrati jednu površinu kao podršku za skicu! + + Sketch axes cannot be used in equality constraints + - No support face selected - Nije odabrana površina za podršku + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Morate odabrati površinu kao podršku za skicu! + + Cannot add a constraint between external geometries! + - No planar support - Nema planarni podršku + Select exactly two same geometries + Odaberite točno dvije iste geometrije - You need a planar face as support for a sketch! - Trebate planarnu površinu kao podršku za skicu! + Select valid geometries + Odaberite valjane geometrije - - Distance constraint - Ograničenje udaljenosti + Select geometry of similar type + Odaberite geometriju sličnog tipa - Not allowed to edit the datum because the sketch contains conflicting constraints - Nije dopušteno mijenjati podatak, jer skica sadrži proturječna ograničenja + + + + Select two points and one line from the sketch. + Odaberite dvije točke i jednu liniju iz skice. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Odaberite samo jednu liniju iz skice. - - + + Select two lines from the sketch. + Odaberite dvije linije iz skice. + + + Select exactly two lines from the sketch. + Odaberite točno dvije linije iz skice. + + + + + Select two entities from the sketch. + Odaberite dva entiteta iz skice. + + + + + + + Select exactly two entities from the sketch. + Odaberite točno dva entiteta iz skice. + + + + Edit sketch + Uredi skicu + + + + A dialog is already open in the task panel + Dijalog je već otvoren u ploči zadataka + + + + Do you want to close this dialog? + Želite li zatvoriti ovaj dijalog? + + + + Several sub-elements selected + Nekoliko pod-elemenata odabrano + + + + You have to select a single face as support for a sketch! + Morate odabrati jednu površinu kao podršku za skicu! + + + + No support face selected + Nije odabrana površina za podršku + + + + You have to select a face as support for a sketch! + Morate odabrati površinu kao podršku za skicu! + + + + No planar support + Nema planarni podršku + + + + You need a planar face as support for a sketch! + Trebate planarnu površinu kao podršku za skicu! + + + + Distance constraint + Ograničenje udaljenosti + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Nije dopušteno mijenjati podatak, jer skica sadrži proturječna ograničenja + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Odaberite orijentaciju + Choose orientation + Odaberite orijentaciju - Sketch orientation - Orijentacija skice + Sketch orientation + Orijentacija skice - XY-Plane - XY ravnina + XY-Plane + XY ravnina - XZ-Plane - XZ-Ravnina + XZ-Plane + XZ-Ravnina - YZ-Plane - YZ-Ravnina + YZ-Plane + YZ-Ravnina - Reverse direction - Obrnutim smjerom + Reverse direction + Obrnutim smjerom - Offset: - Odmak: + Offset: + Odmak: - - + + SketcherGui::InsertDatum - - Insert datum - Umetni datum + + Insert datum + Umetni datum - datum: - datum: + + datum: + datum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Odaberite orijentaciju + + + + Sketch orientation + Orijentacija skice + + + + XY-Plane + XY ravnina + + + + XZ-Plane + XZ-Ravnina + + + + YZ-Plane + YZ-Ravnina + + + + Reverse direction + Obrnutim smjerom + + + + Offset: + Odmak: + + + SketcherGui::TaskSketcherConstrains - - Form - Obrazac + + Form + Obrazac - Filter: - Filter: + + Filter: + Filter: - All - Sve + + All + Sve - Normal - Normalno + + Normal + Normalno - Datums - Datumima + + Datums + Datumima - Named - Imenovan + + Named + Imenovan - - Constraints - Ograničenja + + Constraints + Ograničenja - - + + SketcherGui::TaskSketcherGeneral - - Form - Obrazac + + Form + Obrazac - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Neriješen + Unsolved + Neriješen - Grid Snap - Ograničenje sa rešetkom + Grid Snap + Ograničenje sa rešetkom - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto ograničenja + + Auto constraints + Auto ograničenja - auto constraints - automatska ograničenja + auto constraints + automatska ograničenja - - Edit controls - Uredi kontrole + + Edit controls + Uredi kontrole - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Poruke Solvera + + Solver messages + Poruke Solvera - - + + TaskSketcherConstrains - Constraints - Ograničenja + Constraints + Ograničenja - - + + TaskSketcherCreateCommands - Appearance - Izgled + Appearance + Izgled - - + + TaskSketcherGeneral - Edit controls - Uredi kontrole + Edit controls + Uredi kontrole - - + + TaskSketcherMessages - - Form - Obrazac + + Form + Obrazac - Undefined degrees of freedom - Neodređeno stupnjeva slobode + + Undefined degrees of freedom + Neodređeno stupnjeva slobode - Not solved yet - Još nije riješeno + + Not solved yet + Još nije riješeno - - + + Workbench - - Sketcher - Skica + + Sketcher + Skica - Sketcher geometries - Geometrije skice + + Sketcher geometries + Geometrije skice - Sketcher geoms - Geometrije skice + Sketcher geoms + Geometrije skice - Sketcher constraints - Ograničenja u skici + + Sketcher constraints + Ograničenja u skici - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hu.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hu.ts index aba7fea16..63f4a6e6c 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hu.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_hu.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain angle - Szög zárolása + + Constrain angle + Szög zárolása - Fix the angle of a line or the angle between two lines - Rögzítsen szöget a vonalon, vagy a szöget két vonalon + + Fix the angle of a line or the angle between two lines + Rögzítsen szöget a vonalon, vagy a szöget két vonalon - - + + CmdSketcherConstrainCoincident - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain coincident - Egymásra llesztés + + Constrain coincident + Egymásra llesztés - Create a coincident constraint on the selected item - Kiválasztott elemek egy egymásra illesztése + + Create a coincident constraint on the selected item + Kiválasztott elemek egy egymásra illesztése - - + + CmdSketcherConstrainDistance - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain distance - Távolság kényszer + + Constrain distance + Távolság kényszer - Fix a length of a line or the distance between a line and a vertex - Vonal hosszának rögzítése vagy adott távolság tartása a vonal és vertex között + + Fix a length of a line or the distance between a line and a vertex + Vonal hosszának rögzítése vagy adott távolság tartása a vonal és vertex között - - + + CmdSketcherConstrainDistanceX - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain vertical distance - Vízszintes függőleges zárolása + + Constrain horizontal distance + Vízszintes távolság zárolása - Fix the horizontal distance between two points or line ends - Két pont közötti vagy vonal végek közötti vízszintes távolság zárolása + Constrain vertical distance + Vízszintes függőleges zárolása - - + + + Fix the horizontal distance between two points or line ends + Két pont közötti vagy vonal végek közötti vízszintes távolság zárolása + + + CmdSketcherConstrainDistanceY - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain horizontal distance - Vízszintes távolság zárolása + + Constrain vertical distance + Vízszintes függőleges zárolása - Fix the vertical distance between two points or line ends - Két pont közötti vagy vonal végek közötti függőleges távolság zárolása + Constrain horizontal distance + Vízszintes távolság zárolása - - + + + Fix the vertical distance between two points or line ends + Két pont közötti vagy vonal végek közötti függőleges távolság zárolása + + + CmdSketcherConstrainEqual - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain equal - Egyenlő zárolása + + Constrain equal + Egyenlő zárolása - Create an equality constraint between two lines or between circles and arcs - Hozzon létre egy egyenlőség korlátozást két vonal között, illetve körök és ívek között + + Create an equality constraint between two lines or between circles and arcs + Hozzon létre egy egyenlőség korlátozást két vonal között, illetve körök és ívek között - - + + CmdSketcherConstrainHorizontal - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain horizontally - Vízszint kényszer + + Constrain horizontally + Vízszint kényszer - Create a horizontal constraint on the selected item - Vízszintes kényszer létrehozása a kiválasztott elemen + + Create a horizontal constraint on the selected item + Vízszintes kényszer létrehozása a kiválasztott elemen - - + + CmdSketcherConstrainLock - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain lock - Zárolási kényszer + + Constrain lock + Zárolási kényszer - Create a lock constraint on the selected item - A kijelölt elem zárolása + + Create a lock constraint on the selected item + A kijelölt elem zárolása - - + + CmdSketcherConstrainParallel - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain parallel - Párhuzamosság tartása + + Constrain parallel + Párhuzamosság tartása - Create a parallel constraint between two lines - Két vonal közötti párhuzamosság kényszer + + Create a parallel constraint between two lines + Két vonal közötti párhuzamosság kényszer - - + + CmdSketcherConstrainPerpendicular - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain perpendicular - Merőleges korlát + + Constrain perpendicular + Merőleges korlát - Create a Perpendicular constraint between two lines - Hozzon létre egy merőleges korlátot két vonal közt + + Create a Perpendicular constraint between two lines + Hozzon létre egy merőleges korlátot két vonal közt - - + + CmdSketcherConstrainPointOnObject - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain point onto object - a pont korlátozása az objektumra + + Constrain point onto object + a pont korlátozása az objektumra - Fix a point onto an object - Pont rögzítése egy tárgyra + + Fix a point onto an object + Pont rögzítése egy tárgyra - - + + CmdSketcherConstrainRadius - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain radius - Sugár korlát + + Constrain radius + Sugár korlát - Fix the radius of a circle or an arc - Sugár rögzítése a körre vagy ívre + + Fix the radius of a circle or an arc + Sugár rögzítése a körre vagy ívre - - + + CmdSketcherConstrainSymmetric - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain symmetrical - Szimmetria korlát + + Constrain symmetrical + Szimmetria korlát - Create an symmetry constraint between two points with respect to a line - Hozzon létre egy szimmetria korlátot két pont között egy vanalra való tekintettel + + Create an symmetry constraint between two points with respect to a line + Hozzon létre egy szimmetria korlátot két pont között egy vanalra való tekintettel - - + + CmdSketcherConstrainTangent - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain tangent - Korlátozó érintő + + Constrain tangent + Korlátozó érintő - Create a tangent constraint between two entities - Hozzon létre egy érintő korlátozást két rész között + + Create a tangent constraint between two entities + Hozzon létre egy érintő korlátozást két rész között - - + + CmdSketcherConstrainVertical - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Constrain vertically - Függőleges kényszerítés + + Constrain vertically + Függőleges kényszerítés - Create a vertical constraint on the selected item - Függőleges kényszer alkalmazása a kijelölt elemen + + Create a vertical constraint on the selected item + Függőleges kényszer alkalmazása a kijelölt elemen - - + + CmdSketcherCreateArc - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create arc - Ív létrehozása + + Create arc + Ív létrehozása - Create an arc in the sketch - Ív létrehozása a vázlaton + + Create an arc in the sketch + Ív létrehozása a vázlaton - - + + CmdSketcherCreateCircle - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create circle - Kör rajzolása + + Create circle + Kör rajzolása - Create a circle in the sketch - Kör rajzolása a vázlaton + + Create a circle in the sketch + Kör rajzolása a vázlaton - - + + CmdSketcherCreateDraftLine - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create draft line - Vázlatvonal rajzolása + + Create draft line + Vázlatvonal rajzolása - Create a draft line in the sketch - Vázlatvonal rajzolása a vázlaton + + Create a draft line in the sketch + Vázlatvonal rajzolása a vázlaton - - + + CmdSketcherCreateFillet - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create fillet - Lekerekítés létrehozása + + Create fillet + Lekerekítés létrehozása - Create a fillet between two lines or at a coincident point - Hozzon létre egy kitöltést vonalak közt, vagy egy egybeeső ponttal + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Hozzon létre egy kitöltést vonalak közt, vagy egy egybeeső ponttal + + + CmdSketcherCreateLine - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create line - Vonal rajzolása + + Create line + Vonal rajzolása - Create a line in the sketch - Vonal rajzolása a vázlaton + + Create a line in the sketch + Vonal rajzolása a vázlaton - - + + CmdSketcherCreatePoint - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create point - Pont létrehozása + + Create point + Pont létrehozása - Create a point in the sketch - Pont létrehozása a vázlaton + + Create a point in the sketch + Pont létrehozása a vázlaton - - + + CmdSketcherCreatePolyline - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create polyline - Vonallánc rajzolása + + Create polyline + Vonallánc rajzolása - Create a polyline in the sketch - Vonallánc rajzolása a vázlaton + + Create a polyline in the sketch + Vonallánc rajzolása a vázlaton - - + + CmdSketcherCreateRectangle - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create rectangle - Téglalap rajzolása + + Create rectangle + Téglalap rajzolása - Create a rectangle in the sketch - Téglalap rajzolása a vázlaton + + Create a rectangle in the sketch + Téglalap rajzolása a vázlaton - - + + CmdSketcherCreateText - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create text - Szöveg létrehozása + + Create text + Szöveg létrehozása - Create text in the sketch - Szöveg létrehozása a vázlaton + + Create text in the sketch + Szöveg létrehozása a vázlaton - - + + + CmdSketcherExternal + + + Sketcher + Vázlatkészítõ + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Leave sketch - Vázlat elhagyása + + Leave sketch + Vázlat elhagyása - Close the editing of the sketch - Vázlatszerkesztő bezárása + + Close the editing of the sketch + Vázlatszerkesztő bezárása - - + + CmdSketcherMapSketch - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Map sketch to face... - Vázlat leképezés felületre... + + Map sketch to face... + Vázlat leképezés felületre... - Map a sketch to a face - Vázlat leképezése felületre + + Map a sketch to a face + Vázlat leképezése felületre - - + + CmdSketcherNewSketch - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Create sketch - Vázlat létrehozása + + Create sketch + Vázlat létrehozása - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Új vázlat készítése + Create a new sketch + Új vázlat készítése - - + + CmdSketcherNewSketchSF - Sketcher - Vázlatkészítõ + Sketcher + Vázlatkészítõ - Sketchflat sketch - Vázlatsík vázlat + Sketchflat sketch + Vázlatsík vázlat - Create a new sketchflat sketch by starting externel editor - Hozzon létre egy új vázlatsík vázlatot külső szerkesztő indításával + Create a new sketchflat sketch by starting externel editor + Hozzon létre egy új vázlatsík vázlatot külső szerkesztő indításával - - + + CmdSketcherToggleConstruction - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Toggle construction line - Szerkesztési vonalak átkapcsolása + + Toggle construction line + Szerkesztési vonalak átkapcsolása - Toggles the currently selected lines to/from construction mode - Az aktuálisan kiválasztott vonalak a szerkesztő mód -ból/-ba + + Toggles the currently selected lines to/from construction mode + Az aktuálisan kiválasztott vonalak a szerkesztő mód -ból/-ba - - + + CmdSketcherTrimming - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Trim edge - Él vágása + + Trim edge + Él vágása - Trims an edge with respect to the picked position - Él levágása, tekintettel a kiválasztott helyzetére + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Él levágása, tekintettel a kiválasztott helyzetére + + + CmdSketcherViewSketch - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - View sketch - vázlat nézet + + View sketch + vázlat nézet - View sketch perpendicular to sketch plane - A vázlat megtekintése merőleges vázlatsíkra + + View sketch perpendicular to sketch plane + A vázlat megtekintése merőleges vázlatsíkra - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Megjelenés + + Appearance + Megjelenés - - + + QObject - - Wrong selection - Hibás kijelölés + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Hibás kijelölés - Select edge(s) from the sketch. - A kiválasztott él(ek) a vázlatból való. + + Select edge(s) from the sketch. + A kiválasztott él(ek) a vázlatból való. - - Select an edge from the sketch. - Egy él kiválasztása a vázlaton + + + Select an edge from the sketch. + Egy él kiválasztása a vázlaton - Double constraint - Kettős kényszer + + + Double constraint + Kettős kényszer - The selected edge has already a horizontal constraint! - A kiválasztott él már rendelkezik egy vízszintes korláttal! + + + The selected edge has already a horizontal constraint! + A kiválasztott él már rendelkezik egy vízszintes korláttal! - Impossible constraint - Lehetetlen korlátozás + + + + + + + Impossible constraint + Lehetetlen korlátozás - Only sketch and its support is allowed to select - Csak a vázlat és a támogatásy választható + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Az egyik kiválasztottnak vázlaton kell lennie + + + + Only sketch and its support is allowed to select + Csak a vázlat és a támogatásy választható - The selected edge is not a line segment - A kiválasztott él nem egyenes szakasz + + One of the selected has to be on the sketch + Az egyik kiválasztottnak vázlaton kell lennie - The selected edge has already a vertical constraint! - A kiválasztott él már rendelkezik egy függőleges kényszerrel! + + + The selected edge is not a line segment + A kiválasztott él nem egyenes szakasz - Select entities from the sketch. - Válasszon ki a szerkezetet a vázlatból. + + + The selected edge has already a vertical constraint! + A kiválasztott él már rendelkezik egy függőleges kényszerrel! - Select exactly one entity from the sketch. - Válasszon ki pontosan egy szerkezetet, a vázlatból. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Csomópont kiválasztása a vázlaton. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Két csomópont kiválasztása a vázlaton. + + Select entities from the sketch. + Válasszon ki a szerkezetet a vázlatból. - Select exactly one line or one point and one line or two points from the sketch. - Válasszon ki pontosan egy sort vagy egy pontot és egy sort és két pontot a vázlatból. + + + Select exactly one entity from the sketch. + Válasszon ki pontosan egy szerkezetet, a vázlatból. - Select exactly one point and one object from the sketch. - Válasszon ki pontosan egy pontot és egy objektumot a vázlatból. + + + + + + + Select vertexes from the sketch. + Csomópont kiválasztása a vázlaton. - Select exactly one line or up to two points from the sketch. - Válasszon ki pontosan egy vonalat, vagy legfeljebb két pontot a vázlatból. + + + + Select exactly two vertexes from the sketch. + Két csomópont kiválasztása a vázlaton. - Select two or more lines from the sketch. - Válasszon ki a két vagy több vonalat a vázlatból. + + + Select exactly one line or one point and one line or two points from the sketch. + Válasszon ki pontosan egy sort vagy egy pontot és egy sort és két pontot a vázlatból. - Select at least two lines from the sketch. - Válasszon ki legalább két vonalat a vázlatból. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Válasszon ki egy érvényes vonalat + + + Select exactly one point and one object from the sketch. + Válasszon ki pontosan egy pontot és egy objektumot a vázlatból. - The selected edge is not a valid line - A kiválasztott él nem érvényes vonal + + + + + Select exactly one line or up to two points from the sketch. + Válasszon ki pontosan egy vonalat, vagy legfeljebb két pontot a vázlatból. - Select exactly one arc or circle from the sketch. - Válasszon ki pontosan egy ívet vagy kört a vázlatból. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Válasszon ki pontosan egy-két vonalat a vázlatból. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Két él kiválasztása a vázlaton. + + Select two or more lines from the sketch. + Válasszon ki a két vagy több vonalat a vázlatból. - Select atleast two lines from the sketch. - Válasszon ki legalább két vonalat a vázlatból. + + Select at least two lines from the sketch. + Válasszon ki legalább két vonalat a vázlatból. - Select exactly two same geometries - Válasszon ki pontosan két azonos geometriát + + Select a valid line + Válasszon ki egy érvényes vonalat - Select valid geometries - Válasszon érvényes geometriákat + + The selected edge is not a valid line + A kiválasztott él nem érvényes vonal - Select geometry of similar type - Válasszon ki a hasonló típusú geometriát + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Válasszon ki két pontot és egy sort a vázlatból. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Egy vonal kiválasztása a vázlaton. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Két vonal kiválasztása a vázlaton. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Két vonal kiválasztása a vázlaton. + + + + Select exactly one arc or circle from the sketch. + Válasszon ki pontosan egy ívet vagy kört a vázlatból. - Select two entities from the sketch. - Válasszon ki két egységet a vázlatból. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Válassza ki pontosan két egységet a vázlatból. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Vázlat szerkesztése + + Select exactly one or two lines from the sketch. + Válasszon ki pontosan egy-két vonalat a vázlatból. - A dialog is already open in the task panel - Egy párbeszédablak már nyitva van a feladat panelen + + Select two edges from the sketch. + Két él kiválasztása a vázlaton. - Do you want to close this dialog? - Biztos be szeretné zárni a párbeszédpanelt? + + Select atleast two lines from the sketch. + Válasszon ki legalább két vonalat a vázlatból. - - Several sub-elements selected - Több elemet jelölt ki + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Egy támogatott ki kell választania felületet a vázlat létrehozásához! + + Sketch axes cannot be used in equality constraints + - No support face selected - A kijelölt felület nem támogatott + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Ki kell választani egy vázlatot támogató felületet! + + Cannot add a constraint between external geometries! + - No planar support - Nem támogatott sík + Select exactly two same geometries + Válasszon ki pontosan két azonos geometriát - You need a planar face as support for a sketch! - A vázlathoz, szükség van egy támogatott sík felületre! + Select valid geometries + Válasszon érvényes geometriákat - - Distance constraint - Távolság korlátozás + Select geometry of similar type + Válasszon ki a hasonló típusú geometriát - Not allowed to edit the datum because the sketch contains conflicting constraints - Nem megengedett, hogy módosítsa a datumot, mert a vázlat tartalmaz egymásnak ellentmondó megszorításokat + + + + Select two points and one line from the sketch. + Válasszon ki két pontot és egy sort a vázlatból. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Egy vonal kiválasztása a vázlaton. - - + + Select two lines from the sketch. + Két vonal kiválasztása a vázlaton. + + + Select exactly two lines from the sketch. + Két vonal kiválasztása a vázlaton. + + + + + Select two entities from the sketch. + Válasszon ki két egységet a vázlatból. + + + + + + + Select exactly two entities from the sketch. + Válassza ki pontosan két egységet a vázlatból. + + + + Edit sketch + Vázlat szerkesztése + + + + A dialog is already open in the task panel + Egy párbeszédablak már nyitva van a feladat panelen + + + + Do you want to close this dialog? + Biztos be szeretné zárni a párbeszédpanelt? + + + + Several sub-elements selected + Több elemet jelölt ki + + + + You have to select a single face as support for a sketch! + Egy támogatott ki kell választania felületet a vázlat létrehozásához! + + + + No support face selected + A kijelölt felület nem támogatott + + + + You have to select a face as support for a sketch! + Ki kell választani egy vázlatot támogató felületet! + + + + No planar support + Nem támogatott sík + + + + You need a planar face as support for a sketch! + A vázlathoz, szükség van egy támogatott sík felületre! + + + + Distance constraint + Távolság korlátozás + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Nem megengedett, hogy módosítsa a datumot, mert a vázlat tartalmaz egymásnak ellentmondó megszorításokat + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Válasszon orientáció + Choose orientation + Válasszon orientáció - Sketch orientation - Vázlat orientáció + Sketch orientation + Vázlat orientáció - XY-Plane - XY-sík + XY-Plane + XY-sík - XZ-Plane - XZ-sík + XZ-Plane + XZ-sík - YZ-Plane - YZ-sík + YZ-Plane + YZ-sík - Reverse direction - Fordított irányban + Reverse direction + Fordított irányban - Offset: - Eltolás: + Offset: + Eltolás: - - + + SketcherGui::InsertDatum - - Insert datum - Adat beszúrása + + Insert datum + Adat beszúrása - datum: - adat: + + datum: + adat: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Válasszon orientáció + + + + Sketch orientation + Vázlat orientáció + + + + XY-Plane + XY-sík + + + + XZ-Plane + XZ-sík + + + + YZ-Plane + YZ-sík + + + + Reverse direction + Fordított irányban + + + + Offset: + Eltolás: + + + SketcherGui::TaskSketcherConstrains - - Form - Űrlap + + Form + Űrlap - Filter: - Szűrő: + + Filter: + Szűrő: - All - Minden + + All + Minden - Normal - Normál + + Normal + Normál - Datums - Adatok + + Datums + Adatok - Named - Elnevezés + + Named + Elnevezés - - Constraints - Megkötések + + Constraints + Megkötések - - + + SketcherGui::TaskSketcherGeneral - - Form - Űrlap + + Form + Űrlap - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Megoldatlan + Unsolved + Megoldatlan - Grid Snap - Rácshoz ugrás + Grid Snap + Rácshoz ugrás - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - automatikus megkötések + + Auto constraints + automatikus megkötések - auto constraints - automatikus megkötések + auto constraints + automatikus megkötések - - Edit controls - Szerkesztés ellenőrzés + + Edit controls + Szerkesztés ellenőrzés - - + + SketcherGui::TaskSketcherMessages - - Solver messages - megoldási üzenetek + + Solver messages + megoldási üzenetek - - + + TaskSketcherConstrains - Constraints - Megkötések + Constraints + Megkötések - - + + TaskSketcherCreateCommands - Appearance - Megjelenés + Appearance + Megjelenés - - + + TaskSketcherGeneral - Edit controls - Szerkesztés ellenőrzés + Edit controls + Szerkesztés ellenőrzés - - + + TaskSketcherMessages - - Form - Űrlap + + Form + Űrlap - Undefined degrees of freedom - Nem definiált szabadsági fok + + Undefined degrees of freedom + Nem definiált szabadsági fok - Not solved yet - Nem megoldott + + Not solved yet + Nem megoldott - - + + Workbench - - Sketcher - Vázlatkészítõ + + Sketcher + Vázlatkészítõ - Sketcher geometries - Geometriák vázlatkészítõje + + Sketcher geometries + Geometriák vázlatkészítõje - Sketcher geoms - Vázlat geometriák + Sketcher geoms + Vázlat geometriák - Sketcher constraints - Vázlatkészítési kényszerek + + Sketcher constraints + Vázlatkészítési kényszerek - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_it.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_it.ts index 08cddc668..7e6abc346 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_it.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_it.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain angle - Vincolo di angolo + + Constrain angle + Vincolo di angolo - Fix the angle of a line or the angle between two lines - Fissa l'angolo di una linea o l'angolo tra due linee + + Fix the angle of a line or the angle between two lines + Fissa l'angolo di una linea o l'angolo tra due linee - - + + CmdSketcherConstrainCoincident - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain coincident - Vincolo di coincidenza + + Constrain coincident + Vincolo di coincidenza - Create a coincident constraint on the selected item - Crea un vincolo di coincidenza sull'elemento selezionato + + Create a coincident constraint on the selected item + Crea un vincolo di coincidenza sull'elemento selezionato - - + + CmdSketcherConstrainDistance - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain distance - Vincolo di distanza + + Constrain distance + Vincolo di distanza - Fix a length of a line or the distance between a line and a vertex - Fissa la lunghezza di una linea o la distanza tra una linea e un vertice + + Fix a length of a line or the distance between a line and a vertex + Fissa la lunghezza di una linea o la distanza tra una linea e un vertice - - + + CmdSketcherConstrainDistanceX - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain vertical distance - Vincolo di distanza verticale + + Constrain horizontal distance + Vincolo di distanza orizzontale - Fix the horizontal distance between two points or line ends - Fissa la distanza orizzontale tra due punti o estremi di una linea + Constrain vertical distance + Vincolo di distanza verticale - - + + + Fix the horizontal distance between two points or line ends + Fissa la distanza orizzontale tra due punti o estremi di una linea + + + CmdSketcherConstrainDistanceY - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain horizontal distance - Vincolo di distanza orizzontale + + Constrain vertical distance + Vincolo di distanza verticale - Fix the vertical distance between two points or line ends - Fissa la distanza verticale tra due punti o estremi di una linea + Constrain horizontal distance + Vincolo di distanza orizzontale - - + + + Fix the vertical distance between two points or line ends + Fissa la distanza verticale tra due punti o estremi di una linea + + + CmdSketcherConstrainEqual - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain equal - Vincolo di uguaglianza + + Constrain equal + Vincolo di uguaglianza - Create an equality constraint between two lines or between circles and arcs - Crea un vincolo di uguaglianza tra due linee o tra cerchi e archi + + Create an equality constraint between two lines or between circles and arcs + Crea un vincolo di uguaglianza tra due linee o tra cerchi e archi - - + + CmdSketcherConstrainHorizontal - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain horizontally - Vincolo orizzontale + + Constrain horizontally + Vincolo orizzontale - Create a horizontal constraint on the selected item - Crea un vincolo orizzontale sull'elemento selezionato + + Create a horizontal constraint on the selected item + Crea un vincolo orizzontale sull'elemento selezionato - - + + CmdSketcherConstrainLock - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain lock - Vincolo bloccato + + Constrain lock + Vincolo bloccato - Create a lock constraint on the selected item - Crea un vincolo bloccato sull'elemento selezionato + + Create a lock constraint on the selected item + Crea un vincolo bloccato sull'elemento selezionato - - + + CmdSketcherConstrainParallel - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain parallel - Vincolo di parallelismo + + Constrain parallel + Vincolo di parallelismo - Create a parallel constraint between two lines - Crea un vincolo di parallelismo tra due linee + + Create a parallel constraint between two lines + Crea un vincolo di parallelismo tra due linee - - + + CmdSketcherConstrainPerpendicular - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain perpendicular - Vincolo perpendicolare + + Constrain perpendicular + Vincolo perpendicolare - Create a Perpendicular constraint between two lines - Crea un vincolo perpendicolare tra due linee + + Create a Perpendicular constraint between two lines + Crea un vincolo perpendicolare tra due linee - - + + CmdSketcherConstrainPointOnObject - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain point onto object - Vincolo di punto su oggetto + + Constrain point onto object + Vincolo di punto su oggetto - Fix a point onto an object - Fissa un punto su un oggetto + + Fix a point onto an object + Fissa un punto su un oggetto - - + + CmdSketcherConstrainRadius - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain radius - Vincolo di raggio + + Constrain radius + Vincolo di raggio - Fix the radius of a circle or an arc - Fissa il raggio di un cerchio o di un arco + + Fix the radius of a circle or an arc + Fissa il raggio di un cerchio o di un arco - - + + CmdSketcherConstrainSymmetric - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain symmetrical - Vincolo di simmetria + + Constrain symmetrical + Vincolo di simmetria - Create an symmetry constraint between two points with respect to a line - Crea un vincolo di simmetria tra due punti rispetto a una linea + + Create an symmetry constraint between two points with respect to a line + Crea un vincolo di simmetria tra due punti rispetto a una linea - - + + CmdSketcherConstrainTangent - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain tangent - Vincolo tangente + + Constrain tangent + Vincolo tangente - Create a tangent constraint between two entities - Crea un vincolo di tangenza tra due entità + + Create a tangent constraint between two entities + Crea un vincolo di tangenza tra due entità - - + + CmdSketcherConstrainVertical - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain vertically - Vincolo verticale + + Constrain vertically + Vincolo verticale - Create a vertical constraint on the selected item - Crea un vincolo verticale sull'elemento selezionato + + Create a vertical constraint on the selected item + Crea un vincolo verticale sull'elemento selezionato - - + + CmdSketcherCreateArc - - Sketcher - Sketcher + + Sketcher + Sketcher - Create arc - Crea arco + + Create arc + Crea arco - Create an arc in the sketch - Crea un arco nello schizzo + + Create an arc in the sketch + Crea un arco nello schizzo - - + + CmdSketcherCreateCircle - Sketcher - Sketcher + + Sketcher + Sketcher - Create circle - Crea cerchio + + Create circle + Crea cerchio - Create a circle in the sketch - Crea un cerchio nello schizzo + + Create a circle in the sketch + Crea un cerchio nello schizzo - - + + CmdSketcherCreateDraftLine - Sketcher - Sketcher + + Sketcher + Sketcher - Create draft line - Crea linea di costruzione + + Create draft line + Crea linea di costruzione - Create a draft line in the sketch - Crea una linea di costruzione nello schizzo + + Create a draft line in the sketch + Crea una linea di costruzione nello schizzo - - + + CmdSketcherCreateFillet - Sketcher - Sketcher + + Sketcher + Sketcher - Create fillet - Crea raccordo + + Create fillet + Crea raccordo - Create a fillet between two lines or at a coincident point - Creare un raccordo tra due linee o in un punto coincidente + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Creare un raccordo tra due linee o in un punto coincidente + + + CmdSketcherCreateLine - Sketcher - Sketcher + + Sketcher + Sketcher - Create line - Crea linea + + Create line + Crea linea - Create a line in the sketch - Crea una linea nello schizzo + + Create a line in the sketch + Crea una linea nello schizzo - - + + CmdSketcherCreatePoint - Sketcher - Sketcher + + Sketcher + Sketcher - Create point - Crea punto + + Create point + Crea punto - Create a point in the sketch - Crea un punto nello schizzo + + Create a point in the sketch + Crea un punto nello schizzo - - + + CmdSketcherCreatePolyline - Sketcher - Sketcher + + Sketcher + Sketcher - Create polyline - Crea polilinea + + Create polyline + Crea polilinea - Create a polyline in the sketch - Crea una polilinea nello schizzo + + Create a polyline in the sketch + Crea una polilinea nello schizzo - - + + CmdSketcherCreateRectangle - Sketcher - Sketcher + + Sketcher + Sketcher - Create rectangle - Crea rettangolo + + Create rectangle + Crea rettangolo - Create a rectangle in the sketch - Crea un rettangolo nello schizzo + + Create a rectangle in the sketch + Crea un rettangolo nello schizzo - - + + CmdSketcherCreateText - Sketcher - Sketcher + + Sketcher + Sketcher - Create text - Crea testo + + Create text + Crea testo - Create text in the sketch - Crea testo nello sketch + + Create text in the sketch + Crea testo nello sketch - - + + + CmdSketcherExternal + + + Sketcher + Sketcher + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Sketcher + + Sketcher + Sketcher - Leave sketch - Esci + + Leave sketch + Esci - Close the editing of the sketch - Chiude la modifica dello schizzo + + Close the editing of the sketch + Chiude la modifica dello schizzo - - + + CmdSketcherMapSketch - Sketcher - Sketcher + + Sketcher + Sketcher - Map sketch to face... - Mappa schizzo su faccia... + + Map sketch to face... + Mappa schizzo su faccia... - Map a sketch to a face - Mappa uno sketch su una faccia + + Map a sketch to a face + Mappa uno sketch su una faccia - - + + CmdSketcherNewSketch - Sketcher - Sketcher + + Sketcher + Sketcher - Create sketch - Crea schizzo + + Create sketch + Crea schizzo - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Crea un nuovo schizzo + Create a new sketch + Crea un nuovo schizzo - - + + CmdSketcherNewSketchSF - Sketcher - Sketcher + Sketcher + Sketcher - Sketchflat sketch - Sketchflat sketch + Sketchflat sketch + Sketchflat sketch - Create a new sketchflat sketch by starting externel editor - Crea un nuovo sketch sketchflat avviando l'editor esterno + Create a new sketchflat sketch by starting externel editor + Crea un nuovo sketch sketchflat avviando l'editor esterno - - + + CmdSketcherToggleConstruction - - Sketcher - Sketcher + + Sketcher + Sketcher - Toggle construction line - Attiva/disattiva linea di costruzione + + Toggle construction line + Attiva/disattiva linea di costruzione - Toggles the currently selected lines to/from construction mode - Attiva/disattiva le linee attualmente selezionate da modalità di costruzione + + Toggles the currently selected lines to/from construction mode + Attiva/disattiva le linee attualmente selezionate da modalità di costruzione - - + + CmdSketcherTrimming - - Sketcher - Sketcher + + Sketcher + Sketcher - Trim edge - Taglia spigolo + + Trim edge + Taglia spigolo - Trims an edge with respect to the picked position - Taglia uno spigolo rispetto ad una posizione specificata + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Taglia uno spigolo rispetto ad una posizione specificata + + + CmdSketcherViewSketch - - Sketcher - Sketcher + + Sketcher + Sketcher - View sketch - Visualizza lo sketch + + View sketch + Visualizza lo sketch - View sketch perpendicular to sketch plane - Vista perpendicolare al piano di sketch + + View sketch perpendicular to sketch plane + Vista perpendicolare al piano di sketch - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Aspetto + + Appearance + Aspetto - - + + QObject - - Wrong selection - Selezione errata + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Selezione errata - Select edge(s) from the sketch. - Seleziona spigoli dello sketch. + + Select edge(s) from the sketch. + Seleziona spigoli dello sketch. - - Select an edge from the sketch. - Seleziona uno spigolo dallo sketch. + + + Select an edge from the sketch. + Seleziona uno spigolo dallo sketch. - Double constraint - Doppio vincolo + + + Double constraint + Doppio vincolo - The selected edge has already a horizontal constraint! - Lo spigolo selezionato ha già un vincolo orizzontale! + + + The selected edge has already a horizontal constraint! + Lo spigolo selezionato ha già un vincolo orizzontale! - Impossible constraint - Vincolo Impossible + + + + + + + Impossible constraint + Vincolo Impossible - Only sketch and its support is allowed to select - E' consentito selezionare solo lo sketch e il suo supporto + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Una delle entità selezionate deve essere sullo sketch + + + + Only sketch and its support is allowed to select + E' consentito selezionare solo lo sketch e il suo supporto - The selected edge is not a line segment - Lo spigolo selezionato non è un segmento di linea + + One of the selected has to be on the sketch + Una delle entità selezionate deve essere sullo sketch - The selected edge has already a vertical constraint! - Lo spigolo selezionato ha già un vincolo verticale! + + + The selected edge is not a line segment + Lo spigolo selezionato non è un segmento di linea - Select entities from the sketch. - Seleziona entità dello sketch. + + + The selected edge has already a vertical constraint! + Lo spigolo selezionato ha già un vincolo verticale! - Select exactly one entity from the sketch. - Seleziona esattamente una entità dello sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Seleziona vertici dallo sketch. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Seleziona esattamente due vertici dallo sketch. + + Select entities from the sketch. + Seleziona entità dello sketch. - Select exactly one line or one point and one line or two points from the sketch. - Selezionare esattamente una linea o un punto e una linea o due punti dello sketch. + + + Select exactly one entity from the sketch. + Seleziona esattamente una entità dello sketch. - Select exactly one point and one object from the sketch. - Seleziona esattamente un punto e un oggetto dello sketch. + + + + + + + Select vertexes from the sketch. + Seleziona vertici dallo sketch. - Select exactly one line or up to two points from the sketch. - Seleziona esattamente una linea o fino a due punti dello sketch. + + + + Select exactly two vertexes from the sketch. + Seleziona esattamente due vertici dallo sketch. - Select two or more lines from the sketch. - Seleziona due o più linee dello sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Selezionare esattamente una linea o un punto e una linea o due punti dello sketch. - Select at least two lines from the sketch. - Seleziona almeno due linee dello sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Seleziona una linea valida + + + Select exactly one point and one object from the sketch. + Seleziona esattamente un punto e un oggetto dello sketch. - The selected edge is not a valid line - Lo spigolo selezionato non è una linea valida + + + + + Select exactly one line or up to two points from the sketch. + Seleziona esattamente una linea o fino a due punti dello sketch. - Select exactly one arc or circle from the sketch. - Seleziona esattamente un arco o cerchio dello sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Seleziona esattamente una o due linee dello sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Seleziona due spigoli dello sketch. + + Select two or more lines from the sketch. + Seleziona due o più linee dello sketch. - Select atleast two lines from the sketch. - Seleziona almeno due linee dello sketch. + + Select at least two lines from the sketch. + Seleziona almeno due linee dello sketch. - Select exactly two same geometries - Seleziona esattamente due geometrie simili + + Select a valid line + Seleziona una linea valida - Select valid geometries - Seleziona geometrie valide + + The selected edge is not a valid line + Lo spigolo selezionato non è una linea valida - Select geometry of similar type - Seleziona una geometria di tipo simile + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Seleziona due punti e una linea dello sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Seleziona esattamente una linea dallo sketch. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Seleziona due linee dallo sketch. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Selezionare esattamente due linee dallo sketch. + + + + Select exactly one arc or circle from the sketch. + Seleziona esattamente un arco o cerchio dello sketch. - Select two entities from the sketch. - Seleziona due entità dello sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Seleziona esattamente due entità dello sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Modifica sketch + + Select exactly one or two lines from the sketch. + Seleziona esattamente una o due linee dello sketch. - A dialog is already open in the task panel - Una finestra di dialogo è già aperta nel pannello attività + + Select two edges from the sketch. + Seleziona due spigoli dello sketch. - Do you want to close this dialog? - Vuoi chiudere questa finestra di dialogo? + + Select atleast two lines from the sketch. + Seleziona almeno due linee dello sketch. - - Several sub-elements selected - Diversi sottoelementi selezionati + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Devi selezionare una singola faccia come supporto per uno sketch! + + Sketch axes cannot be used in equality constraints + - No support face selected - Nessuna faccia di supporto selezionata + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Devi selezionare una faccia come supporto per uno sketch! + + Cannot add a constraint between external geometries! + - No planar support - Nessun supporto planare + Select exactly two same geometries + Seleziona esattamente due geometrie simili - You need a planar face as support for a sketch! - Hai bisogno di una faccia planare come supporto per uno sketch! + Select valid geometries + Seleziona geometrie valide - - Distance constraint - Vincolo di distanza + Select geometry of similar type + Seleziona una geometria di tipo simile - Not allowed to edit the datum because the sketch contains conflicting constraints - Non è consentito modificare il dato perché lo sketch contiene vincoli in conflitto + + + + Select two points and one line from the sketch. + Seleziona due punti e una linea dello sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Seleziona esattamente una linea dallo sketch. - - + + Select two lines from the sketch. + Seleziona due linee dallo sketch. + + + Select exactly two lines from the sketch. + Selezionare esattamente due linee dallo sketch. + + + + + Select two entities from the sketch. + Seleziona due entità dello sketch. + + + + + + + Select exactly two entities from the sketch. + Seleziona esattamente due entità dello sketch. + + + + Edit sketch + Modifica sketch + + + + A dialog is already open in the task panel + Una finestra di dialogo è già aperta nel pannello attività + + + + Do you want to close this dialog? + Vuoi chiudere questa finestra di dialogo? + + + + Several sub-elements selected + Diversi sottoelementi selezionati + + + + You have to select a single face as support for a sketch! + Devi selezionare una singola faccia come supporto per uno sketch! + + + + No support face selected + Nessuna faccia di supporto selezionata + + + + You have to select a face as support for a sketch! + Devi selezionare una faccia come supporto per uno sketch! + + + + No planar support + Nessun supporto planare + + + + You need a planar face as support for a sketch! + Hai bisogno di una faccia planare come supporto per uno sketch! + + + + Distance constraint + Vincolo di distanza + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Non è consentito modificare il dato perché lo sketch contiene vincoli in conflitto + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Scegli l'orientamento + Choose orientation + Scegli l'orientamento - Sketch orientation - Orientamento dello sketch + Sketch orientation + Orientamento dello sketch - XY-Plane - Piano XY + XY-Plane + Piano XY - XZ-Plane - Piano XZ + XZ-Plane + Piano XZ - YZ-Plane - Piano YZ + YZ-Plane + Piano YZ - Reverse direction - Direzione inversa + Reverse direction + Direzione inversa - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Inserisci riferimento + + Insert datum + Inserisci riferimento - datum: - Riferimento: + + datum: + Riferimento: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Scegli l'orientamento + + + + Sketch orientation + Orientamento dello sketch + + + + XY-Plane + Piano XY + + + + XZ-Plane + Piano XZ + + + + YZ-Plane + Piano YZ + + + + Reverse direction + Direzione inversa + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Modulo + + Form + Modulo - Filter: - Filtro: + + Filter: + Filtro: - All - Tutto + + All + Tutto - Normal - Normale + + Normal + Normale - Datums - Riferimenti + + Datums + Riferimenti - Named - Denominato + + Named + Denominato - - Constraints - Vincoli + + Constraints + Vincoli - - + + SketcherGui::TaskSketcherGeneral - - Form - Modulo + + Form + Modulo - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Non risolto + Unsolved + Non risolto - Grid Snap - Snap griglia + Grid Snap + Snap griglia - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.2 mm - 0,2 mm + 0.2 mm + 0,2 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Autovincoli + + Auto constraints + Autovincoli - auto constraints - vincoli automatici + auto constraints + vincoli automatici - - Edit controls - Modifica controlli + + Edit controls + Modifica controlli - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Messaggi Solver + + Solver messages + Messaggi Solver - - + + TaskSketcherConstrains - Constraints - Vincoli + Constraints + Vincoli - - + + TaskSketcherCreateCommands - Appearance - Aspetto + Appearance + Aspetto - - + + TaskSketcherGeneral - Edit controls - Modifica controlli + Edit controls + Modifica controlli - - + + TaskSketcherMessages - - Form - Modulo + + Form + Modulo - Undefined degrees of freedom - Gradi di libertà indefiniti + + Undefined degrees of freedom + Gradi di libertà indefiniti - Not solved yet - Non ancora risolto + + Not solved yet + Non ancora risolto - - + + Workbench - - Sketcher - Sketcher + + Sketcher + Sketcher - Sketcher geometries - Geometrie Sketcher + + Sketcher geometries + Geometrie Sketcher - Sketcher geoms - Geometrie dello Sketcher + Sketcher geoms + Geometrie dello Sketcher - Sketcher constraints - Vincoli dello Sketcher + + Sketcher constraints + Vincoli dello Sketcher - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ja.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ja.ts index 8f01f74a9..ed47da1e9 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ja.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ja.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain angle - 角度を拘束 + + Constrain angle + 角度を拘束 - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain coincident - 同時拘束 + + Constrain coincident + 同時拘束 - Create a coincident constraint on the selected item - Create a coincident constraint on the selected item + + Create a coincident constraint on the selected item + Create a coincident constraint on the selected item - - + + CmdSketcherConstrainDistance - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain distance - 変位拘束 + + Constrain distance + 変位拘束 - Fix a length of a line or the distance between a line and a vertex - Fix a length of a line or the distance between a line and a vertex + + Fix a length of a line or the distance between a line and a vertex + Fix a length of a line or the distance between a line and a vertex - - + + CmdSketcherConstrainDistanceX - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain vertical distance - 垂直方向の距離を制約する + + Constrain horizontal distance + 水平変位を拘束 - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + 垂直方向の距離を制約する - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain horizontal distance - 水平変位を拘束 + + Constrain vertical distance + 垂直方向の距離を制約する - Fix the vertical distance between two points or line ends - 2つの点や線の端点の間の垂直距離を修正 + Constrain horizontal distance + 水平変位を拘束 - - + + + Fix the vertical distance between two points or line ends + 2つの点や線の端点の間の垂直距離を修正 + + + CmdSketcherConstrainEqual - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain horizontally - 水平拘束 + + Constrain horizontally + 水平拘束 - Create a horizontal constraint on the selected item - Create a horizontal constraint on the selected item + + Create a horizontal constraint on the selected item + Create a horizontal constraint on the selected item - - + + CmdSketcherConstrainLock - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain lock - Constrain lock + + Constrain lock + Constrain lock - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain parallel - 平行拘束 + + Constrain parallel + 平行拘束 - Create a parallel constraint between two lines - 2直線間の平行拘束を作成します + + Create a parallel constraint between two lines + 2直線間の平行拘束を作成します - - + + CmdSketcherConstrainPerpendicular - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain perpendicular - 垂直拘束 + + Constrain perpendicular + 垂直拘束 - Create a Perpendicular constraint between two lines - 2つの直線間の垂直拘束を作成 + + Create a Perpendicular constraint between two lines + 2つの直線間の垂直拘束を作成 - - + + CmdSketcherConstrainPointOnObject - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain radius - 半径を拘束 + + Constrain radius + 半径を拘束 - Fix the radius of a circle or an arc - 円の半径または円弧を修正 + + Fix the radius of a circle or an arc + 円の半径または円弧を修正 - - + + CmdSketcherConstrainSymmetric - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Sketcher + + Sketcher + Sketcher - Constrain vertically - 垂直拘束 + + Constrain vertically + 垂直拘束 - Create a vertical constraint on the selected item - 選択した項目の垂直拘束を作成します + + Create a vertical constraint on the selected item + 選択した項目の垂直拘束を作成します - - + + CmdSketcherCreateArc - - Sketcher - Sketcher + + Sketcher + Sketcher - Create arc - 円弧 + + Create arc + 円弧 - Create an arc in the sketch - スケッチに円弧を作成します + + Create an arc in the sketch + スケッチに円弧を作成します - - + + CmdSketcherCreateCircle - Sketcher - Sketcher + + Sketcher + Sketcher - Create circle - + + Create circle + - Create a circle in the sketch - スケッチの円を作成します + + Create a circle in the sketch + スケッチの円を作成します - - + + CmdSketcherCreateDraftLine - Sketcher - Sketcher + + Sketcher + Sketcher - Create draft line - Create draft line + + Create draft line + Create draft line - Create a draft line in the sketch - Create a draft line in the sketch + + Create a draft line in the sketch + Create a draft line in the sketch - - + + CmdSketcherCreateFillet - Sketcher - Sketcher + + Sketcher + Sketcher - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Sketcher + + Sketcher + Sketcher - Create line - 直線 + + Create line + 直線 - Create a line in the sketch - 直線のスケッチを作成します + + Create a line in the sketch + 直線のスケッチを作成します - - + + CmdSketcherCreatePoint - Sketcher - Sketcher + + Sketcher + Sketcher - Create point - + + Create point + - Create a point in the sketch - 点のスケッチを作成します + + Create a point in the sketch + 点のスケッチを作成します - - + + CmdSketcherCreatePolyline - Sketcher - Sketcher + + Sketcher + Sketcher - Create polyline - ポリライン + + Create polyline + ポリライン - Create a polyline in the sketch - ポリラインのスケッチを作成します + + Create a polyline in the sketch + ポリラインのスケッチを作成します - - + + CmdSketcherCreateRectangle - Sketcher - Sketcher + + Sketcher + Sketcher - Create rectangle - 矩形を作成 + + Create rectangle + 矩形を作成 - Create a rectangle in the sketch - 矩形のスケッチを作成します + + Create a rectangle in the sketch + 矩形のスケッチを作成します - - + + CmdSketcherCreateText - Sketcher - Sketcher + + Sketcher + Sketcher - Create text - テキスト + + Create text + テキスト - Create text in the sketch - テキストのスケッチを作成します + + Create text in the sketch + テキストのスケッチを作成します - - + + + CmdSketcherExternal + + + Sketcher + Sketcher + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Sketcher + + Sketcher + Sketcher - Leave sketch - スケッチを終了 + + Leave sketch + スケッチを終了 - Close the editing of the sketch - Close the editing of the sketch + + Close the editing of the sketch + Close the editing of the sketch - - + + CmdSketcherMapSketch - Sketcher - Sketcher + + Sketcher + Sketcher - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Sketcher + + Sketcher + Sketcher - Create sketch - スケッチを作成します。 + + Create sketch + スケッチを作成します。 - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - 新規スケッチを作成 + Create a new sketch + 新規スケッチを作成 - - + + CmdSketcherNewSketchSF - Sketcher - Sketcher + Sketcher + Sketcher - Sketchflat sketch - Sketchflat sketch + Sketchflat sketch + Sketchflat sketch - Create a new sketchflat sketch by starting externel editor - Create a new sketchflat sketch by starting externel editor + Create a new sketchflat sketch by starting externel editor + Create a new sketchflat sketch by starting externel editor - - + + CmdSketcherToggleConstruction - - Sketcher - Sketcher + + Sketcher + Sketcher - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Sketcher + + Sketcher + Sketcher - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Sketcher + + Sketcher + Sketcher - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - 外観 + + Appearance + 外観 - - + + QObject - - Wrong selection - 誤った選択 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + 誤った選択 - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - スケッチからエッジを選択します + + + Select an edge from the sketch. + スケッチからエッジを選択します - Double constraint - Double constraint + + + Double constraint + Double constraint - The selected edge has already a horizontal constraint! - The selected edge has already a horizontal constraint! + + + The selected edge has already a horizontal constraint! + The selected edge has already a horizontal constraint! - Impossible constraint - 不可能な拘束 + + + + + + + Impossible constraint + 不可能な拘束 - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - The selected edge has already a vertical constraint! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + The selected edge has already a vertical constraint! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Select vertexes from the sketch. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Select exactly two vertexes from the sketch. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Select vertexes from the sketch. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Select exactly two vertexes from the sketch. - Select two or more lines from the sketch. - スケッチから2本以上の直線を選択しま.。 + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - 有効な直線を選択 + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - スケッチから二つのエッジを選択します. + + Select two or more lines from the sketch. + スケッチから2本以上の直線を選択しま.。 - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + 有効な直線を選択 - Select valid geometries - 有効なジオメトリを選択してください + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - 同じタイプのジオメトリを選択 + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - 2つの点と1つの直線をスケッチから選択 + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Select exactly one line from the sketch. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - スケッチから2本の直線を選択します. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Select exactly two lines from the sketch. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - スケッチを編集 + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - A dialog is already open in the task panel + + Select two edges from the sketch. + スケッチから二つのエッジを選択します. - Do you want to close this dialog? - Do you want to close this dialog? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - いくつかのサブ要素を選択 + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - You have to select a single face as support for a sketch! + + Sketch axes cannot be used in equality constraints + - No support face selected - No support face selected + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - You have to select a face as support for a sketch! + + Cannot add a constraint between external geometries! + - No planar support - No planar support + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - You need a planar face as support for a sketch! + Select valid geometries + 有効なジオメトリを選択してください - - Distance constraint - 変位の拘束 + Select geometry of similar type + 同じタイプのジオメトリを選択 - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + 2つの点と1つの直線をスケッチから選択 - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Select exactly one line from the sketch. - - + + Select two lines from the sketch. + スケッチから2本の直線を選択します. + + + Select exactly two lines from the sketch. + Select exactly two lines from the sketch. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + スケッチを編集 + + + + A dialog is already open in the task panel + A dialog is already open in the task panel + + + + Do you want to close this dialog? + Do you want to close this dialog? + + + + Several sub-elements selected + いくつかのサブ要素を選択 + + + + You have to select a single face as support for a sketch! + You have to select a single face as support for a sketch! + + + + No support face selected + No support face selected + + + + You have to select a face as support for a sketch! + You have to select a face as support for a sketch! + + + + No planar support + No planar support + + + + You need a planar face as support for a sketch! + You need a planar face as support for a sketch! + + + + Distance constraint + 変位の拘束 + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - 方向を選択 + Choose orientation + 方向を選択 - Sketch orientation - スケッチの向き + Sketch orientation + スケッチの向き - XY-Plane - xy平面 + XY-Plane + xy平面 - XZ-Plane - XZ 平面 + XZ-Plane + XZ 平面 - YZ-Plane - YZ 平面 + YZ-Plane + YZ 平面 - Reverse direction - 逆方向 + Reverse direction + 逆方向 - Offset: - オフセット: + Offset: + オフセット: - - + + SketcherGui::InsertDatum - - Insert datum - Insert datum + + Insert datum + Insert datum - datum: - datum: + + datum: + datum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + 方向を選択 + + + + Sketch orientation + スケッチの向き + + + + XY-Plane + xy平面 + + + + XZ-Plane + XZ 平面 + + + + YZ-Plane + YZ 平面 + + + + Reverse direction + 逆方向 + + + + Offset: + オフセット: + + + SketcherGui::TaskSketcherConstrains - - Form - Form + + Form + Form - Filter: - フィルター: + + Filter: + フィルター: - All - すべて + + All + すべて - Normal - 法線 + + Normal + 法線 - Datums - Datums + + Datums + Datums - Named - Named + + Named + Named - - Constraints - Constraints + + Constraints + Constraints - - + + SketcherGui::TaskSketcherGeneral - - Form - Form + + Form + Form - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Unsolved + Unsolved + Unsolved - Grid Snap - Grid Snap + Grid Snap + Grid Snap - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - auto constraints + auto constraints + auto constraints - - Edit controls - Edit controls + + Edit controls + Edit controls - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Constraints + Constraints + Constraints - - + + TaskSketcherCreateCommands - Appearance - 外観 + Appearance + 外観 - - + + TaskSketcherGeneral - Edit controls - Edit controls + Edit controls + Edit controls - - + + TaskSketcherMessages - - Form - Form + + Form + Form - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - 未解決 + + Not solved yet + 未解決 - - + + Workbench - - Sketcher - Sketcher + + Sketcher + Sketcher - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Sketcher geoms + Sketcher geoms + Sketcher geoms - Sketcher constraints - Sketcher constraints + + Sketcher constraints + Sketcher constraints - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_nl.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_nl.ts index 899c8cfe9..360eb25e6 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_nl.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_nl.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain angle - Beperk hoek + + Constrain angle + Beperk hoek - Fix the angle of a line or the angle between two lines - Zet de hoek van een lijn of de hoek tussen twee lijnen vast + + Fix the angle of a line or the angle between two lines + Zet de hoek van een lijn of de hoek tussen twee lijnen vast - - + + CmdSketcherConstrainCoincident - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain coincident - Samenvallende beperking + + Constrain coincident + Samenvallende beperking - Create a coincident constraint on the selected item - Maak een samenvallende beperking op het geselecteerde item + + Create a coincident constraint on the selected item + Maak een samenvallende beperking op het geselecteerde item - - + + CmdSketcherConstrainDistance - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain distance - Afstand beperking + + Constrain distance + Afstand beperking - Fix a length of a line or the distance between a line and a vertex - Vergrendel de lengte van een lijn of de afstand tussen een lijn en een punt + + Fix a length of a line or the distance between a line and a vertex + Vergrendel de lengte van een lijn of de afstand tussen een lijn en een punt - - + + CmdSketcherConstrainDistanceX - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain vertical distance - Beperk verticale afstand + + Constrain horizontal distance + Beperk horizontale afstand - Fix the horizontal distance between two points or line ends - De horizontale afstand tussen twee punten of lijneinden vastzetten + Constrain vertical distance + Beperk verticale afstand - - + + + Fix the horizontal distance between two points or line ends + De horizontale afstand tussen twee punten of lijneinden vastzetten + + + CmdSketcherConstrainDistanceY - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain horizontal distance - Beperk horizontale afstand + + Constrain vertical distance + Beperk verticale afstand - Fix the vertical distance between two points or line ends - De verticale afstand tussen twee punten of lijneinden vastzetten + Constrain horizontal distance + Beperk horizontale afstand - - + + + Fix the vertical distance between two points or line ends + De verticale afstand tussen twee punten of lijneinden vastzetten + + + CmdSketcherConstrainEqual - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain equal - Gelijke beperken + + Constrain equal + Gelijke beperken - Create an equality constraint between two lines or between circles and arcs - Maak een Gelijkheidsbeperking tussen twee lijnen of tussen cirkels en bogen + + Create an equality constraint between two lines or between circles and arcs + Maak een Gelijkheidsbeperking tussen twee lijnen of tussen cirkels en bogen - - + + CmdSketcherConstrainHorizontal - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain horizontally - Horizontale beperking + + Constrain horizontally + Horizontale beperking - Create a horizontal constraint on the selected item - Maak een horizontale beperking op het geselecteerde item + + Create a horizontal constraint on the selected item + Maak een horizontale beperking op het geselecteerde item - - + + CmdSketcherConstrainLock - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain lock - Vastzet beperking + + Constrain lock + Vastzet beperking - Create a lock constraint on the selected item - Vergrendel het geselecteerde item + + Create a lock constraint on the selected item + Vergrendel het geselecteerde item - - + + CmdSketcherConstrainParallel - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain parallel - Parallelle-beperking + + Constrain parallel + Parallelle-beperking - Create a parallel constraint between two lines - Maak een parallelle beperking tussen twee lijnen + + Create a parallel constraint between two lines + Maak een parallelle beperking tussen twee lijnen - - + + CmdSketcherConstrainPerpendicular - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain perpendicular - Beperk loodrecht + + Constrain perpendicular + Beperk loodrecht - Create a Perpendicular constraint between two lines - Maak een Loodrecht-beperking tussen twee lijnen + + Create a Perpendicular constraint between two lines + Maak een Loodrecht-beperking tussen twee lijnen - - + + CmdSketcherConstrainPointOnObject - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain point onto object - Zet punt vast op object + + Constrain point onto object + Zet punt vast op object - Fix a point onto an object - Een punt op een object vastleggen + + Fix a point onto an object + Een punt op een object vastleggen - - + + CmdSketcherConstrainRadius - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain radius - Straal vastzetten + + Constrain radius + Straal vastzetten - Fix the radius of a circle or an arc - De straal van een cirkel of boog vastzetten + + Fix the radius of a circle or an arc + De straal van een cirkel of boog vastzetten - - + + CmdSketcherConstrainSymmetric - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain symmetrical - Symmetrische-beperken + + Constrain symmetrical + Symmetrische-beperken - Create an symmetry constraint between two points with respect to a line - Maak een symmetrie-beperking tussen twee punten ten opzichte van een lijn + + Create an symmetry constraint between two points with respect to a line + Maak een symmetrie-beperking tussen twee punten ten opzichte van een lijn - - + + CmdSketcherConstrainTangent - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain tangent - Tangent beperken + + Constrain tangent + Tangent beperken - Create a tangent constraint between two entities - Tangentiële beperkingen tussen twee entiteiten maken + + Create a tangent constraint between two entities + Tangentiële beperkingen tussen twee entiteiten maken - - + + CmdSketcherConstrainVertical - Sketcher - Schetsen + + Sketcher + Schetsen - Constrain vertically - Verticale beperking + + Constrain vertically + Verticale beperking - Create a vertical constraint on the selected item - Maak een verticale beperking op het geselecteerde item + + Create a vertical constraint on the selected item + Maak een verticale beperking op het geselecteerde item - - + + CmdSketcherCreateArc - - Sketcher - Schetsen + + Sketcher + Schetsen - Create arc - Boog maken + + Create arc + Boog maken - Create an arc in the sketch - Maak een boog in de schets + + Create an arc in the sketch + Maak een boog in de schets - - + + CmdSketcherCreateCircle - Sketcher - Schetsen + + Sketcher + Schetsen - Create circle - Cirkel maken + + Create circle + Cirkel maken - Create a circle in the sketch - Maak een cirkel in de schets + + Create a circle in the sketch + Maak een cirkel in de schets - - + + CmdSketcherCreateDraftLine - Sketcher - Schetsen + + Sketcher + Schetsen - Create draft line - Ontwerplijn maken + + Create draft line + Ontwerplijn maken - Create a draft line in the sketch - Maak een ontwerplijn in de schets + + Create a draft line in the sketch + Maak een ontwerplijn in de schets - - + + CmdSketcherCreateFillet - Sketcher - Schetsen + + Sketcher + Schetsen - Create fillet - Maak afronding + + Create fillet + Maak afronding - Create a fillet between two lines or at a coincident point - Maak een afronding tussen twee lijnen of op een samenvallend punt + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Maak een afronding tussen twee lijnen of op een samenvallend punt + + + CmdSketcherCreateLine - Sketcher - Schetsen + + Sketcher + Schetsen - Create line - Lijn maken + + Create line + Lijn maken - Create a line in the sketch - Maak een lijn in de schets + + Create a line in the sketch + Maak een lijn in de schets - - + + CmdSketcherCreatePoint - Sketcher - Schetsen + + Sketcher + Schetsen - Create point - Punt maken + + Create point + Punt maken - Create a point in the sketch - Maak een punt in de schets + + Create a point in the sketch + Maak een punt in de schets - - + + CmdSketcherCreatePolyline - Sketcher - Schetsen + + Sketcher + Schetsen - Create polyline - Meervoudige lijn maken + + Create polyline + Meervoudige lijn maken - Create a polyline in the sketch - Maak een meervoudige lijn in de schets + + Create a polyline in the sketch + Maak een meervoudige lijn in de schets - - + + CmdSketcherCreateRectangle - Sketcher - Schetsen + + Sketcher + Schetsen - Create rectangle - Rechthoek maken + + Create rectangle + Rechthoek maken - Create a rectangle in the sketch - Maak een rechthoek in de schets + + Create a rectangle in the sketch + Maak een rechthoek in de schets - - + + CmdSketcherCreateText - Sketcher - Schetsen + + Sketcher + Schetsen - Create text - Tekst aanmaken + + Create text + Tekst aanmaken - Create text in the sketch - Tekst in de tekening aanmaken + + Create text in the sketch + Tekst in de tekening aanmaken - - + + + CmdSketcherExternal + + + Sketcher + Schetsen + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Schetsen + + Sketcher + Schetsen - Leave sketch - Verlaat schets + + Leave sketch + Verlaat schets - Close the editing of the sketch - Sluit het bewerken van de schets + + Close the editing of the sketch + Sluit het bewerken van de schets - - + + CmdSketcherMapSketch - Sketcher - Schetsen + + Sketcher + Schetsen - Map sketch to face... - Wijs schets toe aan vlak... + + Map sketch to face... + Wijs schets toe aan vlak... - Map a sketch to a face - Een schets toewijzen aan een vlak + + Map a sketch to a face + Een schets toewijzen aan een vlak - - + + CmdSketcherNewSketch - Sketcher - Schetsen + + Sketcher + Schetsen - Create sketch - Maak schets + + Create sketch + Maak schets - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Maak een nieuwe schets + Create a new sketch + Maak een nieuwe schets - - + + CmdSketcherNewSketchSF - Sketcher - Schetsen + Sketcher + Schetsen - Sketchflat sketch - Sketchflat schets + Sketchflat sketch + Sketchflat schets - Create a new sketchflat sketch by starting externel editor - Een nieuwe sketchflat-schets maken door uitwendige editor te starten + Create a new sketchflat sketch by starting externel editor + Een nieuwe sketchflat-schets maken door uitwendige editor te starten - - + + CmdSketcherToggleConstruction - - Sketcher - Schetsen + + Sketcher + Schetsen - Toggle construction line - Schakel constructie-lijn + + Toggle construction line + Schakel constructie-lijn - Toggles the currently selected lines to/from construction mode - Schakelt de geselecteerde lijnen van/naar de constructie-modus + + Toggles the currently selected lines to/from construction mode + Schakelt de geselecteerde lijnen van/naar de constructie-modus - - + + CmdSketcherTrimming - - Sketcher - Schetsen + + Sketcher + Schetsen - Trim edge - Inkorten van rand + + Trim edge + Inkorten van rand - Trims an edge with respect to the picked position - Inkorten van rand in overeenstemming met de gekozen positie + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Inkorten van rand in overeenstemming met de gekozen positie + + + CmdSketcherViewSketch - - Sketcher - Schetsen + + Sketcher + Schetsen - View sketch - Bekijk schets + + View sketch + Bekijk schets - View sketch perpendicular to sketch plane - Bekijk schets loodrecht op het schetsvlak + + View sketch perpendicular to sketch plane + Bekijk schets loodrecht op het schetsvlak - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Vormgeving + + Appearance + Vormgeving - - + + QObject - - Wrong selection - Verkeerde selectie + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Verkeerde selectie - Select edge(s) from the sketch. - Selecteer rand(en) uit de schets. + + Select edge(s) from the sketch. + Selecteer rand(en) uit de schets. - - Select an edge from the sketch. - Selecteer een rand van de schets. + + + Select an edge from the sketch. + Selecteer een rand van de schets. - Double constraint - Dubbele beperking + + + Double constraint + Dubbele beperking - The selected edge has already a horizontal constraint! - De geselecteerde rand heeft al een horizontale beperking! + + + The selected edge has already a horizontal constraint! + De geselecteerde rand heeft al een horizontale beperking! - Impossible constraint - Onmogelijk beperking + + + + + + + Impossible constraint + Onmogelijk beperking - Only sketch and its support is allowed to select - Alleen schets en haar steun is toegestaan ​​om te selecteren + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Eén van de geselecteerde moet deel uitmaken van de schets + + + + Only sketch and its support is allowed to select + Alleen schets en haar steun is toegestaan ​​om te selecteren - The selected edge is not a line segment - De geselecteerde rand is niet een lijnstuk + + One of the selected has to be on the sketch + Eén van de geselecteerde moet deel uitmaken van de schets - The selected edge has already a vertical constraint! - De geselecteerde rand heeft al een verticale beperking! + + + The selected edge is not a line segment + De geselecteerde rand is niet een lijnstuk - Select entities from the sketch. - Selecteer entiteiten van de schets. + + + The selected edge has already a vertical constraint! + De geselecteerde rand heeft al een verticale beperking! - Select exactly one entity from the sketch. - Selecteer exact één entiteit van de schets. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Selecteer (hoek)punten van de schets. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Selecteer precies twee (hoek)punten van de schets. + + Select entities from the sketch. + Selecteer entiteiten van de schets. - Select exactly one line or one point and one line or two points from the sketch. - Selecteer precies één lijn of een punt en een lijn of twee punten uit de schets. + + + Select exactly one entity from the sketch. + Selecteer exact één entiteit van de schets. - Select exactly one point and one object from the sketch. - Selecteer exact één punt en één object uit de schets. + + + + + + + Select vertexes from the sketch. + Selecteer (hoek)punten van de schets. - Select exactly one line or up to two points from the sketch. - Selecteer precies een lijn of tot twee punten uit de schets. + + + + Select exactly two vertexes from the sketch. + Selecteer precies twee (hoek)punten van de schets. - Select two or more lines from the sketch. - Selecteer twee of meer lijnen van de schets. + + + Select exactly one line or one point and one line or two points from the sketch. + Selecteer precies één lijn of een punt en een lijn of twee punten uit de schets. - Select at least two lines from the sketch. - Kies tenminste twee lijnen van de schets. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Selecteer een geldige lijn + + + Select exactly one point and one object from the sketch. + Selecteer exact één punt en één object uit de schets. - The selected edge is not a valid line - De geselecteerde rand is geen geldige lijn + + + + + Select exactly one line or up to two points from the sketch. + Selecteer precies een lijn of tot twee punten uit de schets. - Select exactly one arc or circle from the sketch. - Selecteer precies een boog of cirkel uit de schets. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Selecteer precies een of twee lijnen uit de schets. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Selecteer twee randen van de schets. + + Select two or more lines from the sketch. + Selecteer twee of meer lijnen van de schets. - Select atleast two lines from the sketch. - Kies tenminste twee lijnen van de schets. + + Select at least two lines from the sketch. + Kies tenminste twee lijnen van de schets. - Select exactly two same geometries - Selecteer precies twee dezelfde geometrieën + + Select a valid line + Selecteer een geldige lijn - Select valid geometries - Selecteer geldige geometrieën + + The selected edge is not a valid line + De geselecteerde rand is geen geldige lijn - Select geometry of similar type - Selecteer geometrie van hetzelfde type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Selecteer twee punten en een lijn van de schets. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Selecteer precies één lijn van de schets. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Selecteer twee lijnen van de schets. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Selecteer precies twee lijnen van de schets. + + + + Select exactly one arc or circle from the sketch. + Selecteer precies een boog of cirkel uit de schets. - Select two entities from the sketch. - Selecteer twee entiteiten uit de schets. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Selecteer precies twee entiteiten uit de schets. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Schets bewerken + + Select exactly one or two lines from the sketch. + Selecteer precies een of twee lijnen uit de schets. - A dialog is already open in the task panel - Een dialoog is al geopend in het deelvenster Taken + + Select two edges from the sketch. + Selecteer twee randen van de schets. - Do you want to close this dialog? - Wilt u dit dialoogvenster sluiten? + + Select atleast two lines from the sketch. + Kies tenminste twee lijnen van de schets. - - Several sub-elements selected - Verschillende sub-elementen geselecteerd + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Je moet een enkel vlak selecteren als basis voor een schets! + + Sketch axes cannot be used in equality constraints + - No support face selected - Geen basisvlak geselecteerd + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Je moet een enkel vlak selecteren als basis voor een schets! + + Cannot add a constraint between external geometries! + - No planar support - Geen platvlak + Select exactly two same geometries + Selecteer precies twee dezelfde geometrieën - You need a planar face as support for a sketch! - Je hebt een platvlak nodig als basis voor een schets! + Select valid geometries + Selecteer geldige geometrieën - - Distance constraint - Afstand-beperking + Select geometry of similar type + Selecteer geometrie van hetzelfde type - Not allowed to edit the datum because the sketch contains conflicting constraints - Niet toegestaan ​​om de waarde te bewerken, omdat de schets conflicterende beperkingen bevat + + + + Select two points and one line from the sketch. + Selecteer twee punten en een lijn van de schets. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Selecteer precies één lijn van de schets. - - + + Select two lines from the sketch. + Selecteer twee lijnen van de schets. + + + Select exactly two lines from the sketch. + Selecteer precies twee lijnen van de schets. + + + + + Select two entities from the sketch. + Selecteer twee entiteiten uit de schets. + + + + + + + Select exactly two entities from the sketch. + Selecteer precies twee entiteiten uit de schets. + + + + Edit sketch + Schets bewerken + + + + A dialog is already open in the task panel + Een dialoog is al geopend in het deelvenster Taken + + + + Do you want to close this dialog? + Wilt u dit dialoogvenster sluiten? + + + + Several sub-elements selected + Verschillende sub-elementen geselecteerd + + + + You have to select a single face as support for a sketch! + Je moet een enkel vlak selecteren als basis voor een schets! + + + + No support face selected + Geen basisvlak geselecteerd + + + + You have to select a face as support for a sketch! + Je moet een enkel vlak selecteren als basis voor een schets! + + + + No planar support + Geen platvlak + + + + You need a planar face as support for a sketch! + Je hebt een platvlak nodig als basis voor een schets! + + + + Distance constraint + Afstand-beperking + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Niet toegestaan ​​om de waarde te bewerken, omdat de schets conflicterende beperkingen bevat + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Kies oriëntatie + Choose orientation + Kies oriëntatie - Sketch orientation - Schets-oriëntatie + Sketch orientation + Schets-oriëntatie - XY-Plane - XY-vlak + XY-Plane + XY-vlak - XZ-Plane - XZ-vlak + XZ-Plane + XZ-vlak - YZ-Plane - YZ-vlak + YZ-Plane + YZ-vlak - Reverse direction - Richting omkeren + Reverse direction + Richting omkeren - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Waarde invoeren + + Insert datum + Waarde invoeren - datum: - Waarde: + + datum: + Waarde: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Kies oriëntatie + + + + Sketch orientation + Schets-oriëntatie + + + + XY-Plane + XY-vlak + + + + XZ-Plane + XZ-vlak + + + + YZ-Plane + YZ-vlak + + + + Reverse direction + Richting omkeren + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Formulier + + Form + Formulier - Filter: - Filter: + + Filter: + Filter: - All - Alles + + All + Alles - Normal - Normaal + + Normal + Normaal - Datums - Waarden + + Datums + Waarden - Named - Benoemd + + Named + Benoemd - - Constraints - Beperkingen + + Constraints + Beperkingen - - + + SketcherGui::TaskSketcherGeneral - - Form - Formulier + + Form + Formulier - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Niet opgelost + Unsolved + Niet opgelost - Grid Snap - Aan raster uitlijnen + Grid Snap + Aan raster uitlijnen - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.2 mm - 0,2 mm + 0.2 mm + 0,2 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Automatische beperkingen + + Auto constraints + Automatische beperkingen - auto constraints - Automatische vrijheidsgraden + auto constraints + Automatische vrijheidsgraden - - Edit controls - Bewerk besturingselementen + + Edit controls + Bewerk besturingselementen - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Oplosser berichten + + Solver messages + Oplosser berichten - - + + TaskSketcherConstrains - Constraints - Beperkingen + Constraints + Beperkingen - - + + TaskSketcherCreateCommands - Appearance - Vormgeving + Appearance + Vormgeving - - + + TaskSketcherGeneral - Edit controls - Bewerk besturingselementen + Edit controls + Bewerk besturingselementen - - + + TaskSketcherMessages - - Form - Formulier + + Form + Formulier - Undefined degrees of freedom - Niet-gedefinieerde vrijheidsgraden + + Undefined degrees of freedom + Niet-gedefinieerde vrijheidsgraden - Not solved yet - Onder gedimensioneerd + + Not solved yet + Onder gedimensioneerd - - + + Workbench - - Sketcher - Schetsen + + Sketcher + Schetsen - Sketcher geometries - Schets-geometrieën + + Sketcher geometries + Schets-geometrieën - Sketcher geoms - Schets geometrie + Sketcher geoms + Schets geometrie - Sketcher constraints - Schets vrijheidsgraden + + Sketcher constraints + Schets vrijheidsgraden - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_no.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_no.ts index fce70f077..53bfd9cb0 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_no.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_no.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Skisse + + Sketcher + Skisse - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Skisse + + Sketcher + Skisse - Constrain coincident - Lås forhold + + Constrain coincident + Lås forhold - Create a coincident constraint on the selected item - Lag en lås i forhold til valgte objekt + + Create a coincident constraint on the selected item + Lag en lås i forhold til valgte objekt - - + + CmdSketcherConstrainDistance - Sketcher - Skisse + + Sketcher + Skisse - Constrain distance - Lås avstand + + Constrain distance + Lås avstand - Fix a length of a line or the distance between a line and a vertex - Fikser lengde på en linje eller avstanden mellom en linje og en node + + Fix a length of a line or the distance between a line and a vertex + Fikser lengde på en linje eller avstanden mellom en linje og en node - - + + CmdSketcherConstrainDistanceX - Sketcher - Skisse + + Sketcher + Skisse - Constrain vertical distance - Begrense vertikal avstand + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Begrense vertikal avstand - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Skisse + + Sketcher + Skisse - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Begrense vertikal avstand - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Skisse + + Sketcher + Skisse - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Skisse + + Sketcher + Skisse - Constrain horizontally - Lås horisontalt + + Constrain horizontally + Lås horisontalt - Create a horizontal constraint on the selected item - Lag en horisontal lås på det merkede elementet + + Create a horizontal constraint on the selected item + Lag en horisontal lås på det merkede elementet - - + + CmdSketcherConstrainLock - Sketcher - Skisse + + Sketcher + Skisse - Constrain lock - Lås + + Constrain lock + Lås - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Skisse + + Sketcher + Skisse - Constrain parallel - Lås parallell + + Constrain parallel + Lås parallell - Create a parallel constraint between two lines - Lag en parallell lås mellom to linjer + + Create a parallel constraint between two lines + Lag en parallell lås mellom to linjer - - + + CmdSketcherConstrainPerpendicular - Sketcher - Skisse + + Sketcher + Skisse - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Skisse + + Sketcher + Skisse - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Skisse + + Sketcher + Skisse - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Skisse + + Sketcher + Skisse - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Skisse + + Sketcher + Skisse - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Skisse + + Sketcher + Skisse - Constrain vertically - Lås vertikalt + + Constrain vertically + Lås vertikalt - Create a vertical constraint on the selected item - Lag en vertikal lås på valgt element + + Create a vertical constraint on the selected item + Lag en vertikal lås på valgt element - - + + CmdSketcherCreateArc - - Sketcher - Skisse + + Sketcher + Skisse - Create arc - Lag bue + + Create arc + Lag bue - Create an arc in the sketch - Lag en bue i skissen + + Create an arc in the sketch + Lag en bue i skissen - - + + CmdSketcherCreateCircle - Sketcher - Skisse + + Sketcher + Skisse - Create circle - Lag sirkel + + Create circle + Lag sirkel - Create a circle in the sketch - Lag en sirkel i skissen + + Create a circle in the sketch + Lag en sirkel i skissen - - + + CmdSketcherCreateDraftLine - Sketcher - Skisse + + Sketcher + Skisse - Create draft line - Lag linje + + Create draft line + Lag linje - Create a draft line in the sketch - Lag en linje i skissen + + Create a draft line in the sketch + Lag en linje i skissen - - + + CmdSketcherCreateFillet - Sketcher - Skisse + + Sketcher + Skisse - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Skisse + + Sketcher + Skisse - Create line - Lag linje + + Create line + Lag linje - Create a line in the sketch - Lag en linje i skissen + + Create a line in the sketch + Lag en linje i skissen - - + + CmdSketcherCreatePoint - Sketcher - Skisse + + Sketcher + Skisse - Create point - Lag punkt + + Create point + Lag punkt - Create a point in the sketch - Lag et punkt i skissen + + Create a point in the sketch + Lag et punkt i skissen - - + + CmdSketcherCreatePolyline - Sketcher - Skisse + + Sketcher + Skisse - Create polyline - Lag polylinje + + Create polyline + Lag polylinje - Create a polyline in the sketch - Lag en polylinje i skissen + + Create a polyline in the sketch + Lag en polylinje i skissen - - + + CmdSketcherCreateRectangle - Sketcher - Skisse + + Sketcher + Skisse - Create rectangle - Lag rektangel + + Create rectangle + Lag rektangel - Create a rectangle in the sketch - Lag et rektangel i skissen + + Create a rectangle in the sketch + Lag et rektangel i skissen - - + + CmdSketcherCreateText - Sketcher - Skisse + + Sketcher + Skisse - Create text - Lag tekst + + Create text + Lag tekst - Create text in the sketch - Lag tekst i skissen + + Create text in the sketch + Lag tekst i skissen - - + + + CmdSketcherExternal + + + Sketcher + Skisse + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Skisse + + Sketcher + Skisse - Leave sketch - Forlat skissen + + Leave sketch + Forlat skissen - Close the editing of the sketch - Lukk redigering av skissen + + Close the editing of the sketch + Lukk redigering av skissen - - + + CmdSketcherMapSketch - Sketcher - Skisse + + Sketcher + Skisse - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Skisse + + Sketcher + Skisse - Create sketch - Lag skisse + + Create sketch + Lag skisse - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Lag en ny skisse + Create a new sketch + Lag en ny skisse - - + + CmdSketcherNewSketchSF - Sketcher - Skisse + Sketcher + Skisse - Sketchflat sketch - Flatskisse + Sketchflat sketch + Flatskisse - Create a new sketchflat sketch by starting externel editor - Lag en ny flatskisse ved å starte ekstern redigering + Create a new sketchflat sketch by starting externel editor + Lag en ny flatskisse ved å starte ekstern redigering - - + + CmdSketcherToggleConstruction - - Sketcher - Skisse + + Sketcher + Skisse - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Skisse + + Sketcher + Skisse - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Skisse + + Sketcher + Skisse - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Utseende + + Appearance + Utseende - - + + QObject - - Wrong selection - Feil valg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Feil valg - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Velg en kant i skissen. + + + Select an edge from the sketch. + Velg en kant i skissen. - Double constraint - Dobbel lås + + + Double constraint + Dobbel lås - The selected edge has already a horizontal constraint! - Den valgte kanten har allerede en horisontal lås! + + + The selected edge has already a horizontal constraint! + Den valgte kanten har allerede en horisontal lås! - Impossible constraint - Umulig lås + + + + + + + Impossible constraint + Umulig lås - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - Den valgte kanten har allerede en vertikal lås! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + Den valgte kanten har allerede en vertikal lås! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Velg node i skissen. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Velg nøyaktig to noder i skissen. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Velg node i skissen. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Velg nøyaktig to noder i skissen. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Velg nøyaktig en linje i skissen. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Velg to linjer i skissen. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Velg nøyaktig to linjer i skissen. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Rediger skisse + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - En dialog er allerede åpent i oppgavepanelet + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Ønsker du å lukke denne dialogen? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Flere delelementer er valgt + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Du må velge en enkelt flate som støtte for en skisse! + + Sketch axes cannot be used in equality constraints + - No support face selected - Ingen flate for støtte valgt + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Du må velge en flate som støtte for en skisse! + + Cannot add a constraint between external geometries! + - No planar support - Ingen planstøtte + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - Du trenger en plan flate som støtte for en skisse! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Velg nøyaktig en linje i skissen. - - + + Select two lines from the sketch. + Velg to linjer i skissen. + + + Select exactly two lines from the sketch. + Velg nøyaktig to linjer i skissen. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + Rediger skisse + + + + A dialog is already open in the task panel + En dialog er allerede åpent i oppgavepanelet + + + + Do you want to close this dialog? + Ønsker du å lukke denne dialogen? + + + + Several sub-elements selected + Flere delelementer er valgt + + + + You have to select a single face as support for a sketch! + Du må velge en enkelt flate som støtte for en skisse! + + + + No support face selected + Ingen flate for støtte valgt + + + + You have to select a face as support for a sketch! + Du må velge en flate som støtte for en skisse! + + + + No planar support + Ingen planstøtte + + + + You need a planar face as support for a sketch! + Du trenger en plan flate som støtte for en skisse! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - XY-Plane + XY-Plane + XY-Plane - XZ-Plane - XZ-Plane + XZ-Plane + XZ-Plane - YZ-Plane - YZ-Plane + YZ-Plane + YZ-Plane - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Sett inn faktum + + Insert datum + Sett inn faktum - datum: - Faktum: + + datum: + Faktum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + XY-Plane + + + + XZ-Plane + XZ-Plane + + + + YZ-Plane + YZ-Plane + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Skjema + + Form + Skjema - Filter: - Filter: + + Filter: + Filter: - All - Alle + + All + Alle - Normal - Normal + + Normal + Normal - Datums - Fakta + + Datums + Fakta - Named - Navngitt + + Named + Navngitt - - Constraints - Låser + + Constraints + Låser - - + + SketcherGui::TaskSketcherGeneral - - Form - Skjema + + Form + Skjema - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Uløste + Unsolved + Uløste - Grid Snap - Rutenettmagnet + Grid Snap + Rutenettmagnet - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - autolåser + auto constraints + autolåser - - Edit controls - Rediger kontroller + + Edit controls + Rediger kontroller - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Låser + Constraints + Låser - - + + TaskSketcherCreateCommands - Appearance - Utseende + Appearance + Utseende - - + + TaskSketcherGeneral - Edit controls - Rediger kontroller + Edit controls + Rediger kontroller - - + + TaskSketcherMessages - - Form - Skjema + + Form + Skjema - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Skisse + + Sketcher + Skisse - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Skissegeom + Sketcher geoms + Skissegeom - Sketcher constraints - Skisselåser + + Sketcher constraints + Skisselåser - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pl.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pl.ts index 13039ef4e..c229641a6 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pl.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pl.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Ustaw kąt linii lub kąt pomiędzy 2 liniami + + Fix the angle of a line or the angle between two lines + Ustaw kąt linii lub kąt pomiędzy 2 liniami - - + + CmdSketcherConstrainCoincident - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain coincident - Ograniczenie przez pokrywanie + + Constrain coincident + Ograniczenie przez pokrywanie - Create a coincident constraint on the selected item - Utwórz ograniczenie przez pokrywanie na wybranym elemencie + + Create a coincident constraint on the selected item + Utwórz ograniczenie przez pokrywanie na wybranym elemencie - - + + CmdSketcherConstrainDistance - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain distance - Ograniczenie odległości + + Constrain distance + Ograniczenie odległości - Fix a length of a line or the distance between a line and a vertex - Ustal długość linii lub odległość pomiędzy linią a wierzchołkiem + + Fix a length of a line or the distance between a line and a vertex + Ustal długość linii lub odległość pomiędzy linią a wierzchołkiem - - + + CmdSketcherConstrainDistanceX - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain vertical distance - Ograniczyć pionową odległość + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Ograniczyć pionową odległość - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Ograniczyć pionową odległość - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain horizontally - Ograniczenie poziome + + Constrain horizontally + Ograniczenie poziome - Create a horizontal constraint on the selected item - Tworzenie poziomego ograniczenia dla wybranego elementu + + Create a horizontal constraint on the selected item + Tworzenie poziomego ograniczenia dla wybranego elementu - - + + CmdSketcherConstrainLock - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain lock - Blokada przemieszczenia + + Constrain lock + Blokada przemieszczenia - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain parallel - Ograniczenie równolegle + + Constrain parallel + Ograniczenie równolegle - Create a parallel constraint between two lines - Utwórz ograniczenie równoległe dwóch linii + + Create a parallel constraint between two lines + Utwórz ograniczenie równoległe dwóch linii - - + + CmdSketcherConstrainPerpendicular - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Ustaw punkt na obiekcie + + Fix a point onto an object + Ustaw punkt na obiekcie - - + + CmdSketcherConstrainRadius - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Utwórz styczną pomiędzy dwoma elementami + + Create a tangent constraint between two entities + Utwórz styczną pomiędzy dwoma elementami - - + + CmdSketcherConstrainVertical - Sketcher - Szkicownik + + Sketcher + Szkicownik - Constrain vertically - Ograniczenie pionowe + + Constrain vertically + Ograniczenie pionowe - Create a vertical constraint on the selected item - Utwórz ograniczenie pionowe na wybranym elemencie + + Create a vertical constraint on the selected item + Utwórz ograniczenie pionowe na wybranym elemencie - - + + CmdSketcherCreateArc - - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create arc - Tworzenie łuku + + Create arc + Tworzenie łuku - Create an arc in the sketch - Utwórz łuk na szkicu + + Create an arc in the sketch + Utwórz łuk na szkicu - - + + CmdSketcherCreateCircle - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create circle - Tworzenie okręgu + + Create circle + Tworzenie okręgu - Create a circle in the sketch - Utwórz okrąg na szkicu + + Create a circle in the sketch + Utwórz okrąg na szkicu - - + + CmdSketcherCreateDraftLine - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create draft line - Create draft line + + Create draft line + Create draft line - Create a draft line in the sketch - Create a draft line in the sketch + + Create a draft line in the sketch + Create a draft line in the sketch - - + + CmdSketcherCreateFillet - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create fillet - Utwórz zaokrąglenie + + Create fillet + Utwórz zaokrąglenie - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create line - Tworzenie linii + + Create line + Tworzenie linii - Create a line in the sketch - Utwórz linię na szkicu + + Create a line in the sketch + Utwórz linię na szkicu - - + + CmdSketcherCreatePoint - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create point - Tworzenie punktu + + Create point + Tworzenie punktu - Create a point in the sketch - Utwórz punkt na szkicu + + Create a point in the sketch + Utwórz punkt na szkicu - - + + CmdSketcherCreatePolyline - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create polyline - Tworzenie łamanej + + Create polyline + Tworzenie łamanej - Create a polyline in the sketch - Utwórz łamaną na szkicu + + Create a polyline in the sketch + Utwórz łamaną na szkicu - - + + CmdSketcherCreateRectangle - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create rectangle - Tworzenie prostokątu + + Create rectangle + Tworzenie prostokątu - Create a rectangle in the sketch - Utwórz prostokąt na szkicu + + Create a rectangle in the sketch + Utwórz prostokąt na szkicu - - + + CmdSketcherCreateText - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create text - Tworzenie tekstu + + Create text + Tworzenie tekstu - Create text in the sketch - Utwórz tekst na szkicu + + Create text in the sketch + Utwórz tekst na szkicu - - + + + CmdSketcherExternal + + + Sketcher + Szkicownik + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Szkicownik + + Sketcher + Szkicownik - Leave sketch - Porzuć szkic + + Leave sketch + Porzuć szkic - Close the editing of the sketch - Zamknij edycję szkicu + + Close the editing of the sketch + Zamknij edycję szkicu - - + + CmdSketcherMapSketch - Sketcher - Szkicownik + + Sketcher + Szkicownik - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Mapuj szkic na fasetkę + + Map a sketch to a face + Mapuj szkic na fasetkę - - + + CmdSketcherNewSketch - Sketcher - Szkicownik + + Sketcher + Szkicownik - Create sketch - Tworzenie szkicu + + Create sketch + Tworzenie szkicu - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Utwórz nowy szkic + Create a new sketch + Utwórz nowy szkic - - + + CmdSketcherNewSketchSF - Sketcher - Szkicownik + Sketcher + Szkicownik - Sketchflat sketch - Sketchflat sketch + Sketchflat sketch + Sketchflat sketch - Create a new sketchflat sketch by starting externel editor - Create a new sketchflat sketch by starting externel editor + Create a new sketchflat sketch by starting externel editor + Create a new sketchflat sketch by starting externel editor - - + + CmdSketcherToggleConstruction - - Sketcher - Szkicownik + + Sketcher + Szkicownik - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Przełącz tryb zaznaczonych linii (do/z trybu konstrukcji) + + Toggles the currently selected lines to/from construction mode + Przełącz tryb zaznaczonych linii (do/z trybu konstrukcji) - - + + CmdSketcherTrimming - - Sketcher - Szkicownik + + Sketcher + Szkicownik - Trim edge - Przytnij krawędź + + Trim edge + Przytnij krawędź - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Szkicownik + + Sketcher + Szkicownik - View sketch - Widok szkicu + + View sketch + Widok szkicu - View sketch perpendicular to sketch plane - Widok szkicu prostopadłego do płaszczyzny szkicu + + View sketch perpendicular to sketch plane + Widok szkicu prostopadłego do płaszczyzny szkicu - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Wygląd + + Appearance + Wygląd - - + + QObject - - Wrong selection - Niewłaściwy wybór + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Niewłaściwy wybór - Select edge(s) from the sketch. - Wybierz krawędź(ie) na szkicu + + Select edge(s) from the sketch. + Wybierz krawędź(ie) na szkicu - - Select an edge from the sketch. - Wybierz krawędź ze szkicu. + + + Select an edge from the sketch. + Wybierz krawędź ze szkicu. - Double constraint - Podwójne ograniczenie + + + Double constraint + Podwójne ograniczenie - The selected edge has already a horizontal constraint! - Wybrana krawędź jest już pozioma! + + + The selected edge has already a horizontal constraint! + Wybrana krawędź jest już pozioma! - Impossible constraint - Niemożliwe ograniczenie + + + + + + + Impossible constraint + Niemożliwe ograniczenie - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Jedno z zaznaczonych musi być na szkicu + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - Zaznaczona krawędź nie jest segmentem linii + + One of the selected has to be on the sketch + Jedno z zaznaczonych musi być na szkicu - The selected edge has already a vertical constraint! - Wybrana krawędź jest już pionowa! + + + The selected edge is not a line segment + Zaznaczona krawędź nie jest segmentem linii - Select entities from the sketch. - Zaznacz obiekty na szkicu + + + The selected edge has already a vertical constraint! + Wybrana krawędź jest już pionowa! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Wybierz wierzchołki ze szkicu. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Wybierz dokładnie dwa wierzchołki ze szkicu. + + Select entities from the sketch. + Zaznacz obiekty na szkicu - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Zaznacz dokładnie jeden punkt i jeden obiekt na szkicu. + + + + + + + Select vertexes from the sketch. + Wybierz wierzchołki ze szkicu. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Wybierz dokładnie dwa wierzchołki ze szkicu. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Zaznacz dokładnie jeden punkt i jeden obiekt na szkicu. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Zaznacz identyczne elementy geometrii + + Select a valid line + Select a valid line - Select valid geometries - Zaznacz właściwy element geometrii + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Zaznacz element geometrii podobnego typu + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Zaznacz dwa punkty i linię na szkicu + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Wybierz dokładnie jedną linię ze szkicu. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Wybierz dwie linie ze szkicu. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Wybierz dokładnie dwie linie ze szkicu. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Zaznacz dokładnie dwa elementy na szkicu. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Edycja szkicu + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - Okno dialogowe jest już otwarte w panelu zadań + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Czy chcesz zamknąć to okno dialogowe? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Wybrano kilka podelementów + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Musisz wybrać pojedynczą powierzchnię jako bazę dla szkicu! + + Sketch axes cannot be used in equality constraints + - No support face selected - Nie wybrano powierzchni bazowej + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Musisz wybrać powierzchnię jako bazę dla szkicu! + + Cannot add a constraint between external geometries! + - No planar support - No planar support + Select exactly two same geometries + Zaznacz identyczne elementy geometrii - You need a planar face as support for a sketch! - You need a planar face as support for a sketch! + Select valid geometries + Zaznacz właściwy element geometrii - - Distance constraint - Distance constraint + Select geometry of similar type + Zaznacz element geometrii podobnego typu - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Zaznacz dwa punkty i linię na szkicu - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Wybierz dokładnie jedną linię ze szkicu. - - + + Select two lines from the sketch. + Wybierz dwie linie ze szkicu. + + + Select exactly two lines from the sketch. + Wybierz dokładnie dwie linie ze szkicu. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Zaznacz dokładnie dwa elementy na szkicu. + + + + Edit sketch + Edycja szkicu + + + + A dialog is already open in the task panel + Okno dialogowe jest już otwarte w panelu zadań + + + + Do you want to close this dialog? + Czy chcesz zamknąć to okno dialogowe? + + + + Several sub-elements selected + Wybrano kilka podelementów + + + + You have to select a single face as support for a sketch! + Musisz wybrać pojedynczą powierzchnię jako bazę dla szkicu! + + + + No support face selected + Nie wybrano powierzchni bazowej + + + + You have to select a face as support for a sketch! + Musisz wybrać powierzchnię jako bazę dla szkicu! + + + + No planar support + No planar support + + + + You need a planar face as support for a sketch! + You need a planar face as support for a sketch! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Wybierz orientację + Choose orientation + Wybierz orientację - Sketch orientation - Orientacja szkicu + Sketch orientation + Orientacja szkicu - XY-Plane - Płaszczyzna X-Y + XY-Plane + Płaszczyzna X-Y - XZ-Plane - XZ-Plane + XZ-Plane + XZ-Plane - YZ-Plane - YZ-Plane + YZ-Plane + YZ-Plane - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Wstaw odniesienia + + Insert datum + Wstaw odniesienia - datum: - odniesienie: + + datum: + odniesienie: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Wybierz orientację + + + + Sketch orientation + Orientacja szkicu + + + + XY-Plane + Płaszczyzna X-Y + + + + XZ-Plane + XZ-Plane + + + + YZ-Plane + YZ-Plane + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Formularz + + Form + Formularz - Filter: - Filtr: + + Filter: + Filtr: - All - Wszystko + + All + Wszystko - Normal - Normalny + + Normal + Normalny - Datums - Odniesienia + + Datums + Odniesienia - Named - Nazwane + + Named + Nazwane - - Constraints - Ograniczenia + + Constraints + Ograniczenia - - + + SketcherGui::TaskSketcherGeneral - - Form - Formularz + + Form + Formularz - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Nierozwiązany + Unsolved + Nierozwiązany - Grid Snap - Siatka przyciągania + Grid Snap + Siatka przyciągania - 0.1 mm - 0,1 mm + 0.1 mm + 0,1 mm - 0.2 mm - 0,2 mm + 0.2 mm + 0,2 mm - 0.5 mm - 0,5 mm + 0.5 mm + 0,5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - auto constraints + auto constraints + auto constraints - - Edit controls - Edycja kontrolek + + Edit controls + Edycja kontrolek - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Ograniczenia + Constraints + Ograniczenia - - + + TaskSketcherCreateCommands - Appearance - Wygląd + Appearance + Wygląd - - + + TaskSketcherGeneral - Edit controls - Edycja kontrolek + Edit controls + Edycja kontrolek - - + + TaskSketcherMessages - - Form - Formularz + + Form + Formularz - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - W opracowaniu + + Not solved yet + W opracowaniu - - + + Workbench - - Sketcher - Szkicownik + + Sketcher + Szkicownik - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Szkicownik geometria + Sketcher geoms + Szkicownik geometria - Sketcher constraints - Szkicownik ograniczenia + + Sketcher constraints + Szkicownik ograniczenia - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pt.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pt.ts index 65e4a2c09..9b61624af 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pt.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_pt.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Esboço + + Sketcher + Esboço - Constrain angle - Restrição de ângulo + + Constrain angle + Restrição de ângulo - Fix the angle of a line or the angle between two lines - Fixar o ângulo de uma linha ou o ângulo entre duas linhas + + Fix the angle of a line or the angle between two lines + Fixar o ângulo de uma linha ou o ângulo entre duas linhas - - + + CmdSketcherConstrainCoincident - Sketcher - Esboço + + Sketcher + Esboço - Constrain coincident - Restrição de coincidência + + Constrain coincident + Restrição de coincidência - Create a coincident constraint on the selected item - Criar uma restrição de coincidência sobre o item selecionado + + Create a coincident constraint on the selected item + Criar uma restrição de coincidência sobre o item selecionado - - + + CmdSketcherConstrainDistance - Sketcher - Esboço + + Sketcher + Esboço - Constrain distance - Restrição de distância + + Constrain distance + Restrição de distância - Fix a length of a line or the distance between a line and a vertex - Trancar o comprimento de uma linha ou a distância entre uma linha e um vértice + + Fix a length of a line or the distance between a line and a vertex + Trancar o comprimento de uma linha ou a distância entre uma linha e um vértice - - + + CmdSketcherConstrainDistanceX - Sketcher - Esboço + + Sketcher + Esboço - Constrain vertical distance - Restrição de distância vertical + + Constrain horizontal distance + Restrição de distância horizontal - Fix the horizontal distance between two points or line ends - Fixar a distância horizontal entre dois pontos ou extremidades de linha + Constrain vertical distance + Restrição de distância vertical - - + + + Fix the horizontal distance between two points or line ends + Fixar a distância horizontal entre dois pontos ou extremidades de linha + + + CmdSketcherConstrainDistanceY - Sketcher - Esboço + + Sketcher + Esboço - Constrain horizontal distance - Restrição de distância horizontal + + Constrain vertical distance + Restrição de distância vertical - Fix the vertical distance between two points or line ends - Fixar a distância vertical entre dois pontos ou extremidades de linha + Constrain horizontal distance + Restrição de distância horizontal - - + + + Fix the vertical distance between two points or line ends + Fixar a distância vertical entre dois pontos ou extremidades de linha + + + CmdSketcherConstrainEqual - Sketcher - Esboço + + Sketcher + Esboço - Constrain equal - Restrição igual + + Constrain equal + Restrição igual - Create an equality constraint between two lines or between circles and arcs - Criar uma restrição de igualdade entre duas linhas ou círculos e arcos + + Create an equality constraint between two lines or between circles and arcs + Criar uma restrição de igualdade entre duas linhas ou círculos e arcos - - + + CmdSketcherConstrainHorizontal - Sketcher - Esboço + + Sketcher + Esboço - Constrain horizontally - Restringir horizontalmente + + Constrain horizontally + Restringir horizontalmente - Create a horizontal constraint on the selected item - Criar uma restrição horizontal sobre o item selecionado + + Create a horizontal constraint on the selected item + Criar uma restrição horizontal sobre o item selecionado - - + + CmdSketcherConstrainLock - Sketcher - Esboço + + Sketcher + Esboço - Constrain lock - Restrição de bloqueio + + Constrain lock + Restrição de bloqueio - Create a lock constraint on the selected item - Criar uma restrição de bloqueio no item selecionado + + Create a lock constraint on the selected item + Criar uma restrição de bloqueio no item selecionado - - + + CmdSketcherConstrainParallel - Sketcher - Esboço + + Sketcher + Esboço - Constrain parallel - Restrição paralela + + Constrain parallel + Restrição paralela - Create a parallel constraint between two lines - Criar uma restrição paralela entre duas linhas + + Create a parallel constraint between two lines + Criar uma restrição paralela entre duas linhas - - + + CmdSketcherConstrainPerpendicular - Sketcher - Esboço + + Sketcher + Esboço - Constrain perpendicular - Restrição perpendicular + + Constrain perpendicular + Restrição perpendicular - Create a Perpendicular constraint between two lines - Criar uma restrição perpendicular entre duas linhas + + Create a Perpendicular constraint between two lines + Criar uma restrição perpendicular entre duas linhas - - + + CmdSketcherConstrainPointOnObject - Sketcher - Esboço + + Sketcher + Esboço - Constrain point onto object - Restringir um ponto sobre um objeto + + Constrain point onto object + Restringir um ponto sobre um objeto - Fix a point onto an object - Fixar um ponto sobre um objeto + + Fix a point onto an object + Fixar um ponto sobre um objeto - - + + CmdSketcherConstrainRadius - Sketcher - Esboço + + Sketcher + Esboço - Constrain radius - Restrição de raio + + Constrain radius + Restrição de raio - Fix the radius of a circle or an arc - Fixar o raio de um círculo ou um arco + + Fix the radius of a circle or an arc + Fixar o raio de um círculo ou um arco - - + + CmdSketcherConstrainSymmetric - Sketcher - Esboço + + Sketcher + Esboço - Constrain symmetrical - Restrição simétrica + + Constrain symmetrical + Restrição simétrica - Create an symmetry constraint between two points with respect to a line - Criar uma restrição de simetria entre dois pontos relativamente a uma linha + + Create an symmetry constraint between two points with respect to a line + Criar uma restrição de simetria entre dois pontos relativamente a uma linha - - + + CmdSketcherConstrainTangent - Sketcher - Esboço + + Sketcher + Esboço - Constrain tangent - Restrição tangente + + Constrain tangent + Restrição tangente - Create a tangent constraint between two entities - Criar uma restrição tangente entre duas entidades + + Create a tangent constraint between two entities + Criar uma restrição tangente entre duas entidades - - + + CmdSketcherConstrainVertical - Sketcher - Esboço + + Sketcher + Esboço - Constrain vertically - Restringir verticalmente + + Constrain vertically + Restringir verticalmente - Create a vertical constraint on the selected item - Criar uma restrição vertical sobre o item selecionado + + Create a vertical constraint on the selected item + Criar uma restrição vertical sobre o item selecionado - - + + CmdSketcherCreateArc - - Sketcher - Esboço + + Sketcher + Esboço - Create arc - Criar arco + + Create arc + Criar arco - Create an arc in the sketch - Criar um arco no esboço + + Create an arc in the sketch + Criar um arco no esboço - - + + CmdSketcherCreateCircle - Sketcher - Esboço + + Sketcher + Esboço - Create circle - Criar círculo + + Create circle + Criar círculo - Create a circle in the sketch - Criar um círculo no esboço + + Create a circle in the sketch + Criar um círculo no esboço - - + + CmdSketcherCreateDraftLine - Sketcher - Esboço + + Sketcher + Esboço - Create draft line - Criar linha de rascunho + + Create draft line + Criar linha de rascunho - Create a draft line in the sketch - Criar uma linha de rascunho no esboço + + Create a draft line in the sketch + Criar uma linha de rascunho no esboço - - + + CmdSketcherCreateFillet - Sketcher - Esboço + + Sketcher + Esboço - Create fillet - Criar filete + + Create fillet + Criar filete - Create a fillet between two lines or at a coincident point - Criar um filete entre duas linhas ou em um ponto coincidente + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Criar um filete entre duas linhas ou em um ponto coincidente + + + CmdSketcherCreateLine - Sketcher - Esboço + + Sketcher + Esboço - Create line - Criar linha + + Create line + Criar linha - Create a line in the sketch - Criar uma linha no esboço + + Create a line in the sketch + Criar uma linha no esboço - - + + CmdSketcherCreatePoint - Sketcher - Esboço + + Sketcher + Esboço - Create point - Criar ponto + + Create point + Criar ponto - Create a point in the sketch - Criar um ponto no esboço + + Create a point in the sketch + Criar um ponto no esboço - - + + CmdSketcherCreatePolyline - Sketcher - Esboço + + Sketcher + Esboço - Create polyline - Criar polyline + + Create polyline + Criar polyline - Create a polyline in the sketch - Criar uma polilinha no sketch + + Create a polyline in the sketch + Criar uma polilinha no sketch - - + + CmdSketcherCreateRectangle - Sketcher - Esboço + + Sketcher + Esboço - Create rectangle - Criar retângulo + + Create rectangle + Criar retângulo - Create a rectangle in the sketch - Criar um retângulo no esboço + + Create a rectangle in the sketch + Criar um retângulo no esboço - - + + CmdSketcherCreateText - Sketcher - Esboço + + Sketcher + Esboço - Create text - Criar texto + + Create text + Criar texto - Create text in the sketch - Criar um texto no esboço + + Create text in the sketch + Criar um texto no esboço - - + + + CmdSketcherExternal + + + Sketcher + Esboço + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Esboço + + Sketcher + Esboço - Leave sketch - Sair do esboço + + Leave sketch + Sair do esboço - Close the editing of the sketch - Fechar a edição do esboço + + Close the editing of the sketch + Fechar a edição do esboço - - + + CmdSketcherMapSketch - Sketcher - Esboço + + Sketcher + Esboço - Map sketch to face... - Esboço para face... + + Map sketch to face... + Esboço para face... - Map a sketch to a face - Mapear um esboço para uma face + + Map a sketch to a face + Mapear um esboço para uma face - - + + CmdSketcherNewSketch - Sketcher - Esboço + + Sketcher + Esboço - Create sketch - Criar um esboço + + Create sketch + Criar um esboço - Create a new or edit the selected sketch - Criar um novo esboço ou editar o esboço selecionado + + Create a new or edit the selected sketch + Criar um novo esboço ou editar o esboço selecionado - Create a new sketch - Criar um novo esboço + Create a new sketch + Criar um novo esboço - - + + CmdSketcherNewSketchSF - Sketcher - Esboço + Sketcher + Esboço - Sketchflat sketch - Esboço do Sketchflat + Sketchflat sketch + Esboço do Sketchflat - Create a new sketchflat sketch by starting externel editor - Criar um novo desenho do sketchflat iniciando o editor externo + Create a new sketchflat sketch by starting externel editor + Criar um novo desenho do sketchflat iniciando o editor externo - - + + CmdSketcherToggleConstruction - - Sketcher - Esboço + + Sketcher + Esboço - Toggle construction line - Alternar modo de construção + + Toggle construction line + Alternar modo de construção - Toggles the currently selected lines to/from construction mode - Coloca ou retira as linhas selecionadas do modo de construção + + Toggles the currently selected lines to/from construction mode + Coloca ou retira as linhas selecionadas do modo de construção - - + + CmdSketcherTrimming - - Sketcher - Esboço + + Sketcher + Esboço - Trim edge - Recortar aresta + + Trim edge + Recortar aresta - Trims an edge with respect to the picked position - Recorta uma aresta a partir da posição escolhida + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Recorta uma aresta a partir da posição escolhida + + + CmdSketcherViewSketch - - Sketcher - Esboço + + Sketcher + Esboço - View sketch - Ver esboço + + View sketch + Ver esboço - View sketch perpendicular to sketch plane - Olhar perpendicularmente ao plano do esboço + + View sketch perpendicular to sketch plane + Olhar perpendicularmente ao plano do esboço - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Aparência + + Appearance + Aparência - - + + QObject - - Wrong selection - Seleção errada + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Seleção errada - Select edge(s) from the sketch. - Selecione aresta(s) no esboço. + + Select edge(s) from the sketch. + Selecione aresta(s) no esboço. - - Select an edge from the sketch. - Selecione uma aresta do esboço. + + + Select an edge from the sketch. + Selecione uma aresta do esboço. - Double constraint - Restrição dupla + + + Double constraint + Restrição dupla - The selected edge has already a horizontal constraint! - A aresta selecionada já possui uma restrição horizontal! + + + The selected edge has already a horizontal constraint! + A aresta selecionada já possui uma restrição horizontal! - Impossible constraint - Restrição impossível + + + + + + + Impossible constraint + Restrição impossível - Only sketch and its support is allowed to select - É permitido selecionar somente um esboço e seu suporte + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - Um dos selecionados tem que ser no esboço + + + + Only sketch and its support is allowed to select + É permitido selecionar somente um esboço e seu suporte - The selected edge is not a line segment - A aresta selecionada não é um segmento de linha + + One of the selected has to be on the sketch + Um dos selecionados tem que ser no esboço - The selected edge has already a vertical constraint! - A aresta selecionada já possui uma restrição vertical! + + + The selected edge is not a line segment + A aresta selecionada não é um segmento de linha - Select entities from the sketch. - Selecione entidades no esboço. + + + The selected edge has already a vertical constraint! + A aresta selecionada já possui uma restrição vertical! - Select exactly one entity from the sketch. - Selecione exatamente uma entidade no esboço. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Selecione vértices do esboço. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Selecione exatamente dois vértices do esboço. + + Select entities from the sketch. + Selecione entidades no esboço. - Select exactly one line or one point and one line or two points from the sketch. - Selecione exatamente uma linha ou um ponto e uma linha ou dois pontos no esboço. + + + Select exactly one entity from the sketch. + Selecione exatamente uma entidade no esboço. - Select exactly one point and one object from the sketch. - Selecione exatamente um ponto e um objeto no esboço. + + + + + + + Select vertexes from the sketch. + Selecione vértices do esboço. - Select exactly one line or up to two points from the sketch. - Selecione exatamente uma linha ou até dois pontos no esboço. + + + + Select exactly two vertexes from the sketch. + Selecione exatamente dois vértices do esboço. - Select two or more lines from the sketch. - Selecione duas ou mais linhas no esboço. + + + Select exactly one line or one point and one line or two points from the sketch. + Selecione exatamente uma linha ou um ponto e uma linha ou dois pontos no esboço. - Select at least two lines from the sketch. - Selecione pelo menos duas linhas no esboço. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Selecione uma linha válida + + + Select exactly one point and one object from the sketch. + Selecione exatamente um ponto e um objeto no esboço. - The selected edge is not a valid line - A aresta selecionada não é uma linha válida + + + + + Select exactly one line or up to two points from the sketch. + Selecione exatamente uma linha ou até dois pontos no esboço. - Select exactly one arc or circle from the sketch. - Selecione exatamente um arco ou círculo no esboço. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Selecione exatamente uma ou duas linhas no esboço. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Selecione duas arestas no esboço. + + Select two or more lines from the sketch. + Selecione duas ou mais linhas no esboço. - Select atleast two lines from the sketch. - Selecione pelo menos duas linhas no esboço. + + Select at least two lines from the sketch. + Selecione pelo menos duas linhas no esboço. - Select exactly two same geometries - Selecione exatamente duas geometrias do mesmo tipo + + Select a valid line + Selecione uma linha válida - Select valid geometries - Selecione geometrias válidas + + The selected edge is not a valid line + A aresta selecionada não é uma linha válida - Select geometry of similar type - Selecione geometrias do mesmo tipo + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Selecione dois pontos e uma linha no esboço. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Selecione exatamente uma linha do esboço. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Selecione duas linhas do esboço. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Selecione exatamente duas linhas do esboço. + + + + Select exactly one arc or circle from the sketch. + Selecione exatamente um arco ou círculo no esboço. - Select two entities from the sketch. - Selecione duas entidades no esboço. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Selecione exatamente duas entidades do esboço. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Editar esboço + + Select exactly one or two lines from the sketch. + Selecione exatamente uma ou duas linhas no esboço. - A dialog is already open in the task panel - Uma caixa de diálogo já está aberta no painel de tarefas + + Select two edges from the sketch. + Selecione duas arestas no esboço. - Do you want to close this dialog? - Deseja fechar esta janela? + + Select atleast two lines from the sketch. + Selecione pelo menos duas linhas no esboço. - - Several sub-elements selected - Vários sub-elementos selecionados + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Você deve selecionar uma única face como suporte para um esboço! + + Sketch axes cannot be used in equality constraints + - No support face selected - Nenhuma face de suporte selecionada + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Você deve selecionar uma face como suporte para um esboço! + + Cannot add a constraint between external geometries! + - No planar support - Nenhum suporte planar + Select exactly two same geometries + Selecione exatamente duas geometrias do mesmo tipo - You need a planar face as support for a sketch! - Você precisa de uma face plana como suporte para um esboço! + Select valid geometries + Selecione geometrias válidas - - Distance constraint - Restrição de distância + Select geometry of similar type + Selecione geometrias do mesmo tipo - Not allowed to edit the datum because the sketch contains conflicting constraints - Não é possível editar o dado porque o esboço contém restrições conflitantes + + + + Select two points and one line from the sketch. + Selecione dois pontos e uma linha no esboço. - Dimensional constraint - Restrição de dimensão + Select exactly one line from the sketch. + Selecione exatamente uma linha do esboço. - - + + Select two lines from the sketch. + Selecione duas linhas do esboço. + + + Select exactly two lines from the sketch. + Selecione exatamente duas linhas do esboço. + + + + + Select two entities from the sketch. + Selecione duas entidades no esboço. + + + + + + + Select exactly two entities from the sketch. + Selecione exatamente duas entidades do esboço. + + + + Edit sketch + Editar esboço + + + + A dialog is already open in the task panel + Uma caixa de diálogo já está aberta no painel de tarefas + + + + Do you want to close this dialog? + Deseja fechar esta janela? + + + + Several sub-elements selected + Vários sub-elementos selecionados + + + + You have to select a single face as support for a sketch! + Você deve selecionar uma única face como suporte para um esboço! + + + + No support face selected + Nenhuma face de suporte selecionada + + + + You have to select a face as support for a sketch! + Você deve selecionar uma face como suporte para um esboço! + + + + No planar support + Nenhum suporte planar + + + + You need a planar face as support for a sketch! + Você precisa de uma face plana como suporte para um esboço! + + + + Distance constraint + Restrição de distância + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Não é possível editar o dado porque o esboço contém restrições conflitantes + + + + Dimensional constraint + Restrição de dimensão + + + SketchOrientationDialog - - Choose orientation - Escolher a orientação + Choose orientation + Escolher a orientação - Sketch orientation - Orientação do esboço + Sketch orientation + Orientação do esboço - XY-Plane - Plano XY + XY-Plane + Plano XY - XZ-Plane - Plano XZ + XZ-Plane + Plano XZ - YZ-Plane - Plano YZ + YZ-Plane + Plano YZ - Reverse direction - Inverter direção + Reverse direction + Inverter direção - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Inserir datum + + Insert datum + Inserir datum - datum: - datum: + + datum: + datum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Escolher a orientação + + + + Sketch orientation + Orientação do esboço + + + + XY-Plane + Plano XY + + + + XZ-Plane + Plano XZ + + + + YZ-Plane + Plano YZ + + + + Reverse direction + Inverter direção + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Forma + + Form + Forma - Filter: - Filtro: + + Filter: + Filtro: - All - Tudo + + All + Tudo - Normal - Normal + + Normal + Normal - Datums - Datums + + Datums + Datums - Named - Nomeado + + Named + Nomeado - - Constraints - Restrições + + Constraints + Restrições - - + + SketcherGui::TaskSketcherGeneral - - Form - Forma + + Form + Forma - Grid size: - Tamanho da grade: + + Grid size: + Tamanho da grade: - Grid snap - Snap de grade + + Grid snap + Snap de grade - Unsolved - Não resolvido + Unsolved + Não resolvido - Grid Snap - Snap de grade + Grid Snap + Snap de grade - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Restrições automáticas + + Auto constraints + Restrições automáticas - auto constraints - Auto-restrições + auto constraints + Auto-restrições - - Edit controls - Controles de edição + + Edit controls + Controles de edição - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Mensagens do calculador + + Solver messages + Mensagens do calculador - - + + TaskSketcherConstrains - Constraints - Restrições + Constraints + Restrições - - + + TaskSketcherCreateCommands - Appearance - Aparência + Appearance + Aparência - - + + TaskSketcherGeneral - Edit controls - Controles de edição + Edit controls + Controles de edição - - + + TaskSketcherMessages - - Form - Forma + + Form + Forma - Undefined degrees of freedom - Graus de liberdade indefinidos + + Undefined degrees of freedom + Graus de liberdade indefinidos - Not solved yet - Não resolvido ainda + + Not solved yet + Não resolvido ainda - - + + Workbench - - Sketcher - Esboço + + Sketcher + Esboço - Sketcher geometries - Geometrias do esboço + + Sketcher geometries + Geometrias do esboço - Sketcher geoms - Geometrias de esboço + Sketcher geoms + Geometrias de esboço - Sketcher constraints - Restrições de esboço + + Sketcher constraints + Restrições de esboço - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ru.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ru.ts index 25c26d12f..2cfa307b9 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ru.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_ru.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain coincident - Ограничение коинцидентности + + Constrain coincident + Ограничение коинцидентности - Create a coincident constraint on the selected item - Создать ограничение коинцидентности для выбранных элементов + + Create a coincident constraint on the selected item + Создать ограничение коинцидентности для выбранных элементов - - + + CmdSketcherConstrainDistance - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain distance - Ограничение расстояния + + Constrain distance + Ограничение расстояния - Fix a length of a line or the distance between a line and a vertex - Зафиксировать длину линии или расстояние между линией и вершиной + + Fix a length of a line or the distance between a line and a vertex + Зафиксировать длину линии или расстояние между линией и вершиной - - + + CmdSketcherConstrainDistanceX - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain vertical distance - Ограничить расстояние по вертикали + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Ограничить расстояние по вертикали - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Ограничить расстояние по вертикали - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain horizontally - Ограничение горизонтальности + + Constrain horizontally + Ограничение горизонтальности - Create a horizontal constraint on the selected item - Создание ограничения горизонтальности для выбранного элемента + + Create a horizontal constraint on the selected item + Создание ограничения горизонтальности для выбранного элемента - - + + CmdSketcherConstrainLock - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain lock - Ограничение блокировка + + Constrain lock + Ограничение блокировка - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain parallel - Ограничение параллельности + + Constrain parallel + Ограничение параллельности - Create a parallel constraint between two lines - Создание ограничения параллельности между двумя линиями + + Create a parallel constraint between two lines + Создание ограничения параллельности между двумя линиями - - + + CmdSketcherConstrainPerpendicular - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Эскизирование + + Sketcher + Эскизирование - Constrain vertically - Ограничение вертикальности + + Constrain vertically + Ограничение вертикальности - Create a vertical constraint on the selected item - Создание ограниченя вертикальности для выбранного элемента + + Create a vertical constraint on the selected item + Создание ограниченя вертикальности для выбранного элемента - - + + CmdSketcherCreateArc - - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create arc - Создать дугу + + Create arc + Создать дугу - Create an arc in the sketch - Создать дугу в эскизе + + Create an arc in the sketch + Создать дугу в эскизе - - + + CmdSketcherCreateCircle - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create circle - Создать окружность + + Create circle + Создать окружность - Create a circle in the sketch - Создать окружность в эскизе + + Create a circle in the sketch + Создать окружность в эскизе - - + + CmdSketcherCreateDraftLine - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create draft line - Создать вспомогательную линию + + Create draft line + Создать вспомогательную линию - Create a draft line in the sketch - Создать вспомогательную линию в эскизе + + Create a draft line in the sketch + Создать вспомогательную линию в эскизе - - + + CmdSketcherCreateFillet - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create line - Создать линию + + Create line + Создать линию - Create a line in the sketch - Создать линию в эскизе + + Create a line in the sketch + Создать линию в эскизе - - + + CmdSketcherCreatePoint - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create point - Создать точку + + Create point + Создать точку - Create a point in the sketch - Создать точку в эскизе + + Create a point in the sketch + Создать точку в эскизе - - + + CmdSketcherCreatePolyline - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create polyline - Создать полилинию + + Create polyline + Создать полилинию - Create a polyline in the sketch - Создать полилинию в эскизе + + Create a polyline in the sketch + Создать полилинию в эскизе - - + + CmdSketcherCreateRectangle - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create rectangle - Создать прямоугольник + + Create rectangle + Создать прямоугольник - Create a rectangle in the sketch - Создать прямоугольник в эскизе + + Create a rectangle in the sketch + Создать прямоугольник в эскизе - - + + CmdSketcherCreateText - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create text - Создать текст + + Create text + Создать текст - Create text in the sketch - Создание текста в эскизе + + Create text in the sketch + Создание текста в эскизе - - + + + CmdSketcherExternal + + + Sketcher + Эскизирование + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Эскизирование + + Sketcher + Эскизирование - Leave sketch - Покинуть эскиз + + Leave sketch + Покинуть эскиз - Close the editing of the sketch - Закончить редактирование эскиза + + Close the editing of the sketch + Закончить редактирование эскиза - - + + CmdSketcherMapSketch - Sketcher - Эскизирование + + Sketcher + Эскизирование - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Эскизирование + + Sketcher + Эскизирование - Create sketch - Создать эскиз + + Create sketch + Создать эскиз - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Создать новый эскиз + Create a new sketch + Создать новый эскиз - - + + CmdSketcherNewSketchSF - Sketcher - Эскизирование + Sketcher + Эскизирование - Sketchflat sketch - Плоский эскиз + Sketchflat sketch + Плоский эскиз - Create a new sketchflat sketch by starting externel editor - Создайте новый плосий эскиз, запустив внешний редактор + Create a new sketchflat sketch by starting externel editor + Создайте новый плосий эскиз, запустив внешний редактор - - + + CmdSketcherToggleConstruction - - Sketcher - Эскизирование + + Sketcher + Эскизирование - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Эскизирование + + Sketcher + Эскизирование - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Эскизирование + + Sketcher + Эскизирование - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Представление + + Appearance + Представление - - + + QObject - - Wrong selection - Неправильный выбор + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Неправильный выбор - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Выбирите ребро в эскизе. + + + Select an edge from the sketch. + Выбирите ребро в эскизе. - Double constraint - Двойное ограничение + + + Double constraint + Двойное ограничение - The selected edge has already a horizontal constraint! - Выбранное ребро уже имеет ограничение горизонтальности! + + + The selected edge has already a horizontal constraint! + Выбранное ребро уже имеет ограничение горизонтальности! - Impossible constraint - Ограничение невозможно + + + + + + + Impossible constraint + Ограничение невозможно - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - Выбранное ребро уже имеет ограничение вертикальности! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + Выбранное ребро уже имеет ограничение вертикальности! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Выберите вершины из эскиза. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Выберите две вершины из эскиза. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Выберите вершины из эскиза. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Выберите две вершины из эскиза. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Выберите по крайней мере две линии из эскиза. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Выберите одну линию из эскиза. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Выберите две линии из эскиза. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Выберите ровно две линии из эскиза. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Редактировать эскиз + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - Диалог уже открыт в панели задач + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Вы хотите закрыть этот диалог? + + Select atleast two lines from the sketch. + Выберите по крайней мере две линии из эскиза. - - Several sub-elements selected - Несколько вложенных деталей выбрано + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Вы должны выбрать одну поверхность, как основу для эскиза! + + Sketch axes cannot be used in equality constraints + - No support face selected - Нет поддержки выбранной поверхности + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Вы должны выбрать поверхность, как основу для эскиза! + + Cannot add a constraint between external geometries! + - No planar support - Нет поддержки плоскостей + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - Вам нужна плоская поверхность для создания эскиза! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Не разрешается редактировать значение из-за конфликта условий + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Выберите одну линию из эскиза. - - + + Select two lines from the sketch. + Выберите две линии из эскиза. + + + Select exactly two lines from the sketch. + Выберите ровно две линии из эскиза. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + Редактировать эскиз + + + + A dialog is already open in the task panel + Диалог уже открыт в панели задач + + + + Do you want to close this dialog? + Вы хотите закрыть этот диалог? + + + + Several sub-elements selected + Несколько вложенных деталей выбрано + + + + You have to select a single face as support for a sketch! + Вы должны выбрать одну поверхность, как основу для эскиза! + + + + No support face selected + Нет поддержки выбранной поверхности + + + + You have to select a face as support for a sketch! + Вы должны выбрать поверхность, как основу для эскиза! + + + + No planar support + Нет поддержки плоскостей + + + + You need a planar face as support for a sketch! + Вам нужна плоская поверхность для создания эскиза! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Не разрешается редактировать значение из-за конфликта условий + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - XY-плоскость + XY-Plane + XY-плоскость - XZ-Plane - XZ-Plane + XZ-Plane + XZ-Plane - YZ-Plane - YZ-Plane + YZ-Plane + YZ-Plane - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Смещение: + Offset: + Смещение: - - + + SketcherGui::InsertDatum - - Insert datum - Вставьте вспомогательный элемент + + Insert datum + Вставьте вспомогательный элемент - datum: - Вспомогательный: + + datum: + Вспомогательный: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + XY-плоскость + + + + XZ-Plane + XZ-Plane + + + + YZ-Plane + YZ-Plane + + + + Reverse direction + Reverse direction + + + + Offset: + Смещение: + + + SketcherGui::TaskSketcherConstrains - - Form - Форма + + Form + Форма - Filter: - Фильтр: + + Filter: + Фильтр: - All - Всё + + All + Всё - Normal - Нормальный + + Normal + Нормальный - Datums - Геодезические + + Datums + Геодезические - Named - Поименованый + + Named + Поименованый - - Constraints - Ограничения + + Constraints + Ограничения - - + + SketcherGui::TaskSketcherGeneral - - Form - Форма + + Form + Форма - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Неразрешённый + Unsolved + Неразрешённый - Grid Snap - Привязка к сетке + Grid Snap + Привязка к сетке - 0.1 mm - 0.1 мм + 0.1 mm + 0.1 мм - 0.2 mm - 0.2 мм + 0.2 mm + 0.2 мм - 0.5 mm - 0.5 мм + 0.5 mm + 0.5 мм - 1 mm - 1 мм + 1 mm + 1 мм - 2 mm - 2 мм + 2 mm + 2 мм - 5 mm - 5 мм + 5 mm + 5 мм - 10 mm - 10 мм + 10 mm + 10 мм - 20 mm - 20 мм + 20 mm + 20 мм - 50 mm - 50 мм + 50 mm + 50 мм - 100 mm - 100 мм + 100 mm + 100 мм - 200 mm - 200 мм + 200 mm + 200 мм - 500 mm - 500 мм + 500 mm + 500 мм - 1 m - 1 м + 1 m + 1 м - 2 m - 2 м + 2 m + 2 м - 5 m - 5 м + 5 m + 5 м - 10 m - 10 м + 10 m + 10 м - 20 m - 20 м + 20 m + 20 м - Auto constraints - Автоматические условия + + Auto constraints + Автоматические условия - auto constraints - Авто ограничения + auto constraints + Авто ограничения - - Edit controls - Элементы управления для редактирования + + Edit controls + Элементы управления для редактирования - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Ограничения + Constraints + Ограничения - - + + TaskSketcherCreateCommands - Appearance - Представление + Appearance + Представление - - + + TaskSketcherGeneral - Edit controls - Элементы управления для редактирования + Edit controls + Элементы управления для редактирования - - + + TaskSketcherMessages - - Form - Форма + + Form + Форма - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Эскизирование + + Sketcher + Эскизирование - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Геометрия эскиза + Sketcher geoms + Геометрия эскиза - Sketcher constraints - Ограничения эскиза + + Sketcher constraints + Ограничения эскиза - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_se.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_se.ts index f55fc45b2..f8595d9f3 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_se.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_se.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Skissare + + Sketcher + Skissare - Constrain angle - Begränsa vinkel + + Constrain angle + Begränsa vinkel - Fix the angle of a line or the angle between two lines - Fixera en linjes vinkel eller vinkeln mellan två linjer + + Fix the angle of a line or the angle between two lines + Fixera en linjes vinkel eller vinkeln mellan två linjer - - + + CmdSketcherConstrainCoincident - Sketcher - Skissare + + Sketcher + Skissare - Constrain coincident - Begränsa sammanfallande + + Constrain coincident + Begränsa sammanfallande - Create a coincident constraint on the selected item - Skapa en sammanfallande begränsning för den markerade detaljen + + Create a coincident constraint on the selected item + Skapa en sammanfallande begränsning för den markerade detaljen - - + + CmdSketcherConstrainDistance - Sketcher - Skissare + + Sketcher + Skissare - Constrain distance - Begränsningsavstånd + + Constrain distance + Begränsningsavstånd - Fix a length of a line or the distance between a line and a vertex - Fixera längden på en linje eller avståndet mellan en linje och ett hörn + + Fix a length of a line or the distance between a line and a vertex + Fixera längden på en linje eller avståndet mellan en linje och ett hörn - - + + CmdSketcherConstrainDistanceX - Sketcher - Skissare + + Sketcher + Skissare - Constrain vertical distance - Begränsa vertikala avstånd + + Constrain horizontal distance + Begränsa horisontellt avstånd - Fix the horizontal distance between two points or line ends - Fixera det horisontella avståndet mellan två punkter eller linjeändar + Constrain vertical distance + Begränsa vertikala avstånd - - + + + Fix the horizontal distance between two points or line ends + Fixera det horisontella avståndet mellan två punkter eller linjeändar + + + CmdSketcherConstrainDistanceY - Sketcher - Skissare + + Sketcher + Skissare - Constrain horizontal distance - Begränsa horisontellt avstånd + + Constrain vertical distance + Begränsa vertikala avstånd - Fix the vertical distance between two points or line ends - Fixera det vertikala avståndet mellan två punkter eller linjeändar + Constrain horizontal distance + Begränsa horisontellt avstånd - - + + + Fix the vertical distance between two points or line ends + Fixera det vertikala avståndet mellan två punkter eller linjeändar + + + CmdSketcherConstrainEqual - Sketcher - Skissare + + Sketcher + Skissare - Constrain equal - Begränsa lika + + Constrain equal + Begränsa lika - Create an equality constraint between two lines or between circles and arcs - Skapa en jämlikhetsbegränsning mellan två linjer eller mellan cirklar och cirkelbågar + + Create an equality constraint between two lines or between circles and arcs + Skapa en jämlikhetsbegränsning mellan två linjer eller mellan cirklar och cirkelbågar - - + + CmdSketcherConstrainHorizontal - Sketcher - Skissare + + Sketcher + Skissare - Constrain horizontally - Begränsa horisontellt + + Constrain horizontally + Begränsa horisontellt - Create a horizontal constraint on the selected item - Skapa en horisontell begränsning på den valda detaljen + + Create a horizontal constraint on the selected item + Skapa en horisontell begränsning på den valda detaljen - - + + CmdSketcherConstrainLock - Sketcher - Skissare + + Sketcher + Skissare - Constrain lock - Begränsa lås + + Constrain lock + Begränsa lås - Create a lock constraint on the selected item - Skapa en lås begränsning för det markerade objektet + + Create a lock constraint on the selected item + Skapa en lås begränsning för det markerade objektet - - + + CmdSketcherConstrainParallel - Sketcher - Skissare + + Sketcher + Skissare - Constrain parallel - Begränsa parallellt + + Constrain parallel + Begränsa parallellt - Create a parallel constraint between two lines - Skapa en parallell begränsning mellan två linjer + + Create a parallel constraint between two lines + Skapa en parallell begränsning mellan två linjer - - + + CmdSketcherConstrainPerpendicular - Sketcher - Skissare + + Sketcher + Skissare - Constrain perpendicular - Begränsa vinkelrätt + + Constrain perpendicular + Begränsa vinkelrätt - Create a Perpendicular constraint between two lines - Skapa en vinkelrät begränsning mellan två linjer + + Create a Perpendicular constraint between two lines + Skapa en vinkelrät begränsning mellan två linjer - - + + CmdSketcherConstrainPointOnObject - Sketcher - Skissare + + Sketcher + Skissare - Constrain point onto object - Begränsa punkt på objekt + + Constrain point onto object + Begränsa punkt på objekt - Fix a point onto an object - Fixera en punkt på ett objekt + + Fix a point onto an object + Fixera en punkt på ett objekt - - + + CmdSketcherConstrainRadius - Sketcher - Skissare + + Sketcher + Skissare - Constrain radius - Begränsa radie + + Constrain radius + Begränsa radie - Fix the radius of a circle or an arc - Fixera cirkelns eller cirkelbågens radie + + Fix the radius of a circle or an arc + Fixera cirkelns eller cirkelbågens radie - - + + CmdSketcherConstrainSymmetric - Sketcher - Skissare + + Sketcher + Skissare - Constrain symmetrical - Begränsa symmetriskt + + Constrain symmetrical + Begränsa symmetriskt - Create an symmetry constraint between two points with respect to a line - Skapa en symmetribegränsning mellan två punkter i förhållande till en linje + + Create an symmetry constraint between two points with respect to a line + Skapa en symmetribegränsning mellan två punkter i förhållande till en linje - - + + CmdSketcherConstrainTangent - Sketcher - Skissare + + Sketcher + Skissare - Constrain tangent - Begränsa tangens + + Constrain tangent + Begränsa tangens - Create a tangent constraint between two entities - Skapa en tangentbegränsning mellan två föremål + + Create a tangent constraint between two entities + Skapa en tangentbegränsning mellan två föremål - - + + CmdSketcherConstrainVertical - Sketcher - Skissare + + Sketcher + Skissare - Constrain vertically - Begränsa vertikalt + + Constrain vertically + Begränsa vertikalt - Create a vertical constraint on the selected item - Skapa en vertikal begränsning på den markerade detaljen + + Create a vertical constraint on the selected item + Skapa en vertikal begränsning på den markerade detaljen - - + + CmdSketcherCreateArc - - Sketcher - Skissare + + Sketcher + Skissare - Create arc - Skapa cirkelbåge + + Create arc + Skapa cirkelbåge - Create an arc in the sketch - Skapa en cirkelbåge i skissen + + Create an arc in the sketch + Skapa en cirkelbåge i skissen - - + + CmdSketcherCreateCircle - Sketcher - Skissare + + Sketcher + Skissare - Create circle - Skapa en cirkel + + Create circle + Skapa en cirkel - Create a circle in the sketch - Skapa en cirkel i skissen + + Create a circle in the sketch + Skapa en cirkel i skissen - - + + CmdSketcherCreateDraftLine - Sketcher - Skissare + + Sketcher + Skissare - Create draft line - Skapa ritlinje + + Create draft line + Skapa ritlinje - Create a draft line in the sketch - Skapa ritlinje i skissen + + Create a draft line in the sketch + Skapa ritlinje i skissen - - + + CmdSketcherCreateFillet - Sketcher - Skissare + + Sketcher + Skissare - Create fillet - Skapa avrundning + + Create fillet + Skapa avrundning - Create a fillet between two lines or at a coincident point - Skapa en avrundning mellan två linjer eller vid en sammanfallande punkt + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Skapa en avrundning mellan två linjer eller vid en sammanfallande punkt + + + CmdSketcherCreateLine - Sketcher - Skissare + + Sketcher + Skissare - Create line - Skapa linje + + Create line + Skapa linje - Create a line in the sketch - Skapa en linje i skissen + + Create a line in the sketch + Skapa en linje i skissen - - + + CmdSketcherCreatePoint - Sketcher - Skissare + + Sketcher + Skissare - Create point - Skapa punkt + + Create point + Skapa punkt - Create a point in the sketch - Skapa en punkt i skissen + + Create a point in the sketch + Skapa en punkt i skissen - - + + CmdSketcherCreatePolyline - Sketcher - Skissare + + Sketcher + Skissare - Create polyline - Skapa polylinje + + Create polyline + Skapa polylinje - Create a polyline in the sketch - Skapa en polylinje i skissen + + Create a polyline in the sketch + Skapa en polylinje i skissen - - + + CmdSketcherCreateRectangle - Sketcher - Skissare + + Sketcher + Skissare - Create rectangle - Skapa rektangel + + Create rectangle + Skapa rektangel - Create a rectangle in the sketch - Skapa en rektangel i skissen + + Create a rectangle in the sketch + Skapa en rektangel i skissen - - + + CmdSketcherCreateText - Sketcher - Skissare + + Sketcher + Skissare - Create text - Skapa text + + Create text + Skapa text - Create text in the sketch - Skapa text i skissen + + Create text in the sketch + Skapa text i skissen - - + + + CmdSketcherExternal + + + Sketcher + Skissare + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Skissare + + Sketcher + Skissare - Leave sketch - Lämna skiss + + Leave sketch + Lämna skiss - Close the editing of the sketch - Stäng skiss-redigeringen + + Close the editing of the sketch + Stäng skiss-redigeringen - - + + CmdSketcherMapSketch - Sketcher - Skissare + + Sketcher + Skissare - Map sketch to face... - Kartera skiss till ytan ... + + Map sketch to face... + Kartera skiss till ytan ... - Map a sketch to a face - Kartera en skiss till en yta + + Map a sketch to a face + Kartera en skiss till en yta - - + + CmdSketcherNewSketch - Sketcher - Skissare + + Sketcher + Skissare - Create sketch - Skapa skiss + + Create sketch + Skapa skiss - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Skapa en ny skiss + Create a new sketch + Skapa en ny skiss - - + + CmdSketcherNewSketchSF - Sketcher - Skissare + Sketcher + Skissare - Sketchflat sketch - Sketchflat skiss + Sketchflat sketch + Sketchflat skiss - Create a new sketchflat sketch by starting externel editor - Skapa en ny sketchflat skiss genom att starta den externa redigeraren + Create a new sketchflat sketch by starting externel editor + Skapa en ny sketchflat skiss genom att starta den externa redigeraren - - + + CmdSketcherToggleConstruction - - Sketcher - Skissare + + Sketcher + Skissare - Toggle construction line - Växla konstruktionslinje + + Toggle construction line + Växla konstruktionslinje - Toggles the currently selected lines to/from construction mode - Växlar de valda linjerna till / från konstruktionsläge + + Toggles the currently selected lines to/from construction mode + Växlar de valda linjerna till / från konstruktionsläge - - + + CmdSketcherTrimming - - Sketcher - Skissare + + Sketcher + Skissare - Trim edge - Trimma kant + + Trim edge + Trimma kant - Trims an edge with respect to the picked position - Trimmar en kant med i förhållande till den valda + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trimmar en kant med i förhållande till den valda + + + CmdSketcherViewSketch - - Sketcher - Skissare + + Sketcher + Skissare - View sketch - Visa skiss + + View sketch + Visa skiss - View sketch perpendicular to sketch plane - Visa skiss vinkelrätt mot skissplan + + View sketch perpendicular to sketch plane + Visa skiss vinkelrätt mot skissplan - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Utseende + + Appearance + Utseende - - + + QObject - - Wrong selection - Fel val + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Fel val - Select edge(s) from the sketch. - Välj kant(er) från skissen. + + Select edge(s) from the sketch. + Välj kant(er) från skissen. - - Select an edge from the sketch. - Välj en kant från skissen. + + + Select an edge from the sketch. + Välj en kant från skissen. - Double constraint - Dubbelbegränsning + + + Double constraint + Dubbelbegränsning - The selected edge has already a horizontal constraint! - Den valda kanten har redan en horisontell begränsning! + + + The selected edge has already a horizontal constraint! + Den valda kanten har redan en horisontell begränsning! - Impossible constraint - Omöjlig begränsning + + + + + + + Impossible constraint + Omöjlig begränsning - Only sketch and its support is allowed to select - Endast skiss och dess stöd får väljas + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - En av de valda måste finnas på skissen + + + + Only sketch and its support is allowed to select + Endast skiss och dess stöd får väljas - The selected edge is not a line segment - Den valda kanten är inte ett linjesegment + + One of the selected has to be on the sketch + En av de valda måste finnas på skissen - The selected edge has already a vertical constraint! - Den valda kanten har redan en vertikal begränsning! + + + The selected edge is not a line segment + Den valda kanten är inte ett linjesegment - Select entities from the sketch. - Välj föremål från skissen. + + + The selected edge has already a vertical constraint! + Den valda kanten har redan en vertikal begränsning! - Select exactly one entity from the sketch. - Välj exakt ett föremål från skissen. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Välj hörnen från skissen. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Välj exakt två hörn från skissen. + + Select entities from the sketch. + Välj föremål från skissen. - Select exactly one line or one point and one line or two points from the sketch. - Välj exakt en linje eller en punkt och en linje eller två punkter från skissen. + + + Select exactly one entity from the sketch. + Välj exakt ett föremål från skissen. - Select exactly one point and one object from the sketch. - Välj exakt en punkt och ett objekt från skissen. + + + + + + + Select vertexes from the sketch. + Välj hörnen från skissen. - Select exactly one line or up to two points from the sketch. - Välj exakt en linje eller upp till två punkter från skissen. + + + + Select exactly two vertexes from the sketch. + Välj exakt två hörn från skissen. - Select two or more lines from the sketch. - Välj två eller flera linjer från skissen. + + + Select exactly one line or one point and one line or two points from the sketch. + Välj exakt en linje eller en punkt och en linje eller två punkter från skissen. - Select at least two lines from the sketch. - Välj åtminstone två linjer från skissen. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Välj en giltig linje + + + Select exactly one point and one object from the sketch. + Välj exakt en punkt och ett objekt från skissen. - The selected edge is not a valid line - Den valda kanten är inte en giltig linje + + + + + Select exactly one line or up to two points from the sketch. + Välj exakt en linje eller upp till två punkter från skissen. - Select exactly one arc or circle from the sketch. - Välj exakt en cirkelbåge eller cirkel från skissen. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Välj exakt en eller två linjer från skissen. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Välj två kanter från skissen. + + Select two or more lines from the sketch. + Välj två eller flera linjer från skissen. - Select atleast two lines from the sketch. - Välj åtminstone två linjer från skissen. + + Select at least two lines from the sketch. + Välj åtminstone två linjer från skissen. - Select exactly two same geometries - Välj exakt två likadana geometrier + + Select a valid line + Välj en giltig linje - Select valid geometries - Välj giltiga geometrier + + The selected edge is not a valid line + Den valda kanten är inte en giltig linje - Select geometry of similar type - Välj geometri av liknande typ + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Välj två punkter och en linje från skissen. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Välj exakt en linje från skissen. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Välj två linjer från skissen. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Välj exakt två linjer från skissen. + + + + Select exactly one arc or circle from the sketch. + Välj exakt en cirkelbåge eller cirkel från skissen. - Select two entities from the sketch. - Välj två föremål från skissen. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Välj exakt två föremål från skissen. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Redigera skiss + + Select exactly one or two lines from the sketch. + Välj exakt en eller två linjer från skissen. - A dialog is already open in the task panel - En dialogruta är redan öppen i uppgiftspanelen + + Select two edges from the sketch. + Välj två kanter från skissen. - Do you want to close this dialog? - Vill du stänga denna dialogruta? + + Select atleast two lines from the sketch. + Välj åtminstone två linjer från skissen. - - Several sub-elements selected - Flera underelement valda + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Du måste välja en enkel yta som stöd för en skiss! + + Sketch axes cannot be used in equality constraints + - No support face selected - Ingen stödyta vald + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Du måste välja en yta som stöd för en skiss! + + Cannot add a constraint between external geometries! + - No planar support - Inget planärt stöd + Select exactly two same geometries + Välj exakt två likadana geometrier - You need a planar face as support for a sketch! - Du behöver en plan yta som stöd för en skiss! + Select valid geometries + Välj giltiga geometrier - - Distance constraint - Avstånd begränsning + Select geometry of similar type + Välj geometri av liknande typ - Not allowed to edit the datum because the sketch contains conflicting constraints - Inte tillåtet att ändra datum på grund av att skissen innehåller motstridiga begränsningar + + + + Select two points and one line from the sketch. + Välj två punkter och en linje från skissen. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Välj exakt en linje från skissen. - - + + Select two lines from the sketch. + Välj två linjer från skissen. + + + Select exactly two lines from the sketch. + Välj exakt två linjer från skissen. + + + + + Select two entities from the sketch. + Välj två föremål från skissen. + + + + + + + Select exactly two entities from the sketch. + Välj exakt två föremål från skissen. + + + + Edit sketch + Redigera skiss + + + + A dialog is already open in the task panel + En dialogruta är redan öppen i uppgiftspanelen + + + + Do you want to close this dialog? + Vill du stänga denna dialogruta? + + + + Several sub-elements selected + Flera underelement valda + + + + You have to select a single face as support for a sketch! + Du måste välja en enkel yta som stöd för en skiss! + + + + No support face selected + Ingen stödyta vald + + + + You have to select a face as support for a sketch! + Du måste välja en yta som stöd för en skiss! + + + + No planar support + Inget planärt stöd + + + + You need a planar face as support for a sketch! + Du behöver en plan yta som stöd för en skiss! + + + + Distance constraint + Avstånd begränsning + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Inte tillåtet att ändra datum på grund av att skissen innehåller motstridiga begränsningar + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Välj orientering + Choose orientation + Välj orientering - Sketch orientation - Skissorientering + Sketch orientation + Skissorientering - XY-Plane - XY-plan + XY-Plane + XY-plan - XZ-Plane - XZ-Plan + XZ-Plane + XZ-Plan - YZ-Plane - YZ-Plan + YZ-Plane + YZ-Plan - Reverse direction - Omvänd riktning + Reverse direction + Omvänd riktning - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Infoga datum + + Insert datum + Infoga datum - datum: - Datum: + + datum: + Datum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Välj orientering + + + + Sketch orientation + Skissorientering + + + + XY-Plane + XY-plan + + + + XZ-Plane + XZ-Plan + + + + YZ-Plane + YZ-Plan + + + + Reverse direction + Omvänd riktning + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Form + + Form + Form - Filter: - Filter: + + Filter: + Filter: - All - Alla + + All + Alla - Normal - Normal + + Normal + Normal - Datums - Datum + + Datums + Datum - Named - med namnet + + Named + med namnet - - Constraints - Begränsningar + + Constraints + Begränsningar - - + + SketcherGui::TaskSketcherGeneral - - Form - Form + + Form + Form - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Olöst + Unsolved + Olöst - Grid Snap - Rutnät snäpp + Grid Snap + Rutnät snäpp - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100 mm + 100 mm + 100 mm - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - Auto begränsningar + + Auto constraints + Auto begränsningar - auto constraints - auto begränsningar + auto constraints + auto begränsningar - - Edit controls - Redigera kontroller + + Edit controls + Redigera kontroller - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Problemlösarmeddelanden + + Solver messages + Problemlösarmeddelanden - - + + TaskSketcherConstrains - Constraints - Begränsningar + Constraints + Begränsningar - - + + TaskSketcherCreateCommands - Appearance - Utseende + Appearance + Utseende - - + + TaskSketcherGeneral - Edit controls - Redigera kontroller + Edit controls + Redigera kontroller - - + + TaskSketcherMessages - - Form - Form + + Form + Form - Undefined degrees of freedom - Odefinierade frihetsgrader + + Undefined degrees of freedom + Odefinierade frihetsgrader - Not solved yet - Inte löst ännu + + Not solved yet + Inte löst ännu - - + + Workbench - - Sketcher - Skissare + + Sketcher + Skissare - Sketcher geometries - Skissgeometrier + + Sketcher geometries + Skissgeometrier - Sketcher geoms - Skissgeometrier + Sketcher geoms + Skissgeometrier - Sketcher constraints - Skiss begränsningar + + Sketcher constraints + Skiss begränsningar - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_uk.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_uk.ts index bcd6db3f6..2def0e09a 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_uk.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_uk.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain angle - Constrain angle + + Constrain angle + Constrain angle - Fix the angle of a line or the angle between two lines - Fix the angle of a line or the angle between two lines + + Fix the angle of a line or the angle between two lines + Fix the angle of a line or the angle between two lines - - + + CmdSketcherConstrainCoincident - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain coincident - Обмеження збігів + + Constrain coincident + Обмеження збігів - Create a coincident constraint on the selected item - Створити обмеження збігів (коінцидентності) для обраних елементів + + Create a coincident constraint on the selected item + Створити обмеження збігів (коінцидентності) для обраних елементів - - + + CmdSketcherConstrainDistance - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain distance - Обмеження відстані + + Constrain distance + Обмеження відстані - Fix a length of a line or the distance between a line and a vertex - Фіксувати довжину лінії або відстань між лінією та вершиною + + Fix a length of a line or the distance between a line and a vertex + Фіксувати довжину лінії або відстань між лінією та вершиною - - + + CmdSketcherConstrainDistanceX - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain vertical distance - Constrain vertical distance + + Constrain horizontal distance + Constrain horizontal distance - Fix the horizontal distance between two points or line ends - Fix the horizontal distance between two points or line ends + Constrain vertical distance + Constrain vertical distance - - + + + Fix the horizontal distance between two points or line ends + Fix the horizontal distance between two points or line ends + + + CmdSketcherConstrainDistanceY - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain horizontal distance - Constrain horizontal distance + + Constrain vertical distance + Constrain vertical distance - Fix the vertical distance between two points or line ends - Fix the vertical distance between two points or line ends + Constrain horizontal distance + Constrain horizontal distance - - + + + Fix the vertical distance between two points or line ends + Fix the vertical distance between two points or line ends + + + CmdSketcherConstrainEqual - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain equal - Constrain equal + + Constrain equal + Constrain equal - Create an equality constraint between two lines or between circles and arcs - Create an equality constraint between two lines or between circles and arcs + + Create an equality constraint between two lines or between circles and arcs + Create an equality constraint between two lines or between circles and arcs - - + + CmdSketcherConstrainHorizontal - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain horizontally - Горизонтальне обмеження + + Constrain horizontally + Горизонтальне обмеження - Create a horizontal constraint on the selected item - Створити обмеження по горизонталі для вибраного елементу + + Create a horizontal constraint on the selected item + Створити обмеження по горизонталі для вибраного елементу - - + + CmdSketcherConstrainLock - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain lock - Обмеження блокування + + Constrain lock + Обмеження блокування - Create a lock constraint on the selected item - Create a lock constraint on the selected item + + Create a lock constraint on the selected item + Create a lock constraint on the selected item - - + + CmdSketcherConstrainParallel - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain parallel - Паралельне обмеження + + Constrain parallel + Паралельне обмеження - Create a parallel constraint between two lines - Створити паралельне обмеження між двома лініями + + Create a parallel constraint between two lines + Створити паралельне обмеження між двома лініями - - + + CmdSketcherConstrainPerpendicular - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain perpendicular - Constrain perpendicular + + Constrain perpendicular + Constrain perpendicular - Create a Perpendicular constraint between two lines - Create a Perpendicular constraint between two lines + + Create a Perpendicular constraint between two lines + Create a Perpendicular constraint between two lines - - + + CmdSketcherConstrainPointOnObject - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain point onto object - Constrain point onto object + + Constrain point onto object + Constrain point onto object - Fix a point onto an object - Fix a point onto an object + + Fix a point onto an object + Fix a point onto an object - - + + CmdSketcherConstrainRadius - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain radius - Constrain radius + + Constrain radius + Constrain radius - Fix the radius of a circle or an arc - Fix the radius of a circle or an arc + + Fix the radius of a circle or an arc + Fix the radius of a circle or an arc - - + + CmdSketcherConstrainSymmetric - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain symmetrical - Constrain symmetrical + + Constrain symmetrical + Constrain symmetrical - Create an symmetry constraint between two points with respect to a line - Create an symmetry constraint between two points with respect to a line + + Create an symmetry constraint between two points with respect to a line + Create an symmetry constraint between two points with respect to a line - - + + CmdSketcherConstrainTangent - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain tangent - Constrain tangent + + Constrain tangent + Constrain tangent - Create a tangent constraint between two entities - Create a tangent constraint between two entities + + Create a tangent constraint between two entities + Create a tangent constraint between two entities - - + + CmdSketcherConstrainVertical - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Constrain vertically - Вертикальне обмеження + + Constrain vertically + Вертикальне обмеження - Create a vertical constraint on the selected item - Створити обмеження по вертикалі для вибраного елементу + + Create a vertical constraint on the selected item + Створити обмеження по вертикалі для вибраного елементу - - + + CmdSketcherCreateArc - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create arc - Створення дуги + + Create arc + Створення дуги - Create an arc in the sketch - Створення дуги в ескізі + + Create an arc in the sketch + Створення дуги в ескізі - - + + CmdSketcherCreateCircle - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create circle - Створення кола + + Create circle + Створення кола - Create a circle in the sketch - Створення кола в ескізі + + Create a circle in the sketch + Створення кола в ескізі - - + + CmdSketcherCreateDraftLine - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create draft line - Створення допоміжної лінії + + Create draft line + Створення допоміжної лінії - Create a draft line in the sketch - Створення допоміжної лінії в ескізі + + Create a draft line in the sketch + Створення допоміжної лінії в ескізі - - + + CmdSketcherCreateFillet - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create fillet - Create fillet + + Create fillet + Create fillet - Create a fillet between two lines or at a coincident point - Create a fillet between two lines or at a coincident point + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + Create a fillet between two lines or at a coincident point + + + CmdSketcherCreateLine - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create line - Створення лінії + + Create line + Створення лінії - Create a line in the sketch - Створення лінії в ескізі + + Create a line in the sketch + Створення лінії в ескізі - - + + CmdSketcherCreatePoint - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create point - Створення точки + + Create point + Створення точки - Create a point in the sketch - Створення точки в ескізі + + Create a point in the sketch + Створення точки в ескізі - - + + CmdSketcherCreatePolyline - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create polyline - Створення полілінії + + Create polyline + Створення полілінії - Create a polyline in the sketch - Створення полілінії в ескізі + + Create a polyline in the sketch + Створення полілінії в ескізі - - + + CmdSketcherCreateRectangle - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create rectangle - Створити прямокутник + + Create rectangle + Створити прямокутник - Create a rectangle in the sketch - Створіть прямокутник в ескізі + + Create a rectangle in the sketch + Створіть прямокутник в ескізі - - + + CmdSketcherCreateText - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create text - Створення тексту + + Create text + Створення тексту - Create text in the sketch - Створення тексту в ескізі + + Create text in the sketch + Створення тексту в ескізі - - + + + CmdSketcherExternal + + + Sketcher + Створювач ескізів + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Leave sketch - Залишити ескіз + + Leave sketch + Залишити ескіз - Close the editing of the sketch - Закрити редагування ескізу + + Close the editing of the sketch + Закрити редагування ескізу - - + + CmdSketcherMapSketch - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Create sketch - Створити ескіз + + Create sketch + Створити ескіз - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - Створення нового ескізу + Create a new sketch + Створення нового ескізу - - + + CmdSketcherNewSketchSF - Sketcher - Створювач ескізів + Sketcher + Створювач ескізів - Sketchflat sketch - Плоский ескіз + Sketchflat sketch + Плоский ескіз - Create a new sketchflat sketch by starting externel editor - Створити новий плоский ескіз використовуючи зовнішній редактор + Create a new sketchflat sketch by starting externel editor + Створити новий плоский ескіз використовуючи зовнішній редактор - - + + CmdSketcherToggleConstruction - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Toggle construction line - Toggle construction line + + Toggle construction line + Toggle construction line - Toggles the currently selected lines to/from construction mode - Toggles the currently selected lines to/from construction mode + + Toggles the currently selected lines to/from construction mode + Toggles the currently selected lines to/from construction mode - - + + CmdSketcherTrimming - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Trim edge - Trim edge + + Trim edge + Trim edge - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - View sketch - View sketch + + View sketch + View sketch - View sketch perpendicular to sketch plane - View sketch perpendicular to sketch plane + + View sketch perpendicular to sketch plane + View sketch perpendicular to sketch plane - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - Зовнішній вигляд + + Appearance + Зовнішній вигляд - - + + QObject - - Wrong selection - Невірний вибір + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + Невірний вибір - Select edge(s) from the sketch. - Select edge(s) from the sketch. + + Select edge(s) from the sketch. + Select edge(s) from the sketch. - - Select an edge from the sketch. - Виберіть ребро в ескізі. + + + Select an edge from the sketch. + Виберіть ребро в ескізі. - Double constraint - Подвійне обмеження + + + Double constraint + Подвійне обмеження - The selected edge has already a horizontal constraint! - Обраний край вже обмежено по горизонталі! + + + The selected edge has already a horizontal constraint! + Обраний край вже обмежено по горизонталі! - Impossible constraint - Обмеження неможливе + + + + + + + Impossible constraint + Обмеження неможливе - Only sketch and its support is allowed to select - Only sketch and its support is allowed to select + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - One of the selected has to be on the sketch + + + + Only sketch and its support is allowed to select + Only sketch and its support is allowed to select - The selected edge is not a line segment - The selected edge is not a line segment + + One of the selected has to be on the sketch + One of the selected has to be on the sketch - The selected edge has already a vertical constraint! - Вибраний край вже обмежено по вертикалі! + + + The selected edge is not a line segment + The selected edge is not a line segment - Select entities from the sketch. - Select entities from the sketch. + + + The selected edge has already a vertical constraint! + Вибраний край вже обмежено по вертикалі! - Select exactly one entity from the sketch. - Select exactly one entity from the sketch. + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - Вибір вершин з ескізу. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - Вибір рівно двох вершин з ескізу. + + Select entities from the sketch. + Select entities from the sketch. - Select exactly one line or one point and one line or two points from the sketch. - Select exactly one line or one point and one line or two points from the sketch. + + + Select exactly one entity from the sketch. + Select exactly one entity from the sketch. - Select exactly one point and one object from the sketch. - Select exactly one point and one object from the sketch. + + + + + + + Select vertexes from the sketch. + Вибір вершин з ескізу. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + Вибір рівно двох вершин з ескізу. - Select two or more lines from the sketch. - Select two or more lines from the sketch. + + + Select exactly one line or one point and one line or two points from the sketch. + Select exactly one line or one point and one line or two points from the sketch. - Select at least two lines from the sketch. - Select at least two lines from the sketch. + + Cannot add a length constraint on an external geometry! + - Select a valid line - Select a valid line + + + Select exactly one point and one object from the sketch. + Select exactly one point and one object from the sketch. - The selected edge is not a valid line - The selected edge is not a valid line + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - Select exactly one arc or circle from the sketch. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - Select exactly one or two lines from the sketch. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - Select two edges from the sketch. + + Select two or more lines from the sketch. + Select two or more lines from the sketch. - Select atleast two lines from the sketch. - Select atleast two lines from the sketch. + + Select at least two lines from the sketch. + Select at least two lines from the sketch. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + Select a valid line - Select valid geometries - Select valid geometries + + The selected edge is not a valid line + The selected edge is not a valid line - Select geometry of similar type - Select geometry of similar type + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - Select two points and one line from the sketch. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - Вибір рівно однієї лінії з ескізу. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - Вибір двох ліній з ескізу. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - Вибір рівно двох ліній з ескізу. + + + + Select exactly one arc or circle from the sketch. + Select exactly one arc or circle from the sketch. - Select two entities from the sketch. - Select two entities from the sketch. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - Select exactly two entities from the sketch. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - Редагувати ескіз + + Select exactly one or two lines from the sketch. + Select exactly one or two lines from the sketch. - A dialog is already open in the task panel - Діалог вже відкритий в панелі завдань + + Select two edges from the sketch. + Select two edges from the sketch. - Do you want to close this dialog? - Бажаєте закрити цей діалог? + + Select atleast two lines from the sketch. + Select atleast two lines from the sketch. - - Several sub-elements selected - Обрано декілька вкладених елементів + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - Потрібно обрати одну поверхню, як основу ескізу! + + Sketch axes cannot be used in equality constraints + - No support face selected - Не обрано підтримуваної поверхні + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - Потрібно обрати поверхню як основу для ескізу! + + Cannot add a constraint between external geometries! + - No planar support - Підтримка площини відсутня + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - Потрібна пласка поверхня для створення ескізу! + Select valid geometries + Select valid geometries - - Distance constraint - Distance constraint + Select geometry of similar type + Select geometry of similar type - Not allowed to edit the datum because the sketch contains conflicting constraints - Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Select two points and one line from the sketch. + Select two points and one line from the sketch. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + Вибір рівно однієї лінії з ескізу. - - + + Select two lines from the sketch. + Вибір двох ліній з ескізу. + + + Select exactly two lines from the sketch. + Вибір рівно двох ліній з ескізу. + + + + + Select two entities from the sketch. + Select two entities from the sketch. + + + + + + + Select exactly two entities from the sketch. + Select exactly two entities from the sketch. + + + + Edit sketch + Редагувати ескіз + + + + A dialog is already open in the task panel + Діалог вже відкритий в панелі завдань + + + + Do you want to close this dialog? + Бажаєте закрити цей діалог? + + + + Several sub-elements selected + Обрано декілька вкладених елементів + + + + You have to select a single face as support for a sketch! + Потрібно обрати одну поверхню, як основу ескізу! + + + + No support face selected + Не обрано підтримуваної поверхні + + + + You have to select a face as support for a sketch! + Потрібно обрати поверхню як основу для ескізу! + + + + No planar support + Підтримка площини відсутня + + + + You need a planar face as support for a sketch! + Потрібна пласка поверхня для створення ескізу! + + + + Distance constraint + Distance constraint + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + Not allowed to edit the datum because the sketch contains conflicting constraints + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - Choose orientation + Choose orientation + Choose orientation - Sketch orientation - Sketch orientation + Sketch orientation + Sketch orientation - XY-Plane - XY-Plane + XY-Plane + XY-Plane - XZ-Plane - XZ-Plane + XZ-Plane + XZ-Plane - YZ-Plane - YZ-Plane + YZ-Plane + YZ-Plane - Reverse direction - Reverse direction + Reverse direction + Reverse direction - Offset: - Offset: + Offset: + Offset: - - + + SketcherGui::InsertDatum - - Insert datum - Вставити Datum + + Insert datum + Вставити Datum - datum: - datum: + + datum: + datum: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + Choose orientation + + + + Sketch orientation + Sketch orientation + + + + XY-Plane + XY-Plane + + + + XZ-Plane + XZ-Plane + + + + YZ-Plane + YZ-Plane + + + + Reverse direction + Reverse direction + + + + Offset: + Offset: + + + SketcherGui::TaskSketcherConstrains - - Form - Форма + + Form + Форма - Filter: - Фільтр: + + Filter: + Фільтр: - All - Все + + All + Все - Normal - Звичайне + + Normal + Звичайне - Datums - Дані величини (Датум) + + Datums + Дані величини (Датум) - Named - З назвою + + Named + З назвою - - Constraints - Обмеження + + Constraints + Обмеження - - + + SketcherGui::TaskSketcherGeneral - - Form - Форма + + Form + Форма - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - Невирішене + Unsolved + Невирішене - Grid Snap - Прив'язка сітки + Grid Snap + Прив'язка сітки - 0.1 mm - 0.1 мм + 0.1 mm + 0.1 мм - 0.2 mm - 0.2 мм + 0.2 mm + 0.2 мм - 0.5 mm - 0.5 мм + 0.5 mm + 0.5 мм - 1 mm - 1 мм + 1 mm + 1 мм - 2 mm - 2 мм + 2 mm + 2 мм - 5 mm - 5 мм + 5 mm + 5 мм - 10 mm - 10 мм + 10 mm + 10 мм - 20 mm - 20 мм + 20 mm + 20 мм - 50 mm - 50 мм + 50 mm + 50 мм - 100 mm - 100 мм + 100 mm + 100 мм - 200 mm - 200 мм + 200 mm + 200 мм - 500 mm - 500 мм + 500 mm + 500 мм - 1 m - 1 м + 1 m + 1 м - 2 m - 2 м + 2 m + 2 м - 5 m - 5 м + 5 m + 5 м - 10 m - 10 м + 10 m + 10 м - 20 m - 20 м + 20 m + 20 м - Auto constraints - Auto constraints + + Auto constraints + Auto constraints - auto constraints - Авто обмеження + auto constraints + Авто обмеження - - Edit controls - Редагувати управління + + Edit controls + Редагувати управління - - + + SketcherGui::TaskSketcherMessages - - Solver messages - Solver messages + + Solver messages + Solver messages - - + + TaskSketcherConstrains - Constraints - Обмеження + Constraints + Обмеження - - + + TaskSketcherCreateCommands - Appearance - Зовнішній вигляд + Appearance + Зовнішній вигляд - - + + TaskSketcherGeneral - Edit controls - Редагувати управління + Edit controls + Редагувати управління - - + + TaskSketcherMessages - - Form - Форма + + Form + Форма - Undefined degrees of freedom - Undefined degrees of freedom + + Undefined degrees of freedom + Undefined degrees of freedom - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - Створювач ескізів + + Sketcher + Створювач ескізів - Sketcher geometries - Sketcher geometries + + Sketcher geometries + Sketcher geometries - Sketcher geoms - Геометрія ескізу + Sketcher geoms + Геометрія ескізу - Sketcher constraints - Обмеження ескізу + + Sketcher constraints + Обмеження ескізу - + diff --git a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_zh.ts b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_zh.ts index a91a6adc9..f7da39ced 100644 --- a/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_zh.ts +++ b/src/Mod/Sketcher/Gui/Resources/translations/Sketcher_zh.ts @@ -1,926 +1,1299 @@ - - + + CmdSketcherConstrainAngle - - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain angle - 角度约束 + + Constrain angle + 角度约束 - Fix the angle of a line or the angle between two lines - 固定一直线角度或两直线夹角 + + Fix the angle of a line or the angle between two lines + 固定一直线角度或两直线夹角 - - + + CmdSketcherConstrainCoincident - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain coincident - 重合约束 + + Constrain coincident + 重合约束 - Create a coincident constraint on the selected item - 在所选对象上创建重合约束 + + Create a coincident constraint on the selected item + 在所选对象上创建重合约束 - - + + CmdSketcherConstrainDistance - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain distance - 距离约束 + + Constrain distance + 距离约束 - Fix a length of a line or the distance between a line and a vertex - 固定线的长度或者点到线的距离 + + Fix a length of a line or the distance between a line and a vertex + 固定线的长度或者点到线的距离 - - + + CmdSketcherConstrainDistanceX - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain vertical distance - 限制的垂直距离 + + Constrain horizontal distance + 水平距离约束 - Fix the horizontal distance between two points or line ends - 固定两点(或线端点)之间的水平距离 + Constrain vertical distance + 限制的垂直距离 - - + + + Fix the horizontal distance between two points or line ends + 固定两点(或线端点)之间的水平距离 + + + CmdSketcherConstrainDistanceY - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain horizontal distance - 水平距离约束 + + Constrain vertical distance + 限制的垂直距离 - Fix the vertical distance between two points or line ends - 固定两点(或线端点)之间的垂直距离 + Constrain horizontal distance + 水平距离约束 - - + + + Fix the vertical distance between two points or line ends + 固定两点(或线端点)之间的垂直距离 + + + CmdSketcherConstrainEqual - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain equal - 相等约束 + + Constrain equal + 相等约束 - Create an equality constraint between two lines or between circles and arcs - 两直线或圆与圆弧间创建相等约束 + + Create an equality constraint between two lines or between circles and arcs + 两直线或圆与圆弧间创建相等约束 - - + + CmdSketcherConstrainHorizontal - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain horizontally - 水平约束 + + Constrain horizontally + 水平约束 - Create a horizontal constraint on the selected item - 在所选对象上创建水平约束 + + Create a horizontal constraint on the selected item + 在所选对象上创建水平约束 - - + + CmdSketcherConstrainLock - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain lock - 锁定约束 + + Constrain lock + 锁定约束 - Create a lock constraint on the selected item - 对所选物体创建锁定约束 + + Create a lock constraint on the selected item + 对所选物体创建锁定约束 - - + + CmdSketcherConstrainParallel - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain parallel - 平行约束 + + Constrain parallel + 平行约束 - Create a parallel constraint between two lines - 两条线之间创建平行约束 + + Create a parallel constraint between two lines + 两条线之间创建平行约束 - - + + CmdSketcherConstrainPerpendicular - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain perpendicular - 垂直约束 + + Constrain perpendicular + 垂直约束 - Create a Perpendicular constraint between two lines - 在两直线间创建垂直约束 + + Create a Perpendicular constraint between two lines + 在两直线间创建垂直约束 - - + + CmdSketcherConstrainPointOnObject - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain point onto object - 点约束至对象 + + Constrain point onto object + 点约束至对象 - Fix a point onto an object - 固定点至对象 + + Fix a point onto an object + 固定点至对象 - - + + CmdSketcherConstrainRadius - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain radius - 半径约束 + + Constrain radius + 半径约束 - Fix the radius of a circle or an arc - 固定圆或圆弧的半径 + + Fix the radius of a circle or an arc + 固定圆或圆弧的半径 - - + + CmdSketcherConstrainSymmetric - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain symmetrical - 对称约束 + + Constrain symmetrical + 对称约束 - Create an symmetry constraint between two points with respect to a line - 相对一直线在两点间创建对称约束 + + Create an symmetry constraint between two points with respect to a line + 相对一直线在两点间创建对称约束 - - + + CmdSketcherConstrainTangent - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain tangent - 相切约束 + + Constrain tangent + 相切约束 - Create a tangent constraint between two entities - 在两实体间创建相切约束 + + Create a tangent constraint between two entities + 在两实体间创建相切约束 - - + + CmdSketcherConstrainVertical - Sketcher - 草绘 + + Sketcher + 草绘 - Constrain vertically - 垂直约束 + + Constrain vertically + 垂直约束 - Create a vertical constraint on the selected item - 在所选对象上创建垂直约束 + + Create a vertical constraint on the selected item + 在所选对象上创建垂直约束 - - + + CmdSketcherCreateArc - - Sketcher - 草绘 + + Sketcher + 草绘 - Create arc - 创建弧 + + Create arc + 创建弧 - Create an arc in the sketch - 在草绘中创建一个弧 + + Create an arc in the sketch + 在草绘中创建一个弧 - - + + CmdSketcherCreateCircle - Sketcher - 草绘 + + Sketcher + 草绘 - Create circle - 创建圆 + + Create circle + 创建圆 - Create a circle in the sketch - 在草绘中创建一个圆 + + Create a circle in the sketch + 在草绘中创建一个圆 - - + + CmdSketcherCreateDraftLine - Sketcher - 草绘 + + Sketcher + 草绘 - Create draft line - 创建草图线 + + Create draft line + 创建草图线 - Create a draft line in the sketch - 在草绘中创建一根线 + + Create a draft line in the sketch + 在草绘中创建一根线 - - + + CmdSketcherCreateFillet - Sketcher - 草绘 + + Sketcher + 草绘 - Create fillet - 创建圆角 + + Create fillet + 创建圆角 - Create a fillet between two lines or at a coincident point - 两直线或重合点处创建圆角 + + Create a fillet between two lines or at a coincidental point + - - + + Create a fillet between two lines or at a coincident point + 两直线或重合点处创建圆角 + + + CmdSketcherCreateLine - Sketcher - 草绘 + + Sketcher + 草绘 - Create line - 创建线 + + Create line + 创建线 - Create a line in the sketch - 在草图中创建一根线 + + Create a line in the sketch + 在草图中创建一根线 - - + + CmdSketcherCreatePoint - Sketcher - 草绘 + + Sketcher + 草绘 - Create point - 创建点 + + Create point + 创建点 - Create a point in the sketch - 在草绘中创建一个点 + + Create a point in the sketch + 在草绘中创建一个点 - - + + CmdSketcherCreatePolyline - Sketcher - 草绘 + + Sketcher + 草绘 - Create polyline - 创建多段线 + + Create polyline + 创建多段线 - Create a polyline in the sketch - 在草图中创建多段线 + + Create a polyline in the sketch + 在草图中创建多段线 - - + + CmdSketcherCreateRectangle - Sketcher - 草绘 + + Sketcher + 草绘 - Create rectangle - 创建矩形 + + Create rectangle + 创建矩形 - Create a rectangle in the sketch - 在草绘中创建矩形 + + Create a rectangle in the sketch + 在草绘中创建矩形 - - + + CmdSketcherCreateText - Sketcher - 草绘 + + Sketcher + 草绘 - Create text - 创建文本 + + Create text + 创建文本 - Create text in the sketch - 在草绘中创建文本 + + Create text in the sketch + 在草绘中创建文本 - - + + + CmdSketcherExternal + + + Sketcher + 草绘 + + + + External geometry + + + + + Create an edge linked to an external geometry + + + + CmdSketcherLeaveSketch - - Sketcher - 草绘 + + Sketcher + 草绘 - Leave sketch - 离开草绘 + + Leave sketch + 离开草绘 - Close the editing of the sketch - 关闭草图编辑 + + Close the editing of the sketch + 关闭草图编辑 - - + + CmdSketcherMapSketch - Sketcher - 草绘 + + Sketcher + 草绘 - Map sketch to face... - Map sketch to face... + + Map sketch to face... + Map sketch to face... - Map a sketch to a face - Map a sketch to a face + + Map a sketch to a face + Map a sketch to a face - - + + CmdSketcherNewSketch - Sketcher - 草绘 + + Sketcher + 草绘 - Create sketch - 创建草绘 + + Create sketch + 创建草绘 - Create a new or edit the selected sketch - Create a new or edit the selected sketch + + Create a new or edit the selected sketch + Create a new or edit the selected sketch - Create a new sketch - 创建一个新草绘 + Create a new sketch + 创建一个新草绘 - - + + CmdSketcherNewSketchSF - Sketcher - 草绘 + Sketcher + 草绘 - Sketchflat sketch - Sketchflat草绘 + Sketchflat sketch + Sketchflat草绘 - Create a new sketchflat sketch by starting externel editor - 启动外部编辑器创建一个新sketchflat草绘 + Create a new sketchflat sketch by starting externel editor + 启动外部编辑器创建一个新sketchflat草绘 - - + + CmdSketcherToggleConstruction - - Sketcher - 草绘 + + Sketcher + 草绘 - Toggle construction line - 切换构造线 + + Toggle construction line + 切换构造线 - Toggles the currently selected lines to/from construction mode - 切换当前选择线的构造模式 + + Toggles the currently selected lines to/from construction mode + 切换当前选择线的构造模式 - - + + CmdSketcherTrimming - - Sketcher - 草绘 + + Sketcher + 草绘 - Trim edge - 修剪边缘 + + Trim edge + 修剪边缘 - Trims an edge with respect to the picked position - Trims an edge with respect to the picked position + + Trim an edge with respect to the picked position + - - + + Trims an edge with respect to the picked position + Trims an edge with respect to the picked position + + + CmdSketcherViewSketch - - Sketcher - 草绘 + + Sketcher + 草绘 - View sketch - 查看草绘 + + View sketch + 查看草绘 - View sketch perpendicular to sketch plane - 垂直于草绘平面查看草绘 + + View sketch perpendicular to sketch plane + 垂直于草绘平面查看草绘 - - + + Gui::TaskView::TaskSketcherCreateCommands - - Appearance - 外观 + + Appearance + 外观 - - + + QObject - - Wrong selection - 选择错误 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrong selection + 选择错误 - Select edge(s) from the sketch. - 从草绘选择边 + + Select edge(s) from the sketch. + 从草绘选择边 - - Select an edge from the sketch. - 从草绘中选择边. + + + Select an edge from the sketch. + 从草绘中选择边. - Double constraint - 双重约束 + + + Double constraint + 双重约束 - The selected edge has already a horizontal constraint! - 所选的边已水平约束! + + + The selected edge has already a horizontal constraint! + 所选的边已水平约束! - Impossible constraint - 不可约束 + + + + + + + Impossible constraint + 不可约束 - Only sketch and its support is allowed to select - 仅允许选择草绘及其支持面 + + Cannot add a constraint between two external geometries! + - One of the selected has to be on the sketch - 选择之一必须在草绘上 + + + + Only sketch and its support is allowed to select + 仅允许选择草绘及其支持面 - The selected edge is not a line segment - 所选的边并非一段直线 + + One of the selected has to be on the sketch + 选择之一必须在草绘上 - The selected edge has already a vertical constraint! - 所选的边已垂直约束! + + + The selected edge is not a line segment + 所选的边并非一段直线 - Select entities from the sketch. - 从草绘选择实体 + + + The selected edge has already a vertical constraint! + 所选的边已垂直约束! - Select exactly one entity from the sketch. - 仅从草绘选择一个实体 + + The selected item(s) can't accept a horizontal constraint! + - Select vertexes from the sketch. - 从草绘中选择顶点. + + The selected item(s) can't accept a vertical constraint! + - Select exactly two vertexes from the sketch. - 仅从草绘中选择两个顶点. + + Select entities from the sketch. + 从草绘选择实体 - Select exactly one line or one point and one line or two points from the sketch. - 仅从草绘选择一直线,或一点和一直线,或两点. + + + Select exactly one entity from the sketch. + 仅从草绘选择一个实体 - Select exactly one point and one object from the sketch. - 仅从草绘选择一点和一对象. + + + + + + + Select vertexes from the sketch. + 从草绘中选择顶点. - Select exactly one line or up to two points from the sketch. - Select exactly one line or up to two points from the sketch. + + + + Select exactly two vertexes from the sketch. + 仅从草绘中选择两个顶点. - Select two or more lines from the sketch. - 从草绘选择两条或两条以上直线. + + + Select exactly one line or one point and one line or two points from the sketch. + 仅从草绘选择一直线,或一点和一直线,或两点. - Select at least two lines from the sketch. - 至少从草绘选择两直线. + + Cannot add a length constraint on an external geometry! + - Select a valid line - 选择一有效直线 + + + Select exactly one point and one object from the sketch. + 仅从草绘选择一点和一对象. - The selected edge is not a valid line - 所选的边并非有效直线 + + + + + Select exactly one line or up to two points from the sketch. + Select exactly one line or up to two points from the sketch. - Select exactly one arc or circle from the sketch. - 仅从草绘中选择一个圆弧或圆. + + Cannot add a horizontal length constraint on an external geometry! + - Select exactly one or two lines from the sketch. - 仅从草绘选择一条或两条直线. + + Cannot add a vertical length constraint on an external geometry! + - Select two edges from the sketch. - 从草绘选择两条边. + + Select two or more lines from the sketch. + 从草绘选择两条或两条以上直线. - Select atleast two lines from the sketch. - 至少从草绘选择两直线. + + Select at least two lines from the sketch. + 至少从草绘选择两直线. - Select exactly two same geometries - Select exactly two same geometries + + Select a valid line + 选择一有效直线 - Select valid geometries - 选择有效几何体 + + The selected edge is not a valid line + 所选的边并非有效直线 - Select geometry of similar type - 选择相似类型的几何体 + + The selected points should be end points of arcs and lines. + - Select two points and one line from the sketch. - 从草绘中选择两点和一线. + + The selected point should be an end point of an arc or line. + - Select exactly one line from the sketch. - 仅从草绘中选择一根线. + + The selected edge should be an arc, line or circle. + - Select two lines from the sketch. - 从草绘中选择两根线. + + One of the selected edges should be a line. + - Select exactly two lines from the sketch. - 仅从草绘中选择两根线. + + + + Select exactly one arc or circle from the sketch. + 仅从草绘中选择一个圆弧或圆. - Select two entities from the sketch. - 从草绘中选择两个实体. + + Select one or two lines from the sketch. + - Select exactly two entities from the sketch. - 仅从草绘选择两实体. + + Cannot add an angle constraint on an external geometry! + - - Edit sketch - 编辑草绘 + + Select exactly one or two lines from the sketch. + 仅从草绘选择一条或两条直线. - A dialog is already open in the task panel - 一个对话框已在任务面板打开 + + Select two edges from the sketch. + 从草绘选择两条边. - Do you want to close this dialog? - 是否要关闭此对话框? + + Select atleast two lines from the sketch. + 至少从草绘选择两直线. - - Several sub-elements selected - 若干子元素被选择 + + Select two or more compatible edges + - You have to select a single face as support for a sketch! - 您必须选择一个支持面以绘制草图! + + Sketch axes cannot be used in equality constraints + - No support face selected - 未选中支持面 + + + Select two or more edges of similar type + - You have to select a face as support for a sketch! - 您必须选择一个支持面以绘制草图! + + Cannot add a constraint between external geometries! + - No planar support - 无支持平面 + Select exactly two same geometries + Select exactly two same geometries - You need a planar face as support for a sketch! - 您需要一个支持平面以绘制草图! + Select valid geometries + 选择有效几何体 - - Distance constraint - 距离约束 + Select geometry of similar type + 选择相似类型的几何体 - Not allowed to edit the datum because the sketch contains conflicting constraints - 由于草图包含冲突的约束无法编辑基准 + + + + Select two points and one line from the sketch. + 从草绘中选择两点和一线. - Dimensional constraint - Dimensional constraint + Select exactly one line from the sketch. + 仅从草绘中选择一根线. - - + + Select two lines from the sketch. + 从草绘中选择两根线. + + + Select exactly two lines from the sketch. + 仅从草绘中选择两根线. + + + + + Select two entities from the sketch. + 从草绘中选择两个实体. + + + + + + + Select exactly two entities from the sketch. + 仅从草绘选择两实体. + + + + Edit sketch + 编辑草绘 + + + + A dialog is already open in the task panel + 一个对话框已在任务面板打开 + + + + Do you want to close this dialog? + 是否要关闭此对话框? + + + + Several sub-elements selected + 若干子元素被选择 + + + + You have to select a single face as support for a sketch! + 您必须选择一个支持面以绘制草图! + + + + No support face selected + 未选中支持面 + + + + You have to select a face as support for a sketch! + 您必须选择一个支持面以绘制草图! + + + + No planar support + 无支持平面 + + + + You need a planar face as support for a sketch! + 您需要一个支持平面以绘制草图! + + + + Distance constraint + 距离约束 + + + + Not allowed to edit the datum because the sketch contains conflicting constraints + 由于草图包含冲突的约束无法编辑基准 + + + + Dimensional constraint + Dimensional constraint + + + SketchOrientationDialog - - Choose orientation - 选择方向 + Choose orientation + 选择方向 - Sketch orientation - 草绘方向 + Sketch orientation + 草绘方向 - XY-Plane - XY平面 + XY-Plane + XY平面 - XZ-Plane - XZ平面 + XZ-Plane + XZ平面 - YZ-Plane - YZ平面 + YZ-Plane + YZ平面 - Reverse direction - 反转方向 + Reverse direction + 反转方向 - Offset: - 偏移: + Offset: + 偏移: - - + + SketcherGui::InsertDatum - - Insert datum - 插入基准 + + Insert datum + 插入基准 - datum: - 数据: + + datum: + 数据: - - + + + SketcherGui::SketchOrientationDialog + + + Choose orientation + 选择方向 + + + + Sketch orientation + 草绘方向 + + + + XY-Plane + XY平面 + + + + XZ-Plane + XZ平面 + + + + YZ-Plane + YZ平面 + + + + Reverse direction + 反转方向 + + + + Offset: + 偏移: + + + SketcherGui::TaskSketcherConstrains - - Form - 窗体 + + Form + 窗体 - Filter: - 过滤器: + + Filter: + 过滤器: - All - 全部 + + All + 全部 - Normal - 法向 + + Normal + 法向 - Datums - 基准 + + Datums + 基准 - Named - 命名 + + Named + 命名 - - Constraints - 约束 + + Constraints + 约束 - - + + SketcherGui::TaskSketcherGeneral - - Form - 窗体 + + Form + 窗体 - Grid size: - Grid size: + + Grid size: + Grid size: - Grid snap - Grid snap + + Grid snap + Grid snap - Unsolved - 未解决 + Unsolved + 未解决 - Grid Snap - 网格捕捉 + Grid Snap + 网格捕捉 - 0.1 mm - 0.1 mm + 0.1 mm + 0.1 mm - 0.2 mm - 0.2 mm + 0.2 mm + 0.2 mm - 0.5 mm - 0.5 mm + 0.5 mm + 0.5 mm - 1 mm - 1 mm + 1 mm + 1 mm - 2 mm - 2 mm + 2 mm + 2 mm - 5 mm - 5 mm + 5 mm + 5 mm - 10 mm - 10 mm + 10 mm + 10 mm - 20 mm - 20 mm + 20 mm + 20 mm - 50 mm - 50 mm + 50 mm + 50 mm - 100 mm - 100毫米 + 100 mm + 100毫米 - 200 mm - 200 mm + 200 mm + 200 mm - 500 mm - 500 mm + 500 mm + 500 mm - 1 m - 1 m + 1 m + 1 m - 2 m - 2 m + 2 m + 2 m - 5 m - 5 m + 5 m + 5 m - 10 m - 10 m + 10 m + 10 m - 20 m - 20 m + 20 m + 20 m - Auto constraints - 自动约束 + + Auto constraints + 自动约束 - auto constraints - 自动约束 + auto constraints + 自动约束 - - Edit controls - 编辑控件 + + Edit controls + 编辑控件 - - + + SketcherGui::TaskSketcherMessages - - Solver messages - 求解器信息 + + Solver messages + 求解器信息 - - + + TaskSketcherConstrains - Constraints - 约束 + Constraints + 约束 - - + + TaskSketcherCreateCommands - Appearance - 外观 + Appearance + 外观 - - + + TaskSketcherGeneral - Edit controls - 编辑控件 + Edit controls + 编辑控件 - - + + TaskSketcherMessages - - Form - 窗体 + + Form + 窗体 - Undefined degrees of freedom - 未定义的自由度 + + Undefined degrees of freedom + 未定义的自由度 - Not solved yet - Not solved yet + + Not solved yet + Not solved yet - - + + Workbench - - Sketcher - 草绘 + + Sketcher + 草绘 - Sketcher geometries - 草绘几何体 + + Sketcher geometries + 草绘几何体 - Sketcher geoms - 草绘几何 + Sketcher geoms + 草绘几何 - Sketcher constraints - 草图约束 + + Sketcher constraints + 草图约束 - + diff --git a/src/Mod/Start/Gui/Resources/translations/StartPage.ts b/src/Mod/Start/Gui/Resources/translations/StartPage.ts index f34c864d6..1759cc176 100644 --- a/src/Mod/Start/Gui/Resources/translations/StartPage.ts +++ b/src/Mod/Start/Gui/Resources/translations/StartPage.ts @@ -3,242 +3,242 @@ StartPage - + FreeCAD Start Center - + Start a new project - + Recent Files - + Tutorials - + FreeCAD Homepage - + Example projects - + Schenkel STEP file - + Load a PartDesign example - + Load a Drawing extraction - + Load a Robot simulation example - + Projects from the Web - + Schenkel STEP - + Complex Part - + Close this window after opening or creating a file - + Don't show me this window again next time - + Designing parts - + The <b>Part Design</b> workbench is designed to create complex pieces based on constrained 2D sketches. Use it to draw 2D shapes, constrain some of their elements and extrude them to form 3D pieces. - + Example workflow - + Part Design - + Designing architectural elements - + The <b>Architectural Design</b> workbench is specially designed for working with architectural elements such as walls or windows. Start by drawing 2D shapes, and use them as guides to build architecutral objects. - + Architectual Design - + Working with Meshes - + The <b>Mesh Workbench</b> is used to work with Mesh objects. Meshes are simpler 3D objects than Part objects, but they are often easier to import and export to/from other applications. - + FreeCAD offers you several tools to convert between Mesh and Part objects. - + Work with Meshes - + The complete workbench - + FreeCAD Complete workbench - + file size: - + creation time: - + last modified: - + populated with some of the most commonly used tools. - + Latest videos - + Latest news - + On the web - + This is the FreeCAD Homepage. Here you will be able to find a lot of information about FreeCAD, including tutorials, examples and user documentation. - + location: - + User manual - + http://sourceforge.net/apps/mediawiki/free-cad/index.php?title=Online_Help_Toc - + Python resources - + File not found - + from <a href=http://twitter.com/FreeCADNews>@FreeCADNews</a> - + The FreeCAD-tutorial blog - + from <a href=http://www.youtube.com/user/FreeCADNews?feature=mhee>FreeCADNews channel</a> - + This is the official user manual of FreeCAD, built, maintained and translated by the FreeCAD community. - + The tutorials section on the FreeCAD website - + The section of the FreeCAd website dedicate dto python scripting, with examples, explanations, and API commands. - + A blog dedicated to teaching FreeCAD, maintained by members of the FreeCAD community diff --git a/src/Mod/Test/Gui/Resources/translations/Test_af.ts b/src/Mod/Test/Gui/Resources/translations/Test_af.ts index fad80004b..c05d64490 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_af.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_af.ts @@ -1,112 +1,112 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD Eenheidstoets + FreeCAD UnitTest + FreeCAD Eenheidstoets - Failures and errors - Mislukkings en foute + Failures and errors + Mislukkings en foute - Description - Beskrywing + Description + Beskrywing - &Start - &Begin + &Start + &Begin - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Hulp + &Help + &Hulp - F1 - F1 + F1 + F1 - &About - &Aangaande + &About + &Aangaande - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Maak toe + &Close + &Maak toe - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Ledig + Idle + Ledig - Progress - Vordering + Progress + Vordering - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Oorblywende: + Remaining: + Oorblywende: - Errors: - Foute: + Errors: + Foute: - Failures: - Mislukkings: + Failures: + Mislukkings: - Run: - Loop: + Run: + Loop: - Test - Toets + Test + Toets - Select test name: - Kies toetsnaam: + Select test name: + Kies toetsnaam: - - + + TestGui::UnitTestDialog - Help - Hulp + Help + Hulp - About FreeCAD UnitTest - Aangaande FreeCAD Eenheidstoets + About FreeCAD UnitTest + Aangaande FreeCAD Eenheidstoets - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Kopiereg (c) Werner Mayer + Kopiereg (c) Werner Mayer FreeCAD Eenheidstoets is deel van FreeCAD en ondersteun skrywing van eenheidstoetse vir eie modules. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Gee die naam van 'n roepbare voorwerp wat, wanneer geroep is, 'n toetsgeval sal gee. Klik "begin", en die geskepte toets sal uitgevoer word. -Dubbelklik op 'n fout in die boomaansig vir meer inligting oor dit, insluitend die stapelspoor. + Gee die naam van 'n roepbare voorwerp wat, wanneer geroep is, 'n toetsgeval sal gee. Klik "begin", en die geskepte toets sal uitgevoer word. +Dubbelklik op 'n fout in die boomaansig vir meer inligting oor dit, insluitend die stapelspoor. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_de.ts b/src/Mod/Test/Gui/Resources/translations/Test_de.ts index c33e5df17..953b5fc1f 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_de.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_de.ts @@ -1,113 +1,113 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD UnitTest + FreeCAD UnitTest + FreeCAD UnitTest - Failures and errors - Störungen und Fehler + Failures and errors + Störungen und Fehler - Description - Beschreibung + Description + Beschreibung - &Start - &Starten + &Start + &Starten - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Hilfe + &Help + &Hilfe - F1 - F1 + F1 + F1 - &About - Ü&ber + &About + Ü&ber - Alt+A - Alt+B + Alt+A + Alt+B - &Close - Schl&ießen + &Close + Schl&ießen - Alt+C - Alt+I + Alt+C + Alt+I - Idle - Leerlauf + Idle + Leerlauf - Progress - Fortschritt + Progress + Fortschritt - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Verbleibend: + Remaining: + Verbleibend: - Errors: - Fehler: + Errors: + Fehler: - Failures: - Störungen: + Failures: + Störungen: - Run: - Durchlauf: + Run: + Durchlauf: - Test - Aufgabe + Test + Aufgabe - Select test name: - Wähle Testaufgabe: + Select test name: + Wähle Testaufgabe: - - + + TestGui::UnitTestDialog - Help - Hilfe + Help + Hilfe - About FreeCAD UnitTest - Über FreeCAD UnitTest + About FreeCAD UnitTest + Über FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest ist Teil von FreeCAD und unterstützt das Schreiben von Unit Tests für eigene Module. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Geben Sie den Namen eines Tests ein und klicken Sie auf 'Start', um diesen Test auszuführen. + Geben Sie den Namen eines Tests ein und klicken Sie auf 'Start', um diesen Test auszuführen. Doppelklicken Sie im Fehlerfall auf das Element in der Baumansicht, um mehr Informationen darüber zu erhalten. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_es.ts b/src/Mod/Test/Gui/Resources/translations/Test_es.ts index 39acb4d2c..1113b9d2a 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_es.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_es.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - Prueba de unidades de FreeCAD + FreeCAD UnitTest + Prueba de unidades de FreeCAD - Failures and errors - Fallos y errores + Failures and errors + Fallos y errores - Description - Descripción + Description + Descripción - &Start - &Iniciar + &Start + &Iniciar - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Ayuda + &Help + &Ayuda - F1 - F1 + F1 + F1 - &About - &Acerca de + &About + &Acerca de - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Cerrar + &Close + &Cerrar - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Inactivo + Idle + Inactivo - Progress - Progreso + Progress + Progreso - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Restante: + Remaining: + Restante: - Errors: - Errores: + Errors: + Errores: - Failures: - Fallos: + Failures: + Fallos: - Run: - Ejecutar: + Run: + Ejecutar: - Test - Prueba + Test + Prueba - Select test name: - Seleccion del módulo a probar: + Select test name: + Seleccion del módulo a probar: - - + + TestGui::UnitTestDialog - Help - Ayuda + Help + Ayuda - About FreeCAD UnitTest - Acerca de FreeCAD UnitTest + About FreeCAD UnitTest + Acerca de FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest es parte de FreeCAD y admite la escritura de pruebas unitarias para módulos propios. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Escriba el nombre de un objeto que se puede llamar, cuando se le llama, vuelve a empezar 'una TestCase.Click, y la prueba así producida se llevará a cabo. + Escriba el nombre de un objeto que se puede llamar, cuando se le llama, vuelve a empezar 'una TestCase.Click, y la prueba así producida se llevará a cabo. Haga doble clic en un error en la vista en árbol para ver más información al respecto, incluido el seguimiento de la pila. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_fi.ts b/src/Mod/Test/Gui/Resources/translations/Test_fi.ts index f119e8dca..290ea0bb7 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_fi.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_fi.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD yksikkötestaus + FreeCAD UnitTest + FreeCAD yksikkötestaus - Failures and errors - Hylätyt toiminnot ja virheet + Failures and errors + Hylätyt toiminnot ja virheet - Description - Kuvaus + Description + Kuvaus - &Start - &Aloita + &Start + &Aloita - Alt+S - Alt+S + Alt+S + Alt+S - &Help - Ohje + &Help + Ohje - F1 - F1 + F1 + F1 - &About - &Tietoja ohjelmasta + &About + &Tietoja ohjelmasta - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Sulje + &Close + &Sulje - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Joutokäynti + Idle + Joutokäynti - Progress - Tilanne + Progress + Tilanne - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Jäljellä oleva: + Remaining: + Jäljellä oleva: - Errors: - Virheet: + Errors: + Virheet: - Failures: - Hylätyt: + Failures: + Hylätyt: - Run: - Suorita: + Run: + Suorita: - Test - Testi + Test + Testi - Select test name: - Valitse testin nimi: + Select test name: + Valitse testin nimi: - - + + TestGui::UnitTestDialog - Help - Helppi + Help + Helppi - About FreeCAD UnitTest - Tietoja FreeCAD toiminnan testauksesta + About FreeCAD UnitTest + Tietoja FreeCAD toiminnan testauksesta - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Tekijänoikeudet (c) Werner Mayer + Tekijänoikeudet (c) Werner Mayer FreeCAD toiminnan testaus on osa FreeCAD ohjelmaa ja se tukee kirjoitettuja toiminnan testauksia omille moduuleille. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Syötä kutsuttavan objektin nimi. Kun objektia kutsutaan, käynnistyy Testaus ympäristö. Paina 'aloita', jolloin testi lähtee käyntiin. + Syötä kutsuttavan objektin nimi. Kun objektia kutsutaan, käynnistyy Testaus ympäristö. Paina 'aloita', jolloin testi lähtee käyntiin. Kaksoisnapsauta ilmoitettua virhettä, niin saat siitä lisää tietoa, sisältäen pinokutsut. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_fr.ts b/src/Mod/Test/Gui/Resources/translations/Test_fr.ts index 072e56c0b..db64fe5b8 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_fr.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_fr.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - Test unitaire FreeCAD + FreeCAD UnitTest + Test unitaire FreeCAD - Failures and errors - Échecs et erreurs + Failures and errors + Échecs et erreurs - Description - Description + Description + Description - &Start - &Démarrer + &Start + &Démarrer - Alt+S - Alt+D + Alt+S + Alt+D - &Help - &Aide + &Help + &Aide - F1 - F1 + F1 + F1 - &About - À &propos + &About + À &propos - Alt+A - Alt+p + Alt+A + Alt+p - &Close - &Fermer + &Close + &Fermer - Alt+C - Alt+F + Alt+C + Alt+F - Idle - Inactif + Idle + Inactif - Progress - Progression + Progress + Progression - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Restant : + Remaining: + Restant : - Errors: - Erreurs : + Errors: + Erreurs : - Failures: - Échecs : + Failures: + Échecs : - Run: - Lancer : + Run: + Lancer : - Test - Test + Test + Test - Select test name: - Sélectionner le nom du test : + Select test name: + Sélectionner le nom du test : - - + + TestGui::UnitTestDialog - Help - Aide + Help + Aide - About FreeCAD UnitTest - À propos des tests unitaires FreeCAD + About FreeCAD UnitTest + À propos des tests unitaires FreeCAD - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Tous droits réservés (c) Werner Mayer + Tous droits réservés (c) Werner Mayer -FreeCAD UnitTest fait partie de FreeCAD et supporte l'écriture de tests unitaires pour vos propres modules. +FreeCAD UnitTest fait partie de FreeCAD et supporte l'écriture de tests unitaires pour vos propres modules. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Saisir le nom d'un objet qui, une fois appelé, retournera un événement TestCase. Cliquer sur 'Démarrer' et le test démarrera. + Saisir le nom d'un objet qui, une fois appelé, retournera un événement TestCase. Cliquer sur 'Démarrer' et le test démarrera. -Double cliquer sur une erreur dans la vue arborescente pour voir plus d'informations, y compris l'historique de la pile. +Double cliquer sur une erreur dans la vue arborescente pour voir plus d'informations, y compris l'historique de la pile. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_hr.ts b/src/Mod/Test/Gui/Resources/translations/Test_hr.ts index 5410d0170..dee0d8d68 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_hr.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_hr.ts @@ -1,110 +1,110 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD UnitTest + FreeCAD UnitTest + FreeCAD UnitTest - Failures and errors - Kvarovi i greške + Failures and errors + Kvarovi i greške - Description - Opis + Description + Opis - &Start - &Kreni + &Start + &Kreni - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Pomoć + &Help + &Pomoć - F1 - F1 + F1 + F1 - &About - &O + &About + &O - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Zatvori + &Close + &Zatvori - Alt+C - Alt + C + Alt+C + Alt + C - Idle - Besposlen + Idle + Besposlen - Progress - Napredak + Progress + Napredak - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Preostali: + Remaining: + Preostali: - Errors: - Pogreške: + Errors: + Pogreške: - Failures: - Kvarovi: + Failures: + Kvarovi: - Run: - Pokretanje: + Run: + Pokretanje: - Test - Test + Test + Test - Select test name: - Odaberite naziv testa: + Select test name: + Odaberite naziv testa: - - + + TestGui::UnitTestDialog - Help - Pomoć + Help + Pomoć - About FreeCAD UnitTest - O FreeCAD UnitTest + About FreeCAD UnitTest + O FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer FreeCAD UnitTest je dio FreeCAD i podržava pisanje jedinica Testovi za vlastite module. + Copyright (c) Werner Mayer FreeCAD UnitTest je dio FreeCAD i podržava pisanje jedinica Testovi za vlastite module. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Unesite naziv objekt za zvanje koji, kad se zove,vratit će TestCase.Klik "Start", test će se pokrenuti. Dvaput kliknite na pogreške u prikazu stabla da biste vidjeli više informacija o tome, uključujući i stog trag. + Unesite naziv objekt za zvanje koji, kad se zove,vratit će TestCase.Klik "Start", test će se pokrenuti. Dvaput kliknite na pogreške u prikazu stabla da biste vidjeli više informacija o tome, uključujući i stog trag. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_hu.ts b/src/Mod/Test/Gui/Resources/translations/Test_hu.ts index 4647e59c4..97336cabf 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_hu.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_hu.ts @@ -1,110 +1,110 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD Egység-Teszt + FreeCAD UnitTest + FreeCAD Egység-Teszt - Failures and errors - Sikertelen és hibás + Failures and errors + Sikertelen és hibás - Description - Leírás + Description + Leírás - &Start - &Kezdés + &Start + &Kezdés - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Súgó + &Help + &Súgó - F1 - F1 + F1 + F1 - &About - Névjegy + &About + Névjegy - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Bezár + &Close + &Bezár - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Üresjárati + Idle + Üresjárati - Progress - Folyamatban + Progress + Folyamatban - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Fennmaradó: + Remaining: + Fennmaradó: - Errors: - Hibák: + Errors: + Hibák: - Failures: - Sikertelen: + Failures: + Sikertelen: - Run: - Fut: + Run: + Fut: - Test - Vizsgálat + Test + Vizsgálat - Select test name: - Teszt név kiválasztás: + Select test name: + Teszt név kiválasztás: - - + + TestGui::UnitTestDialog - Help - Segítség + Help + Segítség - About FreeCAD UnitTest - FreeCAD Egység-Teszt névjegye + About FreeCAD UnitTest + FreeCAD Egység-Teszt névjegye - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer FreeCAD UnitTest része a FreeCAD programnak és támogatja írásban Unit tesztek saját moduljait. + Copyright (c) Werner Mayer FreeCAD UnitTest része a FreeCAD programnak és támogatja írásban Unit tesztek saját moduljait. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Írja be a nevét a hívható objektumnak, amely hívásakor, visszatér egy Tesztre. Nyomjon 'start', és az így készült vizsgálat futni fog. Dupla kattintással, a fa nézeten további információkat kap, beleértve a verem-nyomkövetést. + Írja be a nevét a hívható objektumnak, amely hívásakor, visszatér egy Tesztre. Nyomjon 'start', és az így készült vizsgálat futni fog. Dupla kattintással, a fa nézeten további információkat kap, beleértve a verem-nyomkövetést. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_it.ts b/src/Mod/Test/Gui/Resources/translations/Test_it.ts index d79cbc61f..11eb06405 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_it.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_it.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD UnitTest + FreeCAD UnitTest + FreeCAD UnitTest - Failures and errors - Avarie ed errori + Failures and errors + Avarie ed errori - Description - Descrizione + Description + Descrizione - &Start - &Inizio + &Start + &Inizio - Alt+S - Alt+I + Alt+S + Alt+I - &Help - &Aiuto + &Help + &Aiuto - F1 - F1 + F1 + F1 - &About - &Informazioni su + &About + &Informazioni su - Alt+A - Alt+I + Alt+A + Alt+I - &Close - &Chiudi + &Close + &Chiudi - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Inattivo + Idle + Inattivo - Progress - Avanzamento + Progress + Avanzamento - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Rimanente: + Remaining: + Rimanente: - Errors: - Errori: + Errors: + Errori: - Failures: - Avarie: + Failures: + Avarie: - Run: - Serie: + Run: + Serie: - Test - Test + Test + Test - Select test name: - Seleziona il nome del test: + Select test name: + Seleziona il nome del test: - - + + TestGui::UnitTestDialog - Help - Aiuto + Help + Aiuto - About FreeCAD UnitTest - Informazioni su FreeCAD UnitTest + About FreeCAD UnitTest + Informazioni su FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest è parte di FreeCAD e supporta la scrittura di test unitari per i propri moduli. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Inserisci il nome di un oggetto richiamabile che, quando richiamato, restituirà un TestCase. Fare clic su 'inizio', e la prova così prodotta sarà eseguita. + Inserisci il nome di un oggetto richiamabile che, quando richiamato, restituirà un TestCase. Fare clic su 'inizio', e la prova così prodotta sarà eseguita. -Doppio click su un errore nell'albero per visualizzare più informazioni, inclusa la traccia dello stack. +Doppio click su un errore nell'albero per visualizzare più informazioni, inclusa la traccia dello stack. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_ja.ts b/src/Mod/Test/Gui/Resources/translations/Test_ja.ts index 35bfeea77..3460f433e 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_ja.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_ja.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD UnitTest + FreeCAD UnitTest + FreeCAD UnitTest - Failures and errors - 障害およびエラー + Failures and errors + 障害およびエラー - Description - 説明 + Description + 説明 - &Start - 開始(&S) + &Start + 開始(&S) - Alt+S - Alt+S + Alt+S + Alt+S - &Help - ヘルプ (&H) + &Help + ヘルプ (&H) - F1 - F1 + F1 + F1 - &About - &About + &About + &About - Alt+A - [Alt] + A + Alt+A + [Alt] + A - &Close - 閉じる (&C) + &Close + 閉じる (&C) - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Idle + Idle + Idle - Progress - 進捗状況 + Progress + 進捗状況 - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - 残り: + Remaining: + 残り: - Errors: - エラー: + Errors: + エラー: - Failures: - エラー: + Failures: + エラー: - Run: - 実行: + Run: + 実行: - Test - テスト + Test + テスト - Select test name: - Select test name: + Select test name: + Select test name: - - + + TestGui::UnitTestDialog - Help - ヘルプ + Help + ヘルプ - About FreeCAD UnitTest - About FreeCAD UnitTest + About FreeCAD UnitTest + About FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_nl.ts b/src/Mod/Test/Gui/Resources/translations/Test_nl.ts index 71bc7bb79..b21373012 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_nl.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_nl.ts @@ -1,113 +1,113 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD unittest + FreeCAD UnitTest + FreeCAD unittest - Failures and errors - Mislukkingen en fouten + Failures and errors + Mislukkingen en fouten - Description - Omschrijving + Description + Omschrijving - &Start - &Start + &Start + &Start - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Help + &Help + &Help - F1 - F1 + F1 + F1 - &About - &Over + &About + &Over - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Sluiten + &Close + &Sluiten - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Inactief + Idle + Inactief - Progress - Voortgang + Progress + Voortgang - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Resterend: + Remaining: + Resterend: - Errors: - Fouten: + Errors: + Fouten: - Failures: - Mislukkingen: + Failures: + Mislukkingen: - Run: - Uitvoeren: + Run: + Uitvoeren: - Test - Test + Test + Test - Select test name: - Selecteer Testnaam: + Select test name: + Selecteer Testnaam: - - + + TestGui::UnitTestDialog - Help - Help + Help + Help - About FreeCAD UnitTest - Over FreeCAD UnitTest + About FreeCAD UnitTest + Over FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD unittest is onderdeel van FreeCAD en ondersteunt het schrijven van unit tests voor eigen modules. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Voer de naam in van het oproepbare object welke, indien opgeroepen, een TestCase zal teruggeven. Druk op 'start', en de aldus geproduceerde test zal worden uitgevoerd. + Voer de naam in van het oproepbare object welke, indien opgeroepen, een TestCase zal teruggeven. Druk op 'start', en de aldus geproduceerde test zal worden uitgevoerd. Dubbel klik op een fout in de boomstructuur om meer informatie te zien, inclusief de stack trace. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_no.ts b/src/Mod/Test/Gui/Resources/translations/Test_no.ts index 41bdc81e0..716ef14df 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_no.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_no.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD enhetstest + FreeCAD UnitTest + FreeCAD enhetstest - Failures and errors - Feil + Failures and errors + Feil - Description - Beskrivelse + Description + Beskrivelse - &Start - &Start + &Start + &Start - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Hjelp + &Help + &Hjelp - F1 - F1 + F1 + F1 - &About - &Om + &About + &Om - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Lukk + &Close + &Lukk - Alt+C - Alt + C + Alt+C + Alt + C - Idle - Inaktiv + Idle + Inaktiv - Progress - Fremdrift + Progress + Fremdrift - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Gjenstående: + Remaining: + Gjenstående: - Errors: - Feil: + Errors: + Feil: - Failures: - Feil: + Failures: + Feil: - Run: - Kjør: + Run: + Kjør: - Test - Test + Test + Test - Select test name: - Velg testnavn: + Select test name: + Velg testnavn: - - + + TestGui::UnitTestDialog - Help - Hjelp + Help + Hjelp - About FreeCAD UnitTest - Om FreeCAD enhetstest + About FreeCAD UnitTest + Om FreeCAD enhetstest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD enhetstest er en del av FreeCAD og støtter skriving til enhetstester for egne moduler. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Skriv inn navnet på et oppkallbart objekt som når kalt vil returnere en testsak. Klikk 'start' og testen produsert vil bli kjørt. + Skriv inn navnet på et oppkallbart objekt som når kalt vil returnere en testsak. Klikk 'start' og testen produsert vil bli kjørt. Dobbeltklikk på en feil i treet for å se mer informasjon om den, inkludert stabelsporing. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_pl.ts b/src/Mod/Test/Gui/Resources/translations/Test_pl.ts index c12793cc5..2ac873245 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_pl.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_pl.ts @@ -1,112 +1,112 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD UnitTest + FreeCAD UnitTest + FreeCAD UnitTest - Failures and errors - Awarie i błędy + Failures and errors + Awarie i błędy - Description - Opis + Description + Opis - &Start - &Uruchom + &Start + &Uruchom - Alt+S - Alt + S + Alt+S + Alt + S - &Help - &Pomoc + &Help + &Pomoc - F1 - F1 + F1 + F1 - &About - &O programie + &About + &O programie - Alt+A - ALT + A + Alt+A + ALT + A - &Close - &Zamknij + &Close + &Zamknij - Alt+C - Alt + C + Alt+C + Alt + C - Idle - Bezczynny + Idle + Bezczynny - Progress - Postęp + Progress + Postęp - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Pozostało: + Remaining: + Pozostało: - Errors: - Błędy: + Errors: + Błędy: - Failures: - Awarie: + Failures: + Awarie: - Run: - Uruchom: + Run: + Uruchom: - Test - Test + Test + Test - Select test name: - Wybierz nazwę testu: + Select test name: + Wybierz nazwę testu: - - + + TestGui::UnitTestDialog - Help - Pomoc + Help + Pomoc - About FreeCAD UnitTest - O FreeCAD UnitTest + About FreeCAD UnitTest + O FreeCAD UnitTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer FreeCAD unittest jest częścią FreeCAD i wspiera pisanie testów jednostkowych dla własnych modułów. + Copyright (c) Werner Mayer FreeCAD unittest jest częścią FreeCAD i wspiera pisanie testów jednostkowych dla własnych modułów. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_pt.ts b/src/Mod/Test/Gui/Resources/translations/Test_pt.ts index b0acc7766..510e60e5c 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_pt.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_pt.ts @@ -1,112 +1,112 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - Teste de unidade do FreeCAD + FreeCAD UnitTest + Teste de unidade do FreeCAD - Failures and errors - Falhas e erros + Failures and errors + Falhas e erros - Description - Descrição + Description + Descrição - &Start - &Início + &Start + &Início - Alt+S - Alt+I + Alt+S + Alt+I - &Help - A&juda + &Help + A&juda - F1 - F1 + F1 + F1 - &About - S&obre + &About + S&obre - Alt+A - Alt+O + Alt+A + Alt+O - &Close - &Fechar + &Close + &Fechar - Alt+C - Alt+F + Alt+C + Alt+F - Idle - Ocioso + Idle + Ocioso - Progress - Progresso + Progress + Progresso - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Faltando: + Remaining: + Faltando: - Errors: - Erros: + Errors: + Erros: - Failures: - Falhas: + Failures: + Falhas: - Run: - Executar: + Run: + Executar: - Test - Teste + Test + Teste - Select test name: - Selecione o nome do teste: + Select test name: + Selecione o nome do teste: - - + + TestGui::UnitTestDialog - Help - Ajuda + Help + Ajuda - About FreeCAD UnitTest - Sobre o teste de unidade do FreeCAD + About FreeCAD UnitTest + Sobre o teste de unidade do FreeCAD - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer O teste de unidade do FreeCAD é parte do FreeCAD e suporta o desenvolvimento de testes de unidade para módulos próprios. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Digite o nome de um objeto que pode ser chamado que, quando chamado, vai retornar um TestCase. Clique "Iniciar", e o teste assim produzido será executado. Dê um duplo clique sobre um erro na árvore para ver mais informações sobre ele, incluindo o rastreamento de pilha. + Digite o nome de um objeto que pode ser chamado que, quando chamado, vai retornar um TestCase. Clique "Iniciar", e o teste assim produzido será executado. Dê um duplo clique sobre um erro na árvore para ver mais informações sobre ele, incluindo o rastreamento de pilha. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_ru.ts b/src/Mod/Test/Gui/Resources/translations/Test_ru.ts index dc50db638..d18d40c78 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_ru.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_ru.ts @@ -1,113 +1,113 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD Unit-Тест + FreeCAD UnitTest + FreeCAD Unit-Тест - Failures and errors - Сбои и ошибки + Failures and errors + Сбои и ошибки - Description - Описание + Description + Описание - &Start - &Запуск + &Start + &Запуск - Alt+S - Alt+S + Alt+S + Alt+S - &Help - Помощь + &Help + Помощь - F1 - F1 + F1 + F1 - &About - О программе + &About + О программе - Alt+A - Alt+A + Alt+A + Alt+A - &Close - Закрыть + &Close + Закрыть - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Простой + Idle + Простой - Progress - Прогресс + Progress + Прогресс - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Осталось: + Remaining: + Осталось: - Errors: - Ошибки: + Errors: + Ошибки: - Failures: - Сбои: + Failures: + Сбои: - Run: - Выполнить: + Run: + Выполнить: - Test - Тестировать + Test + Тестировать - Select test name: - Выберите название теста: + Select test name: + Выберите название теста: - - + + TestGui::UnitTestDialog - Help - Справка + Help + Справка - About FreeCAD UnitTest - О Unit-тесте FreeCAD + About FreeCAD UnitTest + О Unit-тесте FreeCAD - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (C) Вернер Майер + Copyright (C) Вернер Майер FreeCAD UnitTest является частью FreeCAD и поддерживает написание Unit тестов для собственных модулей. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Введите имя вызываемого объекта при вызове которого, бедет возвтащаться TestCase. Кликните 'start' и, таким образом, проверка будет выполнена. + Введите имя вызываемого объекта при вызове которого, бедет возвтащаться TestCase. Кликните 'start' и, таким образом, проверка будет выполнена. Выполните двойной щелчок на ошибке в древовидном виджете для дополнительной информации о ней, включая стек вызовов. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_se.ts b/src/Mod/Test/Gui/Resources/translations/Test_se.ts index 281a1159e..2bade6911 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_se.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_se.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD EnhetsTest + FreeCAD UnitTest + FreeCAD EnhetsTest - Failures and errors - Misslyckanden och fel + Failures and errors + Misslyckanden och fel - Description - Beskrivning + Description + Beskrivning - &Start - &Start + &Start + &Start - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Hjälp + &Help + &Hjälp - F1 - F1 + F1 + F1 - &About - &Om + &About + &Om - Alt+A - Alt+A + Alt+A + Alt+A - &Close - S&täng + &Close + S&täng - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Tomgång + Idle + Tomgång - Progress - Pågår + Progress + Pågår - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Kvarvarande: + Remaining: + Kvarvarande: - Errors: - Fel: + Errors: + Fel: - Failures: - Misslyckanden: + Failures: + Misslyckanden: - Run: - Kör: + Run: + Kör: - Test - Test + Test + Test - Select test name: - Välj testnamn: + Select test name: + Välj testnamn: - - + + TestGui::UnitTestDialog - Help - Hjälp + Help + Hjälp - About FreeCAD UnitTest - Om FreeCAD EnhetsTest + About FreeCAD UnitTest + Om FreeCAD EnhetsTest - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD EnhetsTest är en del av FreeCAD och stöder skrivning av EnhetsTester för egna moduler. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Ange namnet på ett anropsbart objekt, som när det anropas, kommer att ge ett TestFall. Klicka på'start' och testet som producerats kommer att köras. + Ange namnet på ett anropsbart objekt, som när det anropas, kommer att ge ett TestFall. Klicka på'start' och testet som producerats kommer att köras. Dubbelklicka på ett fel i träd-vyn för att se mer information om det, inklusive stackspårningen. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_uk.ts b/src/Mod/Test/Gui/Resources/translations/Test_uk.ts index 3084179f2..97de573ff 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_uk.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_uk.ts @@ -1,114 +1,114 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD Модульний Тест + FreeCAD UnitTest + FreeCAD Модульний Тест - Failures and errors - Збої та помилки + Failures and errors + Збої та помилки - Description - Опис + Description + Опис - &Start - &Старт + &Start + &Старт - Alt+S - Alt+S + Alt+S + Alt+S - &Help - &Допомога + &Help + &Допомога - F1 - F1 + F1 + F1 - &About - &Про + &About + &Про - Alt+A - Alt+A + Alt+A + Alt+A - &Close - &Закрити + &Close + &Закрити - Alt+C - Alt+C + Alt+C + Alt+C - Idle - Бездіяльний + Idle + Бездіяльний - Progress - Прогрес + Progress + Прогрес - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - Залишилось: + Remaining: + Залишилось: - Errors: - Помилки: + Errors: + Помилки: - Failures: - Збої: + Failures: + Збої: - Run: - Запуск: + Run: + Запуск: - Test - Тест + Test + Тест - Select test name: - Виберіть назву тесту: + Select test name: + Виберіть назву тесту: - - + + TestGui::UnitTestDialog - Help - Допомога + Help + Допомога - About FreeCAD UnitTest - Про Модульний Тест FreeCAD + About FreeCAD UnitTest + Про Модульний Тест FreeCAD - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer Модульний тест FreeCAD частина FreeCAD, підтримує написання Модульних Тестів для власних модулів. - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - Введіть ім'я об'єкту, при виклику якого, буде повертатись TestCase. Клікніть 'start' і таким чином, перевірка буде виконана. + Введіть ім'я об'єкту, при виклику якого, буде повертатись TestCase. Клікніть 'start' і таким чином, перевірка буде виконана. Подвійний клік по помилці, в деревоподібному перегляді, покаже додаткову інформацію, включаючи трасування. - + diff --git a/src/Mod/Test/Gui/Resources/translations/Test_zh.ts b/src/Mod/Test/Gui/Resources/translations/Test_zh.ts index 93581ede3..1339d32d7 100644 --- a/src/Mod/Test/Gui/Resources/translations/Test_zh.ts +++ b/src/Mod/Test/Gui/Resources/translations/Test_zh.ts @@ -1,112 +1,112 @@ - - + + TestGui::UnitTest - FreeCAD UnitTest - FreeCAD 单元测试 + FreeCAD UnitTest + FreeCAD 单元测试 - Failures and errors - 失败和错误 + Failures and errors + 失败和错误 - Description - 描述 + Description + 描述 - &Start - 开始(&S) + &Start + 开始(&S) - Alt+S - Alt+S + Alt+S + Alt+S - &Help - 帮助(&H) + &Help + 帮助(&H) - F1 - F1 + F1 + F1 - &About - 关于(&A) + &About + 关于(&A) - Alt+A - Alt+A + Alt+A + Alt+A - &Close - 关闭(&C) + &Close + 关闭(&C) - Alt+C - Alt+C + Alt+C + Alt+C - Idle - 空闲 + Idle + 空闲 - Progress - 进度 + Progress + 进度 - <font color="#0000ff">0</font> - <font color="#0000ff">0</font> + <font color="#0000ff">0</font> + <font color="#0000ff">0</font> - Remaining: - 剩余: + Remaining: + 剩余: - Errors: - 错误: + Errors: + 错误: - Failures: - 失败: + Failures: + 失败: - Run: - 运行: + Run: + 运行: - Test - 测试 + Test + 测试 - Select test name: - 选择测试名称: + Select test name: + 选择测试名称: - - + + TestGui::UnitTestDialog - Help - 帮助 + Help + 帮助 - About FreeCAD UnitTest - 关于FreeCAD单元测试 + About FreeCAD UnitTest + 关于FreeCAD单元测试 - Copyright (c) Werner Mayer + Copyright (c) Werner Mayer FreeCAD UnitTest is part of FreeCAD and supports writing Unit Tests for own modules. - 版权所有(c) Werner Mayer + 版权所有(c) Werner Mayer FreeCAD 单元测试是 FreeCAD 的一部分,并支持为自身模块编写单元测试。 - Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. + Enter the name of a callable object which, when called, will return a TestCase.Click 'start', and the test thus produced will be run. Double click on an error in the tree view to see more information about it,including the stack trace. - 请输入一个可调用对象的名字,其在被调用时将返回一个测试用例。点击‘开始’,将会运行新产生的测试。 + 请输入一个可调用对象的名字,其在被调用时将返回一个测试用例。点击‘开始’,将会运行新产生的测试。 双击树视图中的错误可以查看与其有关的更多内容,包括堆栈跟踪信息。 - + From ee37672dc93e2c6ae53e5f60ddf43ec64cac40da Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 17 Aug 2012 15:36:13 +0200 Subject: [PATCH 513/517] Add a check box to update 3d view or not --- src/Mod/PartDesign/Gui/TaskPadParameters.cpp | 11 +++++++++++ src/Mod/PartDesign/Gui/TaskPadParameters.h | 1 + src/Mod/PartDesign/Gui/TaskPadParameters.ui | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp index c28e35f5a..454d2803e 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp @@ -69,6 +69,8 @@ TaskPadParameters::TaskPadParameters(ViewProviderPad *PadView,QWidget *parent) this, SLOT(onModeChanged(int))); connect(ui->lineFaceName, SIGNAL(textEdited(QString)), this, SLOT(onFaceName(QString))); + connect(ui->checkBoxUpdateView, SIGNAL(toggled(bool)), + this, SLOT(onUpdateView(bool))); this->groupLayout()->addWidget(proxy); @@ -161,6 +163,15 @@ void TaskPadParameters::onSelectionChanged(const Gui::SelectionChanges& msg) } } +void TaskPadParameters::onUpdateView(bool on) +{ + ui->changeMode->blockSignals(!on); + ui->doubleSpinBox->blockSignals(!on); + ui->checkBoxMidplane->blockSignals(!on); + ui->checkBoxReversed->blockSignals(!on); + ui->doubleSpinBox2->blockSignals(!on); +} + void TaskPadParameters::onLengthChanged(double len) { PartDesign::Pad* pcPad = static_cast(PadView->getObject()); diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.h b/src/Mod/PartDesign/Gui/TaskPadParameters.h index 53afdacd0..f4f64d24e 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.h @@ -66,6 +66,7 @@ private Q_SLOTS: void onLength2Changed(double); void onModeChanged(int); void onFaceName(const QString& text); + void onUpdateView(bool); protected: void changeEvent(QEvent *e); diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.ui b/src/Mod/PartDesign/Gui/TaskPadParameters.ui index d1f2601cb..277adba2d 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.ui @@ -119,6 +119,16 @@ + + + + Update view + + + true + + + From 2f67e323cb35ab186ff5c78aa16ceb12286eb7f2 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 17 Aug 2012 16:44:44 -0300 Subject: [PATCH 514/517] Draft: set taskview mode as default --- src/Mod/Draft/DraftGui.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 85c6f8385..9ccaea267 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -185,6 +185,10 @@ class DraftToolBar: self.isTaskOn = False self.fillmode = Draft.getParam("fillmode") self.mask = None + + # set default to taskbar mode + if self.taskmode == None: + self.taskmode = 1 if self.taskmode: # add only a dummy widget, since widgets are created on demand From b68e86ffa5a9dc102c1f2a9e52231ca10c8ec706 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 18 Aug 2012 00:04:54 -0300 Subject: [PATCH 515/517] Arch: small fixes --- src/Mod/Arch/ArchSectionPlane.py | 6 ++++-- src/Mod/Draft/Draft.py | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index d9eecb8e5..6966b88bd 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -242,7 +242,7 @@ class _ArchDrawingView: 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) self.svg = '' @@ -252,7 +252,7 @@ class _ArchDrawingView: import ArchVRM render = ArchVRM.Renderer() render.setWorkingPlane(obj.Source.Placement) - render.addObjects(Draft.getGroupContents(objs,walls=True)) + render.addObjects(objs) if hasattr(obj,"ShowCut"): render.cut(obj.Source.Shape,obj.ShowCut) else: @@ -336,6 +336,8 @@ class _ArchDrawingView: 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: diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 909aaf916..27320c4a3 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2746,7 +2746,29 @@ class _Shape2DView: import Drawing, DraftGeomUtils pl = obj.Placement if obj.Base: - if obj.Base.isDerivedFrom("Part::Feature"): + if getType(obj.Base) == "SectionPlane": + if obj.Base.Objects: + import Arch, Part, Drawing + objs = getGroupContents(obj.Base.Objects,walls=True) + objs = removeHidden(objs) + shapes = [] + for o in objs: + if o.isDerivedFrom("Part::Feature"): + shapes.extend(o.Shape.Solids) + cutp,cutv,iv =Arch.getCutVolume(obj.Base.Shape,shapes) + cuts = [] + for sh in shapes: + if sh.Volume < 0: + sh.reverse() + c = sh.cut(cutv) + cuts.extend(c.Solids) + comp = Part.makeCompound(cuts) + opl = FreeCAD.Placement(obj.Base.Placement) + proj = opl.Rotation.multVec(FreeCAD.Vector(0,0,1)) + [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(comp,proj) + if visibleG0: + obj.Shape = visibleG0 + elif obj.Base.isDerivedFrom("Part::Feature"): if not DraftVecUtils.isNull(obj.Projection): [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(obj.Base.Shape,obj.Projection) if visibleG0: From abc5959eeb983285e618414ee49f9c0a2c5791b1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 18 Aug 2012 11:48:08 +0200 Subject: [PATCH 516/517] Fix confusing informaton in About dialog --- src/Gui/AboutApplication.ui | 26 ++++++++++++++++++++------ src/Gui/Splashscreen.cpp | 11 ++++++++--- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/Gui/AboutApplication.ui b/src/Gui/AboutApplication.ui index 352e62c00..d3f530546 100644 --- a/src/Gui/AboutApplication.ui +++ b/src/Gui/AboutApplication.ui @@ -115,14 +115,14 @@ 6 - + Platform - + <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> @@ -171,34 +171,48 @@ - + Branch - + <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> - + <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> - + Hash + + + + Operating system + + + + + + + <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> + + + diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 46f1183e9..bf207b38e 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -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()) From bdb55d789bdac7d2be9843c96c8aff4e7f9e93bd Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 19 Aug 2012 18:09:30 -0300 Subject: [PATCH 517/517] PartDesign: Changed groove and pocket icons --- .../Gui/Resources/icons/PartDesign_Groove.svg | 229 +++++++++++++----- .../Gui/Resources/icons/PartDesign_Pocket.svg | 35 +-- 2 files changed, 195 insertions(+), 69 deletions(-) diff --git a/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg b/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg index 2c1ca60aa..28e52af97 100644 --- a/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg +++ b/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Groove.svg @@ -17,9 +17,38 @@ inkscape:version="0.48.3.1 r9886" sodipodi:docname="PartDesign_Groove.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" - version="1.1"> + version="1.1" + inkscape:export-filename="/home/yorik/PartDesign_Groove.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + + + + + + + + + - - + gradientTransform="matrix(0.97680237,0,0,0.96003508,1.4694319,0.12765765)" /> + + + + + + + + + + + + inkscape:window-width="1280" + inkscape:window-height="777" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:snap-global="true" + inkscape:snap-nodes="true" + inkscape:object-paths="false" + inkscape:object-nodes="true" /> @@ -124,21 +210,56 @@ id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> - - - + + + + + + + + + + diff --git a/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Pocket.svg b/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Pocket.svg index 8d8b1803c..17460ccbb 100644 --- a/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Pocket.svg +++ b/src/Mod/PartDesign/Gui/Resources/icons/PartDesign_Pocket.svg @@ -1,5 +1,6 @@ + + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/yorik/PartDesign_Pocket.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> @@ -490,9 +494,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="8" - inkscape:cx="33.452538" - inkscape:cy="36.164445" + inkscape:zoom="2" + inkscape:cx="60.53903" + inkscape:cy="-18.846351" inkscape:current-layer="text3796" showgrid="true" inkscape:document-units="px" @@ -510,7 +514,7 @@ image/svg+xml - + @@ -523,30 +527,31 @@ style="font-size:54.21519089000000236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ff2600;fill-opacity:1;stroke:#731200;font-family:Arial;-inkscape-font-specification:Arial;color:#000000;fill-rule:nonzero;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="text3796"> + sodipodi:nodetypes="czcczccc" + inkscape:connector-curvature="0" />
  • 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