Outils pour utilisateurs

Outils du site


issue161:krita

Ceci est une ancienne révision du document !


A recurring problem that new users face when starting to use Inkscape is the myriad ways of accidentally making something invisible. A few articles ago, I talked about this with regard to Outline View, and the new Visible Hairlines, Split View and XRay modes in version 1.0. But there’s one way of making objects disappear even from those tools, and which used to cause a lot of confusion for new users, as their objects vanished into the ether with no obvious way to retrieve them. Version 0.91 made recovery easier, and, with 1.0, we now have several new options on the context menu that make this feature something that might actually be more of a help than a hindrance.

There is an “Object Properties” dialog in Inkscape, which is available from the right-click context menu, making it easy for new users to stumble upon. It allows you to set the ID, Label, Title and Description of your object, but, in practice, most of those items only have any real value when the SVG is loaded into a web browser and manipulated with JavaScript. Small JavaScript snippets can be entered directly into this dialog, via the Interactivity section at the bottom (see part 82 of this series).

There are also a couple of checkboxes in this dialog that can easily tempt an unwary user. The “Lock” option stops you interacting with the object at all. Initially the object remains selected, and can be affected by keyboard shortcuts, but, as soon as the selection is removed – by clicking on the background or selecting another element – the object becomes completely inert. You can’t select it, move it, resize it, or delete it. The “Hide” checkbox also makes your object inert – but, in addition, it makes it completely invisible, even to the prying eyes of Outline View and its friends.

Back in the days of v0.48 and earlier, these checkboxes were a real problem for new users. They would naively lock a bitmap they wished to manually trace over, only to find that the means to unlock it when they wanted to delete it was less than obvious. Similarly, a right-click on it would no longer present the Object Properties option – thereby concealing another unlock possibility. A hidden object fared even worse: the behaviour was the same, but you couldn’t even see it to be sure you were right-clicking in the correct place!

The correct way to unlock or unhide your object was actually to unlock or unhide all the objects in your drawing, via options in the Object menu. There was no UI (other than the XML editor) to let you unlock or unhide individual items, making these capabilities rather useless for managing the state of very specific parts of your drawing.

With 0.91 came a new Objects dialog (Object > Objects… described in part 63). This lists every element in the drawing – including the hidden ones – with handy toggle buttons to (un)lock and (un)hide them. It’s a very familiar interface in other graphics software, and turns these properties into genuinely useful features. Personally, I think the checkboxes should have been removed from the Object Properties dialog to avoid further confusion, leaving them available only from the Objects dialog, but they still exist in the dialog to this day.

Inkscape v1.0 adds more UI niceties to work with these capabilities, by providing four new entries on the context menu: Hide selected objects Unhide objects below Lock selected objects Unlock objects below

The Hide and Lock entries are pretty self-explanatory. The one caveat to be aware of is that they hide or lock the objects that are selected, which may not include the one you’ve right-clicked on. Make sure to select all the target objects before right-clicking.

The Unhide and Unlock options refer to “below” in their titles. In this case they mean “below the mouse pointer”. Right-click on a locked object and select the Unlock option to unlock it. It doesn’t get much simpler than that, right? But there is a caveat: this operation will unlock any object below the mouse pointer, regardless of what layer it’s on, even if the layer itself is hidden and locked! And, as the plural in the menu title suggests, if you have multiple locked items stacked on top of each other below the position where you right-click, they’ll all be unlocked.

Unhiding follows the same rules, but it’s obviously a little harder to find the correct spot to right-click on. As mentioned, none of the usual options for seeing invisible objects will work, so I hope you’ve kept track of where everything is in your drawing. To help with this treasure hunt just a little, the Unhide menu option will be enabled only if there is actually a hidden object below the mouse pointer, so you can be sure you’re in the right place. If you can’t find the object easily then a trip to the Objects dialog is probably a better use of your time than trying to play a hobbled version of Battleships against Inkscape.

The Unlock menu option also becomes enabled and disabled based on whether or not there’s a locked item below the mouse pointer, but it gets confused by locked layers, becoming enabled when you right-click over any object in the locked layer, regardless of whether or not the object itself is locked.

Despite these minor issues, adding the options to the context menu is a welcome change that surfaces these long-standing capabilities of the program in a way that makes them not only more discoverable, but also more usable. Small changes like this may not get the fanfare of the big new features, but, by making users’ day-to-day workflows a little easier and more flexible, they’re every bit as welcome.

Another small new feature is even more welcome, at least by me: inverse clipping. This is an omission from the SVG specs which has always frustrated me, not least because it solves common problems trivially, but is no harder for a browser or graphics program to implement than the standard clipping routines. For lack of an extra paragraph or two in the spec, users have been forced to spend time reinventing inverse clipping with their own complex paths time and time again.

