New module: Show
A module for gathering code related to visibility automation and the like. Contains DepGraphTools.py and TempoVis.py, to be withdrawn from Part/AttachmentEditor. Also: changes to TempoVis: * keep TempoVis from from raising (TempoVis is non-essential functionality, so breaking execution of unsuspecting routines that use it seems like a bad idea. * implement saving/restoring camera (Unfortunately, I failed to implement nice animated restoration.) * almost proper support of saving to file (I still couldn't figure out a way to restore reference to document and viewer. So, falling to using active ones instead (might cause bugs).)
This commit is contained in:
82
src/Mod/Show/DepGraphTools.py
Normal file
82
src/Mod/Show/DepGraphTools.py
Normal file
@@ -0,0 +1,82 @@
|
||||
#/***************************************************************************
|
||||
# * Copyright (c) Victor Titov (DeepSOIC) *
|
||||
# * (vv.titov@gmail.com) 2016 *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This library is free software; you can redistribute it and/or *
|
||||
# * modify it under the terms of the GNU Library General Public *
|
||||
# * License as published by the Free Software Foundation; either *
|
||||
# * version 2 of the License, or (at your option) any later version. *
|
||||
# * *
|
||||
# * This library 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 library; see the file COPYING.LIB. If not, *
|
||||
# * write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
# * Suite 330, Boston, MA 02111-1307, USA *
|
||||
# * *
|
||||
# ***************************************************************************/
|
||||
|
||||
import FreeCAD as App
|
||||
|
||||
def getAllDependencies(feat):
|
||||
'''getAllDependencies(feat): gets all features feat depends on, directly or indirectly.
|
||||
Returns a list, with deepest dependencies last. feat is not included in the list, except
|
||||
if the feature depends on itself (dependency loop).'''
|
||||
list_traversing_now = [feat]
|
||||
set_of_deps = set()
|
||||
list_of_deps = []
|
||||
|
||||
while len(list_traversing_now) > 0:
|
||||
list_to_be_traversed_next = []
|
||||
for feat in list_traversing_now:
|
||||
for dep in feat.OutList:
|
||||
if not (dep in set_of_deps):
|
||||
set_of_deps.add(dep)
|
||||
list_of_deps.append(dep)
|
||||
list_to_be_traversed_next.append(dep)
|
||||
|
||||
list_traversing_now = list_to_be_traversed_next
|
||||
|
||||
return list_of_deps
|
||||
|
||||
def getAllDependent(feat):
|
||||
'''getAllDependent(feat): gets all features that depend on feat, directly or indirectly.
|
||||
Returns a list, with deepest dependencies last. feat is not included in the list, except
|
||||
if the feature depends on itself (dependency loop).'''
|
||||
list_traversing_now = [feat]
|
||||
set_of_deps = set()
|
||||
list_of_deps = []
|
||||
|
||||
while len(list_traversing_now) > 0:
|
||||
list_to_be_traversed_next = []
|
||||
for feat in list_traversing_now:
|
||||
for dep in feat.InList:
|
||||
if not (dep in set_of_deps):
|
||||
set_of_deps.add(dep)
|
||||
list_of_deps.append(dep)
|
||||
list_to_be_traversed_next.append(dep)
|
||||
|
||||
list_traversing_now = list_to_be_traversed_next
|
||||
|
||||
return list_of_deps
|
||||
|
||||
def isContainer(obj):
|
||||
'''isContainer(obj): returns True if obj is an object container, such as
|
||||
Group, Part, Body. The important characterisic of an object being a
|
||||
container is its action on visibility of linked objects. E.g. a
|
||||
Part::Compound is not a group, because it does not affect visibility
|
||||
of originals. Documents are considered containers, too.'''
|
||||
|
||||
if obj.isDerivedFrom("App::DocumentObjectGroup"):
|
||||
return True
|
||||
if obj.isDerivedFrom("PartDesign::Body"):
|
||||
return True
|
||||
if obj.isDerivedFrom("App::Origin"):
|
||||
return True
|
||||
if obj.isDerivedFrom('App::Document'):
|
||||
return True
|
||||
Reference in New Issue
Block a user