FreeCAD/src/Mod/OpenSCAD/colorcodeshapes.py
2014-05-16 19:24:49 +02:00

113 lines
4.5 KiB
Python

#***************************************************************************
#* *
#* Copyright (c) 2012 Sebastian Hoogen <github@sebastianhoogen.de> *
#* *
#* 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 program 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 program; if not, write to the Free Software *
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
#* USA *
#* *
#***************************************************************************
__title__="FreeCAD OpenSCAD Workbench - 2D helper fuctions"
__author__ = "Sebastian Hoogen"
__url__ = ["http://www.freecadweb.org"]
'''
This Script includes python functions to find out the most basic shape type
in a compound and to change the color of shapes according to their shape type
'''
import FreeCAD
def shapedict(shapelst):
return dict([(shape.hashCode(),shape) for shape in shapelst])
def shapeset(shapelst):
return set([shape.hashCode() for shape in shapelst])
def mostbasiccompound(comp):
'''searches fo the most basic shape in a Compound'''
solids=shapeset(comp.Solids)
shells=shapeset(comp.Shells)
faces=shapeset(comp.Faces)
wires=shapeset(comp.Wires)
edges=shapeset(comp.Edges)
vertexes=shapeset(comp.Vertexes)
#FreeCAD.Console.PrintMessage('%s\n' % (str((len(solids),len(shells),len(faces),len(wires),len(edges),len(vertexes)))))
for shape in comp.Solids:
shells -= shapeset(shape.Shells)
faces -= shapeset(shape.Faces)
wires -= shapeset(shape.Wires)
edges -= shapeset(shape.Edges)
vertexes -= shapeset(shape.Vertexes)
for shape in comp.Shells:
faces -= shapeset(shape.Faces)
wires -= shapeset(shape.Wires)
edges -= shapeset(shape.Edges)
vertexes -= shapeset(shape.Vertexes)
for shape in comp.Faces:
wires -= shapeset(shape.Wires)
edges -= shapeset(shape.Edges)
vertexes -= shapeset(shape.Vertexes)
for shape in comp.Wires:
edges -= shapeset(shape.Edges)
vertexes -= shapeset(shape.Vertexes)
for shape in comp.Edges:
vertexes -= shapeset(shape.Vertexes)
#FreeCAD.Console.PrintMessage('%s\n' % (str((len(solids),len(shells),len(faces),len(wires),len(edges),len(vertexes)))))
#return len(solids),len(shells),len(faces),len(wires),len(edges),len(vertexes)
if vertexes:
return "Vertex"
elif edges:
return "Edge"
elif wires:
return "Wire"
elif faces:
return "Face"
elif shells:
return "Shell"
elif solids:
return "Solid"
def colorcodeshapes(objs):
shapecolors={
"Compound":(0.3,0.3,0.4),
"CompSolid":(0.1,0.5,0.0),
"Solid":(0.0,0.8,0.0),
"Shell":(0.8,0.0,0.0),
"Face":(0.6,0.6,0.0),
"Wire":(0.1,0.1,0.1),
"Edge":(1.0,1.0,1.0),
"Vertex":(8.0,8.0,8.0),
"Shape":(0.0,0.0,1.0),
None:(0.0,0.0,0.0)}
for obj in objs:
if hasattr(obj,'Shape'):
try:
if obj.Shape.isNull():
continue
if not obj.Shape.isValid():
color=(1.0,0.4,0.4)
else:
st=obj.Shape.ShapeType
if st in ["Compound","CompSolid"]:
st = mostbasiccompound(obj.Shape)
color=shapecolors[st]
obj.ViewObject.ShapeColor = color
except:
raise
#colorcodeshapes(App.ActiveDocument.Objects)