main
John Lauer Publish 0.1.0 523d7b7 9d ago
"""Original nominal Harwin 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()
# Cut taper wedges from a box; keep the top's analytic +Z plane for metadata.
N=2
body=BRepPrimAPI_MakeBox(gp_Pnt(-1.27,-(N-1)*2.54-1.27,0),2.54,N*2.54,2.54).Shape()
parts=[]
for i in range(N):
 y=-i*2.54
 pin=BRepPrimAPI_MakeBox(gp_Pnt(-.32,y-.32,-3),.64,.64,11.64).Shape()
 body=BRepAlgoAPI_Cut(body,pin).Shape()
 parts.append((f'Contact{i+1}_Nominal_Tin',pin,(.72,.73,.75)))
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('M20-9990246_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/'m20-9990246.step'))==IFSelect_RetDone
print('WROTE',out/'m20-9990246.step')