Macro Repro Wire: Difference between revisions

From FreeCAD Documentation
(Marked this version for translation)
(Vertical {{Macro}}; fixed icon)
Line 2: Line 2:
<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.02|Date=2018-09-22}}
|Name=Macro Repro Wire
</translate>
|Icon=Macro_ReproWire.png
<translate>
|Description=This macro create on duplicate to wire subObject ... selected.
|Author=Mario52
|Version=00.02
|Date=2018-09-22
}}

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


<!--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-->
==Use== <!--T:5-->
Line 22: Line 26:
<!--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-->

Revision as of 21:54, 3 December 2018

Other languages:

Macro Repro Wire

Description
This macro create on duplicate to wire subObject ... selected.

Macro version: 00.02
Last modified: 2018-09-22
Author: Mario52
Author
Mario52
Download
None
Links
Macro Version
00.02
Date last modified
2018-09-22
FreeCAD Version(s)
None
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

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

__title__   = "Macro_ReproWire"
__author__  = "Mario52"
__url__     = "http://www.freecadweb.org/index-fr.html"
__Wiki__    = "https://www.freecadweb.org/wiki/Macro_Repro_Wire"
__version__ = "00.02"
__date__    = "22/09/2018"
__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 :
        print "Select one object"
except Exception:
    print "Unexpected error"

Version

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?