Although it’s not yet out as I write, by the time you read this article Inkscape 1.2 will have been released. This version is a major update that contains a huge number of changes and additions, and will likely provide plenty of topics for this column for many months to come. But let’s not get ahead of ourselves – we haven’t even finished looking at all the new Live Path Effects (LPEs) that were added to 1.0 and 1.1 yet! Corners (Fillet/Chamfer) Consider two perpendicular lines meeting to form a 90° corner. Often that sharp transition from one line to the other is exactly what you want. But sometimes a design calls for something more gradual: an intermediate straight-line segment at 45°, or a rounded section that seamlessly joins the two lines. Creating such gradual corner transitions is known as chamfering or filleting, respectively, with the newly inserted path being referred to as the chamfer (for straight path segments) or fillet (for curved lines). Unsurprisingly, the “Corners (Fillet/Chamfer)” LPE is the tool to use when you want to quickly add such shapes to your paths.
Bien qu'elle ne soit pas encore sortie au moment où j'écris ces lignes, Inkscape 1.2 sera sortie au moment où vous lirez cet article. Cette version est une mise à jour majeure, qui contient un très grand nombre de changements et d'ajouts, et qui fournira probablement de nombreux sujets pour cette chronique pendant de nombreux mois à venir. Mais n'allons pas trop vite - nous n'avons même pas encore fini d'examiner tous les nouveaux Effets de Chemin Interactifs (ECI - Live Path Effects, LPE) qui ont été ajoutés aux versions 1.0 et 1.1 !
Angles (Congé/Chanfrein)
Imaginez deux lignes perpendiculaires qui se rencontrent pour former un angle de 90 °. Souvent, cette transition nette d'une ligne à l'autre est exactement ce que vous voulez. Mais, parfois, un dessin exige quelque chose de plus progressif : un segment de ligne droite intermédiaire à 45 ° ou une section arrondie qui relie les deux lignes de façon transparente. La création de ces transitions d'angle graduelles est connue sous le nom de chanfrein ou de congé [en anglais, « chamfer » et « fillet »], respectivement, la nouvelle trajectoire insérée étant appelée chanfrein (pour les segments de ligne droite) ou congé (pour les lignes courbes). Sans surprise, le LPE « Corners (Fillet/Chamfer) » est l'outil à utiliser lorsque vous souhaitez ajouter rapidement de telles formes à vos trajectoires.
As always, let’s take a look at an example of this effect in action. Of course that means we’ll need a suitable path to work on, such as this shape which has a selection of obtuse, acute and right angles so you can easily see how Inkscape applies the LPE in these different cases. Adding the effect to a path like this probably won’t produce an immediately obvious result, but that’s just down to the values the parameters have by default. Let’s take a look at the UI and examine each of the parameters individually, as usual. The Unit pop-up is pretty self-explanatory, though there is one omission that we’ll come back to shortly. The Method pop-up allows you to explicitly determine whether fillets are rendered as arcs or Bézier curves, should you care about that distinction. Most people won’t, and should probably just leave this as “Auto”.
Comme toujours, voyons un exemple de cet effet en action. Bien sûr, cela signifie que nous aurons besoin d'un chemin approprié sur lequel travailler, comme cette forme qui a une sélection d'angles obtus, aigus et droits, afin que vous puissiez facilement voir comment Inkscape applique le LPE dans ces différents cas.
L'ajout de l'effet à un chemin comme celui-ci ne produira probablement pas un résultat immédiatement évident, mais c'est simplement dû aux valeurs par défaut des paramètres. Jetons un coup d'œil à l'interface utilisateur et examinons chacun des paramètres individuellement, comme d'habitude.
La fenêtre déroulante Unité est assez explicite, bien qu'il y ait une omission sur laquelle nous reviendrons bientôt. La fenêtre déroulante Méthode vous permet de déterminer explicitement si les congés sont rendus sous forme d'arcs ou de courbes de Bézier, si vous tenez à cette distinction. La plupart des gens ne s'en préoccupent pas, et devraient probablement laisser cette option sur « Auto ».
It’s the Radius field that is the first really important one. While this is set to zero you won’t see any filleting or chamfering effect, so the first thing to do is to crank this up to a suitable value for the result you want. If you’re using a mouse with a scroll-wheel (which I contend is the best control device for serious Inkscape work), click in the field to focus it then roll the wheel to adjust the value in integer steps. By doing this you can watch the effect change the path on the canvas in real-time, making it easy to adjust the strength to the value that gives the right appearance. Here’s our test shape with a radius of 15px. The filleting effect is obvious on the right-angled corners at the left, and completely rounds off the acute angles at the right. The obtuse angles at the top and bottom right, however, are barely rounded at all. This makes sense due to the radius being set to a specific value: as the two sides of the angle approach 180° so the tangent points get closer and closer, and the curving effect is less pronounced. This can be seen more clearly by adding circles with a radius of 15px to each corner of our shape, to demonstrate how the fillet shapes are constructed.
C'est le champ Rayon qui est le premier champ vraiment important. S'il est réglé sur zéro, vous ne verrez pas d'effet de congé ou de chanfrein ; donc la première chose à faire est de l'augmenter à une valeur appropriée pour le résultat que vous voulez. Si vous utilisez une souris avec une molette de défilement (qui, selon moi, est le meilleur dispositif de contrôle pour un travail sérieux dans Inkscape), cliquez dans le champ pour le sélectionner, puis faites tourner la molette pour ajuster la valeur par pas entiers. En procédant ainsi, vous pouvez observer que l'effet modifie le chemin sur le canevas en temps réel, ce qui facilite l'ajustement du rayon à la valeur qui donne la bonne apparence. Voici notre forme de test avec un rayon de 15 px.
L'effet de congé est évident sur les angles droits à gauche, et arrondit complètement les angles aigus à droite. Les angles obtus en haut et en bas à droite, en revanche, sont à peine arrondis. Cela s'explique par le fait que le rayon est défini sur une valeur spécifique : plus les deux côtés de l'angle se rapprochent de 180°, plus les points tangents se rapprochent et moins l'effet d'arrondi est prononcé. On peut le voir plus clairement en ajoutant des cercles d'un rayon de 15 px à chaque coin de notre forme, pour montrer comment les formes des congés sont construites.
If you want a smoother transition in your obtuse angles there are several solutions. The first is simply not to use a radius defined in explicit units at all, but make it vary based on the geometry of the path around each corner. This is what the “Radius in %” checkbox is for. Enable this and… nothing happens. A common problem with this and other LPEs is that some controls don’t immediately trigger an update on the canvas. In this case the easiest option is to nudge the Radius value up by one, then back down by one, using the plus and minus buttons at the end of the field. With that refresh forced, our shape now looks like this. Clearly the obtuse angles are a lot smoother now, though the acute ones have become sharper, with a smaller radius. This raises the obvious question as to what “Radius in %” actually means. Percentage of what? It’s clearly not the same thing being used for all the corners, so it can’t be “percentage of bounding box width” or anything like that. Is it based on a percentage of the segment length? The angle at which the lines meet? The price of Bitcoin? Who knows!? I certainly don’t, and the tooltips aren’t giving any insight.
Si vous souhaitez une transition plus douce dans vos angles obtus, il existe plusieurs solutions. La première consiste tout simplement à ne pas utiliser un rayon défini en unités explicites, mais à le faire varier en fonction de la géométrie de la trajectoire autour de chaque angle. C'est à cela que sert la case à cocher « Rayon en % ». Activez-la et… rien ne se passe. Un problème courant avec ce LPE et d'autres est que certains contrôles ne déclenchent pas immédiatement une mise à jour sur le canevas. Dans ce cas, la solution la plus simple consiste à augmenter de un la valeur de Rayon, puis à la diminuer de un, en utilisant les boutons plus et moins à la fin du champ. Avec ce rafraîchissement forcé, notre forme ressemble maintenant à ceci :
Il est clair que les angles obtus sont beaucoup plus doux maintenant, alors que les angles aigus sont devenus plus pointus, avec un rayon plus petit. Cela soulève la question évidente de savoir ce que signifie réellement « Rayon en % ». Pourcentage de quoi ? Il est clair que ce n'est pas la même chose qui est utilisée pour tous les coins, donc ça ne peut pas être un « pourcentage de la largeur de la boîte englobante » ou quelque chose comme ça. Est-ce que c'est basé sur un pourcentage de la longueur du segment ? L'angle auquel les lignes se rencontrent ? Le prix du bitcoin ? Qui sait !? Je ne le sais assurément pas, et les infobulles ne donnent aucune indication.
One thing I do know, however, is that the percentage option tends to be more resilient to design changes. Consider what happens when you scale your shape up or down: if you’ve set a specific radius in pixels or millimetres, the LPE will change the output path in order to maintain that defined size. In the case of our example shape this causes the “prongs” to become longer or shorter. Conversely, when using the percentage option you’ll find that scaling the path results in no significant changes to its shape. For this reason alone, unless you have a specific requirement that demands a fixed value radius, I suggest enabling the “Radius in %” checkbox. Remember that I said that there was an omission in the Units pop-up that I would come back to? It’s simply this: why isn’t there an entry for “%” in the pop-up, instead of also having this checkbox? With the UI as it stands, it would be very easy to misread the parameters as indicating a fixed radius rather than a percentage, by overlooking the checkbox. As often seems to be the case with Inkscape’s LPEs, some of the parameters and and their positions do rather leave me scratching my head.
Une chose que je sais, cependant, c'est que l'option de pourcentage a tendance à être plus résistante aux changements de conception. Considérez ce qui se passe lorsque vous augmentez ou diminuez la taille de votre forme : si vous avez défini un rayon spécifique en pixels ou en millimètres, le LPE modifiera le chemin de sortie afin de maintenir cette taille définie. Dans le cas de notre exemple de forme, les « dents » deviennent plus longues ou plus courtes. À l'inverse, si vous utilisez l'option de pourcentage, vous constaterez que la mise à l'échelle de la trajectoire n'entraîne aucun changement significatif de sa forme. Pour cette seule raison, à moins que vous n'ayez une exigence spécifique qui nécessite un rayon de valeur fixe, je suggère d'activer la case à cocher « Rayon en % ».
Vous vous souvenez que j'ai dit qu'il y avait une omission dans la fenêtre déroulante des unités sur laquelle je reviendrais ? C'est simplement ceci : pourquoi n'y a-t-il pas une entrée pour « % » dans la fenêtre déroulante, au lieu d'avoir également cette case à cocher ? Avec l'interface utilisateur actuelle, il serait très facile de mal interpréter les paramètres comme indiquant un rayon fixe plutôt qu'un pourcentage, en négligeant la case à cocher. Comme cela semble souvent être le cas avec les LPE d'Inkscape, certains des paramètres et leurs positions me laissent plutôt perplexe.
If you switch to the Node tool (F2) while your path is selected, you’ll see a pair of handles for each node. On my setup they are rendered as particularly small shapes, so you may want to increase the size of the handles throughout the whole Inkscape UI via Edit > Preferences > Interface. These specific handles are referred to as “knots” in the Corners LPE interface. They can be hidden by enabling the “Hide knots” checkbox, so if you don’t see them when switching to the Node tool, double-check to see if that box is enabled. These are also, presumably, the knots referred to in the label for the “Use knots distance instead [of] radius” checkbox – though I’m not certain because the behaviour of that control is less than obvious, and I’m not even convinced that it’s needed at all! Checking that box (and nudging the Radius control up and down) modifies the shape once again. The positions of the knots move, and with it the curvature of the various fillets change. The thing is, you can actually drag the knots on the canvas in order to manually adjust the curvature for each fillet – and this works regardless of the state of the checkbox. I’m therefore at a loss as to what this checkbox is meant to achieve, so my advice is to simply leave it un-ticked, enable the “Radius in %” option, and manually adjust any fillets you need to.
Si vous passez sur l'outil Nœuds (F2) alors que votre chemin est sélectionné, vous verrez une paire de poignées pour chaque nœud. Sur ma configuration, elles sont rendues comme des formes particulièrement petites ; vous pouvez augmenter la taille des poignées pour l'ensemble de l'interface utilisateur d'Inkscape via Édition > Préférences > Interface. Ces poignées spécifiques sont appelées « nœuds » dans l'interface du LPE Corners. Elles peuvent être cachées en activant la case à cocher « Cacher les nœuds », donc si vous ne les voyez pas lorsque vous passez à l'outil Nœuds, vérifiez si cette case est activée. Ce sont aussi, probablement, les noeuds auxquels il est fait référence dans l'étiquette de la case à cocher « Utiliser la distance des nœuds à la place du rayon » - bien que je n'en sois pas certain parce que le comportement de ce contrôle est moins qu'évident, et je ne suis même pas convaincu qu'il soit nécessaire !
En cochant cette case (et en déplaçant la commande Rayon vers le haut et le bas), la forme est à nouveau modifiée. La position des nœuds se déplace, et avec elle, la courbure des différents congés. En fait, vous pouvez faire glisser les nœuds sur le canevas afin d'ajuster manuellement la courbure de chaque congé - et cela fonctionne indépendamment de l'état de la case à cocher. Je ne comprends donc pas ce que cette case à cocher est censée faire, et je vous conseille de ne pas la cocher, d'activer l'option « Rayon en % », et d'ajuster manuellement tous les congés dont vous avez besoin.
It’s worth reiterating the fact that you can change each pair of knots individually. This is the first LPE to support storing per-node data, allowing different parameters to apply to different nodes within the path. This allows you to not only set a different radius or knot position for each corner, but also to mix-and-match between fillets and chamfers, as we’ll see later, all with just a single instance of the LPE. Compare this with the need for multiple LPEs each with its own blacklist or whitelist that we had to use to achieve something similar with the Measure Segments LPE, and I’m sure you’ll agree that the new method is a lot more straightforward to use. Now that you know how to set the fillet radius on a per-node basis, you should be able to reproduce a pair of corners like these. The top corner has a radius of zero, whereas the bottom corner’s radius is set to a much larger value simply by dragging one of the knots. It’s important to note the distinction between a zero radius node and one with a radius greater than zero as we take a look at the next two checkboxes in this LPE.
Il est utile de rappeler que vous pouvez modifier chaque paire de nœuds individuellement. Celui-ci est le premier LPE à prendre en charge le stockage de données par nœud, ce qui permet d'appliquer différents paramètres à différents nœuds de la trajectoire. Cela vous permet non seulement de définir un rayon ou une position de nœud différents pour chaque coin, mais aussi de mélanger les congés et les chanfreins, comme nous le verrons plus tard, le tout avec une seule instance du LPE. Comparez cela à la nécessité d'utiliser plusieurs LPE, chacune avec sa propre liste noire ou liste blanche, que nous avons dû utiliser pour obtenir quelque chose de similaire avec la LPE Mesurer des segments, et je suis sûr que vous conviendrez que la nouvelle méthode est beaucoup plus simple à utiliser.
Maintenant que vous savez comment définir le rayon du congé nœud par nœud, vous devriez être en mesure de reproduire une paire de coins comme ceux-ci :
Le coin supérieur a un rayon de zéro, tandis que le rayon du coin inférieur est réglé sur une valeur beaucoup plus grande simplement en faisant glisser l'un des nœuds. Il est important de noter la distinction entre un nœud de rayon nul et un nœud de rayon supérieur à zéro lorsque nous examinons les deux prochaines cases à cocher de ce LPE.
Here we have another pair of controls that are, in my opinion, practically useless. When we first began to apply fillets to this shape we increased the radius value and all the corners responded. Suppose, however, you’ve manually reset some of them to a radius of zero, and don’t want them to be affected by further changes. Unchecking the first box will mean that any changes you make in the LPE interface won’t affect those zero radius corners. In other words, if you want to keep your square corners square while adjusting all the others then uncheck this box. The problem is what happens if you do want to adjust the square corners as well. Obviously you need to have this box checked, but that’s not really enough. As soon as you nudge the radius parameter up, those corners cease to be zero radius corners, so that checkbox no longer applies. This is where the second checkbox comes in: with this checked your changes also affect non-zero corners. Unchecking this would mean that your changes only affect the zero radius corners, which is almost never what you want – especially if it’s the radius parameter you’re playing around with. My advice, therefore, is to always leave these two checkboxes ticked. If you want to protect your sharp corners from changes, there’s a better way to achieve that which I’ll describe shortly.
Nous avons ici une autre paire de contrôles qui, à mon avis, sont pratiquement inutiles. Lorsque nous avons commencé à appliquer des congés à cette forme, nous avons augmenté la valeur du rayon et tous les coins ont réagi. Supposons toutefois que vous ayez manuellement réinitialisé certains d'entre eux à un rayon de zéro, et que vous ne souhaitiez pas qu'ils soient affectés par d'autres modifications. En décochant la première case, les modifications apportées dans l'interface du LPE n'affecteront pas ces coins à rayon zéro. En d'autres termes, si vous souhaitez conserver vos coins carrés tout en ajustant tous les autres, décochez cette case.
Le problème est de savoir ce qui se passe si vous souhaitez également ajuster les coins carrés. Il est évident que vous devez cocher cette case, mais ce n'est pas vraiment suffisant. Dès que vous augmentez le paramètre de rayon, ces coins cessent d'être des coins à rayon zéro et cette case à cocher ne s'applique donc plus. C'est là que la deuxième case à cocher entre en jeu : si elle est cochée, vos modifications affectent également les angles non nuls. Si vous ne la cochez pas, vos modifications n'affecteront que les coins à rayon zéro, ce qui n'est presque jamais ce que vous voulez, surtout si vous jouez avec le paramètre de rayon. Je vous conseille donc de toujours laisser ces deux cases cochées. Si vous souhaitez protéger vos angles vifs des modifications, il existe un meilleur moyen d'y parvenir, que je décrirai bientôt.
Personally I think these two parameters should be collapsed into a single checkbox labelled “Protect zero radius corners”. When checked, the tight corners would be left unmolested by any changes to the parameters, but in its unchecked state your changes would affect all of the corners, as usual. In reality even this probably isn’t required, given the next checkbox in this dialog. What if you don’t want to affect all of the corners, but perhaps the ones you want left untouched already have a non-zero radius? We’ve seen that the radius can be adjusted on a per-corner basis using the knots on the canvas, but what about the other parameters? The checkbox labelled “Change only selected nodes” is the option for you. With this enabled any changes you make to the LPE’s parameters will only be applied to corners that you’ve selected. This renders the previous checkboxes rather redundant. If you want to modify all the corners then just ensure that all of them are selected. Want to leave the zero radius ones untouched? Just make sure they’re not selected (but the other corners are) when you make your modifications. Importantly, however, you can also choose any subset of corners to adjust at once, regardless of their current radius.
Personnellement, je pense que ces deux paramètres devraient être regroupés en une seule case à cocher intitulée « Protéger les coins à rayon zéro ». Lorsqu'elle est cochée, les coins vifs ne sont pas affectés par les modifications des paramètres, mais lorsqu'elle n'est pas cochée, vos modifications affectent tous les coins, comme d'habitude. En réalité, ce n'est probablement même pas nécessaire, étant donné la prochaine case à cocher de cette boîte de dialogue.
Que faire si vous ne voulez pas affecter tous les coins, mais que ceux que vous ne voulez pas toucher ont déjà un rayon non nul ? Nous avons vu que le rayon peut être ajusté pour chaque coin à l'aide des nœuds du canevas, mais qu'en est-il des autres paramètres ? La case à cocher intitulée « Modifier uniquement les nœuds sélectionnés » est l'option qu'il vous faut. Si elle est activée, toutes les modifications apportées aux paramètres du LPE ne seront appliquées qu'aux coins que vous aurez sélectionnés. Cela rend les cases à cocher précédentes plutôt redondantes. Si vous voulez modifier tous les coins, assurez-vous qu'ils sont tous sélectionnés. Vous voulez laisser intacts les coins à rayon zéro ? Assurez-vous simplement qu'ils ne sont pas sélectionnés (mais que les autres coins le sont) lorsque vous effectuez vos modifications. Il est important de noter que vous pouvez également choisir n'importe quel sous-ensemble de coins à ajuster en une seule fois, quel que soit leur rayon actuel.
In the unlikely event that you’re not familiar with selecting nodes in Inkscape, here’s a quick recap. First, you need to be using the Node tool (F2). You can click on individual corner nodes to select them, or on a path segment to select the nodes at either end. You can also drag the mouse over multiple nodes to select them (a so-called “marquee” or “rubber band” selection). Holding the Shift key will let you add nodes to, or remove nodes from, an existing selection. Most usefully, Ctrl-A will select all the nodes in the path, providing a quick way to alter all the nodes at once. The Escape key will deselect them all, should you wish to start again with a fresh selection. If you have difficulty seeing the path nodes due to the placement of the LPE’s knots, don’t forget that you can check the “Hide knots” control while you make your selection. With those basics at your fingertips you’ll soon find that it’s quick and easy to select exactly which corners should be affected by your LPE changes at any time, without having to consider their existing radius or other attributes. Now we know how to apply parameter changes to specific nodes, but so far all the examples we’ve looked at have been fillets. What about chamfers? It doesn’t take a genius to figure out that’s what the buttons at the bottom of the LPE parameters are for.
Dans le cas peu probable où vous ne seriez pas à l'aise avec la sélection des nœuds dans Inkscape, voici un bref rappel. Tout d'abord, vous devez utiliser l'outil Nœuds (F2). Vous pouvez cliquer sur des nœuds d'angle individuels pour les sélectionner, ou sur un segment de chemin pour sélectionner les nœuds de chaque extrémité. Vous pouvez également faire glisser la souris sur plusieurs nœuds pour les sélectionner (une sélection dite « en chapiteau » ou « élastique »). En maintenant la touche Maj enfoncée, vous pouvez ajouter ou retirer des nœuds d'une sélection existante. Très utilement, Ctrl-A sélectionnera tous les nœuds du chemin, offrant ainsi un moyen rapide de modifier tous les nœuds en même temps. La touche Échap permet de les désélectionner tous, si vous souhaitez recommencer avec une nouvelle sélection. Si vous avez du mal à voir les nœuds de la trajectoire en raison de l'emplacement des nœuds du LPE, n'oubliez pas que vous pouvez cocher la commande « Masquer les nœuds » pendant que vous effectuez votre sélection. Avec ces éléments de base à portée de main, vous constaterez rapidement et facilement qu'il est possible de sélectionner exactement les coins qui doivent être affectés par les changements dans votre LPE, à tout moment, sans avoir à tenir compte de leur rayon existant ou d'autres attributs.
Nous savons maintenant comment appliquer des modifications de paramètres à des nœuds spécifiques, mais, jusqu'à présent, tous les exemples que nous avons examinés concernaient les congés. Qu'en est-il des chanfreins ? Il n'est pas nécessaire d'être un génie pour comprendre que c'est à cela que servent les boutons situés en bas des paramètres du LPE.
Depending on the state of the “Change only selected nodes” checkbox, clicking on one of these buttons will change either the selected nodes, or all nodes, to the appropriate type of join. For chamfers and inverse chamfers the “Chamfer steps” parameter also plays its part, dictating how many straight line segments should be used to make up the connecting shape. Note that when this is set to 1 there is no visual difference between a chamfer and inverse chamfer. Here’s an example of how the different types of join are rendered with our test shape. In conclusion, I think this is a very capable and useful LPE that is only let down a little by offering too many non-intuitive options in the UI which don’t seem to really provide much benefit. My advice is to enable the “Radius in %” checkbox, both the “Apply changes…” checkboxes, and the “Change only selected nodes” checkbox. That will give you an LPE that behaves predictably when you resize your objects, and which allows you to trivially alter all of the nodes, or just a subset of them, depending on what you select on the canvas.
Selon l'état de la case à cocher « Modifier uniquement les nœuds sélectionnés », un clic sur l'un de ces boutons modifiera soit les nœuds sélectionnés, soit tous les nœuds, pour obtenir le type de jointure approprié. Pour les chanfreins et les chanfreins inversés, le paramètre « Marches de chanfrein » joue également un rôle, en dictant le nombre de segments de ligne droite à utiliser pour constituer la forme de jonction. Notez que lorsque ce paramètre est réglé sur 1, il n'y a aucune différence visuelle entre un chanfrein et un chanfrein inversé. Voici un exemple de rendu des différents types de jointure avec notre forme de test :
En conclusion, je pense qu'il s'agit d'un LPE très capable et utile qui est seulement un peu déçevant par l'offre de trop d'options non intuitives dans l'interface utilisateur, qui ne semblent pas apporter beaucoup d'avantages. Mon conseil est d'activer la case à cocher « Rayon en % », les deux cases à cocher « Appliquer les modifications… »“, et la case à cocher « Modifier uniquement les nœuds sélectionnés ». Cela vous donnera un LPE qui se comporte de manière prévisible lorsque vous redimensionnez vos objets, et qui vous permet de modifier trivialement tous les nœuds, ou seulement un sous-ensemble d'entre eux, en fonction de ce que vous sélectionnez sur le canevas.