def buildWire(self): # simply do the work of the trimming and construction. wB = OCCUtil.WireBuilder() wire = self.jointRequest.wire tw = Topo(wire) edgeToTrim = self.pointOnEdge.edge # shorten the selected edge # TODO: maybe simplify this to return pointOnEdge? (self.trimmedEdge, self.trimmedPoint, self.trimmedVec) = OCCUtil.shortenEdge( edgeToTrim, self.pointOnEdge.point, self.trimDistance ) wB.add(self.trimmedEdge) # add the edges we didnt touch for e in tw.edges(): if not e.IsSame(edgeToTrim): wB.add(e) self.wire = wB.wire()
def buildWire(self): #simply do the work of the trimming and construction. wB = OCCUtil.WireBuilder() wire = self.jointRequest.wire tw = Topo(wire) edgeToTrim = self.pointOnEdge.edge #shorten the selected edge #TODO: maybe simplify this to return pointOnEdge? (self.trimmedEdge, self.trimmedPoint, self.trimmedVec) = OCCUtil.shortenEdge(edgeToTrim, self.pointOnEdge.point, self.trimDistance) wB.add(self.trimmedEdge) #add the edges we didnt touch for e in tw.edges(): if not e.IsSame(edgeToTrim): wB.add(e) self.wire = wB.wire()
def makeExtrusionWire( shellWire, startPoint, trackWidth): topoWire = Topo(shellWire); #compute closest point on the wire brp = BRepExtrema.BRepExtrema_DistShapeShape(); brp.LoadS1(OCCUtil.make_vertex(startPoint)); brp.LoadS2(shellWire); result = brp.Perform(); p1 = brp.PointOnShape2(1); wb = WireBuilder(); #make an edge from start point to located point. #wb.add ( OCCUtil.edgeFromTwoPoints(startPoint, p1 ) ); dist = p1.Distance(p2) if brp.SupportTypeShape2(1) == BRepExtrema.BRepExtrema_IsOnEdge: #closest point is a point along an edge interSectingEdge = OCCUtil.cast(brp.SupportOnShape2(1)); p = brp.ParOnEdgeS2(1); #compute parameter along one curve #break the edge into two new edges. account for a split distance between them. (e1,e2)= OCCUtil.splitEdge(interSectingEdge,p); wb.add(e1); #add second one shortened, on the end near the vertex wb.add ( OCCUtil.shortenEdge(e2,p1,trackWidth)); #hack, must find parameter closest to this end #now add all of the other edges in the wire except the original one that we split for e in topoWire.edges(): if not e.IsSame(interSectingEdge): wb.add(e); else: #closest point is a point on a vertex, here we'll shorten one edge # vertex = OCCUtil.cast(brp.SupportOnShape2(1)); edges = []; for e in topoWire.edges_from_vertex(vertex): edges.append(e); #shorten one, leave other intact #try to handle case where vertex is at end of a wire ( ie a non-closed wire ) e1 = edges[0]; wb.add( edges[0]); e2 = None; if len(edges) > 1: e2 = edges[1]; e3 = OCCUtil.shortenEdge(e2,p1,trackWidth); #hack-- find edges closest to this end #display.DisplayColoredShape(e3,'BLUE') wb.add ( e3); for e in topoWire.edges(): if e.IsSame(e1): continue; if e2 and e.IsSame(e2): continue; wb.add ( e ); return wb.wire();