Zeichnung Dreieck/Pfeil auf einer Linie mit CGContext
Ich bin mit den Rahmen von route-me für das arbeiten mit Orten.
In diesem code den Pfad zwischen zwei Markierungen(Punkte) gezeichnet werden, wie eine Linie.
Meine Frage: "Welchen code sollte ich hinzufügen, wenn ich will hinzufügen, einen Pfeil in der Mitte(oder Anfang) der Zeile, so dass es Punkte die Richtung"
Dank
- (void)drawInContext:(CGContextRef)theContext
{
renderedScale = [contents metersPerPixel];
float scale = 1.0f / [contents metersPerPixel];
float scaledLineWidth = lineWidth;
if(!scaleLineWidth) {
scaledLineWidth *= renderedScale;
}
//NSLog(@"line width = %f, content scale = %f", scaledLineWidth, renderedScale);
CGContextScaleCTM(theContext, scale, scale);
CGContextBeginPath(theContext);
CGContextAddPath(theContext, path);
CGContextSetLineWidth(theContext, scaledLineWidth);
CGContextSetStrokeColorWithColor(theContext, [lineColor CGColor]);
CGContextSetFillColorWithColor(theContext, [fillColor CGColor]);
//according to Apple's documentation, DrawPath closes the path if it's a filled style, so a call to ClosePath isn't necessary
CGContextDrawPath(theContext, drawingMode);
}
Ich habe es vor einer Weile in codeguru.com/cpp/g-m/gdi/article.php/c3683 Trotzdem Dank für die Antworten Greetz
Pete, es kann nett sein, der Sie zum markieren einer Antwort als angenommen, dennoch, oder posten Sie Ihre Antwort als eine Antwort und dann akzeptieren.
warum nicht markieren Sie die richtige Antwort (ich meine, Friedhelm)?
Pete, es kann nett sein, der Sie zum markieren einer Antwort als angenommen, dennoch, oder posten Sie Ihre Antwort als eine Antwort und dann akzeptieren.
warum nicht markieren Sie die richtige Antwort (ich meine, Friedhelm)?
InformationsquelleAutor Pete | 2010-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor Friedhelm Brügge
Die Zeichnung der tatsächlichen Dreieck/Pfeil ist einfach, sobald Sie haben zwei Punkte auf Ihrem Weg.
Ich die Punkte ein wenig komplizierter. Sie sagte, der Weg entlang einer Linie, die im Gegensatz zu einer Kurve oder eine Reihe von Kurven. Das macht es einfacher.
Verwenden CGPathApply zu wählen Sie zwei Punkte auf dem Pfad. Wahrscheinlich ist dies die Letzte zwei Punkte, von denen kCGPathElementMoveToPoint und die anderen werden kCGPathElementAddLineToPoint. Lass mx,my der erste Punkt und nx,ny die zweite, so wird der Pfeil Punkt von m in Richtung n.
Angenommen, Sie wollen den Pfeil an der Spitze der Linie, bx,by von oben wird gleich von nx,ny auf der Linie. Wählen Sie einen Punkt, dx,dy zwischen mx,my und nx,ny zu berechnen, die anderen Punkte.
Nun berechnen Sie ax,ay und cx,cy, so dass Sie auf einer Linie mit dx,dy und gleich weit von Weg. Das folgende sollte in der Nähe sein, obwohl ich wahrscheinlich noch einige Zeichen falsch:
Länge ist der Abstand von der Spitze des Pfeils an der Basis, und die Breite ist der Abstand von der Welle zu den Barben, oder die Hälfte der Breite der Pfeilspitze.
Wenn der Pfad eine Kurve, dann statt finden, mx,my, wie der Vorherige Punkt, oder verschieben, es wird der Letzte Kontrollpunkt der letzten Kurve. Jedem Kontrollpunkt wird auf eine Tangente zu der Kurve und verläuft durch den angrenzenden Punkt.
InformationsquelleAutor drawnonward
Fand ich diese Frage, da hatte ich das gleiche. Ich nahm drawnonward Beispiel und es war so eng,... Aber mit einem Umklappen von cos und sin, ich war in der Lage, um es an die Arbeit:
Sobald ich habe, dass meine Pfeile waren darauf genau der falsche Weg. So habe ich Hinzugefügt, dass die zweite Zeile (
r += M_PI;
)Dank geht an drawnonward!
InformationsquelleAutor Doug Hays
Und hier ist Swift 4+ version für Friedhelm Brügge Antwort: (ich zeichne es auf Bild)
InformationsquelleAutor Coder ACJHP