component
B140-13-F Schottky boost diode
Public Made by Adomby adom
Exact two-terminal part with documented polarity or suffix identity; physical qualification pending.
main
"""Original nominal Diodes SMA envelope; shared OCP kernel, not manufacturer CAD.
Mold taper, J-lead bends and cathode band are illustrative nominal geometry.
"""
import sys
from pathlib import Path
from OCP.gp import gp_Pnt,gp_Vec
from OCP.BRepBuilderAPI import BRepBuilderAPI_MakePolygon,BRepBuilderAPI_MakeFace
from OCP.BRepOffsetAPI import BRepOffsetAPI_ThruSections
from OCP.BRepPrimAPI import BRepPrimAPI_MakePrism,BRepPrimAPI_MakeBox
from OCP.BRepAlgoAPI import BRepAlgoAPI_Cut
from OCP.TopoDS import TopoDS_Compound
from OCP.BRep import BRep_Builder
from OCP.TopLoc import TopLoc_Location
from OCP.TDocStd import TDocStd_Document
from OCP.TCollection import TCollection_ExtendedString
from OCP.XCAFDoc import XCAFDoc_DocumentTool,XCAFDoc_ColorType
from OCP.TDataStd import TDataStd_Name
from OCP.Quantity import Quantity_Color,Quantity_TOC_RGB
from OCP.STEPCAFControl import STEPCAFControl_Writer
from OCP.STEPControl import STEPControl_AsIs
from OCP.IFSelect import IFSelect_RetDone
out=Path(sys.argv[1]);out.mkdir(parents=True,exist_ok=True)
def wire(points):
p=BRepBuilderAPI_MakePolygon()
for xyz in points:p.Add(gp_Pnt(*xyz))
p.Close();return p.Wire()
# Cut taper wedges from a box; keep the top's analytic +Z plane for metadata.
body=BRepPrimAPI_MakeBox(gp_Pnt(-2.15,-1.325,.125),4.3,2.65,2.055).Shape()
for axis,outer,inner,span in [('x',2.15,1.95,4.0),('y',1.325,1.225,6.0)]:
for side in [-1,1]:
for triangle in [[(inner,.125),(outer,.125),(outer,1.1)],[(outer,1.1),(outer,2.18),(inner,2.18)]]:
points=[(side*v,-span/2,z) if axis=='x' else (-span/2,side*v,z) for v,z in triangle]
cut=BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(wire(points)).Face(),gp_Vec(0,span,0) if axis=='x' else gp_Vec(span,0,0)).Shape();body=BRepAlgoAPI_Cut(body,cut).Shape()
parts=[]
profile=[(1.5,0),(2.6,0),(2.6,1.2),(2.0,1.2),(2.0,1.0),(2.4,1.0),(2.4,.2),(1.5,.2)]
for n,side in [(1,-1),(2,1)]:
shape=BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(wire([(side*x,-.725,z) for x,z in profile])).Face(),gp_Vec(0,1.45,0)).Shape();body=BRepAlgoAPI_Cut(body,shape).Shape();parts.append(('Cathode' if n==1 else 'Anode',shape,(.72,.73,.75)))
parts.insert(0,('MoldedBody_Nominal',body,(.07,.075,.08)))
band=BRepPrimAPI_MakeBox(gp_Pnt(-1.80,-1.2,2.18),.3,2.4,.003).Shape();parts.append(('CathodeBand_Nominal',band,(.78,.78,.76)))
doc=TDocStd_Document(TCollection_ExtendedString('BinXCAF'));st=XCAFDoc_DocumentTool.ShapeTool_s(doc.Main());ct=XCAFDoc_DocumentTool.ColorTool_s(doc.Main())
compound=TopoDS_Compound();builder=BRep_Builder();builder.MakeCompound(compound)
assembly=st.AddShape(compound,True);TDataStd_Name.Set_s(assembly,TCollection_ExtendedString('B140_13_F_AI_Nominal_SMA'))
for name,shape,color in parts:
label=st.AddShape(shape,False);TDataStd_Name.Set_s(label,TCollection_ExtendedString(name));ct.SetColor(label,Quantity_Color(*color,Quantity_TOC_RGB),XCAFDoc_ColorType.XCAFDoc_ColorGen);st.AddComponent(assembly,label,TopLoc_Location())
st.UpdateAssemblies();writer=STEPCAFControl_Writer();writer.SetColorMode(True);writer.SetNameMode(True);writer.Transfer(doc,STEPControl_AsIs)
assert writer.Write(str(out/'b140-13-f-nominal.step'))==IFSelect_RetDone
print('WROTE',out/'b140-13-f-nominal.step')