Macro Repro Wire: Difference between revisions
(Marked this version for translation) |
(Marked this version for translation) |
||
(16 intermediate revisions by 3 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) |
|||
|Author=Mario52 |
|||
|Version=00.03 |
|||
|Date=2019-07-03 |
|||
|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. |
||
<!--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--> |
|||
==Use== <!--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''' |
|||
{{Code|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 |
|||
__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.03" |
|||
__date__ = "22/10/2015" |
|||
__date__ = "03/07/2019" |
|||
__Comment__ = "Compatible with FreeCAD 0.17" |
|||
def objectRealPlacement3D(obj): |
|||
sel = FreeCADGui.Selection.getSelection() # select one or many objects |
|||
try: |
|||
objectPlacement = obj.Shape.Placement |
|||
#### |
|||
objectPlacementBase = FreeCAD.Vector(objectPlacement.Base) |
|||
#### |
|||
objectWorkCenter = objectPlacementBase |
|||
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 |
|||
else: |
|||
for ii in range(len(FreeCADGui.Selection.getSelectionEx()[i].SubObjects)): # boucle SubObjects (sub objects selected) |
|||
objectRealPlacement3D = objectWorkCenter |
|||
numObj += 1 # numero of object |
|||
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 |
|||
# 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 |
|||
# 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.03 03/07/2019 : compatibility with Python 3 "print" to "print()" |
|||
00.00 24/10/2015 : |
|||
<!--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 148: | ||
{{clear}} |
{{clear}} |
||
<languages/> |
Revision as of 17:43, 3 July 2019
Description |
---|
This macro create on duplicate to wire subObject ... selected. (Compatible with Body) Macro version: 00.03 Last modified: 2019-07-03 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.03 |
Date last modified |
2019-07-03 |
FreeCAD Version(s) |
All |
Default shortcut |
None |
See also |
None |
Description
This macro create on duplicate to wire, face, object or subObject ... selected.
ReproWire
Use
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
__title__ = "Macro_ReproWire"
__author__ = "Mario52"
__url__ = "http://www.freecadweb.org/index-fr.html"
__Wiki__ = "https://www.freecadweb.org/wiki/Macro_Repro_Wire"
__version__ = "00.03"
__date__ = "03/07/2019"
__Comment__ = "Compatible with FreeCAD 0.17"
def objectRealPlacement3D(obj):
try:
objectPlacement = obj.Shape.Placement
####
objectPlacementBase = FreeCAD.Vector(objectPlacement.Base)
####
objectWorkCenter = objectPlacementBase
if hasattr(obj, "getGlobalPlacement"):
globalPlacement = obj.getGlobalPlacement()
globalPlacementBase = FreeCAD.Vector(globalPlacement.Base)
objectRealPlacement3D = globalPlacementBase.add(objectWorkCenter).sub(objectPlacementBase)
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
# 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
# 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.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?