Macro Traccia contenitore

From FreeCAD Documentation
Revision as of 19:51, 8 May 2017 by FuzzyBot (talk | contribs) (Updating to match new version of source page)

File:BoundBoxTracing Macro BoundingBox Tracing

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

Macro version: 0.5 (08/05/2017)
Author: Mario52
Author
Mario52
Download
None
Links
Macro Version
0.5 (08/05/2017)
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
None

Descrizione

Questa macro crea una traccia rossa di 6 rettangoli (modificabile) del parallelepipedo contenitore dell'oggetto.

CenterFace

Utilizzo

Selezionare l'oggetto e lanciare la macro. Vengono creati 6 rettangoli rossi attorno all'oggetto, il colore può essere cambiato.

Se createVol = 1 (Linea 29) viene creato un volume

Per cambiare il colore dei punti modificare le righe 37, 38, 39

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

Icona

Scaricare il file immagine e copiarlo nel proprio repertorio macro.

Cliccare sull'immagine con il tasto destro del mouse e salvarla nella nuova posizione selezionando "Salva oggetto con nome ..."

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.5"
__date__    = "08/05/2017"

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:
    if hasattr(objs[0], "Shape"):
        s = objs[0].Shape
    elif hasattr(objs[0], "Mesh"):      # upgrade with wmayer thanks #http://forum.freecadweb.org/viewtopic.php?f=13&t=22331
        s = objs[0].Mesh
    elif hasattr(objs[0], "Points"):
        s = objs[0].Points

    # 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")

Versione

ver 0.5 le 08/05/2017 : upgrade now accept the "mesh" and "Points" thanks wmayer Makro Bounding-Box für STL importierte Teile und für Punktewolken

ver 0.4 il 04/06/2016 : testo se value = 0 allora non crea il boundbox (esempio: obietto Draft)