gp_Pnt P11( -3000, 8000, 0 ); // point 1 on line 1 gp_Pnt P12( 2000, -5000, 0 ); // point 2 on line 1 gp_Pnt P21( 3000, 8000, 0 ); // point 1 on line 2 gp_Pnt P22( -2000, -5000, 0 ); // point 2 on line 2 gp_Dir R1( P12.X()-P11.X(), P12.Y()-P11.Y(), 0 ); // vector P11->P12 gp_Dir R2( P22.X()-P21.X(), P22.Y()-P21.Y(), 0 ); // vector P21->P22 gp_Lin L1( P11, R1 ); gp_Lin L2( P21, R2 ); // the ranges for the edges, here the eclidian distances between P11,P12 rsp. P21,P22 double r1 = sqrt( (P12.X()-P11.X())*(P12.X()-P11.X()) + (P12.Y()-P11.Y())*(P12.Y()-P11.Y()) ); double r2 = sqrt( (P22.X()-P21.X())*(P22.X()-P21.X()) + (P22.Y()-P21.Y())*(P22.Y()-P21.Y()) ); TopoDS_Edge E1, E2; BRepBuilderAPI_MakeEdge EB1( L1, P11, P12 ); if( EB1.IsDone() ) { E1 = EB1.Edge(); } BRepBuilderAPI_MakeEdge EB2( L2, P21, P22 ); if( EB2.IsDone() ) { E2 = EB2.Edge(); } IntTools_EdgeEdge IEE; IEE.SetEdge1( E1 ); IEE.SetEdge2( E2 ); IEE.SetRange1( 0, r1 ); IEE.SetRange2( 0, r2 ); IEE.Perform(); // never returns