Macro Repro Wire/it: Difference between revisions
mNo edit summary |
mNo edit summary |
||
(21 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
{{Macro/it |
|||
{{Macro/it|Icon= Macro_ReproWire|Name= Macro Repro Wire|Name/it=Replica un componente|Description=Questa macro crea un duplicato di un sottoelemento subObject ... selezionato.|Author=Mario52|Version=00.02|Date=2018-09-22}} |
|||
|Name= Macro Repro Wire |
|||
|Translate=Replica un componente |
|||
|Icon= Macro_ReproWire.png |
|||
|Description=Questa macro crea un duplicato di un sottoelemento subObject ... selezionato.<br \>(Incluso con la versione FreeCAD 0.19 : Menu → Part → Creare una copia) |
|||
|Author=Mario52 |
|||
|Version=00.04 |
|||
|Date=2020-03-14 |
|||
|Download=[https://www.freecadweb.org/wiki/images/a/a3/Macro_ReproWire.png ToolBar Icon] |
|||
|FCVersion=Tutte |
|||
}} |
|||
==Descrizione== |
==Descrizione== |
||
Questa macro crea un duplicato di un oggetto, subObject, faccia, contorno o linea, selezionato. |
Questa macro crea un duplicato di un oggetto, subObject, faccia, contorno o linea, selezionato.<br \>(Incluso con la versione FreeCAD 0.19 : Menu → Part → Creare una copia) |
||
⚫ | |||
{{Caption|ReproWire}} |
|||
⚫ | |||
{{clear}} |
|||
==Uso== |
==Uso== |
||
Line 17: | Line 29: | ||
''' Macro_ReproWire.FCMacro''' |
''' Macro_ReproWire.FCMacro''' |
||
{{ |
{{MacroCode|code= |
||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||
Line 24: | Line 36: | ||
import Part,Draft |
import Part,Draft |
||
#24/10/2015, 22/09/2018 |
#24/10/2015, 22/09/2018, 03/07/2019, 14/03/2020 |
||
__title__ = "Macro_ReproWire" |
__title__ = "Macro_ReproWire" |
||
Line 30: | Line 42: | ||
__url__ = "http://www.freecadweb.org/index-fr.html" |
__url__ = "http://www.freecadweb.org/index-fr.html" |
||
__Wiki__ = "https://www.freecadweb.org/wiki/Macro_Repro_Wire" |
__Wiki__ = "https://www.freecadweb.org/wiki/Macro_Repro_Wire" |
||
__version__ = "00. |
__version__ = "00.04" |
||
__date__ = " |
__date__ = "2020/03/14" #YYYY/MM/DD |
||
__Comment__ = "Compatible with FreeCAD 0.17" |
__Comment__ = "Compatible with FreeCAD 0.17 0.18 and more" |
||
global objectPlacementAngle ; objectPlacementAngle = "" |
|||
def objectRealPlacement3D(obj): |
def objectRealPlacement3D(obj): |
||
global objectPlacementAngle |
|||
try: |
try: |
||
objectPlacement = obj.Shape.Placement |
objectPlacement = obj.Shape.Placement |
||
Line 41: | Line 55: | ||
#### |
#### |
||
objectWorkCenter = objectPlacementBase |
objectWorkCenter = objectPlacementBase |
||
#### |
|||
objectPlacementAngle = objectPlacement.Rotation.toEuler() |
|||
if hasattr(obj, "getGlobalPlacement"): |
if hasattr(obj, "getGlobalPlacement"): |
||
Line 46: | Line 62: | ||
globalPlacementBase = FreeCAD.Vector(globalPlacement.Base) |
globalPlacementBase = FreeCAD.Vector(globalPlacement.Base) |
||
objectRealPlacement3D = globalPlacementBase.add(objectWorkCenter).sub(objectPlacementBase) |
objectRealPlacement3D = globalPlacementBase.add(objectWorkCenter).sub(objectPlacementBase) |
||
objectPlacementAngle = globalPlacement.Rotation.toEuler() |
|||
else: |
else: |
||
objectRealPlacement3D = objectWorkCenter |
objectRealPlacement3D = objectWorkCenter |
||
Line 58: | Line 75: | ||
try: |
try: |
||
if len(sel) != 0: |
if len(sel) != 0: |
||
print "Object(s) : ", len(sel), " , SubObject(s) : ", len(s) |
print( "Object(s) : ", len(sel), " , SubObject(s) : ", len(s)) |
||
i2 = ii2 = -1 |
i2 = ii2 = -1 |
||
for i in s: |
for i in s: |
||
Line 69: | Line 86: | ||
ii2 += 1 |
ii2 += 1 |
||
Part.show(FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2].copy()) # create repro shape subObject |
Part.show(FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2].copy()) # create repro shape subObject |
||
print i2+1 ,"/", ii2+1 ,"/", len(s) ," ", i.ObjectName ," ", ii |
print( i2+1 ,"/", ii2+1 ,"/", len(s) ," ", i.ObjectName ," ", ii) # display the info SubObject |
||
a = App.ActiveDocument.ActiveObject |
a = App.ActiveDocument.ActiveObject |
||
a.Placement.Base = placementOrigine |
a.Placement.Base = placementOrigine |
||
a.Placement.Rotation = App.Rotation(objectPlacementAngle[0], objectPlacementAngle[1], objectPlacementAngle[2]) |
|||
# object Name / original object Name / SubObject Name |
# object Name / original object Name / SubObject Name |
||
a.Label = a.Name + " " + i.ObjectName + " " + ii # Label for the repro shape |
a.Label = a.Name + " " + i.ObjectName + " " + ii # Label for the repro shape |
||
Line 81: | Line 99: | ||
None |
None |
||
except Exception: |
except Exception: |
||
# print "Not SubObject" |
# print( "Not SubObject") |
||
placementOrigine = objectRealPlacement3D(FreeCAD.ActiveDocument.getObject(sel[i2].Name))# search the original Placement |
placementOrigine = objectRealPlacement3D(FreeCAD.ActiveDocument.getObject(sel[i2].Name))# search the original Placement |
||
Part.show(sel[i2].Shape) # create repro shape object |
Part.show(sel[i2].Shape) # create repro shape object |
||
print i2+1 ,"/", ii2+1 ,"/", len(s) ," ", sel[i2].Name |
print( i2+1 ,"/", ii2+1 ,"/", len(s) ," ", sel[i2].Name) # display the info SubObject |
||
a = App.ActiveDocument.ActiveObject |
a = App.ActiveDocument.ActiveObject |
||
a.Placement.Base = placementOrigine |
a.Placement.Base = placementOrigine |
||
a.Placement.Rotation = App.Rotation(objectPlacementAngle[0], objectPlacementAngle[1], objectPlacementAngle[2]) |
|||
# object Name / original object Name |
# object Name / original object Name |
||
a.Label =a.Name + " " + sel[i2].Name # Label for the repro shape |
a.Label =a.Name + " " + sel[i2].Name # Label for the repro shape |
||
Line 97: | Line 116: | ||
try: |
try: |
||
SubElement = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] |
SubElement = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] |
||
print FreeCADGui.Selection.getSelectionEx()[0].SubElementNames[0], " : ", SubElement.normalAt(0,0) # ok Vector pour face |
print( FreeCADGui.Selection.getSelectionEx()[0].SubElementNames[0], " : ", SubElement.normalAt(0,0)) # ok Vector pour face |
||
except Exception: |
except Exception: |
||
None |
None |
||
Line 103: | Line 122: | ||
FreeCAD.ActiveDocument.recompute() |
FreeCAD.ActiveDocument.recompute() |
||
else : |
else : |
||
FreeCAD.Console.PrintError("Select one object" + "\n") |
|||
except Exception: |
except Exception: |
||
FreeCAD.Console.PrintError("Unexpected error" + "\n") |
|||
}} |
}} |
||
<div class="mw-translate-fuzzy"> |
|||
==Versione== |
==Versione== |
||
00.01 24/10/2015 : |
|||
00.04 2020-03-14 : correzione per rotazione obbietto |
|||
</div> |
|||
00.03 03/07/2019 : compatibilità con Python 3 "print" verso "print()" |
|||
00.02 22/09/2018 : Compatible with FreeCAD 0.17 (getGlobalPlacement()) |
|||
00.01 24/10/2015 : extension to all objects |
00.01 24/10/2015 : extension to all objects |
Latest revision as of 10:27, 22 February 2021
Descrizione |
---|
Questa macro crea un duplicato di un sottoelemento subObject ... selezionato. (Incluso con la versione FreeCAD 0.19 : Menu → Part → Creare una copia) Versione macro: 00.04 Ultima modifica: 2020-03-14 Versione FreeCAD: Tutte Download: ToolBar Icon Autore: Mario52 |
Autore |
Mario52 |
Download |
ToolBar Icon |
Link |
Raccolta di macro Come installare le macro Personalizzare la toolbar |
Versione macro |
00.04 |
Data ultima modifica |
2020-03-14 |
Versioni di FreeCAD |
Tutte |
Scorciatoia |
Nessuna |
Vedere anche |
Nessuno |
Descrizione
Questa macro crea un duplicato di un oggetto, subObject, faccia, contorno o linea, selezionato.
(Incluso con la versione FreeCAD 0.19 : Menu → Part → Creare una copia)
ReproWire
Uso
Selezionare l'oggetto e poi eseguire la macro per creare la sua copia. È possibile usare la copia per produrre delle estrusioni o altre ordinarie operazioni.
Le copie sono di colore rosso e denominate "Shapexxx + il nome dell'originale".
Script
L'icona per la barra degli strumenti
Macro_ReproWire.FCMacro
# -*- coding: utf-8 -*- from __future__ import unicode_literals import codecs #https://docs.python.org/2/howto/unicode.html import Part,Draft #24/10/2015, 22/09/2018, 03/07/2019, 14/03/2020 __title__ = "Macro_ReproWire" __author__ = "Mario52" __url__ = "http://www.freecadweb.org/index-fr.html" __Wiki__ = "https://www.freecadweb.org/wiki/Macro_Repro_Wire" __version__ = "00.04" __date__ = "2020/03/14" #YYYY/MM/DD __Comment__ = "Compatible with FreeCAD 0.17 0.18 and more" global objectPlacementAngle ; objectPlacementAngle = "" def objectRealPlacement3D(obj): global objectPlacementAngle try: objectPlacement = obj.Shape.Placement #### objectPlacementBase = FreeCAD.Vector(objectPlacement.Base) #### objectWorkCenter = objectPlacementBase #### objectPlacementAngle = objectPlacement.Rotation.toEuler() if hasattr(obj, "getGlobalPlacement"): globalPlacement = obj.getGlobalPlacement() globalPlacementBase = FreeCAD.Vector(globalPlacement.Base) objectRealPlacement3D = globalPlacementBase.add(objectWorkCenter).sub(objectPlacementBase) objectPlacementAngle = globalPlacement.Rotation.toEuler() else: objectRealPlacement3D = objectWorkCenter return objectRealPlacement3D except Exception: return FreeCAD.Vector(0.0, 0.0, 0.0) sel = Gui.Selection.getSelection() s = Gui.Selection.getSelectionEx() try: if len(sel) != 0: print( "Object(s) : ", len(sel), " , SubObject(s) : ", len(s)) i2 = ii2 = -1 for i in s: i2 += 1 ii2 = -1 try: FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2] for ii in i.SubElementNames: placementOrigine = objectRealPlacement3D(FreeCAD.ActiveDocument.getObject(i.ObjectName))# search the original Placement ii2 += 1 Part.show(FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2].copy()) # create repro shape subObject print( i2+1 ,"/", ii2+1 ,"/", len(s) ," ", i.ObjectName ," ", ii) # display the info SubObject a = App.ActiveDocument.ActiveObject a.Placement.Base = placementOrigine a.Placement.Rotation = App.Rotation(objectPlacementAngle[0], objectPlacementAngle[1], objectPlacementAngle[2]) # object Name / original object Name / SubObject Name a.Label = a.Name + " " + i.ObjectName + " " + ii # Label for the repro shape try: FreeCADGui.activeDocument().activeObject().LineColor = (1.0,0.0,0.0) # give LineColor FreeCADGui.activeDocument().activeObject().PointColor = (1.0,0.0,0.0) # give PointColor FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0) # give ShapeColor except Exception: None except Exception: # print( "Not SubObject") placementOrigine = objectRealPlacement3D(FreeCAD.ActiveDocument.getObject(sel[i2].Name))# search the original Placement Part.show(sel[i2].Shape) # create repro shape object print( i2+1 ,"/", ii2+1 ,"/", len(s) ," ", sel[i2].Name) # display the info SubObject a = App.ActiveDocument.ActiveObject a.Placement.Base = placementOrigine a.Placement.Rotation = App.Rotation(objectPlacementAngle[0], objectPlacementAngle[1], objectPlacementAngle[2]) # object Name / original object Name a.Label =a.Name + " " + sel[i2].Name # Label for the repro shape try: FreeCADGui.activeDocument().activeObject().LineColor = (1.0,0.0,0.0) # give LineColor FreeCADGui.activeDocument().activeObject().PointColor = (1.0,0.0,0.0) # give PointColor FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0) # give ShapeColor except Exception: None try: SubElement = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] print( FreeCADGui.Selection.getSelectionEx()[0].SubElementNames[0], " : ", SubElement.normalAt(0,0)) # ok Vector pour face except Exception: None FreeCAD.ActiveDocument.recompute() else : FreeCAD.Console.PrintError("Select one object" + "\n") except Exception: FreeCAD.Console.PrintError("Unexpected error" + "\n")
Versione
00.04 2020-03-14 : correzione per rotazione obbietto
00.03 03/07/2019 : compatibilità con Python 3 "print" verso "print()"
00.02 22/09/2018 : Compatible with FreeCAD 0.17 (getGlobalPlacement())
00.01 24/10/2015 : extension to all objects
00.00 22/10/2015 :
Link
Nel forum are there any tools to extrude only selected surface from a sketch?