parameters: (self, obj, wires, zValues, relZ=False, forward=True, start_idx=0)
docstring: buildpathocc(obj, wires, zValues, relZ=False) ... internal helper function to generate engraving commands.
docstring_summary: buildpathocc(obj, wires, zValues, relZ=False) ... internal helper function to generate engraving commands.
docstring_tokens: buildpathocc ( obj wires zValues relZ = False ) ... internal helper function to generate engraving commands .
function: def buildpathocc(self, obj, wires, zValues, relZ=False, forward=True, start_idx=0):
          """buildpathocc(obj, wires, zValues, relZ=False) ... internal helper function to generate engraving commands."""
          PathLog.track(obj.Label, len(wires), zValues)
  
          for wire in wires:
              offset = wire
  
              # reorder the wire
              if hasattr(obj, "StartVertex"):
                  start_idx = obj.StartVertex
  
              edges = copy.copy(PathOpTools.orientWire(offset, forward).Edges)
              edges = Part.sortEdges(edges)[0]
  
              last = None
  
              for z in zValues:
                  PathLog.debug(z)
                  if last:
                      self.appendCommand(
                          Path.Command("G1", {"X": last.x, "Y": last.y, "Z": last.z}),
                          z,
                          relZ,
                          self.vertFeed,
                      )
  
                  first = True
                  if start_idx > len(edges) - 1:
                      start_idx = len(edges) - 1
  
                  edges = edges[start_idx:] + edges[:start_idx]
                  for edge in edges:
                      PathLog.debug(
                          "points: {} -> {}".format(
                              edge.Vertexes[0].Point, edge.Vertexes[-1].Point
                          )
                      )
                      PathLog.debug(
                          "valueat {} -> {}".format(
                              edge.valueAt(edge.FirstParameter),
                              edge.valueAt(edge.LastParameter),
                          )
                      )
                      if first and (not last or not wire.isClosed()):
                          PathLog.debug("processing first edge entry")
                          # we set the first move to our first point
                          last = edge.Vertexes[0].Point
  
                          self.commandlist.append(
                              Path.Command(
                                  "G0",
                                  {"Z": obj.ClearanceHeight.Value, "F": self.vertRapid},
                              )
                          )
                          self.commandlist.append(
                              Path.Command(
                                  "G0", {"X": last.x, "Y": last.y, "F": self.horizRapid}
                              )
                          )
                          self.commandlist.append(
                              Path.Command(
                                  "G0", {"Z": obj.SafeHeight.Value, "F": self.vertRapid}
                              )
                          )
                          self.appendCommand(
                              Path.Command("G1", {"X": last.x, "Y": last.y, "Z": last.z}),
                              z,
                              relZ,
                              self.vertFeed,
                          )
                      first = False
  
                      if PathGeom.pointsCoincide(last, edge.valueAt(edge.FirstParameter)):
                          # if PathGeom.pointsCoincide(last, edge.Vertexes[0].Point):
                          for cmd in PathGeom.cmdsForEdge(edge):
                              self.appendCommand(cmd, z, relZ, self.horizFeed)
                          last = edge.Vertexes[-1].Point
                      else:
                          for cmd in PathGeom.cmdsForEdge(edge, True):
                              self.appendCommand(cmd, z, relZ, self.horizFeed)
                          last = edge.Vertexes[0].Point
              self.commandlist.append(
                  Path.Command(
                      "G0", {"Z": obj.ClearanceHeight.Value, "F": self.vertRapid}
                  )
              )
function_tokens: def buildpathocc ( self , obj , wires , zValues , relZ = False , forward = True , start_idx = 0 ) : PathLog . track ( obj . Label , len ( wires ) , zValues ) for wire in wires : offset = wire # reorder the wire if hasattr ( obj , "StartVertex" ) : start_idx = obj . StartVertex edges = copy . copy ( PathOpTools . orientWire ( offset , forward ) . Edges ) edges = Part . sortEdges ( edges ) [ 0 ] last = None for z in zValues : PathLog . debug ( z ) if last : self . appendCommand ( Path . Command ( "G1" , { "X" : last . x , "Y" : last . y , "Z" : last . z } ) , z , relZ , self . vertFeed , ) first = True if start_idx > len ( edges ) - 1 : start_idx = len ( edges ) - 1 edges = edges [ start_idx : ] + edges [ : start_idx ] for edge in edges : PathLog . debug ( "points: {} -> {}" . format ( edge . Vertexes [ 0 ] . Point , edge . Vertexes [ - 1 ] . Point ) ) PathLog . debug ( "valueat {} -> {}" . format ( edge . valueAt ( edge . FirstParameter ) , edge . valueAt ( edge . LastParameter ) , ) ) if first and ( not last or not wire . isClosed ( ) ) : PathLog . debug ( "processing first edge entry" ) # we set the first move to our first point last = edge . Vertexes [ 0 ] . Point self . commandlist . append ( Path . Command ( "G0" , { "Z" : obj . ClearanceHeight . Value , "F" : self . vertRapid } , ) ) self . commandlist . append ( Path . Command ( "G0" , { "X" : last . x , "Y" : last . y , "F" : self . horizRapid } ) ) self . commandlist . append ( Path . Command ( "G0" , { "Z" : obj . SafeHeight . Value , "F" : self . vertRapid } ) ) self . appendCommand ( Path . Command ( "G1" , { "X" : last . x , "Y" : last . y , "Z" : last . z } ) , z , relZ , self . vertFeed , ) first = False if PathGeom . pointsCoincide ( last , edge . valueAt ( edge . FirstParameter ) ) : # if PathGeom.pointsCoincide(last, edge.Vertexes[0].Point): for cmd in PathGeom . cmdsForEdge ( edge ) : self . appendCommand ( cmd , z , relZ , self . horizFeed ) last = edge . Vertexes [ - 1 ] . Point else : for cmd in PathGeom . cmdsForEdge ( edge , True ) : self . appendCommand ( cmd , z , relZ , self . horizFeed ) last = edge . Vertexes [ 0 ] . Point self . commandlist . append ( Path . Command ( "G0" , { "Z" : obj . ClearanceHeight . Value , "F" : self . vertRapid } ) )