I'm now in the process of optimising and
documenting my Inkscape extensions that implement the International Orienteering
Federation mapping standards. There are some areas of the extensions that
I would like to improve to make them more universal / intuitive.
1) Currently, a number of my routines apply
formatting and patterns of tags or dots to paths (strokes). I would like
to extend the routines to also be compatible with rectangles and arcs /
ellipses. I assume that the routines to do most of what I want already
exist in one or other of the 'helper' files like cubicsuperpath, pathmodifier
and simpletransform, but as yet I've not worked out how to make them work for
me. I need to understand how to implement the following from
within a Python extension:
a) Convert a rectangle to
a path. Will rectToPath in
pathmodifier do this and, if so, what do I need to provide for self amd
b) Convert an arc/ellipse
to a path. Will ArcToPath in cubicsuperpath do this and,
if so, what do I need to provide for p1 and params?
2) I also need to understand how to apply a
transform to a path (i.e. embed the transformation into the path so the
transform is not required) so that effects applied to a heavil
transformed path (as can happen when using ellipses / arcs) are applied
correctly. Will one of the routines in simpletransform do what I want and,
if so, which one and what would I need to supply to it?
3) I still need to provide the
capability via an extension to convert a line into two lines of a given line
width and a set distance apart. This will need to work with curved
paths, both open and closed. The way that I would do this manually in
Inkscape would be to create a stroke, duplicate it, set the widths of the two
strokes such that the lower is the width of the two lines plus the gap and the
upper is the width of the gap, convert both strokes to paths using Path - Stroke to Path and then to use the
Path - Difference function to leave two
lines of the required width and separation. How could I go about
recreating this from within a extension? Is there an easier method to
do this, given that the two lines should not be joined at the ends?
Still outstanding from a previous request are a couple of
unanswered questions (rephrased):
4) Ho would I go about detecting
whether a point lies within the bounds of a closed shape passed to a Python
extension? Is there an existing routine in one of the Python
extension 'helper' files that can do this?
5) How would I go about
implementing a method to detect collision / distance between dots from
within an extension? I'd like to implement something similar to the
'Remove Overlaps' capability available within the 'Align and Distribute' dialog
as part of the routine generating the dots, but with a single (polar - sqrt(x^2
* y^2)) variable related to the user-selected dot density determining how
close the dots can be placed to each other. I can see that this could get
complex when the area, and hence the number of dots, gets large.
With regard to these last two, I believe there may be
something possible using py2geom, but where do I find details of this?
What are its capabilities and are they documented anywhere?