<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Verbalshadow</id>
	<title>Inkscape Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Verbalshadow"/>
	<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/Special:Contributions/Verbalshadow"/>
	<updated>2026-04-09T10:31:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=41604</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=41604"/>
		<updated>2008-12-30T23:33:50Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: add replacement python script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Cheat Sheet For Converting to 2geom=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
==Lets talk about emptiness.==&lt;br /&gt;
In Inkscape and in 2geom there are two types of emptiness for rectangles.&lt;br /&gt;
&lt;br /&gt;
Rectangles with no coordinates.&lt;br /&gt;
Rectangles with zero area.&lt;br /&gt;
&lt;br /&gt;
What is the difference?&lt;br /&gt;
&lt;br /&gt;
A Rect that has the coordinates of (1,2) - (2,6) contains points and has a non-zero area.&lt;br /&gt;
A Rect that has the coordinates of (0,0) - (0,0) contains one point but has zero area.&lt;br /&gt;
A Rect that has the coordinates of (0,0) - (10,0) contains points but has zero area.&lt;br /&gt;
A Geom::OptRect that has not been defined with coordinates has neither points or area.&lt;br /&gt;
&lt;br /&gt;
If you need to define a rectangle, but are not sure whether it is always a valid rectangle, please use Geom::OptRect. It means &amp;quot;Optional Rect&amp;quot;. A bounding box of a path could be an &amp;quot;invalid&amp;quot; rectangle for example, when the path has no fill or stroke.&lt;br /&gt;
&lt;br /&gt;
optrect.isEmpty() checks if optrect contains a valid rectangle NOT if the rect has zero area. rect.hasZeroArea() does that.&lt;br /&gt;
&lt;br /&gt;
==Items That you Can Switch NR:: for Geom::==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Matrix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Rect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Dim2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::L2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::X&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::identity&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Coord&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Things that need small adjustments or complete replacement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::scale&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Scale&amp;lt;/code&amp;gt; (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::translate&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Translate&amp;lt;/code&amp;gt; (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;nrrect.extent(NR::X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; '''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;height = r-&amp;gt;extent(NR::Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;height = r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::expansion(nrmatrix)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;geommatrix.descrim()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| &amp;lt;code&amp;gt;NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;viewbox.expandBy(border);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| &amp;lt;code&amp;gt;Mymatrix = set_identity (Nrmatrix)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;identity(Nrmatrix)&amp;lt;/code&amp;gt; '''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;matrix.setIdentity()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Geom::OptRect&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt; if ( !d&lt;br /&gt;
    || d-&amp;gt;width() &amp;lt; 0.1&lt;br /&gt;
    || d-&amp;gt;height() &amp;lt; 0.1)&lt;br /&gt;
{&lt;br /&gt;
    return;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| display/nr-arena-item.cpp:734: error: ‘const class Geom::Matrix’ has no member named ‘test_identity’&lt;br /&gt;
| &amp;lt;code&amp;gt;NR::matrix.test_identity()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;local.isIdentity()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Rotate&amp;lt;/code&amp;gt; doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| &amp;lt;code&amp;gt;r1/r2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;r1 * r2.inverse()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::Rect&amp;lt;/code&amp;gt;'s can be changed to &amp;lt;code&amp;gt;Geom::Rect&amp;lt;/code&amp;gt; But it is better not to do this.&lt;br /&gt;
| &amp;lt;code&amp;gt;geomrect = to_2geom(nrrect)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::union_bounds()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::unify()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
| &amp;lt;code&amp;gt;dy0 *= NR::expansionY(i2d);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;dx0 *= NR::expansionX(i2d);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;dy0 *= i2d.expansionY();&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;dx0 *= i2d.expansionX();&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:1447: error: ‘const class Geom::Matrix’ has no member named ‘is_translation’&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;!(!transform.is_translation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;!(!transform.isTranslation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| text-context.cpp:1610: error: no matching function for call to ‘to_2geom(boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;)’&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = to_2geom(sp_item_bbox_desktop(frame));&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = sp_item_bbox_desktop(frame);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Conversion of rectangles (NR::Rect, NRRect, Geom::Rect, Geom::OptRect) ==&lt;br /&gt;
sorry for the very brief text here. feel free to improve it and add things. ask in the jabber channel if you have difficulties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Most of the conversions of NR::Rect and NRRect to 2Geom needs careful thought.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2Geom makes a very important distinction between rectangles and optional rectangles. Libnr is most vague about this, so you often have to find out how a certain rectangle is used: whether it always contains valid data, or whether it can contain wrong data. For example, an NRRect that is defined as (a,b)-(a,b) often means it is an &amp;quot;invalid&amp;quot; rectangle, i.e. the data is invalid and the rectangle coordinates should not be trusted. In this case NRRect::upgrade() returns an empty boost::optional&amp;lt;NR::Rect&amp;gt;. So probably, an NRRect should be replaced with Geom::OptRect. A what? OptRect. Optional Rectangle. This means 2geom knows the data in it can not always be trusted. So when one unifies an OptRect with another OptRect, 2geom checks first whether the coordinates in both can be trusted. An Geom::Rect is &amp;lt;b&amp;gt;always&amp;lt;/b&amp;gt; considered as a valid rectangle:&lt;br /&gt;
&lt;br /&gt;
     Geom::Rect  rect1;     //  will probably be initialized as (0,0)-(0,0), but don't use this! (deprecated)&lt;br /&gt;
     Geom::Rect  rect2(Geom::Point(1,1), Geom::Point(1,1); // creates (1,1)-(1,1) rect :-)&lt;br /&gt;
     Geom::OptRect  rect3;   // creates rectangle with no coordinates&lt;br /&gt;
     Geom::OptRect  rect4(Geom::Rect((Geom::Point(1,2), Geom::Point(3,4)); // creates optional rectangle with defined coordinates.&lt;br /&gt;
     Geom::Rect   rect3b = *rect3;  // this will crash, because rect3 does not contain a rect&lt;br /&gt;
     //correct usage is:&lt;br /&gt;
     if (rect4) {&lt;br /&gt;
        Geom::Rect   rect4b = *rect4;  // rect4b = (1,2)-(3,4)&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
Note that geomrect.isEmpty() does not exist as this name is ambiguous. geomrect.hasZeroArea() does exist, and geomoptrect.isEmpty() too.&lt;br /&gt;
&lt;br /&gt;
In summary, it is safest to do the following, but please think carefully about your decision&lt;br /&gt;
&lt;br /&gt;
NRRect   ==&amp;gt;  Geom::OptRect&amp;lt;br&amp;gt;&lt;br /&gt;
NR::Rect ==&amp;gt;  Geom::OptRect&lt;br /&gt;
&lt;br /&gt;
If you are certain that the NR::Rect always contains valid coordinates, replace it with Geom::Rect.&lt;br /&gt;
&lt;br /&gt;
== Simple One for One Multi-Replacement in a Single Pass Python Script ==&lt;br /&gt;
&lt;br /&gt;
http://inkscape.pastebin.com/f53b7e2ae&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36854</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36854"/>
		<updated>2008-10-18T05:19:29Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Cheat Sheet For Converting to 2geom=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
==Lets talk about emptiness.==&lt;br /&gt;
In Inkscape and in 2geom there are two types of emptiness for rectangles.&lt;br /&gt;
&lt;br /&gt;
Rectangles with no coordinates.&lt;br /&gt;
Rectangles with zero area.&lt;br /&gt;
&lt;br /&gt;
What is the difference?&lt;br /&gt;
&lt;br /&gt;
A Rect that has the coordinates 0f (1,2 - 2,6) has both points and area.&lt;br /&gt;
A Rect that has the coordinates 0f (0,0 - 0,0) has points but no area.&lt;br /&gt;
A boost::optional::&amp;lt;Geom::Rect&amp;gt; that has no coordinates has neither points or area.&lt;br /&gt;
&lt;br /&gt;
Geom::Rect can not have no coordinates please use boost::optional::&amp;lt;Geom::Rect&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
rect.isEmpty() checks if a rectangles has coordinates NOT for Area of the rect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Items That you Can Switch NR:: for Geom::==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Matrix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Rect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Dim2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::L2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::X&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::identify&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Coord&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Things that need small adjustments or complete replacement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::scale&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Scale&amp;lt;/code&amp;gt; (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::translate&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Translate&amp;lt;/code&amp;gt; (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;nrrect.extent(NR::X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; '''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;height = r-&amp;gt;extent(NR::Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;height = r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::expansion(nrmatrix)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;geommatrix.descrim()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| &amp;lt;code&amp;gt;NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;viewbox.expandBy(border);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| &amp;lt;code&amp;gt;Mymatrix = set_identity (Nrmatrix)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;identity(Nrmatrix)&amp;lt;/code&amp;gt; '''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;matrix.setIdentity()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt; if ( !d&lt;br /&gt;
    || d-&amp;gt;width() &amp;lt; 0.1&lt;br /&gt;
    || d-&amp;gt;height() &amp;lt; 0.1)&lt;br /&gt;
{&lt;br /&gt;
    return;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| display/nr-arena-item.cpp:734: error: ‘const class Geom::Matrix’ has no member named ‘test_identity’&lt;br /&gt;
| &amp;lt;code&amp;gt;NR::matrix.test_identity()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;local.isIdentity()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Rotate&amp;lt;/code&amp;gt; doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| &amp;lt;code&amp;gt;r1/r2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;r1 * r2.inverse()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::Rect&amp;lt;/code&amp;gt;'s can be changed to &amp;lt;code&amp;gt;Geom::Rect&amp;lt;/code&amp;gt; But it is better not to do this.&lt;br /&gt;
| &amp;lt;code&amp;gt;geomrect = to_2geom(nrrect)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::union_bounds()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::unify()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
| &amp;lt;code&amp;gt;dy0 *= NR::expansionY(i2d);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;dx0 *= NR::expansionX(i2d);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;dy0 *= i2d.expansionY();&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;dx0 *= i2d.expansionX();&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:1447: error: ‘const class Geom::Matrix’ has no member named ‘is_translation’&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;!(!transform.is_translation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;!(!transform.isTranslation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| text-context.cpp:1610: error: no matching function for call to ‘to_2geom(boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;)’&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = to_2geom(sp_item_bbox_desktop(frame));&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = sp_item_bbox_desktop(frame);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36844</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36844"/>
		<updated>2008-10-18T05:06:36Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: add comments about types of empties and isEmpty&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Cheat Sheet For Converting to 2geom=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
==Lets talk about emptiness.==&lt;br /&gt;
In Inkscape and in 2geom there are two types of emptiness for rectangles.&lt;br /&gt;
&lt;br /&gt;
Rectangles with no coordinates.&lt;br /&gt;
Rectangles with zero area.&lt;br /&gt;
&lt;br /&gt;
What is the difference?&lt;br /&gt;
&lt;br /&gt;
A Rect that has the coordinates 0f (1,2 - 2,6) has both coordinates and area.&lt;br /&gt;
A Rect that has the coordinates 0f (0,0 - 0,0) has coordinates but no area.&lt;br /&gt;
A boost::optional::&amp;lt;Geom::Rect&amp;gt; that has no coordinates has both points and area.&lt;br /&gt;
&lt;br /&gt;
Geom::Rect can not have no coordinates please use boost::optional::&amp;lt;Geom::Rect&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
rect.isEmpty() checks if a rectangles has coordinates NOT for Area of the rect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Items That you Can Switch NR:: for Geom::==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Matrix&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Rect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Dim2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::L2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::X&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::identify&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;NR::Coord&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Things that need small adjustments or complete replacement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::scale&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Scale&amp;lt;/code&amp;gt; (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::translate&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Translate&amp;lt;/code&amp;gt; (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;nrrect.extent(NR::X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; '''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;height = r-&amp;gt;extent(NR::Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;height = r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::expansion(nrmatrix)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;geommatrix.descrim()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| &amp;lt;code&amp;gt;NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;viewbox.expandBy(border);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| &amp;lt;code&amp;gt;Mymatrix = set_identity (Nrmatrix)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;identity(Nrmatrix)&amp;lt;/code&amp;gt; '''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;matrix.setIdentity()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt; if ( !d&lt;br /&gt;
    || d-&amp;gt;width() &amp;lt; 0.1&lt;br /&gt;
    || d-&amp;gt;height() &amp;lt; 0.1)&lt;br /&gt;
{&lt;br /&gt;
    return;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| display/nr-arena-item.cpp:734: error: ‘const class Geom::Matrix’ has no member named ‘test_identity’&lt;br /&gt;
| &amp;lt;code&amp;gt;NR::matrix.test_identity()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;local.isIdentity()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::Rotate&amp;lt;/code&amp;gt; doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| &amp;lt;code&amp;gt;r1/r2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;r1 * r2.inverse()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::Rect&amp;lt;/code&amp;gt;'s can be changed to &amp;lt;code&amp;gt;Geom::Rect&amp;lt;/code&amp;gt; But it is better not to do this.&lt;br /&gt;
| &amp;lt;code&amp;gt;geomrect = to_2geom(nrrect)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;NR::union_bounds()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Geom::unify()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
| &amp;lt;code&amp;gt;dy0 *= NR::expansionY(i2d);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;dx0 *= NR::expansionX(i2d);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;dy0 *= i2d.expansionY();&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;dx0 *= i2d.expansionX();&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:1447: error: ‘const class Geom::Matrix’ has no member named ‘is_translation’&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;!(!transform.is_translation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;!(!transform.isTranslation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| text-context.cpp:1610: error: no matching function for call to ‘to_2geom(boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;)’&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = to_2geom(sp_item_bbox_desktop(frame));&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = sp_item_bbox_desktop(frame);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36544</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36544"/>
		<updated>2008-10-03T21:19:09Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: add error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| display/nr-arena-item.cpp:734: error: ‘const class Geom::Matrix’ has no member named ‘test_identity’&lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
|  dy0 *= NR::expansionY(i2d);&lt;br /&gt;
dx0 *= NR::expansionX(i2d);&lt;br /&gt;
| dy0 *= i2d.expansionY();&lt;br /&gt;
dx0 *= i2d.expansionX();&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:1447: error: ‘const class Geom::Matrix’ has no member named ‘is_translation’&lt;br /&gt;
&lt;br /&gt;
| !(!transform.is_translation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&lt;br /&gt;
| !(!transform.isTranslation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| text-context.cpp:1610: error: no matching function for call to ‘to_2geom(boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;)’&lt;br /&gt;
&lt;br /&gt;
| boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = to_2geom(sp_item_bbox_desktop(frame));&lt;br /&gt;
| boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = sp_item_bbox_desktop(frame);&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36484</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36484"/>
		<updated>2008-10-01T05:20:34Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: Add to_2geom error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
|  dy0 *= NR::expansionY(i2d);&lt;br /&gt;
dx0 *= NR::expansionX(i2d);&lt;br /&gt;
| dy0 *= i2d.expansionY();&lt;br /&gt;
dx0 *= i2d.expansionX();&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:1447: error: ‘const class Geom::Matrix’ has no member named ‘is_translation’&lt;br /&gt;
&lt;br /&gt;
| !(!transform.is_translation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&lt;br /&gt;
| !(!transform.isTranslation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| text-context.cpp:1610: error: no matching function for call to ‘to_2geom(boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;)’&lt;br /&gt;
&lt;br /&gt;
| boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = to_2geom(sp_item_bbox_desktop(frame));&lt;br /&gt;
| boost::optional&amp;lt;Geom::Rect&amp;gt; frame_bbox = sp_item_bbox_desktop(frame);&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36474</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36474"/>
		<updated>2008-10-01T00:09:48Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: Add is isTranslation()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
|  dy0 *= NR::expansionY(i2d);&lt;br /&gt;
dx0 *= NR::expansionX(i2d);&lt;br /&gt;
| dy0 *= i2d.expansionY();&lt;br /&gt;
dx0 *= i2d.expansionX();&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:1447: error: ‘const class Geom::Matrix’ has no member named ‘is_translation’&lt;br /&gt;
&lt;br /&gt;
| !(!transform.is_translation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&lt;br /&gt;
| !(!transform.isTranslation() &amp;amp;&amp;amp; SP_OBJECT_STYLE(item) &amp;amp;&amp;amp; SP_OBJECT_STYLE(item)-&amp;gt;getFilter())&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36464</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36464"/>
		<updated>2008-09-30T23:58:06Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: fix namespace error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
|  dy0 *= NR::expansionY(i2d);&lt;br /&gt;
dx0 *= NR::expansionX(i2d);&lt;br /&gt;
| dy0 *= i2d.expansionY();&lt;br /&gt;
dx0 *= i2d.expansionX();&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36454</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36454"/>
		<updated>2008-09-30T23:57:06Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: add expansionX() &amp;amp; expansionY()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| sp-item.cpp:814: error: ‘expansionX’ is not a member of ‘Geom’&lt;br /&gt;
|  dy0 *= Geom::expansionY(i2d);&lt;br /&gt;
dx0 *= Geom::expansionX(i2d);&lt;br /&gt;
| dy0 *= i2d.expansionY();&lt;br /&gt;
dx0 *= i2d.expansionX();&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36424</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36424"/>
		<updated>2008-09-30T20:32:09Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: remove used rows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36414</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36414"/>
		<updated>2008-09-30T20:30:28Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| Geom::Translate (capital)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36404</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36404"/>
		<updated>2008-09-30T20:29:03Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
matrix.setIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36394</id>
		<title>CheatSheetForConvertingto2geom</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CheatSheetForConvertingto2geom&amp;diff=36394"/>
		<updated>2008-09-30T20:01:00Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: First edtion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Cheat Sheet For Converting to 2geom'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are just starting I suggest you pick a header file and convert just one function at a time. That will give you a feel for the process as you get more comfortable do more at one time.&lt;br /&gt;
&lt;br /&gt;
'''ItemsThat you Can Switch NR:: for Geom::'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| NR::Point&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Matrix&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Rect&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Dim2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::L2&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Y&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::X&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::identify&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| NR::Coord&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
'''Things that need small adjustments or Complete replacement'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| '''Error looks like'''&lt;br /&gt;
| '''NR Function or Code'''&lt;br /&gt;
| '''2geom Replacement'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::scale&lt;br /&gt;
| Geom::Scale (note the capital letter S)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::translate&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| nrrect.extent(NR::X)&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;geomrect.dimensions()[Geom::X] &amp;lt;/nowiki&amp;gt;'''OR'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;geomRect[X].extent()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| height= r-&amp;gt;extent(NR::Y);&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;height= r-&amp;gt;dimensions()[Geom::Y];&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::expansion(nrmatrix)&lt;br /&gt;
| geommatrix.descrim()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:754: error: 'expand' is not a member of 'Geom'&lt;br /&gt;
| NR::Rect const viewbox = NR::expand(canvas-&amp;gt;getViewbox(), border);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| Geom::Rect viewbox = canvas-&amp;gt;getViewbox();&lt;br /&gt;
&lt;br /&gt;
viewbox.expandBy(border);&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp:162: error: 'class Geom::Matrix' has no member named 'set_identity'&lt;br /&gt;
| Mymatrix = set_identity (Nrmatrix) &lt;br /&gt;
| identity(Nrmatrix) '''OR'''&lt;br /&gt;
&lt;br /&gt;
'''matrix.setIdentity('''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| desktop.cpp: In member function 'bool SPDesktop::isWithinViewport(SPItem*) const':&lt;br /&gt;
&lt;br /&gt;
desktop.cpp:532: error: conversion from &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;NR::Rect&amp;gt;' to non-scalar type &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;'boost::optional&amp;lt;Geom::D2&amp;lt;Geom::Interval&amp;gt; &amp;gt;' requested&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;NR::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;boost::optional&amp;lt;Geom::Rect&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;desktop.cpp:1004: error: no matching function for call to 'Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty(double)' ./2geom/rect.h:105: note: candidates are: bool Geom::D2&amp;lt;Geom::Interval&amp;gt;::isEmpty() const &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;if ( !d || d-&amp;gt;isEmpty(0.1) ) {&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| if ( !d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;width() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|| d-&amp;gt;height() &amp;lt; 0.1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::&lt;br /&gt;
&lt;br /&gt;
matrix.test_identity()&lt;br /&gt;
| local.isIdentity()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;selection-chemistry.cpp:1424: error: no match for ‘operator[]’ in ‘center[X]’&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;center is a boost::optional&amp;lt;Geom::Point&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
| you're missing the *&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Geom::Rotate doesn't seem have a operator/ what is the trick for turning division in to multiplication, again&lt;br /&gt;
| r1/r2&lt;br /&gt;
| r1 * r2.inverse()&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::Rect's can be changed to Geom::Rect But it is better not to do this.&lt;br /&gt;
| geomrect = to_2geom(nrrect)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| NR::union_bounds()&lt;br /&gt;
| Geom::unify()&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecFilterEffectDialog&amp;diff=32774</id>
		<title>SpecFilterEffectDialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecFilterEffectDialog&amp;diff=32774"/>
		<updated>2008-07-17T22:21:08Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: /* Rationale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Launchpad Entry:&lt;br /&gt;
https://blueprints.launchpad.net/inkscape/+spec/improved-filter-effects-dialog&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Utilizing the Inkscape canvas to visualize a flow diagram of the construction of the filter effects.&lt;br /&gt;
&lt;br /&gt;
== Release Note ==&lt;br /&gt;
&lt;br /&gt;
== Rationale ==&lt;br /&gt;
&lt;br /&gt;
[[Image:MockupFilterEffects.png|800px]]&lt;br /&gt;
&lt;br /&gt;
This flow diagram setup is a great deal easier to understand then the current way the diagram is displayed and allows the user to see at every step the what the filter does.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
 * Flesh this specification out in more detail&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecFilterEffectDialog&amp;diff=32764</id>
		<title>SpecFilterEffectDialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecFilterEffectDialog&amp;diff=32764"/>
		<updated>2008-07-17T22:05:48Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: True Initial Input&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Launchpad Entry:&lt;br /&gt;
https://blueprints.launchpad.net/inkscape/+spec/improved-filter-effects-dialog&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Utilizing the Inkscape canvas to visualize a flow diagram of the construction of the filter effects.&lt;br /&gt;
&lt;br /&gt;
== Release Note ==&lt;br /&gt;
&lt;br /&gt;
== Rationale ==&lt;br /&gt;
&lt;br /&gt;
[[Image:MockupFilterEffects.png]]&lt;br /&gt;
&lt;br /&gt;
This flow diagram setup is a great deal easier to understand then the current way the diagram is displayed and allows the user to see at every step the what the filter does.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
 * Flesh this specification out in more detail&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=File:MockupFilterEffects.png&amp;diff=32754</id>
		<title>File:MockupFilterEffects.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=File:MockupFilterEffects.png&amp;diff=32754"/>
		<updated>2008-07-17T22:00:14Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecFilterEffectDialog&amp;diff=32744</id>
		<title>SpecFilterEffectDialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecFilterEffectDialog&amp;diff=32744"/>
		<updated>2008-07-17T20:40:37Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: New page: temp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;temp&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Lib2geom_Release_Notes_02&amp;diff=30944</id>
		<title>Lib2geom Release Notes 02</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Lib2geom_Release_Notes_02&amp;diff=30944"/>
		<updated>2008-06-25T22:56:19Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: /* Release Notes for lib2geom v 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Release Notes for lib2geom v 0.2 ==&lt;br /&gt;
&lt;br /&gt;
*Greatly expanded Python bindings&lt;br /&gt;
**began wrapping Rect, d2pwsb, pwd2sb, Region, Regions, Path and PathVector&lt;br /&gt;
**...&lt;br /&gt;
*Boolean Ops&lt;br /&gt;
*SVG elliptiarc&lt;br /&gt;
&lt;br /&gt;
--[[User:Verbalshadow|verbalshadow]] 22:41, 25 June 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Lib2geom_Release_Notes_02&amp;diff=30914</id>
		<title>Lib2geom Release Notes 02</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Lib2geom_Release_Notes_02&amp;diff=30914"/>
		<updated>2008-06-25T22:41:43Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: New page: == Release Notes for lib2geom v 0.2 ==  *Python bindings *Boolean Ops  --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Release Notes for lib2geom v 0.2 ==&lt;br /&gt;
&lt;br /&gt;
*Python bindings&lt;br /&gt;
*Boolean Ops&lt;br /&gt;
&lt;br /&gt;
--[[User:Verbalshadow|verbalshadow]] 22:41, 25 June 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Swatch_Book&amp;diff=28944</id>
		<title>Swatch Book</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Swatch_Book&amp;diff=28944"/>
		<updated>2008-05-16T05:30:37Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: /* Feature Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
This page is for discussing the concepts around swatch books, for Inkscape and any other programs, and what things users might want.&lt;br /&gt;
&lt;br /&gt;
Feel free to contribute here, on the mailing lists, or in our Jabber/IRC chat rooms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is a Swatch Book? ==&lt;br /&gt;
&lt;br /&gt;
Basically a &amp;quot;Swatch Book&amp;quot; is a collection of swatches that an artist or designer might put together for reference during a project.&lt;br /&gt;
&lt;br /&gt;
Although a large number of people are familiar with various commercial spot color books, a swatch book is not limited to just colors. Decorators, designers and others often have books with more than simple color chips. That leads into the question of just what is a 'swatch' - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
== What is a &amp;quot;Swatch&amp;quot;? ==&lt;br /&gt;
&lt;br /&gt;
In general artistic design work, I normally hit a different  &lt;br /&gt;
definition of &amp;quot;swatch&amp;quot;. It's not just a color, it's a &amp;quot;sample&amp;quot; or  &lt;br /&gt;
&amp;quot;material&amp;quot;. It could be a simple solid ink color, or it could be a  &lt;br /&gt;
heavy plaid cloth. Moving into software, &amp;quot;Gold&amp;quot; is another good  &lt;br /&gt;
example. &amp;quot;Gold&amp;quot; is a texture, not a color (just ask the Blender  &lt;br /&gt;
artists out there). From an artist/designer's viewpoint, they tend to  &lt;br /&gt;
think in terms of a swatch book as &amp;quot;a collection of things I've  &lt;br /&gt;
pulled together to use for this project&amp;quot;. I *think* some of the  &lt;br /&gt;
problem comes from saying &amp;quot;Pantone swatch book&amp;quot; and such but not  &lt;br /&gt;
keeping in mind that it is just a subset of general &amp;quot;swatch books&amp;quot;.  &lt;br /&gt;
That is, it is a &amp;quot;swatch book but with only solid paint swatches&amp;quot;.   &lt;br /&gt;
Then again... I have used foil Pantone books, so those definitely  &lt;br /&gt;
fall into the &amp;quot;material, not just color&amp;quot; category. - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
Some examples I've seen in swatch books are&lt;br /&gt;
* Fabric&lt;br /&gt;
* Ribbon&lt;br /&gt;
* Paint&lt;br /&gt;
* Spot color samples (Pantone, Trumatch, Focoltone, Toyo, etc)&lt;br /&gt;
* Paper&lt;br /&gt;
* Wood&lt;br /&gt;
* Flooring&lt;br /&gt;
* Tile&lt;br /&gt;
* Counter material&lt;br /&gt;
&lt;br /&gt;
The key here might be to think &amp;quot;material&amp;quot; instead of just &amp;quot;color&amp;quot;. Although one might work with just colors, others might want to extend to a bit more.&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
And think of the use case. Say a comic artist is working on a  &lt;br /&gt;
project. He would probably want a &amp;quot;swatch book&amp;quot; for each of his  &lt;br /&gt;
characters, and perhaps one combining them. Then he might also want  &lt;br /&gt;
to add a book per character per lighting condition (&amp;quot;daytime&amp;quot;,  &lt;br /&gt;
&amp;quot;nighttime&amp;quot;, etc). When he went to use it, he might like to just  &lt;br /&gt;
select &amp;quot;Fred's skin&amp;quot; and apply it to an area. Then &amp;quot;Fred's shirt&amp;quot; for  &lt;br /&gt;
another. Those might just be simple RGB colors, or the skin might be  &lt;br /&gt;
a simple gradient and the shirt might be a checked pattern.&lt;br /&gt;
&lt;br /&gt;
However... the artist most definitely would benefit from being able  &lt;br /&gt;
to define those books once and then just reference them from each of  &lt;br /&gt;
the programs he uses to create things. - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
I think it would also be good if we could educate the comic artists on SVG Blend modes work, this way there would be no need to have separate color swatches for time of day. You could easily overlay a colored/gradiated rectangle within a frame and use multiply or another blend mode. Then again, that's also a preference of workflow.- [[ScislaC]]&lt;br /&gt;
&lt;br /&gt;
= Swatches in SVG/Inkscape =&lt;br /&gt;
&lt;br /&gt;
For SVG work, we'd probably like to be able to include gradients and  &lt;br /&gt;
patterns also. &amp;quot;Brushes&amp;quot; might also be nice... but I think those are  &lt;br /&gt;
something a bit different. For the apps I've seen that differentiate  &lt;br /&gt;
brushes from patterns, brushes get to be more of blobs of complex  &lt;br /&gt;
procedural code. - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
This involves more than just the swatches, but I found the brush weight profiles in Xara X[1|treme] quite intuitive. Basically it's now doable in 0.46 with LPE and an auxiliary shape that defines the variable brush weight, but Xara's simple dropdown of pre-defined profiles worked quite well. Just a thought. - [[jegHegy]]&lt;br /&gt;
&lt;br /&gt;
I think all mentioned uses of swatches are applicable. As for brushes, yes, I think those would be great as well. If we can have a standard cross-application compatible way to include those and then leave it up to the applications to implement how they want to utilize them, that would be optimal. In addition to brushes, having a symbols library implemented in a swatch book would also be greatly helpful. - [[ScislaC]]&lt;br /&gt;
&lt;br /&gt;
= Mockups =&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
= Software Support =&lt;br /&gt;
&lt;br /&gt;
== Chart ==&lt;br /&gt;
The purpose of this table is first of all to find what apps support each feature, so that we can then look into each of those to make sure that we support everything that each app needs to be sharable in a swatchbook.&lt;br /&gt;
&lt;br /&gt;
Please note that the features across the top will probably change as we gain more information. Also what gets entered into each cell will change once we have a better idea what's going on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! App&lt;br /&gt;
! Color&lt;br /&gt;
! Gradient&lt;br /&gt;
! Gradient&lt;br /&gt;
Application&lt;br /&gt;
! Pattern&lt;br /&gt;
! Filter&lt;br /&gt;
! Brush&lt;br /&gt;
! Symbol&lt;br /&gt;
! Line Marker&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inkscape.org/ Inkscape]&lt;br /&gt;
| yes, rich&lt;br /&gt;
| yes&lt;br /&gt;
| limited&lt;br /&gt;
| yes, vector&lt;br /&gt;
| Yes, as of 0.46+Dev&lt;br /&gt;
| not really&lt;br /&gt;
| ?&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.blender.org/ Blender]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cinepaint.org/ CinePaint]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gimp.org/ GIMP]&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes, rich&lt;br /&gt;
| yes, bitmap&lt;br /&gt;
| ?&lt;br /&gt;
| yes&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://kolourpaint.org/ KolourPaint]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.koffice.org/krita/ Krita]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.scribus.net/ Scribus]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feature Details ==&lt;br /&gt;
=== Color ===&lt;br /&gt;
&lt;br /&gt;
The intent is to exchange color in the [http://create.freedesktop.org/wiki/index.php/Swatches_-_colour_file_format/Propositions format worked out by CREATE]&lt;br /&gt;
&lt;br /&gt;
A few additions might be made, but only in a manner that won't break use of that spec.&lt;br /&gt;
&lt;br /&gt;
=== Gradient ===&lt;br /&gt;
&lt;br /&gt;
Gradients in SVG can be expressed as a subset of those supported by GIMP once shape/coordinates are separated. That is, pulling off linear, radial, etc.&lt;br /&gt;
&lt;br /&gt;
In the GIMP UI there is a &amp;quot;blend&amp;quot; tool, and one of the inputs is &amp;quot;Gradient&amp;quot;. &amp;quot;Shape&amp;quot; is a different input.&lt;br /&gt;
&lt;br /&gt;
General Characteristics&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! aspect&lt;br /&gt;
! SVG&lt;br /&gt;
! GIMP&lt;br /&gt;
|-&lt;br /&gt;
|Multi-segment&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Segment end can differ from next segment start&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Adjustable segment midpoint&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Fixed color stop&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|FG color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|FG+A color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|BG color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|BG+A color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend linear&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend sinusoidal&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend spherical +&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend spherical -&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Color mode RGB&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Color mode HSV cw&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Color mode HSV ccw&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So a GIMP format gradient is SVG compatible if:&lt;br /&gt;
* the end stop for each segment matches the begin stop for the next segment&lt;br /&gt;
* the midpoint of each segment is centered&lt;br /&gt;
* the color chosen is proper (need some work here)&lt;br /&gt;
* the blend is limited to only linear&lt;br /&gt;
* the coloring mode is limited to only RGB&lt;br /&gt;
&lt;br /&gt;
=== Gradient Application ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type&lt;br /&gt;
! SVG&lt;br /&gt;
! GIMP&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Bi-linear&lt;br /&gt;
|?&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Radial&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Square&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Conical (sym)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Conical (asym)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Shaped (angular)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Shaped (spherical)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Shaped (dimpled)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Spiral (cw)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Spiral (ccw)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pattern ===&lt;br /&gt;
=== Filter ===&lt;br /&gt;
=== Brush ===&lt;br /&gt;
=== Symbol ===&lt;br /&gt;
=== Line Marker ===&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* [http://lists.freedesktop.org/archives/create/2007-September/000994.html My post] to the CREATE list on Sep 27, 2007.&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Swatch_Book&amp;diff=28934</id>
		<title>Swatch Book</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Swatch_Book&amp;diff=28934"/>
		<updated>2008-05-16T05:25:54Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: /* Chart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
This page is for discussing the concepts around swatch books, for Inkscape and any other programs, and what things users might want.&lt;br /&gt;
&lt;br /&gt;
Feel free to contribute here, on the mailing lists, or in our Jabber/IRC chat rooms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is a Swatch Book? ==&lt;br /&gt;
&lt;br /&gt;
Basically a &amp;quot;Swatch Book&amp;quot; is a collection of swatches that an artist or designer might put together for reference during a project.&lt;br /&gt;
&lt;br /&gt;
Although a large number of people are familiar with various commercial spot color books, a swatch book is not limited to just colors. Decorators, designers and others often have books with more than simple color chips. That leads into the question of just what is a 'swatch' - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
== What is a &amp;quot;Swatch&amp;quot;? ==&lt;br /&gt;
&lt;br /&gt;
In general artistic design work, I normally hit a different  &lt;br /&gt;
definition of &amp;quot;swatch&amp;quot;. It's not just a color, it's a &amp;quot;sample&amp;quot; or  &lt;br /&gt;
&amp;quot;material&amp;quot;. It could be a simple solid ink color, or it could be a  &lt;br /&gt;
heavy plaid cloth. Moving into software, &amp;quot;Gold&amp;quot; is another good  &lt;br /&gt;
example. &amp;quot;Gold&amp;quot; is a texture, not a color (just ask the Blender  &lt;br /&gt;
artists out there). From an artist/designer's viewpoint, they tend to  &lt;br /&gt;
think in terms of a swatch book as &amp;quot;a collection of things I've  &lt;br /&gt;
pulled together to use for this project&amp;quot;. I *think* some of the  &lt;br /&gt;
problem comes from saying &amp;quot;Pantone swatch book&amp;quot; and such but not  &lt;br /&gt;
keeping in mind that it is just a subset of general &amp;quot;swatch books&amp;quot;.  &lt;br /&gt;
That is, it is a &amp;quot;swatch book but with only solid paint swatches&amp;quot;.   &lt;br /&gt;
Then again... I have used foil Pantone books, so those definitely  &lt;br /&gt;
fall into the &amp;quot;material, not just color&amp;quot; category. - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
Some examples I've seen in swatch books are&lt;br /&gt;
* Fabric&lt;br /&gt;
* Ribbon&lt;br /&gt;
* Paint&lt;br /&gt;
* Spot color samples (Pantone, Trumatch, Focoltone, Toyo, etc)&lt;br /&gt;
* Paper&lt;br /&gt;
* Wood&lt;br /&gt;
* Flooring&lt;br /&gt;
* Tile&lt;br /&gt;
* Counter material&lt;br /&gt;
&lt;br /&gt;
The key here might be to think &amp;quot;material&amp;quot; instead of just &amp;quot;color&amp;quot;. Although one might work with just colors, others might want to extend to a bit more.&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
And think of the use case. Say a comic artist is working on a  &lt;br /&gt;
project. He would probably want a &amp;quot;swatch book&amp;quot; for each of his  &lt;br /&gt;
characters, and perhaps one combining them. Then he might also want  &lt;br /&gt;
to add a book per character per lighting condition (&amp;quot;daytime&amp;quot;,  &lt;br /&gt;
&amp;quot;nighttime&amp;quot;, etc). When he went to use it, he might like to just  &lt;br /&gt;
select &amp;quot;Fred's skin&amp;quot; and apply it to an area. Then &amp;quot;Fred's shirt&amp;quot; for  &lt;br /&gt;
another. Those might just be simple RGB colors, or the skin might be  &lt;br /&gt;
a simple gradient and the shirt might be a checked pattern.&lt;br /&gt;
&lt;br /&gt;
However... the artist most definitely would benefit from being able  &lt;br /&gt;
to define those books once and then just reference them from each of  &lt;br /&gt;
the programs he uses to create things. - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
I think it would also be good if we could educate the comic artists on SVG Blend modes work, this way there would be no need to have separate color swatches for time of day. You could easily overlay a colored/gradiated rectangle within a frame and use multiply or another blend mode. Then again, that's also a preference of workflow.- [[ScislaC]]&lt;br /&gt;
&lt;br /&gt;
= Swatches in SVG/Inkscape =&lt;br /&gt;
&lt;br /&gt;
For SVG work, we'd probably like to be able to include gradients and  &lt;br /&gt;
patterns also. &amp;quot;Brushes&amp;quot; might also be nice... but I think those are  &lt;br /&gt;
something a bit different. For the apps I've seen that differentiate  &lt;br /&gt;
brushes from patterns, brushes get to be more of blobs of complex  &lt;br /&gt;
procedural code. - [[JonCruz]]&lt;br /&gt;
&lt;br /&gt;
This involves more than just the swatches, but I found the brush weight profiles in Xara X[1|treme] quite intuitive. Basically it's now doable in 0.46 with LPE and an auxiliary shape that defines the variable brush weight, but Xara's simple dropdown of pre-defined profiles worked quite well. Just a thought. - [[jegHegy]]&lt;br /&gt;
&lt;br /&gt;
I think all mentioned uses of swatches are applicable. As for brushes, yes, I think those would be great as well. If we can have a standard cross-application compatible way to include those and then leave it up to the applications to implement how they want to utilize them, that would be optimal. In addition to brushes, having a symbols library implemented in a swatch book would also be greatly helpful. - [[ScislaC]]&lt;br /&gt;
&lt;br /&gt;
= Mockups =&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
= Software Support =&lt;br /&gt;
&lt;br /&gt;
== Chart ==&lt;br /&gt;
The purpose of this table is first of all to find what apps support each feature, so that we can then look into each of those to make sure that we support everything that each app needs to be sharable in a swatchbook.&lt;br /&gt;
&lt;br /&gt;
Please note that the features across the top will probably change as we gain more information. Also what gets entered into each cell will change once we have a better idea what's going on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! App&lt;br /&gt;
! Color&lt;br /&gt;
! Gradient&lt;br /&gt;
! Gradient&lt;br /&gt;
Application&lt;br /&gt;
! Pattern&lt;br /&gt;
! Filter&lt;br /&gt;
! Brush&lt;br /&gt;
! Symbol&lt;br /&gt;
! Line Marker&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inkscape.org/ Inkscape]&lt;br /&gt;
| yes, rich&lt;br /&gt;
| yes&lt;br /&gt;
| limited&lt;br /&gt;
| yes, vector&lt;br /&gt;
| Yes, as of 0.46+Dev&lt;br /&gt;
| not really&lt;br /&gt;
| ?&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.blender.org/ Blender]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cinepaint.org/ CinePaint]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gimp.org/ GIMP]&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes, rich&lt;br /&gt;
| yes, bitmap&lt;br /&gt;
| ?&lt;br /&gt;
| yes&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://kolourpaint.org/ KolourPaint]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.koffice.org/krita/ Krita]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.scribus.net/ Scribus]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feature Details ==&lt;br /&gt;
=== Color ===&lt;br /&gt;
&lt;br /&gt;
The intent is to exchange color in the [http://create.freedesktop.org/wiki/index.php/Swatches_-_colour_file_format/Propositions format worked out by CREATE]&lt;br /&gt;
&lt;br /&gt;
A few additions might be made, but only in a manner that won't break use of that spec.&lt;br /&gt;
&lt;br /&gt;
=== Gradient ===&lt;br /&gt;
&lt;br /&gt;
Gradients in SVG can be expressed as a subset of those supported by GIMP once shape/coordinates are separated. That is, pulling off linear, radial, etc.&lt;br /&gt;
&lt;br /&gt;
In the GIMP UI there is a &amp;quot;blend&amp;quot; tool, and one of the inputs is &amp;quot;Gradient&amp;quot;. &amp;quot;Shape&amp;quot; is a different input.&lt;br /&gt;
&lt;br /&gt;
General Characteristics&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! aspect&lt;br /&gt;
! SVG&lt;br /&gt;
! GIMP&lt;br /&gt;
|-&lt;br /&gt;
|Multi-segment&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Segment end can differ from next segment start&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Adjustable segment midpoint&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Fixed color stop&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|FG color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|FG+A color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|BG color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|BG+A color stop&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend linear&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend sinusoidal&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend spherical +&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Blend spherical -&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Color mode RGB&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Color mode HSV cw&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Color mode HSV ccw&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So a GIMP format gradient is SVG compatible if:&lt;br /&gt;
* the end stop for each segment matches the begin stop for the next segment&lt;br /&gt;
* the midpoint of each segment is centered&lt;br /&gt;
* the color chosen is proper (need some work here)&lt;br /&gt;
* the blend is limited to only linear&lt;br /&gt;
* the coloring mode is limited to only RGB&lt;br /&gt;
&lt;br /&gt;
=== Gradient Application ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type&lt;br /&gt;
! SVG&lt;br /&gt;
! GIMP&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Bi-linear&lt;br /&gt;
|?&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Radial&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Square&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Conical (sym)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Conical (asym)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Shaped (angular)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Shaped (spherical)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Shaped (dimpled)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Spiral (cw)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|-&lt;br /&gt;
|Spiral (ccw)&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pattern ===&lt;br /&gt;
=== Filter ===&lt;br /&gt;
=== Brush ===&lt;br /&gt;
=== Symbol ===&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* [http://lists.freedesktop.org/archives/create/2007-September/000994.html My post] to the CREATE list on Sep 27, 2007.&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=27494</id>
		<title>CMake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=27494"/>
		<updated>2008-04-08T02:52:52Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Work is a on going to get this build system functional!'''&lt;br /&gt;
&lt;br /&gt;
Cmake is a cross-platform build system know to work on all major platforms we support (*nix, Windows, OSX).&lt;br /&gt;
&lt;br /&gt;
CMake is an extensible, open-source system that has many powerful features.&lt;br /&gt;
Those features include:&lt;br /&gt;
&lt;br /&gt;
* Supports complex, large build environments. CMake has been proven in several large projects (KDE, ParaView, SecondLife, Scribus)&lt;br /&gt;
* Generates native build files (e.g., makefiles on Unix; workspaces/projects on MS Visual C++). Therefore, standard tools can be used on any platform/compiler configuration.&lt;br /&gt;
* Powerful system introspection abilities including the ability to find installed include files, libraries and executables. Also the ability to test the compiler for supported features.&lt;br /&gt;
* Integrated testing system called CTest.&lt;br /&gt;
* Integrated packaging system called CPack.&lt;br /&gt;
* Easy integration with CDash and Dart dashboard servers.&lt;br /&gt;
* Powerful scripting language with simple syntax.&lt;br /&gt;
* Supports in-place and out-of-place builds. Multiple compilation trees are possible from a single source tree.&lt;br /&gt;
* Can be easily extended to add new features.&lt;br /&gt;
* CMake is open source, under a liberal BSD license.&lt;br /&gt;
* CMake operates with a cache designed to be interfaced with a graphical editor. The cache provides optional interaction to conditionally control the build process.&lt;br /&gt;
* Ability to create Mac OSX Frameworks and Application Bundles.&lt;br /&gt;
* Supports adding complex custom rules to the build.&lt;br /&gt;
&lt;br /&gt;
== How you can help ==&lt;br /&gt;
&lt;br /&gt;
We have completed the building of the CMakeLists.txt for almost everything needed.&lt;br /&gt;
We are now working on get the build to compile properly. See below Testing/Using to help.&lt;br /&gt;
&lt;br /&gt;
== SIMPLE CmakeLists.txt ==&lt;br /&gt;
    SET(libavoid_SRC&lt;br /&gt;
    connector.cpp&lt;br /&gt;
    geometry.cpp&lt;br /&gt;
    graph.cpp&lt;br /&gt;
    makepath.cpp&lt;br /&gt;
    polyutil.cpp&lt;br /&gt;
    region.cpp&lt;br /&gt;
    router.cpp&lt;br /&gt;
    shape.cpp&lt;br /&gt;
    static.cpp&lt;br /&gt;
    timer.cpp&lt;br /&gt;
    vertices.cpp&lt;br /&gt;
    visibility.cpp&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
== SIMPLE with single sub-directory Cmakelists.txt ==&lt;br /&gt;
&lt;br /&gt;
    SET(libavoid_SRC&lt;br /&gt;
    connector.cpp&lt;br /&gt;
    geometry.cpp&lt;br /&gt;
    graph.cpp&lt;br /&gt;
    makepath.cpp&lt;br /&gt;
    polyutil.cpp&lt;br /&gt;
    region.cpp&lt;br /&gt;
    router.cpp&lt;br /&gt;
    shape.cpp&lt;br /&gt;
    static.cpp&lt;br /&gt;
    timer.cpp&lt;br /&gt;
    vertices.cpp&lt;br /&gt;
    visibility.cpp&lt;br /&gt;
    #Add our subdirectory sourcelist Var&lt;br /&gt;
    ${libavoid_parameter_SRC}&lt;br /&gt;
    )&lt;br /&gt;
    # this adds a single sub-directory&lt;br /&gt;
    ADD_SUBDIRECTORY(parameter)&lt;br /&gt;
&lt;br /&gt;
== Testing/Using ==&lt;br /&gt;
&lt;br /&gt;
Experience with Scribus '''strongly''' suggests using an &amp;quot;out of source&amp;quot;build arrangement. E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir buildinkscape&lt;br /&gt;
cd buildinkscape&lt;br /&gt;
cmake ./path/to/inkscape/sources&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &lt;br /&gt;
[http://docs.scribus.net/index.php?lang=en&amp;amp;page=install4 Installing Scribus with Cmake] &amp;lt;br /&amp;gt;&lt;br /&gt;
[http://docs.scribus.net/index.php?lang=en&amp;amp;page=install5 Installing with CMake on OSX]&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=27484</id>
		<title>CMake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=27484"/>
		<updated>2008-04-08T02:49:16Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: /* How you can help */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Work is a on going to get this build system functional!'''&lt;br /&gt;
&lt;br /&gt;
Cmake is a cross-platform build system know to work on all major platforms we support (*nix, Windows, OSX).&lt;br /&gt;
&lt;br /&gt;
CMake is an extensible, open-source system that has many powerful features.&lt;br /&gt;
Those features include:&lt;br /&gt;
&lt;br /&gt;
* Supports complex, large build environments. CMake has been proven in several large projects (KDE, ParaView, SecondLife, Scribus)&lt;br /&gt;
* Generates native build files (e.g., makefiles on Unix; workspaces/projects on MS Visual C++). Therefore, standard tools can be used on any platform/compiler configuration.&lt;br /&gt;
* Powerful system introspection abilities including the ability to find installed include files, libraries and executables. Also the ability to test the compiler for supported features.&lt;br /&gt;
* Integrated testing system called CTest.&lt;br /&gt;
* Integrated packaging system called CPack.&lt;br /&gt;
* Easy integration with CDash and Dart dashboard servers.&lt;br /&gt;
* Powerful scripting language with simple syntax.&lt;br /&gt;
* Supports in-place and out-of-place builds. Multiple compilation trees are possible from a single source tree.&lt;br /&gt;
* Can be easily extended to add new features.&lt;br /&gt;
* CMake is open source, under a liberal BSD license.&lt;br /&gt;
* CMake operates with a cache designed to be interfaced with a graphical editor. The cache provides optional interaction to conditionally control the build process.&lt;br /&gt;
* Ability to create Mac OSX Frameworks and Application Bundles.&lt;br /&gt;
* Supports adding complex custom rules to the build.&lt;br /&gt;
&lt;br /&gt;
== How you can help ==&lt;br /&gt;
&lt;br /&gt;
We have completed the building of the CMakeLists.txt for almost everything needed.&lt;br /&gt;
We are now working on get the build to compile properly. See below to Build.&lt;br /&gt;
&lt;br /&gt;
== SIMPLE CmakeLists.txt ==&lt;br /&gt;
    SET(libavoid_SRC&lt;br /&gt;
    connector.cpp&lt;br /&gt;
    geometry.cpp&lt;br /&gt;
    graph.cpp&lt;br /&gt;
    makepath.cpp&lt;br /&gt;
    polyutil.cpp&lt;br /&gt;
    region.cpp&lt;br /&gt;
    router.cpp&lt;br /&gt;
    shape.cpp&lt;br /&gt;
    static.cpp&lt;br /&gt;
    timer.cpp&lt;br /&gt;
    vertices.cpp&lt;br /&gt;
    visibility.cpp&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
== SIMPLE with single sub-directory Cmakelists.txt ==&lt;br /&gt;
&lt;br /&gt;
    SET(libavoid_SRC&lt;br /&gt;
    connector.cpp&lt;br /&gt;
    geometry.cpp&lt;br /&gt;
    graph.cpp&lt;br /&gt;
    makepath.cpp&lt;br /&gt;
    polyutil.cpp&lt;br /&gt;
    region.cpp&lt;br /&gt;
    router.cpp&lt;br /&gt;
    shape.cpp&lt;br /&gt;
    static.cpp&lt;br /&gt;
    timer.cpp&lt;br /&gt;
    vertices.cpp&lt;br /&gt;
    visibility.cpp&lt;br /&gt;
    #Add our subdirectory sourcelist Var&lt;br /&gt;
    ${libavoid_parameter_SRC}&lt;br /&gt;
    )&lt;br /&gt;
    # this adds a single sub-directory&lt;br /&gt;
    ADD_SUBDIRECTORY(parameter)&lt;br /&gt;
&lt;br /&gt;
== Testing/Using ==&lt;br /&gt;
&lt;br /&gt;
Experience with Scribus '''strongly''' suggests using an &amp;quot;out of source&amp;quot;build arrangement. E.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir buildinkscape&lt;br /&gt;
cd buildinkscape&lt;br /&gt;
cmake ./path/to/inkscape/sources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References: &lt;br /&gt;
[http://docs.scribus.net/index.php?lang=en&amp;amp;page=install4 Installing Scribus with Cmake] &amp;lt;br /&amp;gt;&lt;br /&gt;
[http://docs.scribus.net/index.php?lang=en&amp;amp;page=install5 Installing with CMake on OSX]&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=26734</id>
		<title>CMake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=26734"/>
		<updated>2008-03-30T17:39:59Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &lt;br /&gt;
'''Work is a on going to get this build system functional.''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmake is a cross-platform build system know to work on all major platforms we support(*nix, Windows, OSX).&lt;br /&gt;
&lt;br /&gt;
CMake is an extensible, open-source system that has many powerful features.&lt;br /&gt;
Those features include:&lt;br /&gt;
&lt;br /&gt;
    * Supports complex, large build environments. CMake has been proven in several large projects (KDE, ParaView, SecondLife)&lt;br /&gt;
    * Generates native build files (e.g., makefiles on Unix; workspaces/projects on MS Visual C++). Therefore, standard tools can be used on any platform/compiler configuration.&lt;br /&gt;
    * Powerful system introspection abilities including the ability to find installed include files, libraries and executables. Also the ability to test the compiler for supported features.&lt;br /&gt;
    * Integrated testing system called CTest.&lt;br /&gt;
    * Integrated packaging system called CPack.&lt;br /&gt;
    * Easy integration with CDash and Dart dashboard servers.&lt;br /&gt;
    * Powerful scripting language with simple syntax.&lt;br /&gt;
    * Supports in-place and out-of-place builds. Multiple compilation trees are possible from a single source tree.&lt;br /&gt;
    * Can be easily extended to add new features.&lt;br /&gt;
    * CMake is open source, under a liberal BSD license.&lt;br /&gt;
    * CMake operates with a cache designed to be interfaced with a graphical editor. The cache provides optional interaction to conditionally control the build process.&lt;br /&gt;
    * Ability to create Mac OSX Frameworks and Application Bundles.&lt;br /&gt;
    * Supports adding complex custom rules to the build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How you can help. ==&lt;br /&gt;
&lt;br /&gt;
Right now we are going through all of the directories and sub-directories in the src folder and add a CMakeLists.txt file&lt;br /&gt;
&lt;br /&gt;
== SIMPLE CmakeLists.txt ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SET(libavoid_SRC&lt;br /&gt;
connector.cpp&lt;br /&gt;
geometry.cpp&lt;br /&gt;
graph.cpp&lt;br /&gt;
makepath.cpp&lt;br /&gt;
polyutil.cpp&lt;br /&gt;
region.cpp&lt;br /&gt;
router.cpp&lt;br /&gt;
shape.cpp&lt;br /&gt;
static.cpp&lt;br /&gt;
timer.cpp&lt;br /&gt;
vertices.cpp&lt;br /&gt;
visibility.cpp&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SIMPLE with single sub-directory Cmakelists.txt ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SET(libavoid_SRC&lt;br /&gt;
connector.cpp&lt;br /&gt;
geometry.cpp&lt;br /&gt;
graph.cpp&lt;br /&gt;
makepath.cpp&lt;br /&gt;
polyutil.cpp&lt;br /&gt;
region.cpp&lt;br /&gt;
router.cpp&lt;br /&gt;
shape.cpp&lt;br /&gt;
static.cpp&lt;br /&gt;
timer.cpp&lt;br /&gt;
vertices.cpp&lt;br /&gt;
visibility.cpp&lt;br /&gt;
#Add our subdirectory sourcelist Var&lt;br /&gt;
${libavoid_parameter_SRC}&lt;br /&gt;
)&lt;br /&gt;
# this adds a single sub-directory&lt;br /&gt;
ADD_SUBDIRECTORY(parameter)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=26724</id>
		<title>CMake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=26724"/>
		<updated>2008-03-30T17:39:11Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: Added Cmake samples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &lt;br /&gt;
'''Work is a on going to get this build system functional.''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmake is a cross-platform build system know to work on all major platforms we support(*nix, Windows, OSX).&lt;br /&gt;
&lt;br /&gt;
CMake is an extensible, open-source system that has many powerful features.&lt;br /&gt;
Those features include:&lt;br /&gt;
&lt;br /&gt;
    * Supports complex, large build environments. CMake has been proven in several large projects (KDE, ParaView, SecondLife)&lt;br /&gt;
    * Generates native build files (e.g., makefiles on Unix; workspaces/projects on MS Visual C++). Therefore, standard tools can be used on any platform/compiler configuration.&lt;br /&gt;
    * Powerful system introspection abilities including the ability to find installed include files, libraries and executables. Also the ability to test the compiler for supported features.&lt;br /&gt;
    * Integrated testing system called CTest.&lt;br /&gt;
    * Integrated packaging system called CPack.&lt;br /&gt;
    * Easy integration with CDash and Dart dashboard servers.&lt;br /&gt;
    * Powerful scripting language with simple syntax.&lt;br /&gt;
    * Supports in-place and out-of-place builds. Multiple compilation trees are possible from a single source tree.&lt;br /&gt;
    * Can be easily extended to add new features.&lt;br /&gt;
    * CMake is open source, under a liberal BSD license.&lt;br /&gt;
    * CMake operates with a cache designed to be interfaced with a graphical editor. The cache provides optional interaction to conditionally control the build process.&lt;br /&gt;
    * Ability to create Mac OSX Frameworks and Application Bundles.&lt;br /&gt;
    * Supports adding complex custom rules to the build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How you can help. ==&lt;br /&gt;
&lt;br /&gt;
Right now we are going through all of the directories and sub-directories in the src folder and add a CMakeLists.txt file&lt;br /&gt;
&lt;br /&gt;
== SIMPLE CmakeLists.txt ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SET(libavoid_SRC&lt;br /&gt;
connector.cpp&lt;br /&gt;
geometry.cpp&lt;br /&gt;
graph.cpp&lt;br /&gt;
makepath.cpp&lt;br /&gt;
polyutil.cpp&lt;br /&gt;
region.cpp&lt;br /&gt;
router.cpp&lt;br /&gt;
shape.cpp&lt;br /&gt;
static.cpp&lt;br /&gt;
timer.cpp&lt;br /&gt;
vertices.cpp&lt;br /&gt;
visibility.cpp&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SIMPLE with single sub-directory Cmakelists.txt ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SET(libavoid_SRC&lt;br /&gt;
connector.cpp&lt;br /&gt;
geometry.cpp&lt;br /&gt;
graph.cpp&lt;br /&gt;
makepath.cpp&lt;br /&gt;
polyutil.cpp&lt;br /&gt;
region.cpp&lt;br /&gt;
router.cpp&lt;br /&gt;
shape.cpp&lt;br /&gt;
static.cpp&lt;br /&gt;
timer.cpp&lt;br /&gt;
vertices.cpp&lt;br /&gt;
visibility.cpp&lt;br /&gt;
#Add our subdirectory sourcelist Var&lt;br /&gt;
${libavoid_parameter_SRC}&lt;br /&gt;
)&lt;br /&gt;
# this adds a single sub-directory&lt;br /&gt;
ADD_SUBDIRECTORY(parameter)&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=26534</id>
		<title>CMake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CMake&amp;diff=26534"/>
		<updated>2008-03-27T22:15:24Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: New page: Cmake is a cross-platform build system. And is know to work on all  Work is a on going to get this build system functional.  Here are some features of Cmake;   CMake is an extensible, open...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cmake is a cross-platform build system. And is know to work on all&lt;br /&gt;
&lt;br /&gt;
Work is a on going to get this build system functional.&lt;br /&gt;
&lt;br /&gt;
Here are some features of Cmake;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CMake is an extensible, open-source system that has many powerful features.&lt;br /&gt;
Those features include:&lt;br /&gt;
&lt;br /&gt;
    * Supports complex, large build environments. CMake has been proven in several large projects (KDE, ParaView, SecondLife)&lt;br /&gt;
    * Generates native build files (e.g., makefiles on Unix; workspaces/projects on MS Visual C++). Therefore, standard tools can be used on any platform/compiler configuration.&lt;br /&gt;
    * Powerful system introspection abilities including the ability to find installed include files, libraries and executables. Also the ability to test the compiler for supported features.&lt;br /&gt;
    * Integrated testing system called CTest.&lt;br /&gt;
    * Integrated packaging system called CPack.&lt;br /&gt;
    * Easy integration with CDash and Dart dashboard servers.&lt;br /&gt;
    * Powerful scripting language with simple syntax.&lt;br /&gt;
    * Supports in-place and out-of-place builds. Multiple compilation trees are possible from a single source tree.&lt;br /&gt;
    * Can be easily extended to add new features.&lt;br /&gt;
    * CMake is open source, under a liberal BSD license.&lt;br /&gt;
    * CMake operates with a cache designed to be interfaced with a graphical editor. The cache provides optional interaction to conditionally control the build process.&lt;br /&gt;
    * Ability to create Mac OSX Frameworks and Application Bundles.&lt;br /&gt;
    * Supports adding complex custom rules to the build.&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=AnnouncePlanning046&amp;diff=21034</id>
		<title>AnnouncePlanning046</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=AnnouncePlanning046&amp;diff=21034"/>
		<updated>2008-02-20T22:52:36Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: /* The Inkscape Community Releases Inkscape 0.46 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Planning the PR for the 0.46 release is done here...&lt;br /&gt;
&lt;br /&gt;
=Tasks=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task&lt;br /&gt;
! Performer&lt;br /&gt;
! Projected Date of completion&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| Informal PR text&lt;br /&gt;
| Collaborated on this wiki page&lt;br /&gt;
| 18th Feb 2008&lt;br /&gt;
| 50%&lt;br /&gt;
|-&lt;br /&gt;
| Formal PR text&lt;br /&gt;
| Collaborated on this wiki page&lt;br /&gt;
| 18th Feb 2008&lt;br /&gt;
| 50%&lt;br /&gt;
|-&lt;br /&gt;
| Interview&lt;br /&gt;
| [[user:Prokoudine|Prokoudine]]&lt;br /&gt;
| progressing&lt;br /&gt;
| 25%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Announcement Process=&lt;br /&gt;
# Create new news posts (using the small overview below) on all the relevant social bookmarking sites: digg, slashdot etc.&lt;br /&gt;
# Create a new Page on the Inkscape website that has the Formal Announcement on it (for linking purposes) have links  back to the socal bookmarking stories for the release.&lt;br /&gt;
# Post the official announcement to the Inkscape News on the website, the and the relevant inkscape lists (announce, user, deleveloper)&lt;br /&gt;
# Send out the informal announcement (include a link to the webpage with the formal announcement)&lt;br /&gt;
# Send out the formal announcement. (include a link to the webpage with the formal announcement)&lt;br /&gt;
&lt;br /&gt;
=Press Release Translations=&lt;br /&gt;
Once the English Press Release text has been finalised, translation can start into other languages. &lt;br /&gt;
&lt;br /&gt;
The current goal for this PR text is to have the english version finished by 18th Feb 2008.&lt;br /&gt;
&lt;br /&gt;
Please Create a new Wiki page for planning / translating the 0.46 PR in your language here:&lt;br /&gt;
&lt;br /&gt;
=Press Release Text=&lt;br /&gt;
==Small Overview==&lt;br /&gt;
Inkscape, the open source vector graphics editor has released version 0.46. Major updates include native PDF support, a paint bucket tool, color profiles, dockable dialogs, SVG Filters, Live Path Effects, and many more features and updates.&lt;br /&gt;
&lt;br /&gt;
==Informal==&lt;br /&gt;
===Inkscape Announces 0.46 Release :: http://www.inkscape.org :: Draw Freely.===&lt;br /&gt;
The Inkscape community today is announcing the release of the newest version of its open source vector graphics editor. Inkscape 0.46 is a major update that introduces native PDF support. The implementation of PDF support in Inkscape provides an easy, open source solution to editing PDF documents. &lt;br /&gt;
&lt;br /&gt;
A ton of new features and performance improvements are included in this release. Dialogs boxes now have the ability to be docked to the side. Gradients can be edited completely on-canvas now. The new Paint Bucket Tool fills bounded areas with colors and allows quick recoloring of existing objects. A new 3D Box tool helps with creating perspective-correct drawings.  A new Tweak tool gives a intuitive method for modifying node paths.  The new Live Path Effects feature creates &amp;quot;brushes&amp;quot; and attaches organic effects to paths. Improvements to color management includes support for color spaces other than just sRGB.  Most SVG Filters are now implemented, and now have a dedicated UI.&lt;br /&gt;
&lt;br /&gt;
===Download Inkscape 0.46 for Linux, Windows or Mac OS X===&lt;br /&gt;
http://inkscape.org/download/&lt;br /&gt;
&lt;br /&gt;
===For More Information===&lt;br /&gt;
Complete Release Notes for 0.46, http://wiki.inkscape.org/wiki/index.php/ReleaseNotes046 &amp;lt;br/&amp;gt;&lt;br /&gt;
Community Contributed Screenshots, http://inkscape.org/screenshots/&lt;br /&gt;
&lt;br /&gt;
===About Inkscape===&lt;br /&gt;
Inkscape is an open source drawing tool that uses the World Wide Web Consortium's (W3C) scalable vector graphics format (SVG). Some supported SVG features include basic shapes, paths, text, markers, clones, alpha blending, transforms, gradients, and grouping. In addition, Inkscape supports Creative Commons' metadata, node-editing, layers, complex path operations, text-on-path, text-in-shape, and SVG XML editing. It can also import EPS, PostScript, and most bitmap formats, and exports PNG, PS, PDF and various vector formats.&lt;br /&gt;
Inkscape's main motivation is to provide the Open Source community with a fully W3C compliant XML, SVG, and CSS2 drawing tool. Additional work includes conversion of the codebase from C/Gtk to C++/Gtkmm, emphasizing a lightweight core with powerful features added through an extension mechanism, and maintaining a friendly, open, community-oriented development process.&lt;br /&gt;
&lt;br /&gt;
==Formal==&lt;br /&gt;
===The Inkscape Community Releases Inkscape 0.46===&lt;br /&gt;
&lt;br /&gt;
New York, NY, '''INSERT DATE OF RELEASE HERE****yyyy/mm/dd****''' -- The Inkscape community today announced the&lt;br /&gt;
release of Inkscape 0.46, the newest stable version of their&lt;br /&gt;
multi-platform, open-source vector graphics editor.&lt;br /&gt;
&lt;br /&gt;
This newest Inkscape release includes a plethora of new tools and&lt;br /&gt;
improvements, beginning with native PDF support. Developed with the&lt;br /&gt;
assistance of the 2007 Google Summer of Code, and utilising the open&lt;br /&gt;
source Cairo and Poppler libraries, Inkscape 0.46 provides an easy, open&lt;br /&gt;
source tool for editing and creating PDF documents.&lt;br /&gt;
&lt;br /&gt;
The 2007 Google Summer of Code also produced the new 3D Box tool and Live Path Effects.&lt;br /&gt;
&lt;br /&gt;
As its name suggests, the 3D Box tool makes it possible to create and&lt;br /&gt;
edit the perspective of three-dimensional boxes.&lt;br /&gt;
&lt;br /&gt;
Live Path Effects can be used to create &amp;quot;brushes&amp;quot; and organic effects&lt;br /&gt;
while keeping the original paths editable. [This needs to be more&lt;br /&gt;
concrete as well.]&lt;br /&gt;
&lt;br /&gt;
The new Tweak Tool allows you to modify objects similar to molding clay.&lt;br /&gt;
&lt;br /&gt;
As well, gradient editing is now done visually and on-canvas. Gradient&lt;br /&gt;
stops are depicted as nodes, and multiple nodes can be selected and&lt;br /&gt;
moved simultaneously.&lt;br /&gt;
&lt;br /&gt;
Colour management has also been improved, with initial support for&lt;br /&gt;
colour spaces other than sRGB, including Adobe RGB and calibrated CMYK.&lt;br /&gt;
This makes it possible to use calibrated colour values, including CMYK&lt;br /&gt;
values, that are preserved across applications.&lt;br /&gt;
&lt;br /&gt;
The new Paint Bucket Tool allows bounded areas to be filled with colour&lt;br /&gt;
at the click of a mouse button. This new tool creates a closed-path&lt;br /&gt;
based on the visible canvas and is useful for quickly colouring line&lt;br /&gt;
drawings.&lt;br /&gt;
&lt;br /&gt;
The Gaussian Blur filter, introduced in Inkscape 0.45, was the first SVG&lt;br /&gt;
Filter. Inkscape 0.46 expands on this with Offset, Blend, Diffuse&lt;br /&gt;
Lighting, Specular Lighting and Turbulence primitives. There is also a&lt;br /&gt;
new, dedicated user interface for creating and altering filters based on&lt;br /&gt;
these new primitives.&lt;br /&gt;
&lt;br /&gt;
Finally, Inkscape 0.46 introduces workflow and user interface&lt;br /&gt;
improvements. Dialogue boxes can now be docked and minimised to a&lt;br /&gt;
side-panel, reducing visual clutter and making the relationship between&lt;br /&gt;
documents and interaction choices clearer, especially when working on&lt;br /&gt;
multiple documents in separate Inkscape instances.&lt;br /&gt;
&lt;br /&gt;
With 0.46 out, the Inkscape community is already working on future&lt;br /&gt;
releases, including the upcoming 0.47. Full compatibility with SVG&lt;br /&gt;
Mobile/Tiny is slated for version 0.50 and version 1.0 will include&lt;br /&gt;
complete W3C SVG 1.1 compliance.&lt;br /&gt;
&lt;br /&gt;
Inkscape users have contributed many features and ideas to the project&lt;br /&gt;
and the community invites anyone to contribute to the project. The more&lt;br /&gt;
help Inkscape gets, the sooner we reach these goals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
The Inkscape community today announced the release of the newest version of their multi platform, open source vector graphics editor, Inkscape 0.46. The latest installment of Inkscape is a feature filled release that introduces a large number of new tools and improvements, including native PDF support. Utilizing the open source libraries of Cairo and Poppler, and developed with the assistance of the Google Summer of Code, Inkscape's PDF support provides an easy, open source solution to editing PDF documents. &lt;br /&gt;
&lt;br /&gt;
Inkscape 0.46 introduces improvements that provides enhanced work flow that complements creativity. Dialogs boxes now have the ability to be docked and minimized to a side panel, enhancing the user experience when editing multiple documents in separate inkscape instances. Gradient editing can now be done visually on-canvas, with gradient stops being depicted as nodes and the abilty to select and move multiple stops simultaneously. Color management has also been improved, with initial support for color definitions that use a colorspace other than sRGB (for example Adobe RGB, or calibrated CMYK colors). This allows for the use of calibrated color spaces, including using CMYK values that are preserved across applications.&lt;br /&gt;
&lt;br /&gt;
The new Paint Bucket Tool allows bounded areas to be quickly filled in with color. It creates a closed path based on the visible canvas and is useful for quickly coloring line drawings. Additional functionality produced by the Google Summer of Code 2007 include the new 3D Box tool, the Tweak tool and Live Path Effects. The Tweak Tool allows smooth and natural change of the shape or style of objects directly on canvas. Live Path Effects can be used to create &amp;quot;brushes&amp;quot; and all kinds of organic effects, while keeping the original paths editable.&lt;br /&gt;
&lt;br /&gt;
Inkscape 0.45 introduced SVG Filters with the Gussian Blur filter primitive; Inkscape 0.46 greatly expands on this by adding the Offset, Blend, Diffuse Lighting, Specular Lighting and Turbulence primitives.  As well, there is a new dedicated user interface for creation and alteration of complex filters based on these primitives.&lt;br /&gt;
&lt;br /&gt;
The Inkscape community is now working on the upcoming 0.47 release and invites you to contribute to the project. Beyond that, Inkscape is pushing for full compatibility with SVG Mobile/Tiny by version 0.50, and full W3C SVG 1.1 compliance by Inkscape 1.0. Users have also contributed many great feature ideas in addition to this; the more help the project receives, the faster these goals and ideas can be achieved.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Download Inkscape 0.46 for Linux, Windows or Mac OS X===&lt;br /&gt;
http://inkscape.org/download/&lt;br /&gt;
&lt;br /&gt;
===For More Information===&lt;br /&gt;
&lt;br /&gt;
Complete Release Notes for 0.46, http://wiki.inkscape.org/wiki/index.php/ReleaseNotes046&amp;lt;br/&amp;gt;&lt;br /&gt;
Community Contributed Screenshots, http://inkscape.org/screenshots/&lt;br /&gt;
&lt;br /&gt;
===About Inkscape===&lt;br /&gt;
Inkscape is a multi platform, open source drawing tool that uses the World Wide Web Consortium's (W3C) scalable vector graphics format (SVG). Some supported SVG features include basic shapes, paths, text, markers, clones, alpha blending, transforms, gradients, and grouping. In addition, Inkscape supports Creative Commons' metadata, node-editing, layers, complex path operations, text-on-path, text-in-shape, and SVG XML editing. It can also import EPS, PostScript, and most bitmap formats, and exports PNG, PS, PDF and various vector formats.&lt;br /&gt;
Inkscape's main motivation is to provide the Open Source community with a fully W3C compliant XML, SVG, and CSS2 drawing tool. Additional work includes conversion of the codebase from C/Gtk to C++/Gtkmm, emphasizing a lightweight core with powerful features added through an extension mechanism, and maintaining a friendly, open, community-oriented development process.&lt;br /&gt;
&lt;br /&gt;
=Places to Announce=&lt;br /&gt;
&lt;br /&gt;
In general, for linux community receives a general informal announcement. However, for formal press channels we use the more formal 3rd-person press release.&lt;br /&gt;
&lt;br /&gt;
== Receive small overview ==&lt;br /&gt;
{|style=&amp;quot;background:#f2f2f2;&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:20%;&amp;quot;|Contact Name  &lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:30%;&amp;quot;|Who will contact / post&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:50%;&amp;quot;|Notes...&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|Digg&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|digg.com someone needs to post a short excerpt anouncing the release, and link it to inkscape.org.&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|slashdot.org&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|submit a new news item.&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|newsvine.com/&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|submit a new news item.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Receive Informal PR ==&lt;br /&gt;
=== Open Source Community ===&lt;br /&gt;
{|  style=&amp;quot;background:#f2f2f2;&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:20%;&amp;quot;|Contact Name  &lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:30%;&amp;quot;|Who will contact / post&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:50%;&amp;quot;|Notes...&lt;br /&gt;
|- style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|gnome office list&lt;br /&gt;
|&lt;br /&gt;
|gnome-office-list at gnome dot org&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|svg developers yahoo group&lt;br /&gt;
|&lt;br /&gt;
|svg-developers at yahoo dot com must join the list to send (rejon is on)&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|SVG.org&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|antoine at graougraou dot com, svg at steltenpower dot com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|svgfaq.org&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|maxdunn at siliconpublishing dot com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|svgfoundation.org&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|michael (at) svgfoundation.org&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|cairo list&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|cairo at cairographics dot org&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|gnome-list&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|gnome-announce-list at gnome dot org&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|Scribus List (mrdocs)&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|scribus at nashi dot altmuehlnet dot de&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|osnews.com&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|http://osnews.com/submit.php&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|desktoplinux.com&lt;br /&gt;
|ryanlerch &lt;br /&gt;
|http://desktoplinux.com/contactus.html&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|SVG Cafe.com &lt;br /&gt;
|ryanlerch&lt;br /&gt;
|http://www.svg-cafe.com/ join and post to news section&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|Freshmeat.net&lt;br /&gt;
|&lt;br /&gt;
|a new release has to be added to inkscape's freshmeat profile&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|gnome footnotes&lt;br /&gt;
|&lt;br /&gt;
|http://gnomedesktop.org/node/add/story&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|scale-a-vector&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|kukofka at scale-a-vector dot de http://www.scale-a-vector.de/cont.htm&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://dot.kde.org&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|http://dot.kde.org/addPostingForm&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|revelinux.com&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|theobroma at revelinux dot com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Broader Inkscape &amp;amp; Art Community ===&lt;br /&gt;
{|style=&amp;quot;background:#f2f2f2;&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:20%;&amp;quot;|Contact Name  &lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:30%;&amp;quot;|Who will contact / post?&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:50%;&amp;quot;|Notes...&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|Inkscape deviantart group&lt;br /&gt;
|ScislaC&lt;br /&gt;
|http://inkscape.deviantart.com/&lt;br /&gt;
|&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|the inkscape forum&lt;br /&gt;
| ryanlerch&lt;br /&gt;
|http://www.inkscapeforum.com/ run by microUgly&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|inkscape tutorials blog&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|http://inkscapetutorials.wordpress.com/&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|open clip art library list&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|clipart@freedesktop.org&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|open clip art library news&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|artdc.org forum&lt;br /&gt;
|johncoswell&lt;br /&gt;
|http://www.artdc.org/&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|bittbox.com - vector art blog&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|contact(at)bittbox.com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|The Daily Ubuntu - Daily Ubuntu Applications&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|http://www.contactify.com/35b54&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Receive Formal PR ==&lt;br /&gt;
{|style=&amp;quot;background:#f2f2f2;&amp;quot;&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:20%;&amp;quot;|Contact Name  &lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:30%;&amp;quot;|Who will contact / post?&lt;br /&gt;
!style=&amp;quot;text-align:left;background-color:#d3d7cf;width:50%;&amp;quot;|Notes...&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://linuxformat.co.uk/&lt;br /&gt;
|&lt;br /&gt;
|login and submit news via top of page link&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://linux-magazine.com/&lt;br /&gt;
|&lt;br /&gt;
|pr(at)linux - magazine (dot) com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://linuxjournal.com/&lt;br /&gt;
|&lt;br /&gt;
|newproducts (at) ssc (dot) com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://linuxmagazine.com/&lt;br /&gt;
|&lt;br /&gt;
|jbrockmeier at linux hyphen mag DOT com.&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://linuxuser.co.uk&lt;br /&gt;
|&lt;br /&gt;
|terry at linuxuser dot co dot uk http://linuxuser.co.uk/index.php?option=com_content&amp;amp;task=view&amp;amp;id=48&amp;amp;Itemid=40&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://www.tuxmagazine.com/&lt;br /&gt;
|&lt;br /&gt;
|editor at tuxmagazine dot com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://www.linuxworld.com/&lt;br /&gt;
|&lt;br /&gt;
|mrhinkle at linuxworld dot com tim at linuxworld dot com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://cmykmag.com/&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://www.computerarts.co.uk/&lt;br /&gt;
|&lt;br /&gt;
|dom dot hall at futurenet dot co dot uk http://www.computerarts.co.uk/contacts&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://www.theopensourcereport.com/&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|contact at theopensourcereport dot com&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://www.builderau.com.au/&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|Chris Duckett, editor at builderau dot com dot au&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|http://www.zdnet.com.au&lt;br /&gt;
|ryanlerch&lt;br /&gt;
|edit at zdnet dot com dot au &lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-style=&amp;quot;border-bottom:white 2px solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* [http://openpr.com openpr] - http://openpr.com/news/submit.html&lt;br /&gt;
* nettime-ann - http://www.nettime.org/&lt;br /&gt;
* See Kansas City infoZine: http://www.infozine.com/news/stories/op/storiesView/sid/5080/&lt;br /&gt;
* http://graphicdesign.about.com&lt;br /&gt;
* http://graphicssoft.about.com&lt;br /&gt;
* http://desktoppublishing.about.com&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CompilingUbuntu&amp;diff=421</id>
		<title>CompilingUbuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CompilingUbuntu&amp;diff=421"/>
		<updated>2005-12-20T06:55:04Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: Added Breezy info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following packages are need to compile cvs inkscape under a default Ubuntu Hoary/Breezy system:&lt;br /&gt;
   apt-get install cvs build-essential intltool libtool libgtkmm-2.4-dev libglib2.0-dev libpng12-dev libxslt1-dev libsigc++-2.0-dev libpopt-dev libgc-dev&lt;br /&gt;
&lt;br /&gt;
Inkscape requires libgc-6.4.&lt;br /&gt;
&lt;br /&gt;
Breezy doesn't require any further work.&lt;br /&gt;
&lt;br /&gt;
Hoary uses version 6.3 is provided in the Repos.  (Is there somewhere to get a .deb for 6.4?)&lt;br /&gt;
&lt;br /&gt;
To overwrite libgc-6.3 with libgc-6.4:&lt;br /&gt;
   Download gc6.4&lt;br /&gt;
   ./configure --prefix=/usr&lt;br /&gt;
   make&lt;br /&gt;
   sudo make install&lt;br /&gt;
&lt;br /&gt;
== libgc 6.5 debs for ubuntu ==&lt;br /&gt;
&lt;br /&gt;
http://inkscape.modevia.com/ap/libgc-dev_6.5-1_i386.deb&lt;br /&gt;
&lt;br /&gt;
http://inkscape.modevia.com/ap/libgc1_6.5-1_i386.deb&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=BugParty&amp;diff=339</id>
		<title>BugParty</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=BugParty&amp;diff=339"/>
		<updated>2005-09-19T19:09:50Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: added links to get current dev builds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bug Party =&lt;br /&gt;
&lt;br /&gt;
== Announcement: ==&lt;br /&gt;
&lt;br /&gt;
Bug Party Invitation&lt;br /&gt;
&lt;br /&gt;
In an effort to organize the bug tracker and the feature tracker, the Inkscape project will organize a &amp;quot;Bug Party&amp;quot; on Saturday, September 24, 2005. This is an opportunity for new contributors and non-developers to help the project.&lt;br /&gt;
&lt;br /&gt;
All day long (in the US time) the IRC channel #inkscape on server irc.freenode.org will be open, along with the correspondent Jabber room (see http://inkscape.org/discussion.php for more details). We expect to reach peak hours at 16-20 UTC on September 24 (8-12 PST) and 0-4 UTC on September 25 (16-20 PST on September 24) and guarantee presence of core Inkscape developers on those time intervals.&lt;br /&gt;
&lt;br /&gt;
For additional information, rules and information, a Wiki page is available: http://wiki.inkscape.org/cgi-bin/wiki.pl?BugParty&lt;br /&gt;
&lt;br /&gt;
We await you!&lt;br /&gt;
&lt;br /&gt;
To be distributed at:&lt;br /&gt;
* Inkscape users list;&lt;br /&gt;
* Inkscape test list;&lt;br /&gt;
* Openclipart list;&lt;br /&gt;
* Scribus list?;&lt;br /&gt;
* news item on front page (aggregated to various Planet sites).&lt;br /&gt;
&lt;br /&gt;
== Fun Stuff: ==&lt;br /&gt;
* Color logo: http://nicubunu.ro/pictures/inkscape/debug.png&lt;br /&gt;
* Black and white: http://nicubunu.ro/pictures/inkscape/debug_bw.png&lt;br /&gt;
&lt;br /&gt;
== Objectives: ==&lt;br /&gt;
* trim down the number of open bugs/enhancement request. we should find old bugs which are not existing anymore, features already implemented and not closed in the tracker, duplicates and, why not, quick fixes.&lt;br /&gt;
&lt;br /&gt;
== Rules: ==&lt;br /&gt;
* if a bug report is one release old/one month old, we can't reproduce it and don't have any follow-up from the poster, it can be closed;&lt;br /&gt;
&lt;br /&gt;
== Procedures: ==&lt;br /&gt;
* is possible to post to the tracker without login to sourceforge.net, but a login is recommended, because this improve your ability to follow-up a post;&lt;br /&gt;
* not everyone is allowed to close a bug, so people without this right should comment in the bug reasoning why the bug should be closed (is a duplicate, not happen anymore, can't be reproduced). We should define a way to work after that, alternatives are:&lt;br /&gt;
** put in a message a special string, like TOCLOSE, which can be queried later, for closure;&lt;br /&gt;
** announce the bug number on the chat channel, so it can be closed interactively;&lt;br /&gt;
** put the URL of the bug in the wiki page.&lt;br /&gt;
&lt;br /&gt;
== Tools: ==&lt;br /&gt;
* a new version of Inkscape will be needed [to determine later what version: 0.42.2, CVS build, etc.)&lt;br /&gt;
** Easy ways get builds.  &lt;br /&gt;
*** Daily Win32 builds http://www.inkscape.org/win32-snap/&lt;br /&gt;
*** Linux AutoPackages http://inkscape.modevia.com/ap/&lt;br /&gt;
** Build Your Own&lt;br /&gt;
*** Working with CVS http://wiki.inkscape.org/cgi-bin/wiki.pl?WorkingWithCVS and Compiling Inkscape http://wiki.inkscape.org/cgi-bin/wiki.pl?CompilingInkscape&lt;br /&gt;
* the Inkscape bug tracker at sf.net: http://sourceforge.net/tracker/?group_id=93438&amp;amp;atid=604306&lt;br /&gt;
* the Inkscape feature tracker at sf.net: http://sourceforge.net/tracker/?group_id=93438&amp;amp;atid=604309&lt;br /&gt;
* the Wiki page: http://wiki.inkscape.org/cgi-bin/wiki.pl?BugParty&lt;br /&gt;
* the Inkscape developer mailing list: inkscape-devel AT lists.sourceforge.net&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Compiling_Inkscape&amp;diff=559</id>
		<title>Compiling Inkscape</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Compiling_Inkscape&amp;diff=559"/>
		<updated>2005-03-16T12:55:54Z</updated>

		<summary type="html">&lt;p&gt;Verbalshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hopefully, Inkscape will compile right out of the box.  If it doesn't, well that's what this page is for.&lt;br /&gt;
&lt;br /&gt;
Jot down notes, questions, findings, tips, etc. here on things you run into.  It's a good idea to&lt;br /&gt;
make mention of what version of the code you're trying to compile, the distribution you're running,&lt;br /&gt;
and other such information that might be pertinent.&lt;br /&gt;
&lt;br /&gt;
If legitimate bugs are found or patches developed, please move them to the tracker at Sourceforge&lt;br /&gt;
rather than inlining them here.  &lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Inkscape needs automake1.7 or automake1.8 to compile NOT automake1.9 it has a bug ( link: http://sourceforge.net/mailarchive/message.php?msg_id=10288631 ) that prevents compiling of Inkscape. If you have already tried to do a $ make with automake1.9 then $ ./autogen.sh from your inkscape-cvs dir and proceed as normal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= OS &amp;amp;amp; Distribution Specific =&lt;br /&gt;
* '''Linux'''&lt;br /&gt;
** [[CompilingFedora|Fedora]]&lt;br /&gt;
** [[CompilingGentoo|Gentoo]]&lt;br /&gt;
** [[CompilingDebian|Debian]]&lt;br /&gt;
** [[CompilingYellowDog|Yellow Dog]]&lt;br /&gt;
** [[CompilingSuse|Suse]]&lt;br /&gt;
** [[CompilingSlackware|Slackware]]&lt;br /&gt;
** [[CompilingYoper|Yoper]]&lt;br /&gt;
** [[CompilingMandrake|Mandrakelinux]]&lt;br /&gt;
* [[CompilingMacOsX|Mac OS X]]&lt;br /&gt;
* [[Win32Port|Windows]]&lt;br /&gt;
* [[CompilingSPARC|SPARC]]&lt;br /&gt;
* [[CompilingSunSolaris|Sun Solaris]]&lt;br /&gt;
* [[CompilingStatic|Static Compiles]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Package Config (pkg-config) =&lt;br /&gt;
&lt;br /&gt;
If you must compile and install any of these from source, you may find an error like this when trying to&lt;br /&gt;
compile them or Inkscape itself:&lt;br /&gt;
&lt;br /&gt;
 checking for gtk+-2.0 &amp;gt;= 2.0.0  libxml-2.0 &amp;gt;= 2-2.4.24  sigc++-1.2  gtkmm-2.0... Package gtkmm-2.0 was not found in the  pkg-config search path.&lt;br /&gt;
 Perhaps you should add the directory containing `gtkmm-2.0.pc'&lt;br /&gt;
 to the PKG_CONFIG_PATH environment variable&lt;br /&gt;
 No package 'gtkmm-2.0' found&lt;br /&gt;
&lt;br /&gt;
A solution is to set the PKG_CONFIG_PATH variable as so:&lt;br /&gt;
&lt;br /&gt;
for bash:&lt;br /&gt;
     export PKG_CONFIG_PATH=/usr/local/bin/pkgconfig:/usr/lib/pkgconfig&lt;br /&gt;
for csh:&lt;br /&gt;
     setenv PKG_CONFIG_PATH /usr/local/lib/pkgconfig:/usr/lib/pkgconfig&lt;br /&gt;
&lt;br /&gt;
A good place to put this line is in your .bashrc or .cshrc file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting and Installing Source packages =&lt;br /&gt;
&lt;br /&gt;
If your distro does not have some packages available (like many don't, ie, Fedora Core 2), you must often download&lt;br /&gt;
source packages and build and install them yourself.  Actually this is not that hard, and is similar to&lt;br /&gt;
doing a Gentoo 'emerge.'&lt;br /&gt;
&lt;br /&gt;
* Usually you download a file with a name like somepackage-1.0.tar.gz.  Unpack it with&lt;br /&gt;
&lt;br /&gt;
    $ tar zxf somepackage-1.0.tar.gz&lt;br /&gt;
    or&lt;br /&gt;
    $ tar jxf somepackage-1.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
* Then 'cd' into the new directory.&lt;br /&gt;
&lt;br /&gt;
* Configure it with the command:&lt;br /&gt;
&lt;br /&gt;
    $ ./configure&lt;br /&gt;
&lt;br /&gt;
* Build it with:&lt;br /&gt;
&lt;br /&gt;
    $ make&lt;br /&gt;
&lt;br /&gt;
* As the 'root' user,  install it with:&lt;br /&gt;
&lt;br /&gt;
    $ make install&lt;br /&gt;
&lt;br /&gt;
== Boehm-GC ==&lt;br /&gt;
&lt;br /&gt;
Source: http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.4.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Note that for old 0.40CVS development versions we used the C++ version of gc, so you need to compile it with the --enable-cplusplus; we didn't include that version in any of the official releases though.]&lt;br /&gt;
&lt;br /&gt;
Also, if searching for a package for GC, the name of it is sometimes:&lt;br /&gt;
&lt;br /&gt;
* gc&lt;br /&gt;
* libgc&lt;br /&gt;
* libgc-devel&lt;br /&gt;
* boehm-gc  (on Gentoo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== libSigc++ ==&lt;br /&gt;
&lt;br /&gt;
Source: http://sourceforge.net/project/showfiles.php?group_id=1970&amp;amp;package_id=76644&lt;br /&gt;
&lt;br /&gt;
With this file, and for GlibMM and GtkMM below, it is usually desirable for us developers to&lt;br /&gt;
build this C++ library statically.  This removes a dependency that might be difficult for an&lt;br /&gt;
end-user during installation.  Configure it with:&lt;br /&gt;
&lt;br /&gt;
    ./configure --enable-static --disable-shared&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GlibMM ==&lt;br /&gt;
&lt;br /&gt;
Source: http://ftp.gnome.org/pub/GNOME/sources/glibmm/2.4/&lt;br /&gt;
&lt;br /&gt;
== GtkMM ==&lt;br /&gt;
&lt;br /&gt;
Source: http://ftp.gnome.org/pub/GNOME/sources/gtkmm/2.4/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Developer Compilation =&lt;br /&gt;
&lt;br /&gt;
Plain vanilla compilation is done as documented in INSTALL; ./autogen.sh (optionally); ./configure; make; su &amp;amp;&amp;amp; make test; make install (optional).  See INSTALL for more on that.&lt;br /&gt;
&lt;br /&gt;
But if you're going to be doing a lot of development, there's some tricks and techniques you should know,&lt;br /&gt;
to get best results.&lt;br /&gt;
&lt;br /&gt;
#  Turn off optimization&lt;br /&gt;
#  Use ccache for faster compilation&lt;br /&gt;
#  Set up a separate build directory (nice for testing both gcc and g++, or cross compiling)&lt;br /&gt;
#  Use the -j N flag to optimize for the number of processors in your machine, with N = 1 + no. proc's&lt;br /&gt;
&lt;br /&gt;
Example:  Setting up both gcc and g++ build environments (in separate tree), and using ccache for faster&lt;br /&gt;
compilations on a dual-processor machine, with no optimization, assuming /bin/bash:&lt;br /&gt;
&lt;br /&gt;
 mkdir build-gcc build-g++&lt;br /&gt;
 cvs checkout inkscape&lt;br /&gt;
 cd inkscape&lt;br /&gt;
 libtoolize --copy --force&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 cd ../build-gcc&lt;br /&gt;
 CFLAGS='-g -O0 -Wall' CC='ccache gcc' ../inkscape/configure&lt;br /&gt;
 cd ../build-g++&lt;br /&gt;
 CXXFLAGS='-g -O0 -Wall' CXX='ccache g++' ../inkscape/configure&lt;br /&gt;
 cd build-gcc &amp;amp;&amp;amp; make -j 3&lt;br /&gt;
 cd build-g++ &amp;amp;&amp;amp; make -j 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Turning off just optimization (which can produce strange results in debuggers):&lt;br /&gt;
&lt;br /&gt;
 export CC=g++&lt;br /&gt;
 export CXXFLAGS='-g -O0 -Wall'&lt;br /&gt;
 export CFLAGS='-g -O0 -Wall'&lt;br /&gt;
 ./configure&lt;/div&gt;</summary>
		<author><name>Verbalshadow</name></author>
	</entry>
</feed>