Macro BoundingBox Tracing

From FreeCAD Documentation
Revision as of 16:08, 4 June 2016 by Mario52 (talk | contribs)

File:BoundBoxTracing Macro BoundingBox Tracing

Description
Cette macro trace 6 rectangles représentant le BoundingBox de l'objet sélectionné (1 rectangle par face).

Auteur: Mario52
Auteur
Mario52
Téléchargement
None
Liens
Version Macro
1.0
Dernière modification
None
Version(s) FreeCAD
None
Raccourci clavier
None
Voir aussi
None

Description

Cette macro trace 6 rectangles représentant le BoundingBox de l'objet sélectionné (1 rectangle par face).

CenterFace

Utilisation

Sélectionnez l'objet et lancez la macro. 6 rectangles de couleur rouge seront tracés représentants le BoundingBox de l'objet.

La couleur peut être changée dans la macro.

Si createVol = 1 (Line 29) un volume est crée

Pour changer la couleur des lignes modifiez le nombre aux lignes 37, 38, 39

    red   = 1.0  # 1 = 255
    green = 0.0  #
    blue  = 0.0  #

Icône

télechargez l'image et copiez la dans votre répertoire des macros

Positionnez vous sur l'image puis cliquez sur la bouton droit, dans la nouvelle fenêtre, choisissez "Enregistrez l'image sous ..."

Button

Macro

Macro_BoundingBox_Tracing.FCMacro

# -*- coding: utf-8 -*-
# cette macro trace en rouge (modifiable) le tour du boundingbox avec 6 rectangles
# si "createVol" = 1 il sera cree un volume (rouge) de la dimension du BoundBox
# this macro red trace (editable) around the BoundingBox with 6 rectangles
# if "createVol" = 1 on volume (red) is created 
# Macro_BoundingBox_Tracing
#
#OS: Windows Vista       #OS: Windows 8.1                                  #OS: Windows 10
#Platform: 32-bit        #Word size of OS: 64-bit                          #Word size of OS: 64-bit
#Version: 0.14.3389      #Word size of FreeCAD: 64-bit                     #Word size of FreeCAD: 64-bit
#Python version: 2.6.2   #Version: 0.15.4671 (Git)                         #Version: 0.16.6700 (Git)
#Qt version: 4.5.2       #Branch: releases/FreeCAD-0-15                    #Build type: Release
#Coin version: 3.1.0     #Hash: 244b3aef360841646cbfe80a1b225c8b39c8380c   #Branch: releases/FreeCAD-0-16
#SoQt version: 1.4.1     #Python version: 2.7.8                            #Hash: 7b925d11aa69ac405b423635adb1e2833f18a817
#OCC version: 6.5.1      #Qt version: 4.8.6                                #Python version: 2.7.8
#                        #Coin version: 4.0.0a                             #Qt version: 4.8.6
#                        #OCC version: 6.8.0.oce-0.17                      #Coin version: 4.0.0a
                                                                           #OCC version: 6.8.0.oce-0.17

__title__   = "BoundingBox_Tracing"
__author__  = "Mario52"
__url__     = "http://www.freecadweb.org/index-fr.html"
__version__ = "0.4"
__date__    = "04/06/2016"

import FreeCAD, FreeCADGui, Draft, Part
App = FreeCAD

createVol = 1            # give 1 for create Volume # mettre a 1 pour creer un volume

