main
John Lauer Publish 0.1.0 94e7af6 9d ago
"""Original nominal Samtec header envelope; shared OCP kernel, not vendor CAD.
Flat pin tips and plain housing simplify manufacturer chamfers, recesses and mold details.
"""
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()
# Nominal single-row geometry. A=3.05 is seating plane to tip per Fig1.
N=5
body=BRepPrimAPI_MakeBox(gp_Pnt(-1.08,-5.715,0),2.16,6.35,.86).Shape()
parts=[]
for i in range(N):
 y=-i*1.27
 pin=BRepPrimAPI_MakeBox(gp_Pnt(-.205,y-.205,-2.29),.41,.41,5.34).Shape()
 body=BRepAlgoAPI_Cut(body,pin).Shape()
 tail=BRepPrimAPI_MakeBox(gp_Pnt(-.205,y-.205,-2.29),.41,.41,3.15).Shape()
 post=BRepPrimAPI_MakeBox(gp_Pnt(-.205,y-.205,.86),.41,.41,2.19).Shape()
 parts.append((f'Contact{i+1}_Tail_Nominal_Tin',tail,(.72,.73,.75)))
 parts.append((f'Contact{i+1}_Post_Nominal_Gold',post,(.72,.56,.22)))
parts.insert(0,('Housing_Nominal_Black',body,(.055,.06,.065)))
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('FTS-105-01-L-S_AI_Nominal'))
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/'fts-105-01-l-s.step'))==IFSelect_RetDone
print('WROTE',out/'fts-105-01-l-s.step')