I covered clipping all the way back in part 13 of this series. If you’re a very long-term reader, you may recall that this series began with a few articles to help you get to grips with the basics of Inkscape by drawing a snowman. By part 13 it was time to adorn him with a scarf.

I began by drawing a scarf in its entirety, including the part that would normally be hidden behind the snowman’s head (“neck” seems a little too generous a term in this case). I first demonstrated how a simple clipping path (in green) wouldn’t do the job – it would leave the back of the scarf visible, whilst hiding the part you actually wanted to see.

It’s a classic approach: first show the audience what doesn’t work, then follow up with a demonstration of what does work. In this case, it’s an “inverse clipping mask”, created by using Path > Difference to cut the desired shape out of a larger enclosing rectangle. The resultant complex path is then used for clipping, giving the desired result.

It works, but it’s not really beginner friendly. When a new user just wants to cut the center out of a circle to make a donut, being forced to confront Boolean operations and bounding boxes makes Inkscape seem rather unfriendly. If the SVG Working Group had only added an “inverse” parameter to clipping paths all those years ago, Inkscape probably would have included this feature from the earliest versions. As it is, we’ve had to wait until now – and it’s still included only as a user-friendly addition by the developers, not because of any change to the SVG specs itself (this option was proposed for SVG2, but didn’t make the cut, much to my ongoing frustration).

So how does this new feature work in Inkscape? As with many “extensions” to the basic SVG capabilities, it’s implemented as a Live Path Effect (LPE). But, like several other LPEs, it’s available directly from the normal Inkscape UI, so you don’t need to deal directly with the LPE to benefit from it. I’ll cover the new “Power Clip” LPE that is behind it in a future instalment but, for now, let’s just see how we might use it to work with our snowman’s scarf.

There’s no real trick to it, actually. You just create a path (or an object that can be converted to a path) that encloses the part of the image you want to clip away. Then select both the clipping path and the object or group to be clipped and you’re ready to proceed. Whereas the option for a normal clip can be found on the context menu, it takes a trip to the Object > Clip > Set Inverse (LPE) option to trigger the inverse mode. And that’s it. No complex paths or bounding boxes. Just a simple interface for what should be a simple task.

Internally, of course, complex paths and bounding boxes still come into play. You can see this by switching to the Node tool (F2), where you’ll see that Inkscape has automatically created a complex path consisting of your clipping path and another that hugs the bounding box of your selected object. As usual, you can edit the nodes and lines of these paths for an instant effect on the clipped object – ideal for fine-tuning the resultant shape to make sure your scarf provides a nice, snug fit.

There’s also a new inverse mode for masks, though its behaviour is not so obvious. Masking was covered in part 14. It’s basically similar to clipping, but uses the color of each pixel in the mask to determine the opacity of that part of the masked object. White parts remain visible, black or transparent parts are made transparent, and values in-between have their opacity set accordingly. Typically it’s used where you want to fade the object, rather than produce the abrupt edge that clipping gives. Here’s an example where I use a blurred white object as a mask to remove the outside of a colored rectangle.

This particular result could obviously be produced simply by blurring a colored ellipse, but in a real example you might have a far more complex shape in your mask, or the object you’re masking might be a group made up of lots of different elements.

Once again, the SVG spec offers no inverse version of a mask. But Inkscape provides such a feature in v1.0, so to cut a hole in the colored rectangle, surely just requires us to use the Object > Mask > Set Inverse (LPE) option, right? Of course not! That would be far too sensible. Instead the result is just a colored rectangle, as though no mask even existed.

What’s happening here is a discussion for another article – probably once I get round to a further examination of the new LPEs in version 1.0. Suffice to say that we can get the effect we’re after by drawing the mask in black rather than white, then using the Set Inverse option.

The irony here is that we’ve had to manually invert the color of the mask in order to use the automatic feature for inverting the mask! There is some logic to this, but it’s tied up to the way the LPE operates, and the default settings that get applied when you select this option. For now, I’ll be sticking to creating inverse masks by hand, the old fashioned way, but I can definitely see a lot of inverse clipping paths in my future.

There’s one final caveat to using these new features: because they’re implemented as Live Path Effects, they won’t work directly on bitmap images. Note the word “directly” – these LPEs can also be used on groups, even if the group contains only a single bitmap image. So, if you really want to poke a hole through a treasured family photo, just put it into its own group, then get going with the inverse clip or mask. I usually advise putting a bitmap into a single-object group anyway, as it opens up some other creative possibilities I’ve covered in the past, so it’s perhaps worth getting into the habit of always grouping a bitmap as soon as you place it in your drawing.

issue161/krita.1601210071.txt.gz · Dernière modification : 2020/09/27 14:34 de auntiee