Macro Print SceneGraph: Difference between revisions

From FreeCAD Documentation
(Marked this version for translation)
(Start from global top level node so as to include camera)
Line 4: Line 4:
</translate>
</translate>
{{Code|code=
{{Code|code=
# -*- coding: utf-8 -*-
"""
"""
***************************************************************************
***************************************************************************
Line 13: Line 14:
* *
* *
***************************************************************************
***************************************************************************
* Copyright (c) 2017 Richard P. Parkins, M. A. *
* Copyright © 2017 Richard P. Parkins, M. A. *
* *
* *
* This file is a supplement to the FreeCAD CAx development system. *
* This file is a supplement to the FreeCAD CAx development system. *
Line 36: Line 37:
__title__ = "Print_SceneGraph"
__title__ = "Print_SceneGraph"
__author__ = "Aleph0"
__author__ = "Aleph0"
__version__ = "00.02"
__version__ = "00.03"
__date__ = "15/10/2017"
__date__ = "24/10/2017"
__Comment__ = "SceneGraph explorer"
__Comment__ = "SceneGraph explorer"
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Print_SceneGraph"
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Print_SceneGraph"
Line 59: Line 60:


def printFields(node,indent):
def printFields(node,indent):
nm = node.getName().__str__()
if nm != "":
FreeCAD.Console.PrintLog(indent+"name: "+nm+"\n")
fl = node.getFieldData()
fl = node.getFieldData()
for i in range(fl.getNumFields()):
for i in range(fl.getNumFields()):
name = fl.getFieldName(i)
name = fl.getFieldName(i)
if name.__str__() != "point":
val = node.getField(fl.getFieldName(i)).get()
val = node.getField(fl.getFieldName(i)).get()
FreeCAD.Console.PrintLog(indent+str(name)+" -> "+str(val)+"\n")
FreeCAD.Console.PrintLog(indent+str(name)+" -> "+str(val)+"\n")


def printTree(node,indent):
def printTree(node,indent):
FreeCAD.Console.PrintLog(indent+node.__str__()+"\n")
FreeCAD.Console.PrintLog(indent+node.__str__()+"\n")
if node.getTypeId().getName().__str__() == 'Coordinate3':
if node.getTypeId().getName().__str__() == "Coordinate3":
points=node.point
for i in range(points.getNum()):
FreeCAD.Console.PrintLog(indent+" "+str(i)+": "+str(points[i].getValue())+"\n")
if node.getTypeId().getName().__str__() == "Coordinate4":
points=node.point
points=node.point
for i in range(points.getNum()):
for i in range(points.getNum()):
FreeCAD.Console.PrintLog(indent+" "+str(i)+": "+str(points[i].getValue())+"\n")
FreeCAD.Console.PrintLog(indent+" "+str(i)+": "+str(points[i].getValue())+"\n")
printFields(node,indent+" ")
printFields(node,indent+" ")
if node.getChildren().__str__() <> 'None':
if node.getChildren().__str__() != "None":
for i in range(node.getNumChildren()):
for i in range(node.getNumChildren()):
printTree(node.getChild(i),indent+" ")
printTree(node.getChild(i),indent+" ")

sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
ad = FreeCADGui.ActiveDocument
printTree(sg,"")
if ad == None:
FreeCAD.Console.PrintLog("No active document\n")
else:
QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
printTree(ad.ActiveView.getViewer().getSoEventManager().getSceneGraph(), "")
QtGui.QApplication.restoreOverrideCursor()
}}
}}

Revision as of 06:34, 24 October 2017

File:Text-x-python Macro_Print_SceneGraph

Description
Prints the SceneGraph

Macro version: 00.02
Last modified: 2017-10-17
Author: Aleph0
Author
Aleph0
Download
None
Links
Macro Version
00.02
Date last modified
2017-10-17
FreeCAD Version(s)
None
Default shortcut
None
See also
None

# -*- coding: utf-8 -*-
"""
***************************************************************************
*                                                                         *
*   This macro traverses the SceneGraph and prints all the nodes and      *
*   their fields in the Report View window. It can be used just for       *
*   information or you can add code to modify parts of the SceneGraph in  *
*   some way or print more details for particular types of node.          *
*                                                                         *
***************************************************************************
*   Copyright © 2017 Richard P. Parkins, M. A.                          *
*                                                                         *
*   This file is a supplement to the FreeCAD CAx development system.      *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU Lesser General Public License (LGPL)    *
*   as published by the Free Software Foundation; either version 2 of     *
*   the License, or (at your option) any later version.                   *
*   for detail see the LICENCE text file.                                 *
*                                                                         *
*   This software is distributed in the hope that it will be useful,      *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU Library General Public License for more details.                  *
*                                                                         *
*   You should have received a copy of the GNU Library General Public     *
*   License along with this macro; if not, write to the Free Software     *
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
*   USA                                                                   *
***************************************************************************
"""
__title__   = "Print_SceneGraph"
__author__  = "Aleph0"
__version__ = "00.03"
__date__    = "24/10/2017"
__Comment__ = "SceneGraph explorer"
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Print_SceneGraph"
__Help__ = "see first few lines of macro text"
__Status__ = "stable"
__Requires__ = "freecad 0.16"
#OS: Ubuntu 14.04.5 LTS
#Word size of OS: 64-bit
#Word size of FreeCAD: 64-bit
#Version: 0.16.6703 (Git)
#Build type: None
#Branch: releases/FreeCAD-0-16
#Hash: 2ce5c8d2e3020d05005ed71f710e09e9aa561f40
#Python version: 2.7.6
#Qt version: 4.8.6
#Coin version: 4.0.0a
#OCC version: 6.8.0.oce-0.17

import FreeCAD
from pivy import coin

def printFields(node,indent):
    nm = node.getName().__str__()
    if nm != "":
        FreeCAD.Console.PrintLog(indent+"name: "+nm+"\n") 
    fl = node.getFieldData()
    for i in range(fl.getNumFields()):
        name = fl.getFieldName(i)
        if name.__str__() != "point":
            val = node.getField(fl.getFieldName(i)).get()
            FreeCAD.Console.PrintLog(indent+str(name)+" -> "+str(val)+"\n")

def printTree(node,indent):
    FreeCAD.Console.PrintLog(indent+node.__str__()+"\n")
    if node.getTypeId().getName().__str__() == "Coordinate3":
        points=node.point
        for i in range(points.getNum()):
            FreeCAD.Console.PrintLog(indent+" "+str(i)+": "+str(points[i].getValue())+"\n")
    if node.getTypeId().getName().__str__() == "Coordinate4":
        points=node.point
        for i in range(points.getNum()):
            FreeCAD.Console.PrintLog(indent+" "+str(i)+": "+str(points[i].getValue())+"\n")
    printFields(node,indent+" ")
    if node.getChildren().__str__() != "None":
        for i in range(node.getNumChildren()):
            printTree(node.getChild(i),indent+" ")

ad = FreeCADGui.ActiveDocument
if ad == None:
    FreeCAD.Console.PrintLog("No active document\n")
else:
    QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
    printTree(ad.ActiveView.getViewer().getSoEventManager().getSceneGraph(), "")
    QtGui.QApplication.restoreOverrideCursor()