{} : {}".format(
+ __doc__,
+ translate("Curves_ReflectLines", "Usage"),
+ " ".join(__usage__.splitlines()),
+ ),
+ }
+
+
+FreeCADGui.addCommand("Curves_ReflectLines", ReflectLinesCommand())
diff --git a/freecad/Curves/RotationSweepFP.py b/freecad/Curves/RotationSweepFP.py
index 1e36e0d..e39512a 100644
--- a/freecad/Curves/RotationSweepFP.py
+++ b/freecad/Curves/RotationSweepFP.py
@@ -1,11 +1,19 @@
# -*- coding: utf-8 -*-
-__title__ = 'Rotation Sweep'
-__author__ = 'Christophe Grellier (Chris_G)'
-__license__ = 'LGPL 2.1'
-__doc__ = 'Sweep some profiles along a path, and around a point'
-__usage__ = """Select a sweep path and some profiles in the 3D View.
-If TrimPath is False, the Sweep surface will be extrapolated to fit the whole path."""
+import FreeCAD
+
+translate = FreeCAD.Qt.translate
+QT_TRANSLATE_NOOP = FreeCAD.Qt.QT_TRANSLATE_NOOP
+
+__title__ = QT_TRANSLATE_NOOP("Curves_RotationSweep", "Rotation Sweep")
+__author__ = "Christophe Grellier (Chris_G)"
+__license__ = "LGPL 2.1"
+__doc__ = translate("Curves_RotationSweep", "Sweep some profiles along a path, and around a point")
+__usage__ = translate(
+ "Curves_RotationSweep",
+ """Select a sweep path and some profiles in the 3D View.
+If TrimPath is False, the Sweep surface will be extrapolated to fit the whole path.""",
+)
import os
import FreeCAD
@@ -29,19 +37,19 @@ class RotsweepProxyFP:
def __init__(self, obj):
"""Add the properties"""
obj.addProperty("App::PropertyLinkSubList", "Profiles",
- "InputShapes", "The list of profiles to sweep")
+ "InputShapes", QT_TRANSLATE_NOOP("App::Property", "The list of profiles to sweep"))
obj.addProperty("App::PropertyLinkSub", "Path",
- "InputShapes", "The sweep path")
+ "InputShapes", QT_TRANSLATE_NOOP("App::Property", "The sweep path"))
obj.addProperty("App::PropertyLinkSub", "FaceSupport",
- "ExtraProfiles", "Face support of the sweep path")
+ "ExtraProfiles", QT_TRANSLATE_NOOP("App::Property", "Face support of the sweep path"))
obj.addProperty("App::PropertyBool", "TrimPath",
- "Settings", "Trim the sweep shape").TrimPath = True
+ "Settings", QT_TRANSLATE_NOOP("App::Property", "Trim the sweep shape")).TrimPath = True
obj.addProperty("App::PropertyBool", "ViewProfiles",
- "Settings", "Add profiles to the sweep shape")
+ "Settings", QT_TRANSLATE_NOOP("App::Property", "Add profiles to the sweep shape"))
obj.addProperty("App::PropertyInteger", "ExtraProfiles",
- "ExtraProfiles", "Number of extra profiles")
+ "ExtraProfiles", QT_TRANSLATE_NOOP("App::Property", "Number of extra profiles"))
obj.addProperty("App::PropertyBool", "SmoothTop",
- "Settings", "Build a smooth top with extra profiles")
+ "Settings", QT_TRANSLATE_NOOP("App::Property", "Build a smooth top with extra profiles"))
obj.setEditorMode("ViewProfiles", 2)
# obj.setEditorMode("ExtraProfiles", 2)
obj.Proxy = self
@@ -210,9 +218,15 @@ def IsActive(self):
return False
def GetResources(self):
- return {'Pixmap': TOOL_ICON,
- 'MenuText': __title__,
- 'ToolTip': "{}
{} : {}".format(
+ __doc__, translate("Curves_PasteSVG", "Usage"), " ".join(__usage__.splitlines())
+ ),
+ }
-FreeCADGui.addCommand('pasteSVG', pasteSVG())
+FreeCADGui.addCommand("Curves_PasteSVG", pasteSVG())
diff --git a/freecad/Curves/pipeshellFP.py b/freecad/Curves/pipeshellFP.py
index cd6fb35..83aa51e 100644
--- a/freecad/Curves/pipeshellFP.py
+++ b/freecad/Curves/pipeshellFP.py
@@ -1,12 +1,16 @@
# -*- coding: utf-8 -*-
-__title__ = 'Pipeshell'
+import FreeCAD
+
+translate = FreeCAD.Qt.translate
+QT_TRANSLATE_NOOP = FreeCAD.Qt.QT_TRANSLATE_NOOP
+
+__title__ = QT_TRANSLATE_NOOP("Curves_Pipeshell", "Pipeshell")
__author__ = "Christophe Grellier (Chris_G)"
__license__ = "LGPL 2.1"
-__doc__ = 'Creates a PipeShell sweep object'
+__doc__ = QT_TRANSLATE_NOOP("Curves_Pipeshell", "Creates a PipeShell sweep object")
import os
-import FreeCAD
import FreeCADGui
import Part
from freecad.Curves import _utils
@@ -19,32 +23,133 @@
def debug(string):
if DEBUG:
FreeCAD.Console.PrintMessage(string)
- FreeCAD.Console.PrintMessage("\n")
+ FreeCAD.Console.PrintMessage(translate("Log", "\n"))
class pipeShell:
"PipeShell featurePython object"
def __init__(self, obj):
- ''' Add the properties '''
- obj.addProperty("App::PropertyLinkSubList", "Spine", "Main", "Sweep path")
- obj.addProperty("App::PropertyLinkList", "Profiles", "Main", "Profiles that are swept along spine")
- obj.addProperty("App::PropertyLink", "Support", "Mode", "Shape of the ShapeSupport mode")
- obj.addProperty("App::PropertyLink", "Auxiliary", "Mode", "Auxiliary spine")
- obj.addProperty("App::PropertyEnumeration", "Mode", "Main", "PipeShell mode").Mode = ["Frenet", "DiscreteTrihedron", "FixedTrihedron", "Binormal", "ShapeSupport", "AuxiliarySpine"]
- obj.addProperty("App::PropertyEnumeration", "Output", "Main", "Output shape").Output = ["Sections", "Lofted sections", "Surface"]
- obj.addProperty("App::PropertyBool", "Solid", "Settings", "Make solid object").Solid = False
- obj.addProperty("App::PropertyInteger", "MaxDegree", "Settings", "Maximum degree of the generated surface").MaxDegree = 5
- obj.addProperty("App::PropertyInteger", "MaxSegments", "Settings", "Maximum number of segments of the generated surface").MaxSegments = 999
- obj.addProperty("App::PropertyInteger", "Samples", "Settings", "Number of samples for preview").Samples = 100
- obj.addProperty("App::PropertyFloat", "Tol3d", "Settings", "Tolerance 3D").Tol3d = 1.0e-4
- obj.addProperty("App::PropertyFloat", "TolBound", "Settings", "Tolerance boundary").TolBound = 1.0e-4
- obj.addProperty("App::PropertyFloat", "TolAng", "Settings", "Tolerance angular").TolAng = 1.0e-2
- obj.addProperty("App::PropertyVector", "Direction", "Mode", "Direction of the Binormal and FixedTrihedron modes")
- obj.addProperty("App::PropertyVector", "Location", "Mode", "Location of the FixedTrihedron mode")
- obj.addProperty("App::PropertyBool", "Corrected", "Mode", "Corrected Frenet").Corrected = False
- obj.addProperty("App::PropertyBool", "EquiCurvi", "Mode", "Curvilinear equivalence").EquiCurvi = False
- obj.addProperty("App::PropertyEnumeration", "Contact", "Mode", "Type of contact to auxiliary spine").Contact = ["NoContact", "Contact", "ContactOnBorder"]
+ """Add the properties"""
+ obj.addProperty(
+ "App::PropertyLinkSubList",
+ "Spine",
+ "Main",
+ QT_TRANSLATE_NOOP("App::Property", "Sweep path"),
+ )
+ obj.addProperty(
+ "App::PropertyLinkList",
+ "Profiles",
+ "Main",
+ QT_TRANSLATE_NOOP("App::Property", "Profiles that are swept along spine"),
+ )
+ obj.addProperty(
+ "App::PropertyLink",
+ "Support",
+ "Mode",
+ QT_TRANSLATE_NOOP("App::Property", "Shape of the ShapeSupport mode"),
+ )
+ obj.addProperty(
+ "App::PropertyLink",
+ "Auxiliary",
+ "Mode",
+ QT_TRANSLATE_NOOP("App::Property", "Auxiliary spine"),
+ )
+ obj.addProperty(
+ "App::PropertyEnumeration",
+ "Mode",
+ "Main",
+ QT_TRANSLATE_NOOP("App::Property", "PipeShell mode"),
+ ).Mode = [
+ "Frenet",
+ "DiscreteTrihedron",
+ "FixedTrihedron",
+ "Binormal",
+ "ShapeSupport",
+ "AuxiliarySpine",
+ ]
+ obj.addProperty(
+ "App::PropertyEnumeration",
+ "Output",
+ "Main",
+ QT_TRANSLATE_NOOP("App::Property", "Output shape"),
+ ).Output = ["Sections", "Lofted sections", "Surface"]
+ obj.addProperty(
+ "App::PropertyBool",
+ "Solid",
+ "Settings",
+ QT_TRANSLATE_NOOP("App::Property", "Make solid object"),
+ ).Solid = False
+ obj.addProperty(
+ "App::PropertyInteger",
+ "MaxDegree",
+ "Settings",
+ QT_TRANSLATE_NOOP("App::Property", "Maximum degree of the generated surface"),
+ ).MaxDegree = 5
+ obj.addProperty(
+ "App::PropertyInteger",
+ "MaxSegments",
+ "Settings",
+ QT_TRANSLATE_NOOP(
+ "App::Property", "Maximum number of segments of the generated surface"
+ ),
+ ).MaxSegments = 999
+ obj.addProperty(
+ "App::PropertyInteger",
+ "Samples",
+ "Settings",
+ QT_TRANSLATE_NOOP("App::Property", "Number of samples for preview"),
+ ).Samples = 100
+ obj.addProperty(
+ "App::PropertyFloat",
+ "Tol3d",
+ "Settings",
+ QT_TRANSLATE_NOOP("App::Property", "Tolerance 3D"),
+ ).Tol3d = 1.0e-4
+ obj.addProperty(
+ "App::PropertyFloat",
+ "TolBound",
+ "Settings",
+ QT_TRANSLATE_NOOP("App::Property", "Tolerance boundary"),
+ ).TolBound = 1.0e-4
+ obj.addProperty(
+ "App::PropertyFloat",
+ "TolAng",
+ "Settings",
+ QT_TRANSLATE_NOOP("App::Property", "Tolerance angular"),
+ ).TolAng = 1.0e-2
+ obj.addProperty(
+ "App::PropertyVector",
+ "Direction",
+ "Mode",
+ QT_TRANSLATE_NOOP(
+ "App::Property", "Direction of the Binormal and FixedTrihedron modes"
+ ),
+ )
+ obj.addProperty(
+ "App::PropertyVector",
+ "Location",
+ "Mode",
+ QT_TRANSLATE_NOOP("App::Property", "Location of the FixedTrihedron mode"),
+ )
+ obj.addProperty(
+ "App::PropertyBool",
+ "Corrected",
+ "Mode",
+ QT_TRANSLATE_NOOP("App::Property", "Corrected Frenet"),
+ ).Corrected = False
+ obj.addProperty(
+ "App::PropertyBool",
+ "EquiCurvi",
+ "Mode",
+ QT_TRANSLATE_NOOP("App::Property", "Curvilinear equivalence"),
+ ).EquiCurvi = False
+ obj.addProperty(
+ "App::PropertyEnumeration",
+ "Contact",
+ "Mode",
+ QT_TRANSLATE_NOOP("App::Property", "Type of contact to auxiliary spine"),
+ ).Contact = ["NoContact", "Contact", "ContactOnBorder"]
obj.Mode = "DiscreteTrihedron"
obj.Contact = "NoContact"
obj.Output = "Sections"
@@ -166,7 +271,11 @@ def onChanged(self, fp, prop):
fp.TolAng = 1000
if prop == "Contact":
if fp.Contact == "ContactOnBorder":
- FreeCAD.Console.PrintError("\nSorry, ContactOnBorder option is currently broken in OCCT.\n")
+ FreeCAD.Console.PrintError(
+ translate(
+ "Log", "\nSorry, ContactOnBorder option is currently broken in OCCT.\n"
+ )
+ )
fp.Contact = "Contact"
def add(self, ps, p):
@@ -209,11 +318,15 @@ def execute(self, obj):
if not direction:
direction = FreeCAD.Vector(0, 0, 1)
obj.Direction = direction
- FreeCAD.Console.PrintError("\nWrong direction, defaulting to +Z\n")
+ FreeCAD.Console.PrintError(
+ translate("Log", "\nWrong direction, defaulting to +Z\n")
+ )
elif direction.Length < 1e-7:
direction = FreeCAD.Vector(0, 0, 1)
obj.Direction = direction
- FreeCAD.Console.PrintError("\nDirection has null length, defaulting to +Z\n")
+ FreeCAD.Console.PrintError(
+ translate("Log", "\nDirection has null length, defaulting to +Z\n")
+ )
if mode == "Binormal":
debug("Binormal mode (%r)" % direction)
ps.setBiNormalMode(direction)
@@ -240,7 +353,9 @@ def execute(self, obj):
debug("AuxiliarySpine mode (%r %s)" % (curv, cont))
ps.setAuxiliarySpine(w, curv, n)
else:
- FreeCAD.Console.PrintError("\nPlease set a valid Auxiliary Spine Object\n")
+ FreeCAD.Console.PrintError(
+ translate("Log", "\nPlease set a valid Auxiliary Spine Object\n")
+ )
elif mode == "ShapeSupport":
sup = self.getprop(obj, "Support")
sh = None
@@ -250,7 +365,7 @@ def execute(self, obj):
debug("ShapeSupport mode")
ps.setSpineSupport(sh)
else:
- FreeCAD.Console.PrintError("\nPlease set a valid Spine support Object\n")
+ FreeCAD.Console.PrintError(translate("Log", "\nPlease set a valid Spine support Object\n"))
for p in profs:
self.add(ps, p)
@@ -272,7 +387,7 @@ def execute(self, obj):
c = Part.Compound(shapes + rails)
obj.Shape = c
else:
- FreeCAD.Console.PrintError("\nFailed to create shape\n")
+ FreeCAD.Console.PrintError(translate("Log", "\nFailed to create shape\n"))
def getCode(self, cont):
if cont == "Contact":
@@ -373,7 +488,12 @@ def Activated(self):
# path.ViewObject.LineColor = (1.0,0.3,0.0)
self.makePipeShellFeature(path, profs)
else:
- FreeCAD.Console.PrintError("\nYou must select:\n- in the 3D view, the edges that build the sweep path\n- in the Tree view, one or more 'pipeshellProfile' objects\n")
+ FreeCAD.Console.PrintError(
+ translate(
+ "Log",
+ "\nYou must select:\n- in the 3D view, the edges that build the sweep path\n- in the Tree view, one or more 'pipeshellProfile' objects\n",
+ )
+ )
def IsActive(self):
if FreeCAD.ActiveDocument:
@@ -387,4 +507,4 @@ def GetResources(self):
'ToolTip': __doc__}
-FreeCADGui.addCommand('pipeshell', pipeShellCommand())
+FreeCADGui.addCommand("Curves_Pipeshell", pipeShellCommand())
diff --git a/freecad/Curves/pipeshellProfileFP.py b/freecad/Curves/pipeshellProfileFP.py
index 6d24171..bfe8aa0 100644
--- a/freecad/Curves/pipeshellProfileFP.py
+++ b/freecad/Curves/pipeshellProfileFP.py
@@ -1,12 +1,16 @@
# -*- coding: utf-8 -*-
-__title__ = 'Pipeshell profile'
+import FreeCAD
+
+translate = FreeCAD.Qt.translate
+QT_TRANSLATE_NOOP = FreeCAD.Qt.QT_TRANSLATE_NOOP
+
+__title__ = QT_TRANSLATE_NOOP("Curves_PipeshellProfile", "Pipeshell profile")
__author__ = "Christophe Grellier (Chris_G)"
__license__ = "LGPL 2.1"
-__doc__ = 'Creates a Profile object for PipeShell'
+__doc__ = QT_TRANSLATE_NOOP("Curves_PipeshellProfile", "Creates a Profile object for PipeShell")
import os
-import FreeCAD
import FreeCADGui
import Part
from freecad.Curves import _utils
@@ -15,23 +19,50 @@
TOOL_ICON = os.path.join( ICONPATH, 'profile.svg')
DEBUG = False
+
def debug(string):
if DEBUG:
FreeCAD.Console.PrintMessage(string)
FreeCAD.Console.PrintMessage("\n")
+
class profile:
"Profile object for PipeShell"
def __init__(self, obj, source):
- ''' Add the properties '''
- if isinstance(source,(list,tuple)):
- obj.addProperty("App::PropertyLinkSubList", "Profile", "Profile", "SubShapes of the profile")
+ """Add the properties"""
+ if isinstance(source, (list, tuple)):
+ obj.addProperty(
+ "App::PropertyLinkSubList",
+ "Profile",
+ "Profile",
+ QT_TRANSLATE_NOOP("App::Property", "SubShapes of the profile"),
+ )
else:
- obj.addProperty("App::PropertyLink", "Profile", "Profile", "source object of the profile")
+ obj.addProperty(
+ "App::PropertyLink",
+ "Profile",
+ "Profile",
+ QT_TRANSLATE_NOOP("App::Property", "source object of the profile"),
+ )
obj.Profile = source
- obj.addProperty("App::PropertyLinkSub", "Location", "Profile", "Vertex location on spine")
- obj.addProperty("App::PropertyBool", "Contact", "Profile", "Translate profile to contact spine").Contact = False
- obj.addProperty("App::PropertyBool", "Correction", "Profile", "Rotate profile to be orthogonal to spine").Correction = False
+ obj.addProperty(
+ "App::PropertyLinkSub",
+ "Location",
+ "Profile",
+ QT_TRANSLATE_NOOP("App::Property", "Vertex location on spine"),
+ )
+ obj.addProperty(
+ "App::PropertyBool",
+ "Contact",
+ "Profile",
+ QT_TRANSLATE_NOOP("App::Property", "Translate profile to contact spine"),
+ ).Contact = False
+ obj.addProperty(
+ "App::PropertyBool",
+ "Correction",
+ "Profile",
+ QT_TRANSLATE_NOOP("App::Property", "Rotate profile to be orthogonal to spine"),
+ ).Correction = False
obj.Proxy = self
def getEdgeList(self, obj, prop):
@@ -81,9 +112,9 @@ def execute(self, obj):
if w:
obj.Shape = w
else:
- FreeCAD.Console.PrintError("\nFailed to build wire\n")
+ FreeCAD.Console.PrintError(translate("Log", "\nFailed to build wire\n"))
else:
- FreeCAD.Console.PrintError("\nFailed to extract edges\n")
+ FreeCAD.Console.PrintError(translate("Log", "\nFailed to extract edges\n"))
class profileVP:
def __init__(self,vobj):
@@ -144,7 +175,7 @@ def Activated(self):
source = None
sel = FreeCADGui.Selection.getSelectionEx()
if sel == []:
- FreeCAD.Console.PrintError("Select at least 1 edge !\n")
+ FreeCAD.Console.PrintError(translate("Log", "Select at least 1 edge !\n"))
for selobj in sel:
if selobj.HasSubObjects:
for i in range(len(selobj.SubObjects)):
@@ -174,4 +205,4 @@ def GetResources(self):
'MenuText': __title__,
'ToolTip': __doc__}
-FreeCADGui.addCommand('profile', profileCommand())
+FreeCADGui.addCommand("Curves_PipeshellProfile", profileCommand())
diff --git a/freecad/Curves/profile_editor.py b/freecad/Curves/profile_editor.py
index 7accf83..83ee93a 100644
--- a/freecad/Curves/profile_editor.py
+++ b/freecad/Curves/profile_editor.py
@@ -5,7 +5,7 @@
from freecad.Curves import _utils
from freecad.Curves import graphics
# from graphics import COLORS
-# FreeCAD.Console.PrintMessage("Using local Pivy.graphics library\n")
+# FreeCAD.Console.PrintMessage(translate("Log", "Using local Pivy.graphics library\n"))
def parameterization(points, a, closed):
@@ -240,7 +240,7 @@ def __init__(self, points=[], fp=None):
elif isinstance(p, (MarkerOnShape, ConnectionMarker)):
self.points.append(p)
else:
- FreeCAD.Console.PrintError("InterpoCurveEditor : bad input")
+ FreeCAD.Console.PrintError(translate("Log", "InterpoCurveEditor : bad input"))
# Setup coin objects
if self.fp:
self.guidoc = self.fp.ViewObject.Document
@@ -363,7 +363,7 @@ def controlCB(self, attr, event_callback):
for i in range(len(self.root.selected_objects)):
if isinstance(self.root.selected_objects[i], MarkerOnShape):
self.root.selected_objects[i].sublink = tup
- FreeCAD.Console.PrintMessage("Snapped to {}\n".format(str(self.root.selected_objects[i].sublink)))
+ FreeCAD.Console.PrintMessage(translate("Log", "Snapped to {}\n")).format(str(self.root.selected_objects[i].sublink))
self.root.selected_objects[i].drag_start()
self.root.selected_objects[i].drag((0, 0, 0.))
self.root.selected_objects[i].drag_release()
@@ -371,7 +371,7 @@ def controlCB(self, attr, event_callback):
elif event.getKey() == ord("l"):
self.toggle_linear()
elif (event.getKey() == 65535) or (event.getKey() == 65288): # Suppr or Backspace
- # FreeCAD.Console.PrintMessage("Some objects have been deleted\n")
+ # FreeCAD.Console.PrintMessage(translate("Log", "Some objects have been deleted\n"))
pts = list()
for o in self.root.dynamic_objects:
if isinstance(o, MarkerOnShape):
@@ -433,9 +433,9 @@ def set_planar(self):
pl = Part.Plane(p0, p1, p1 + view_dir)
for o in markers:
if isinstance(o.snap_shape, Part.Vertex):
- FreeCAD.Console.PrintMessage("Snapped to Vertex\n")
+ FreeCAD.Console.PrintMessage(translate("Log", "Snapped to Vertex\n"))
elif isinstance(o.snap_shape, Part.Edge):
- FreeCAD.Console.PrintMessage("Snapped to Edge\n")
+ FreeCAD.Console.PrintMessage(translate("Log", "Snapped to Edge\n"))
c = o.snap_shape.Curve
pts = pl.intersect(c)[0]
new_pts = list()
@@ -451,7 +451,7 @@ def set_planar(self):
new_pts.append(new)
o.points = new_pts
elif isinstance(o.snap_shape, Part.Face):
- FreeCAD.Console.PrintMessage("Snapped to Face\n")
+ FreeCAD.Console.PrintMessage(translate("Log", "Snapped to Face\n"))
s = o.snap_shape.Surface
cvs = pl.intersect(s)
new_pts = list()
@@ -468,7 +468,7 @@ def set_planar(self):
new_pts.append(new)
o.points = new_pts
else:
- FreeCAD.Console.PrintMessage("Not snapped\n")
+ FreeCAD.Console.PrintMessage(translate("Log", "Not snapped\n"))
new_pts = list()
for ip in o.points:
iv = FreeCAD.Vector(ip[0], ip[1], ip[2])
@@ -489,7 +489,7 @@ def subdivide(self):
pts.append(o.markers[0])
if o in self.root.selected_objects:
idx = self.lines.index(o)
- FreeCAD.Console.PrintMessage("Subdividing line #{}\n".format(idx))
+ FreeCAD.Console.PrintMessage(translate("Log", "Subdividing line #{}\n")).format(idx)
p1 = o.markers[0].points[0]
p2 = o.markers[1].points[0]
par1 = self.curve.parameter(FreeCAD.Vector(p1))
diff --git a/freecad/Curves/property_editor.py b/freecad/Curves/property_editor.py
index 6c18048..eb9ca09 100644
--- a/freecad/Curves/property_editor.py
+++ b/freecad/Curves/property_editor.py
@@ -69,7 +69,7 @@ def add_layout(self,name):
self.widget.layout.addLayout(g)
return(g)
else:
- FreeCAD.Console.PrintError("VPEditor has no widget !\n")
+ FreeCAD.Console.PrintError(translate("Log", "VPEditor has no widget !\n"))
def add_propeditor(self,editor,group):
"""add a property editor widget"""
group.addWidget(editor)
@@ -105,14 +105,14 @@ def reject(self):
self.quit()
@Slot()
def quit(self):
- FreeCAD.Console.PrintMessage("VPEditor.Quit() \n")
+ FreeCAD.Console.PrintMessage(translate("Log", "VPEditor.Quit() \n"))
self.widget.close()
try:
self.comboview.removeTab(self.tabIndex)
self.comboview.setCurrentIndex(0)
FreeCADGui.ActiveDocument.resetEdit()
except:
- FreeCAD.Console.PrintError("Failed to remove from ComboView\n")
+ FreeCAD.Console.PrintError(translate("Log", "Failed to remove from ComboView\n"))
class VectorListWidget(QTableWidget):
def __init__(self, fp=None, prop=None, parent=None):
diff --git a/freecad/Curves/resources/translations/Curves.ts b/freecad/Curves/resources/translations/Curves.ts
new file mode 100644
index 0000000..af23d6b
--- /dev/null
+++ b/freecad/Curves/resources/translations/Curves.ts
@@ -0,0 +1,3163 @@
+
+
+
+
+ App::Property
+
+
+
+ Edge
+
+
+
+
+ Tool target
+
+
+
+
+ Discretization Method
+
+
+
+
+ Number of edge points
+
+
+
+
+ Distance between edge points
+
+
+
+
+ Distance for deflection Algorithm
+
+
+
+
+ Angular value for Angular-Curvature Algorithm
+
+
+
+
+ Curvature value for Angular-Curvature Algorithm
+
+
+
+
+ Minimum Number of points
+
+
+
+
+ Start parameter
+
+
+
+
+ End parameter
+
+
+
+
+
+
+ Points
+
+
+
+
+
+ Normalized parameters list
+
+
+
+
+ Object on which the analysis is performed
+
+
+
+
+ Anaysis direction
+
+
+
+
+ Positive draft angle
+
+
+
+
+ Negative draft angle
+
+
+
+
+ Positive draft tolerance
+
+
+
+
+ Negative draft tolerance
+
+
+
+
+ Color of the positive in-draft area
+
+
+
+
+ Color of the positive tolerance area
+
+
+
+
+ Color of the positive out-of-draft area
+
+
+
+
+ Color of the negative in-draft area
+
+
+
+
+ Color of the negative tolerance area
+
+
+
+
+ Color of the negative out-of-draft area
+
+
+
+
+
+ Amount of shading on the analysis overlay
+
+
+
+
+
+
+ Input face
+
+
+
+
+ Size of the map in the U direction
+
+
+
+
+ Size of the map in the V direction
+
+
+
+
+ Add the bounding box of the face
+
+
+
+
+ The conical face to flatten
+
+
+
+
+ Unroll the face in place
+
+
+
+
+ Size of the underlying surface
+
+
+
+
+ SourceObjects
+
+
+
+
+ SourceShapes
+
+
+
+
+ Number of orthogonal samples
+
+
+
+
+ Smoothing factor on curve start
+
+
+
+
+ Smoothing factor on curve end
+
+
+
+
+ Projection method (1,2,3,4)
+
+
+
+
+
+ 3D tolerance
+
+
+
+
+
+ Parametric tolerance
+
+
+
+
+
+ Number of turns
+
+
+
+
+ Thread lead (-1 for auto)
+
+
+
+
+ Allow rational bsplines
+
+
+
+
+ Create a solid shape
+
+
+
+
+ IsoCurve parameter
+
+
+
+
+ Number of IsoCurve in U direction
+
+
+
+
+ Number of IsoCurve in V direction
+
+
+
+
+ Number of IsoCurve
+
+
+
+
+ Curve Orientation
+
+
+
+
+ List of edges to join
+
+
+
+
+ Join all the edges of this base object
+
+
+
+
+
+
+ Tolerance
+
+
+
+
+ Break on sharp corners
+
+
+
+
+ Force connection of edges
+
+
+
+
+ Force closed curve
+
+
+
+
+ Reverse the output curve
+
+
+
+
+ Set the start point of closed curve
+
+
+
+
+
+ Source object
+
+
+
+
+ Direction Vector
+
+
+
+
+ Number of samples around object
+
+
+
+
+ Edge 1
+
+
+
+
+ Edge 2
+
+
+
+
+ Location on first edge
+
+
+
+
+
+ Reverse Edge
+
+
+
+
+
+
+
+ Scale of blend curve
+
+
+
+
+
+
+
+ Continuity
+
+
+
+
+ Location on second edge
+
+
+
+
+ Poles of the Bezier curve
+
+
+
+
+
+
+ Output type
+
+
+
+
+ Compute scales to get minimal curvature along curve
+
+
+
+
+ Scale (%). 0 for AutoScale
+
+
+
+
+
+
+ Number of samples
+
+
+
+
+ Number of surface samples
+
+
+
+
+ Surface Comb Orientation
+
+
+
+
+ CombPoints
+
+
+
+
+ Shape of comb plot
+
+
+
+
+ Color of the curvature curve
+
+
+
+
+ Color of the curvature comb
+
+
+
+
+ List of constraint objects
+
+
+
+
+ Plate degree
+
+
+
+
+ Number of iterations
+
+
+
+
+ 2D Tolerance
+
+
+
+
+ 3D Tolerance
+
+
+
+
+ Angular Tolerance
+
+
+
+
+ Curvature Tolerance
+
+
+
+
+ Anisotropie
+
+
+
+
+ Max degree of Bspline approximation
+
+
+
+
+ Max Number of surface segments
+
+
+
+
+ Max Distance to plate surface
+
+
+
+
+ 3D Tolerance of Bspline approximation
+
+
+
+
+ Criterion Order
+
+
+
+
+ Desired continuity of the surface
+
+
+
+
+ Enlarge Coefficient
+
+
+
+
+ First support edge
+
+
+
+
+ Second support edge
+
+
+
+
+ Parameter on first edge
+
+
+
+
+ Parameter on second edge
+
+
+
+
+ Main axis of the sketch
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip
+
+
+
+
+ Individual faces
+
+
+
+
+ View position
+
+
+
+
+ View direction
+
+
+
+
+ Up direction
+
+
+
+
+ Remove duplicate edges
+
+
+
+
+ Number of edge samples
+
+
+
+
+ CleaningTolerance for duplicate detection
+
+
+
+
+ Isoparametric lines
+
+
+
+
+ Outline silhouette lines
+
+
+
+
+ smooth edge of G1-continuity between two surfaces
+
+
+
+
+ sewn edge of CN-continuity on one surface
+
+
+
+
+ sharp edge (of C0-continuity)
+
+
+
+
+ Generate the visible lines, or the hidden lines
+
+
+
+
+ Output on-shape 3D lines
+
+
+
+
+ Track camera movements
+
+
+
+
+ The list of profiles to sweep
+
+
+
+
+ The sweep path
+
+
+
+
+ Face support of the sweep path
+
+
+
+
+ Trim the sweep shape
+
+
+
+
+ Add profiles to the sweep shape
+
+
+
+
+ Number of extra profiles
+
+
+
+
+ Build a smooth top with extra profiles
+
+
+
+
+ Input Sketch
+
+
+
+
+ Additional objects that will be mapped on surface
+
+
+
+
+ Make faces from closed wires
+
+
+
+
+ Add extrusion faces
+
+
+
+
+ Offset distance of mapped sketch
+
+
+
+
+ Extrusion thickness
+
+
+
+
+ Reverse U direction
+
+
+
+
+ Reverse V direction
+
+
+
+
+ Swap U and V directions
+
+
+
+
+ include construction geometry in sketch bounds
+
+
+
+
+ Analysis Direction
+
+
+
+
+ Analysis Mode
+
+
+
+
+ Fix analysis direction to global coordinate system
+
+
+
+
+ Number of stripes (Zebra, Rainbow)
+
+
+
+
+ Relative width of stripes (Zebra)
+
+
+
+
+ First color (Zebra, Rainbow, Isophote)
+
+
+
+
+ Second color (Zebra, Rainbow, Isophote)
+
+
+
+
+ Start angle of the rainbow
+
+
+
+
+ End angle of the rainbow
+
+
+
+
+ Angles of isophote curves
+
+
+
+
+ Angular tolerance of isophote curves
+
+
+
+
+ Birail object
+
+
+
+
+ List of profiles
+
+
+
+
+ Blending method
+
+
+
+
+ Parametrization of interpolating curves
+
+
+
+
+
+
+ Profile Samples
+
+
+
+
+ Extend to rail limits
+
+
+
+
+ Shape
+
+
+
+
+ Picked point in parametric space of the face (u,v,0)
+
+
+
+
+ Trimming curve
+
+
+
+
+ Trimming Vector
+
+
+
+
+ Trimming direction
+
+
+
+
+ The object that will be truncated or extended
+
+
+
+
+ The planar object that cuts the Source object
+
+
+
+
+ The distance to truncate (if negative) or extend (if positive)
+
+
+
+
+ Refine shape (clean up redundant edges)
+
+
+
+
+ Reverse cutter plane normal
+
+
+
+
+ Object containing the points to approximate
+
+
+
+
+ Clamp endpoints
+
+
+
+
+ Force a closed curve
+
+
+
+
+
+ Minimum degree of the curve
+
+
+
+
+
+ Maximum degree of the curve
+
+
+
+
+
+ Approximation tolerance
+
+
+
+
+
+ Desired continuity of the curve
+
+
+
+
+ Approximation method
+
+
+
+
+
+
+ Parametrization type
+
+
+
+
+ Weight of curve length for smoothing algorithm
+
+
+
+
+ Weight of curve curvature for smoothing algorithm
+
+
+
+
+ Weight of curve torsion for smoothing algorithm
+
+
+
+
+ Index of first point
+
+
+
+
+ Index of last point (-1 to ignore)
+
+
+
+
+ For closed curves, allows to choose the location of the join point
+
+
+
+
+ Use approximation
+
+
+
+
+ Proxy object of the approximation extension
+
+
+
+
+ Faces to join
+
+
+
+
+ Number of samples to generate each surface
+
+
+
+
+ Fuse the 3 solids together
+
+
+
+
+ Continuity order G... with shape 1
+
+
+
+
+ Continuity order G... with shape 2
+
+
+
+
+
+ Compute scales to get regular poles, or minimal curvature
+
+
+
+
+
+ Number of samples for auto scaling
+
+
+
+
+ Scale values along face 1
+
+
+
+
+ Scale values along face 2
+
+
+
+
+
+ Status of the created shape
+
+
+
+
+ First edge
+
+
+
+
+ Second edge
+
+
+
+
+
+ Placement
+
+
+
+
+ Edge Samples
+
+
+
+
+ Untwist surface
+
+
+
+
+ Variable scale 1: list of vectors(parameter, scale1, 0)
+
+
+
+
+ Variable scale 2: list of vectors(parameter, scale2, 0)
+
+
+
+
+ Edges and support faces
+
+
+
+
+ Number of samples to generate surface
+
+
+
+
+ Continuity level with face of edge 1
+
+
+
+
+ Continuity level with face of edge 2
+
+
+
+
+ Scale values along edge 1
+
+
+
+
+ Scale values along edge 2
+
+
+
+
+ Spring Length
+
+
+
+
+ Diameter of the spring wire
+
+
+
+
+ Diameter of the spring
+
+
+
+
+ Flatness of spring extremities from 0 to 4
+
+
+
+
+ Output a wire shape
+
+
+
+
+ Left hand if true
+
+
+
+
+ The list of seam edges to check
+
+
+
+
+ Number of test samples on edge
+
+
+
+
+ Number of test lines on each sample
+
+
+
+
+ Continuity tolerance
+
+
+
+
+ Input edge to extend
+
+
+
+
+
+ Output shape
+
+
+
+
+ Start Extension Length
+
+
+
+
+ Start Extension type
+
+
+
+
+ End Extension Length
+
+
+
+
+ End Extension type
+
+
+
+
+ Input edge
+
+
+
+
+ Support face
+
+
+
+
+ Reverse tangent
+
+
+
+
+ Reverse normal
+
+
+
+
+ Reverse binormal
+
+
+
+
+ Width of the output face
+
+
+
+
+ Face symmetric across curve
+
+
+
+
+ Close the curve
+
+
+
+
+ Reverse the parametric orientation of the curve
+
+
+
+
+ Curve network
+
+
+
+
+ Max Number of control points
+
+
+
+
+ Number of samples in U direction
+
+
+
+
+ Number of samples in V direction
+
+
+
+
+ Flip surface normal
+
+
+
+
+ Constraint shapes
+
+
+
+
+ Parametrization factor
+
+
+
+
+ Periodic curve
+
+
+
+
+ Data list
+
+
+
+
+ Tangents list
+
+
+
+
+ Tangent flags
+
+
+
+
+ Types of interpolated points
+
+
+
+
+ Linear segment flags
+
+
+
+
+ Size of a grid quadrant
+
+
+
+
+ Size of subdivisions
+
+
+
+
+ XY plane attenuation
+
+
+
+
+ XZ plane attenuation
+
+
+
+
+ YZ plane attenuation
+
+
+
+
+ XY plane max visibility
+
+
+
+
+ XZ plane max visibility
+
+
+
+
+ YZ plane max visibility
+
+
+
+
+ Grid Color
+
+
+
+
+ Source object that provides points to interpolate
+
+
+
+
+ Point list to interpolate
+
+
+
+
+ Set the curve closed
+
+
+
+
+ Interpolation tolerance
+
+
+
+
+ User specified tangents
+
+
+
+
+ interpolate 3 aligned points with a line
+
+
+
+
+ interpolate with a degree 1 polygonal curve
+
+
+
+
+
+ Offset the start index of the point list
+
+
+
+
+ outputs a wire or a single edge
+
+
+
+
+ Parameters of interpolated points
+
+
+
+
+ Tangents at interpolated points
+
+
+
+
+ Activation flag of tangents
+
+
+
+
+ Face support of the spiral
+
+
+
+
+ Nb of turns between 2 points, in U direction
+
+
+
+
+ Nb of turns between 2 points, in V direction
+
+
+
+
+ First Vertex
+
+
+
+
+ Second Vertex
+
+
+
+
+ First shape
+
+
+
+
+ Second shape
+
+
+
+
+ Projection direction of the first shape.
+If vector is null, shape's placement is used.
+
+
+
+
+ Projection direction of the second shape.
+If vector is null, shape's placement is used.
+
+
+
+
+ Build ruled surfaces between Shape1 and resulting Mixed-Curve
+
+
+
+
+ Build ruled surfaces between Shape2 and resulting Mixed-Curve
+
+
+
+
+ Objects to loft
+
+
+
+
+ Ruled Loft
+
+
+
+
+ Close loft
+
+
+
+
+ Max Bspline degree
+
+
+
+
+ List of faces to build the solid
+
+
+
+
+ If the output shape in not a solid, this will output the open edges
+
+
+
+
+ Sweep path
+
+
+
+
+ Profiles that are swept along spine
+
+
+
+
+ Shape of the ShapeSupport mode
+
+
+
+
+ Auxiliary spine
+
+
+
+
+ PipeShell mode
+
+
+
+
+ Make solid object
+
+
+
+
+ Maximum degree of the generated surface
+
+
+
+
+ Maximum number of segments of the generated surface
+
+
+
+
+ Number of samples for preview
+
+
+
+
+ Tolerance 3D
+
+
+
+
+ Tolerance boundary
+
+
+
+
+ Tolerance angular
+
+
+
+
+ Direction of the Binormal and FixedTrihedron modes
+
+
+
+
+ Location of the FixedTrihedron mode
+
+
+
+
+ Corrected Frenet
+
+
+
+
+ Curvilinear equivalence
+
+
+
+
+ Type of contact to auxiliary spine
+
+
+
+
+
+ SubShapes of the profile
+
+
+
+
+ source object of the profile
+
+
+
+
+
+
+
+ Vertex location on spine
+
+
+
+
+ Translate profile to contact spine
+
+
+
+
+ Rotate profile to be orthogonal to spine
+
+
+
+
+ Initial Face
+
+
+
+
+ Option list
+
+
+
+
+ Segmenting direction
+
+
+
+
+ Splitting parameters in U direction
+
+
+
+
+ Splitting parameters in V direction
+
+
+
+
+ Split the U parameter range in the given number of segments
+
+
+
+
+ Split the V parameter range in the given number of segments
+
+
+
+
+ Object generating normalized parameters in U direction
+
+
+
+
+ Object generating normalized parameters in V direction
+
+
+
+
+ Edge to split
+
+
+
+
+ List of splitting locations
+% and units are allowed
+Negative values are computed from edge end
+
+
+
+
+ Number of equal segments
+
+
+
+
+ List of objects that cut the curve
+
+
+
+
+ Create a split point at nearest of each vertex of the cutting objects
+
+
+
+
+ Expression-ready distance value
+
+
+
+
+ Rebuild and output the complete shape
+
+
+
+
+ CurveEditor
+
+
+ Curve Editor
+
+
+
+
+ Curve Type :
+
+
+
+
+ Bezier
+
+
+
+
+ Degree
+
+
+
+
+ OK
+
+
+
+
+ Cancel
+
+
+
+
+ Curves_AdjacentFaces
+
+
+ Select Adjacent faces
+
+
+
+
+ Select the Adjacent faces of the selected subshape
+
+
+
+
+ Select a face or an edge in the 3D View, activate tool
+and all the faces that touch it will be added to the selection.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_Approximate
+
+
+ Approximate
+
+
+
+
+ Approximate points to NURBS curve or surface
+
+
+
+
+ Curves_BlendSolid
+
+
+ BlendSolid
+
+
+
+
+ Create a solid between two faces with some continuity with their support shapes
+
+
+
+
+ Select a face on each of the two solids to blend, in the 3D View.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_BlendSurf2
+
+
+ BlendSurface
+
+
+
+
+ Create a surface between two edges with some continuity with their support faces
+
+
+
+
+ You must select 4 subshapes in the 3D View :
+- EDGE1 on FACE1
+- EDGE2 on FACE2
+
+
+
+
+ Usage
+
+
+
+
+ Curves_BsplineToConsole
+
+
+ Creates a python script to build the selected BSpline or Bezier geometries.
+
+
+
+
+ Select some Bezier or BSpline curves or surfaces in the 3D View and activate the tool.
+The selected curves or surfaces will be re-created with commands in the python console.
+
+
+
+
+ BSpline to Console
+
+
+
+
+ Usage
+
+
+
+
+ Curves_CompressionSpring
+
+
+ Compression Spring
+
+
+
+
+ Parametric Compression Spring
+
+
+
+
+ Curves_CurveOnSurface
+
+
+ CurveOnSurface
+
+
+
+
+ Create a curve on surface object
+
+
+
+
+ Curves_Discretize
+
+
+ Discretize
+
+
+
+
+ Discretize an edge or a wire.
+
+
+
+
+ Select an edge in the 3D View
+Activate tool
+It will generate some points along the edge, following various methods
+
+
+
+
+ Usage
+
+
+
+
+ Curves_DraftAnalysis
+
+
+ Draft Analysis
+
+
+
+
+ Create a colored overlay on an object to visualize draft angles.
+Tool options are in the View tab.
+Mouse clics in the colored areas print measured draft angle in the Report View.
+
+
+
+
+ Curves_EditableSpline
+
+
+ Freehand BSpline
+
+
+
+
+ Creates an freehand BSpline curve
+
+
+
+
+ *** Interpolation curve control keys :
+
+ a - Select all / Deselect
+ i - Insert point in selected segments
+ t - Set / unset tangent (view direction)
+ p - Align selected objects
+ s - Snap points on shape / Unsnap
+ l - Set/unset a linear interpolation
+ x,y,z - Axis constraints during grab
+ q - Apply changes and quit editing
+
+
+
+
+ Usage
+
+
+
+
+ Curves_ExtendCurve
+
+
+ Curve extend
+
+
+
+
+ Extend an edge by a given distance.
+
+
+
+
+ Select an edge in the 3D View, and activate tool.
+Edge can be extended at each end, by a given distance.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_ExtractSubshape
+
+
+ Extract subshape
+
+
+
+
+ Make a non-parametric copy of selected subshapes.
+Same as Part_ElementCopy
+
+
+
+
+ Curves_FlattenFace
+
+
+ Flatten face
+
+
+
+
+ Creates a flat developed face from conical and cylindrical faces
+
+
+
+
+ You must select a conical or cylindrical face in the 3D View.
+InPlace property puts the unrolled face tangent to the source face (InPlace = True)
+or in the XY plane (InPlace = False)
+
+
+
+
+ Usage
+
+
+
+
+ Curves_GeometryInfo
+
+
+ GeomInfo
+
+
+
+
+ Display geometry information about selected shape
+
+
+
+
+ While active, this tool displays information about the geometry of an edge or face.
+It displays poles, knots and weights of Bezier and BSpline curves and surfaces in the 3D View.
+
+
+
+
+ Curves_GordonSurface
+
+
+ Parametric Gordon surface
+
+
+
+
+ Creates a surface that skins a network of curves.
+
+
+
+
+ Curves_Interpolate
+
+
+ Interpolate
+
+
+
+
+ Interpolate a set of points.
+
+
+
+
+ Curves_IsoCurve
+
+
+ IsoCurve
+
+
+
+
+ IsoCurve: Create an IsoCurve from a face
+
+
+
+
+ Curves_JoinCurve
+
+
+ joinCurves
+
+
+
+
+ Joins the selected edges into a BSpline Curve
+
+
+
+
+ Select the edges to join in the 3D View, or select an object containing multiple edges in the Tree View.
+Activate the tool.
+The output is a single BSpline curve joining all selected edges.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_Line
+
+
+ Parametric line
+
+
+
+
+ Parametric line between two vertexes.
+
+
+
+
+ Select 2 vertexes in the 3D View and activate the tool.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_MixedCurve
+
+
+ Mixed curve
+
+
+
+
+ Builds a 3D curve as the intersection of 2 projected curves.
+
+
+
+
+ Select two objects or shapes, and activate tool.
+The camera direction is saved during each shape selection, and will be used as projection direction.
+Set these directions to (0,0,0) to use the placement of each shape as projection direction.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_MultiLoft
+
+
+ MultiLoft
+
+
+
+
+ Loft profile objects made of multiple faces in parallel
+
+
+
+
+ Curves_ObjectsToConsole
+
+
+ Objects to Console
+
+
+
+
+ Give access to the selected objects in the python console.
+
+
+
+
+ Select some objects in the TreeView, or in the 3D View, and activate tool.
+Some variables will be created in the python console, to access the selection.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_ParametricBlendCurve
+
+
+ Blend curve
+
+
+
+
+ Blend curve between two edges. Double-clic object to enable/disable freehand mouse editing.
+
+
+
+
+ Curves_ParametricComb
+
+
+ Comb plot
+
+
+
+
+ Creates a parametric Comb plot on selected edges
+
+
+
+
+ Curves_ParametricSolid
+
+
+ Parametric solid
+
+
+
+
+ Make a parametric solid from selected faces.
+
+
+
+
+ Select some faces in the 3D View, or select objects in the Tree View.
+Activate tool.
+It will try to build a solid from selected faces.
+If not possible, it falls back to a shell, then to a compound.
+The ShapeStatus property (and the color of the icon) give the type of shape.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_PasteSVG
+
+
+ Paste SVG
+
+
+
+
+ Paste the SVG content of the clipboard
+
+
+
+
+ When working in parallel with FreeCAD and a SVG editor (Inkscape),
+copy (CTRL-C) an object in the SVG editor, switch to FreeCAD and activate tool.
+This will import the SVG content of the clipboard into the active FreeCAD document.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_Pipeshell
+
+
+ Pipeshell
+
+
+
+
+ Creates a PipeShell sweep object
+
+
+
+
+ Curves_PipeshellProfile
+
+
+ Pipeshell profile
+
+
+
+
+ Creates a Profile object for PipeShell
+
+
+
+
+ Curves_ProfileSupport
+
+
+ Profile Support
+
+
+
+
+ Creates a support shape between two rails
+
+
+
+
+ Curves_ProfileSupportPlane
+
+
+ Profile support plane
+
+
+
+
+ Creates a support plane for sketches
+
+
+
+
+ Curves_ReflectLines
+
+
+ Reflect Lines
+
+
+
+
+ Creates the reflect lines on a shape, according to a view direction
+
+
+
+
+ Select an object and activate tool.
+This will create reflect lines according to the current view direction.
+If selected object is a ReflectLines object, the view direction will be updated to the current camera direction.
+If property OnShape is True, the lines will be ON the input shape (ViewPos and UpDir properties won't be used).
+Otherwise, lines will be on the XY plane.
+If view property TrackCam is True, the view direction will keep updating upon camera movements.
+
+
+
+
+
+ Usage
+
+
+
+
+ Curves_RotationSweep
+
+
+ Rotation Sweep
+
+
+
+
+ Sweep some profiles along a path, and around a point
+
+
+
+
+ Select a sweep path and some profiles in the 3D View.
+If TrimPath is False, the Sweep surface will be extrapolated to fit the whole path.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_SegmentSurface
+
+
+ Segment surface
+
+
+
+
+ Segment a surface on isocurves
+
+
+
+
+ Select a face in the 3D view and activate tool.
+The face will be converted to a BSpline surface.
+In Auto mode, the surface will be segmented along isocurves of highest multiplicity.
+In Custom mode, it will be segmented along isocurves of specified parameters.
+These parameters can be provided by an external object that have a NormalizedParameters property,
+like the Discretize, or the SplitCurve tools.
+
+
+
+
+ Usage
+
+
+
+
+ Curves_SketchOnSurface
+
+
+ Sketch on surface
+
+
+
+
+ Map a sketch on a surface
+
+
+
+
+ Curves_SplitCurve
+
+
+ Split curve
+
+
+
+
+ Splits the selected edge
+
+
+
+
+ Select an edge in the 3D View, or an object containing a wire in the Tree View
+Activate Tool
+The selected edges (or wire) will be cut at the specified location.
+The split locations can be given as real edge parameter, absolute distance(mm) or relative distance (%)
+The split locations can be set by proximity to cutting objects.
+Double-click in Tree-View to toggle Freehand editor in 3D View.
+
+
+
+
+
+ Usage
+
+
+
+
+ Curves_SurfaceAnalysis
+
+
+ Surface Analysis
+
+
+
+
+ Doc
+
+
+
+
+ Curves_SweepToRails
+
+
+ Sweep2Rails
+
+
+
+
+ Sweep profiles on 2 rails
+
+
+
+
+ Curves_Trim
+
+
+ Trim face
+
+
+
+
+ Trim a face with a projected curve
+
+
+
+
+ Curves_TruncateExtendCmd
+
+
+ Truncate Extend
+
+
+
+
+ Cut a shape with a plane and truncate or extend it by a given distance.
+In a PartDesign body, select only the cutting plane.
+Otherwise, select the shape to modify, and the cutting plane.
+
+
+
+
+ Curves_ZebraTool
+
+
+ ZebraTool
+
+
+
+
+ Zebra texture for surface inspection
+
+
+
+
+ Log
+
+
+
+
+
+BSplineCurve
+
+
+
+
+
+
+ Degree: {}
+
+
+
+
+
+
+ NbPoles: {}
+
+
+
+
+
+
+ Knots: {} ({:0.2f} - {:0.2f})
+
+
+
+
+
+
+ Mults: {}
+
+
+
+
+
+
+ Periodic: {}
+
+
+
+
+
+
+
+
+BSplineSurface
+************
+
+
+
+
+
+
+
+
+ Failed to compute uIso curve
+
+
+
+
+
+
+
+
+ Failed to compute vIso curve
+
+
+
+
+
+
+
+ ************
+
+
+
+
+
+
+
+ {}
+
+
+
+
+
+
+
+
+
+ Error in onDelete: {0}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {} :
+{}
+
+
+
+
+
+ InterpolationPolygon : bad input
+
+
+
+
+
+
+
+
+
+ Select something first !
+
+
+
+
+
+ Bad input :{}-{}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BlendCurve: Install 'scipy' python package for AutoScale feature
+
+
+
+
+
+
+ pointEditor : bad input
+
+
+
+
+ --- Entering Comb Edit Mode ---
+
+
+
+
+
+ Nb of samples : CTRL + Mouse Up / Down
+
+
+
+
+
+ Comb scale : SHIFT + Mouse Up / Down
+
+
+
+
+
+ --- Exiting Comb Edit Mode ---
+
+
+
+
+
+ Periodic interpolation
+
+
+
+
+
+ Ignoring duplicate last point
+
+
+
+
+
+ Duplicates point list
+
+
+
+
+
+ Parameters are not increasing
+
+
+
+
+
+ Falling back to ChordLength
+
+
+
+
+
+
+ Select 2 edges or vertexes first !
+
+
+
+
+
+ Select 2 rail objects, and optionally some profile objects
+
+
+
+
+
+ Select an object first !
+
+
+
+
+
+ Sketch on surface : failed to create solid # {}.
+
+
+
+
+
+ Please select a face (in the 3D view) or a sketch
+
+
+
+
+
+ Select a ruled surface and a list of profile edges
+
+
+
+
+
+ Select 2 rails and at least 2 profiles
+
+
+
+
+
+ Failed importing BOPTools. Fallback to Part API
+
+
+
+
+
+ Wrong Selection
+
+
+
+
+
+ Zebra already active
+
+
+
+
+
+ CurvesWB._utils.getShape: wrong property type.
+
+
+
+
+
+
+Please select an object that has at least 2 vertexes
+
+
+
+
+ BlendSolid : The two faces must have the same number of edges
+
+
+
+
+
+ BlendSurface : failed to compute scale
+{}
+
+
+
+
+
+ Select 2 CurveOnSurface objects.
+
+
+
+
+
+
+
+ failed to extract 2D geometry
+
+
+
+
+ Segmenting input curve
+
+
+
+
+
+ Select the edges to extend first !
+
+
+
+
+
+ Curve_on_surface.get_cross_curve : parameter out of range
+
+
+
+
+
+ {} is not in [{},{}]
+
+
+
+
+
+ {} - {}
+
+
+
+
+
+
+ Select an edge and its supporting face
+
+
+
+
+
+ ---
+
+
+
+
+
+
+
+ exchange UV
+
+
+
+
+
+ reverse U
+
+
+
+
+
+ reverse V
+
+
+
+
+
+ Inserting flat profile at 0.0
+
+
+
+
+
+ Inserting flat profile at 1.0
+
+
+
+
+
+ Select a curve network !
+
+
+
+
+
+ Gordon Profile : Data and DataType mismatch
+
+
+
+
+
+ execute is disabled during editing
+
+
+
+
+
+ {} : Not enough points
+
+
+
+
+
+
+ Error. Not a face
+
+
+
+
+ Direction error
+
+
+
+
+ Parameter error
+
+
+
+
+
+ No intersection points
+
+
+
+
+
+ {} broken !
+
+
+
+
+
+ Projection: several pcurves
+
+
+
+
+ pcurve should be closed
+
+
+
+
+ Select 2 objects !
+
+
+
+
+
+
+
+ U degree mismatch error
+
+
+
+
+
+
+
+ V degree mismatch error
+
+
+
+
+
+
+ U parameter ranges mismatch error
+
+
+
+
+
+
+ V parameter ranges mismatch error
+
+
+
+
+
+ U KnotSequence mismatch error
+
+
+
+
+
+ V KnotSequence mismatch error
+
+
+
+
+
+ EdgeInterpolator input must be edge or wire
+
+
+
+
+ Bad type of data
+
+
+
+
+ Argument must be list or tuple
+
+
+
+
+
+Sorry, ContactOnBorder option is currently broken in OCCT.
+
+
+
+
+
+
+Wrong direction, defaulting to +Z
+
+
+
+
+
+
+Direction has null length, defaulting to +Z
+
+
+
+
+
+
+Please set a valid Auxiliary Spine Object
+
+
+
+
+
+
+Please set a valid Spine support Object
+
+
+
+
+
+
+Failed to create shape
+
+
+
+
+
+
+You must select:
+- in the 3D view, the edges that build the sweep path
+- in the Tree view, one or more 'pipeshellProfile' objects
+
+
+
+
+
+
+Failed to build wire
+
+
+
+
+
+
+Failed to extract edges
+
+
+
+
+
+ Select at least 1 edge !
+
+
+
+
+
+ InterpoCurveEditor : bad input
+
+
+
+
+ Snapped to {}
+
+
+
+
+
+ Snapped to Vertex
+
+
+
+
+
+ Snapped to Edge
+
+
+
+
+
+ Snapped to Face
+
+
+
+
+
+ Not snapped
+
+
+
+
+
+ Subdividing line #{}
+
+
+
+
+
+ VPEditor has no widget !
+
+
+
+
+
+ VPEditor.Quit()
+
+
+
+
+
+ Failed to remove from ComboView
+
+
+
+
+
+ SplitCurve : Input shape has no wires or edges
+
+
+
+
+
+ Split curve : failed to build temp Wire !
+
+
+
+
+ Split curve : Invalid Wire !
+
+
+
+
+ Nothing selected !
+
+
+
+
+
+ This property accept only 1 subobject !
+
+
+
+
+
+ Select 1 object !
+
+
+
+
+
+ Workbench
+
+
+
+
+
+
+ Curves
+
+
+
+
+ a workbench dedicated to curves and surfaces
+
+
+
+
+
+ Surfaces
+
+
+
+
+
+ Misc.
+
+
+
+
+ Zebra
+
+
+ Zebra Stripes Tool
+
+
+
+
+ Black Stripes Width
+
+
+
+
+ Scale
+
+
+
+
+ Rotation
+
+
+
+
+ Quit
+
+
+
+
diff --git a/freecad/Curves/resources/translations/Curves_es-ES.qm b/freecad/Curves/resources/translations/Curves_es-ES.qm
new file mode 100644
index 0000000..5755a9e
Binary files /dev/null and b/freecad/Curves/resources/translations/Curves_es-ES.qm differ
diff --git a/freecad/Curves/resources/translations/Curves_es-ES.ts b/freecad/Curves/resources/translations/Curves_es-ES.ts
new file mode 100644
index 0000000..ae8d0b9
--- /dev/null
+++ b/freecad/Curves/resources/translations/Curves_es-ES.ts
@@ -0,0 +1,3227 @@
+
+
+
+
+ App::Property
+
+
+
+ Edge
+ Aristas
+
+
+
+ Tool target
+ Objetivo de herramienta
+
+
+
+ Discretization Method
+ Método de discretización
+
+
+
+ Number of edge points
+ Número de puntos de la arista
+
+
+
+ Distance between edge points
+
+
+
+
+ Distance for deflection Algorithm
+
+
+
+
+ Angular value for Angular-Curvature Algorithm
+
+
+
+
+ Curvature value for Angular-Curvature Algorithm
+
+
+
+
+ Minimum Number of points
+
+
+
+
+ Start parameter
+
+
+
+
+ End parameter
+
+
+
+
+
+
+ Points
+
+
+
+
+
+ Normalized parameters list
+
+
+
+
+ Object on which the analysis is performed
+
+
+
+
+ Anaysis direction
+
+
+
+
+ Positive draft angle
+
+
+
+
+ Negative draft angle
+
+
+
+
+ Positive draft tolerance
+
+
+
+
+ Negative draft tolerance
+
+
+
+
+ Color of the positive in-draft area
+
+
+
+
+ Color of the positive tolerance area
+
+
+
+
+ Color of the positive out-of-draft area
+
+
+
+
+ Color of the negative in-draft area
+
+
+
+
+ Color of the negative tolerance area
+
+
+
+
+ Color of the negative out-of-draft area
+
+
+
+
+
+ Amount of shading on the analysis overlay
+
+
+
+
+
+
+ Input face
+
+
+
+
+ Size of the map in the U direction
+
+
+
+
+ Size of the map in the V direction
+
+
+
+
+ Add the bounding box of the face
+
+
+
+
+ The conical face to flatten
+
+
+
+
+ Unroll the face in place
+
+
+
+
+ Size of the underlying surface
+
+
+
+
+ SourceObjects
+
+
+
+
+ SourceShapes
+
+
+
+
+ Number of orthogonal samples
+
+
+
+
+ Smoothing factor on curve start
+
+
+
+
+ Smoothing factor on curve end
+
+
+
+
+ Projection method (1,2,3,4)
+
+
+
+
+
+ 3D tolerance
+
+
+
+
+
+ Parametric tolerance
+
+
+
+
+
+ Number of turns
+
+
+
+
+ Thread lead (-1 for auto)
+
+
+
+
+ Allow rational bsplines
+
+
+
+
+ Create a solid shape
+
+
+
+
+ IsoCurve parameter
+
+
+
+
+ Number of IsoCurve in U direction
+
+
+
+
+ Number of IsoCurve in V direction
+
+
+
+
+ Number of IsoCurve
+
+
+
+
+ Curve Orientation
+
+
+
+
+ List of edges to join
+
+
+
+
+ Join all the edges of this base object
+
+
+
+
+
+
+ Tolerance
+
+
+
+
+ Break on sharp corners
+
+
+
+
+ Force connection of edges
+
+
+
+
+ Force closed curve
+
+
+
+
+ Reverse the output curve
+
+
+
+
+ Set the start point of closed curve
+
+
+
+
+
+ Source object
+
+
+
+
+ Direction Vector
+
+
+
+
+ Number of samples around object
+
+
+
+
+ Edge 1
+
+
+
+
+ Edge 2
+
+
+
+
+ Location on first edge
+
+
+
+
+
+ Reverse Edge
+
+
+
+
+
+
+
+ Scale of blend curve
+
+
+
+
+
+
+
+ Continuity
+
+
+
+
+ Location on second edge
+
+
+
+
+ Poles of the Bezier curve
+
+
+
+
+
+
+ Output type
+
+
+
+
+ Compute scales to get minimal curvature along curve
+
+
+
+
+ Scale (%). 0 for AutoScale
+
+
+
+
+
+
+ Number of samples
+
+
+
+
+ Number of surface samples
+
+
+
+
+ Surface Comb Orientation
+
+
+
+
+ CombPoints
+
+
+
+
+ Shape of comb plot
+
+
+
+
+ Color of the curvature curve
+
+
+
+
+ Color of the curvature comb
+
+
+
+
+ List of constraint objects
+
+
+
+
+ Plate degree
+
+
+
+
+ Number of iterations
+
+
+
+
+ 2D Tolerance
+
+
+
+
+ 3D Tolerance
+
+
+
+
+ Angular Tolerance
+
+
+
+
+ Curvature Tolerance
+
+
+
+
+ Anisotropie
+
+
+
+
+ Max degree of Bspline approximation
+
+
+
+
+ Max Number of surface segments
+
+
+
+
+ Max Distance to plate surface
+
+
+
+
+ 3D Tolerance of Bspline approximation
+
+
+
+
+ Criterion Order
+
+
+
+
+ Desired continuity of the surface
+
+
+
+
+ Enlarge Coefficient
+
+
+
+
+ First support edge
+
+
+
+
+ Second support edge
+
+
+
+
+ Parameter on first edge
+
+
+
+
+ Parameter on second edge
+
+
+
+
+ Main axis of the sketch
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tooltip
+
+
+
+
+ Individual faces
+
+
+
+
+ View position
+
+
+
+
+ View direction
+
+
+
+
+ Up direction
+
+
+
+
+ Remove duplicate edges
+
+
+
+
+ Number of edge samples
+
+
+
+
+ CleaningTolerance for duplicate detection
+
+
+
+
+ Isoparametric lines
+
+
+
+
+ Outline silhouette lines
+
+
+
+
+ smooth edge of G1-continuity between two surfaces
+
+
+
+
+ sewn edge of CN-continuity on one surface
+
+
+
+
+ sharp edge (of C0-continuity)
+
+
+
+
+ Generate the visible lines, or the hidden lines
+
+
+
+
+ Output on-shape 3D lines
+
+
+
+
+ Track camera movements
+
+
+
+
+ The list of profiles to sweep
+
+
+
+
+ The sweep path
+
+
+
+
+ Face support of the sweep path
+
+
+
+
+ Trim the sweep shape
+
+
+
+
+ Add profiles to the sweep shape
+
+
+
+
+ Number of extra profiles
+
+
+
+
+ Build a smooth top with extra profiles
+
+
+
+
+ Input Sketch
+
+
+
+
+ Additional objects that will be mapped on surface
+
+
+
+
+ Make faces from closed wires
+
+
+
+
+ Add extrusion faces
+
+
+
+
+ Offset distance of mapped sketch
+
+
+
+
+ Extrusion thickness
+
+
+
+
+ Reverse U direction
+
+
+
+
+ Reverse V direction
+
+
+
+
+ Swap U and V directions
+
+
+
+
+ include construction geometry in sketch bounds
+
+
+
+
+ Analysis Direction
+
+
+
+
+ Analysis Mode
+
+
+
+
+ Fix analysis direction to global coordinate system
+
+
+
+
+ Number of stripes (Zebra, Rainbow)
+
+
+
+
+ Relative width of stripes (Zebra)
+
+
+
+
+ First color (Zebra, Rainbow, Isophote)
+
+
+
+
+ Second color (Zebra, Rainbow, Isophote)
+
+
+
+
+ Start angle of the rainbow
+
+
+
+
+ End angle of the rainbow
+
+
+
+
+ Angles of isophote curves
+
+
+
+
+ Angular tolerance of isophote curves
+
+
+
+
+ Birail object
+
+
+
+
+ List of profiles
+
+
+
+
+ Blending method
+
+
+
+
+ Parametrization of interpolating curves
+
+
+
+
+
+
+ Profile Samples
+
+
+
+
+ Extend to rail limits
+
+
+
+
+ Shape
+
+
+
+
+ Picked point in parametric space of the face (u,v,0)
+
+
+
+
+ Trimming curve
+
+
+
+
+ Trimming Vector
+
+
+
+
+ Trimming direction
+
+
+
+
+ The object that will be truncated or extended
+
+
+
+
+ The planar object that cuts the Source object
+
+
+
+
+ The distance to truncate (if negative) or extend (if positive)
+
+
+
+
+ Refine shape (clean up redundant edges)
+
+
+
+
+ Reverse cutter plane normal
+
+
+
+
+ Object containing the points to approximate
+
+
+
+
+ Clamp endpoints
+
+
+
+
+ Force a closed curve
+
+
+
+
+
+ Minimum degree of the curve
+
+
+
+
+
+ Maximum degree of the curve
+
+
+
+
+
+ Approximation tolerance
+
+
+
+
+
+ Desired continuity of the curve
+
+
+
+
+ Approximation method
+
+
+
+
+
+
+ Parametrization type
+
+
+
+
+ Weight of curve length for smoothing algorithm
+
+
+
+
+ Weight of curve curvature for smoothing algorithm
+
+
+
+
+ Weight of curve torsion for smoothing algorithm
+
+
+
+
+ Index of first point
+
+
+
+
+ Index of last point (-1 to ignore)
+
+
+
+
+ For closed curves, allows to choose the location of the join point
+
+
+
+
+ Use approximation
+
+
+
+
+ Proxy object of the approximation extension
+
+
+
+
+ Faces to join
+
+
+
+
+ Number of samples to generate each surface
+
+
+
+
+ Fuse the 3 solids together
+
+
+
+
+ Continuity order G... with shape 1
+
+
+
+
+ Continuity order G... with shape 2
+
+
+
+
+
+ Compute scales to get regular poles, or minimal curvature
+
+
+
+
+
+ Number of samples for auto scaling
+
+
+
+
+ Scale values along face 1
+
+
+
+
+ Scale values along face 2
+
+
+
+
+
+ Status of the created shape
+
+
+
+
+ First edge
+
+
+
+
+ Second edge
+
+
+
+
+
+ Placement
+
+
+
+
+ Edge Samples
+
+
+
+
+ Untwist surface
+
+
+
+
+ Variable scale 1: list of vectors(parameter, scale1, 0)
+
+
+
+
+ Variable scale 2: list of vectors(parameter, scale2, 0)
+
+
+
+
+ Edges and support faces
+
+
+
+
+ Number of samples to generate surface
+
+
+
+
+ Continuity level with face of edge 1
+
+
+
+
+ Continuity level with face of edge 2
+
+
+
+
+ Scale values along edge 1
+
+
+
+
+ Scale values along edge 2
+
+
+
+
+ Spring Length
+
+
+
+
+ Diameter of the spring wire
+
+
+
+
+ Diameter of the spring
+
+
+
+
+ Flatness of spring extremities from 0 to 4
+
+
+
+
+ Output a wire shape
+
+
+
+
+ Left hand if true
+
+
+
+
+ The list of seam edges to check
+
+
+
+
+ Number of test samples on edge
+
+
+
+
+ Number of test lines on each sample
+
+
+
+
+ Continuity tolerance
+
+
+
+
+ Input edge to extend
+
+
+
+
+
+ Output shape
+
+
+
+
+ Start Extension Length
+
+
+
+
+ Start Extension type
+
+
+
+
+ End Extension Length
+
+
+
+
+ End Extension type
+
+
+
+
+ Input edge
+
+
+
+
+ Support face
+
+
+
+
+ Reverse tangent
+
+
+
+
+ Reverse normal
+
+
+
+
+ Reverse binormal
+
+
+
+
+ Width of the output face
+
+
+
+
+ Face symmetric across curve
+
+
+
+
+ Close the curve
+
+
+
+
+ Reverse the parametric orientation of the curve
+
+
+
+
+ Curve network
+
+
+
+
+ Max Number of control points
+
+
+
+
+ Number of samples in U direction
+
+
+
+
+ Number of samples in V direction
+
+
+
+
+ Flip surface normal
+
+
+
+
+ Constraint shapes
+
+
+
+
+ Parametrization factor
+
+
+
+
+ Periodic curve
+
+
+
+
+ Data list
+
+
+
+
+ Tangents list
+
+
+
+
+ Tangent flags
+
+
+
+
+ Types of interpolated points
+
+
+
+
+ Linear segment flags
+
+
+
+
+ Size of a grid quadrant
+
+
+
+
+ Size of subdivisions
+
+
+
+
+ XY plane attenuation
+
+
+
+
+ XZ plane attenuation
+
+
+
+
+ YZ plane attenuation
+
+
+
+
+ XY plane max visibility
+
+
+
+
+ XZ plane max visibility
+
+
+
+
+ YZ plane max visibility
+
+
+
+
+ Grid Color
+
+
+
+
+ Source object that provides points to interpolate
+
+
+
+
+ Point list to interpolate
+
+
+
+
+ Set the curve closed
+
+
+
+
+ Interpolation tolerance
+
+
+
+
+ User specified tangents
+
+
+
+
+ interpolate 3 aligned points with a line
+
+
+
+
+ interpolate with a degree 1 polygonal curve
+
+
+
+
+
+ Offset the start index of the point list
+
+
+
+
+ outputs a wire or a single edge
+
+
+
+
+ Parameters of interpolated points
+
+
+
+
+ Tangents at interpolated points
+
+
+
+
+ Activation flag of tangents
+
+
+
+
+ Face support of the spiral
+
+
+
+
+ Nb of turns between 2 points, in U direction
+
+
+
+
+ Nb of turns between 2 points, in V direction
+
+
+
+
+ First Vertex
+
+
+
+
+ Second Vertex
+
+
+
+
+ First shape
+
+
+
+
+ Second shape
+
+
+
+
+ Projection direction of the first shape.
+If vector is null, shape's placement is used.
+
+
+
+
+ Projection direction of the second shape.
+If vector is null, shape's placement is used.
+
+
+
+
+ Build ruled surfaces between Shape1 and resulting Mixed-Curve
+
+
+
+
+ Build ruled surfaces between Shape2 and resulting Mixed-Curve
+
+
+
+
+ Objects to loft
+
+
+
+
+ Ruled Loft
+
+
+
+
+ Close loft
+
+
+
+
+ Max Bspline degree
+
+
+
+
+ List of faces to build the solid
+
+
+
+
+ If the output shape in not a solid, this will output the open edges
+
+
+
+
+ Sweep path
+
+
+
+
+ Profiles that are swept along spine
+
+
+
+
+ Shape of the ShapeSupport mode
+
+
+
+
+ Auxiliary spine
+
+
+
+
+ PipeShell mode
+
+
+
+
+ Make solid object
+
+
+
+
+ Maximum degree of the generated surface
+
+
+
+
+ Maximum number of segments of the generated surface
+
+
+
+
+ Number of samples for preview
+
+
+
+
+ Tolerance 3D
+
+
+
+
+ Tolerance boundary
+
+
+
+
+ Tolerance angular
+
+
+
+
+ Direction of the Binormal and FixedTrihedron modes
+
+
+
+
+ Location of the FixedTrihedron mode
+
+
+
+
+ Corrected Frenet
+
+
+
+
+ Curvilinear equivalence
+
+
+
+
+ Type of contact to auxiliary spine
+
+
+
+
+
+ SubShapes of the profile
+
+
+
+
+ source object of the profile
+
+
+
+
+
+
+
+ Vertex location on spine
+
+
+
+
+ Translate profile to contact spine
+
+
+
+
+ Rotate profile to be orthogonal to spine
+
+
+
+
+ Initial Face
+
+
+
+
+ Option list
+
+
+
+
+ Segmenting direction
+
+
+
+
+ Splitting parameters in U direction
+
+
+
+
+ Splitting parameters in V direction
+
+
+
+
+ Split the U parameter range in the given number of segments
+
+
+
+
+ Split the V parameter range in the given number of segments
+
+
+
+
+ Object generating normalized parameters in U direction
+
+
+
+
+ Object generating normalized parameters in V direction
+
+
+
+
+ Edge to split
+
+
+
+
+ List of splitting locations
+% and units are allowed
+Negative values are computed from edge end
+
+
+
+
+ Number of equal segments
+
+
+
+
+ List of objects that cut the curve
+
+
+
+
+ Create a split point at nearest of each vertex of the cutting objects
+
+
+
+
+ Expression-ready distance value
+
+
+
+
+ Rebuild and output the complete shape
+
+
+
+
+ CurveEditor
+
+
+ Curve Editor
+ Editor de curva
+
+
+
+ Curve Type :
+ Tipo de curva:
+
+
+
+ Bezier
+ Bezier
+
+
+
+ Degree
+ Grado
+
+
+
+ OK
+ Aceptar
+
+
+
+ Cancel
+ Cancelar
+
+
+
+ Curves_AdjacentFaces
+
+
+ Select Adjacent faces
+ Seleccionar caras adyacentes
+
+
+
+ Select the Adjacent faces of the selected subshape
+ Seleccionar las caras adyacentes de la subforma seleccionada
+
+
+
+ Select a face or an edge in the 3D View, activate tool
+and all the faces that touch it will be added to the selection.
+ Seleccione una cara o una arista en la vista 3D, active la herramienta
+y todas las caras que la toquen serán agregadas a la selección.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_Approximate
+
+
+ Approximate
+ Aproximar
+
+
+
+ Approximate points to NURBS curve or surface
+ Aproximar puntos a curva NURBS o superficie
+
+
+
+ Curves_BlendSolid
+
+
+ BlendSolid
+ Fusionar sólido
+
+
+
+ Create a solid between two faces with some continuity with their support shapes
+ Crear un sólido entre dos caras con alguna continuidad con sus formas de soporte
+
+
+
+ Select a face on each of the two solids to blend, in the 3D View.
+ Seleccione una cara en cada uno de los dos sólidos a unir, en la vista 3D.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_BlendSurf2
+
+
+ BlendSurface
+ Fusionar superficie
+
+
+
+ Create a surface between two edges with some continuity with their support faces
+ Crear una superficie entre dos aristas con alguna continuidad con sus caras de soporte
+
+
+
+ You must select 4 subshapes in the 3D View :
+- EDGE1 on FACE1
+- EDGE2 on FACE2
+ Debe seleccionar 4 subformas en la vista 3D:
+- ARISTA1 en CARA1
+- ARISTA2 en CARA2
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_BsplineToConsole
+
+ BSpline to console
+ BSpline a consola
+
+
+
+ Creates a python script to build the selected BSpline or Bezier geometries.
+ Crear un script de Python para crear las geometrías BSpline o Bezier seleccionadas.
+
+
+
+ Select some Bezier or BSpline curves or surfaces in the 3D View and activate the tool.
+The selected curves or surfaces will be re-created with commands in the python console.
+ Seleccione algunas curvas BSpline o Bezier o superficies en la vista 3D y active la herramienta.
+Las curvas o superficies seleccionadas serán recreadas con comandos en la consola de Python.
+
+
+
+ BSpline to Console
+ BSpline a consola
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_CompressionSpring
+
+
+ Compression Spring
+ Resorte de compresión
+
+
+
+ Parametric Compression Spring
+ Resorte de compresión paramétrico
+
+
+
+ Curves_CurveOnSurface
+
+
+ CurveOnSurface
+ Curva en superficie
+
+
+
+ Create a curve on surface object
+ Crear una curva en un objeto superficie
+
+
+
+ Curves_Discretize
+
+
+ Discretize
+ Discretizar
+
+
+
+ Discretize an edge or a wire.
+ Discretizaruna arista o un alambre.
+
+
+
+ Select an edge in the 3D View
+Activate tool
+It will generate some points along the edge, following various methods
+ Seleccione una arista en la vista 3D
+Active la herramienta
+Generará algunos puntos a lo largo de la arista, siguiendo varios métodos
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_DraftAnalysis
+
+
+ Draft Analysis
+ Análisis de calado
+
+
+
+ Create a colored overlay on an object to visualize draft angles.
+Tool options are in the View tab.
+Mouse clics in the colored areas print measured draft angle in the Report View.
+ Crea una superposición de colores sobre un objeto para visualizar los ángulos de calado.
+Las opciones de la herramienta se encuentran en la pestaña Vista.
+Los clics del ratón en las áreas coloreadas imprimen el ángulo de calado medido en la vista de informe.
+
+
+
+ Curves_EditableSpline
+
+
+ Freehand BSpline
+ BSpline a mano alzada
+
+
+
+ Creates an freehand BSpline curve
+ Crear una curva BSpline a mano alzada
+
+
+
+ *** Interpolation curve control keys :
+
+ a - Select all / Deselect
+ i - Insert point in selected segments
+ t - Set / unset tangent (view direction)
+ p - Align selected objects
+ s - Snap points on shape / Unsnap
+ l - Set/unset a linear interpolation
+ x,y,z - Axis constraints during grab
+ q - Apply changes and quit editing
+ *** Teclas de control de la curva de interpolación:
+
+ a - Seleccionar/Deselecciionar todo
+ i - Insertar punto en segmentos seleccionados
+ t - Establecer tangente (dirección de vista)
+ p - Alinear los objetos seleccionados
+ s - Ajustar puntos en forma
+ l - Establecer una interpolación lineal
+ x,y,z - Restricciones de eje x, y, z durante el agarre
+ q - Aplicar cambios y dejar de editar
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_ExtendCurve
+
+
+ Curve extend
+ Extensión de curva
+
+
+
+ Extend an edge by a given distance.
+ Extender una arista por una distancia dada.
+
+
+
+ Select an edge in the 3D View, and activate tool.
+Edge can be extended at each end, by a given distance.
+ Seleccione una arista en la vista 3D y active la herramienta.
+La arista puede ser extendida en cada extremo, por una distancia dada.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_ExtractSubshape
+
+
+ Extract subshape
+ Extraer subforma
+
+
+
+ Make a non-parametric copy of selected subshapes.
+Same as Part_ElementCopy
+ Crear una copia no paramétrica de las subformas seleccionadas.
+Al igual que Part_ElementCopy
+
+
+
+ Curves_FlattenFace
+
+
+ Flatten face
+ Aplanar cara
+
+
+
+ Creates a flat developed face from conical and cylindrical faces
+ Crear una cara desarrollada plana desde caras cónicas y cilíndricas
+
+
+
+ You must select a conical or cylindrical face in the 3D View.
+InPlace property puts the unrolled face tangent to the source face (InPlace = True)
+or in the XY plane (InPlace = False)
+ Debe seleccionar una cara cónica o cilíndrica en la vista 3D.
+La propiedad InPlace pone la cara desenrrollada tangente a la cara de la superficie (InPlace = Verdadero)
+o en el plano XY (InPlace = Falso)
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_GeometryInfo
+
+
+ GeomInfo
+ Información de geometría
+
+
+
+ Display geometry information about selected shape
+ Mostrar información de geometría de la forma seleccionada
+
+
+
+ While active, this tool displays information about the geometry of an edge or face.
+It displays poles, knots and weights of Bezier and BSpline curves and surfaces in the 3D View.
+ Mientras este activo, esta herramienta muestra información acerca de la geometría de una arista o cara.
+Muestra los polos, nudos y pesos de las curvas Bezier y BSpline y superficies en la vista 3D.
+
+
+
+ Curves_GordonSurface
+
+
+ Parametric Gordon surface
+ Superficie de Gordon paramétrica
+
+
+
+ Creates a surface that skins a network of curves.
+ Crea una superficie que recubre una red de curvas.
+
+
+
+ Curves_Interpolate
+
+
+ Interpolate
+ Interpolar
+
+
+
+ Interpolate a set of points.
+ Interpolar un conjunto de puntos.
+
+
+
+ Curves_IsoCurve
+
+
+ IsoCurve
+ IsoCurva
+
+
+
+ IsoCurve: Create an IsoCurve from a face
+ Crea una isocurva a partir de una cara
+
+
+
+ Curves_JoinCurve
+
+
+ joinCurves
+ Unir curvas
+
+
+
+ Joins the selected edges into a BSpline Curve
+ Unir las aristas seleccionadas en una curva BSpline
+
+
+
+ Select the edges to join in the 3D View, or select an object containing multiple edges in the Tree View.
+Activate the tool.
+The output is a single BSpline curve joining all selected edges.
+ Seleccione las aristas a unir en la vista 3D, o seleccione un objeto que contenga varias aristas en la vista 3D.
+Active la herramienta.
+La salida es una única curva BSpline que une todas las aristas seleccionadas.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_Line
+
+
+ Parametric line
+ Línea paramétrica
+
+
+
+ Parametric line between two vertexes.
+ Línea paramétrica entre dos vértices.
+
+
+
+ Select 2 vertexes in the 3D View and activate the tool.
+ Selecciones 2 vértices en la vista 3D y active la herramienta.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_MixedCurve
+
+
+ Mixed curve
+ Curva mixta
+
+
+
+ Builds a 3D curve as the intersection of 2 projected curves.
+ Construir una curva 3D como la intersección de 2 curvas proyectadas.
+
+
+
+ Select two objects or shapes, and activate tool.
+The camera direction is saved during each shape selection, and will be used as projection direction.
+Set these directions to (0,0,0) to use the placement of each shape as projection direction.
+ Seleccione dos objetos o formas y active la herramienta.
+La dirección de la cámara es guardada durante cada selección de forma, y será usada como dirección de proyección.
+Establezca estas direcciones a (0,0,0) para usar la ubicación de cada forma como dirección de proyección.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_MultiLoft
+
+
+ MultiLoft
+ Proyección múltiple
+
+
+
+ Loft profile objects made of multiple faces in parallel
+ Objetos de perfil de proyección formados por varias caras en paralelo
+
+
+
+ Curves_ObjectsToConsole
+
+
+ Objects to Console
+ Objetos a consola
+
+
+
+ Give access to the selected objects in the python console.
+ Dar acceso a los objetos seleccionados en la consola de Python.
+
+
+
+ Select some objects in the TreeView, or in the 3D View, and activate tool.
+Some variables will be created in the python console, to access the selection.
+ Seleccione algunos objetos en la vista de árbol o en la vista 3D y active la herramienta.
+Algunas variables serán creadas en la consola de Python, para acceder a la selección.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_ParametricBlendCurve
+
+
+ Blend curve
+ Fusionar curva
+
+
+
+ Blend curve between two edges. Double-clic object to enable/disable freehand mouse editing.
+ Fusionar curva entre dos aristas. Dé doble clic en el objeto al cual habilitar/deshabilitar edición con ratón a mano alzada.
+
+
+
+ Curves_ParametricComb
+
+
+ Comb plot
+ Gráfico de peine
+
+
+
+ Creates a parametric Comb plot on selected edges
+ Crear un gráfico de peine paramétrico en las aristas seleccionadas
+
+
+
+ Curves_ParametricSolid
+
+
+ Parametric solid
+ Sólido paramétrico
+
+
+
+ Make a parametric solid from selected faces.
+ Crear un sólido paramétrico desde las caras seleccionadas.
+
+
+
+ Select some faces in the 3D View, or select objects in the Tree View.
+Activate tool.
+It will try to build a solid from selected faces.
+If not possible, it falls back to a shell, then to a compound.
+The ShapeStatus property (and the color of the icon) give the type of shape.
+ Seleccione algunas caras en la vista 3D, o seleccione objetos en la vista de árbol.
+Active herramienta.
+Intentará construir un sólido a partir de caras seleccionadas.
+Si no es posible, intenta un cascarón,sino a un compuesto.
+La propiedad ShapeStatus (y el color del icono) dan el tipo de forma.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_PasteSVG
+
+
+ Paste SVG
+ Pegar SVG
+
+
+
+ Paste the SVG content of the clipboard
+ Pegar el contenido SVG del portapapeles
+
+
+
+ When working in parallel with FreeCAD and a SVG editor (Inkscape),
+copy (CTRL-C) an object in the SVG editor, switch to FreeCAD and activate tool.
+This will import the SVG content of the clipboard into the active FreeCAD document.
+ Cuando trabaja en paralelo con FreeCAD y un editor de SVG (Inkscape),
+copie (CTRL-C) un objeto en el editor SVG, cambie a FreeCAD y active la herramienta.
+Esto importará el contenido SVG del portapapeles en el documento activo de FreeCAD.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_Pipeshell
+
+
+ Pipeshell
+ Cascarón de tubería
+
+
+
+ Creates a PipeShell sweep object
+ Crea un objeto de barrido de cascarón de tubería
+
+
+
+ Curves_PipeshellProfile
+
+
+ Pipeshell profile
+ Perfil de cascarón de tubería
+
+
+
+ Creates a Profile object for PipeShell
+ Crea un objeto de perfil para cascarón de tubería
+
+
+
+ Curves_ProfileSupport
+
+
+ Profile Support
+ Soporte de perfil
+
+
+
+ Creates a support shape between two rails
+ Crea una forma de soporte entre dos rieles
+
+
+
+ Curves_ProfileSupportPlane
+
+
+ Profile support plane
+ Plano de soporte de perfil
+
+
+
+ Creates a support plane for sketches
+ Crea un plano de soporte para los croquis
+
+
+
+ Curves_ReflectLines
+
+
+ Reflect Lines
+ Líneas de reflejo
+
+
+
+ Creates the reflect lines on a shape, according to a view direction
+ Crear las líneas de reflejo en la forma, de acuerdo a una dirección de vista
+
+
+
+ Select an object and activate tool.
+This will create reflect lines according to the current view direction.
+If selected object is a ReflectLines object, the view direction will be updated to the current camera direction.
+If property OnShape is True, the lines will be ON the input shape (ViewPos and UpDir properties won't be used).
+Otherwise, lines will be on the XY plane.
+If view property TrackCam is True, the view direction will keep updating upon camera movements.
+
+ Seleccione un objeto y active la herramienta.
+Esto creará líneas de reflejo de acuerdo con la dirección de vista actual.
+Si el objeto seleccionado es un objeto ReflectLines, la dirección de vista se actualizará a la dirección de la cámara actual.
+Si la propiedad Onshape es verdadera, las líneas estarán en la forma de entrada (no se utilizarán las propiedades de ViewPos y UpDir).
+De lo contrario, las líneas estarán en el plano XY.
+Si la propiedad de vista TrackCam es verdadera, la dirección de la vista se actualizará sobre los movimientos de la cámara.
+
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_RotationSweep
+
+
+ Rotation Sweep
+ Barrido de rotación
+
+
+
+ Sweep some profiles along a path, and around a point
+ Barrer algunos perfiles a lo largo de una trayectoria, y alrededor de un punto
+
+
+
+ Select a sweep path and some profiles in the 3D View.
+If TrimPath is False, the Sweep surface will be extrapolated to fit the whole path.
+ Seleccione una trayectoria de barrido y algunos perfiles en la vista 3D.
+Si TrimPath es falso, la superficie de barrido será extrapolada para abarcar toda la trayectoria.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_SegmentSurface
+
+
+ Segment surface
+ Segmentar superficie
+
+
+
+ Segment a surface on isocurves
+ Segmento a superficie en isocurvas
+
+
+
+ Select a face in the 3D view and activate tool.
+The face will be converted to a BSpline surface.
+In Auto mode, the surface will be segmented along isocurves of highest multiplicity.
+In Custom mode, it will be segmented along isocurves of specified parameters.
+These parameters can be provided by an external object that have a NormalizedParameters property,
+like the Discretize, or the SplitCurve tools.
+ Seleccione una cara en la vista 3D y active la herramienta.
+La cara se convertirá en una superficie de BSpline.
+En modo automático, la superficie se segmentará a lo largo de isocurvas con la mayor multiplicidad.
+En modo personalizado, se segmentará a lo largo de isocurvas de parámetros especificados.
+Estos parámetros pueden ser proporcionados por un objeto externo que tenga una propiedad NormalizedParameters,
+como Discretize o las herramientas SplitCurve.
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_SketchOnSurface
+
+
+ Sketch on surface
+ Croquis en superficie
+
+
+
+ Map a sketch on a surface
+ Mapear un croquis a una superficie
+
+
+
+ Curves_SplitCurve
+
+
+ Split curve
+ Dividir curva
+
+
+
+ Splits the selected edge
+ Dividir la arista seleccionada
+
+
+
+ Select an edge in the 3D View, or an object containing a wire in the Tree View
+Activate Tool
+The selected edges (or wire) will be cut at the specified location.
+The split locations can be given as real edge parameter, absolute distance(mm) or relative distance (%)
+The split locations can be set by proximity to cutting objects.
+Double-click in Tree-View to toggle Freehand editor in 3D View.
+
+ Seleccione una arista en la vista 3D, o un objeto que contenga un alambre en la vista de árbol
+Active la herramienta
+Las aristas seleccionadas (o alambre) será cortado en la ubiación especificada.
+Las ubicaciones divididas se pueden dar como parámetro de arista real, distancia absoluta (mm) o distancia relativa (%)
+Las ubicaciones divididas se pueden establecer por proximidad a los objetos de corte.
+Haga doble clic en la vista de árbol para alternar al editor a mano alzada en la vista 3D.
+
+
+
+
+ Usage
+ Uso
+
+
+
+ Curves_SurfaceAnalysis
+
+
+ Surface Analysis
+ Análisis de superficie
+
+
+
+ Doc
+ Doc
+
+
+
+ Curves_SweepToRails
+
+
+ Sweep2Rails
+ Barrido a rieles
+
+
+
+ Sweep profiles on 2 rails
+ Barre perfiles en rieles
+
+
+
+ Curves_Trim
+
+
+ Trim face
+ Recortar cara
+
+
+
+ Trim a face with a projected curve
+ Recortar una cara con una curva proyectada
+
+
+
+ Curves_TruncateExtendCmd
+
+
+ Truncate Extend
+ Extensión truncada
+
+
+
+ Cut a shape with a plane and truncate or extend it by a given distance.
+In a PartDesign body, select only the cutting plane.
+Otherwise, select the shape to modify, and the cutting plane.
+ Corta una forma con un plano y lo trunca o lo extiende por una distancia dada.
+En un cuerpo de PartDesign, seleccione solo el plano de corte.
+De lo contrario, seleccione la forma a modificar y el plano de corte.
+
+
+
+ Curves_ZebraTool
+
+
+ ZebraTool
+ Herramienta cebra
+
+
+
+ Zebra texture for surface inspection
+ Textura de cebra para inspección de superficie
+
+
+
+ Log
+
+
+
+
+
+BSplineCurve
+
+
+
+
+
+
+ Degree: {}
+
+ Grado: {}
+
+
+
+
+
+ NbPoles: {}
+
+
+
+
+
+
+ Knots: {} ({:0.2f} - {:0.2f})
+
+
+
+
+
+
+ Mults: {}
+
+
+
+
+
+
+ Periodic: {}
+
+
+
+
+
+
+
+
+BSplineSurface
+************
+
+
+
+
+
+
+
+
+ Failed to compute uIso curve
+
+
+
+
+
+
+
+
+ Failed to compute vIso curve
+
+
+
+
+
+
+
+ ************
+
+
+
+
+
+
+
+ {}
+
+ {}
+
+
+
+
+
+
+
+
+ Error in onDelete: {0}
+
+ Error en onDelete: {0}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {} :
+{}
+
+
+
+
+
+ InterpolationPolygon : bad input
+
+
+
+
+
+
+
+
+
+ Select something first !
+
+
+
+
+
+ Bad input :{}-{}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BlendCurve: Install 'scipy' python package for AutoScale feature
+
+
+
+
+
+
+ pointEditor : bad input
+
+
+
+
+ --- Entering Comb Edit Mode ---
+
+
+
+
+
+ Nb of samples : CTRL + Mouse Up / Down
+
+
+
+
+
+ Comb scale : SHIFT + Mouse Up / Down
+
+
+
+
+
+ --- Exiting Comb Edit Mode ---
+
+
+
+
+
+ Periodic interpolation
+
+
+
+
+
+ Ignoring duplicate last point
+
+
+
+
+
+ Duplicates point list
+
+
+
+
+
+ Parameters are not increasing
+
+
+
+
+
+ Falling back to ChordLength
+
+
+
+
+
+
+ Select 2 edges or vertexes first !
+
+
+
+
+
+ Select 2 rail objects, and optionally some profile objects
+
+
+
+
+
+ Select an object first !
+
+
+
+
+
+ Sketch on surface : failed to create solid # {}.
+
+
+
+
+
+ Please select a face (in the 3D view) or a sketch
+
+
+
+
+
+ Select a ruled surface and a list of profile edges
+
+
+
+
+
+ Select 2 rails and at least 2 profiles
+
+
+
+
+
+ Failed importing BOPTools. Fallback to Part API
+
+
+
+
+
+ Wrong Selection
+
+
+
+
+
+ Zebra already active
+
+
+
+
+
+ CurvesWB._utils.getShape: wrong property type.
+
+
+
+
+
+
+Please select an object that has at least 2 vertexes
+
+
+
+
+ BlendSolid : The two faces must have the same number of edges
+
+
+
+
+
+ BlendSurface : failed to compute scale
+{}
+
+
+
+
+
+ Select 2 CurveOnSurface objects.
+
+
+
+
+
+
+
+ failed to extract 2D geometry
+
+
+
+
+ Segmenting input curve
+
+
+
+
+
+ Select the edges to extend first !
+
+
+
+
+
+ Curve_on_surface.get_cross_curve : parameter out of range
+
+
+
+
+
+ {} is not in [{},{}]
+
+
+
+
+
+ {} - {}
+
+
+
+
+
+
+ Select an edge and its supporting face
+
+
+
+
+
+ ---
+
+
+
+
+
+
+
+ exchange UV
+
+
+
+
+
+ reverse U
+
+
+
+
+
+ reverse V
+
+
+
+
+
+ Inserting flat profile at 0.0
+
+
+
+
+
+ Inserting flat profile at 1.0
+
+
+
+
+
+ Select a curve network !
+
+
+
+
+
+ Gordon Profile : Data and DataType mismatch
+
+
+
+
+
+ execute is disabled during editing
+
+
+
+
+
+ {} : Not enough points
+
+
+
+
+
+
+ Error. Not a face
+
+
+
+
+ Direction error
+
+
+
+
+ Parameter error
+
+
+
+
+
+ No intersection points
+
+
+
+
+
+ {} broken !
+
+
+
+
+
+ Projection: several pcurves
+
+
+
+
+ pcurve should be closed
+
+
+
+
+ Select 2 objects !
+
+
+
+
+
+
+
+ U degree mismatch error
+
+
+
+
+
+
+
+ V degree mismatch error
+
+
+
+
+
+
+ U parameter ranges mismatch error
+
+
+
+
+
+
+ V parameter ranges mismatch error
+
+
+
+
+
+ U KnotSequence mismatch error
+
+
+
+
+
+ V KnotSequence mismatch error
+
+
+
+
+
+ EdgeInterpolator input must be edge or wire
+
+
+
+
+ Bad type of data
+
+
+
+
+ Argument must be list or tuple
+
+
+
+
+
+Sorry, ContactOnBorder option is currently broken in OCCT.
+
+
+
+
+
+
+Wrong direction, defaulting to +Z
+
+
+
+
+
+
+Direction has null length, defaulting to +Z
+
+
+
+
+
+
+Please set a valid Auxiliary Spine Object
+
+
+
+
+
+
+Please set a valid Spine support Object
+
+
+
+
+
+
+Failed to create shape
+
+
+
+
+
+
+You must select:
+- in the 3D view, the edges that build the sweep path
+- in the Tree view, one or more 'pipeshellProfile' objects
+
+
+
+
+
+
+Failed to build wire
+
+
+
+
+
+
+Failed to extract edges
+
+
+
+
+
+ Select at least 1 edge !
+
+
+
+
+
+ InterpoCurveEditor : bad input
+
+
+
+
+ Snapped to {}
+
+
+
+
+
+ Snapped to Vertex
+
+
+
+
+
+ Snapped to Edge
+
+
+
+
+
+ Snapped to Face
+
+
+
+
+
+ Not snapped
+
+
+
+
+
+ Subdividing line #{}
+
+
+
+
+
+ VPEditor has no widget !
+
+
+
+
+
+ VPEditor.Quit()
+
+
+
+
+
+ Failed to remove from ComboView
+
+
+
+
+
+ SplitCurve : Input shape has no wires or edges
+
+
+
+
+
+ Split curve : failed to build temp Wire !
+
+
+
+
+ Split curve : Invalid Wire !
+
+
+
+
+ Nothing selected !
+
+ ¡No hay nada seleccionado!
+
+
+
+
+ This property accept only 1 subobject !
+
+ ¡Esta propiedad sólo acepta 1 subobjeto!
+
+
+
+
+ Select 1 object !
+
+ ¡Seleccione 1 objeto!
+
+
+
+
+ Workbench
+
+
+
+
+
+
+ Curves
+ Curvas
+
+
+
+ a workbench dedicated to curves and surfaces
+ Un banco de trabajo dedicado a curvas y superficies
+
+
+
+
+ Surfaces
+ Superficies
+
+
+
+
+ Misc.
+ Misc.
+
+
+
+ Zebra
+
+
+ Zebra Stripes Tool
+ Herramienta de rayas de cebra
+
+
+
+ Black Stripes Width
+ Ancho de rayas negras
+
+
+
+ Scale
+ Escala
+
+
+
+ Rotation
+ Rotación
+
+
+
+ Quit
+ Salir
+
+
+
diff --git a/freecad/Curves/resources/translations/README.md b/freecad/Curves/resources/translations/README.md
new file mode 100644
index 0000000..1012bfe
--- /dev/null
+++ b/freecad/Curves/resources/translations/README.md
@@ -0,0 +1,116 @@
+# About translating Curves Workbench
+
+
+- [About translating Curves Workbench](#about-translating-curves-workbench)
+ - [Updating translations template file](#updating-translations-template-file)
+ - [Creating file for missing locale](#creating-file-for-missing-locale)
+ - [Using script](#using-script)
+ - [Renaming file](#renaming-file)
+ - [Translating](#translating)
+ - [Compiling translations](#compiling-translations)
+ - [Sending translations](#sending-translations)
+ - [More information](#more-information)
+
+
+> [!NOTE]
+> All commands **must** be run in `./freecad/Curves/resources/translations/` directory.
+
+> [!IMPORTANT]
+> If you want to update/release the files you need to have installed
+> `lupdate` and `lrelease` from Qt6 version. Using the versions from
+> Qt5 is not advised because they're buggy.
+
+## Updating translations template file
+
+To update the template file from source files you should use this command:
+
+```shell
+./update_translation.sh -U
+```
+
+Once done you can commit the changes and upload the new file to CrowdIn platform
+at webpage and find the **Curves** project.
+
+## Creating file for missing locale
+
+### Using script
+
+To create a file for a new language with all **Curves** translatable strings execute
+the script with `-u` flag plus your locale:
+
+```shell
+./update_translation.sh -u fr
+```
+
+### Renaming file
+
+Also you can rename new `Curves.ts` file by appending the locale code,
+for example, `Curves_fr.ts` for French and change
+
+```xml
+
+```
+
+to
+
+```xml
+
+```
+
+As of 15/10/2024 the supported locales on FreeCAD
+(according to `FreeCADGui.supportedLocales()`) are 44:
+
+```python
+{'English': 'en', 'Afrikaans': 'af', 'Arabic': 'ar', 'Basque': 'eu',
+'Belarusian': 'be', 'Bulgarian': 'bg', 'Catalan': 'ca',
+'Chinese Simplified': 'zh-CN', 'Chinese Traditional': 'zh-TW', 'Croatian': 'hr',
+'Czech': 'cs', 'Danish': 'da', 'Dutch': 'nl', 'Filipino': 'fil', 'Finnish': 'fi',
+ 'French': 'fr', 'Galician': 'gl', 'Georgian': 'ka', 'German': 'de', 'Greek': 'el',
+ 'Hungarian': 'hu', 'Indonesian': 'id', 'Italian': 'it', 'Japanese': 'ja',
+ 'Kabyle': 'kab', 'Korean': 'ko', 'Lithuanian': 'lt', 'Norwegian': 'no',
+ 'Polish': 'pl', 'Portuguese': 'pt-PT', 'Portuguese, Brazilian': 'pt-BR',
+ 'Romanian': 'ro', 'Russian': 'ru', 'Serbian': 'sr', 'Serbian, Latin': 'sr-CS',
+ 'Slovak': 'sk', 'Slovenian': 'sl', 'Spanish': 'es-ES', 'Spanish, Argentina': 'es-AR',
+'Swedish': 'sv-SE', 'Turkish': 'tr', 'Ukrainian': 'uk', 'Valencian': 'val-ES',
+'Vietnamese': 'vi'}
+```
+
+## Translating
+
+To edit your language file open your file in `Qt Linguist` from `qt5-tools`/`qt6-tools`
+package or in a text editor like `xed`, `mousepad`, `gedit`, `nano`, `vim`/`nvim`,
+`geany` etc. and translate it.
+
+Alternatively you can visit the **FreeCAD-addons** project on CrowdIn platform
+at webpage and find your language,
+once done, look for the **Curves** project.
+
+## Compiling translations
+
+To convert all `.ts` files to `.qm` files (merge) you can use this command:
+
+```shell
+./update_translation.sh -R
+```
+
+If you are a translator that wants to update only their language file
+to test it on **FreeCAD** before doing a PR you can use this command:
+
+```shell
+./update_translation.sh -r fr
+```
+
+This will update the `.qm` file for your language (French in this case).
+
+## Sending translations
+
+Now you can contribute your translated `.ts` file to **Curves** repository,
+also include the `.qm` file.
+
+
+
+## More information
+
+You can read more about translating external workbenches here:
+
+
diff --git a/freecad/Curves/resources/translations/update_translation.sh b/freecad/Curves/resources/translations/update_translation.sh
new file mode 100755
index 0000000..cc23dc3
--- /dev/null
+++ b/freecad/Curves/resources/translations/update_translation.sh
@@ -0,0 +1,168 @@
+#!/usr/bin/env bash
+
+# --------------------------------------------------------------------------------------------------
+#
+# Create, update and release translation files.
+#
+# Supported locales on FreeCAD <2024-12-08, FreeCADGui.supportedLocales(), total=44>:
+# {'English': 'en', 'Afrikaans': 'af', 'Arabic': 'ar', 'Basque': 'eu', 'Belarusian': 'be',
+# 'Bulgarian': 'bg', 'Catalan': 'ca', 'Chinese Simplified': 'zh-CN',
+# 'Chinese Traditional': 'zh-TW', 'Croatian': 'hr', 'Czech': 'cs', 'Danish': 'da',
+# 'Dutch': 'nl', 'Filipino': 'fil', 'Finnish': 'fi', 'French': 'fr', 'Galician': 'gl',
+# 'Georgian': 'ka', 'German': 'de', 'Greek': 'el', 'Hungarian': 'hu', 'Indonesian': 'id',
+# 'Italian': 'it', 'Japanese': 'ja', 'Kabyle': 'kab', 'Korean': 'ko', 'Lithuanian': 'lt',
+# 'Norwegian': 'no', 'Polish': 'pl', 'Portuguese': 'pt-PT', 'Portuguese, Brazilian': 'pt-BR',
+# 'Romanian': 'ro', 'Russian': 'ru', 'Serbian': 'sr', 'Serbian, Latin': 'sr-CS', 'Slovak': 'sk',
+# 'Slovenian': 'sl', 'Spanish': 'es-ES', 'Spanish, Argentina': 'es-AR', 'Swedish': 'sv-SE',
+# 'Turkish': 'tr', 'Ukrainian': 'uk', 'Valencian': 'val-ES', 'Vietnamese': 'vi'}
+#
+# NOTE: PREPARATION
+# - Install Qt tools
+# Debian-based (e.g., Ubuntu): $ sudo apt-get install qttools5-dev-tools pyqt6-dev-tools
+# Fedora-based: $ sudo dnf install qt6-linguist qt6-devel
+# Arch-based: $ sudo pacman -S qt6-tools python-pyqt6
+# - Make the script executable
+# $ chmod +x update_translation.sh
+# - The script has to be executed within the `freecad/Curves/resources/translations` directory.
+# Executing the script with no flags invokes the help.
+# $ ./update_translation.sh
+#
+# NOTE: WORKFLOW TRANSLATOR (LOCAL)
+# - Execute the script passing the `-u` flag plus locale code as argument
+# Only update the file(s) you're translating!
+# $ ./update_translation.sh -u es-ES
+# - Do the translation via Qt Linguist and use `File>Release`
+# - If releasing with the script execute it passing the `-r` flag
+# plus locale code as argument
+# $ ./update_translation.sh -r es-ES
+#
+# NOTE: WORKFLOW MAINTAINER (CROWDIN)
+# - Execute the script passing the '-U' flag
+# $ ./update_translation.sh -U
+# - Once done, download the translated files, copy them to `freecad/Curves/resources/translations`
+# - Upload the updated file to CrowdIn and wait for translators do their thing ;-)
+# and release all the files to update the changes
+# $ ./update_translation.sh -R
+#
+# --------------------------------------------------------------------------------------------------
+
+supported_locales=(
+ "en" "af" "ar" "eu" "be" "bg" "ca" "zh-CN" "zh-TW" "hr"
+ "cs" "da" "nl" "fil" "fi" "fr" "gl" "ka" "de" "el"
+ "hu" "id" "it" "ja" "kab" "ko" "lt" "no" "pl" "pt-PT"
+ "pt-BR" "ro" "ru" "sr" "sr-CS" "sk" "sl" "es-ES" "es-AR" "sv-SE"
+ "tr" "uk" "val-ES" "vi"
+)
+
+is_locale_supported() {
+ local locale="$1"
+ for supported_locale in "${supported_locales[@]}"; do
+ [ "$supported_locale" == "$locale" ] && return 0
+ done
+ return 1
+}
+
+update_locale() {
+ local locale="$1"
+ local u=${locale:+_} # Conditional underscore
+ FILES="../../*.py ../../Blending/*.py \
+ ../../DraftAnalysis_shaders/*.py \
+ ../../Gui/*.ui"
+
+ # NOTE: Execute the right command depending on:
+ # - if it's a locale file or the main, agnostic one
+ [ ! -f "${WB}${u}${locale}.ts" ] && action="Creating" || action="Updating"
+ echo -e "\033[1;34m\n\t<<< ${action} '${WB}${u}${locale}.ts' file >>>\n\033[m"
+ if [ "$u" == "" ]; then
+ eval $LUPDATE "$FILES" -ts "${WB}.ts" # locale-agnostic file
+ else
+ eval $LUPDATE "$FILES" -source-language en_US -target-language "${locale//-/_}" \
+ -ts "${WB}_${locale}.ts"
+ fi
+}
+
+normalize_crowdin_files() {
+ # Rename files which locales are different on FreeCAD and delete not supported locales
+ crowdin_fixes=(af-ZA ar-SA be-BY bg-BG ca-ES cs-CZ da-DK de-DE el-GR eu-ES fi-FI
+ fil-PH fr-FR gl-ES hr-HR hu-HU it-IT ja-JP ka-GE kab-KAB ko-KR lt-LT nl-NL
+ no-NO pl-PL ro-RO ru-RU sk-SK sl-SI sr-SP tr-TR uk-UA vi-VN)
+
+ crowdin_deletes=(az-AZ bn-BD br-FR bs-BA en en-GB en-US eo-UY es-CO es-VE et-EE fa-IR he-IL
+ hi-IN hy-AM id-ID kaa lv-LV mk-MK ms-MY sat-IN si-LK ta-IN te-IN th-TH ur-PK xav yo-NG)
+
+ for pattern in "${crowdin_fixes[@]}"; do
+ find . -type f -name "*_${pattern}\.*" | while read -r file; do
+ mv -v "$file" "${file//-*./.}"
+ done
+ done
+
+ for pattern in "${crowdin_deletes[@]}"; do
+ find . -type f -name "*_${pattern}\.*" -delete
+ done
+}
+
+help() {
+ echo -e "\nDescription:"
+ echo -e "\tCreate, update and release translation files."
+ echo -e "\nUsage:"
+ echo -e "\t./update_translation.sh [-R] [-U] [-r ] [-u ]"
+ echo -e "\nFlags:"
+ echo -e " -R\n\tRelease all translations (qm files)"
+ echo -e " -U\n\tUpdate all translations (ts files)"
+ echo -e " -r \n\tRelease the specified locale"
+ echo -e " -u \n\tUpdate strings for the specified locale"
+ echo -e " -N\n\tNormalize CrowdIn filenames"
+}
+
+# Main function ------------------------------------------------------------------------------------
+
+LUPDATE=/usr/lib/qt6/bin/lupdate # from Qt6
+# LUPDATE=lupdate # from Qt5
+LRELEASE=/usr/lib/qt6/bin/lrelease # from Qt6
+# LRELEASE=lrelease # from Qt5
+WB="Curves"
+
+sed -i '3s/-/_/' ${WB}*.ts # Enforce underscore on locales
+sed -i '3s/\"en\"/\"en_US\"/g' ${WB}*.ts # Use en_US
+
+if [ $# -eq 1 ]; then
+ if [ "$1" == "-R" ]; then
+ find . -type f -name '*_*.ts' | while IFS= read -r file; do
+ # Release all locales
+ $LRELEASE -nounfinished "$file"
+ echo
+ done
+ elif [ "$1" == "-U" ]; then
+ for locale in "${supported_locales[@]}"; do
+ update_locale "$locale"
+ done
+ elif [ "$1" == "-u" ]; then
+ update_locale # Update main file (agnostic)
+ elif [ "$1" == "-N" ]; then
+ normalize_crowdin_files
+ else
+ help
+ fi
+elif [ $# -eq 2 ]; then
+ LOCALE="$2"
+ if is_locale_supported "$LOCALE"; then
+ if [ "$1" == "-r" ]; then
+ # Release locale (creation of *.qm file from *.ts file)
+ $LRELEASE -nounfinished "${WB}_${LOCALE}.ts"
+ elif [ "$1" == "-u" ]; then
+ # Update main & locale files
+ update_locale
+ update_locale "$LOCALE"
+ fi
+ else
+ echo "Verify your language code. Case sensitive."
+ echo "If it's correct, ask a maintainer to add support for your language on FreeCAD."
+ echo -e "\nSupported locales, '\033[1;34mFreeCADGui.supportedLocales()\033[m': \033[1;33m"
+ for locale in $(printf "%s\n" "${supported_locales[@]}" | sort); do
+ echo -n "$locale "
+ done
+ echo
+ fi
+else
+ help
+fi
diff --git a/freecad/Curves/segmentSurfaceFP.py b/freecad/Curves/segmentSurfaceFP.py
index 99df389..5b6ae1c 100644
--- a/freecad/Curves/segmentSurfaceFP.py
+++ b/freecad/Curves/segmentSurfaceFP.py
@@ -1,19 +1,26 @@
# -*- coding: utf-8 -*-
-__title__ = "Segment surface"
+import FreeCAD
+
+translate = FreeCAD.Qt.translate
+QT_TRANSLATE_NOOP = FreeCAD.Qt.QT_TRANSLATE_NOOP
+
+__title__ = QT_TRANSLATE_NOOP("Curves_SegmentSurface", "Segment surface")
__author__ = "Christophe Grellier (Chris_G)"
__license__ = "LGPL 2.1"
-__doc__ = """Segment a surface on isocurves"""
-__usage__ = """Select a face in the 3D view and activate tool.
+__doc__ = translate("Curves_SegmentSurface", "Segment a surface on isocurves")
+__usage__ = translate(
+ "Curves_SegmentSurface",
+ """Select a face in the 3D view and activate tool.
The face will be converted to a BSpline surface.
In Auto mode, the surface will be segmented along isocurves of highest multiplicity.
In Custom mode, it will be segmented along isocurves of specified parameters.
These parameters can be provided by an external object that have a NormalizedParameters property,
-like the Discretize, or the SplitCurve tools."""
+like the Discretize, or the SplitCurve tools.""",
+)
import os
-import FreeCAD
import FreeCADGui
import Part
from . import ICONPATH
@@ -27,15 +34,68 @@ class SegmentSurface:
def __init__(self, obj, face):
"""Add the properties"""
- obj.addProperty("App::PropertyLinkSub", "Source", "Base", "Initial Face").Source = face
- obj.addProperty("App::PropertyEnumeration", "Option", "Base", "Option list").Option = ["Auto", "Custom"]
- obj.addProperty("App::PropertyEnumeration", "Direction", "OptionAuto", "Segmenting direction").Direction = ["U", "V", "Both"]
- obj.addProperty("App::PropertyFloatList", "KnotsU", "UDirection", "Splitting parameters in U direction")
- obj.addProperty("App::PropertyFloatList", "KnotsV", "VDirection", "Splitting parameters in V direction")
- obj.addProperty("App::PropertyInteger", "NumberU", "UDirection", "Split the U parameter range in the given number of segments").NumberU = 2
- obj.addProperty("App::PropertyInteger", "NumberV", "VDirection", "Split the V parameter range in the given number of segments").NumberV = 2
- obj.addProperty("App::PropertyLink", "KnotsUProvider", "UDirection", "Object generating normalized parameters in U direction")
- obj.addProperty("App::PropertyLink", "KnotsVProvider", "VDirection", "Object generating normalized parameters in V direction")
+ obj.addProperty(
+ "App::PropertyLinkSub",
+ "Source",
+ "Base",
+ QT_TRANSLATE_NOOP("App::Property", "Initial Face"),
+ ).Source = face
+ obj.addProperty(
+ "App::PropertyEnumeration",
+ "Option",
+ "Base",
+ QT_TRANSLATE_NOOP("App::Property", "Option list"),
+ ).Option = ["Auto", "Custom"]
+ obj.addProperty(
+ "App::PropertyEnumeration",
+ "Direction",
+ "OptionAuto",
+ QT_TRANSLATE_NOOP("App::Property", "Segmenting direction"),
+ ).Direction = ["U", "V", "Both"]
+ obj.addProperty(
+ "App::PropertyFloatList",
+ "KnotsU",
+ "UDirection",
+ QT_TRANSLATE_NOOP("App::Property", "Splitting parameters in U direction"),
+ )
+ obj.addProperty(
+ "App::PropertyFloatList",
+ "KnotsV",
+ "VDirection",
+ QT_TRANSLATE_NOOP("App::Property", "Splitting parameters in V direction"),
+ )
+ obj.addProperty(
+ "App::PropertyInteger",
+ "NumberU",
+ "UDirection",
+ QT_TRANSLATE_NOOP(
+ "App::Property", "Split the U parameter range in the given number of segments"
+ ),
+ ).NumberU = 2
+ obj.addProperty(
+ "App::PropertyInteger",
+ "NumberV",
+ "VDirection",
+ QT_TRANSLATE_NOOP(
+ "App::Property", "Split the V parameter range in the given number of segments"
+ ),
+ ).NumberV = 2
+ obj.addProperty(
+ "App::PropertyLink",
+ "KnotsUProvider",
+ "UDirection",
+ QT_TRANSLATE_NOOP(
+ "App::Property", "Object generating normalized parameters in U direction"
+ ),
+ )
+ obj.addProperty(
+ "App::PropertyLink",
+ "KnotsVProvider",
+ "VDirection",
+ QT_TRANSLATE_NOOP(
+ "App::Property", "Object generating normalized parameters in V direction"
+ ),
+ )
obj.Proxy = self
obj.Option = "Custom"
@@ -203,7 +263,7 @@ def makeFeature(self, s):
def Activated(self):
sel = FreeCADGui.Selection.getSelectionEx()
if sel == []:
- FreeCAD.Console.PrintError("{} :\n{}\n".format(__title__, __usage__))
+ FreeCAD.Console.PrintError(translate("Log", "{} :\n{}\n")).format(__title__, __usage__)
else:
self.makeFeature(sel[0])
@@ -214,9 +274,15 @@ def IsActive(self):
return False
def GetResources(self):
- return {'Pixmap': TOOL_ICON,
- 'MenuText': __title__,
- 'ToolTip': "{}