by adom
0603 SMD Green LED · 3.2 V drop · 25 mA max
master
John Lauer
LED colour pass: coloured STEP is the default (lens colour from the datasheet dominant wavelength, softened), plain STE…
c7192f0
20d ago
#!/usr/bin/env python3
"""Dump every face of a STEP: index, colour (surf/gen), surface type, bbox, area. For picking lens faces."""
import sys
from OCP.STEPCAFControl import STEPCAFControl_Reader
from OCP.TDocStd import TDocStd_Document
from OCP.TCollection import TCollection_ExtendedString
from OCP.XCAFDoc import XCAFDoc_DocumentTool, XCAFDoc_ColorType
from OCP.TDF import TDF_ChildIterator
from OCP.Quantity import Quantity_Color
from OCP.Bnd import Bnd_Box
from OCP.BRepBndLib import BRepBndLib
from OCP.TopExp import TopExp_Explorer
from OCP.TopAbs import TopAbs_FACE, TopAbs_SOLID
from OCP.BRepAdaptor import BRepAdaptor_Surface
from OCP.GProp import GProp_GProps
from OCP.TopoDS import TopoDS
from OCP.BRepGProp import BRepGProp
doc = TDocStd_Document(TCollection_ExtendedString("d"))
r = STEPCAFControl_Reader(); r.SetColorMode(True); r.SetNameMode(True); r.ReadFile(sys.argv[1]); r.Transfer(doc)
st = XCAFDoc_DocumentTool.ShapeTool_s(doc.Main()); ct = XCAFDoc_DocumentTool.ColorTool_s(doc.Main())
free=[]
it=TDF_ChildIterator(st.Label(),False)
while it.More():
l=it.Value(); it.Next()
if st.IsFree_s(l) and st.IsTopLevel(l): free.append(l)
for i,l in enumerate(free,1):
s = st.GetShape_s(l)
ex = TopExp_Explorer(s, TopAbs_SOLID); ns=0
while ex.More(): ns+=1; ex.Next()
print('free shape', i, 'solids', ns)
ex = TopExp_Explorer(s, TopAbs_SOLID); si=0
while ex.More():
sol = ex.Current(); ex.Next(); si+=1
b = Bnd_Box(); BRepBndLib.Add_s(sol, b); mn, mx = b.CornerMin(), b.CornerMax()
c = Quantity_Color(); sc = ''
for t in (XCAFDoc_ColorType.XCAFDoc_ColorSurf, XCAFDoc_ColorType.XCAFDoc_ColorGen):
if ct.GetColor(sol, t, c): sc = f"{c.Red():.2f},{c.Green():.2f},{c.Blue():.2f}"; break
print(f' solid {si} col={sc} x {mn.X():.3f}..{mx.X():.3f} y {mn.Y():.3f}..{mx.Y():.3f} z {mn.Z():.3f}..{mx.Z():.3f}')
fx = TopExp_Explorer(sol, TopAbs_FACE); fi=0
while fx.More():
f = fx.Current(); fx.Next(); fi+=1
col = ''
for t in (XCAFDoc_ColorType.XCAFDoc_ColorSurf, XCAFDoc_ColorType.XCAFDoc_ColorGen):
if ct.GetColor(f, t, c): col = f"{c.Red():.2f},{c.Green():.2f},{c.Blue():.2f}"; break
b = Bnd_Box(); BRepBndLib.Add_s(f, b); mn, mx = b.CornerMin(), b.CornerMax()
g = GProp_GProps(); BRepGProp.SurfaceProperties_s(f, g)
ty = BRepAdaptor_Surface(TopoDS.Face(f)).GetType()
print(f' f{fi:3d} {str(ty).split(".")[-1]:22s} col={col:15s} area={g.Mass():.4f} x {mn.X():.3f}..{mx.X():.3f} y {mn.Y():.3f}..{mx.Y():.3f} z {mn.Z():.3f}..{mx.Z():.3f}')