Macro BoundingBox Tracing: Difference between revisions

From FreeCAD Documentation
(Marked this version for translation)
(version 0.4 "test value = 0 then not create boundbox (ex: object Draft))
Line 46: Line 46:
# Macro_BoundingBox_Tracing
# Macro_BoundingBox_Tracing
#
#
#OS: Windows Vista #OS: Windows 8.1
#OS: Windows Vista #OS: Windows 8.1 #OS: Windows 10
#Platform: 32-bit #Word size of OS: 64-bit
#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
#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)
#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
#Qt version: 4.5.2 #Branch: releases/FreeCAD-0-15 #Build type: Release
#Coin version: 3.1.0 #Hash: 244b3aef360841646cbfe80a1b225c8b39c8380c
#Coin version: 3.1.0 #Hash: 244b3aef360841646cbfe80a1b225c8b39c8380c #Branch: releases/FreeCAD-0-16
#SoQt version: 1.4.1 #Python version: 2.7.8
#SoQt version: 1.4.1 #Python version: 2.7.8 #Hash: 7b925d11aa69ac405b423635adb1e2833f18a817
#OCC version: 6.5.1 #Qt version: 4.8.6
#OCC version: 6.5.1 #Qt version: 4.8.6 #Python version: 2.7.8
# #Coin version: 4.0.0a
# #Coin version: 4.0.0a #Qt version: 4.8.6
# #OCC version: 6.8.0.oce-0.17
# #OCC version: 6.8.0.oce-0.17 #Coin version: 4.0.0a
#OCC version: 6.8.0.oce-0.17


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


import FreeCAD, FreeCADGui, Draft, Part
import FreeCAD, FreeCADGui, Draft, Part
App = FreeCAD


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


selEx = FreeCADGui.Selection.getSelectionEx()
selEx = FreeCADGui.Selection.getSelectionEx()
Line 93: Line 95:
App.Console.PrintMessage("Rectangle : "+str(boundBox_.XLength)+" x "+str(boundBox_.YLength)+" x "+str(boundBox_.ZLength)+"\r\n")
App.Console.PrintMessage("Rectangle : "+str(boundBox_.XLength)+" x "+str(boundBox_.YLength)+" x "+str(boundBox_.ZLength)+"\r\n")


if createVol == 1: # Create Volume
if (createVol == 1) and (boundBoxLX > 0) and (boundBoxLY > 0) and (boundBoxLZ > 0): # Create Volume
BDvol = App.ActiveDocument.addObject("Part::Box","BoundBoxVolume")
BDvol = App.ActiveDocument.addObject("Part::Box","BoundBoxVolume")
#BDvol.Label = "BoundBoxVolume"
#BDvol.Label = "BoundBoxVolume"
Line 103: Line 105:
FreeCADGui.ActiveDocument.getObject(BDvol.Name).PointColor = (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).ShapeColor = (red, green, blue)
FreeCADGui.ActiveDocument.getObject(BDvol.Name).Transparency = 80
App.Console.PrintMessage("BoundBoxVolume : " + str(BDvol.Shape.Volume)+"\r\n")
App.Console.PrintMessage("BoundBoxVolume : " + str(BDvol.Shape.Volume)+"\r\n")
else:

App.Console.PrintMessage("Not BoundBox possible"+"\r\n")
App.Console.PrintMessage("_____________________"+"\r\n")
App.Console.PrintMessage("_____________________"+"\r\n")


#####
#####
try:
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))
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 = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.YLength,placement=pl_0,face=False,support=None) #OK
double.Label = "BoundBoxRectangle_Bo"
double.Label = "BoundBoxRectangle_Bo"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
# else:
# App.Console.PrintError("not value 0"+"\n")
except:
except:
App.Console.PrintError("not done 0"+"\n")
App.Console.PrintError("not done 0"+"\n")
try:
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))
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 = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.YLength,placement=pl_1,face=False,support=None) #Ok
double.Label = "BoundBoxRectangle_To"
double.Label = "BoundBoxRectangle_To"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
# else:
# App.Console.PrintError("not value 1"+"\n")
except:
except:
App.Console.PrintError("not done 1"+"\n")
App.Console.PrintError("not done 1"+"\n")
try:
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))
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 = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.ZLength,placement=pl_2,face=False,support=None) #Ok
double.Label = "BoundBoxRectangle_Fr"
double.Label = "BoundBoxRectangle_Fr"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
# else:
# App.Console.PrintError("not value 2"+"\n")
except:
except:
App.Console.PrintError("not done 2"+"\n")
App.Console.PrintError("not done 2"+"\n")
try:
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))
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 = Draft.makeRectangle(length=boundBox_.XLength,height=boundBox_.ZLength,placement=pl_3,face=False,support=None) #Ok
double.Label = "BoundBoxRectangle_Re"
double.Label = "BoundBoxRectangle_Re"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
# else:
# App.Console.PrintError("not value 3"+"\n")
except:
except:
App.Console.PrintError("not done 3"+"\n")
App.Console.PrintError("not done 3"+"\n")
try:
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))
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 = Draft.makeRectangle(length=boundBoxLY,height=boundBox_.ZLength,placement=pl_4,face=False,support=None) #Ok
double.Label = "BoundBoxRectangle_Le"
double.Label = "BoundBoxRectangle_Le"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
# else:
# App.Console.PrintError("not value 4"+"\n")
except:
except:
App.Console.PrintError("not done 4"+"\n")
App.Console.PrintError("not done 4"+"\n")
try:
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))
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 = Draft.makeRectangle(length=boundBoxLY,height=boundBoxLZ,placement=pl_5,face=False,support=None) #Ok
double.Label = "BoundBoxRectangle_Ri"
double.Label = "BoundBoxRectangle_Ri"
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
FreeCADGui.activeDocument().activeObject().LineColor = (red, green, blue)
# else:
# App.Console.PrintError("not value 5"+"\n")
except:
except:
App.Console.PrintError("not done 5"+"\n")
App.Console.PrintError("not done 5"+"\n")
Line 154: Line 176:
else:
else:
App.Console.PrintMessage("Select an object !"+"\n")
App.Console.PrintMessage("Select an object !"+"\n")



</syntaxhighlight>
</syntaxhighlight>
==Version==


ver 0.4 le 04/06/2016 : test if value = 0 then not create boundbox (ex: object Draft)


<languages/>
<languages/>

Revision as of 15:28, 4 June 2016

File:BoundBoxTracing Macro BoundingBox Tracing

Description
This macro red trace (editable) around the BoundingBox with 6 rectangles.

Author: Mario52
Author
Mario52
Download
None
Links
Macro Version
1.0
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
None

Description

This macro red trace (editable) around the BoundingBox 6 Faces with 6 rectangles.

CenterFace

Use

Select the object and launch the macro. 6 rectangles are colored red (can be changed)

If createVol = 1 (Line 27) one volume is created

To change the color of the dot change the lines 35, 36, 37

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

Icon

Download the file image and copy in your macro repertory.

Click the image, in the new window position the mouse over the image, click the right mouse and do "Save target as ..."

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 if value = 0 then not create boundbox (ex: object Draft)