Macro Repro Wire: Difference between revisions

From FreeCAD Documentation
m ({{Code|code=)
m (minor)
 
(16 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 Repro Wire|Description=This macro create on duplicate to wire subObject ... selected.|Author=Mario52|Version=00.01 (24/10/2015)}}
|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, object or 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|ReproWire]]
</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== <!--T:7-->
==Script== <!--T:7-->
''' Macro_ReproWire.FCMacro''' the icon for the toolbar [[File:Macro_ReproWire.png|icon for the button]]
the icon for the toolbar [[File:Macro_ReproWire.png|icon for the button]]
</translate>
</translate>

{{Code|code=
''' Macro_ReproWire.FCMacro'''

{{MacroCode|code=


# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
Line 34: Line 41:
import codecs #https://docs.python.org/2/howto/unicode.html
import codecs #https://docs.python.org/2/howto/unicode.html
import Part,Draft
import Part,Draft

#
#24/10/2015, 22/09/2018, 03/07/2019, 14/03/2020
#__title__="Macro_ReproWire"

#__author__ = "Mario52"
__title__ = "Macro_ReproWire"
#__url__ = "http://www.freecadweb.org/index-fr.html"
#__version__ = "00.01"
__author__ = "Mario52"
__url__ = "http://www.freecadweb.org/index-fr.html"
#__date__ = "24/10/2015"
__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()
sel = Gui.Selection.getSelection()
Line 47: Line 81:
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 55: Line 89:
FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2]
FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2]
for ii in i.SubElementNames:
for ii in i.SubElementNames:
placementOrigine = objectRealPlacement3D(FreeCAD.ActiveDocument.getObject(i.ObjectName))# search the original Placement
# print "SubObject"
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 # display the info SubObject
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.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 69: Line 105:
None
None
except Exception:
except Exception:
# print "Not SubObject"
# print( "Not SubObject")
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 # display the info SubObject
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.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 81: Line 120:
except Exception:
except Exception:
None
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 :
else :
print "Select one object"
FreeCAD.Console.PrintError("Select one object" + "\n")
except Exception:
except Exception:
print "Unexpected error"
FreeCAD.Console.PrintError("Unexpected error" + "\n")


}}
}}


<translate>
<translate>

==Version== <!--T:8-->
==Version== <!--T:8-->

<!--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
00.01 24/10/2015 : extension to all objects


Line 102: Line 160:


{{clear}}
{{clear}}
<languages/>

Latest revision as of 10:23, 22 February 2021

Other languages:

Macro Repro Wire

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
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

the icon for the toolbar icon for the button

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?