def trimmedEdge(self,parameter1, parameter2): "make a trimmed edge based on a start and end parameter on the same curve" "p1 and p2 are either points or parameters" print "Computing new edge: p1=%0.3f, p2=%0.3f, fp=%0.3f, lp=%0.3f" % (parameter1,parameter2,self.firstParameter,self.lastParameter); if abs(parameter1 - parameter2) < 0.0001: print "WARNING: removing degenerate edge"; return None; e = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve, parameter1, parameter2 ); return e;
def trimmedEdge(self, parameter1, parameter2): "make a trimmed edge based on a start and end parameter on the same curve" "p1 and p2 are either points or parameters" print "Computing new edge: p1=%0.3f, p2=%0.3f, fp=%0.3f, lp=%0.3f" % ( parameter1, parameter2, self.firstParameter, self.lastParameter) if abs(parameter1 - parameter2) < 0.0001: print "WARNING: removing degenerate edge" return None e = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve, parameter1, parameter2) return e
def _compute(self): (p1,p,p2) = (self.p1,self.closestParam, self.p2); #p1 < p < p2 #i think this works well for small distance. not as well if d is large. if (p - p1) < (2.0)*self.distanceFromStartPoint: #TODO: this code is nearly same as the branch below but with p1 and p2 swapped, #connect to start vertex self.connectingPoint = self.edgeStart; self.connectingParm = p1; #compute shortened edge e1 = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve,p1+self.trackWidth,p2); self.otherEdges = [e1]; #enter the wire by connecting start to vertex directly self.connectingEdges = [ OCCUtil.edgeFromTwoPoints(self.startPoint,self.connectingPoint) ]; elif (p2 - p )< (2.0)*self.distanceFromStartPoint: #connect to end vertex self.connectingPoint = self.edgeEnd; self.connectingParm = p2; #compute shortened edge e1 = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve,p1,p2-self.trackWidth); self.otherEdges = [e1]; #enter the wire by connecting start to vertex directly self.connectingEdges = [ OCCUtil.edgeFromTwoPoints(self.startPoint,self.connectingPoint) ]; else: #connect to middle of the edge self.connectingEdges = []; firstEdge = None; #which end is closer? if (p - p1) > (p2 - p ): #p2 is closer pTarget = p + (2.0)*self.distanceFromStartPoint; pEnd = pTarget - self.trackWidth; secondEdge = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve,pTarget,p2); self.otherEdges = [OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve,p1,pEnd) ]; else: #p1 is closer pTarget = p - (2.0)*self.distanceFromStartPoint; pEnd = pTarget + self.trackWidth; secondEdge = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve,p1,pTarget); self.otherEdges = [OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve,pEnd,p2) ]; self.connectingParam = pTarget; self.connectingPoint = self.curve.Value(pTarget); self.connectingEdges.append( OCCUtil.edgeFromTwoPoints(self.startPoint, self.connectingPoint)); self.connectingEdges.append(secondEdge);
def _compute(self): (p1, p, p2) = (self.p1, self.closestParam, self.p2) #p1 < p < p2 #i think this works well for small distance. not as well if d is large. if (p - p1) < (2.0) * self.distanceFromStartPoint: #TODO: this code is nearly same as the branch below but with p1 and p2 swapped, #connect to start vertex self.connectingPoint = self.edgeStart self.connectingParm = p1 #compute shortened edge e1 = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve, p1 + self.trackWidth, p2) self.otherEdges = [e1] #enter the wire by connecting start to vertex directly self.connectingEdges = [ OCCUtil.edgeFromTwoPoints(self.startPoint, self.connectingPoint) ] elif (p2 - p) < (2.0) * self.distanceFromStartPoint: #connect to end vertex self.connectingPoint = self.edgeEnd self.connectingParm = p2 #compute shortened edge e1 = OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve, p1, p2 - self.trackWidth) self.otherEdges = [e1] #enter the wire by connecting start to vertex directly self.connectingEdges = [ OCCUtil.edgeFromTwoPoints(self.startPoint, self.connectingPoint) ] else: #connect to middle of the edge self.connectingEdges = [] firstEdge = None #which end is closer? if (p - p1) > (p2 - p): #p2 is closer pTarget = p + (2.0) * self.distanceFromStartPoint pEnd = pTarget - self.trackWidth secondEdge = OCCUtil.edgeFromTwoPointsOnCurve( self.handleCurve, pTarget, p2) self.otherEdges = [ OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve, p1, pEnd) ] else: #p1 is closer pTarget = p - (2.0) * self.distanceFromStartPoint pEnd = pTarget + self.trackWidth secondEdge = OCCUtil.edgeFromTwoPointsOnCurve( self.handleCurve, p1, pTarget) self.otherEdges = [ OCCUtil.edgeFromTwoPointsOnCurve(self.handleCurve, pEnd, p2) ] self.connectingParam = pTarget self.connectingPoint = self.curve.Value(pTarget) self.connectingEdges.append( OCCUtil.edgeFromTwoPoints(self.startPoint, self.connectingPoint)) self.connectingEdges.append(secondEdge)