¿Es posible eliminar un trozo de NSBezierPath
definido por una región NSRect
dentro de la ruta?Cortar un rectángulo de un NSBezierPath
7
A
Respuesta
5
Absolutamente. Esto es lo que clipping regions hacer:
// Save the current clipping region
[NSGraphicsContext saveGraphicsState];
NSRect dontDrawThisRect = NSMakeRect(x, y, w, h);
// Either:
NSRectClip(dontDrawThisRect);
// Or (usually for more complex shapes):
//[[NSBezierPath bezierPathWithRect:dontDrawThisRect] addClip];
[myBezierPath fill]; // or stroke, or whatever you do
// Restore the clipping region for further drawing
[NSGraphicsContext restoreGraphicsState];
9
Como se señaló en los comentarios, la respuesta del Sr. Caswell en realidad es lo contrario de lo que el PO estaba pidiendo. Este ejemplo de código muestra cómo eliminar un rect de un círculo (o cualquier camino de beier de cualquier otro camino de bezier). El truco está en "revertir" el camino que desea eliminar, y luego añadirlo a la ruta original:
NSBezierPath *circlePath = [NSBezierPath bezierPathWithOvalInRect:NSMakeRect(0, 0, 100, 100)];
NSBezierPath *rectPath = [NSBezierPath bezierPathWithRect:NSMakeRect(25, 25, 50, 50)];
rectPath = [rectPath bezierPathByReversingPath];
[circlePath appendBezierPath:rectPath];
Nota: las cosas se ponen un poco más difícil si los trazados Bézier se cruzan entre sí. Luego debe establecer la "regla de devanado" adecuada.
Cuestiones relacionadas
- 1. Cómo cortar un agujero en un rectángulo SVG
- 2. ¿Cómo puedo convertir un rectángulo en un rectángulo?
- 3. ¿Por qué hay un rectángulo rectángulo y un rectángulo de límites en una UIView?
- 4. Android: animar un rectángulo
- 5. Cómo dibujar un rectángulo?
- 6. ¿XNA tiene un polígono, como un rectángulo?
- 7. Fabric.js - Dibujar un rectángulo gratuito
- 8. C++/OpenGL - Girar un rectángulo
- 9. ventanas para cortar columnas de un texto
- 10. Cálculo de vértices de un rectángulo girado
- 11. Encontrar las esquinas de un rectángulo deformado
- 12. Obtener un rectángulo visible de UIView
- 13. Girar el rectángulo alrededor de un punto
- 14. Cómo conseguir tamaño de un rectángulo girado
- 15. ¿Girar un rectángulo de Java Graphics2D?
- 16. emacs: Cambiar la caja de un rectángulo
- 17. Python: cortar un archivo binario muy grande
- 18. Cómo cortar un NSArray en Objective-C?
- 19. Cortar un texto UTF-8 en PHP
- 20. ¿Qué herramientas hay para cortar un PSD?
- 21. ¿Cómo "cortar" un std_logic_vector en VHDL?
- 22. WPF: Cortar y guardar imagen
- 23. Encontrar un rectángulo delimitado dentro de un polígono cóncavo/convexo
- 24. Cálculo del rectángulo delimitador en un ángulo de un polígono
- 25. C# dibujando un rectángulo en un cuadro de imagen?
- 26. ¿Cómo dibuja Qt un borde alrededor de un rectángulo?
- 27. cómo CORTAR un bloque en un disco SSD?
- 28. ¿Cómo desvanezco un rectángulo o texto?
- 29. convertir una línea en un rectángulo
- 30. arrastrando un rectángulo en el cacao
NSRectClip es el nombre correcto de la función – sergeyne
Gracias, @sergeyne, corregido! –
NSRectClip no es correcto. Se cruza con el clippath actual. Entonces, después de aplicarlo, solo se dibuja contenido dentro de dontDrawThisRect, sacando esta área de la región de recorte. Por lo tanto, es todo lo contrario de lo que quería el OP. –