def MouseMoveEvent(self, thePnt2d: gp_Pnt2d, buttons, modifiers): if self.myArcCenter2PAction == ArcCenter2PAction.Nothing: pass elif self.myArcCenter2PAction == ArcCenter2PAction.Input_CenterArc: self.curPnt2d = self.myAnalyserSnap.MouseMove(thePnt2d) elif self.myArcCenter2PAction == ArcCenter2PAction.Input_1ArcPoint: self.curPnt2d = self.myAnalyserSnap.MouseMoveException( self.myFirstgp_Pnt2d, thePnt2d, TangentType.Circle_CenterPnt, True) self.radius = self.myFirstgp_Pnt2d.Distance(self.curPnt2d) if self.radius == 0.0: self.radius = 1.0 self.tempGeom_Circle.SetRadius(self.radius) self.myContext.Redisplay(self.myRubberCircle, True) self.mySecondPoint.SetPnt( elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d)) elif self.myArcCenter2PAction == ArcCenter2PAction.Input_2ArcPoint: self.curPnt2d = self.myAnalyserSnap.MouseMove(thePnt2d) if self.ProjectOnCircle(self.curPnt2d): third_Pnt = elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d) self.myRubberCircle.SetCircle(self.tempGeom_Circle) p1 = elclib.Parameter(self.tempGeom_Circle.Circ(), self.mySecondPoint.Pnt()) p2 = elclib.Parameter(self.tempGeom_Circle.Circ(), third_Pnt) self.myRubberCircle.SetFirstParam(min(p1, p2)) self.myRubberCircle.SetLastParam(max(p1, p2)) self.myContext.Redisplay(self.myRubberCircle, True) # update text degree = "Degree: {}".format(round(p2 * 180 / M_PI)) self.myAIS_Label.SetText(TCollection_ExtendedString(degree)) self.myContext.Redisplay(self.myAIS_Label, True)
def SetParam(self, start: gp_Pnt2d, mid: gp_Pnt2d, end: gp_Pnt2d): self.myFirstParam = elclib.Parameter(gp_Circ2d(), start) self.myLastParam = elclib.Parameter(gp_Circ2d(), end) u = elclib.Parameter(gp_Circ2d(), mid) self.CheckParam() if self.myFirstParam < u and u < self.myLastParam or self.myLastParam < u + 2 * M_PI and u + 2 * M_PI < self.myLastParam: pass else: if self.myLastParam > 2 * M_PI: self.myLastParam -= 2 * M_PI u = self.myFirstParam else: u = self.myFirstParam + 2 * M_PI self.myFirstParam = self.myLastParam self.myLastParam = u
def MouseMoveEvent(self, thePnt2d: gp_Pnt2d, buttons, modifiers): self.curPnt2d = self.myAnalyserSnap.MouseMove(thePnt2d) if self.myArc3PAction == Arc3PAction.Nothing: pass elif self.myArc3PAction == Arc3PAction.Input_1ArcPoint: self.curPnt2d = self.myAnalyserSnap.MouseMove(thePnt2d) elif self.myArc3PAction == Arc3PAction.Input_2ArcPoint: self.mySecondPoint.SetPnt(elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d)) self.myRubberLine.SetPoints(self.myFirstPoint, self.mySecondPoint) self.myContext.Redisplay(self.myRubberLine, True) elif self.myArc3PAction == Arc3PAction.Input_3ArcPoint: self.third_Pnt = elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d) tempMakeCirc = gce_MakeCirc(self.myFirstPoint.Pnt(), self.mySecondPoint.Pnt(), self.third_Pnt) if tempMakeCirc.Status() == gce_Done: self.tempGeom_Circle.SetCirc(tempMakeCirc.Value()) self.myRubberCircle.SetCircle(self.tempGeom_Circle) self.myRubberCircle.SetFirstParam( elclib.Parameter(self.tempGeom_Circle.Circ(), self.myFirstPoint.Pnt())) self.myRubberCircle.SetLastParam(elclib.Parameter(self.tempGeom_Circle.Circ(), self.third_Pnt)) self.myContext.Redisplay(self.myRubberCircle, True) elif self.myArc3PAction == Arc3PAction.Input_PolylineArc: self.third_Pnt = elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d) self.TempGeom2d_Point.SetPnt2d(self.curPnt2d) temp2d_QualifiedCurve = Geom2dGcc_QualifiedCurve(self.temp2dAdaptor_Curve, gccent_Unqualified) tempGcc_Circ2d3Tan = Geom2dGcc_Circ2d3Tan(temp2d_QualifiedCurve, self.FirstGeom2d_Point, self.TempGeom2d_Point, 1.0e-6, 0) if (tempGcc_Circ2d3Tan.IsDone() and tempGcc_Circ2d3Tan.NbSolutions() > 0): self.temp2d_Circ = tempGcc_Circ2d3Tan.ThisSolution(1) self.u1 = elclib.Parameter(self.temp2d_Circ, self.myFirstgp_Pnt2d) self.u2 = elclib.Parameter(self.temp2d_Circ, self.mySecondgp_Pnt2d) self.temp_u1 = self.u1 + (self.u2 - self.u1) / 100 self.temp_u2 = self.u1 - (self.u2 - self.u1) / 100 self.tempu1_pnt2d = elclib.Value(self.temp_u1, self.temp2d_Circ) self.tempu2_pnt2d = elclib.Value(self.temp_u2, self.temp2d_Circ) self.dist1 = self.tempu1_pnt2d.Distance(self.midpoint2d) self.dist2 = self.tempu2_pnt2d.Distance(self.midpoint2d) if self.dist1 < self.dist2: self.tempu1_pnt2d = self.tempu2_pnt2d tempMakeCirc = gce_MakeCirc(self.myFirstPoint.Pnt(), elclib.To3d(self.curCoordinateSystem.Ax2(), self.tempu1_pnt2d), self.third_Pnt) if tempMakeCirc.Status() == gce_Done: self.tempGeom_Circle.SetCirc(tempMakeCirc.Value()) self.myRubberCircle.SetFirstParam( elclib.Parameter(self.tempGeom_Circle.Circ(), self.myFirstPoint.Pnt())) self.myRubberCircle.SetLastParam(elclib.Parameter(self.tempGeom_Circle.Circ(), self.third_Pnt)) self.myContext.Redisplay(self.myRubberCircle, True)
def EndParameter(self): return elclib.Parameter(self.Lin2d(), self.EndPnt)
def StartParameter(self): return elclib.Parameter(self.Lin2d(), self.StartPnt)
def MouseInputEvent(self, thePnt2d: gp_Pnt2d, buttons, modifier): self.curPnt2d = self.myAnalyserSnap.MouseInput(thePnt2d) if self.myArc3PAction == Arc3PAction.Nothing: pass elif self.myArc3PAction == Arc3PAction.Input_1ArcPoint: self.myFirstgp_Pnt2d = gp_Pnt2d(self.curPnt2d.X(),self.curPnt2d.Y()) self.myFirstPoint.SetPnt(elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d)) if not self.myPolylineMode: self.myRubberLine.SetPoints(self.myFirstPoint, self.myFirstPoint) self.myContext.Display(self.myRubberLine, True) self.myArc3PAction = Arc3PAction.Input_2ArcPoint else: self.findlastSObject() self.myContext.Display(self.myRubberCircle, True) elif self.myArc3PAction == Arc3PAction.Input_2ArcPoint: self.mySecondgp_Pnt2d = gp_Pnt2d(self.curPnt2d.X(),self.curPnt2d.Y()) self.mySecondPoint.SetPnt(elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d)) self.temp_Circ.SetLocation(self.myFirstPoint.Pnt().Scaled(self.mySecondPoint.Pnt(), 0.5)) self.temp_Circ.SetRadius(self.myFirstgp_Pnt2d.Distance(self.curPnt2d) / 2) self.tempGeom_Circle.SetCirc(self.temp_Circ) self.myRubberCircle.SetCircle(self.tempGeom_Circle) self.u1 = elclib.Parameter(self.temp_Circ, self.myFirstPoint.Pnt()) self.u2 = elclib.Parameter(self.temp_Circ, self.mySecondPoint.Pnt()) if self.u1 > self.u2: self.myRubberCircle.SetFirstParam(self.u2) self.myRubberCircle.SetLastParam(self.u1) else: self.myRubberCircle.SetFirstParam(self.u1) self.myRubberCircle.SetLastParam(self.u2) self.myContext.Remove(self.myRubberLine, True) self.myContext.Display(self.myRubberCircle, True) self.myContext.Redisplay(self.myRubberCircle, True) self.myArc3PAction = Arc3PAction.Input_3ArcPoint elif self.myArc3PAction == Arc3PAction.Input_3ArcPoint: Geom2d_Point1 = Geom2d_CartesianPoint(self.myFirstgp_Pnt2d) Geom2d_Point2 = Geom2d_CartesianPoint(self.mySecondgp_Pnt2d) Geom2d_Point3 = Geom2d_CartesianPoint(self.curPnt2d) tempGcc_Circ2d3Tan = Geom2dGcc_Circ2d3Tan(Geom2d_Point1, Geom2d_Point2, Geom2d_Point3, 1.0e-10) if tempGcc_Circ2d3Tan.IsDone() and tempGcc_Circ2d3Tan.NbSolutions() > 0: myGeom2d_Arc = Geom2d_Arc(tempGcc_Circ2d3Tan.ThisSolution(1)) myGeom2d_Arc.SetParam(self.myFirstgp_Pnt2d, self.mySecondgp_Pnt2d, self.curPnt2d) Geom_Circle1 = Geom_Circle(elclib.To3d(self.curCoordinateSystem.Ax2(), myGeom2d_Arc.Circ2d())) myAIS_Circle = AIS_Circle(Geom_Circle1) myAIS_Circle.SetFirstParam(myGeom2d_Arc.FirstParameter()) myAIS_Circle.SetLastParam(myGeom2d_Arc.LastParameter()) self.AddObject(myGeom2d_Arc, myAIS_Circle, Sketch_GeometryType.ArcSketchObject) self.myContext.Remove(self.myRubberCircle, True) self.myContext.Display(myAIS_Circle, True) self.myArc3PAction = Arc3PAction.Input_1ArcPoint # self.third_Pnt = elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d) # tempMakeCirc = gce_MakeCirc(self.myFirstPoint.Pnt(), self.mySecondPoint.Pnt(), self.third_Pnt) # if tempMakeCirc.Status() == gce_Done: # # Geom_Circle1 = Geom_Circle(tempMakeCirc.Value()) # myAIS_Circle = AIS_Circle(Geom_Circle1) # # myAIS_Circle.SetFirstParam( # elclib.Parameter(Geom_Circle1.Circ(), self.myFirstPoint.Pnt())) # myAIS_Circle.SetLastParam(elclib.Parameter(Geom_Circle1.Circ(), self.third_Pnt)) # # self.AddObject(Geom_Circle, myAIS_Circle, Sketch_ObjectTypeOfMethod.Arc3P_Method) # self.myContext.Remove(self.myRubberCircle, True) # self.myContext.Display(myAIS_Circle, True) # self.myArc3PAction = Arc3PAction.Input_1ArcPoint elif self.myArc3PAction == Arc3PAction.Input_PolylineArc: self.TempGeom2d_Point.SetPnt2d(self.curPnt2d) temp2d_QualifiedCurve = Geom2dGcc_QualifiedCurve(self.temp2dAdaptor_Curve, gccent_Unqualified) tempGcc_Circ2d3Tan = Geom2dGcc_Circ2d3Tan(temp2d_QualifiedCurve, self.FirstGeom2d_Point, self.TempGeom2d_Point, 1.0e-6, 0) if (tempGcc_Circ2d3Tan.IsDone() and tempGcc_Circ2d3Tan.NbSolutions() > 0): self.temp2d_Circ = tempGcc_Circ2d3Tan.ThisSolution(1) self.u1 = elclib.Parameter(self.temp2d_Circ, self.myFirstgp_Pnt2d) self.u2 = elclib.Parameter(self.temp2d_Circ, self.curPnt2d) self.temp_u1 = self.u1 + (self.u2 - self.u1) / 100 self.temp_u2 = self.u1 - (self.u2 - self.u1) / 100 self.tempu1_pnt2d = elclib.Value(self.temp_u1, self.temp2d_Circ) self.tempu2_pnt2d = elclib.Value(self.temp_u2, self.temp2d_Circ) self.dist1 = self.tempu1_pnt2d.Distance(self.midpoint2d) self.dist2 = self.tempu2_pnt2d.Distance(self.midpoint2d) if self.dist1 < self.dist2: self.tempu1_pnt2d = self.tempu2_pnt2d myGeom2d_Arc = Geom2d_Arc(self.temp2d_Circ) myGeom2d_Arc.SetParam(self.myFirstgp_Pnt2d, self.tempu1_pnt2d, self.curPnt2d) Geom_Circle1 = Geom_Circle(elclib.To3d(self.curCoordinateSystem.Ax2(), myGeom2d_Arc.Circ2d())) myAIS_Circle = AIS_Circle(Geom_Circle1) myAIS_Circle.SetFirstParam(myGeom2d_Arc.FirstParameter()) myAIS_Circle.SetLastParam(myGeom2d_Arc.LastParameter()) self.myContext.Display(myAIS_Circle, True) self.AddObject(myGeom2d_Arc, myAIS_Circle, Sketch_GeometryType.ArcSketchObject) self.midpoint2d = myGeom2d_Arc.MiddlePnt() self.tempGeom2d_Circle.SetCirc2d(myGeom2d_Arc.Circ2d()) self.temp2dAdaptor_Curve.Load(self.tempGeom2d_Circle) self.myFirstgp_Pnt2d = self.curPnt2d self.FirstGeom2d_Point.SetPnt2d(self.myFirstgp_Pnt2d) self.myFirstPoint.SetPnt(elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d)) self.tempGeom_Circle.SetRadius(0) self.myRubberCircle.SetCircle(self.tempGeom_Circle) self.myContext.Redisplay(self.myRubberCircle, True) return False
def MouseInputEvent(self, thePnt2d: gp_Pnt2d, buttons, modifier): if self.myArcCenter2PAction == ArcCenter2PAction.Nothing: pass elif self.myArcCenter2PAction == ArcCenter2PAction.Input_CenterArc: self.tempGeom_Circle = Geom_Circle(self.curCoordinateSystem.Ax2(), SKETCH_RADIUS) self.curPnt2d = self.myAnalyserSnap.MouseInput(thePnt2d) self.myFirstgp_Pnt2d = gp_Pnt2d(self.curPnt2d.X(), self.curPnt2d.Y()) self.myFirstPoint.SetPnt( elclib.To3d(self.curCoordinateSystem.Ax2(), self.myFirstgp_Pnt2d)) self.myCircleAx2d.SetLocation(self.myFirstgp_Pnt2d) self.tempGeom_Circle.SetLocation(self.myFirstPoint.Pnt()) self.tempGeom_Circle.SetRadius(SKETCH_RADIUS) self.myRubberCircle.SetCircle(self.tempGeom_Circle) self.myRubberCircle.SetFirstParam(0) self.myRubberCircle.SetLastParam(M_PI * 2) self.myContext.Display(self.myRubberCircle, True) self.myArcCenter2PAction = ArcCenter2PAction.Input_1ArcPoint elif self.myArcCenter2PAction == ArcCenter2PAction.Input_1ArcPoint: self.curPnt2d = self.myAnalyserSnap.MouseInputException( self.myFirstgp_Pnt2d, thePnt2d, TangentType.Circle_CenterPnt, True) self.radius = self.myFirstgp_Pnt2d.Distance(self.curPnt2d) self.tempGeom_Circle.SetRadius(self.radius) self.myRubberCircle.SetCircle(self.tempGeom_Circle) self.tempGeom2d_Circle = Geom2d_Circle.DownCast( geomapi_To2d(self.tempGeom_Circle, gp_Pln(self.curCoordinateSystem))) self.myContext.Redisplay(self.myRubberCircle, True) # update text self.myAIS_Label.SetPosition(self.tempGeom_Circle.Location()) self.myContext.Display(self.myAIS_Label, True) self.myArcCenter2PAction = ArcCenter2PAction.Input_2ArcPoint elif self.myArcCenter2PAction == ArcCenter2PAction.Input_2ArcPoint: self.curPnt2d = self.myAnalyserSnap.MouseMove(thePnt2d) if self.ProjectOnCircle(self.curPnt2d): third_Pnt = elclib.To3d(self.curCoordinateSystem.Ax2(), self.curPnt2d) self.myRubberCircle.SetCircle(self.tempGeom_Circle) p1 = elclib.Parameter(self.tempGeom_Circle.Circ(), self.mySecondPoint.Pnt()) p2 = elclib.Parameter(self.tempGeom_Circle.Circ(), third_Pnt) self.myRubberCircle.SetFirstParam(min(p1, p2)) self.myRubberCircle.SetLastParam(max(p1, p2)) self.myGeomArc = Geom2d_Arc(self.tempGeom2d_Circle.Circ2d()) self.myGeomArc.SetFirstParam(min(p1, p2)) self.myGeomArc.SetLastParam(max(p1, p2)) # Remove text self.myContext.Remove(self.myAIS_Label, True) self.myContext.Remove(self.myRubberCircle, True) nurbs = self.ArcToNurbsArc(min(p1, p2), max(p1, p2)) self.bspline_node = BsplineNode(nurbs.GetName(), self.rootNode) self.bspline_node.setSketchObject(nurbs) self.AddObject(self.myGeomArc, nurbs.GetAIS_Object(), Sketch_GeometryType.ArcSketchObject) self.myArcCenter2PAction = ArcCenter2PAction.Nothing return False
def SetLastParam(self, u2): if type(u2) == float: self.myLastParam = u2 elif type(u2) == gp_Pnt2d: self.myLastParam = elclib.Parameter(gp_Circ2d(), u2) self.CheckParam()
def SetFirstParam(self, u1): if type(u1) == float: self.myFirstParam = u1 elif type(u1) == gp_Pnt2d: self.myFirstParam = elclib.Parameter(gp_Circ2d(), u1) self.CheckParam()
def SetParam(self, start: gp_Pnt2d, end: gp_Pnt2d): self.myFirstParam = elclib.Parameter(self.Circ2d(), start) self.myLastParam = elclib.Parameter(self.Circ2d(), end) # u = elclib.Parameter(self.Circ2d(), mid) self.CheckParam()