Macro Repro Wire: Difference between revisions
(Marked this version for translation) |
m (minor) |
||
(23 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
|||
<translate> |
<translate> |
||
<!--T:1--> |
<!--T:1--> |
||
{{Macro |
|||
{{Macro|Icon= Macro_ReproWire|Name= Macro_ReproWire|Description=This macro create on duplicate to wire subObject ... selected.|Author=Mario52}} |
|||
|Name=Macro Repro Wire |
|||
</translate> |
|||
|Icon=Macro_ReproWire.png |
|||
<translate> |
|||
|Description=This macro create on duplicate to wire subObject ... selected. (Compatible with Body)<br \>(include in FreeCAD since 0.19 version : Menu → Part → Create a copy) |
|||
|Author=Mario52 |
|||
|Version=00.04 |
|||
|Date=2020-03-14 |
|||
|Download=[https://www.freecadweb.org/wiki/images/a/a3/Macro_ReproWire.png ToolBar Icon] |
|||
|FCVersion=All |
|||
}} |
|||
==Description== <!--T:2--> |
==Description== <!--T:2--> |
||
This macro create on duplicate to wire, face, subObject ... selected. |
This macro create on duplicate to wire, face, object or subObject ... selected. (include in FreeCAD since 0.19 version : Menu → Part → Create a copy) |
||
<!--T:3--> |
|||
[[File:Macro ReproWire 00.png|480px|left]] |
|||
</translate> |
</translate> |
||
[[Image:Macro ReproWire 00.png|480px]] |
|||
<translate> |
<translate> |
||
<!--T:4--> |
<!--T:4--> |
||
{{Caption|ReproWire}} |
|||
{{clear}} |
|||
</translate> |
|||
<translate> |
|||
==Use== <!--T:5--> |
|||
==Usage== <!--T:5--> |
|||
Select your object and run the macro for create your copy, you can extrude created faces. |
Select your object and run the macro for create your copy, you can extrude created faces. |
||
<!--T:6--> |
<!--T:6--> |
||
The copies are coloured red and renamed with the Shapexxx + original names |
The copies are coloured red and renamed with the Shapexxx + original names |
||
</translate> |
|||
<translate> |
|||
==Script== |
==Script== <!--T:7--> |
||
the icon for the toolbar [[File:Macro_ReproWire.png|icon for the button]] |
|||
</translate> |
</translate> |
||
<syntaxhighlight> |
|||
''' Macro_ReproWire.FCMacro''' |
|||
{{MacroCode|code= |
|||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||
from __future__ import unicode_literals |
from __future__ import unicode_literals |
||
import codecs #https://docs.python.org/2/howto/unicode.html |
|||
import Part,PartGui |
|||
import Part,Draft |
|||
#24/10/2015, 22/09/2018, 03/07/2019, 14/03/2020 |
|||
__title__="Macro_ReproWire" |
|||
__author__ = "Mario52" |
|||
__title__ = "Macro_ReproWire" |
|||
__author__ = "Mario52" |
|||
__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" |
|||
__version__ = "00.00" |
|||
__version__ = "00.04" |
|||
__date__ = "22/10/2015" |
|||
__date__ = "2020/03/14" #YYYY/MM/DD |
|||
__Comment__ = "Compatible with FreeCAD 0.17 0.18 and more" |
|||
global objectPlacementAngle ; objectPlacementAngle = "" |
|||
sel = FreeCADGui.Selection.getSelection() # select one or many objects |
|||
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"): |
|||
try: |
|||
globalPlacement = obj.getGlobalPlacement() |
|||
if len(sel) != 0: |
|||
globalPlacementBase = FreeCAD.Vector(globalPlacement.Base) |
|||
numObj = -1 |
|||
objectRealPlacement3D = globalPlacementBase.add(objectWorkCenter).sub(objectPlacementBase) |
|||
for i in range(len(FreeCADGui.Selection.getSelectionEx())): # boucle objects |
|||
objectPlacementAngle = globalPlacement.Rotation.toEuler() |
|||
for ii in range(len(FreeCADGui.Selection.getSelectionEx()[i].SubObjects)): # boucle SubObjects (sub objects selected) |
|||
else: |
|||
numObj += 1 # numero of object |
|||
objectRealPlacement3D = objectWorkCenter |
|||
return objectRealPlacement3D |
|||
Part.show(FreeCADGui.Selection.getSelectionEx()[i].SubObjects[ii].copy()) # create repro shape |
|||
except Exception: |
|||
return FreeCAD.Vector(0.0, 0.0, 0.0) |
|||
sel = Gui.Selection.getSelection() |
|||
element_ = FreeCADGui.Selection.getSelectionEx()[i].SubElementNames[ii] # extract details to display |
|||
s = Gui.Selection.getSelectionEx() |
|||
# Object /subObject / number objects total # details |
|||
print i+1 ,"/", ii+1 ,"/", len(sel) ," ", sel[numObj].Label ," ", element_ # display the info |
|||
a = App.ActiveDocument.ActiveObject |
|||
a.Label = a.Name+" "+sel[numObj].Label+" "+element_ # name for the repro shape |
|||
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: |
try: |
||
FreeCADGui. |
SubElement = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] |
||
FreeCADGui. |
print( FreeCADGui.Selection.getSelectionEx()[0].SubElementNames[0], " : ", SubElement.normalAt(0,0)) # ok Vector pour face |
||
FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0) # give ShapeColor |
|||
except Exception: |
except Exception: |
||
None |
None |
||
FreeCAD.ActiveDocument.recompute() |
|||
else : |
else : |
||
FreeCAD.Console.PrintError("Select one object" + "\n") |
|||
except Exception: |
except Exception: |
||
FreeCAD.Console.PrintError("Unexpected error" + "\n") |
|||
print "Wrong selection" |
|||
}} |
|||
</syntaxhighlight> |
|||
<translate> |
<translate> |
||
==Version== <!--T:8--> |
==Version== <!--T:8--> |
||
00.00 24/10/2015 : |
|||
<!--T:13--> |
|||
00.04 2020-03-14 : correction for rotate object |
|||
<!--T:14--> |
|||
00.03 03/07/2019 : compatibility with Python 3 "print" to "print()" |
|||
<!--T:12--> |
|||
00.02 22/09/2018 : Compatible with FreeCAD 0.17 (getGlobalPlacement()) |
|||
<!--T:11--> |
|||
00.01 24/10/2015 : extension to all objects |
|||
<!--T:10--> |
|||
00.00 22/10/2015 : |
|||
</translate> |
</translate> |
||
<translate> |
<translate> |
||
==Links== |
==Links== <!--T:9--> |
||
The forum [http://forum.freecadweb.org/viewtopic.php?f=3&t=12922 are there any tools to extrude only selected surface from a sketch?] |
The forum [http://forum.freecadweb.org/viewtopic.php?f=3&t=12922 are there any tools to extrude only selected surface from a sketch?] |
||
</translate> |
</translate> |
||
Line 82: | Line 160: | ||
{{clear}} |
{{clear}} |
||
<languages/> |
Latest revision as of 10:23, 22 February 2021
Description |
---|
This macro create on duplicate to wire subObject ... selected. (Compatible with Body) (include in FreeCAD since 0.19 version : Menu → Part → Create a copy) Macro version: 00.04 Last modified: 2020-03-14 FreeCAD version: All Download: ToolBar Icon Author: Mario52 |
Author |
Mario52 |
Download |
ToolBar Icon |
Links |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
00.04 |
Date last modified |
2020-03-14 |
FreeCAD Version(s) |
All |
Default shortcut |
None |
See also |
None |
Description
This macro create on duplicate to wire, face, object or subObject ... selected. (include in FreeCAD since 0.19 version : Menu → Part → Create a copy)
ReproWire
Usage
Select your object and run the macro for create your copy, you can extrude created faces.
The copies are coloured red and renamed with the Shapexxx + original names
Script
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")
Version
00.04 2020-03-14 : correction for rotate object
00.03 03/07/2019 : compatibility with Python 3 "print" to "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 :
Links
The forum are there any tools to extrude only selected surface from a sketch?