Domanda

Al momento sto porting mia Java2D applicazione JRuby / Grafico Disegno / interfaccia grafica per MacRuby / cacao. Perciò devo ottenere il punto di intersezione di una NSBezierPath aperto con un NSBezierPath chiuso.

In Java2D ho usato il seguente trucco. I appiattito entrambi i percorsi e ha fatto un semplice test linea di intersezione per ogni segmento.

Quindi, c'è un modo semplice per convertire un NSBezierPath a un gruppo di linee rette?

Il mio algoritmo corrente passeggiate semplicemente la linea (in modo binario di ricerca) fino a trovare una NSPoint per il quale containsPoint è vero. Ma funziona solo per le linee rette. Quello che ho implementato in Java2D lavorato per percorsi curvi troppo.

def getIntersection edge, path
  out = edge.source
  ins = edge.target
  until (out.dist(ins) < 1.0)
    mid = out + ((ins - out) * 0.5)
    if (path.containsPoint (NSMakePoint(mid.x, mid.y)))
      ins = mid
    else
      out = mid
    end
  end
  return out
end

Grafico

È stato utile?

Soluzione

  

Quindi, c'è un modo semplice per convertire un NSBezierPath a un gruppo di linee rette?

Invia il percorso un messaggio bezierPathByFlatteningPath. Ciò restituirà un nuovo percorso, quindi convertito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top