selEx = FreeCADGui.Selection.getSelectionEx()
objs = [selobj.Object for selobj in selEx]
if len(objs) >= 1:
    s = objs[0].Shape

    # LineColor
    red   = 1.0  # 1 = 255
    green = 0.0  #
    blue  = 0.0  #

    # boundBox
    boundBox_ = s.BoundBox
    boundBoxLX = boundBox_.XLength
    boundBoxLY = boundBox_.YLength
    boundBoxLZ = boundBox_.ZLength

    a = str(boundBox_)
    a,b = a.split('(')
    c = b.split(',')
    oripl_X = float(c[0])
    oripl_Y = float(c[1])
    oripl_Z = float(c[2])

    App.Console.PrintMessage(str(boundBox_)+"\r\n")
    App.Console.PrintMessage("Rectangle      : "+str(boundBox_.XLength)+" x "+str(boundBox_.YLength)+" x "+str(boundBox_.ZLength)+"\r\n")

    if (createVol == 1) and (boundBoxLX > 0) and (boundBoxLY > 0) and (boundBoxLZ > 0):  # Create Volume
        BDvol = App.ActiveDocument.addObject("Part::Box","BoundBoxVolume")
        #BDvol.Label = "BoundBoxVolume"
        BDvol.Length.Value = boundBoxLX
        BDvol.Width.Value  = boundBoxLY
        BDvol.Height.Value = boundBoxLZ
        BDvol.Placement=App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
        FreeCADGui.ActiveDocument.getObject(BDvol.Name).LineColor  = (red, green, blue)
        FreeCADGui.ActiveDocument.getObject(BDvol.Name).PointColor = (red, green, blue)
        FreeCADGui.ActiveDocument.getObject(BDvol.Name).ShapeColor = (red, green, blue)
        FreeCADGui.ActiveDocument.getObject(BDvol.Name).Transparency = 80
        App.Console.PrintMessage("BoundBoxVolume : " + str(BDvol.Shape.Volume)+"\r\n")
    else:
        App.Console.PrintMessage("Not BoundBox possible"+"\r\n")
    App.Console.PrintMessage("_____________________"+"\r\n")

    ##### 
    try:
        if (boundBox_.XLength and boundBox_.YLength) > 0.0:
            pl_0 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(0.0,0.0,0.0))
            double = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.YLength,placement=pl_0,face=False,support=None) #OK
            double.Label = "BoundBoxRectangle_Bo"
            FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
#        else:
#            App.Console.PrintError("not value 0"+"\n")
    except:
        App.Console.PrintError("not done 0"+"\n")
    try:
        if (boundBox_.XLength and boundBox_.YLength) > 0.0:
            pl_1 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z+boundBoxLZ), App.Rotation(0.0,0.0,0.0))
            double = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.YLength,placement=pl_1,face=False,support=None) #Ok
            double.Label = "BoundBoxRectangle_To"
            FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
#        else:
#            App.Console.PrintError("not value 1"+"\n")
    except:
        App.Console.PrintError("not done 1"+"\n")
    try:
        if (boundBox_.XLength and boundBox_.ZLength) > 0.0:
            pl_2 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(0.0,0.0,90))
            double = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.ZLength,placement=pl_2,face=False,support=None) #Ok
            double.Label = "BoundBoxRectangle_Fr"
            FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
#        else:
#            App.Console.PrintError("not value 2"+"\n")
    except:
        App.Console.PrintError("not done 2"+"\n")
    try:
        if (boundBox_.XLength and boundBox_.ZLength) > 0.0:
            pl_3 = App.Placement(App.Vector(oripl_X,oripl_Y+boundBoxLY,oripl_Z), App.Rotation(0.0,0.0,90))
            double = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.ZLength,placement=pl_3,face=False,support=None) #Ok
            double.Label = "BoundBoxRectangle_Re"
            FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
#        else:
#            App.Console.PrintError("not value 3"+"\n")
    except:
        App.Console.PrintError("not done 3"+"\n")
    try:
        if (boundBoxLY and boundBox_.ZLength) > 0.0:
            pl_4 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(90,0.0,90))
            double = Draft.makeRectangle(length=boundBoxLY,height=boundBox_.ZLength,placement=pl_4,face=False,support=None) #Ok
            double.Label = "BoundBoxRectangle_Le"
            FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
#        else:
#            App.Console.PrintError("not value 4"+"\n")
    except:
        App.Console.PrintError("not done 4"+"\n")
    try:
        if (boundBoxLY and boundBoxLZ) > 0.0:
            pl_5 = App.Placement(App.Vector(oripl_X+boundBoxLX,oripl_Y,oripl_Z), App.Rotation(90,0.0,90))
            double = Draft.makeRectangle(length=boundBoxLY,height=boundBoxLZ,placement=pl_5,face=False,support=None) #Ok
            double.Label = "BoundBoxRectangle_Ri"
            FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
#        else:
#            App.Console.PrintError("not value 5"+"\n")
    except:
        App.Console.PrintError("not done 5"+"\n")
    #####
    App.ActiveDocument.recompute()
else:
    App.Console.PrintMessage("Select an object !"+"\n")

Version

ver 0.4 le 04/06/2016 : test si une valeur = 0 alors ne crée pas de boundbox (ex: objet Draft)