def bisect_lineline(event=None): display.EraseAll() li1 = gp_Lin2d(gp_Pnt2d(), gp_Dir2d(1, 0)) li2 = gp_Lin2d(gp_Pnt2d(), gp_Dir2d(0, 1)) bi = GccAna_Lin2dBisec(li1, li2) bi_li1 = bi.ThisSolution(1) bi_li2 = bi.ThisSolution(2) for i in [li1, li2]: display.DisplayShape(make_edge2d(i)) for i in [bi_li1, bi_li2]: display.DisplayColoredShape(make_edge2d(i), 'BLUE') display.FitAll()
def geomLineBldr(self, cline): """Convert native cline to type: <Geom_Line>.""" a, b, c = cline gpLin2d = gp_Lin2d(a, b, c) gpDir2d = gpLin2d.Direction() gpPnt2d = gpLin2d.Location() gpPnt = gp_Pnt(gpPnt2d.X(), gpPnt2d.Y(), 0).Transformed(self.Trsf) gpDir = gp_Dir(gpDir2d.X(), gpDir2d.Y(), 0).Transformed(self.Trsf) return Geom_Line(gpPnt, gpDir)
def bisect_linecircle(event=None): display.EraseAll() ci1 = gp_Circ2d(gp_Ax22d(), 10000) li1 = gp_Lin2d(gp_Pnt2d(2000000, 20), gp_Dir2d(0, 1)) bi = GccAna_CircLin2dBisec(ci1, li1) assert bi.IsDone() bisec = bi.ThisSolution(1) pb = bisec.Parabola() display.DisplayShape([make_edge2d(ci1), make_edge2d(li1)]) display.DisplayColoredShape(make_edge2d(pb), 'BLUE') display.FitAll()
def makeHelixOnCyl(self): bas = BRepAdaptor_Surface(self.face) cyl = bas.Cylinder() delta_v = bas.LastVParameter() - bas.FirstVParameter() v_final = bas.LastVParameter() dv_du = self.pitch / (2*pi) l = delta_v / sin(atan(dv_du)) aLine2d = gp_Lin2d(gp_Pnt2d(bas.FirstUParameter(),bas.FirstVParameter()), gp_Dir2d(1,dv_du)) if not self.reverse_helix: aSegment = GCE2d_MakeSegment(aLine2d, 0.0, l) else: aSegment = GCE2d_MakeSegment(aLine2d, l, 0.0) helix_edge = BRepBuilderAPI_MakeEdge(aSegment.Value(), Geom_CylindricalSurface(cyl)).Edge() #self.aLine2d = aLine2d #self.aSegment = aSegment self.helix_edge = helix_edge return helix_edge
##the Free Software Foundation, either version 3 of the License, or ##(at your option) any later version. ## ##pythonOCC is distributed in the hope that it will be useful, ##but WITHOUT ANY WARRANTY; without even the implied warranty of ##MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ##GNU Lesser General Public License for more details. ## ##You should have received a copy of the GNU Lesser General Public License ##along with pythonOCC. If not, see <http://www.gnu.org/licenses/>. from math import pi from OCC.Core.gp import gp_Pnt2d, gp_XOY, gp_Lin2d, gp_Ax3, gp_Dir2d from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge from OCC.Core.Geom import Geom_CylindricalSurface from OCC.Core.GCE2d import GCE2d_MakeSegment from OCC.Display.WebGl import threejs_renderer # First build a helix aCylinder = Geom_CylindricalSurface(gp_Ax3(gp_XOY()), 6.0) aLine2d = gp_Lin2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 1.0)) aSegment = GCE2d_MakeSegment(aLine2d, 0.0, pi * 2.0) helix_edge = BRepBuilderAPI_MakeEdge(aSegment.Value(), aCylinder, 0.0, 6.0 * pi).Edge() display = threejs_renderer.ThreejsRenderer() display.DisplayShape(helix_edge, color=(1, 0, 0), line_width=1.) display.render()
from OCC.Core.gp import gp_Lin2d, gp_Pnt2d, gp_Dir2d from OCC.Display.SimpleGui import init_display # from core_geometry_utils import make_edge2d from OCC.Extend.ShapeFactory import make_edge2d display, start_display, add_menu, add_function_to_menu = init_display() # Creating 2d points p1 = gp_Pnt2d(2., 3.) p2 = gp_Pnt2d(2., 5.) display.DisplayShape(p1) display.DisplayShape(p2, update=True) # Creating a 2d line requires: a point and a direction d1 = gp_Dir2d(1., 1.) l1 = gp_Lin2d(p1, d1) display.DisplayShape(make_edge2d(l1), update=True)
def geom2dLines(self): """Return self.clines as list of type: <Geom2d_Line>.""" return [Geom2d_Line(gp_Lin2d(*cline)) for cline in self.clines]
def cut_out(base): outer = gp_Circ2d(gp_OX2d(), top_radius - 1.75 * roller_diameter) inner = gp_Circ2d(gp_OX2d(), center_radius + 0.75 * roller_diameter) geom_outer = GCE2d_MakeCircle(outer).Value() geom_inner = GCE2d_MakeCircle(inner).Value() geom_inner.Reverse() base_angle = (2. * M_PI) / mounting_hole_count hole_angle = atan(hole_radius / mounting_radius) correction_angle = 3 * hole_angle left = gp_Lin2d(gp_Origin2d(), gp_DX2d()) right = gp_Lin2d(gp_Origin2d(), gp_DX2d()) left.Rotate(gp_Origin2d(), correction_angle) right.Rotate(gp_Origin2d(), base_angle - correction_angle) geom_left = GCE2d_MakeLine(left).Value() geom_right = GCE2d_MakeLine(right).Value() inter_1 = Geom2dAPI_InterCurveCurve(geom_outer, geom_left) inter_2 = Geom2dAPI_InterCurveCurve(geom_outer, geom_right) inter_3 = Geom2dAPI_InterCurveCurve(geom_inner, geom_right) inter_4 = Geom2dAPI_InterCurveCurve(geom_inner, geom_left) if inter_1.Point(1).X() > 0: p1 = inter_1.Point(1) else: p1 = inter_1.Point(2) if inter_2.Point(1).X() > 0: p2 = inter_2.Point(1) else: p2 = inter_2.Point(2) if inter_3.Point(1).X() > 0: p3 = inter_3.Point(1) else: p3 = inter_3.Point(2) if inter_4.Point(1).X() > 0: p4 = inter_4.Point(1) else: p4 = inter_4.Point(2) trimmed_outer = GCE2d_MakeArcOfCircle(outer, p1, p2).Value() trimmed_inner = GCE2d_MakeArcOfCircle(inner, p4, p3).Value() plane = gp_Pln(gp_Origin(), gp_DZ()) arc1 = BRepBuilderAPI_MakeEdge(geomapi_To3d(trimmed_outer, plane)).Edge() lin1 = BRepBuilderAPI_MakeEdge(gp_Pnt(p2.X(), p2.Y(), 0), gp_Pnt(p3.X(), p3.Y(), 0)).Edge() arc2 = BRepBuilderAPI_MakeEdge(geomapi_To3d(trimmed_inner, plane)).Edge() lin2 = BRepBuilderAPI_MakeEdge(gp_Pnt(p4.X(), p4.Y(), 0), gp_Pnt(p1.X(), p1.Y(), 0)).Edge() cutout_wire = BRepBuilderAPI_MakeWire(arc1) cutout_wire.Add(lin1) cutout_wire.Add(arc2) cutout_wire.Add(lin2) # Turn the wire into a face cutout_face = BRepBuilderAPI_MakeFace(cutout_wire.Wire()) filleted_face = BRepFilletAPI_MakeFillet2d(cutout_face.Face()) explorer = BRepTools_WireExplorer(cutout_wire.Wire()) while explorer.More(): vertex = explorer.CurrentVertex() filleted_face.AddFillet(vertex, roller_radius) explorer.Next() cutout = BRepPrimAPI_MakePrism(filleted_face.Shape(), gp_Vec(0.0, 0.0, thickness)).Shape() result = base rotate = gp_Trsf() for i in range(0, mounting_hole_count): rotate.SetRotation(gp_OZ(), i * 2. * M_PI / mounting_hole_count) rotated_cutout = BRepBuilderAPI_Transform(cutout, rotate, True) result = BRepAlgoAPI_Cut(result, rotated_cutout.Shape()).Shape() return result